Linux 5.9 內核版本

經過兩個月的開發,Linus Torvalds 引進 核心版本 Linux 5.9。 最顯著的變化包括:限制從專有模組到 GPL 模組的符號導入、使用 FSGSBASE 處理器指令加速上下文切換操作、支援使用 Zstd 進行核心映像壓縮、重新設計核心中執行緒的優先權、支援 PRP (平行冗餘協定)、截止時間排程器中的頻寬感知調度、搶佔式記憶體頁面打包、功能標誌CAP_CHECKPOINT_RESTOR、close_range() 系統呼叫、dm-crypt 效能改進、32 位元Xen PV 來賓的程式碼刪除、新的平板記憶體管理機制,Btrfs 中的「救援」選項,支援ext4 和F2FS 中的內聯加密。

新版本包含 16074 年開發人員的 2011 個修復,
補丁大小 - 62 MB(更改影響了 14548 個文件,新增了 782155 行程式碼,刪除了 314792 行)。 約 45% 在 5.9 中呈現
更改與設備驅動程式相關,大約 15% 的更改與
對更新特定於硬體架構的程式碼的態度,13%
與網路堆疊相關,3% 與檔案系統相關,3% 與內部相關
內核子系統。

主要的 創新:

  • 內存和系統服務
    • 收緊 防止使用 GPL 層將專有驅動程式與僅針對 GPL 授權下的模組所導出的核心元件連結。 現在,從具有此標誌的模組導入符號的所有模組都會繼承 TAINT_PROPRIETARY_MODULE 標誌。 如果 GPL 模組嘗試從非 GPL 模組匯入符號,則該 GPL 模組將繼承 TAINT_PROPRIETARY_MODULE 標籤,並且將無法存取僅適用於 GPL 授權模組的核心元件,即使該模組之前已從下列位置匯入了符號: “gplonly”類別。 未實作反向鎖定(在匯入 EXPORT_SYMBOL_GPL 的模組中僅匯出 EXPORT_SYMBOL_GPL),這可能會破壞專有驅動程式的工作(僅繼承專有模組標誌,但不繼承 GPL 綁定)。
    • 添加 kcompactd 引擎支持 預打包內存頁 在後台增加核心可用的大記憶體頁面的數量。 根據初步估算,後台打包以最小的開銷為代價,與先前使用的打包機制相比,可以將分配大內存頁(huge-page)時的延遲減少70-80倍,按需啟動(on-demand) )。 為了設定 kcompactd 將提供的外部碎片的邊界,新增了 sysctl vm.compaction_proactiveness。
    • 添加 支援使用演算法進行內核影像壓縮 Z標準 (zstd)。
    • 已為 x86 系統實現了對處理器指令的支持 FSGS資料庫,它允許您從用戶空間讀取和更改 FS/GS 寄存器的內容。 在核心中,FSGSBASE 用於透過消除不必要的 GSBASE MSR 寫入操作來加速上下文切換操作,而在使用者空間中,它避免了不必要的系統呼叫來更改 FS/GS。
    • 添加 「allow_writes」參數可讓您禁止從使用者空間變更處理器的 MSR 暫存器,並限制對這些暫存器內容的存取以進行讀取操作,因為變更 MSR 可能會導致問題。 預設情況下,寫入尚未停用,對 MSR 的變更會反映在日誌中,但將來計劃將預設存取權限切換為唯讀模式。
    • 至異步 I/O 接口 io_uring 新增了對不需要內核執行緒的非同步緩衝讀取操作的完全支援。 預計未來版本將支援錄製。
    • 在 I/O 調度程序截止日期內 實施的 根據容量進行規劃, 允許 對非對稱系統(例如基於 ARM 的系統)做出正確決策 動態智商 big.LITTLE,將強大且能效較低的 CPU 核心整合在一個晶片中。 特別是,當慢速 CPU 核心沒有適當的資源來按時完成任務時,新模式可以讓您避免調度不符。
    • 內核中的能耗模型(Energy Model框架)現在是 描述了 不僅是CPU的功耗行為,還涵蓋了周邊設備。
    • close_range() 系統呼叫已實現,以允許程序一次關閉整個範圍的開啟檔案描述符。
    • 從文字控制台和fbcon驅動程式的實現 代碼已刪除,它提供了以程式方式向後滾動文字 (CONFIG_VGACON_SOFT_SCROLLBACK) 超過 VGA 文字模式視訊記憶體量的能力。
    • 重做 為內核中的執行緒分配優先權的演算法。 在為即時任務分配優先權時,新選項可以在所有核心子系統之間提供更好的一致性。
    • 增加了系統控制 sched_uclamp_util_min_rt_default 控制即時任務的 CPU 升壓設定(例如,您可以在切換到電池電源後或在行動系統上動態更改即時任務的行為以節省電量)。
    • 已做好在頁面快取中實現對透明大頁面技術的支援的準備。
    • fanotify 引擎實作了新標誌 FAN_REPORT_NAME 和 FAN_REPORT_DIR_FID,以在目錄項目和非目錄物件發生建立、刪除或移動事件時報告父名稱和唯一 FID 資訊。
    • 對於 cgroup 實施的 一個新的slab記憶體控制器,其值得注意的是將slab記帳從記憶體頁面級別移動到核心物件級別,這使得在不同的cgroup中共享slab頁面成為可能,而不是為每個cgroup分配單獨的slab快取. 所提出的方法可以提高slab的使用效率,將slab使用的記憶體大小減少30-45%,顯著降低核心的整體記憶體消耗並減少記憶體碎片。
    • 在聲音子系統中 ALSA и USB堆疊, 依據 最近採用的 關於在 Linux 核心中使用包容性術語的建議;政治上不正確的術語已被清除。 程式碼中已經清除了「從」、「主」、「黑名單」和「白名單」等字樣。
  • 虛擬化和安全
    • 使用 Clang 編譯器建構核心時 出現 能夠將堆疊上儲存的所有變數配置(CONFIG_INIT_STACK_ALL_ZERO)自動初始化為零(建置時指定「-ftrivial-auto-var-init=zero」)。
    • 在seccomp子系統中,當在使用者空間使用進程控制模式時, 添加 機會 將檔案描述子取代到受監視的進程中,以完全模擬導致建立檔案描述符的系統呼叫。 Chrome 的隔離容器系統和沙箱實作需要此功能。
    • 對於 xtensa 和 csky 架構,新增了對使用 seccomp 子系統限制系統呼叫的支援。 對於xtensa,也額外實現了對審計機制的支援。
    • 添加 新的功能標誌 CAP_CHECKPOINT_RESTORE,可讓您提供與凍結和恢復進程狀態相關的功能的訪問,而無需轉移額外的權限。
    • GCC 11 提供了您所需的所有功能
      調試工具 KCSAN(Kernel Concurrency Sanitizer),旨在動態檢測核心內的競爭條件。 因此,KCSAN 現在可以與 GCC 中內建的核心一起使用。

    • 適用於 AMD Zen 和更新的 CPU 型號 添加 支援P2PDMA技術,可讓您使用DMA在連接到PCI匯流排的兩個裝置的記憶體之間進行直接資料傳輸。
    • dm-crypt 新增了一種模式,可讓您透過執行加密資料處理而不使用工作佇列來減少延遲。 此模式對於正確操作也是必要的 分區的 區塊設備(具有必須按順序寫入的區域的設備,更新整個區塊組)。 dm-crypt 中已經完成了提高吞吐量和減少延遲的工作。
    • 刪除了程式碼以支援在執行 Xen 虛擬機器管理程式的半虛擬化模式下執行的 32 位元用戶機器。 此類系統的使用者應切換到在來賓環境中使用 64 位元內核,或使用完整 (HVM) 或組合 (PVH) 虛擬化模式而不是半虛擬化 (PV) 來運行環境。
  • 磁盤子系統、I/O 和文件系統
    • 在 Btrfs 檔案系統上 實施的 「救援」安裝選項,統一對所有其他恢復選項的存取。 對“alloc_start”和“subvolrootid”選項的支援已被刪除,並且“inode_cache”選項已被棄用。 進行了效能最佳化,特別是顯著加快了 fsync() 操作的執行速度。 添加 能夠使用 CRC32c 以外的替代類型的校驗和。
    • 添加 能夠在 ext4 和 F2FS 檔案系統中使用內聯加密(Inline Encryption),為此提供了「inlinecrypt」掛載選項。 內嵌加密模式可讓您使用磁碟機控制器內建的加密機制,透明地加密和解密輸入/輸出。
    • 在 XFS 中 安全的 inode 重置(刷新)以完全非同步模式進行,在執行記憶體清理操作時不會阻塞進程。 解決了長期存在的配額問題,該問題導致軟限制和索引節點限制警告被錯誤追蹤。 統一實作 DAX 對 ext4 和 xfs 的支援。
    • 在 Ext4 中 實施的 預先載入區塊分配位圖。 結合限制掃描未初始化的群組,優化減少了安裝非常大的分區所需的時間。
    • 在F2FS中 添加 ioctl F2FS_IOC_SEC_TRIM_FILE,它允許您使用 TRIM/discard 命令物理重置檔案中的指定數據,例如,刪除存取金鑰而不在磁碟機上留下殘留資料。
      在F2FS中也 添加 新的垃圾收集模式 GC_URGENT_LOW,透過消除啟動垃圾收集器之前是否處於空閒狀態的一些檢查來更積極地工作。

    • 在 bcache 中,範圍的 Bucket_size 已從 16 位元增加到 32 位,為啟用分區裝置快取做好準備。
    • SCSI 子系統中新增了使用基於 UFS 控制器提供的內建硬體加密的內聯加密的功能(通用閃存).
    • 新增了新的核心命令列參數“debugfs”,它允許您控制同名偽 FS 的可用性。
    • NFSv4.2 用戶端提供對擴充檔案屬性 (xattr) 的支援。
    • 在 dm 粉塵中 添加 用於立即顯示磁碟上所有已識別壞塊清單的介面(“dmsetup messagedust1 0 listbadblocks”)。
    • 對於 md/raid5,新增了 /sys/block/md1/md/stripe_size 參數來配置 STRIPE 區塊大小。
    • 對於 NVMe 儲存設備 添加 支援磁碟機分區命令(ZNS、NVM Express 分區命名空間),可讓您將儲存空間劃分為多個區域,這些區域組成區塊組,以便更全面地控制磁碟機上資料的放置。
  • 網絡子系統
    • 在網路過濾器中 添加 能夠在路由檢查之前的階段拒絕資料包(REJECT 表達式現在不僅可以在 INPUT、FORWARD 和 OUTPUT 鏈中使用,而且還可以在 icmp 和 tcp 的 PREROUTING 階段使用)。
    • 在 nftables 中 添加 審核與配置變更相關的事件的能力。
    • 在 nftables 的 netlink API 中 添加 支援匿名鏈,其名稱由核心動態分配。 當您刪除與匿名鏈關聯的規則時,該鏈本身也會自動刪除。
    • BPF 增加了對迭代器的支持,以遍歷、過濾和修改關聯數組(映射)的元素,而無需將資料複製到使用者空間。 迭代器可用於 TCP 和 UDP 套接字,允許 BPF 程式迭代開啟的套接字清單並從中提取所需的資訊。
    • 新增了一種新類型的 BPF 程式 BPF_PROG_TYPE_SK_LOOKUP,當核心為傳入連線尋找適當的偵聽套接字時啟動該程式。 使用這樣的 BPF 程序,您可以建立處理程序來決定連線應與哪個套接字關聯,而不受 bind() 系統呼叫的約束。 例如,您可以將單一套接字與一系列位址或連接埠相關聯。 此外,bpf_setsockopt() 中新增了對 SO_KEEPALIVE 標誌的支持,並且已實現安裝 BPF_CGROUP_INET_SOCK_RELEASE 處理程序(在釋放套接字時呼叫)的功能。
    • 已實施協議支持 PRP (並行冗餘協定),允許在任何網路元件發生故障時基於乙太網路切換到對應用程式透明的備援通道。
    • 堆疊mac80211 添加 支援接入點模式下的四階段 WPA/WPA2-PSK 通道協商。
    • 新增了將 qdisc(排隊規則)調度程序切換為預設使用 FQ-PIE(流隊列 PIE)網路佇列管理演算法的功能,旨在減少網路中中間資料包緩衝(緩衝區膨脹)對邊緣網路設備的負面影響電纜調變解調器。
    • MPTCP(多路徑 TCP)新增了新功能,它是 TCP 協定的擴展,用於組織 TCP 連接的操作,並透過與不同 IP 位址關聯的不同網路介面沿著多條路由同時傳送封包。 在setsockopt 中新增了對 syn cookie、DATA_FIN、緩衝區自動調整、套接字診斷以及 REUSEADDR、REUSEPORT 和 V6ONLY 標誌的支援。
    • 對於虛擬路由表VRF(虛擬路由和轉送),允許在一個系統上組織多個路由域的操作,已經實現了「嚴格」模式。 在這種模式下,虛擬表只能與其他虛擬表中未使用的路由表關聯。
    • 無線驅動是ath11k 添加 支援6GHz頻率和 光譜掃描.
  • Оборудование
    • 刪除了支援 UniCore 架構的程式碼,該架構由北京大學微處理器中心開發,並於 2011 年包含在 Linux 核心中。 該架構自 2014 年以來一直無人維護,並且在 GCC 中不受支援。
    • 已實現對RISC-V架構的支持 克科夫 (用於分析核心程式碼覆蓋率的 debugfs 介面)、kmemleak(記憶體洩漏偵測系統)、堆疊保護、跳轉標記和無滴答操作(獨立於計時器訊號的多任務)。
    • 對於PowerPC架構,已經實現了對自旋鎖隊列的支持,這顯著提高了鎖定衝突情況下的效能。
    • 對於ARM和ARM64架構,預設啟用處理器頻率調節機制 調度工具 (cpufreq Governor),它直接利用任務調度程序的資訊來做出改變頻率的決定,並且可以立即存取cpufreq驅動程式來快速改變頻率,即時調整CPU運行參數以適應當前負載。
    • 適用於 Intel 顯示卡的 i915 DRM 驅動程式包括對基於微架構的晶片的支持 火箭湖 並添加了對獨立卡的初始支持 英特爾 Xe DG1.
    • Amdgpu 驅動程式增加了對 AMD GPU 的初始支持 Navi 21 (海軍比目魚)和 Navi 22 (西耶娜慈鯛)。 增加了對 Southern Island GPU (Radeon HD 7000) 的 UVD/VCE 視訊編解碼加速引擎的支援。
      新增了將顯示旋轉 90、180 或 270 度的屬性。

      有趣的是,AMD GPU 的驅動程式 核心中最大的驅動程式 - 它有大約 2.71 萬行程式碼,約佔核心總大小(10 萬行)的 27.81%。 同時,自動產生的包含 GPU 暫存器資料的頭檔佔了 1.79 萬行,C 代碼為 366 萬行(作為比較,Intel i915 驅動程式包括 209 萬行,Nouveau 為 149 萬行)。

    • 在新司機 添加 支援使用逐幀完整性檢查 CRC NVIDIA GPU 顯示引擎中的(循環冗餘檢查)。 此實作基於 NVIDIA 提供的文件。
    • 新增液晶面板驅動:Frida FRD350H54004、KOE TX26D202VM0BWA、CDTech S070PWS19HP-FC21、CDTech S070SWV29HG-DC44、天馬TM070JVHG33和興邦達XBD599。
    • ALSA 音響子系統支援 英特爾靜默流 (外部 HDMI 裝置的連續供電模式可消除開始播放時的延遲)和 新設備 控制麥克風啟動和靜音按鈕的照明,還增加了對新設備的支持,包括控制器 龍芯7A1000.
    • 新增了對ARM 主機板、裝置和平台的支援:Pine64 PinePhone v1.2、Lenovo IdeaPad Duet 10.1、ASUS Google Nexus 7、Acer Iconia Tab A500、Qualcomm Snapdragon SDM630(用於Sony Xperia Tab A10、Qualcomm Snapdragon SDM10(用於Sony Xperia TabA2、2XA2、XA2和XA6) Ultra)、Jetson Xavier NX、Amlogic WeTek Core3011、Aspeed EthanolX、五款基於NXP i.MX950 的新主機板、MikroTik RouterBoard 5、小米Libra、Microsoft Lumia 5、Sony Xperia Z3、MStar、Michip Sparx Bay、Amazon Alpine v2,瑞薩 RZ/GXNUMXH。

同時,拉丁美洲自由軟體基金會 形成的
選項 完全免費的內核5.9 - Linux-libre 5.9-gnu,清除包含非自由元件或程式碼部分的韌體和驅動程式元素,其範圍由製造商限制。 新版本禁用 WiFi rtw8821c 和 SoC MediaTek mt8183 驅動程式中的 blob 載入。 更新了 Habanalabs、Wilc1000、amdgpu、mt7615、i915 CSR、Mellanox mlxsw (Spectrum3)、r8169 (rtl8125b-2) 和 x86 觸控螢幕驅動程式和子系統中的斑點清理程式碼。

來源: opennet.ru

添加評論