Linux 6.3 內核版本

經過兩個月的開發,Linus Torvalds 發布了 Linux 6.3 內核。 最顯著的變化包括:清理過時的 ARM 平台和圖形驅動程序、繼續集成 Rust 語言支持、hwnoise 實用程序、支持 BPF 中的紅黑樹結構、IPv4 的 BIG TCP 模式、內置 Dhrystone 基準測試、禁用能力在 memfd 中執行,支持使用 BPF 創建 HID 驅動程序,對 Btrfs 進行了更改以減少塊組碎片。

新版本接受了來自 15637 位開發者的 2055 個修復; 補丁大小 - 76 MB(更改影響了 14296 個文件,添加了 1023183 行代碼,刪除了 883103 行)。 相比之下,在之前的版本中,16843 名開發人員提出了 2178 項修復; 補丁大小 - 62 MB。 39 內核中引入的所有更改中約有 6.3% 與設備驅動程序相關,約 15% 的更改與更新特定於硬件架構的代碼相關,10% 與網絡堆棧相關,5% 與文件系統相關,3 % 到內部內核子系統。

內核 6.3 中的主要創新:

  • 內存和系統服務
    • 對與舊的和未使用的 ARM 板相關的代碼進行了重大清理,從而將內核源代碼的大小減少了 150 萬行。 刪除了 40 多個舊的 ARM 平台。
    • 實現了為具有以 BPF 程序形式實現的 HID(人機接口設備)接口的輸入設備創建驅動程序的能力。
    • 繼續從 Rust-for-Linux 分支移植與使用 Rust 作為開發驅動程序和內核模塊的第二語言相關的附加功能。 默認情況下不啟用 Rust 支持,並且不會導致 Rust 作為強制性內核構建依賴項包含在內。 先前版本中提供的功能已擴展,支持 Arc 類型(具有引用計數的指針的實現)、ScopeGuard(執行超出範圍時清理)和 ForeignOwnable(提供 C 和 Rust 代碼之間的指針移動) . 從包“alloc”中刪除模塊“借用”(類型“Cow”和特徵“ToOwned”)。 值得注意的是,內核中對 Rust 的支持狀態已經接近開始接受第一個用 Rust 編寫的模塊進入內核。
    • x86-64 系統上的用戶模式 Linux(將內核作為用戶進程運行)支持用 Rust 編寫的代碼。 添加了對使用啟用了鏈接時優化 (LTO) 的 clang 構建用戶模式 Linux 的支持。
    • 添加了 hwnoise 實用程序以跟踪由硬件行為引起的延遲。 操作執行時間的偏差(抖動)是在禁用中斷處理時確定的,在 10 分鐘的計算中超過 XNUMX 微秒。
    • 添加了帶有 Dhrystone 基準實現的內核模塊,可用於評估沒有用戶空間組件的配置中的 CPU 性能(例如,在僅實現內核加載的新 SoC 的移植階段)。
    • 添加了“cgroup.memory=nobpf”內核命令行選項以禁用 BPF 程序的內存消耗統計,這對於具有隔離容器的系統很有用。
    • 針對BPF程序,提出了一种红黑樹數據結構的實現,使用kfunc + kptr(bpf_rbtree_add, bpf_rbtree_remove, bpf_rbtree_first)代替新增映射類型。
    • 在可重啟序列(rseq,restartable sequences)的機制中增加了將以 CPU 編號標識的並行執行標識符(memory-map concurrency ID)傳遞給進程的能力。 Rseq 提供了一種快速原子執行操作的方法,如果被另一個線程中斷,這些操作將被清理並重試。
    • ARM 處理器支持 SME 2(可擴展矩陣擴展)指令。
    • 對於 s390x 和 RISC-V RV64 架構,實現了對“BPF trampoline”機制的支持,這允許在內核和 BPF 程序之間傳輸調用時最大限度地減少開銷。
    • 在具有基於 RISC-V 架構的處理器的系統上,已實現使用“ZBB”指令來加速字符串操作。
    • 針對基於LoongArch指令集架構的系統(用於龍芯3 5000處理器,實現了類似於MIPS和RISC-V的全新RISC ISA),支持內核地址空間隨機化(KASLR),內核在內存中的重定位(relocation ),硬件分stop和kprobe機制。
    • DAMOS(Data Access Monitoring-based Operation Schemes)機制允許您根據內存訪問頻率釋放內存,支持過濾器將某些內存區域排除在 DAMOS 處理之外。
    • 最小標準 C 庫 Nolibc 實現了對 s390 架構和 Arm Thumb1 指令集的支持(此外還支持 ARM、AArch64、i386、x86_64、RISC-V 和 MIPS)。
    • Objtool 已被優化以加速內核構建並減少構建期間的峰值內存消耗(在“allyesconfig”模式下構建內核時,在具有 32 GB RAM 的系統上強制終止進程沒有問題)。
    • 英特爾 ICC 編譯器對內核彙編的支持已經停止,已經停止工作很長時間了,也沒有人表示希望修復它。
  • 磁盤子系統、I/O 和文件系統
    • tmpfs 支持掛載的文件系統用戶 ID 映射,用於將掛載的外部分區上特定用戶的文件映射到當前系統上的另一個用戶。
    • 在 Btrfs 中,為了減少塊組的碎片,在分配塊時將範圍按大小劃分,即任何塊組現在僅限於小型(最多 128KB)、中型(最多 8MB)和大型範圍。 raid56 實施已被重構。 重新設計用於檢查校驗和的代碼。 通過為目錄緩存 utime 並僅在需要時執行命令,已進行性能優化以將發送操作加速多達 10 倍。 通過跳過共享數據(快照)的反向鏈接檢查,fiemap 操作速度提高 10 倍。 通過優化 b 樹結構中的鍵搜索,元數據操作速度提高了 XNUMX%。
    • 通過允許多個進程使用共享 inode 鎖而不是獨占鎖同時對預分配塊執行直接 I/O 操作,提高了 ext4 FS 的性能。
    • 在f2fs中,已經做了提高代碼可讀性的工作。 修復了與原子寫入和新範圍緩存相關的重要問題。
    • EROFS(Enhanced Read-Only File System)專為只讀分區而設計,具有將壓縮文件解壓操作綁定到CPU的能力,以減少數據訪問延遲。
    • BFQ I/O 調度程序增加了對高級旋轉磁盤驅動器的支持,例如使用多個單獨控制的驅動器(多驅動器)的驅動器。
    • NFS 客戶端和服務器的實現中添加了對使用 AES-SHA2 算法的數據加密的支持。
    • FUSE (Filesystems In User Space) 子系統增加了對查詢擴展機制的支持,它允許您在查詢中放入額外的信息。 基於此特性,實現了向FS請求添加組標識符,這是在FS中創建對象(create、mkdir、symlink、mknod)時考慮訪問權限所必需的。
  • 虛擬化和安全
    • x86 系統的 KVM 管理程序增加了對擴展的 Hyper-V 超級調用的支持,並為它們提供了轉發到在用戶空間主機環境中運行的處理程序的功能。 這一變化使得實現對 Hyper-V 管理程序的嵌套啟動的支持成為可能。
    • KVM 可以更輕鬆地限制訪客系統訪問與性能測量相關的 PMU(性能監控單元)事件。
    • memfd 機制允許您通過在進程之間傳遞的文件描述符來識別內存區域,添加了創建禁止代碼執行的區域(不可執行的 memfd)的功能,並且無法在其中設置執行權限未來。
    • 添加了一個新的 PR_SET_MDWE prctl 操作來阻止嘗試包含允許同時寫入和執行的內存訪問權限。
    • 默認添加和啟用針對 Spectre 類攻擊的保護,基於 AMD Zen 4 處理器中提出的 IBRS(增強型間接分支限制推測)自動模式實現,它允許您在中斷期間自適應地啟用和禁用指令的推測執行處理、系統調用和上下文切換。 與 Retpoline 保護相比,建議的保護導致更低的開銷。
    • 解決了在使用同步多線程技術(SMT 或超線程)時可能繞過 Spectre v2 攻擊保護以及在選擇 IBRS 保護模式時禁用 STIBP(單線程間接分支預測器)機制導致的漏洞。
    • 對於基於 ARM64 的系統,添加了一個新的“virtconfig”構建目標,當選擇該目標時,它只會激活在虛擬化系統中啟動所需的最少內核組件集。
    • 添加了對使用 m68k 架構的 seccomp 機製過濾系統調用的支持。
    • 添加了對基於 Microsoft Pluton 技術的 AMD Ryzen 處理器內置 CRB TPM2(命令響應緩衝區)設備的支持。
  • 網絡子系統
    • 添加了一個 netlink 接口來配置 PLCA(物理層防撞)子層,該子層在 IEEE 802.3cg-2019 規範中定義,並用於為連接物聯網設備和工業系統而優化的 802.3cg (10Base-T1S) 以太網網絡。 PLCA 的使用提高了共享媒體以太網網絡的性能。
    • 已停止支持用於管理 WiFi 7 (802.11be) 無線接口的“無線擴展”API,因為此 API 未涵蓋所有必要的設置。 當嘗試使用繼續作為模擬層支持的“無線擴展”API 時,現在將為大多數當前設備顯示警告。
    • 已準備好有關 netlink API 的詳細文檔(供內核開發人員和用戶空間應用程序開發人員使用)。 ynl-gen-c 實用程序已實現,可根據 Netlink 協議的 YAML 規範生成 C 代碼。
    • 對 IP_LOCAL_PORT_RANGE 選項的支持已添加到網絡套接字中,以簡化通過地址轉換器的傳出連接的配置,而無需使用 SNAT。 當在多個主機上使用相同的 IP 地址時,IP_LOCAL_PORT_RANGE 允許每個主機使用自己的出網端口範圍,並在網關上根據端口號轉發數據包。
    • 對於 MPTCP(多路徑 TCP),實現了處理使用 IPv4 和 IPv6 協議的混合流的能力。 MPTCP 是 TCP 協議的擴展,用於組織 TCP 連接操作,通過綁定到不同 IP 地址的不同網絡接口沿多條路由同時傳送數據包。
    • 對於 IPv4,實現了使用 BIG TCP 擴展的可能性,這允許將最大 TCP 數據包大小增加到 4 GB,以優化數據中心高速內部網絡的運行。 具有 16 位標頭字段的數據包大小的增加是通過實施“巨型”數據包實現的,這些數據包將 IP 標頭大小設置為 0,實際大小在單獨的附加標頭中的單獨 32 位字段中傳輸。
    • 添加了一個新的 sysctl 參數 default_rps_mask,您可以通過該參數設置默認的 RPS(接收數據包控制)配置,該配置負責在中斷處理程序級別跨 CPU 內核分配傳入流量的處理。
    • 停止支持排隊規則以限制 CBQ(基於類的排隊)、ATM(ATM 虛擬電路)、dsmark(區分服務標記)、tcindex(流量控制索引)和 RSVP(資源預留協議)流量。 這些門派早已荒廢,無人願意繼續供養。
  • Оборудование
    • 刪除了所有基於 DRI1 的圖形驅動程序:i810(舊的 Intel 8xx 集成顯卡)、mga(Matrox GPU)、r128(ATI Rage 128 GPU,包括 Rage Fury、XPERT 99 和 XPERT 128 卡)、savage(S3 Savage GPU)、sis( Crusty SiS GPU)、tdfx (3dfx Voodoo) 和 via (VIA IGP),它們在 2016 年被棄用,自 2012 年以來在 Mesa 中不再受支持。
    • 刪除了過時的幀緩衝區 (fbdev) 驅動程序 omap1、s3c2410、tmiofb 和 w100fb。
    • 已為集成到 Intel Meteor Lake(第 14 代)CPU 中的 VPU(多功能處理單元)添加了 DRM 驅動程序,旨在加速計算機視覺和機器學習操作。 該驅動程序使用“accel”子系統實現,旨在為計算加速器提供支持,這些加速器可以以單獨的 ASIC 形式提供,也可以作為 SoC 和 GPU 內部的 IP 塊提供。
    • i915 (Intel) 驅動程序擴展了對獨立 Intel Arc (DG2/Alchemist) 顯卡的支持,提供了對 Meteor Lake GPU 的初步支持,並包括對 Intel Xe HP 4tile GPU 的支持。
    • amdgpu 驅動程序增加了對 AdaptiveSync 技術的支持以及在多個顯示器上使用安全顯示的能力。 更新了對 DCN 3.2(Display Core Next)、SR-IOV RAS、VCN RAS、SMU 13.x 和 DP 2.1 的支持。
    • 在msm驅動(GPU Qualcomm Adreno)中增加了對SM8350、SM8450、SM8550、SDM845和SC8280XP平台的支持。
    • Nouveau 驅動程序已放棄對舊 ioctl 調用的支持。
    • etnaviv 驅動程序中添加了對 NPU VerSilicon(VeriSilicon 神經網絡處理器)的實驗性支持。
    • 已實現用於通過並行端口連接的 IDE 驅動器的 pata_parport 驅動程序。 添加的驅動程序可以從內核中刪除舊的 PARIDE 驅動程序併升級 ATA 子系統。 新驅動程序的一個限制是無法通過並行端口同時連接打印機和磁盤。
    • 為基於Qualcomm芯片的無線網卡添加了ath12k驅動,支持Wi-Fi 7 增加了對基於RealTek RTL8188EU芯片的無線網卡的支持。
    • 添加了對基於 ARM46 架構的 64 款闆卡的支持,包括 Samsung Galaxy tab A (2015)、Samsung Galaxy S5、BananaPi R3、Debix Model A、EmbedFire LubanCat 1/2、Facebook Greatlakes、Orange Pi R1 Plus、Tesla FSD 等設備基於SoC Qualcomm MSM8953 (Snapdragon 610), SM8550 (Snapdragon 8 Gen 2), SDM450 and SDM632, Rockchips RK3128 TV box, RV1126 Vision, RK3588, RK3568, RK3566, RK3588 and RK3328, TI K3 (AM642/AM 654/AM68 69 / AMXNUMX).

同時,拉丁美洲自由軟件基金會形成了完全自由內核 6.3 的變體——Linux-libre 6.3-gnu,清除了包含非自由組件或代碼段的固件和驅動程序元素,其範圍受限於生產廠家。 在 6.3 版中,blob 在新的 ath12k、aw88395 和 peb2466 驅動程序以及基於 AArch64 的 qcom 設備的新設備樹文件中得到了清理。 更新了驅動程序和子系統 amdgpu、xhci-rcar、qcom-q6v5-pas、sp8870、av7110 中的 blob 清理代碼,以及具有軟件解碼和預編譯 BPF 文件的 DVB 卡驅動程序。 停止清除驅動程序 mga、r128、tm6000、cpia2 和 r8188eu,因為它們已從內核中刪除。 改進了 i915 驅動程序 blob 清理。

來源: opennet.ru

添加評論