Linux 6.1 內核版本

經過兩個月的開發,Linus Torvalds 發布了 Linux 核心 6.1。 最顯著的變化包括:支援以 Rust 語言開發驅動程式和模組、確定已使用記憶體頁的機制現代化、BPF 程式的特殊記憶體管理器、診斷記憶體問題的系統 KMSAN、KCFI(核心控制) -Flow Integrity)保護機制,引入Maple結構樹。

新版本包含來自 15115 名開發人員的 2139 個修復,補丁大小為 51 MB,比內核 2 和 6.0 的補丁大小大約小 5.19 倍。 這些變更影響了 13165 個文件,增加了 716247 行程式碼,刪除了 304560 行程式碼。 45 中引入的所有變更中約6.1% 與裝置驅動程式相關,約14% 的變更與更新特定於硬體架構的程式碼相關,14% 與網路堆疊相關,3% 與檔案系統相關,3% 與檔案系統相關。與內部核心子系統相關。

內核 6.1 中的主要創新:

  • 內存和系統服務
    • 新增了使用 Rust 作為開發驅動程式和核心模組的第二語言的能力。 支援 Rust 的主要原因是透過減少使用記憶體時出錯的可能性,使編寫安全且高品質的裝置驅動程式變得更加容易。 預設情況下,Rust 支援處於停用狀態,並且不會導致 Rust 被包含為必需的核心建置依賴項。 到目前為止,核心已經採用了最小化的精簡版本的補丁,該補丁已從 40 行減少到 13 行程式碼,並且僅提供必要的最少內容,足以構建用 Rust 語言編寫的簡單核心模組。 未來,計劃逐步增加現有功能,從 Rust-for-Linux 分支轉移其他變更。 同時,正在開發項目,以使用擬議的基礎設施以 Rust 語言開發 NVMe 驅動器、9p 網路協定和 Apple M1 GPU 的驅動程式。
    • 對於基於具有EFI的AArch64、RISC-V和LoongArch架構的系統,已經實現了直接載入壓縮核心映像的能力。 新增了用於載入、運行和卸載核心映像的處理程序,直接從 EFI zboot 呼叫。 也新增了用於從 EFI 協定資料庫安裝和刪除協定的處理程序。 以前,解包是由單獨的引導程式執行的,但現在可以透過核心本身的處理程序來完成 - 核心映像形成為 EFI 應用程式。
    • 該組合包括實現多層記憶體管理模型的部分補丁,該模型允許您分離具有不同效能特徵的記憶體組。 例如,最頻繁使用的頁面可以儲存在最快的記憶體中,而最很少使用的頁面可以儲存在相對較慢的記憶體中。 內核 6.1 引入了一種機制,用於確定頻繁使用的頁面位於慢速內存中的位置,以便將它們提升到快速內存,並且還引入了內存層及其相對性能的一般概念。
    • 它包括MGLRU(多代LRU)機制,它取代了舊的基於兩個隊列的LRU(最近最少使用)實現,具有多層結構,可以更好地確定哪些內存頁正在實際使用以及哪些可以推送到交換分區。
    • 增加了對Oracle工程師提出的「楓樹」資料結構的支持,該結構定位為「紅黑樹」結構的更有效替代。 Maple 樹是 B 樹的變體,支援範圍索引,旨在有效利用現代處理器的快取。 一些記憶體管理子系統已經轉移到maple樹上,這對其性能產生了積極的影響。 將來可以使用maple樹來實現範圍鎖定。
    • BPF 子系統中新增了創建「破壞性」BPF 程式的功能,該程式專門設計用於透過 crash_kexec() 呼叫啟動緊急關閉。 出於調試目的,可能需要此類 BPF 程式在某個時間點啟動故障轉儲的建立。 若要在載入 BPF 程式時存取破壞性操作,您必須指定 BPF_F_DESTRUCTIVE 標誌,啟動 sysctl kernel.delta_bpf_enabled,並具有 CAP_SYS_BOOT 權限。
    • 對於BPF程序,可以列舉cgroup元素,也可以列舉特定執行緒或任務的資源(檔案、vma、行程等)。 已實作新的映射類型來建立使用者環形緩衝區。
    • 新增了對 BPF 程式中記憶體分配的特殊呼叫(記憶體分配器),它在 BPF 上下文中提供比標準 kmalloc() 更安全的記憶體分配。
    • 變更的第一部分已被集成,提供了為具有 HID(人機介面設備)介面的輸入裝置建立驅動程式的能力,並以 BPF 程式的形式實現。
    • 核心已完全刪除了支援 a.out 可執行檔格式的程式碼,該格式在 5.1 版中已棄用,並且自版本 5.18 和 5.19 以來已在主要架構中停用。 a.out 格式在 Linux 系統上早已被棄用,並且預設 Linux 配置中的現代工具不支援生成 a.out 檔案。 a.out 檔案的載入器可以完全在使用者空間中實作。
    • 對於基於龍芯3 5000處理器採用的LoongArch指令集架構並實現新的RISC ISA的系統,類似於MIPS和RISC-V,實現了對性能測量事件(perf events)、kexec、kdump和BPF JIT編譯的支持。
    • io_uring 非同步I/O 介面提供了一個新模式IORING_SETUP_DEFER_TASKRUN,該模式允許暫時推遲與環形緩衝區相關的工作,直到發出應用程式請求為止,該模式可用於批次工作並避免由於搶佔而導致的延遲問題。不合時機。
    • 使用者空間中的程序能夠啟動將一系列普通記憶體頁轉換為一組大記憶體頁(透明大頁)。
    • 新增了 /dev/userfaultfd 設備的實現,它允許使用 FS 中的存取權限存取 userfaultfd() 系統呼叫的功能。 userfaultfd 功能可讓您建立用於存取使用者空間中未指派的記憶體頁面(頁面錯誤)的處理程序。
    • 對 GNU Make 實用程式版本的要求已增加 - 現在至少需要版本 3.82 才能建立核心。
  • 磁盤子系統、I/O 和文件系統
    • 對 Btrfs 檔案系統進行了重大性能最佳化;除其他外,FIEMAP ioctl 呼叫的性能已提高了幾個數量級。 新增了對使用 io_uring 的應用程式的非同步緩衝寫入的支援。 在「發送」操作中新增了對受 fs-verity 保護的文件的支援。
    • ext4檔案系統新增了與日誌維護和唯讀操作相關的效能最佳化。
    • EROFS(增強型唯讀檔案系統)檔案系統專為在唯讀模式下可存取的分割區上使用而設計,實現了共享不同檔案系統中重複資料的能力。
    • 新增了 statx() 系統呼叫來顯示有關是否可以將直接 I/O 應用於檔案的資訊。
    • FUSE(使用者空間中的檔案系統)子系統新增了使用 O_TMPFILE 標誌建立暫存檔案的支援。
  • 虛擬化和安全
    • CFI(控制流完整性)保護機制的實現已被替換,在每次間接調用函數之前添加檢查,以檢測某些形式的未定義行為,這些行為可能會導致違反正常執行順序(控制流)作為使用更改指向記憶體中儲存的函數的指標的漏洞的結果。 LLVM 專案中 CFI 的標準實作已被同樣基於 Clang 使用的選項所取代,但專門用於保護低階子系統和作業系統核心。 在 LLVM 中,Clang 16 版本中將提供新的實現,並將透過「-fsanitize=kcfi」選項啟用。 新實現的主要區別在於,它不依賴連結時最佳化 (LTO),並且不會導致函數指標被跳轉表中的連結取代。
    • 對於 LSM 模組(Linux 安全模組),可以建立攔截作業以建立命名空間的處理程序。
    • 提供了用於驗證 BPF 程式中的 PKCS#7 數位簽章的工具。
    • 以非阻塞模式開啟的能力(O_NONBLOCK)在內核 5.6 中被無意中刪除,現已返回 /dev/random。
    • 在 x86 架構的系統上,如果同時允許執行和寫入的核心子系統映射記憶體頁面,則會新增警告。 未來,正在考慮完全禁止這種記憶體映射的可能性。
    • 新增了KMSAN(Kernel Memory Sanitizer)偵錯機制,以檢測核心中未初始化的記憶體使用情況,以及用戶空間和裝置之間未初始化的記憶體洩漏。
    • 對 getrandom 呼叫中使用的加密安全 CRNG 偽隨機數產生器進行了改進。 這些變更由 VPN WireGuard 的作者 Jason A. Donenfeld 準備,旨在提高偽隨機整數提取的安全性。
  • 網絡子系統
    • TCP 堆疊提供了為每個名稱空間單獨使用套接字雜湊表的功能(預設為停用),這提高了具有大量名稱空間的系統的效能。
    • 刪除了支援舊版 DECnet 協定的程式碼。 使用者空間 API 存根保留在適當的位置,以允許編譯使用 DECnet 的應用程序,但這些應用程式將無法連接到網路。
    • netlink 協定已記錄。
  • Оборудование
    • amdgpu 驅動程式添加了對 DSC(顯示流壓縮)轉發的支持,以便在與支援超高分辨率的螢幕交換資訊時實現無損資料壓縮。 我們仍在繼續為 AMD RDNA3 (RX 7000) 和 CDNA (Instinct) 平台提供支援。 新增了對 DCN 3.2、SMU 13.x、NBIO 7.7、GC 11.x、PSP 13.x、SDMA 6.x 和 GMC 11.x IP 元件的支援。 amdkfd 驅動程式(適用於獨立 AMD GPU,例如 Polaris)提供對 GFX 11.0.3 的支援。
    • i915 (Intel) 驅動程式包括對 Meteor Lake GPU 的支援。 Meteor Lake 和更新的 GPU 支援 DP 2.0 (DisplayPort) 介面。 新增了基於 Alder Lake S 微架構的顯示卡標識符。
    • 增加了對 Apple Silicon、Intel SkyLake 和 Intel KabyLake 處理器中實現的音訊子系統的支援。 CS35L41 HDA 音訊驅動程式支援睡眠模式。 新增了對整合式音訊晶片Apple Silicon、AMD Rembrant DSP、AMD Pink Sardine ACP 6.2、Everest ES8326、Intel Sky Lake 和Kaby Lake、Mediatek MT8186、NXP i.MX8ULP DSP、Qualcomm SC8280XP、SM8250、MX8450ULP DSP、Qualcomm SC4392XP、SMXNUMX、ASoC)支援SMXNUMX 和德州儀器 SRCXNUMX
    • 新增了對 LCD 面板 Samsung LTL101AL01、B120XAN01.0、R140NWF5 RH、Densitron DMT028VGHMCMI-1A TFT、AUO B133UAN02.1、IVO M133NW4J-R3、Innolux N120AN1、IVO M116NW01.6J-R116. 21、 INX N116BCA- EA2、INX N116BCN-EA1、多創科技MI0800FT-9。
    • 新增了對 Baikal-T1 SoC 中使用的 AHCI SATA 控制器的支援。
    • 增加了對藍牙晶片 MediaTek MT7921、Intel Magnetor(CNVi,整合連接)、Realtek RTL8852C、RTW8852AE 和 RTL8761BUV (Edimax BT-8500) 的支援。
    • 高通無線模組的ath11k驅動程式增加了對160 MHz範圍內頻譜掃描的支持,實現了多執行緒NAPI,並改進了對高通WCN6750 Wi-Fi晶片的支援。
    • 新增了PinePhone 鍵盤、InterTouch 觸控板(ThinkPad P1 G3)、X-Box 自適應控制器、PhoenixRC 飛行控制器、VRC-2 汽車控制器、DualSense Edge 控制器、IBM 操作面板、XBOX One Elite 遙控器、平板電腦XP-PEN Deco Pro S 的驅動程式和 Intuos Pro Small (PTH-460)。
    • 新增了 Aspeed HACE(哈希和加密引擎)加密加速器的驅動程式。
    • 新增了對整合 Thunderbolt/USB4 Intel Meteor Lake 控制器的支援。
    • 增加了對 Sony Xperia 1 IV、Samsung Galaxy E5、E7 和 Grand Max、Pine64 Pinephone Pro 智慧型手機的支援。
    • 增加了對ARM SoC 和主機板的支援:AMD DaytonaX、Mediatek MT8186、Rockchips RK3399 和RK3566、TI AM62A、NXP i.MX8DXL、Renesas R-Car H3Ne-1.7G、Qualcomm IPQ8064-v2.0-8062、IPQ8065、IPQ8- SL/ BL i.MX8195MM OSM-S、MT4(宏碁番茄)、Radxa ROCK 4C+、NanoPi R1S 企業版、JetHome JetHub DXNUMXp。 更新了 SoC Samsung、Mediatek、Renesas、Tegra、Qualcomm、Broadcom 和 NXP 的驅動程式。

同時,拉丁美洲自由軟體基金會形成了完全自由的核心 6.1 版本 - Linux-libre 6.1-gnu,清除了包含非自由元件或程式碼片段的韌體和驅動程式元素,其範圍為受製造商限制。 新版本清理了具有基於 AArch8852 架構的處理器的各種 Qualcomm 和 MediaTek SoC 的新 rtw64b 驅動程式和 DTS 檔案。 更新了驅動程式和子系統 amdgpu、i915、brcmfmac、r8188eu、rtw8852c、Intel ACPI 中的斑點清理程式碼。 過時驅動程式 tm6000 電視卡、cpia2 v4l、sp8870、av7110 的清理已修正。

來源: opennet.ru

添加評論