Linux 5.14 內核版本

經過兩個月的開發,Linus Torvalds 發布了 Linux 核心 5.14。 最顯著的變化包括:新的quotactl_fd()和memfd_secret()系統呼叫、刪除ide和raw驅動程式、cgroup的新I/O優先權控制器、SCHED_CORE任務調度模式、用於建立經過驗證的BPF程序加載器的基礎設施。

新版本包含來自15883名開發人員的2002個修復,補丁大小為69 MB(更改影響了12580個文件,新增了861501行程式碼,刪除了321654行)。 47 中引入的所有變更中,約5.14% 與裝置驅動程式相關,約14% 的變更與更新特定於硬體架構的程式碼相關,13% 與網路堆疊相關,3% 與檔案系統相關,3% 與文件系統相關。與內部核心子系統相關。

主要創新:

  • 磁盤子系統、I/O 和文件系統
    • 為 cgroup 實作了新的 I/O 優先權控制器 rq-qos,它可以控制每個 cgroup 成員產生的區塊裝置請求的處理優先權。 mq-deadline I/O 調度程式中新增了新的優先權控制器支援。
    • ext4 檔案系統實作了一個新的 ioctl 命令 EXT4_IOC_CHECKPOINT,該命令強制將日誌及其關聯緩衝區中的所有掛起事務刷新到磁碟,並覆蓋日誌在儲存中使用的區域。 這項變更是為了防止檔案系統資訊外洩而準備的。
    • 對 Btrfs 進行了效能最佳化:透過消除 fsync 執行過程中不必要的擴充屬性日誌記錄,擴充屬性的密集操作效能提升高達 17%。 此外,當執行不影響範圍的修剪操作時,會停用完全同步,這會減少 12% 的操作時間。 sysfs 中新增了一項設置,用於在檢查 FS 時限制 I/O 頻寬。 新增了 ioctl 呼叫以取消調整大小和刪除裝置操作。
    • 在XFS中,緩衝區快取的實作已重新設計,並已切換為以批次模式分配記憶體頁。 提高了緩存效率。
    • F2FS 新增了一個以唯讀模式運行的選項,並實作了壓縮區塊快取模式(compress_cache)以提高隨機讀取效能。 已實現使用 mmap() 操作壓縮映射到記憶體的檔案的支援。 為了根據遮罩選擇性地停用檔案壓縮,提出了一個新的掛載選項 nocompress。
    • exFAT 驅動程式已完成工作,以提高與某些數位相機儲存的相容性。
    • 新增了quotactl_fd()系統調用,它允許您不透過特殊裝置檔案來管理配額,而是透過指定與應用配額的檔案系統關聯的檔案描述符來管理配額。
    • 具有 IDE 介面的區塊裝置的舊驅動程式已從核心中刪除;它們早已被 libata 子系統取代。
    • 「原始」驅動程式已從核心中刪除,透過 /dev/raw 介面提供對區塊裝置的無緩衝存取。 此功能早已在使用 O_DIRECT 標誌的應用程式中實現。
  • 內存和系統服務
    • 任務調度器實作了一種新的調度模式SCHED_CORE,它允許您控制哪些進程可以在同一CPU核心上一起執行。 可以為每個進程分配一個 cookie 標識符,該標識符定義進程之間的信任範圍(例如,屬於相同使用者或容器)。 在組織程式碼執行時,調度程序可以確保一個CPU核心僅在與相同擁有者關聯的進程之間共享,這可以透過防止可信和不可信任務在同一SMT(超線程)執行緒上運行來阻止某些Spectre攻擊。
    • 對於cgroup,已經實現了對kill操作的支持,它允許您透過向虛擬檔案cgroup.kill寫入「1」來立即殺死與該群組關聯的所有進程(發送SIGKILL)。
    • 與回應分割鎖(「分割鎖」)偵測相關的擴充功能,該分割鎖在存取記憶體中未對齊的資料時發生,因為執行原子指令時,資料會跨越兩個 CPU 快取線。 這種阻塞會導致效能顯著下降,因此以前可以強制終止導致阻塞的應用程式。 新版本新增了一個核心命令列參數“split_lock_detect=ratelimit:N”,它允許您定義系統範圍內每秒鎖定操作的速率限制,超過該限制後,任何已成為分割鎖定來源的進程將被迫停止20 毫秒而不是終止。
    • cgroup頻寬控制器CFS(CFS頻寬控制器),它決定可以分配給每個cgroup多少處理器時間,實現了定義時間限制的能力,從而可以更好地調節延遲敏感的工作負載。 例如,將 cpu.cfs_quota_us 設定為 50000,將 cpu.cfs_period_us 設為 100000,將允許一組進程每 100ms 浪費 50ms 的 CPU 時間。
    • 新增了用於建立 BPF 程式載入器的初始基礎設施,這將進一步允許僅載入使用可信任數位金鑰簽署的 BPF 程式。
    • 新增了新的 futex 操作 FUTEX_LOCK_PI2,它使用單調計時器來計算逾時,該超時考慮了系統在睡眠模式下花費的時間。
    • 對於RISC-V架構,實現了對大內存頁(Transparent Huge-Pages)的支援以及在使用記憶體時使用KFENCE機制檢測錯誤的能力。
    • madvise() 系統呼叫提供了一種優化進程記憶體管理的方法,它添加了MADV_POPULATE_READ 和MADV_POPULATE_WRITE 標誌,以便在映射到讀取或寫入操作的所有記憶體頁面上產生“頁面錯誤”,而無需執行實際的讀取或寫入操作(故障前)。 使用標誌對於減少程式執行的延遲很有用,因為「頁面錯誤」處理程序會立即針對所有未指派的頁面主動執行,而無需等待對它們的實際存取。
    • kunit 單元測試系統增加了在 QEMU 環境中執行測試的支援。
    • 新增了新的追蹤器:「osnoise」用於追蹤由中斷處理引起的應用程式延遲,「timerlat」用於顯示從計時器訊號喚醒時有關延遲的詳細資訊。
  • 虛擬化和安全
    • 新增了 memfd_secret() 系統調用,以在隔離的位址空間中建立私人記憶體區域,僅對所屬進程可見,不會反映到其他進程,且核心不能直接存取。
    • 在 seccomp 系統呼叫過濾系統中,當將阻塞處理程序移至使用者空間時,可以使用單一原子操作為隔離任務建立檔案描述符,並在處理系統呼叫時傳回它。 所提出的操作解決了當訊號到達時中斷使用者空間中的處理程序的問題。
    • 新增了用於管理使用者 ID 命名空間中的資源限制的新機制,該機制將各個 rlimit 計數器綁定到「使用者命名空間」中的使用者。 這項變更解決了當一個使用者在不同容器中執行進程時使用公共資源計數器的問題。
    • 適用於ARM64 系統的KVM 管理程式新增了在來賓系統中使用MTE(MemTag,記憶體標記擴充功能)擴充功能可讓您將標記綁定到每個記憶體分配操作,並組織檢查指標的正確使用,以阻止對記憶體的利用。由於存取已釋放的記憶體區塊、緩衝區溢位、初始化先前的存取以及在當前上下文之外使用而導致的漏洞。
    • ARM64 平台的指標驗證工具現在可以為核心和使用者空間單獨配置。 該技術可讓您使用專門的 ARM64 指令,透過儲存在指標本身未使用的高位元中的數位簽章來驗證返回位址。
    • 使用者模式 Linux 新增了對使用具有虛擬 PCI 總線的 PCI 裝置驅動程式的支持,由 PCI-over-virtio 驅動程式實現。
    • 對於 x86 系統,增加了對 virtio-iommu 半虛擬化設備的支持,允許透過 virtio 傳輸發送 ATTACH、DETACH、MAP 和 UNMAP 等 IOMMU 請求,而無需模擬內存頁表。
    • 對於Intel CPU,從Skylake系列到Coffee Lake,預設會停用Intel TSX(交易同步擴充)的使用,該擴充功能提供了透過動態消除不必要的同步操作來提高多執行緒應用程式效能的工具。 由於 TAA(TSX 非同步中止)機制運作期間可能會發生透過第三方管道操縱資訊外洩的 Zombieload 攻擊,因此擴充被停用。
  • 網絡子系統
    • 整合到 MPTCP(多路徑 TCP)的核心中,MPTCP 是 TCP 協定的擴展,用於組織 TCP 連線的操作,透過與不同 IP 位址關聯的不同網路介面沿著多條路由同時傳送封包。 新版本添加了一種為IPv4 和IPv6 設定自己的流量哈希策略(多路徑哈希策略)的機制,從而可以從用戶空間確定資料包中的哪些字段(包括封裝的字段)在計算確定哈希值時將使用。資料包路徑的選擇。
    • virtio 虛擬傳輸中新增了對 SOCK_SEQPACKET 套接字(資料封包的有序且可靠傳輸)的支援。
    • SO_REUSEPORT 套接字機制的功能得到了擴展,它允許多個偵聽套接字同時連接到一個端口,以接收連接,並將傳入請求同時分佈到通過SO_REUSEPORT 連接的所有套接字上,從而簡化了多執行緒伺服器應用程式的創建。 新版本新增了在處理最初選擇的套接字時發生故障時將控制權轉移到另一個套接字的工具(解決了重新啟動服務時丟失單一連線的問題)。
  • Оборудование
    • amdgpu 驅動程式提供對代號為「Beige Goby」(Navi 6000)和「Yellow Carp」的新型 AMD Radeon RX 24 系列 GPU 的支持,並改進了對 Aldebaran GPU (gfx90a) 和 Van Gogh APU 的支援。 增加了同時使用多個 eDP 面板的能力。 對於 APU Renoir,已經實現了對使用視訊記憶體(TMZ,可信任記憶體區域)中的加密緩衝區的支援。 增加了對熱拔插顯示卡的支援。 對於 Radeon RX 6000 (Navi 2x) GPU 和較舊的 AMD GPU,預設啟用 ASPM(活動狀態電源管理)支持,之前僅針對 Navi 1x、Vega 和 Polaris GPU 啟用。
    • 對於AMD晶片來說,在HMM(Heterogeneous Memory Management)子系統的基礎上增加了對共享虛擬記憶體(SVM,共享虛擬記憶體)的支持,允許使用具有自己的記憶體管理單元(MMU,記憶體管理單元)的設備,它可以存取主記憶體。 特別是,使用HMM,可以在GPU和CPU之間組織一個共享位址空間,其中GPU可以存取進程的主記憶體。
    • 增加了對 AMD Smart Shift 技術的初步支持,該技術可動態更改配備 AMD 晶片組和顯示卡的筆記型電腦上的 CPU 和 GPU 電源設置,以提高遊​​戲、視訊編輯和 3D 渲染的效能。
    • 適用於 Intel 顯示卡的 i915 驅動程式包含對 Intel Alderlake P 晶片的支援。
    • 為 Hyper-V 虛擬圖形適配器新增了 drm/hyperv 驅動程式。
    • 新增了對 Raspberry Pi 400 一體機的支援。
    • 新增了 dell-wmi-privacy 驅動程式以支援戴爾筆記型電腦中包含的硬體攝影機和麥克風開關。
    • 對於 Lenovo 筆記型電腦,新增了 WMI 接口,用於透過 sysfs /sys/class/firmware-attributes/ 更改 BIOS 設定。
    • 擴展了對具有 USB4 介面的裝置的支援。
    • 新增了對 AmLogic SM1 TOACODEC、Intel AlderLake-M、NXP i.MX8、NXP TFA1、TDF9897、Rockchip RK817、Qualcomm Quinary MI2 和 Texas Instruments TAS2505 音效卡和編解碼器的支援。 改進了 HP 和 ASUS 筆記型電腦的音訊支援。 添加了補丁以減少音訊開始在 USB 裝置上播放之前的延遲。

來源: opennet.ru

添加評論