Linux 5.7 內核版本

經過兩個月的開發,Linus Torvalds 引進 核心版本 Linux 5.7。 最顯著的變化包括:exFAT 檔案系統的新實作、用於建立 UDP 隧道的 bareudp 模組、基於 ARM64 指標驗證的保護、將 BPF 程式附加到 LSM 處理程序的能力、Curve25519 的新實作、一個分離式鎖定偵測器、BPF 與PREEMPT_RT 相容、消除程式碼中80 個字元行大小的限制、考慮任務排程器中的CPU 溫度指示器、使用clone() 在另一個cgroup 中產生進程的能力、防止寫入使用userfaultfd到內存。

新版本包含來自 15033 名開發人員的 1961 個修復,
補丁大小 - 39 MB(更改影響了 11590 個文件,新增了 570560 行程式碼,
刪除了 297401 行)。 大約 41% 出現在 5.7 中
更改與設備驅動程式相關,大約 16% 的更改與
對更新特定於硬體架構的程式碼的態度,13%
與網路堆疊相關,4% 與檔案系統相關,4% 與內部相關
內核子系統。

主要的 創新:

  • 磁盤子系統、I/O 和文件系統
    • 新增了新的 exFAT 驅動程式實現, 成立 基於三星為其 Android 智慧型手機開發的當前「sdfat」(2.x) 程式碼庫。 先前新增至核心的驅動程式基於舊版三星程式碼(版本 1.2.9),效能落後新驅動程式約 10%。 讓我們回想一下,在 Microsoft 之後,向核心添加 exFAT 支援成為可能 опубликовала 公開規範並使 exFAT 專利可以在 Linux 上免版稅使用。
    • Btrfs 實作了一個新的 ioctl() 指令 - BTRFS_IOC_SNAP_DESTROY_V2,它允許您透過識別碼刪除子節。 提供克隆內聯範圍的全面支援。 擴大了重新分配操作的取消點數量,減少了執行「餘額取消」命令時的長時間等待。 反向連結的確定速度已加快(例如,測試腳本執行時間已從一個小時縮短到幾分鐘)。 新增了將檔案範圍附加到樹的每個索引節點的功能。 寫入子分割區和排除 NOCOW 時所使用的阻塞方案已重新設計。 提高了範圍的 fsync 執行效率。
    • XFS 改進了活動分區的元資料檢查和 fsck。 已經提出了一個用於重建 btree 結構的庫,該庫將來將用於重新設計 xfs_repair 並實現無需卸載分區即可恢復的可能性。
    • CIFS 中新增了在 SMB3 儲存中放置交換分區的實驗性支援。 實現了 readdir 的 POSIX 擴展(在 SMB3.1.1 規範中定義)。 改進了啟用快取=嚴格模式並使用協定版本 64+ 時 2.1KB 頁面的寫入效能。
    • FS EXT4 已從 bmap 和 iopoll 轉移到使用 iomap。
    • F2FS 使用 zstd 演算法提供對資料壓縮的可選支援。 預設使用LZ4演算法進行壓縮。 新增了對「chattr -c commit」指令的支援。 提供安裝時間顯示。 新增了 ioctl F2FS_IOC_GET_COMPRESS_BLOCKS 以取得有關壓縮區塊數量的資訊。 新增了通過 statx 的壓縮資料輸出。
    • Ceph檔案系統增加了在本機執行檔建立和刪除操作(取消連結)的功能,無需等待伺服器的回應(工作在非同步模式下)。 例如,這項變更可以顯著提高執行 rsync 實用程式時的效能。
    • OVERLAYFS 中新增了使用 virtiofs 作為頂層檔案系統的功能。
    • 重寫 VFS中的路徑遍歷程式碼、符號連結解析程式碼已重新設計,並且統一了掛載點遍歷。
    • 在scsi子系統中給予非特權用戶 允許 執行ZBC命令。
    • 在 dm_writecache 中 實施的 根據 max_age 參數逐漸清除快取的能力,該參數設定區塊的最大生命週期。
    • 在 dm_integrity 中 添加 支援“丟棄”操作。
    • 在 null_blk 中 添加 支援錯誤替換以模擬測試過程中的故障。
    • 添加 能夠發送有關區塊裝置大小變更的 udev 通知。
  • 網絡子系統
    • 包括網路過濾器 變化,大幅加快大型匹配清單(nftables 集)的處理速度,這需要檢查子網路、網路連接埠、協定和 MAC 位址的組合。
      最佳化 製成 進入nft_set_pipapo(PIle Packet POlicies)模組,該模組解決了將封包內容與過濾規則中使用的任意字段狀態範圍(例如IP和網路連接埠範圍)進行匹配的問題(nft_set_rbtree和nft_set_hash操縱區間匹配和值的直接反映)。 在配備 AMD Epyc 256 處理器的系統上使用 2 位元 AVX7402 指令進行向量化的 pipapo 版本在解析包括連接埠協定組合在內的 420 萬筆記錄時顯示出 30% 的效能提升。 在解析 1000 筆記錄時比較子網路和連接埠號碼的組合時,IPv87 的增幅為 4%,IPv128 的增幅為 6%。

    • 添加 bareudp 模組,可讓您將各種 L3 協定(例如 MPLS、IP 和 NSH)封裝到 UDP 隧道中。
    • MPTCP(多路徑 TCP)元件是 TCP 協定的擴展,用於組織 TCP 連線的操作,並透過綁定到不同 IP 位址的不同網路介面沿著多條路由同時傳送封包,該元件的整合仍在繼續。
    • 添加 支援硬體加速機制,用於將乙太網路幀封裝在 802.11 (Wi-Fi) 中。
    • 將裝置從一個網路命名空間移至另一個網路命名空間時,sysfs 中對應檔案的存取權限和所有權會進行調整。
    • 新增了為非 root 使用者使用 SO_BINDTODEVICE 標誌的功能。
    • 補丁的第三部分已被接受,將 ethtool 工具包從 ioctl() 轉換為使用 netlink 介面。 新的介面使得添加擴展變得更加容易,改進了錯誤處理,允許在狀態更改時發送通知,簡化了內核和用戶空間之間的交互,並減少了需要同步的命名列表的數量。
    • 新增了使用特殊硬體加速器執行連接追蹤操作的功能。
    • 在網路過濾器中 添加 用於連接傳出資料包分類器(出口)的鉤子,它補充了先前存在的用於傳入資料包(入口)的鉤子。
  • 虛擬化和安全
    • 新增了指針驗證的硬體實作(指針認證),它使用專門的ARM64 CPU 指令來防止使用面向返回程式設計(ROP)技術的攻擊,其中攻擊者不會嘗試將其程式碼放入記憶體中,而是對載入的庫中已有的機器指令進行操作,結束帶有控制返回指令。 安全性歸結為使用數位簽名在內核層級驗證返回位址。 簽名儲存在指標本身未使用的最高位元中。 與軟體實作不同,數位簽章的建立和驗證是使用特殊的 CPU 指令進行的。
    • 添加 使用 userfaultfd() 系統呼叫保護記憶體區域不被寫入的能力,該系統呼叫旨在處理使用者空間中的頁面錯誤(存取未分配的記憶體頁面)。 這個想法是使用 userfaultfd() 來檢測對標記為寫入保護的頁面的存取違規,並調用可以響應此類寫入嘗試的處理程序(例如,在創建正在運行的進程的即時快照期間處理更改,狀態將記憶體轉儲轉儲到磁碟、實現共享記憶體、追蹤記憶體變化時擷取)。 功能性 相等的 將 mprotect() 與 SIGSEGV 訊號處理程序結合使用,但它的工作速度明顯更快。
    • SELinux 已棄用「checkreqprot」參數,該參數可讓您在處理規則時停用記憶體保護檢查(允許使用可執行記憶體區域,無論規則中指定的規則為何)。 Kernfs 符號連結可以繼承其父目錄的上下文。
    • 結構 包括韓國RSI,它允許您將 BPF 程式附加到核心中的任何 LSM 掛鉤。 此變更可讓您以 BPF 程式的形式建立 LSM 模組(Linux 安全模組),以解決稽核問題和強制存取控制。
    • 實施 透過批次 CRNG 值而不是單獨呼叫 RNG 指令來優化 /dev/random 的效能。 改進了提供 RNG 指令的 ARM64 系統上 getrandom 和 /dev/random 的效能。
    • 橢圓曲線 Curve25519 的實現 被取代 圖書館的選項 HACL,對於其中 給定 形式可靠性驗證的數學證明。
    • 添加 通知空閒記憶體頁的機制。 利用這種機制,客戶系統可以將不再使用的頁面資訊傳輸給主機系統,而主機可以收回頁面資料。
    • 在 vfio/pci 中 添加 支援 SR-IOV(單根 I/O 虛擬化)。
  • 內存和系統服務
    • 80 到 100 個字符 增加 來源文字中最大行長度的限制。 同時,仍建議開發人員將每行字元數保持在 80 個字元以內,但這不再是硬性限制。 此外,僅當使用「--strict」選項執行 checkpatch 時,超過行大小限制現在才會導致產生警告。 這項變更將使開發人員不會因為以下原因而分散注意力: 操縱 帶有空格,在對齊程式碼時感覺更自由,以及 會阻止 過度斷線, 令人不安的 代碼理解和搜尋。
    • 添加 支援 EFI 混合開機模式,可讓您從 64 位元 CPU 上運行的 32 位元韌體載入 64 位元內核,而無需使用專門的開機載入程式。
    • 包括 用於識別和調試分離鎖的系統(“分離鎖」),當存取記憶體中未對齊的資料時會發生這種情況,因為執行原子指令時,資料會跨越兩個 CPU 快取行。 這種阻塞會導致效能顯著下降(比對落入一個快取行的資料進行原子操作慢 1000 個週期)。 根據「split_lock_detect」引導參數,核心可以動態偵測此類鎖定並發出警告或向導致鎖定的應用程式發送 SIGBUS 訊號。
    • 任務調度程序提供溫度感測器的追蹤(熱壓力)並在放置任務時考慮過熱。 使用提供的統計數據,熱調節器可以在過熱時調整最大 CPU 頻率,並且任務調度程序現在在調度任務運行時會考慮到由於頻率降低而導致的計算能力下降(之前,調度程序會響應變化)頻率上有一定的延遲,在一段時間內根據對可用計算資源的誇大假設做出決策)。
    • 任務調度器包括 不變指標 負載追蹤,使您能夠正確估計負載,無論當前 CPU 運行頻率如何。 這項變更使您能夠更準確地預測電壓和 CPU 頻率動態變化條件下任務的行為。 例如,在1 MHz 時消耗3/1000 CPU 資源的任務,當頻率降至2 MHz 時,將消耗3/500 的資源,這在先前創建了一個錯誤的假設,即它正在滿載運行(即任務出現)僅透過降低頻率才能使調度程序變得更大,這會導致 schedutil cpufreq 調控器做出錯誤的決定)。
    • 負責選擇效能模式的Intel P-state驅動程式已切換為使用 調度工具.
    • 核心即時運行時(PREEMPT_RT)使用BPF子系統的能力已經實現。 以前,當啟用 PREEMPT_RT 時,需要停用 BPF。
    • 新增了一種新類型的 BPF 程式 - BPF_MODIFY_RETURN,它可以附加到核心中的函數並更改該函數傳回的值。
    • 添加 機會 使用clone3()系統呼叫在與父cgroup不同的cgroup中建立一個進程,允許父進程在產生新進程或執行緒後立即套用限制並啟用記帳。 例如,服務管理員可以直接將新服務指派到單獨的cgroup中,而新行程在放置在「凍結」cgroup中時將立即停止。
    • 在Kbuild中 添加 支援環境變數「LLVM=1」在建置核心時切換到 Clang/LLVM 工具包。 提高了 binutils 版本的要求 (2.23)。
    • /sys/kernel/debug/kunit/ 部分已新增至 debugfs 中,其中包含 kunit 測試的結果。
    • 新增了核心引導參數 pm_debug_messages (類似於 /sys/power/pm_debug_messages),該參數允許輸出有關電源管理系統操作的偵錯資訊(在偵錯休眠和待機模式問題時很有用)。
    • 至異步 I/O 接口 io_uring 添加了支持 拼接() и 原子緩衝區選擇.
    • 使用 perf 工具包改進了 cgroup 分析。 先前,perf 只能分析特定 cgroup 中的任務,無法找出目前樣本屬於哪個 cgroup。 perf 現在接收每個樣本的 cgroup 訊息,讓您分析多個 cgroup 並套用排序
      報告中的 cgroup。

    • cgroupfs 是一種用於管理 cgroup 的偽 FS,它添加了對擴充屬性 (xattrs) 的支持,例如,您可以在使用者空間中為處理程序留下附加資訊。
    • 在cgroup記憶體控制器中 添加支援「memory.low」值的遞歸保護,該值調節提供給群組成員的最小 RAM 量。 當使用「memory_recursiveprot」選項掛載cgroup層次結構時,為較低節點設定的「memory.low」值將自動指派給所有子節點。
    • 添加 Uacce(統一/用戶空間存取加速框架)框架,用於在CPU和周邊設備之間共享虛擬位址(SVA,共享虛擬尋址),讓硬體加速器存取主CPU中的資料結構。
  • 硬體架構
    • 對於ARM架構,實現了熱取記憶體的能力。
    • 對於RISC-V架構,增加了對CPU熱插拔(CPU hotplug)的支援。 對於 32 位元 RISC-V,實現了 eBPF JIT。
    • 使用 32 位元 ARM 系統執行 KVM 來賓環境的功能已被刪除。
    • 刪除了 s390 架構的「虛擬」NUMA 實現,未發現該架構可實現效能改進的用例。
    • 對於 ARM64,增加了對 AMU(活動監視器單元)擴展的支持,該擴展在 ARMv8.4 中定義,並提供用於計算任務調度程序中的頻率縮放校正因子的性能計數器。
  • Оборудование
    • 添加 支援使用符合 virtio 規範的資料交換通道的 vDPA 設備。 vDPA 設備可以是實體連接的設備,也可以是軟體模擬的虛擬設備。
    • 在 GPIO 子系統中 出現 用於監視變更的新 ioctl() 指令,讓您通知進程任何 GPIO 線路狀態的變更。 作為使用新命令的範例 提議的 GPIO-手錶實用程式。
    • 在 Intel 顯示卡的 i915 DRM 驅動程式中 包括 預設支援 Tigerlake(“Gen12”)晶片,並添加了對 OLED 背光控制的初始支援。 改進了對 Ice Lake、Elkhart Lake、Baytrail 和 Haswell 晶片的支援。
    • 在amdgpu驅動中 添加 能夠將韌體載入到 ASIC 的 USBC 晶片中。 改進了 AMD Ryzen 4000“Renoir”晶片的支援。 現在支援控制 OLED 面板。 在 debugfs 中提供韌體狀態顯示。
    • VMware 虛擬化系統的 vmwgfx DRM 驅動程式中新增了在來賓系統中使用 OpenGL 4 的功能(先前支援 OpenGL 3.3)。
    • 為 TI Keystone 平台顯示系統新增了新的 DRM 驅動程式 tidss。
    • 新增液晶面板驅動:飛信K101 IM2BA02、三星s6e88a0-ams452ef01、Novatek NT35510、Elida KD35T133、EDT、新東方光電WJFH116008A、Rocktech RK101D-CT、FrVD01A、Rocktech RK350D-CT、FridaH54004D。
    • 至電源管理系統 添加 支援基於 Atom 的 Intel Jasper Lake (JSL) 平台。
    • 增加了對基於 Rockchip RK3399 的 Pinebook Pro 筆記型電腦、Pine64 PineTab 平板電腦和智慧型手機的支持 松電話 基於全志A64。
    • 新增了對新音訊編解碼器和晶片的支援:
      Amlogic AIU、Amlogic T9015、德州儀器 TLV320ADCX140、Realtek RT5682、ALC245、Broadcom BCM63XX I2S、Maxim MAX98360A、Presonus Studio 1810c、MOTU MicroBook IIc。

    • 新增了對ARM 板和平台的支援Qualcomm Snapdragon 865 (SM8250)、IPQ6018、NXP i.MX8M Plus、Kontron“sl28”、11 個i.MX6 TechNexion Pico 板選項、三個新的Toradex Colibri 選項、基於ST 的Samsung S7710 Galaxy Xcover 2 -Ericsson u8500、DH Electronics DHCOM SoM 和 PDK2、Renesas M3ULCB、Hoperun HiHope、Linutronix Testbox v2、PocketBook Touch Lux 3。

來源: opennet.ru

添加評論