LWN: 5.17 合并窗口第一部分!
關注了就能看到更多這么棒的文章哦~
5.16 Merge window, part 1
By Jonathan Corbet
November 4, 2021
DeepL assisted translation
https://lwn.net/Articles/874683/
截止到撰寫此文的時候,Linus Torvalds 已經為 5.16 版本內核而向內核合入了 6800 個 non-merge changesets。這個數量估計占了個合并窗口中總共會進入的 patchset 數量的一半以上,所以現(xiàn)在是一個好時機來了解到目前為止已經合入了哪些功能。其中包括了許多重大改動以及一些內核內部代碼的大規(guī)模重構,但相對來說,多數都不算是突破性的新功能。
在 5.16 合并窗口的前半部分拉出的變化包括。
Architecture-specific
現(xiàn)在支持了 Arm 8.6 timer extension 擴展。
MIPS 系統(tǒng)新增了一個 BPF 虛擬機要用的 JIT (just-in-time)編譯器。
KFENCE 現(xiàn)在在 PA-RISC 機器上也支持了。
在 PA-RISC 機器上點擊 TOC 按鈕("transfer of control,控制權轉移")的話會使內核進入 debugger。
RISC-V 現(xiàn)在支持了 KVM 虛擬化,這個改動的耗時比開發(fā)者預計的要長。
內核已經支持了英特爾的高級矩陣擴展(AMX,Advanced Matrix Extension)功能。這一點得到了廣泛討論,并對現(xiàn)有的浮點支持代碼進行了重大重構。
Core kernel
futex_waitv()系統(tǒng)調用(https://lwn.net/Articles/866112/?)已經合并。
CPU 調度器支持了 "clusters" 的概念,這是一種硬件連接方式,多個內核共享同一個二級緩存。能支持 cluster 的調度器會盡力把任務分配給系統(tǒng)的各個 cluster,來平衡整個機器上的 cache 的工作壓力。
tracing 機制的 tracefs 接口現(xiàn)在支持設置 owner 和 group 的權限了;這個功能可以用來僅允許一個特定的 group 才能使用 tracing 功能。不過,"other" 的權限 bit 還是不能設置,也就無法允許所有人訪問。
像往常一樣,有一大堆 BPF 的改動。新增 bpf_trace_vprintk() helper 可以輸出信息而不受 bpf_trace_printk()的三個參數的限制。新增了從 BPF 調用 loadable module 中的內核函數的支持。增加了一個新的 bloom-filter map 類型。非特權用戶的 BPF 現(xiàn)在被默認禁用。還有一份新的文檔描述了各種 BPF 組件的 license 授權以及對用戶的要求。
Filesystems and block I/O
block layer 繼續(xù)進行了一系列性能優(yōu)化,從而顯著提高了每個 cpu core 的操作速率(operation rates)。
現(xiàn)在支持 multi-actuator disk,也就是多執(zhí)行器(rotating)磁盤,可以同時訪問多個扇區(qū)(sector)。相關的 commit 記錄了這些驅動器的 sysfs 接口。
新增了一個 ioctl() 命令 (CDROM_TIMED_MEDIA_CHANGE),用于檢測 CDROM 驅動器中的光盤發(fā)生變化的 event。可見,人們仍然在使用 CDROM 驅動器……
EROFS 文件系統(tǒng)增加了簡單的多設備(multiple-device)支持。
Hardware support
Media。OmniVision OV13B10 傳感器,Hynix Hi-846 傳感器,以及 R-Car 圖像信號處理器。
Miscellaneous。Microchip 外部中斷控制器、蘋果 mailbox 控制器、Ingenic JZ47xx SoCs SPI 控制器、Cadence XSPI 控制器、Maxim MAX6620 風扇控制器、Intel Keem Bay OCS 橢圓曲線加密加速器、ACPI WMAA 背光接口、Intel ISHTP eclite 嵌入式控制器、Barco P50 GPIO 和三星 S6D27A1 DPI panel (顯示屏)。
網絡。Realtek RTL8365MB-VC Ethernet switches,Realtek 802.11ax 無線芯片,Asix AX88796C-SPI 以太網適配器,以及 Mellanox MSN4800-XX line cards。
Networking
新增一個用戶可設置的 socket option,名為 SO_RESERVE_MEM。其作用是為相關的 socket 永久 reserve 一些內核內存。這反過來又能加速網絡操作,特別是當系統(tǒng)的內存非常緊張的時候。注意,這個功能只有在使用 memory control group 時才可用,這里 reserve 的內存將會從該組的份額中扣除。
In-situ Operations(原地操作)、Administration(管理)和 Maintenance(維護),也就是 IOAM 的支持得到了加強,支持將 IOAM 數據封裝到傳輸中的數據包內。commit 中有一點進一步的信息。
ethtool netlink API 獲得了控制 transceiver module 的能力;更多信息請參見相關 commits。
netfilter 子系統(tǒng)現(xiàn)在可以在出口時(egress)對數據包進行分類,更多信息參見相關 commit。
新增了對自動組播隧道(Automatic Multicast Tunneling,RFC 7450)的支持。
有兩個新的 sysctl 開關來控制當網絡設備失去連接時如何處理 ARP cache。arp_evict_nocarrier 表示當一個接口失去底層連接的時候是否應該刪除 ARP cache 中的條目,而 ndisc_evict_nocarrier 則是類似的針對 neighbor discovery table 進行的配置。兩者都是為了在 WiFi 接口在同一網絡的多個接入點(access points, AP)之間移動時保留 cache 條目而設計的。相關 commits 包含更多信息。
Security-related
大部分關于對 memcpy() 進行嚴格邊界檢查(bounds checking)的相關改動都已經被合并了。不過在內核中啟用邊界檢查的 patch 還沒有被合并,需要等待一些剩余問題得到 fix。
io_uring 子系統(tǒng)已經獲得了 audit 支持。
SELinux 和 Smack security modules 現(xiàn)在可以對 io_uring 操作也施加安全策略了。
audit 會把傳遞給 openat2()的 open_how 結構的內容記錄下來。
完整性測量架構(IMA,integrity measurement architecture)現(xiàn)在可以根據文件的 group ID 和訪問它們的 user 來選擇應用哪些規(guī)則。
seccomp() 線程針對 Spectre 漏洞的改善工作的默認做法已經改變了,導致這里應用的改善措施變少了,性能也就相應地提高了。請閱讀相關 commit 來了解這個改動背后的原因。簡單地說,額外的改善措施并沒有真正獲得更高的安全性。
Internal kernel changes
在過去的幾個月里,folio patch set 一直是很多人熱議的話題,它是 5.16 版本中第一個被合并進來的功能。這項工作增加了一種 "folio" 類型,來表示那些已知不是 tail pages 的 page,然后重新設計了內存管理部分的內部 API 都來使用 folio 類型。這樣就得到了更好的類型清晰度(type clarity),甚至是有小幅性能提升,以及給未來找了很多工作要做。
新增了一個內部函數,cc_platform_has(),它為內核代碼提供了一個通用接口,用來查詢機密計算(confidential-computing)功能是否存在。它的第一個使用場景就是取代了 mem_encrypt_active() 來檢查內存加密(memory encryption)是否打開了。
按照通常的兩周時間表來說,5.16 合并窗口可望在 11 月 14 日關閉。到時候我們將帶來為了下一個內核版本所做的其余修改的摘要總結。
全文完
LWN 文章遵循 CC BY-SA 4.0 許可協(xié)議。
長按下面二維碼關注,關注 LWN 深度文章以及開源社區(qū)的各種新近言論~
