Linux 5.15 內核版本

經過兩個月的開發,Linus Torvalds 發布了 Linux 核心 5.15。 值得注意的變更包括:支援寫入的新NTFS 驅動程式、具有SMB 伺服器實現的ksmbd 模組、用於記憶體存取監控的DAMON 子系統、即時鎖定原語、Btrfs 中的fs-verity 支援、用於飢餓回應系統記憶體的process_mrelease 系統呼叫、遠端認證模組DM-ima。

新版本包含來自 13499 名開發人員的 1888 個修復,補丁大小為 42 MB(更改影響了 10895 個文件,新增了 632522 行程式碼,刪除了 299966 行程式碼)。 45 中引入的所有變更中約5.15% 與裝置驅動程式相關,約14% 的變更與更新特定於硬體架構的程式碼相關,14% 與網路堆疊相關,6% 與檔案系統相關,3% 與檔案系統相關。與內部核心子系統相關。

主要創新:

  • 磁盤子系統、I/O 和文件系統
    • 核心採用了 NTFS 檔案系統的新實現,由 Paragon Software 開放。 新驅動程式可以在寫入模式下運作,並支援目前版本 NTFS 3.1 的所有功能,包括擴充檔案屬性、存取清單 (ACL)、資料壓縮模式、有效處理檔案中的空白空間(稀疏)以及重播從日誌在失敗後恢復完整性。
    • Btrfs 檔案系統支援 fs-verity 機制,該機制用於使用儲存在元資料區域中的與檔案關聯的加密雜湊或金鑰來透明地控制各個檔案的完整性和真實性。 以前,fs-verity 僅適用於 Ext4 和 F2fs 檔案系統。

      Btrfs 還新增了對已安裝檔案系統映射使用者 ID 的支援(先前支援 FAT、ext4 和 XFS 檔案系統)。 此功能可讓您將已安裝的外部分割區上的特定使用者的檔案與目前系統上的另一個使用者的檔案進行比較。

      Btrfs 的其他變更包括:更快地將鍵新增至目錄索引以提高檔案建立效能; 能夠使用一台設備運行 raid0,使用兩台設備運行 raid10(例如,在重新配置陣列的過程中); 選項「rescue=ibadroots」忽略不正確的範圍樹; 加速“發送”操作; 減少重新命名操作期間的鎖定衝突; 能夠在具有 4K 記憶體頁面大小的系統上使用 64K 磁區。

    • 在 XFS 中,在檔案系統中使用 2038 年之後的日期的能力已經穩定。 實作了延遲 inode 停用的機制,並支援延遲安裝和刪除檔案屬性。 為了消除問題,已安裝分割區的磁碟配額的功能已被刪除(您可以強制停用配額,但與它們相關的計算將繼續,因此需要重新安裝才能完全停用它們)。
    • 在 EXT4 中,已經完成了一些工作來提高寫入 delalloc 緩衝區和處理由於保持開啟狀態但不與目錄關聯而繼續存在的孤立檔案的效能。 丟棄操作的處理已移出 jbd2 kthread 線程,以避免阻塞元資料操作。
    • F2FS 新增了「discard_unit=block|segment|section」選項,將丟棄操作(標記可能不再物理儲存的已釋放區塊)綁定到相對於區塊、磁區、段或節的對齊。 新增了對追蹤 I/O 延遲變化的支援。
    • EROFS(可擴展只讀檔案系統)檔案系統為未壓縮保存的檔案添加了直接 I/O 支持,以及 fiemap 支援。
    • OverlayFS 實作了對「immutable」、「append-only」、「sync」和「noatime」掛載標誌的正確處理。
    • NFS 改進了對 NFS 伺服器停止回應請求的情況的處理。 新增了從已在使用但可透過不同網路位址存取的伺服器掛載的功能。
    • 重寫 FSCACHE 子系統的準備工作已經開始。
    • 新增了對具有非標準 GPT 表放置的 EFI 分割區的支援。
    • fanotify 機制實作了一個新標誌 FAN_REPORT_PIDFD,這使得 pidfd 包含在傳回的元資料中。 Pidfd 有助於處理 PID 重複使用情況,以更準確地識別存取受監控檔案的進程(pidfd 與特定進程關聯且不會更改,而 PID 可以在與 PID 關聯的當前進程終止後與另一個進程關聯)。
    • 在 move_mount() 系統呼叫中新增了將掛載點新增至現有共用群組的功能,這解決了當隔離容器中共用多個掛載空間時在 CRIU 中儲存和復原進程狀態的問題。
    • 增加了針對隱藏競態條件的保護,這些競態條件在處理檔案中的空位時執行快取讀取時可能會導致檔案損壞。
    • 對強制(強制)檔案鎖定的支援(透過阻止導致檔案變更的系統呼叫實作)已停止。 由於可能的競爭條件,這些鎖被認為是不可靠的,並且在多年前就已被棄用。
    • LightNVM 子系統已被刪除,該子系統允許繞過類比層直接存取 SSD 磁碟機。 在提供分區(ZNS,分區命名空間)的 NVMe 標準出現後,LightNVM 就失去了意義。
  • 內存和系統服務
    • DAMON(資料存取監控)子系統已實現,可讓您監控與存取 RAM 中的資料(與在使用者空間中執行的選定進程相關)相關的活動。 此子系統可讓您分析進程在整個操作過程中存取了哪些記憶體區域,以及哪些記憶體區域仍未被聲明。 DAMON 具有低 CPU 負載、低記憶體消耗、高精度和可預測的恆定開銷,與大小無關。 此子系統既可以被核心用來優化記憶體管理,也可以被用戶空間中的實用程式用來了解進程到底在做什麼並優化記憶體使用,例如,為系統釋放多餘的記憶體。
    • process_mrelease 系統呼叫已實現,以加快釋放完成執行的程序的記憶體的過程。 正常情況下,資源釋放和進程終止不是瞬時的,可能會因為各種原因而延遲,幹擾用戶空間記憶體早期回應系統,如 oomd(由 systemd 提供)和 lmkd(Android 使用)。 透過呼叫 process_mrelease,此類系統可以更可預測地觸發從強制進程中回收記憶體。
    • 從開發對即時操作的支援的 PREEMPT_RT 內核分支,已經轉移了基於 RT-Mutex 子系統的用於組織鎖互斥體、ww_mutex、rw_semaphore、spinlock 和 rwlock 的原語變體。 對 SLUB 板分配器進行了更改,以改進 PREEMPT_RT 模式下的操作並減少對中斷的影響。
    • cgroup 中新增了對 SCHED_IDLE 任務調度程序屬性的支持,可讓您向特定 cgroup 中包含的群組的所有進程提供此屬性。 那些。 這些進程僅當系統上沒有其他任務等待執行時才會運作。 與單獨為每個程序設定 SCHED_IDLE 屬性不同,將 SCHED_IDLE 綁定到 cgroup 時,在選擇要執行的任務時會考慮群組內任務的相對權重。
    • cgroup 中計算記憶體消耗的機制已擴展,能夠追蹤其他核心資料結構,包括為輪詢、訊號處理和命名空間建立的資料結構。
    • 新增了對任務綁定到架構上處理器核心的非對稱調度的支持,其中某些 CPU 允許執行 32 位元任務,而某些 CPU 僅在 64 位元模式下運行(例如 ARM)。 新模式可讓您在調度 32 位元任務時僅考慮支援 32 位元任務的 CPU。
    • io_uring 非同步 I/O 介面現在支援直接在固定檔案索引表中開啟文件,無需使用檔案描述符,這使得可以顯著加快某些類型的操作速度,但與使用檔案描述符的傳統 Unix 流程背道而馳而開啟文件。

      BIO(區塊I/O層)子系統的io_uring實現了新的回收機制(「BIO回收」),減少了管理記憶體過程中的開銷,並將每秒處理的I/O操作數增加了約10% 。 io_uring 也加入了對 mkdirat()、symlinkat() 和 linkat() 系統呼叫的支援。

    • 對於BPF程序,已經實現了請求和處理定時器事件的能力。 新增了 UNIX 套接字的迭代器,並實現了獲取和設定 setsockopt 套接字選項的功能。 BTF 轉儲程式現在支援類型化資料。
    • 在具有效能不同的不同類型記憶體的NUMA 系統上,當可用空間耗盡時,被逐出的記憶體頁面將從動態記憶體(DRAM) 轉移到速度較慢的永久記憶體(持久記憶體),而不是刪除這些頁面。 測試表明,此類策略通常可以提高此類系統的效能。 NUMA 還提供從一組選定的 NUMA 節點為進程分配記憶體頁面的能力。
    • 對於ARC架構,已經實現了對三級和四級記憶體頁表的支持,這將進一步支援64位元ARC處理器。
    • 對於 s390 架構,已經實現了在使用記憶體時使用 KFENCE 機制檢測錯誤的功能,並添加了對 KCSAN 競爭條件偵測器的支援。
    • 新增了透過 printk() 索引輸出訊息清單的支持,可讓您一次檢索所有此類訊息並追蹤使用者空間中的變更。
    • mmap() 刪除了對 VM_DENYWRITE 選項的支持,並且內核程式碼已不再使用 MAP_DENYWRITE 模式,這減少了導致因 ETXTBSY 錯誤而阻止寫入檔案的情況的數量。
    • 追蹤子系統中新增了一種新類型的檢查“事件探針”,它可以附加到現有的追蹤事件,定義您自己的輸出格式。
    • 使用 Clang 編譯器建構核心時,現在使用 LLVM 專案的預設彙編器。
    • 作為消除內核中導致編譯器輸出警告的程式碼專案的一部分,在預設啟用的“-Werror”模式下進行了一項實驗,其中編譯器警告被視為錯誤處理。 在準備5.15 版本的過程中,Linus 開始只接受在構建內核時不會導致警告的更改,並啟用使用“-Werror”進行構建,但隨後同意這樣的決定為時過早,並延遲默認啟用“- Werror」 。 彙編期間包含「-Werror」標誌是使用 WERROR 參數控制的,該參數預設為 COMPILE_TEST,即目前它僅適用於測試版本。
  • 虛擬化和安全
    • Device Mapper (DM) 中新增了新的 dm-ima 處理程序,實現了基於 IMA(完整性測量架構)子系統的遠端認證機制,允許外部服務驗證核心子系統的狀態以確保其真實性。 實際上,dm-ima 允許您使用連結到外部雲端系統的設備映射器建立存儲,其中使用 IMA 檢查啟動的 DM 目標配置的有效性。
    • prctl() 實作了一個新選項 PR_SPEC_L1D_FLUSH,啟用該選項後,會導致核心在每次發生上下文切換時刷新第一層 (L1D) 快取的內容。 此模式允許選擇性地針對最重要的進程實施額外的保護,以防止使用旁路攻擊來確定因 CPU 中指令的推測執行而導致的漏洞而已在快取中沉澱的資料。 啟用 PR_SPEC_L1D_FLUSH(預設未啟用)的成本是顯著的效能損失。
    • 可以透過向 GCC 添加“-fzero-call-used-regs=used-gpr”標誌來建立內核,這確保在從函數返回控制之前所有寄存器都重置為零。 此選項可讓您防止函數中的資訊洩漏,並將適合在漏洞中建立 ROP(面向返回程式設計)小工具的區塊數量減少 20%。
    • 以 Hyper-V 管理程式用戶端的形式為 ARM64 架構建置核心的能力已經實現。
    • 提出了一種新的驅動程式開發框架“VDUSE”,它允許在用戶空間中實現虛擬區塊設備,並使用 Virtio 作為來賓系統存取的傳輸。
    • 新增了 I2C 總線的 Virtio 驅動程序,使得可以使用單獨的後端在半虛擬化模式下模擬 I2C 控制器。
    • 新增了 Virtio 驅動程式 gpio-virtio 以允許來賓存取主機系統提供的 GPIO 線路。
    • 新增了在沒有 I/O MMU(記憶體管理單元)的系統上限制具有 DMA 支援的裝置驅動程式存取記憶體頁面的功能。
    • KVM 管理程式能夠以線性和對數直方圖的形式顯示統計資料。
  • 網絡子系統
    • ksmbd 模組已新增至核心中,並使用 SMB3 協定實作檔案伺服器。 該模組補充了先前在核心中提供的 SMB 用戶端實現,並且與在用戶空間中運行的 SMB 伺服器不同,該模組在性能、記憶體消耗以及與高級核心功能的整合方面更加高效。 Ksmbd 被譽為高效能、嵌入式就緒的 Samba 擴展,可根據需要與 Samba 工具和函式庫整合。 ksmbd 的功能包括改進對本地系統上的分散式檔案快取技術(SMB 租用)的支持,這可以顯著減少流量。 未來,他們計劃增加對 RDMA(“smbdirect”)和與使用數位簽章提高加密和驗證可靠性相關的協議擴展的支援。
    • CIFS 用戶端不再支援 NTLM 和 SMB1 協定中使用的基於 DES 的較弱身份驗證演算法。
    • 群播支援是在vlan 的網橋實作中實現的。
    • 用於聚合網路介面的綁定驅動程式新增了對 XDP(eXpress Data Path)子系統的支持,該子系統可讓您在 Linux 核心網路堆疊處理網路封包之前對其進行操作。
    • mac80211 無線堆疊支援 LPI、SP 和 VLP 模式下的 6GHZ STA(特殊臨時授權),以及在存取點模式下設定單獨 TWT(目標喚醒時間)的能力。
    • 新增了對 MCTP(管理元件傳輸協定)的支持,用於管理控制器和關聯設備(主機處理器、週邊設備等)之間的互動。
    • 整合到 MPTCP(多路徑 TCP)的核心中,MPTCP 是 TCP 協定的擴展,用於組織 TCP 連線的操作,透過與不同 IP 位址關聯的不同網路介面沿著多條路由同時傳送封包。 新版本增加了對全網狀模式位址的支援。
    • netfilter 中新增了封裝在 SRv6(分段路由 IPv6)協定中的網路流處理程序。
    • 新增了對 Unix 流套接字的 sockmap 支援。
  • Оборудование
    • amdgpu 驅動程式支援 Cyan Skillfish APU(配備 Navi 1x GPU)。 Yellow Carp APU 現在支援視訊編解碼器。 改進了 Aldebaran GPU 支援。 新增了基於 GPU Navi 24“Beige Goby”和 RDNA2 的新地圖識別碼。 提出了虛擬螢幕(VKMS)的改進實現。 已實現對 AMD Zen 3 晶片溫度監控的支援。
    • amdkfd 驅動程式(針對離散GPU,例如Polaris)實現了基於HMM(異質記憶體管理)子系統的共享虛擬記憶體管理器(SVM,共享虛擬記憶體),該子系統允許使用具有自己的記憶體管理單元(MMU )的設備,記憶體管理單元),可以存取主存。 特別是,使用HMM,可以在GPU和CPU之間組織一個共享位址空間,其中GPU可以存取進程的主記憶體。
    • Intel 顯示卡的 i915 驅動程式擴展了 TTM 視訊記憶體管理器的使用,並包含基於 GuC(圖形微控制器)管理功耗的功能。 已開始準備實作對 Intel ARC Alchemist 顯示卡和 Intel Xe-HP GPU 的支援。
    • nouveau 驅動程式使用 DPCD(顯示連接埠配置資料)實現 eDP 面板的背光控制。
    • 在 msm 驅動程式中新增了對 Adreno 7c Gen 3 和 Adreno 680 GPU 的支援。
    • IOMMU 驅動程式是為 Apple M1 晶片實現的。
    • 為基於 AMD Van Gogh APU 的系統添加了聲音驅動程式。
    • Realtek R8188EU 驅動程式已新增至 staging 分支,取代了 Realtek RTL8188EU 8188 b/g/n 無線晶片的舊版驅動程式 (rtl802.11eu)。
    • Meta (Facebook) 開發的 PCIe 板包含 ocp_pt 驅動程序,該板實現了微型原子鐘和 GNSS 接收器,可用於組織單獨的精確時間同步伺服器的操作。
    • 增加了對 Sony Xperia 10II (Snapdragon 665)、小米紅米 2 (Snapdragon MSM8916)、三星 Galaxy S3 (Snapdragon MSM8226)、三星 Gavini/Codina/Kyle 智慧型手機的支援。
    • 新增了對ARM SoС 和NVIDIA Jetson TX2 NX 開發套件、Sancloud BBE Lite、PicoITX、DRC02、SolidRun SolidSense、SKOV i.MX6、Nitrogen8、Traverse Ten64、GW7902、Microchip SAMA7、Nitrogen636、Traverse Ten8150、GW3、Microchip SAMA2、Nitrogen3、Traverse Ten2、GW913、Microchip SAMA2600、Reualcomm Snapdr SDMD.的支援主機板-4G/M418e-2264G、Marvell CNXNUMXx、ASpeed ASTXNUMX(Facebook Cloudripper、Elbert 和 Fuji 伺服器主機板)、XNUMXKOpen STiHXNUMX-bXNUMX。
    • 新增了對Gopher 2b LCD 面板、EDT ETM0350G0DH6/ETMV570G2DHU、LOGIC Technologies LTTD800480070-L6WH-RT、Multi-Innotechnology MI1010AIT-1CP1、Innolux EJ030 V3.0 -B.B.B.B.B. 9341XC3300 33、的支援三星DB20、 WideChips WS7430 。
    • 新增了 LiteETH 驅動程序,支援 LiteX 軟體 SoC(針對 FPGA)中使用的乙太網路控制器。
    • usb-audio 驅動程式中新增了低延遲選項,以控制在最小延遲模式下的操作。 還新增了 quirk_flags 選項來傳遞特定於裝置的設定。

同時,拉丁美洲自由軟體基金會形成了完全自由核心5.15的版本——Linux-libre 5.15-gnu,清除了包含非自由元件或程式碼部分的韌體和驅動程式的元素,其範圍受到限制由製造商。 新版本實作了向日誌輸出有關清理完成的訊息。 使用 mkspec 產生套件的問題已修復,對 snap 套件的支援已改進。 刪除了處理firmware.h頭檔時顯示的一些警告。 在「-Werror」模式下建置時允許輸出某些類型的警告(「format-extra-args」、註解、未使用的函數和變數)。 新增了gehc-achc驅動程式清理。 更新了驅動程式和子系統 adreno、btusb、btintel、brcmfmac、aarch64 qcom 中的 blob 清理程式碼。 驅動程式 prism54(已刪除)和 rtl8188eu(由 r8188eu 取代)的清理已停止。

來源: opennet.ru

添加評論