Linux 5.3 內核版本

經過兩個月的開發,Linus Torvalds 引進 核心版本 Linux 5.3。 其中最顯著的變化是:支援 AMD Navi GPU、兆熙處理器和 Intel Speed Select 電源管理技術、能夠使用 umwait 指令進行等待而無需使用週期,
「利用限制」模式可提高非對稱 CPU 的互動性、pidfd_open 系統呼叫、使用 4/0.0.0.0 子網路中的 IPv8 位址的能力、nftables 硬體加速的可能性、DRM 子系統中的 HDR 支援、ACRN 整合管理程序。

В 公告 在新版本中,Linus 提醒所有開發人員核心開發的主要規則 - 保持使用者空間元件的相同行為。 對核心的更改不應以任何方式破壞已經運行的應用程式或導致用戶級別的回歸。 在這種情況下,違反行為不僅會導致 ABI 變更、刪除過時的程式碼或出現錯誤,還會對正確執行的有用改進產生間接影響。 作為一個說明性的例子有 丟棄的 有用 優化 在 Ext4 程式碼中,它透過停用小 I/O 請求的 inode 表預讀來減少磁碟機存取次數。

最佳化導致這樣一個事實:由於磁碟活動減少,getrandom() 隨機數產生器的熵開始累積得更慢,並且在某些配置中,在某些情況下,在加載過程中可能會觀察到凍結,直到熵池恢復正常。填充。 由於優化確實有用,開發人員之間引起了討論,建議透過禁用 getrandom() 呼叫的預設阻塞模式並添加一個可選標誌來等待熵來解決該問題,但這樣的更改會影響加載初始階段隨機數的品質.

新版本包含來自 15794 名開發人員的 1974 個修復,
補丁大小 - 92 MB(更改影響了 13986 個文件,新增了 258419 行程式碼,
刪除了 599137 行)。 大約 39% 出現在 5.3 中
更改與設備驅動程式相關,大約 12% 的更改與
對更新特定於硬體架構的程式碼的態度,11%
與網路堆疊相關,3% 與檔案系統相關,3% 與內部相關
內核子系統。

