Linux 5.18 內核版本

經過兩個月的開發,Linus Torvalds 發布了 Linux 5.18 內核。 最顯著的變化包括:對過時功能進行了大規模清理,Reiserfs 文件系統被宣佈為過時,實現了用戶進程跟踪事件,添加了對Intel IBT 漏洞利用阻止機制的支持,在使用時啟用了緩衝區溢出檢測模式memcpy() 函數,添加了跟踪 fprobe 函數調用的機制,AMD Zen CPU 上任務調度程序的性能得到了改進,包含了用於控制 Intel CPU (SDS) 功能的驅動程序,一些補丁已經集成用於重組頭文件,C11標準的使用已被批准。

新版本接受了來自16206 名開發人員的2127 個修復(上一版本有來自14203 名開發人員的1995 個修復),補丁大小為108 MB(更改影響了14235 個文件,添加了1340982 行代碼,刪除了593836 行)。 44 中引入的所有更改中大約 5.18% 與設備驅動程序相關,大約 16% 的更改與更新特定於硬件架構的代碼相關,11% 與網絡堆棧相關,3% 與文件系統相關,3% 與內部內核子系統。

內核 5.18 中的主要創新:

  • 磁盤子系統、I/O 和文件系統
    • Btrfs 文件系統添加了對執行發送和接收操作時轉發壓縮數據的支持。 以前,當使用發送/接收時,發送端對以壓縮形式存儲的數據進行解壓縮,接收端在寫入之前重新壓縮。 在 5.18 內核中,使用發送/接收調用的用戶空間應用程序能夠傳輸壓縮數據而無需重新打包。 該功能的實現得益於新的 ioctl 操作 BTRFS_IOC_ENCODED_READ 和 BTRFS_IOC_ENCODED_WRITE,它們允許您直接讀取和寫入信息到盤區。

      此外,Btrfs 中的 fsync 性能也得到了改進。 添加了對整個存儲(不限於掛載點)進行重複數據刪除和重新鏈接(通過創建現有數據的鏈接來克隆文件元數據,而不實際複製它)的功能。

    • 在直接 I/O 模式下,當 fscrypt 使用內聯加密時,可以訪問加密文件,其中加密和解密操作由驅動器的控制器而不是內核執行。 對於傳統的內核加密,使用直接 I/O 訪問加密文件仍然是不可能的,因為文件的訪問繞過了內核中的緩衝機制。
    • NFS 服務器默認啟用 NFSv3,現在不需要單獨啟用,一般啟用 NFS 即可使用。 NFSv3 被認為是 NFS 的主要且始終受支持的版本,將來可能會放棄對 NFSv2 的支持。 顯著提高了讀取目錄內容的效率。
    • ReiserFS 文件系統已棄用,預計將於 2025 年刪除。 棄用 ReiserFS 將減少維護文件系統範圍的更改以支持新的掛載、iomap 和 tome API 所需的工作。
    • 對於F2FS,實現了映射掛載文件系統的用戶ID的可能性,用於將掛載的外部分區上的某個用戶的文件與當前系統中的另一個用戶進行匹配。
    • Device-mapper處理程序中計算統計的代碼已被重新​​設計,這顯著提高了dm-crypt等處理程序中統計的準確性。
    • 對於 NVMe 設備,已實現對用於完整性檢查的 64 位校驗和的支持。
    • 為 exfat 文件系統提出了一個新的掛載選項“keep_last_dots”,它可以防止文件名末尾的點被清除(在 Windows 上,文件名末尾的點默認被刪除)。
    • EXT4 提高了 fast_commit 模式的性能並提高了可擴展性。 mb_optimize_scan 掛載選項可提高大型文件系統碎片情況下的性能,並已針對具有擴展區的文件進行了調整。
    • 確保塊設備操作的子系統已停止對寫入流的支持。 該功能是針對SSD提出的,但並未普及,而且現在日常生活中還沒有支持該模式的設備,並且將來也不太可能出現。
  • 內存和系統服務
    • 一組補丁的集成已經開始,通過重構頭文件的層次結構和減少交叉依賴的數量,可以顯著減少重建內核的時間。 5.18 內核包含優化任務調度程序頭文件 (kernel/sched) 結構的補丁。 與上一個版本相比,構建內核/調度/代碼的CPU時間消耗減少了61%,實際時間減少了3.9%(從2.95秒減少到2.84秒)。
    • 內核代碼允許使用11年發布的C2011標準。 此前,添加到內核的代碼必須符合 89 年制定的 ANSI C (C1989) 規範。 將 5.18 內核構建腳本中的“--std=gnu89”選項更改為“--std=gnu11 -Wno-shift-negative-value”。 考慮了使用 C17 標準的可能性,但在這種情況下,有必要增加 GCC 的最低支持版本,而包含 C11 支持符合 GCC 版本 (5.1) 的當前要求。
    • 改進了 AMD Zen 微架構處理器的任務調度性能,該處理器為每個節點提供多個帶有本地內存通道的末級緩存 (LLC)。 新版本消除了NUMA節點之間LLC的不平衡,這在某些類型的負載下導致了性能的顯著提升。
    • 用於跟踪用戶空間中的應用程序的擴展工具。 新的內核版本增加了用戶進程創建用戶事件並將數據寫入跟踪緩衝區的能力,可以通過常見的內核跟踪實用程序(例如 ftrace 和 perf)查看這些數據。 用戶空間跟踪事件與內核跟踪事件隔離。 事件狀態可以通過 /sys/kernel/debug/tracing/user_events_status 文件查看,事件記錄和數據記錄可以通過 /sys/kernel/debug/tracing/user_events_data 進行查看。
    • 新增了追蹤(探測)函數呼叫的機制 - fprobe。 fprobe API 是基於 ftrace,但僅受限於將回呼處理程序附加到函數入口點和函數出口點的能力。與 kprobes 和 kretprobes 不同,新機制可讓您同時使用一個處理程序處理多個函數。
    • 刪除了對沒有內存管理單元 (MMU) 的舊版 ARM 處理器(ARMv4 和 ARMv5)的支持。 保留了對沒有 MMU 的 ARMv7-M 系統的支持。
    • 不再支持晶心科技處理器中使用的類 RISC NDS32 架構。 由於缺乏維護以及主 Linux 內核中缺乏對 NDS32 支持的需求(其餘用戶使用硬件製造商的專門內核構建),該代碼被刪除。
    • 默認情況下,對於 alpha 和 m68k 架構禁用支持 a.out 可執行文件格式的內核構建,這些架構繼續使用此格式。 對已棄用的 a.out 格式的支持可能很快就會從內核中完全刪除。 自 2019 年以來一直在討論刪除 a.out 格式的計劃。
    • 對於PA-RISC架構,實現了對vDSO機制(虛擬動態共享對象)的最小支持,它提供了用戶空間中可用的一組有限的系統調用,而無需上下文切換。 對 vDSO 的支持使得可以使用不可執行的堆棧啟動。
    • 增加了對Intel HFI(硬件反饋接口)機制的支持,該機制允許硬件向內核發送有關每個CPU當前性能和能效的信息。
    • 為英特爾 SDSi(軟件定義芯片)機制添加了驅動程序,該驅動程序允許您控制處理器中附加功能的包含(例如,專用指令和附加高速緩存)。 這個想法是,可以以較低的價格提供鎖定了高級功能的芯片,然後可以“額外購買”並激活附加功能,而無需更換芯片的硬件。
    • 添加了 amd_hsmp 驅動程序以支持 AMD HSMP(主機系統管理端口)接口,該接口通過一組特殊寄存器提供對處理器管理功能的訪問,這些寄存器自 Fam19h 一代以來就出現在 AMD EPYC 服務器處理器中。 例如,通過HSMP,您可以獲取功耗和溫度數據、設置頻率限制、激活各種性能增強模式以及管理內存設置。
    • io_uring 異步 I/O 接口實現 IORING_SETUP_SUBMIT_ALL 選項以在環形緩衝區中註冊一組文件描述符,並實現 IORING_OP_MSG_RING 操作以將信號從一個環形緩衝區發送到另一個環形緩衝區。
    • DAMOS(基於數據訪問監控的操作方案)機制允許您根據內存訪問的頻率來釋放內存,擴展了從用戶空間控制內存操作的能力。
    • 第三系列補丁已與頁面作品集概念的實現相集成,頁面作品集類似於復合頁面,但在改進的語義和更易於理解的工作組織方面有所不同。 使用 tomes 可以加快某些內核子系統中的內存管理速度。 在提議的補丁中,內部內存管理函數已被翻譯成大部頭,包括 get_user_pages() 函數的變體。 為在 data-ahead 代碼中創建大部頭提供支持。
    • 構建系統現在支持 USERCFLAGS 和 USERLDFLAGS 環境變量,它們可用於將附加標誌傳遞給編譯器和鏈接器。
    • 在eBPF子系統中,BTF(BPF類型格式)引擎為BPF偽代碼中的類型檢查提供信息,實現了向引用用戶空間內存區域的變量添加註釋的能力。 註釋幫助 BPF 代碼驗證系統更好地識別和驗證內存訪問。
    • 提出了一種用於存儲加載的 BPF 程序的新內存分配處理程序,它允許在加載大量 BPF 程序的情況下更有效地使用內存。
    • MADV_DONTNEED_LOCKED 標誌已添加到 madvise() 系統調用中,它提供了優化進程內存管理的方法。 該塊不再需要並且可以被內核使用。 與MADV_DONTNEED 不同,MADV_DONTNEED_LOCKED 標誌允許用於固定在RAM 中的內存頁面,當在madvise 上調用時,這些內存頁面將被逐出而不更改其固定狀態,並且在隨後訪問塊並生成“頁面錯誤”的情況下”,返回並保留綁定。 此外,還添加了一項更改,以允許在 HugeTLB 中對大內存頁使用 MADV_DONTNEED 標誌。
  • 虛擬化和安全
    • 對於x86架構,增加了對Intel IBT(Indirect Branch Tracking)命令流保護機制的支持,可以防止使用面向返回編程(ROP,Return-OrientedProgramming)的漏洞利用構建技術,其中漏洞利用是以內存中已經可用的以控制返回指令結尾的機器指令片段的調用鏈的形式形成(通常,這些是函數的結尾)。 所實現的保護方法的本質是通過在函數開頭添加特殊的 ENDBR 指令來阻止對函數體的間接跳轉,並且僅在跳轉到該指令的情況下才允許通過間接跳轉執行(通過間接調用) JMP 和CALL 必須始終位於ENDBR 指令上,該指令位於最開始的函數處)。
    • 在 memcpy()、memmove() 和 memset() 函數中啟用更嚴格的緩衝區邊界檢查,該檢查在啟用 CONFIG_FORTIFY_SOURCE 模式時在編譯時執行。 添加的更改歸結為檢查大小已知的結構的越界元素。 值得注意的是,所實現的功能將阻止至少在過去三年中已識別出的內核中所有與 memcpy() 相關的緩衝區溢出。
    • 添加了偽隨機數生成器 RDRAND 更新實現的代碼的第二部分,該代碼負責 /dev/random 和 /dev/urandom 設備的操作。 新實現的顯著之處在於統一了/dev/random 和/dev/urandom 的操作,在啟動虛擬機時增加了對隨機數流中出現重複項的保護,並切換到使用BLAKE2s 哈希函數而不是SHA1 來獲取熵混合操作。 這一變化消除了有問題的 SHA1 算法並消除了 RNG 初始化向量的覆蓋,從而提高了偽隨機數生成器的安全性。 由於BLAKE2s算法在性能方面領先於SHA1,因此它的使用也對性能產生了積極的影響。
    • 對於ARM64架構,添加了對新的指針認證算法——“QARMA3”的支持,該算法比QARMA算法更快,同時保持適當的保護級別。 該技術允許使用專門的 ARM64 指令來使用存儲在指針本身未使用的高位中的數字簽名來驗證返回地址。
    • 對於 ARM64 架構,實現了對彙編的支持,並在 GCC 12 中包含了保護模式,以防止在堆棧上發生緩衝區溢出時覆蓋函數的返回地址。 保護的本質是在將控制權轉移給函數後將返回地址保存在單獨的“影子”堆棧中,並在退出函數之前提取該地址。
    • 添加了新的密鑰環(keyring)——“機器”,包含 shim 引導加載程序中支持的機器所有者密鑰(MOK,Machine Owner Keys)。 這些密鑰可用於對啟動後內核組件(例如,內核模塊)進行數字簽名。
    • 刪除了對 TPM 的非對稱私鑰的支持,這些私鑰在舊版 TPM 中提供,存在已知的安全問題,並且在實踐中並未廣泛使用。
    • 添加了對 size_t 類型數據的整數溢出保護。 該代碼使用 size_mul()、size_add() 和 size_sub() 處理程序來安全地執行 size_t 類型的大小乘法、加法和減法。
    • 構建內核時,啟用“-Warray-bounds”和“-Wzero-length-bounds”標誌,當索引超出數組邊界以及使用零長度數組時,它們會顯示警告。
    • 為 virtio-crypto 設備添加了對使用 RSA 算法進行加密的支持。
  • 網絡子系統
    • 在網橋的實現中,添加了對端口綁定模式(鎖定模式)的支持,其中用戶只能從允許的 MAC 地址通過端口發送流量。 還添加了使用多種結構來評估 STP(生成樹協議)狀態的能力。 之前VLAN只能直接綁定STP(1:1),每個VLAN獨立管理。 新版本增加了mst_enable參數,啟用後,VLAN的狀態由MST(Multiple Spanning Trees)模塊控制,VLAN的綁定可以對應M:N模型。
    • 繼續將工作集成到網絡工具堆棧中,以跟踪丟棄數據包的原因(原因代碼)。 原因代碼在釋放與數據包關聯的內存期間發送,並允許您考慮以下情況:由於填充標頭中的字段錯誤而丟棄數據包、rp_filter 過濾器檢測到欺騙、校驗和錯誤、超出範圍等。內存、IPSec XFRM 規則的觸發、錯誤的TCP 序列號等。
    • 提供了以BPF_PROG_RUN模式從用戶空間啟動的BPF程序傳輸網絡數據包的能力,其中BPF程序在內核中運行,但將結果返回到用戶空間。 數據包使用 XDP(eXpress 數據路徑)子系統進行傳輸。 支持實時數據包處理模式,其中 XDP 處理程序可以將網絡數據包即時轉發到網絡堆棧或其他設備。 還可以創建外部流量的軟件生成器或網絡堆棧中網絡幀的替換。
    • 對於附加到網絡 cgroup 的 BPF 程序,建議使用輔助函數來顯式設置系統調用的返回值,這允許您傳達有關阻止系統調用的原因的更完整的信息。
    • XDP(eXpress 數據路徑)子系統添加了對位於多個緩衝區中的分段數據包的支持,這允許 XDP 處理巨型幀並為 XDP_REDIRECT 應用 TSO / GRO(TCP 分段卸載 / 通用接收卸載)。
    • 顯著加快了刪除網絡命名空間的過程,這在一些具有大量流量的大型系統上是必需的。
  • Оборудование
    • amdgpu 驅動程序默認啟用 FreeSync 自適應同步技術,可讓您調整屏幕上信息的刷新率,確保玩遊戲和觀看視頻時圖像流暢、無撕裂。 Aldebaran GPU 支持宣布穩定。
    • i915 驅動程序增加了對 Intel Alderlake N 芯片和 Intel DG2-G12 獨立顯卡 (Arc Alchemist) 的支持。
    • nouveau 驅動程序為 DP/eDP 接口提供更高比特率的支持,並支持 lttprs 電纜擴展(鏈路訓練可調諧 PHY 中繼器)。
    • 在armada、exynos、gma500、hyperv、imx、ingenic、mcde、mediatek、msm、omap、rcar-du、rockchip、sprd、sti、tegra、tilcdc、xen和vc4驅動程序中的drm(直接渲染管理器)子系統中,支持參數 nomodeset ,允許您在內核級別禁用視頻模式的切換以及硬件渲染加速工具的使用,僅保留與系統幀緩衝區相關的功能。
    • 添加了對ARM SoС Qualcomm Snapdragon 625/632(用於LG Nexus 5X 和Fairphone FP3 智能手機)、Samsung Exynos 850、Samsung Exynos 7885(用於Samsung Galaxy A8)、Airoha (Mediatek/EcoNet) EN7523、Mediatek mt6582 (Prestigio PMT5008) 的支持平板電腦)3G)、Microchip Lan966、瑞薩 RZ/G2LC、RZ/V2L、Tesla FSD、TI K3/AM62 和 i.MXRTxxxx。
    • 增加了對Broadcom (Raspberry Pi Zero 2 W)、Qualcomm (Google Herobrine R1 Chromebook、SHIFT6mq、Samsung Galaxy Book2)、Rockchip (Pine64 PineNote、Bananapi-R2-Pro、STM32 Emtrion emSBS、Samsung Galaxy Tab S、Prestigio PMT5008 3G 平板電腦的支持)、全志(A20-Marsboard)、Amlogic(Amediatek X96-AIR、CYX A95XF3-AIR、好創基H96-Max、Amlogic AQ222 和OSMC Vero 4K+)、Aspeed(廣達S6Q、華擎ROMED8HM3)、 Marvell MVEBU/ Armada(Ctera C200) V1 和 V2 NAS)、Mstar(DongShanPiOne、Miyoo Mini)、NXP i.MX(Protonic PRT8MM、emCON-MX8M Mini、Toradex Verdin、Gateworks GW7903)。
    • 添加了對音頻系統和編解碼器 AMD PDM、Atmel PDMC、Awinic AW8738、i.MX TLV320AIC31xx、Intel CS35L41、ESSX8336、Mediatek MT8181、nVidia Tegra234、Qualcomm SC7280、Renesas RZ/V2L、Texas Instruments TAS585M 的支持。 添加了針對 Intel AVS DSP 芯片的初始聲音驅動程序實現。 更新了對 Intel ADL 和 Tegra234 的驅動程序支持,並進行了更改以改進對 Dell、HP、Lenovo、ASUS、Samsung 和 Clevo 設備的音頻支持。

    與此同時,拉丁美洲自由軟件基金會形成了完全自由內核5.18的變體——Linux-libre 5.18-gnu,清除了包含非自由組件或代碼部分的固件和驅動程序元素,其範圍受到限制由製造商。 新版本清理了 MIPI DBI、Amphion VPU、WiFi MediaTek MT7986 WMAC、Mediatek MT7921U (USB) 和 Realtek 8852a/8852c 面板、Intel AVS 和 Texas Instruments TAS5805M 聲音芯片的驅動程序。 我們還清理了具有基於 AArch64 架構的處理器的各種 Qualcomm SoC 的 DTS 文件。 更新了 AMD GPU 驅動程序和子系統、MediaTek MT7915、Silicon Labs WF200+ WiFi、Mellanox Spectru 以太網、Realtek rtw8852c、Qualcomm Q6V5、Wolfson ADSP、MediaTek HCI UART 中的 blob 清理代碼。

來源: opennet.ru

添加評論