Linux 內核 5.14

Linux 內核 5.14

經過兩個月的開發,Linus Torvalds 引進 核心版本 Linux 5.14。 最顯著的變化包括:新的quotactl_fd()和memfd_secret()系統呼叫、刪除ide和raw驅動程式、cgroup的新I/O優先權控制器、SCHED_CORE任務調度模式、用於建立經過驗證的BPF程序加載器的基礎設施。

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

主要的 創新:

  • 磁碟子系統、輸入/輸出和檔案系統:
    • 對於 cgroup 實施的 新的 I/O 優先權控制器 - rq-qos,可以控制每個 cgroup 成員產生的區塊裝置請求的處理優先權。 mq-deadline I/O 調度程式中新增了新的優先權控制器支援;
    • 在 ext4 檔案系統上 實施的 新的 ioctl 指令 EXT4_IOC_CHECKPOINT,強制將所有掛起的交易從日誌和關聯的緩衝區寫入磁碟,並覆蓋儲存中日誌使用的區域。 這項變更是為了防止檔案系統資訊外洩而準備的;
    • 在 Btrfs 中 製成 效能最佳化:透過消除 fsync 執行過程中不必要的擴充屬性日誌記錄,擴充屬性的密集操作效能提升高達 17%。 此外,當執行不影響範圍的修剪操作時,會停用完全同步,這會減少 12% 的操作時間。 sysfs 中新增了一項設置,用於在檢查 FS 時限制 I/O 頻寬。 新增了 ioctl 呼叫以取消調整大小和刪除設備操作;
    • 在 XFS 中 返工的 緩衝區高速緩存的實現,它被轉移到以批次方式分配記憶體頁。 提高快取效率;
    • F2FS 新增了一個在唯讀模式下運作的選項,並實作了壓縮區塊快取模式(compress_cache)以提高隨機讀取效能。 已實現使用 mmap() 操作壓縮映射到記憶體的檔案的支援。 為了選擇性地透過遮罩來停用檔案壓縮,提出了一個新的掛載選項 nocompress;
    • exFAT 驅動程式已完成工作,以提高與某些數位相機儲存的相容性;
    • 新增了系統調用 配額_fd(),它允許您不透過特殊的裝置檔案來管理配額,而是透過指定與套用配額的檔案系統關聯的檔案描述符來管理配額;
    • 具有 IDE 介面的區塊裝置的舊驅動程式已從核心中刪除;它們早已被 libata 子系統取代。 完全保留了對舊設備的支持,更改僅涉及使用舊驅動程式的能力,使用舊驅動程式時,驅動器稱為 /dev/hd*,而不是 /dev/sd*;
    • 「原始」驅動程式已從核心中刪除,透過 /dev/raw 介面提供對區塊裝置的無緩衝存取。 此功能早已在使用 O_DIRECT 標誌的應用程式中實現;
  • 記憶體和系統服務:
    • 任務調度程序中實作了一種新的調度模式 SCHED_CORE,它允許您控制哪些進程可以在同一 CPU 核心上一起運行。 每個進程都可以分配一個 cookie 標識符,該標識符定義進程之間的信任範圍(例如,屬於相同使用者或容器)。 在組織程式碼執行時,調度程序可以確保一個CPU核心僅在同一所有者關聯的進程之間共享,這可以透過阻止可信和不可信任務在同一個SMT(超線程)執行緒上運行來阻止某些Spectre攻擊;
    • 對於cgroup機制,已經實現了對kill操作的支持,可以透過向虛擬檔案cgroup.kill寫入「1」來一次殺死與該群組關聯的所有進程(發送SIGKILL);
    • 擴展了與回應分割鎖(「分割鎖」)偵測相關的功能,這種分割鎖是在存取記憶體中未對齊的資料時發生的,因為執行原子指令時,資料會跨越兩個 CPU 快取線。 這種阻塞會導致效能顯著下降,因此以前可以強制終止導致阻塞的應用程式。 新版本新增了核心命令列參數“split_lock_detect=ratelimit:N”,該參數允許您定義系統範圍內每秒鎖定操作的速率限制,超過該限制後,任何成為分割鎖定來源的進程都將被刪除。被迫停止20 毫秒而不是終止;
    • cgroup 頻寬控制器 CFS(CFS 頻寬控制器)決定可以為每個 cgroup 分配多少處理器時間,它能夠定義受給定操作持續時間限制的限制,從而可以更好地調節對延遲敏感的負載。 例如,將 cpu.cfs_quota_us 設定為 50000,cpu.cfs_period_us 設為 100000,將允許一組進程每 100ms 浪費 50ms 的 CPU 時間;
    • 添加 用於建立 BPF 程式載入器的初始基礎設施,這將進一步允許僅下載使用可信任數位金鑰簽署的 BPF 程式;
    • 新增了新的futex操作FUTEX_LOCK_PI2,它使用單調計時器來計算逾時,其中考慮了系統在睡眠模式下花費的時間;
    • 對於RISC-V架構,支援大記憶體頁面(Transparent Huge-Pages)並能夠使用 KFENCE 識別使用記憶體時的錯誤;
    • 進入 madvise() 系統調用,它提供了一種最佳化進程記憶體管理的方法, 添加 MADV_POPULATE_READ 和 MADV_POPULATE_WRITE 標誌在映射用於讀取或寫入操作的所有記憶體頁面上產生“頁面錯誤”,而不執行實際的讀取或寫入(故障前)。 標誌的使用對於減少程式執行的延遲很有用,這要歸功於立即對所有未分配的頁面主動執行「頁面錯誤」處理程序,而無需等待對它們的實際訪問;
    • 在單元測試系統中 國尼特 添加 支援在 QEMU 環境中運行測試;
    • 增加了新的示踪劑:“奧斯噪音」追蹤由中斷處理引起的應用程式延遲,「timerlat」顯示從定時器訊號喚醒時有關延遲的詳細資訊;
  • 虛擬化與安全:
    • 添加 系統調用 memfd_secret(),它允許您在隔離的位址空間中建立私有記憶體區域,僅對所有者進程可見,不反映在其他進程中,且核心不能直接存取;
    • 在 seccomp 系統呼叫過濾系統中,當鎖定處理程序移至使用者空間時,可以使用一個原子操作為隔離任務建立一個檔案描述符,並在處理系統呼叫時傳回它。 建議的操作解決了 問題 當訊號到達時,使用者空間中的處理程序會中斷;
    • 添加 新機制 管理使用者 ID 命名空間中的資源限制,它將各個 rlimit 計數器綁定到「使用者命名空間」中的使用者。 這項變更解決了一個使用者在不同容器中執行進程時使用公共資源計數器的問題;
    • 適用於ARM64 系統的KVM 管理程式新增了在來賓系統中使用MTE(MemTag,記憶體標記擴充功能)擴充功能可讓您將標記綁定到每個記憶體分配操作,並組織檢查指標的正確使用以阻止對記憶體的利用由於存取已釋放的記憶體區塊、緩衝區溢位、初始化先前的存取以及在當前上下文之外使用而導致的漏洞;
    • 現在可以為核心和使用者空間單獨配置 ARM64 平台提供的指標身份驗證。 該技術可讓您使用專門的 ARM64 指令來使用儲存在指標本身未使用的高位元中的數位簽章來驗證返回位址;
    • 在使用者模式Linux中 添加 支援使用具有虛擬 PCI 匯流排的 PCI 裝置的驅動程序,由 PCI-over-virtio 驅動程式實現;
    • 對於 x86 系統,增加了對 virtio-iommu 半虛擬化設備的支持,允許您透過 virtio 傳輸發送 IOMMU 請求,例如 ATTACH、DETACH、MAP 和 UNMAP,而無需模擬內存頁表;
    • 對於Intel CPU,從Skylake系列到Coffee Lake,預設會停用Intel TSX(交易同步擴充)的使用,該擴充功能提供了透過動態消除不必要的同步操作來提高多執行緒應用程式效能的工具。 由於可能受到攻擊,擴展程序被禁用 殭屍、操縱非同步中斷操作(TAA、TSX Asynchronous Abort)機制運作過程中發生的資訊外洩;
  • 網路子系統:
    • 繼續整合到 MPTCP(多路徑 TCP)的核心中,MPTCP 是 TCP 協定的擴展,用於組織 TCP 連線的操作,透過與不同 IP 位址關聯的不同網路介面沿著多條路由同時傳送封包。 在新一期中 添加 一種為IPv4 和IPv6 設定自己的流量雜湊策略(多路徑雜湊策略)的機制,使得可以從用戶空間確定在計算確定路徑選擇的雜湊時將使用資料包中的哪些欄位(包括封裝的欄位)對於資料包;
    • 虛擬傳輸 virtio 中新增了套接字支持 SOCK_SEQPACKET (資料封包有序可靠的傳輸);
    • SO_REUSEPORT 套接字機制的功能得到了擴展,它允許多個偵聽套接字同時連接到一個端口,以接收連接,並將傳入請求同時分佈到通過SO_REUSEPORT 連接的所有套接字上,從而簡化了多執行緒伺服器應用程式的創建。 在新版本中 添加 當最初選擇的套接字處理請求時發生故障時,將控制權轉移到另一個套接字的方法(解決重新啟動服務時丟失單一連線的問題);
  • 裝置:
    • 在amdgpu驅動程式中 實施的 支援新的AMD Radeon RX 6000系列GPU,代號為“Beige Goby”(Navi 24)和“Yellow Carp”,以及改進對Aldebaran GPU(gfx90a)和Van Gogh APU的支援。 增加了同時使用多個 eDP 面板的功能。 對於 APU Renoir,已經實現了對使用視訊記憶體(TMZ,可信任記憶體區域)中的加密緩衝區的支援。 增加了對熱拔插顯示卡的支援。 對於 Radeon RX 6000 (Navi 2x) GPU 和較舊的 AMD GPU,預設啟用對 ASPM(活動狀態電源管理)省電機制的支持,此前僅對 Navi 1x、Vega 和 Polaris GPU 啟用;
    • 對於AMD晶片,在HMM(異質記憶體管理)子系統的基礎上增加了對共享虛擬記憶體(SVM,共享虛擬記憶體)的支持,允許使用具有自己的記憶體管理單元(MMU,記憶體管理單元)的設備,它可以存取主記憶體。 包括使用HMM,可以在GPU和CPU之間組織一個共享位址空間,其中GPU可以存取進程的主記憶體;
    • 添加了初始技術支援 AMD 智慧轉變,動態變更配備晶片組和 AMD 顯示卡的筆記型電腦上 CPU 和 GPU 的功耗參數,以提高遊​​戲、影片編輯和 3D 渲染時的效能;
    • 在 Intel 顯示卡的 i915 驅動程式中 包括 支援Intel Alderlake P晶片;
    • 為 Hyper-V 虛擬圖形適配器新增了 drm/hyperv 驅動程式;
    • 添加 simpledrm 圖形驅動程序,使用 UEFI 韌體或 BIOS 提供的 EFI-GOP 或 VESA 幀緩衝區進行輸出。 這個驅動程式的主要目的是在啟動的初始階段提供圖形輸出功能,然後才能使用完整的 DRM 驅動程式。 該驅動程式還可以作為尚未安裝本機 DRM 驅動程式的設備的臨時解決方案;
    • 添加 一體化計算機支持 樹莓派400;
    • 增加了 dell-wmi-privacy 驅動程式以支援戴爾筆記型電腦中包含的攝影機和麥克風硬體開關;
    • 適用於聯想筆記型電腦 添加 用於透過 sysfs /sys/class/firmware-attributes/ 更改 BIOS 參數的 WMI 介面;
    • 擴大 支援USB4介面的設備;
    • 添加 支援音效卡和編解碼器 AmLogic SM1 TOACODEC、Intel AlderLake-M、NXP i.MX8、NXP TFA1、TDF9897、Rockchip RK817、Qualcomm Quinary MI2 和 Texas Instruments TAS2505。 改進了 HP 和 ASUS 筆記型電腦的音訊支援。 添加 用於減少音訊在具有 USB 介面的裝置上開始播放之前的延遲的補丁。

來源 – opennet.ru。

來源: linux.org.ru