Linux 5.1 內核版本

經過兩個月的開發,Linus Torvalds 引進 核心版本 Linux 5.1。 最顯著的變化包括:非同步 I/O io_uring 的新介面、使用 NVDIMM 作為 RAM 的能力、Nouveau 中對共享虛擬記憶體的支援、透過 fanotify 支援對超大型檔案系統的可擴展監控、配置 Zstd 壓縮的能力Btrfs 中的層級、新的cpuidle TEO 處理程序、解決2038 問題的系統呼叫的實作、從沒有initramfs 的裝置映射器裝置啟動的能力、SafeSetID LSM 模組、對組合即時修補程式的支援。

主要的 創新:

  • 磁盤子系統、I/O 和文件系統
    • 實作了異步 I/O 的新介面 - io_uring,它以其對 I/O 輪詢的支援以及有或沒有緩衝的工作能力而聞名。 讓我們回想一下,先前提出的非同步 I/O 機制「aio」不支援緩衝 I​​/O,只能在 O_DIRECT 模式下運行(不緩衝和繞過快取),由於等待元資料可用性而存在鎖定問題,並且由於在記憶體中複製資料而產生了巨大的開銷。

      在 API 內
      io_uring 開發人員試圖消除舊的 aio 介面的缺點。 經過 производительности io_uring 非常接近 軟件開發工具包 在啟用輪詢的情況下,它明顯領先於 libaio。 已準備好在用戶空間中運行的最終應用程式中使用 io_uring 的庫 利布林,它提供了一個基於核心介面的高級框架;

    • FS中的事件追蹤機制 fanotify() 添加 支援追蹤超級區塊和結構變化情況 迪倫特 (建立、刪除和移動目錄的事件)。 所提供的功能有助於解決使用 inotify 機制在非常大的檔案系統中建立遞歸更改追蹤時出現的可擴展性問題(以前只能透過 inotify 追蹤直接更改,但是
      在大型嵌套目錄的遞歸追蹤條件下的效能還有很多不足之處)。 現在透過 fanotify 可以有效地完成這樣的監控;

    • 在 Btrfs 檔案系統上 添加 為zstd演算法自訂壓縮等級的能力,這可以被認為是快速但無效的lz4和緩慢但良好的壓縮xz之間的最佳折衷。 與先前使用 zlib 時設定壓縮等級的方式類比,zstd 新增了對「-o compress=zstd:level」掛載選項的支援。 測試中,第一級最低提供2.658倍的資料壓縮,壓縮速度為438.47MB/s,解壓縮速度為910.51MB/s,記憶體消耗為780MB;最高15級提供3.126倍,但壓縮速度為37.30MB/s ,解壓縮速度為878.84MB/s,記憶體消耗為2547MB。速度XNUMXMB/s,解包XNUMXMB/s,記憶體消耗XNUMXMB;
    • 添加 能夠從位於裝置映射器裝置上的檔案系統啟動,而無需使用 initramfs。 從目前核心版本開始,裝置映射器裝置可以在引導過程中直接使用,例如作為根檔案系統的分割區。 使用引導參數“dm-mod.create”配置分割區。 允許載入的設備映射器模組包括:「crypt」、「delay」、「linear」、「snapshot-origin」和「verity」;
    • F2FS_NOCOW_FL 標誌已新增至以隨身碟為主的 F2FS 檔案系統中,該標誌可讓您停用給定檔案的寫入時複製模式;
    • 檔案系統從核心中刪除 埃克斯夫斯,它是 ext2 的變體,適合與 OSD(基於物件的儲存裝置)物件儲存一起使用。 此類物件儲存設備對 SCSI 協定的支援也已被刪除;
  • 虛擬化和安全
    • 在 prctl() 中新增了 PR_SPEC_DISABLE_NOEXEC 選項,以控制所選進程的指令的推測執行。 一個新選項可讓您選擇性地停用可能受到 Spectre 攻擊的程序的推測執行。 鎖持續到第一次呼叫 exec() 為止;
    • 實作LSM模組 安全性集ID,它允許系統服務安全地管理用戶,而無需升級權限(CAP_SETUID)且無需獲得 root 權限。 透過基於有效綁定白名單(以「UID1:UID2」形式)在 securityfs 中定義規則來指派權限;
    • 新增了基於堆疊的安全模組 (LSM) 載入所需的低階變更。 引入了“lsm”核心引導選項來控制載入哪些模組以及載入順序;
    • 審計子系統增加了對文件命名空間的支援;
    • 擴充 GCC 外掛程式 structleak 的功能,它允許您阻止潛在的記憶體內容洩漏。透過堆疊上的參考存取提供程式碼中使用的任何變數的初始化;
  • 網絡子系統
    • 用於插座 實施的 新選項“SO_BINDTOIFINDEX”類似於
      “SO_BINDTODEVICE”,但將網路介面的索引號碼而不是介面名稱作為參數;

    • mac80211 堆疊增加了為一台裝置分配多個 BSSID(MAC 位址)的功能。 作為優化WiFi 效能專案的一部分,mac80211 堆疊添加了通話時間統計和在多個站點之間分配通話時間的功能(在存取點模式下運行時,為速度較慢的無線站點分配較少的傳輸時間,而不是在所有站點之間均勻分配時間)站);
    • 新增機制》開發連結健康”,當網路介面出現問題時提供通知;
  • 內存和系統服務
    • 實施的 安全訊號傳輸,允許 PID 重複使用。 例如,先前呼叫kill時,可能會出現這樣的情況:發送訊號後,目標PID可能會因進程終止而被釋放並被另一個進程佔用,並且訊號最終會傳遞給另一個進程。 為了消除這種情況,新增了一個新的系統呼叫 pidfd_send_signal,它使用 /proc/pid 中的檔案描述子來確保穩定的進程綁定。 即使在系統呼叫處理過程中重複使用PID,檔案描述子也不會改變,可以安全地用於向進程發送訊號;
    • 添加 使用永久儲存裝置(例如持久記憶體)的能力 NVDIMM)作為內存。 到目前為止,核心支援儲存設備等設備,但現在它們也可以用作附加 RAM。 該功能的實現是為了滿足那些願意忍受性能滯後並希望使用本機 Linux 內核內存管理 API 而不是使用在 dax 的 mmap 之上運行的現有用戶空間內存分配系統的用戶的願望。文件;
    • 新增了新的CPU空閒處理程序(cpuidle,決定CPU何時可以進入深度省電模式;模式越深,省電越大,但退出模式所需的時間也越長) - TEO(Timer Events Oriented Governor) )。 到目前為止,已經提出了兩種 cpuidle 處理程序 - “menu”和“ladder”,其啟發式不同。 「菜單」處理程序在做出啟發式決策時存在已知問題,為了消除這些問題,決定準備一個新的處理程序。 TEO 被定位為「選單」處理程序的替代方案,可在保持相同水平的功耗的同時實現更高的效能。
      您可以使用啟動參數「cpuidle.governor=teo」來啟動新的處理程序;

    • 作為消除工作的一部分 2038年的問題由 32 位元 time_t 類型溢位引起的,包括為 32 位元體系結構提供 64 位元時間計數器的系統呼叫。 因此,64 位元 time_t 結構現在可以在所有架構上使用。 網路子系統中的選項也進行了類似的更改 時間戳 網路套接字;
    • 進入核心熱補丁系統(live patching) 添加 「原子替換」功能可將一系列變更原子地套用到單一函數。 此功能可讓您一次分發涵蓋多個變更的摘要補丁,而不是按照嚴格定義的順序逐步套用即時補丁的過程,這非常難以維護。 以前,每個後續變更都必須基於上次變更後的函數狀態,而現在可以一次傳播與一個初始狀態相關的多個變更(即,維護者可以維護相對於基礎核心的一個統一修補程式)相互依賴的補丁鏈);
    • 已公佈 已棄用對 a.out 可執行檔格式的支持
      刪除 產生a.out格式核心檔的程式碼,處於廢棄狀態。 a.out 格式已經很久沒有在 Linux 系統上使用了,而且預設 Linux 配置中的現代工具早已不支援 a.out 檔案的生成。 此外,a.out 檔案的載入器可以完全在使用者空間中實作;

    • BPF 程式驗證機制中新增了識別和刪除未使用程式碼的能力。 核心還包括為 BPF 子系統提供自旋鎖支援的補丁,提供了管理 BPF 程式並行執行的附加功能;
  • Оборудование
    • 在新司機 添加 支援異質記憶體管理,允許CPU和GPU存取公共同步記憶體區域。 共享虛擬記憶體系統(SVM,共享虛擬記憶體)是在HMM(Heterogeneous Memory Management)子系統的基礎上實現的,它允許使用具有自己的記憶體管理單元(MMU,記憶體管理單元)的設備,這些設備可以訪問主記憶體。 特別是,使用HMM,可以在GPU和CPU之間組織一個共享位址空間,其中GPU可以存取進程的主記憶體。 目前僅對 Pascal 系列 GPU 啟用 SVM 支持,但也為 Volta 和 Turing GPU 提供支援。 此外,在新 添加 新的 ioctl 控制進程記憶體區域到 GPU 記憶體的遷移;
    • 在適用於 GPU Skylake 及更高版本 (gen9+) 的 Intel DRM 驅動程式中 包括 預設情況下,快速啟動模式會消除啟動過程中不必要的模式變更。 添加 基於 Coffelake 和 Ice Lake 微架構的裝置識別碼。 適用於咖啡薯片 添加 GVT 支援(GPU虛擬化)。 對於虛擬 GPU 實施的 VFIO EDID 支援。 適用於液晶面板 MIPI/DSI 添加 支援 ACPI/PMIC 元素。 實施的 新電視模式 1080p30/50/60 TV;
    • amdgpu 驅動程式新增了對 Vega10/20 BACO GPU 的支援。 實作了 Vega 10/20 電源管理和 Vega 10 冷卻器控製表。為 Picasso GPU 新增了新的 PCI 裝置識別碼。 添加 用於管理可調度依賴關係以避免死鎖的介面;
    • 添加 用於螢幕加速器的 DRM/KMS 驅動程式 ARM科梅達 (馬裡 D71);
    • 新增對統寶TPG110、Sitronix ST7701、PDA 91-00156-A0、LeMaker BL035-RGB-002 3.5和Kingdisplay kd097d04螢幕面板的支援;
    • 新增對Rockchip RK3328、Cirrus Logic CS4341和CS35L36、MediaTek MT6358、Qualcomm WCD9335和Ingenic JZ4725B音訊編解碼器以及Mediatek MT8183音訊平台的支援;
    • 新增了對 NAND 控制器快閃記憶體 STMicroElectronics FMC2、Amlogic Meson 的支援;
    • 增加了Habana AI硬體系統的加速器支援;
    • 新增了對 NXP ENETC 千兆位元乙太網路控制器以及 MediaTek MT7603E (PCIe) 和 MT76x8 無線介面的支援。

同時,拉丁美洲自由軟體基金會 形成的
選項 完全免費的內核5.1 - Linux-libre 5.1-gnu,清除包含非自由元件或程式碼部分的韌體和驅動程式元素,其範圍由製造商限制。 在新版本中,mt7603 和 goya 驅動程式中禁用了 blob 載入。 更新了驅動程式和子系統 wilc1000、iwlwifi、soc-acpi-intel、brcmfmac、mwifiex、btmrvl、btmtk 和 touchscreen_dmi 中的斑點清理程式碼。 由於從核心中刪除,lantiq xrx200 韌體載入程式中的 Blob 清理已停止。

來源: opennet.ru

添加評論