LWN:5.18合并窗口第一部分!
關(guān)注了就能看到更多這么棒的文章哦~
5.18 Merge window, part 1
By Jonathan Corbet
March 25, 2022
DeepL assisted translation
https://lwn.net/Articles/888736/
截至目前,在 5.18 開(kāi)發(fā)周期中已有 4127 個(gè) non-merging changeset 進(jìn)入了 mainline。這個(gè)速度比起之前的合并窗口來(lái)說(shuō)相對(duì)較慢,但其中還是有了很多的改動(dòng)。請(qǐng)繼續(xù)閱讀下去,了解 5.18 合并窗口的前半部分中最重要改動(dòng)的摘要。
Architecture-specific
32 位 Arm 系統(tǒng)已支持將中斷調(diào)用棧(interrupt stack)以及虛擬映射的內(nèi)核棧(virtually-mapped kernel stack)分隔開(kāi)來(lái)。
刪除了對(duì)沒(méi)有內(nèi)存管理單元(MMU)的舊版 Arm 系統(tǒng)(ARMv4 和 ARMv5)的支持。不過(guò),對(duì)同樣沒(méi)有 MMU 的 ARMv7-M 系統(tǒng)仍然保持支持。
arm64 架構(gòu)支持新增 "QARMA3" 指針驗(yàn)證算法(pointer-authentication algorithm)。Arm 的 QARMA 的這個(gè)變種顯然更加快速,同時(shí)仍有足夠的安全性。
Arm64 系統(tǒng)可以使用 GCC 12 版本編譯器來(lái)支持影子堆棧(shadow-stack)。
PA-RISC 架構(gòu)獲得了最基本的 vDSO 支持,這反過(guò)來(lái)又使系統(tǒng)可以第一次支持運(yùn)行時(shí)使用具有不可執(zhí)行權(quán)限的堆棧(non-executable stack)運(yùn)行。這個(gè) patch 的最初版本是在 2006 年發(fā)布的,似乎有些功能總是需要比其他功能要花費(fèi)更長(zhǎng)時(shí)間才能進(jìn)入 mainline。
加入了英特爾 "hardware feedback interface" 的支持。這個(gè)機(jī)制允許硬件來(lái)告知內(nèi)核當(dāng)前系統(tǒng)中每個(gè) CPU 的當(dāng)前性能和能效比。這些能力可能會(huì)隨著時(shí)間的推移而改變,例如因?yàn)榘l(fā)熱過(guò)高而進(jìn)行的限制。文檔 patch 里有更多一些的信息。
移除了 nds32 架構(gòu)的支持。根據(jù)合并時(shí)的更新日志所說(shuō):
硬件仍在使用,代碼也很合理,但針對(duì) mainline 的移植不再積極,因?yàn)樗械氖O掠脩舳紤?yīng)該是在運(yùn)行供應(yīng)商的內(nèi)核(vendor kernel),而這些內(nèi)核應(yīng)該永遠(yuǎn)不會(huì)再更新到后續(xù)版本上了。
Core kernel
io_uring 子系統(tǒng)已經(jīng)有了一些改進(jìn)。新增 IORING_SETUP_SUBMIT_ALL 選項(xiàng)會(huì)提交一整個(gè)批次的 request,哪怕中途遇到錯(cuò)誤也一樣。ring 本身對(duì)應(yīng)文件描述符跟 ring 一起注冊(cè),為線程型應(yīng)用程序(threaded application)提升了性能。細(xì)節(jié)請(qǐng)看相關(guān)的 changelog。新增的 IORING_OP_MSG_RING 操作允許一個(gè) ring 向另一個(gè) ring 發(fā)出 signal。此外,現(xiàn)在可以直接從 ring 中對(duì) socket 進(jìn)行 NAPI busy poll 輪詢了。
針對(duì) alpha 和 m68k 架構(gòu)(最后兩個(gè)仍在使用 a.out 的架構(gòu)),不再默認(rèn)編譯生成 a.out 可執(zhí)行格式。a.out 代碼實(shí)際上還沒(méi)有被刪除,但這可能很快會(huì)進(jìn)行。
合并了對(duì) restartable-sequence API 的一些調(diào)整,以便在 GNU C Library 中提供支持。
DAMON operation schemes(DAMOS)機(jī)制為用戶空間提供了對(duì)內(nèi)存管理相關(guān)操作(尤其是 page reclaim)的更多控制。
tracing 系統(tǒng)現(xiàn)在支持 "user events",這基本上就是 user-space 應(yīng)用程序中的 dynamic tracepoint。該功能在合并后的更新日志中的介紹是:
用戶空間可以向內(nèi)核注冊(cè)一個(gè)事件(event),描述該 event 的格式。然后,它將在一個(gè) page mapping 中收到一個(gè) byte 用來(lái)對(duì)照檢查。然后,有特權(quán)的 task 可以跟對(duì)待其他 event 一樣來(lái)啟用該事件,這將把映射里的字節(jié)改為 "true",告訴用戶空間的應(yīng)用程序開(kāi)始將該事件寫入 tracing buffer 中。
更多信息請(qǐng)參見(jiàn)添加文檔的 commit 以及一個(gè)示例程序。
Filesystems and block I/O
現(xiàn)在可以在 sysfs 中查看 block request queue 里的 inline-encryption 能力,詳情參見(jiàn) changelog。
對(duì)于加密文件來(lái)說(shuō),通常無(wú)法進(jìn)行 direct I/O,因?yàn)闊o(wú)論如何,數(shù)據(jù)必須通過(guò)內(nèi)核 buffer 來(lái)進(jìn)行加密或解密。但是,如果硬件做了加密工作,情況就不同了。在 5.18 中,如果使用 inline encryption,那么用 fscrypt 加密的文件可以用 direct I/O 來(lái)訪問(wèn)。文檔 patch 中包含了更多的信息。
F2FS 文件系統(tǒng)已經(jīng)支持了 ID-mapped mounts。
如果 NFS 被啟用了,那么對(duì) NFSv3 的支持將始終內(nèi)置在 NFS server 中。這樣做的目的是使 NFSv3 成為 NFS 的基本、"始終支持" 的版本,從而為最終取消 NFSv2 支持來(lái)做好準(zhǔn)備。
Btrfs 新增兩個(gè) ioctl() 操作(BTRFS_IOC_ENCODED_READ 和 BTRFS_IOC_ENCODED_WRITE),允許直接對(duì)于一個(gè)文件的 extents 進(jìn)行讀取和寫入。這些命令的主要用途是支持更加新的、更加有效率的發(fā)送和接收操作。
Hardware support
硬件監(jiān)控?華碩 ACPI 嵌入式控制器、Vicor PLI1209BC 數(shù)字電源監(jiān)督器、Aquacomputer Farbwerk 360 RGB 控制器,以及德州儀器 TMP464 和 TMP468 溫度傳感器。
媒體?Microchip CSI2 demux 控制器,Hynix Hi-847 傳感器,OmniVision OV08D10 和 OG01A1B 傳感器,以及 Intersil ISL7998x 視頻解碼器。
雜項(xiàng)?高通公司 MSM 電源管理器控制器、Xilinx ZynqMP SHA3 加速器、TI TPS6286x 電源穩(wěn)壓器、Richtek RT5190A 電源管理 IC、Sunplus SP7021 SPI 控制器、LiteX MMC 主機(jī)控制器和 Tesla 全自驅(qū)動(dòng)時(shí)鐘控制器。
聲音?德州儀器 TAS5805M 揚(yáng)聲器放大器,AMD PCI 音頻協(xié)處理器,以及 Awinic AW8738 音頻放大器。
Miscellaneous
新增一些比較重要的文檔,包括一些研究人員研究?jī)?nèi)核社區(qū)的指南,readahead 代碼的概述,如何報(bào)告出 regression 問(wèn)題,以及開(kāi)發(fā)人員應(yīng)該如何處理 regression。
Security-related
新增一個(gè) kernel keyring 名為 machine;它包含由 shim bootloader 接口所實(shí)現(xiàn)的機(jī)器所有者密鑰(machine-owner keys)。machine keyring 中的密鑰在內(nèi)核中是可以被信任的,用來(lái)用來(lái)對(duì)初始啟動(dòng)過(guò)程后之后要使用到的部件(如 module 或 integrity 數(shù)據(jù))進(jìn)行簽署(sign)。
移除了 asymmetric TPM-backed private keys 的支持。這個(gè)功能最初是在 3.7 版本添加的,依賴于一個(gè)已經(jīng)廢棄了的(obsolete) TPM 版本,并且有一些自己的安全問(wèn)題;希望沒(méi)有人在使用它。
隨機(jī)數(shù)生成器也做了大量工作。/dev/random 和/dev/urandom 之間的差異已經(jīng)被移除(盡管在報(bào)告了一個(gè) regression 問(wèn)題之后,不得不 revert 一些 urandom 的改動(dòng))。在 virtual machine 進(jìn)行 fork 時(shí),新增了一個(gè)機(jī)制來(lái)避免 random-stream 被復(fù)現(xiàn)?,F(xiàn)在內(nèi)部開(kāi)始使用 BLAKE2s 算法。還有更多改動(dòng),細(xì)節(jié)請(qǐng)參見(jiàn)合并后的 changelog 以及?https://www.zx2c4.com/projects/linux-rng-5.17-5.18/?。
內(nèi)核現(xiàn)在為 size_t 值提供了 saturating arithmetic helpers;可以用來(lái)加強(qiáng)代碼以防止整數(shù)溢出的錯(cuò)誤。更多信息請(qǐng)參見(jiàn)相關(guān)提交。
Internal kernel changes
第一部分來(lái)自?fast kernel-headers 代碼樹(shù)里的工作已經(jīng)合入,主要是對(duì) scheduler header files 進(jìn)行了大量的修改調(diào)整。
去年發(fā)現(xiàn)的未被使用的 block-layer congestion-tracking 代碼已經(jīng)被刪除。
內(nèi)存管理代碼進(jìn)行了改進(jìn),添加了 remote per-CPU page list draining。
合并了更多 folio patch,這組補(bǔ)丁將內(nèi)部的內(nèi)存管理函數(shù)(包括 get_user_pages() 的各個(gè)變種)轉(zhuǎn)換為使用 folio,并在 readahead 代碼中實(shí)現(xiàn)了創(chuàng)建 large folio。第二組是將一些 address_space_operations 轉(zhuǎn)換為 folio。
set_fs() 基礎(chǔ)功能終于被完全移除。
快速檢查可以看到 linux-next 目前包含了將近 9000 個(gè)尚未被拉入 mainline 的 commit,所以看起來(lái) 5.18 內(nèi)核將會(huì)有更多的東西進(jìn)來(lái)。合并窗口預(yù)計(jì)將持續(xù)到 4 月 3 日;在那之后不久,我們將對(duì)這個(gè)版本中剩余部分工作進(jìn)行總結(jié)。
全文完
LWN 文章遵循 CC BY-SA 4.0 許可協(xié)議。
長(zhǎng)按下面二維碼關(guān)注,關(guān)注 LWN 深度文章以及開(kāi)源社區(qū)的各種新近言論~
