Linux 5.12 內核版本

經過兩個月的開發,Linus Torvalds 發布了 Linux 核心 5.12。最顯著的變化包括:Btrfs 中對分區塊設備的支援、映射檔案系統用戶 ID 的能力、清理舊版 ARM 架構、NFS 中的「急切」寫入模式、用於從快取確定檔案路徑的 LOOKUP_CACHED 機制、對BPF 中原子指令的支援、用於使用記憶體時識別錯誤的偵錯系統KFENCE、在網路堆疊中的單獨核心執行緒中執行的NAPI 輪詢模式、ACRN 管理程式、在任務中動態更改搶佔模型的能力在Clang 中建構時調度程序和對LTO 最佳化的支援。

新版本包含來自14170 (15480) 開發人員的1946 個(先前版本中為1991)個修復,補丁大小為38 MB(更改影響了12102 (12090) 個文件,添加了538599 (868025) 行程式碼,333377 ( 261456) 行程式碼行被刪除)。 43 中引入的所有變更中約5.12% 與裝置驅動程式相關,約17% 的變更與更新特定於硬體架構的程式碼相關,12% 與網路堆疊相關,5% 與檔案系統相關,4% 與檔案系統相關。與內部核心子系統相關。

主要創新:

  • 磁盤子系統、I/O 和文件系統
    • 已實作為已安裝的檔案系統對應使用者 ID 的功能(您可以將已安裝的外部分割區上的一個使用者的檔案與目前系統上的另一個使用者對應)。 FAT、ext4 和 XFS 檔案系統支援映射。所提出的功能使得在不同用戶之間和不同電腦上共享檔案變得更加容易,包括將在systemd-homed 便攜式主目錄機制中使用映射,允許用戶將其主目錄移動到外部媒體並在不同電腦上使用它們,映射不匹配的用戶 ID。另一個有用的應用程式是組織從外部主機提供對檔案的共用訪問,而無需實際更改有關檔案系統中檔案所有者的資料。
    • LOOKUP_CACHED 補丁已被採用到核心中,允許操作僅根據快取中的可用資料來無阻塞地確定使用者空間的檔案路徑。 LOOKUP_CACHED 模式在 openat2() 呼叫中透過傳遞 RESOLVE_CACHED 標誌來激活,其中資料僅從快取提供,如果路徑確定需要存取驅動器,則傳回 EAGAIN 錯誤。
    • Btrfs 檔案系統增加了對分區塊設備(硬碟或 NVMe SSD 上的設備,其中儲存空間被劃分為組成區塊或扇區組的區域,僅允許順序添加資料)的初始支持,更新整個區塊組)。在唯讀模式下,實作了對元資料和資料小於頁面(子頁面)的區塊的支援。
    • 在F2FS檔案系統中,新增了選擇演算法和壓縮等級的功能。增加了對 LZ4 演算法高級壓縮的支援。實作了 checkpoint_merge 安裝選項。
    • 已實作新的 ioctl 指令 FS_IOC_READ_VERITY_METADATA,用於從受 fs-verity 保護的檔案讀取元資料。
    • NFS 用戶端實作「eager」寫入模式(writes=eager),啟用後,對檔案的寫入操作將立即傳輸到伺服器,繞過頁面快取。此模式可讓您減少記憶體消耗,提供有關檔案系統中可用空間結束的資訊的即時接收,並且在某些情況下可以實現更高的效能。
    • CIFS (SMB) 中新增了新的掛載選項:acregmax 用於控制檔案緩存,acdirmax 用於控制目錄元資料快取。
    • 在XFS中,啟用了多執行緒配額檢查模式,加速了fsync執行,並準備了growfs程式碼來實現減少檔案系統大小的功能。
  • 內存和系統服務
    • 新增了DTMP(動態熱功率管理)子系統,可讓您根據設定的通用溫度限制動態調節不同裝置的功耗。
    • 使用 Clang 編譯器建立核心的能力已經實現,其中包括連結階段的最佳化(LTO,連結時間最佳化)。 LTO 最佳化的不同之處在於考慮了建置過程中涉及的所有文件的狀態,而傳統最佳化模式分別優化每個文件,並且不考慮呼叫其他文件中定義的函數的條件。例如,使用LTO,可以對其他文件中的函數進行內聯部署,未使用的程式碼不包含在可執行檔中,類型檢查和一般最佳化在整個專案層級進行。 LTO 支援目前僅限於 x86 和 ARM64 架構。
    • 如果在建置核心時指定了 PREEMPT_DYNAMIC 設置,則可以在啟動階段 (preempt=none/volull) 或透過 debugfs (/debug/sched_debug) 在任務排程器中選擇搶佔模式 (PREEMPT)。以前,只能在組裝參數層級設定擠出模式。此變更允許發行版在啟用PREEMPT 模式的情況下發布內核,該模式為桌面提供最小的延遲,但會造成少量吞吐量損失,並且如有必要,可以回退到PREEMPT_VOLUNTARY(桌面的中間模式)或PREEMPT_NONE (為伺服器提供最大吞吐量) 。
    • BPF 子系統增加了對原子操作 BPF_ADD、BPF_AND、BPF_OR、BPF_XOR、BPF_XCHG 和 BPF_CMPXCHG 的支援。
    • BPF 程式能夠使用具有可變偏移量的指標存取堆疊上的資料。例如,如果以前您只能使用常數元素索引來存取堆疊上的數組,那麼現在您可以使用可變元素索引。 BPF 驗證者僅在現有邊界內執行存取控制。由於擔心利用推測性程式碼執行漏洞,此功能僅適用於特權程式。
    • 新增了將 BPF 程式附加到與使用者空間中可見的追蹤事件無關的裸追蹤點的功能(不保證此類追蹤點的 ABI 保留)。
    • 已經實現了對CXL 2.0(Compute Express Link)總線的支持,該總線用於組織CPU和存儲設備之間的高速交互(允許您使用外部存儲設備作為RAM或永久存儲器的一部分,就好像這個存儲器通過CPU中的標準記憶體控制器連接)。
    • 新增了 nvmem 驅動程序,用於從 Linux 無法直接存取的韌體保留記憶體區域檢索資料(例如,只能由韌體物理存取的 EEPROM 內存,或只能在早期啟動階段存取的資料)。
    • 對「oprofile」分析系統的支援已被刪除,該系統並未廣泛使用,並已被更現代的效能機制所取代。
    • io_uring 非同步 I/O 介面提供與控制記憶體使用的 cgroup 的整合。
    • RISC-V架構支援NUMA系統,以及kprobes和uprobes機制。
    • 新增了使用 kcmp() 系統呼叫的功能,無論進程狀態快照(檢查點/復原)的功能為何。
    • 多年來未在實踐中使用的 EXPORT_UNUSED_SYMBOL() 和 EXPORT_SYMBOL_GPL_FUTURE() 巨集已被刪除。
  • 虛擬化和安全
    • 新增了KFence(內核電子圍欄)保護機制,該機制可以捕獲使用記憶體時的錯誤,例如緩衝區溢位和釋放記憶體後的存取。與 KASAN 偵錯機制不同,KFence 子系統的特點是運行速度快、開銷低,它允許您捕獲僅在工作系統上或長期運行期間出現的記憶體錯誤。
    • 增加了對 ACRN 虛擬機器管理程序的支持,編寫時著眼於即時任務的準備情況以及在關鍵任務系統中使用的適用性。 ACRN 提供最小的開銷,確保與裝置互動時的低延遲和足夠的回應能力。支援CPU資源、I/O、網路子系統、圖形和聲音操作的虛擬化。 ACRN 可用於在電子控制單元、儀表板、汽車資訊系統、消費性物聯網設備和其他嵌入式技術中執行多個隔離的虛擬機器。 ACRN 支援兩種類型的來賓系統:特權服務 VM,用於管理系統資源(CPU、記憶體、I/O 等);以及使用者 VM,可以運行 Linux、Android 和 Windows 發行版。
    • IMA(完整性測量架構)子系統維護一個雜湊資料庫,用於檢查檔案和相關元資料的完整性,現在可以檢查核心本身資料的完整性,例如追蹤 SELinux 規則的變更。
    • KVM 管理程式中新增了攔截 Xen 超級呼叫並將其轉發到在用戶空間中運行的模擬器的功能。
    • 新增了使用 Linux 作為 Hyper-V 虛擬機器管理程式的根環境的功能。根環境可以直接存取硬體並用於運行來賓系統(類似於 Xen 中的 Dom0)。到目前為止,Hyper-V(Microsoft Hypervisor)僅在來賓環境中支援 Linux,但虛擬機器管理程式本身是從基於 Windows 的環境控制的。
    • 新增了對 eMMC 卡內聯加密的支持,可讓您使用磁碟機控制器內建的加密機制來透明地加密和解密 I/O。
    • 對核心中未使用的 RIPE-MD 128/256/320 和 Tiger 128/160/192 雜湊的支持,以及由 ChaCha20 演算法取代的 Salsa20 流密碼的支持已從加密子系統。 blake2 演算法已更新以實現 blake2s。
  • 網絡子系統
    • 新增了將網路裝置的 NAPI 輪詢處理程序移至單獨的核心執行緒的功能,這可以提高某些類型的工作負載的效能。以前,輪詢是在軟中斷上下文中執行的,並且不被任務調度程序覆蓋,這使得很難執行細粒度的最佳化以實現最大效能。在單獨的內核線程中執行允許從用戶空間觀察輪詢處理程序,將其附加到各個 CPU 內核,並在調度任務切換時將其考慮在內。為了在 sysfs 中啟用新模式,建議使用 /sys/class/net//threaded 參數。
    • 整合到 MPTCP(多路徑 TCP)的核心中,MPTCP 是 TCP 協定的擴展,用於組織 TCP 連線的操作,透過與不同 IP 位址關聯的不同網路介面沿著多條路由同時傳送封包。新版本增加了為某些執行緒分配優先權的功能,例如,可以組織備份執行緒的工作,僅在主執行緒出現問題時才開啟備份執行緒。
    • IGMPv3 增加了對 EHT(顯式主機追蹤)機制的支援。
    • Netfilter 的封包過濾引擎提供了擁有某些資料表以獲得獨佔控制的能力(例如,後台防火牆程序可以取得某些資料表的所有權,從而防止其他人幹擾它們)。
  • Оборудование
    • 我們清理了過時和未維護的 ARM 平台。 efm32、picoxcell、prima2、tango、u300、zx 和 c6x 平台的程式碼及其相關驅動程式已被刪除。
    • amdgpu 驅動程式提供了基於 Sienna Cichlid GPU(Navi 22、Radeon RX 6xxx)的卡片進行超頻 (OverDrive) 的功能。新增了第 16 代至第 8 代 DCE(顯示控制器引擎)的 FP11 像素格式的支援。對於 GPU Navy Flounder (Navi 21) 和 APU Van Gogh,已實現重設 GPU 的功能。
    • Intel 顯示卡的 i915 驅動程式實作了 i915.mitigations 參數來停用隔離和保護機制,以提高效能。從Tiger Lake開始的晶片,都包含了對VRR(可變速率刷新)機制的支持,它可以讓你自適應地改變顯示器的刷新率,以確保遊戲過程中的流暢和無間隙。支援 Intel Clear Color 技術,以提高色彩準確性。新增了對 DP-HDMI 2.1 的支援。已經實現了控制 eDP 面板背光的能力。對於支援 LSPCON(電平轉換器和協定轉換器)的 Gen9 GPU,啟用 HDR 支援。
    • nouveau 驅動程式增加了基於 GA100 (Ampere) 架構的 NVIDIA GPU 的初步支援。
    • msm 驅動程式增加了對 SDM (Snapdragon) 508、509 和 512 晶片中使用的 Adreno 630、636 和 660 GPU 的支援。
    • 新增了對 Sound BlasterX AE-5 Plus、Lexicon I-ONIX FW810s 和 Pioneer DJM-750 音效卡的支援。增加了對 Intel Alder Lake PCH-P 音訊子系統的支援。已實現對連接和斷開音訊連接器的軟體模擬的支持,以便在用戶空間中調試處理程序。
    • 增加了對 64 年至 1996 年生產的 Nintendo 2003 遊戲機的支援(過去將 Linux 移植到 Nintendo 64 的嘗試尚未完成,並被歸類為 Vaporware)。為近二十年未發布的過時平台創建新移植的動機是希望刺激模擬器的發展並簡化遊戲的移植。
    • 新增了 Sony PlayStation 5 DualSense 遊戲控制器的驅動程式。
    • 新增了對 ARM 板、裝置和平台的支援:PineTab、Snapdragon 888 / SM8350、Snapdragon MTP、Two Beacon EmbeddedWorks、Intel eASIC N5X、Netgear R8000P、Plymovent M2M、Beacon i.MX8M Nano、NanoPi4M Nano。
    • 增加了對 Purism Librem5 Evergreen、Xperia Z3+/Z4/Z5、ASUS Zenfone 2 Laser、BQ Aquaris X5、OnePlus6、OnePlus6T、Samsung GT-I9070 智慧型手機的支援。
    • 為 Broadcom VK 加速器板(例如 Valkyrie 和 Viper PCIe 板)添加了 bcm-vk 驅動程序,可用於將音訊、視訊和影像處理操作以及加密相關操作卸載到單獨的裝置。
    • 增加了對 Lenovo IdeaPad 平台的支持,能夠控制持續充電和鍵盤背光。還提供對 ThinkPad 平台 ACPI 配置文件的支持,並能夠控制功耗模式。新增了 Lenovo ThinkPad X1 Tablet Gen 2 HID 子系統的驅動程式。
    • 新增了 ov5647 驅動程序,支援 Raspberry Pi 的相機模組。
    • 增加了對 RISC-V SoC FU740 和 HiFive Unleashed 板的支援。還新增了適用於 Kendryte K210 晶片的新驅動程式。

來源: opennet.ru

添加評論