主要的 創新:

  • 內存和系統服務
    • 繼續開發「pidfd」功能,以協助處理 PID 重複使用情況(pidfd 與特定進程關聯且不會更改,而在與 PID 關聯的目前進程終止後,PID 可以與另一個進程關聯)。 之前已經加入到內核了
      pidfd_send_signal()系統呼叫和clone()呼叫中的CLONE_PIDFD標誌來取得在idfd_send_signal()中使用的pidfd。 將clone() 與CLONE_PIDFD 標誌一起使用可能會導致服務管理器或Android 平台的記憶體不足強制終止系統出現問題。 在這種情況下,呼叫不帶 CLONE_PIDFD 的 fork() 或 clone() 來啟動。

      內核5.3引入了系統調用 pidfd_open(),它允許您獲取任意現有進程的可檢查 pidfd,該進程不是透過使用 CLONE_PIDFD 標誌呼叫 clone() 建立的。 還添加了使用 poll() 和 epoll() 進行 pidfd 輪詢的支持,這允許進程管理器追蹤任意進程的終止,而不必擔心將 PID 分配給新進程時出現競爭情況。 與 pidfd 關聯的進程終止時發出通知的機制類似於其子進程終止時發出的通知;

    • 任務調度程序中新增了對負載固定機制的支援(利用夾緊),讓您遵守最小或最大頻率範圍,具體取決於 CPU 上活動的任務。 所提出的機制透過至少以「請求」頻率的較低端運行這些任務來加速直接影響使用者體驗品質的任務。 不影響使用者工作的低優先級任務使用「允許」頻率的上限啟動。 限制是透過 sched_setattr() 系統呼叫中的 sched_uclamp_util_min 和 sched_uclamp_util_max 屬性設定的。
    • 增加了對能源管理技術的支持 英特爾速度選擇,在配備 Intel Xeon 處理器的特定伺服器上可用。 該技術可讓您為不同的 CPU 核心設置效能和分區吞吐量設置,從而允許您優先考慮在某些核心上執行的任務的效能,而犧牲其他核心上的效能;
    • 使用者空間中的行程 的確 使用 umwait 指令能夠在不使用迴圈的情況下等待短時間。 該指令與 umonitor 和 tpause 指令一起,將在英特爾即將推出的“Tremont”晶片中提供,並將允許在使用超線程時實現節能且不影響其他線程性能的延遲;
    • 對於RISC-V架構,增加了對大記憶體頁的支援;
    • kprobes 追蹤機制增加了取消引用內核指標到使用者空間的功能,例如,可以使用它來評估傳遞給系統呼叫的結構的內容。 也新增了在啟動階段安裝檢查的功能。
    • 在設定檔中新增了 PREEMPT_RT 選項以實現即時操作。 支援即時模式的程式碼本身尚未添加到核心中,但該選項的出現是長期史詩的一個好兆頭 一體化 即時搶佔補丁即將完成;
    • 新增了clone3()系統調用,並實作了更可擴展版本的clone()接口,它允許指定更多數量的標誌;
    • 新增了 bpf_send_signal() 處理程序,允許 BPF 程序向任意進程發送訊號;
    • 對於KVM hypervisor環境中的perf事件,增加了新的事件過濾機制,讓管理員可以確定允許或不允許在來賓系統端監控的事件類型;
    • eBPF應用驗證機制中增加了處理帶有循環的程式的能力,如果循環的執行受到限制並且不會導致超過最大指令數的限制;
  • 磁盤子系統、I/O 和文件系統
    • XFS 檔案系統現在支援多執行緒 inode 旁路(例如,在檢查配額時)。 新增了新的ioctls BULKSTAT和INUMBERS,提供對第五版FS格式中出現的功能的訪問,例如inode誕生時間以及為每個AG組(分配組)設定BULKSTAT和INUMBERS參數的能力;
    • 在 Ext4 中 添加了支持 目錄中的空白(未連結的區塊)。
      提供加工 開啟檔案的標誌「i」(不可變)(如果在檔案已開啟時設定該標誌,則禁止寫入);

    • Btrfs 提供了在所有架構上快速實作 crc32c 的定義;
    • 在 CIFS 中,作為實驗性開發,已刪除 smbdirect 支援的程式碼。 SMB3 增加了在 GCM 模式下使用加密演算法的功能。 新增了一個新的安裝選項,用於從 ACE(存取控制條目)條目中提取模式參數。 優化了 open() 調用的性能;
    • 在 F2FS 中新增了一個選項,以在 checkpoint=disable 模式下運行時限制垃圾收集器。 新增了 ioctl 以從 F2FS 中刪除區塊範圍,從而允許動態調整分割區大小。 新增了在 F2FS 中放置交換檔案以提供直接 I/O 的功能。 新增了對固定文件和為所有使用者的類似文件分配區塊的支援;
    • 非同步輸入/輸出io_uring介面增加了對非同步操作sendmsg()和recvmsg()的支援;
    • UBIFS 檔案系統中新增了使用 zstd 演算法壓縮的支援以及驗證簽署 FS 映像的功能;
    • Ceph FS 現在支援檔案的 SELinux 安全標籤;
    • 對於 NFSv4,已實作新的掛載選項“nconnect=”,該選項會決定與伺服器建立的連線數量。 這些連接之間的流量將使用負載平衡進行分配。 此外,NFSv4 伺服器現在會建立目錄 /proc/fs/nfsd/clients ,其中包含有關目前客戶端的信息,包括有關它們已開啟的檔案的資訊;
  • 虛擬化和安全
    • 核心包括用於嵌入式設備的管理程序 ACRN,其編寫著重於即時任務的準備情況以及在關鍵任務系統中使用的適用性。 ACRN 提供最小的開銷,確保與裝置互動時的低延遲和足夠的回應能力。 支援CPU資源、I/O、網路子系統、圖形和聲音操作的虛擬化。 ACRN可用於在電子控制單元、儀表板、汽車資訊系統、消費性物聯網設備和其他嵌入式技術中運行多個隔離的虛擬機器;
    • 在使用者模式 Linux 中 添加 時間旅行模式,可讓您在虛擬 UML 環境中放慢或加快時間,以便更輕鬆地偵錯與時間相關的程式碼。 另外也增加了一個參數
      time-travel-start,允許系統時鐘以紀元格式從指定時刻開始;

    • 新增了新的核心命令列選項“init_on_alloc”和“init_on_free”,指定後,將啟用已分配和已釋放記憶體區域的清零(用零填充malloc 和free),這允許由於額外的初始化開銷而提高安全性;
    • 新增了新驅動程式 virtio-iommu 實現半虛擬化設備,允許您透過 virtio 傳輸發送 IOMMU 請求,例如 ATTACH、DETACH、MAP 和 UNMAP,而無需模擬記憶體頁表;
    • 新增了新驅動程式 virtio-pmem,表示對映射到實體位址空間的儲存裝置的訪問,例如 NVDIMM;
    • 實現了將加密金鑰附加到使用者或網路命名空間(金鑰在選定的命名空間之外無法存取)以及使用 ACL 保護金鑰的功能;
    • 到加密子系統 添加 支援非常快速的非加密雜湊演算法 xx哈希值,其速度取決於記憶體效能;
  • 網絡子系統
    • 啟用了對 4/0.0.0.0 範圍內的 IPv8 位址的處理,該位址以前無法使用。 此子網路的介紹 將允許 分配另外16萬個IPv4位址;
    • 在 nftables 的 Netfilter 中 添加 透過使用新增的驅動程式支援封包過濾的硬體加速機制 流塊API。 包含所有鏈的整個規則表可以放置在網路適配器一側。 透過將 NFT_TABLE_F_HW 標誌綁定到表格來完成啟用。 支援簡單的第 3 層和第 4 層協定元資料、接受/拒絕操作、IP 和發送方/接收方網路連接埠和協定類型的對應;
    • 添加 內建對網橋的連接追蹤支持,不需要使用 br_netfilter 模擬層;
    • 在 nf_tables 中 添加 支援 SYNPROXY 模組,該模組複製了 iptables 的類似功能,並且還實現了簽入 IPv4 標頭中各個選項的規則的能力;
    • 新增了將 BPF 程式附加到 setsockopt() 和 getsockopt() 系統呼叫的功能,例如,它允許您將自己的存取處理程序附加到這些呼叫。 另外,還增加了一個新的呼叫點(hook),透過它可以組織每個RTT間隔(round-trip-time、ping time)呼叫一次BPF程式;
    • 對於 IPv4 和 IPv6 添加 新的nexthop路由資料儲存機制旨在提高路由表的可擴充性。 測試表明,使用新系統時,只需743秒即可將一組4.3萬條路由載入到核心中;
    • 對於藍牙 實施的 支援 LE ping 所需的功能;
  • Оборудование
    • 添加 支援該公司的 x86 相容處理器 兆新,是威盛電子與上海市政府聯合計畫的成果。 ZX CPU系列基於x86-64 Isaiah架構構建,持續技術發展 威盛半人馬座;
    • DRM(直接渲染管理器)子系統以及 amdgpu 和 i915 圖形驅動程式增加了對透過 HDMI 連接埠解析、處理和發送 HDR(高動態範圍)元資料的支持,允許使用能夠顯示額外的亮度範圍;
    • amdgpu 驅動程式添加了對 AMD NAVI GPU (RX5700) 的初始支持,其中包括基礎驅動程式、螢幕互動程式碼 (DCN2)、GFX 和計算支援 (GFX10),
      SDMA 5(系統 DMA0)、電源管理和多媒體編碼器/解碼器 (VCN2)。 amdgpu 還改進了對基於 Vega12 和 Vega20 GPU 的卡片的支持,為此添加了額外的記憶體和電源管理功能;

    • amdkfd 驅動程式中新增了對基於 VegaM GPU 的卡片的支援(適用於離散 GPU,例如 Fiji、Tonga、Polaris);
    • 在適用於 Icelake 晶片的 Intel 顯示卡的 DRM 驅動程式中 實施的 新的多段伽瑪校正模式。 新增了透過 DisplayPort 以 YCbCr4:2:0 格式輸出的功能。 新增了新韌體 古C 適用於 SKL、BXT、KBL、GLK 和 ICL。 已實現以非同步模式關閉螢幕電源的功能。 添加 支援保存和恢復 Ironlake (gen5) 和 gen4 (Broadwater - Cantiga) 晶片的渲染上下文,這允許您在從一個批次操作轉移到另一個批次操作時從用戶空間恢復 GPU 狀態;
    • Nouveau驅動程式提供對NVIDIA Turing TU116晶片組的偵測;
    • ARM Komeda 螢幕加速器 (Mali D71) 的 DRM/KMS 驅動程式的功能已擴展,支援縮放、分割/合併層、旋轉、延遲寫入、AFBC、SMMU 和顏色編碼格式 Y0L2、P010、YUV420_8/10BIT已添加;
    • MSM驅動增加了對高通處理器中使用的A540 GPU Adreno系列的支持,以及對Snapdragon 8998的MSM835 DSI控制器的支援;
    • 增加了液晶面板 Samsung S6E63M0、Armadeus ST0700、EDT ETM0430G0DH6、OSD101T2045-53TS、
      Evervision VGG804821、FriendlyELEC HD702E、KOE tx14d24vm1bpa、TFC S9700RTWV43TR-01B、EDT ET035012DM6 與 VXT VL050-8048NT-C01;

    • 添加 用於啟用解碼加速工具的驅動程式
      Amlogic Meson SoC 中提供的影片;

    • 在 v3d 驅動程式中(針對 Raspberry Pi 中使用的 Broadcom Video Core V GPU)出現 支持 調度計算著色器;
    • 添加 適用於現代 Apple MacBook 和 MacBookPro 筆記型電腦型號的 SPI 鍵盤和觸控板驅動程式;
    • 添加 對與軟碟驅動程式關聯的 ioctl 呼叫提供額外保護,並且驅動程式本身被標記為未維護
      (“孤立”),這意味著測試的終止。 驅動程式仍然儲存在核心中,但不能保證其正確運作。 該驅動程式被認為是過時的,因為很難找到用於測試它的工作設備 - 所有當前的外部驅動器通常都使用 USB 介面。

    • 添加 Raspberry Pi 板的 cpufreq 驅動程序,可讓您動態控制處理器頻率的變化;
    • 新增了對新ARM SoC Mediatek mt8183 (4x Cortex-A73 + 4x Cortex-A53)、TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSP + MMA) 和Amlogic G12B (4x Cortex-R73F + 2 DSP + MMA) 和Amlogic G53B (XNUMXx Cortex-A Cortex ) 的支援AXNUMX),以及板:
      • 純粹主義 Librem5,
      • Aspeed BMC,
      • 微軟奧林巴斯BMC,
      • 控創 SMARC,
      • Novtech Meerkat96 (i.MX7),
      • ST微Avenger96,
      • GoogleCheza(高通SDM845),
      • 高通 Dragonboard 845c(高通 SDM845)、
      • Hugsun X99電視盒(瑞芯微RK3399),
      • Khadas Edge/Edge-V/Captain(瑞芯微RK3399),
      • HiHope RZ/G2M,
      • 恩智浦 LS1021A-TSN。

同時,拉丁美洲自由軟體基金會 形成的
選項 完全免費的內核5.3 - Linux-libre 5.3-gnu,清除包含非自由元件或程式碼部分的韌體和驅動程式元素,其範圍由製造商限制。 在新版本中,qcom、hdcp drm、allegro-dvt 和 meson-vdec 驅動程式中禁用了 blob 載入。
更新了驅動程式和子系統 amdgpu、i915、netx、r8169、brcmfmac、rtl8188eu、adreno、si2157、pvrusb2、touchscreen_dmi、skylake 聲音驅動程式以及微程式碼文件中的斑點清理程式碼。

來源: opennet.ru

添加評論