經過兩個月的開發,Linus Torvalds 發布了 Linux 6.6 核心。最顯著的變化包括:新的 EEVDF 任務調度程序;影子堆疊機制可防止被攻擊; OverlayFS 中的 fs-verity 支援;在 tmpfs 中實施配額和 xattr;在 XFS 中準備在線 fsck;加強對「僅限 GPL」符號導出的追蹤;支援 io_uring 中的網路套接字; kmalloc() 中的記憶體隨機化;已被 ReiserFS 棄用; NVK Vulkan 驅動程式的基元已添加到 Nouveau 中。
新版本包含來自 15291 名開發人員的 2058 個修復,補丁大小為 39 MB(更改影響了 14844 個文件,新增了 553359 行程式碼,刪除了 284012 行)。最新版本有來自 14674 名開發人員的 2016 個修復,補丁大小為 78 MB。 44 中引入的所有變更中約6.6% 與裝置驅動程式相關,約17% 的變更與更新特定於硬體架構的程式碼相關,11% 與網路堆疊相關,4% 與檔案系統相關,3% 與檔案系統相關。
內核 6.6 中的主要創新:
- 內存和系統服務
- 實作了新的任務排程器 EEVDF(最早合格虛擬截止日期優先),它取代了從核心 2.6.23 開始提供的 CFS(完全公平調度程序)調度程序。新的調度程序在選擇將執行轉移到的下一個進程時,會考慮尚未接收到足夠處理器資源或已接收到不公平的大量處理器時間的進程。在第一種情況下,控制權向進程的轉移是強制的,而在第二種情況下,控制權的轉移則相反,被推遲。舊的 CFS 調度程序使用啟發式和微調來識別需要特別關注的進程,而新的調度程序會更明確地追蹤它們,並且不需要微調。 EEVDF 有望減少 CFS 存在調度問題的任務的延遲。
- 對「僅限 GPL」類別的內部符號的處理進行了更改,旨在使專有模組對 GPL 層的使用複雜化,以繞過對僅允許 GPL 許可證下的程式碼的核心子系統的存取限制。 symbol_get() 函數可防止專有模組搜尋標記為僅 GPL 的符號,反之亦然,GPL 模組將無法找到專有模組導出的符號。
- 新增了針對未綁定工作佇列的附加設置,以提高具有多個三級 (L3) 快取的大型系統上處理器快取重用的效率。核心還包含一個實用程式tools/workqueue/wq_dump.py,用於檢查工作佇列的目前配置。
- io_uring 子系統增加了網路套接字特定操作和命令的初始支援。新增了 sysctl io_uring_disabled 以在系統範圍內停用 io_uring。 io_uring 也顯著加速了非同步模式下的直接 I/O。更改後執行 I/O 操作時的吞吐量增加和延遲減少達到 37%。
- 對於PA-RISC架構,已經實作了BPF的JIT編譯器。
- 在/sys/devices/system/cpu/smt/control 設定中新增了對數字參數的支持,該設定確定每個CPU 核心可用的執行緒數(先前僅支援「on」和「off」值來啟用或停用)對稱多線程支援)。新功能可用於某些支援熱插拔 SMT 的 PowerPC 處理器,以便在運行期間選擇性地在特定核心上啟用 SMT。
- 繼續從 Rust-for-Linux 分支遷移與使用 Rust 語言作為開發驅動程式和核心模組的第二語言相關的變更(Rust 支援預設不處於活動狀態,並且不會導致將 Rust 包含在內核所需的程序集相依性)。已過渡到使用 Rust 1.71.1 和 bindgen 0.65.1 版本。 “Zeroable”特性已經實現。新增了程式巨集“貼上!”和“#[導出(可歸零)]”。確保與“#[pin_data]”的兼容性。新增了初始化函數「{,pin_}init_array_from_fn()」和方法「{,pin_}chain」。 「類型」模組的功能已擴充。 kunit 單元測試框架新增了從 Rust 文件執行測試的功能。
- 新增了「eventfs」子系統,它允許您透過消除用於表示檔案系統中追蹤點的不必要結構的儲存來顯著減少追蹤系統中的記憶體消耗。以前,無論追蹤用途如何,都會為所有追蹤點創建類似的結構。使用 eventfs,可以僅在需要時動態建立此類結構。
- perf 實用程式的功能已擴充。
- /proc/pid/smaps 檔案中添加了信息,用於診斷合併相同內存頁面的機制(KSM,內核同頁合併)的有效性。
- Frontswap API 已被刪除,允許將交換分區放置在無法直接尋址的記憶體中,並且不提供有關可用空間可用性的操作資訊。此API僅在zswap中使用,因此決定直接在zswap中使用該功能,去除不必要的層。
- 對於 RISC-V 架構,增加了對從用戶空間存取效能計數器的支持,以及在超出 4GB 邊界的區域發生故障後放置核心轉儲的能力。
- 新增了對 ARM SME(可擴展矩陣擴展)指令的初始支援。
- 已實現在LoongArch架構的系統上使用偵錯工具KDB、KGDB、kcov、KFENCE和KASAN的能力。
- 在GitLab持續整合系統中增加了對核心測試文件的支持,用於圖形驅動程式的開發。
- 磁盤子系統、I/O 和文件系統
- OverlayFS 檔案系統新增了將fs-verity 雜湊值儲存在overlay.verity 擴充屬性(xattr) 中的支持,該屬性可用於使用加密雜湊值和金鑰來驗證OverlayFS 底層中檔案的完整性和真實性。因此,OverlayFS 現在包含 Composefs 專案以附加到 OverlayFS 和 EROFS 檔案系統的形式運作所需的所有變更。
- XFS 檔案系統已準備好使用 fsck 公用程式線上檢查和修正已識別的問題,而無需卸載檔案系統。此外,XFS 實現了在頁面快取中使用大型作品集的功能,並添加了一些相關優化,顯著提高了某些類型工作負載的效能。
- tmpfs 檔案系統新增了對使用者擴充屬性(使用者 xattrs)、直接 I/O 以及使用者和群組配額的支援。目錄偏移量已穩定,解決了透過 NFS 導出 tmpfs 的問題。
- FSCONFIG_CMD_CREATE_EXCL 標誌已新增至掛載控制 API 中,以提高安全性,防止跨多個掛載點共用超級區塊(防止一個分割區附加到多個掛載點)。 mount 實用程式提供“--exclusive”選項來啟用此標誌。
- VFS 子系統中新增了對具有存取和變更時間(atime、mtime)的參數線上變更的支援。以前,時間資料的反映有一定的延遲,這使得在 NFS 等系統中很難追蹤快取中資料的新鮮度(由於檢測檔案變更的延遲,系統可能會錯誤地認為資料已更新)快取中的內容是當前的)。新功能適用於 Btrfs、Ext4、tmpfs 和 XFS。
- Btrfs 已棄用在建置時透過 BTRFS_FS_CHECK_INTEGRITY 參數啟用的內建完整性檢查機制。指定的機制不受支援,不再進行測試,並且會對 CPU 和記憶體造成額外的負載。此外,Btrfs也最佳化了新的FS驗證碼(scrub)的效能。
- 在Ext4檔案系統中,新增了定期超級區塊更新檢查,並且在寫入檔案末尾時加速了記憶體分配操作。
- FUSE 子系統增加了對 btime(「出生時間」)屬性的支持,該屬性決定 inode 建立的時間。
- 禁止更改符號連結的權限。
- 新增了 fchmodat2() 系統調用,它與 fchmodat() 系統調用的不同之處在於使用附加參數來指定標誌。在這些標誌中,目前僅支援 AT_SYMLINK_NOFOLLOW 和 AT_EMPTY_PATH,無需解決方法即可在 libc 函數 fchmodat() 中實作禁止取消引用符號連結以及在指定空路徑時使用檔案描述符的能力。
- EROFS(可擴展唯讀檔案系統)檔案系統專為唯讀分割區而設計,現在支援 Deflate 壓縮演算法。為了加速擴展屬性的搜索,使用機率布隆過濾器結構。
- 新增了 CONFIG_BUFFER_HEAD 設置,它允許您在不使用 buffer_head 結構的情況下建立核心。在不使用 buffer_head 進行建置時,可以使用區塊裝置和一些檔案系統,例如 xfs、btrfs、cramfs、erofs 和 squashfs。
- ublk 區塊裝置驅動程式可讓您將特定邏輯移至使用者空間中的進程端,它新增了對分區儲存裝置的支援(將區塊或磁區群組劃分為區域,在更新區域時只允許順序新增資料)整個塊組)。
- ReiserFS 檔案系統實作已從支援變為已過時。 ReiserFS 計劃於 2025 年終止支援。使 ReiserFS 過時的原因包括該檔案系統維護的停滯、2038 年未解決的問題、缺乏容錯能力以及希望減少維護與支援新的掛載 API 相關的檔案系統常見更改的勞動力成本、iomap 和作品集)。
- NFS伺服器實現了NFSv4的寫入委託機制,提高了檔案寫入快取的效率,並減少流量。已啟用對 NFS 4.2 中定義的 READ_PLUS 操作的支援。
- Ceph 檔案系統增加了對 fscrypt 的支援。
- 虛擬化和安全
- 新增了影子堆疊機制的實現,它允許您阻止許多漏洞利用的操作,使用英特爾處理器的硬體功能來防止在堆疊上發生緩衝區溢位時覆蓋函數的返回位址。保護的本質是,控制權轉移給函數後,返回位址不僅被處理器儲存在常規堆疊中,而且還儲存在一個單獨的「影子」堆疊中,無法直接更改。在函數退出之前,從影子堆疊中彈出返回地址,並與主堆疊中的返回地址進行檢查。不匹配的位址會導致異常的生成,從而阻止漏洞利用成功覆蓋主堆疊上的位址的情況。硬體影子堆疊僅在 64 位元版本中受支持,軟體模擬在 32 位元版本中使用。
- 新增了對使用啟用了CFI(控制流完整性)保護模式的Clang 編譯器進行構建的支持,該模式可阻止由於使用更改存儲在內存中的函數指針的漏洞而導致的對正常執行順序(控制流)的違反。
- 對於 RISC-V 架構,啟動時記憶體中核心放置的隨機化已啟用。
- SECCOMP_USER_NOTIF_FD_SYNC_WAKE_UP 標誌已新增至 seccomp() 系統呼叫中,該標誌可讓您以同步模式處理來自受監視進程的事件,以便更有效地操作任務排程器。
- kmalloc() 函數提供slab 快取的隨機化,使得利用核心中的漏洞變得更加困難。
- 與啟用 SELinux 強制存取控制系統相關的選項中已刪除美國國家安全局的提及。由於該專案已經在社區的支持下開發了 20 年,並得到獨立維護者的支持,因此決定在 Kconfig 的註釋和文件中改用“SELinux”名稱,而不是“NSA SELinux”(例如,SECURITY_SELINUX 組件參數的說明從“NSA SELinux 支援”更改為“SELinux 支援”)。
- userfaultfd() 系統呼叫現在具有 UFFDIO_POISON 操作,允許將記憶體頁標記為已中毒,這可用於遷移損壞的記憶體頁。 虛擬機 從一個系統到另一個系統。
- VFIO 子系統中新增了新的字元介面 (/dev/vfio/devices/vfioX),用於管理 VFIO 設備,允許使用者直接開啟設備文件,而無需存取舊的群組介面 /dev/vfio/$groupID。
- В 服務器 NFS 已停止支援使用 DES 和 3DES 演算法的舊式 Kerberos 加密類型。
- 在 Hyper-V 虛擬機器管理程式環境中執行時,新增了使用 AMD SEV-SNP(安全嵌套分頁)和 Intel TDX(可信任網域擴充)技術保護的來賓系統的支援。
- 以「W=1」模式建構核心時,編譯器預設發出「-Wformat-overflow」、「-Wformat-truncation」、「-Wstringop-overflow」和「-Wrestrict」警告。任何版本都會啟用“-Wenum-conversion”警告。
- 網絡子系統
- AF_XDP(eXpress 資料路徑)位址族的實作已擴展為可處理儲存在多個緩衝區中的資料包(例如,一個緩衝區可能包含資料包標頭和第二個數據,或者一系列緩衝區可能包含大型乙太網路巨型資料包)幀)。使用 AF_XDP 套接字的程式現在可以同時從多個緩衝區接收和傳輸資料包。
- BPF 子系統增加了對 IPv4 和 IPv6 封包碎片整理的支援以及過濾碎片封包的功能。
- BPF 中新增了一個新的處理程序 update_socket_protocol,以允許 BPF 程式更改新套接字所要求的協定。例如,BPF 程式可以透明地用 MPTCP(多路徑 TCP)取代 TCP,以最佳化應用程式流量。 BPF 還新增了對透過 MPTCP 中的不同流控制封包路由的支援。
- 實驗性開發標誌已從 ksmbd 模組中刪除,該模組提供基於 SMB3 協定的檔案伺服器的核心級實作。新增了對組合讀取操作的支援(「讀取複合」查詢)。
- Оборудование
- 透過為 NVIDIA 顯示卡實作 Vulkan 圖形 API,對 DRM 子系統(直接渲染管理器)進行了更改,這是開放式 NVK 驅動程式有效運作所必需的。 Nouveau 的 DRM 驅動程式最初是為實現 OpenGL 而設計的,因此它缺乏 Vulkan 驅動程式有效工作所需的原語,例如對同步物件和虛擬地址空間管理的支援。
- AMDGPU 驅動程式支援 SDMA 6.1.0、HDP 6.1、SMUIO 14.0、PSP 14.0、IH 6.1 和 GFX 9.4.3。重新設計了載入 PSP(平台安全處理器)韌體的程式碼。擴展了對 FreeSync 自適應同步技術的支援(增加了對 Freesync Panel Replay V2 的支援)。
- i915 驅動程式繼續支援 Intel Meteor Lake 晶片。改進了對 HDCP(高頻寬數位內容保護)複製保護技術的支援。與顯示器互動的程式碼已重新設計。
- 在建置階段停用微碼載入的選項 - MICROCODE_INTEL 和 MICROCODE_AMD - 已從 Kconfig 中刪除。現在,核心始終使用 x86 系統的微代碼載入程式碼構建,但可以透過指定「dis_ucode_ldr」核心參數來停用實際的微代碼載入。
- 在音頻子系統中添加了控制透過 IIO(工業 I/O)子系統連接的音頻設備的功能。
- 新增了對 Intel LunarLake、Intel ArrowLake 和 AMD ACP5x 音訊介面、Cirrus Logic CS42L43、Realtek RT1017 和 TI TAS2781 編解碼器以及 Cirrus Logic CS35L56 和 winic aw88261 擴大機的支援。新增了對 AMD Van Gogh ASoC 的支援。
- 新增了 USB MIDI 2.0 Gadget 驅動程序,可模擬綁定到 ALSA UMP rawmidi 裝置的 USB MIDI 2.0 介面。
- 新增了對 Broadcom ASP 2.0 和 Marvell 88Q2XXX 乙太網路控制器的支援。
- 新增對維信諾R66451、冠顯TL050HDV35、KD070FHFID015、Inanbo T28CP45TN89和EDT ET028013DMA面板、龍芯顯示控制器和Azoteq IQS7222D/IQS7210A/7211A控制器的支援。
- 增加了對 ARM SoC Qualcomm SM4450 (Snapdragon 4 Gen 2)、TI AM62P5、Intel Agilex5、Qualcomm ipq5018、AN400 (Amlogic T7) 的支持
- 新增了對 ARM 主機板 Samsung Galaxy Tab 3 8.0、FriendlyElec NanoPC T6、Amlogic A311D2、Khadas Vim4、小米 SM7125、Facebook Yosemite 4、Orange Pi Zero 3、Radxa ROCK 4SE 的支援。
同時,拉丁美洲自由軟體基金會形成了完全自由的核心6.6版本——Linux-libre 6.6-gnu,清除了包含非自由元件或程式碼部分的韌體和驅動程式的元素,其範圍受到限制由製造商。在版本6.6 中,各種驅動程式和子系統中的blob 清理代碼已更新,例如TI 千兆位元RU 乙太網路、MediaTek 792x wifi、Cirrus Logic cs42l43 mfd、cs35l56 HD-audio 和aw88261 SoC 驅動程式中的blob 清理程式中的blob 清理程式中的blob 清理程式中的blob 清理程式中的blob 清理程式代碼。清理了 Aarch64 架構的 dts 檔案中的 blob 名稱。刪除了新的 ivpu 驅動程式、藍牙驅動程式、觸控螢幕驅動程式和 Qualcomm Venus V4L2 編碼器/解碼器中的斑點。
來源: opennet.ru
