337p人体粉嫩胞高清图片,97人妻精品一区二区三区在线 ,日本少妇自慰免费完整版,99精品国产福久久久久久,久久精品国产亚洲av热一区,国产aaaaaa一级毛片,国产99久久九九精品无码,久久精品国产亚洲AV成人公司
網(wǎng)易首頁 > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

2025 年 Linux 內(nèi)核十大技術(shù)創(chuàng)新|年終盤點(diǎn)

0
分享至


繼《》、《》、《》之后,知名 Linux 內(nèi)核一線開發(fā)者,經(jīng)典書籍《Linux 設(shè)備驅(qū)動(dòng)開發(fā)詳解》作者宋寶華老師又給大家?guī)砹?2025 年 Linux 內(nèi)核開發(fā)中,十個(gè)最典型的patchset,為大家呈現(xiàn)干貨滿滿的硬核技術(shù)年貨。

作者 | 宋寶華 責(zé)編 | 張紅月

出品 | CSDN(ID:CSDNnews)

從明天起,做一個(gè)幸福的人。喂馬,劈柴,周游世界。從明天起,關(guān)心糧食和蔬菜。我有一所房子,面朝大海,春暖花開。 ——海子《面朝大海,春暖花開》

2026 農(nóng)歷新年的鐘聲即將敲響,在這全球共慶的跨年時(shí)刻,Linux 內(nèi)核年度十大技術(shù)創(chuàng)新盤點(diǎn)如約而至。

回望過去的一年,平凡的日子里夾雜著些許苦澀與無奈。每一個(gè)渺小的個(gè)體,無論心中藏著怎樣的悲傷或喜悅,都讓它隨風(fēng)而去吧。新的一年里,縱然現(xiàn)實(shí)仍有諸多束縛,也愿諸君心底已然面朝大海,春暖花開。

過去的一年,內(nèi)核開發(fā)者們廢寢忘食地沉浸在代碼的純粹世界中,不斷提交patch,推動(dòng) Linux 內(nèi)核前行。

本文將盤點(diǎn)其中最具代表性的十個(gè) patchset:

1

slab per-CPU cache機(jī)制:Sheaves(一捆)和barns(谷倉)

2

sched_ext: cgroup sub-scheduler支持

3

代理執(zhí)行proxy-execution以解決優(yōu)先級(jí)翻轉(zhuǎn)

4

swap table替代xarray

5

TCP零拷貝發(fā)送DMABUF

6

調(diào)度器時(shí)間片擴(kuò)展time slice extension

7

multi-kernel

8

io_uring的網(wǎng)絡(luò)零拷貝收包

9

io_uring dmabuf讀寫支持

10

dmem cgroup

下面一一展開描述。


slab per-CPU cache 機(jī)制:Sheaves(一捆)和barns(谷倉)

內(nèi)存管理的 buddy 是有 pcp(Per-CPU Page frame cache) 的,針對(duì) buddy 申請(qǐng)和釋放的內(nèi)存,維護(hù)一定量的 Per-CPU 的 free 內(nèi)存 list,以減小每次都從底層 buddy 獲取、釋放 pages 的鎖競爭:


對(duì)于 Linux 內(nèi)核 kmalloc/kfree 底層的 slab,實(shí)際上我們也需要類似的 per-CPU 機(jī)制,來減小 object 申請(qǐng)和釋放時(shí)候跨 CPU 的鎖競爭和跨 CPU 的 cache 同步等開銷。Vlastimil Babka 的 patchset,把“農(nóng)場”的 Sheaves 和 Barns 概念借用到內(nèi)核中,以支撐 slab 的 per-CPU cache 能力。


(圖源:https://www.reddit.com/r/linux/comments/1nd8hav/what_that_means/)

Sheaves(束/捆)

字面意思是“麥?zhǔn)?/strong>或“一捆”,內(nèi)核中指每個(gè) CPU 本地的一小批 slab object緩存,用于加快本地分配/釋放,減少鎖競爭。是一種per?CPU 對(duì)象緩存,用來快速滿足分配和釋放請(qǐng)求。每個(gè) CPU 維護(hù)兩個(gè)小緩存(主 sheaf 和備用 sheaf),只要其中有對(duì)象,就直接返回/放回,不用去訪問全局 slab 頁或鎖住別人,從而提高性能。分配/釋放 object 大多數(shù)情況下是本地、無鎖的操作。

Barns(谷倉/倉庫)

字面意思是“谷倉”“倉庫”,內(nèi)核中指全局 slab 池(但是是按照NUMA來管理的),供各個(gè) CPU 的 sheaves 補(bǔ)充或回收,其功能是保證全局內(nèi)存平衡,處理 sheaves 空或滿的情況。barn 里有兩類隊(duì)列:full(裝滿對(duì)象的 sheaf)和empty(空 sheaf),方便快速交換。

當(dāng)某個(gè) CPU 的 sheaves滿了或空了時(shí),才涉及到barn(谷倉)

  • 空 sheaves:如果分配時(shí) sheaves 空了,CPU 會(huì)嘗試從barn取一個(gè) full sheaf。

  • 滿 sheaves:釋放時(shí) sheaves 都滿了,會(huì)往 barn 里放一個(gè) full sheaf 或把 sheaf 里的對(duì)象回寫 slab 頁面。



sched_ext: cgroup sub-scheduler 支持

這個(gè) patchset 來自 Tejun Heo,為 sched_ext 增加了基于 cgroup 的子調(diào)度器(sub-scheduler)支持,使多個(gè) BPF 調(diào)度器可以按 cgroup 層級(jí)結(jié)構(gòu)協(xié)同運(yùn)行:父調(diào)度器負(fù)責(zé)在不同 cgroup(租戶/分區(qū))之間分配 CPU 資源,子調(diào)度器負(fù)責(zé)各自 cgroup 內(nèi)部的任務(wù)調(diào)度。這樣系統(tǒng)就能按 workload 分區(qū)部署不同調(diào)度策略,滿足多租戶服務(wù)器和混部場景下對(duì)差異化調(diào)度(如延遲優(yōu)先、吞吐優(yōu)先等)的需求。比如不同的業(yè)務(wù)類型需求不一樣,可以組成如下層次化的調(diào)度系統(tǒng):


上圖中,數(shù)據(jù)庫系統(tǒng)的調(diào)度器能夠理解查詢的優(yōu)先級(jí)和鎖持有者的重要性(criticality)。虛擬機(jī)管理程序(VMM)可以與虛擬機(jī)內(nèi)部的調(diào)度器協(xié)同,并智能地安排 vCPU 的位置。游戲引擎的調(diào)度器則知道渲染的截止時(shí)間,以及哪些線程對(duì)延遲敏感(latency-critical)。

每個(gè) cgroup 可綁定一個(gè) scheduler,父 scheduler 通過 dispatch 驅(qū)動(dòng)子 scheduler 獲得 CPU 時(shí)間,從而形成自頂向下的帶寬分配 + 組內(nèi)調(diào)度兩級(jí)(或多級(jí))結(jié)構(gòu),目前控制最大深度SCX_SUB_MAX_DEPTH = 4,防止調(diào)度路徑過深、復(fù)雜度失控。

父 scheduler 在ops.dispatch()里面決定哪個(gè)子 scheduler 運(yùn)行以及給多少 CPU 時(shí)間。每個(gè) sub-scheduler 都是獨(dú)立實(shí)例,維護(hù)自己的運(yùn)行參數(shù),典型包括:默認(rèn)時(shí)間片(time slice)、watchdog(卡死檢測)、bypass mode(旁路模式)、本地 DSQ / runqueue 狀態(tài),因此,每個(gè) cgroup可能成為一個(gè)獨(dú)立調(diào)度域。父 scheduler的ops.dispatch()可以調(diào)用scx_bpf_sub_dispatch()來觸發(fā)子調(diào)度器的 dispatch,child 再選具體 task 運(yùn)行。

tj 的 patchset 一共 34 個(gè) patch:



代理執(zhí)行 proxy-execution 以解決優(yōu)先級(jí)翻轉(zhuǎn)

如下圖,P2 求 P1 的持有的鎖,但是 P1 因?yàn)楸粨屨迹〞r(shí)間片耗盡等原因)拿不到 CPU,從而 P2 要等很久才拿到鎖,造成用戶層面的卡頓體驗(yàn)。


代理執(zhí)行的邏輯是,在調(diào)度層面把調(diào)度上下文和執(zhí)行上下文分開。假設(shè) P2 上下求鎖而不得的時(shí)候,它會(huì)在它的 task_struct 里面記錄 block_on 什么任務(wù)上面,在這里是 P1,于是 P2 會(huì)把自己的時(shí)間(調(diào)度上下文)“捐獻(xiàn)”給 P1 去跑,P1 用 P2 捐獻(xiàn)給自己的時(shí)間執(zhí)行 P1 的代碼(執(zhí)行上下文)。


如上圖所示,現(xiàn)在 P2 把時(shí)間捐給 P1 后,很快 P1 就把鎖釋放了。然而,魔鬼都在細(xì)節(jié)里,實(shí)際上,這里面有一些復(fù)雜的問題:

1. P2 把時(shí)間捐給 P1 后,P1 運(yùn)行的過程中說不定會(huì)要求持有第 2 個(gè)鎖等待,因此再次阻塞;顯然我們需要把這個(gè)捐贈(zèng)的過程變成一個(gè)鏈條。

2. P1 和 P2 可能不在一個(gè) CPU 上,不在一個(gè) runqueue 上面,跨國沒法捐。所以我們很可能要把 P2 的調(diào)度上下文先遷移到 P1 上面去給 P1。

目前 6.17 合入的是一個(gè) baby step,支持 P1 和 P2 本身在一個(gè) CPU 上的時(shí)候的代理執(zhí)行,目前顯然沒有實(shí)際意義,因?yàn)槟呐率謾C(jī)只有 8 個(gè)核,P1 和 P2 在同一個(gè) CPU 的機(jī)會(huì)也很渺茫。但是,基于社區(qū)迭代開發(fā)的流程意義上來講,這是極其重大的一個(gè)進(jìn)展,它為 proxy execution 的未來開啟了一扇大門。 關(guān)于 Donor Migration 的支持,已成為一個(gè)單獨(dú)的 patchset 來開發(fā)和 review。

proxy execution 主要由 Google 的 John Stultz 領(lǐng)導(dǎo)開發(fā),由多名 developer 聯(lián)合貢獻(xiàn),其首要目的在于改善 Android 系統(tǒng)的用戶體驗(yàn)。



swap table 替代 xarray

swap table 本質(zhì)上是一種替代目前 xarray 管理方式的,更簡潔、更高性能的 swapcache 實(shí)現(xiàn)。

在 Linux 內(nèi)核中,我們用 xarray 來描述一個(gè)文件的 pagecache 命中情況。比如一個(gè)很大的文件,在 pagecache 中只命中了很少的頁。拿到相應(yīng)位置的文件 offset,則可通過 xarray 樹形結(jié)構(gòu)的逐級(jí)查詢(類似多級(jí)頁表從虛擬地址到物理地址的方式)來獲知這些命中頁的指針,而其他絕大多數(shù)區(qū)間由于未在 pagecache 命中,并不需要在 xarray 上分配出元數(shù)據(jù)。


在 Linux 內(nèi)核的實(shí)現(xiàn)中,針對(duì)匿名頁,也存在一種與文件頁的 pagecache 類似的東西,叫 swapcache。swapcache 可簡單理解為一張表,給到一個(gè) offset,可以查詢到對(duì)應(yīng) swap slot,是否在內(nèi)存也有副本,如果有,副本是哪一個(gè) page。


在 swapcache 的管理上,Linux 內(nèi)核采用了與文件頁 page cache 管理相似的做法,甚至底層 swapcache 的查詢 API 都間接是文件的 API:


目前 Linux 內(nèi)核把 swap 分區(qū)/文件的每 64MB 組織為一個(gè) address_space,每 64MB 作為 1 個(gè) xarray 來描述。


swap 相對(duì)文件其實(shí)是有顯著區(qū)別的:

1. swap 分區(qū)/文件的數(shù)量是相對(duì)有限的,往往就是 1 個(gè),常見的配置也很難超過 4、5 個(gè)。不像文件,可能成千上萬無數(shù)個(gè)。

2. swap 的大小相對(duì)來說是固定的,可預(yù)測的。比如開機(jī)配置好了,就基本不動(dòng)了。 不像文件,有大有小,大則多少個(gè) T,小則多少個(gè) B,五花八門。

3. swap 的訪問模型相對(duì)可控,針對(duì)特定的 workload 場景,有多少 swap 空間會(huì)被用到,相對(duì)來說是可預(yù)測的。

這為 swapcache 的至簡化設(shè)計(jì)創(chuàng)造了可能性, swap table 的設(shè)計(jì)和實(shí)現(xiàn)誕生了 。

假設(shè)一個(gè)swap分區(qū)是 2GB,我們先把這 2GB swap 空間按照 2MB 拆分為cluster:


而每個(gè) cluster 內(nèi)部則有 512 個(gè) swap slot。


swap table 的設(shè)計(jì)理念非常簡單,它為每個(gè) cluster 給出 512 個(gè) unsigned long 型數(shù)據(jù),這個(gè) unsigned long 數(shù)據(jù)可以存放 swapcache 命中的 page(現(xiàn)在我們或可別扭地稱呼它為“folio”)的指針,或者是 shadow(用于 refault 機(jī)制),或者是 NULL。

}

這樣,對(duì)于 64 位的 arm64, x86_64 等 arch 而言,每個(gè) cluster 的 swap table 占據(jù)的內(nèi)存正好是 4KB。

根據(jù) swap offset,我們通過它的高位可以找到它屬于哪個(gè) cluster,而通過它的低位可以找到它對(duì)應(yīng) 512 個(gè) slot 里面的哪一個(gè) slot:

}

由此可見,這個(gè)檢索過程是相對(duì)于 xarray 而言是更快的,相對(duì)于 xarray 原先的 O(logN),現(xiàn)在可認(rèn)為是 O(1)。原先 swapcache 雖然限制了每個(gè) address_space 的大小為 64MB,但是樹的深度還是可以達(dá)到 3 級(jí)的。

另外,由于一個(gè) cluster 的 swap table 的內(nèi)存都聚集在同一個(gè) page 里面,當(dāng) swap out 密集發(fā)生在同一個(gè) cluster 的時(shí)候,它能表現(xiàn)出更強(qiáng)的 locality 局部性,有利用減小 cache miss 等。xarray 的樹形結(jié)構(gòu)以及基于 slab 的內(nèi)存管理方式,則更可能在多個(gè) page 里面來回跳躍訪問。

xarray 的樹管理一個(gè)更廣闊的范圍,每個(gè) address_space 為 64MB,這意味著,會(huì)跨越多個(gè) cluster,64MB 的范圍需要統(tǒng)一管理和加鎖,并且 cluster 內(nèi)部的訪問也需要 cluster lock。而 swap table,本身不會(huì)垮 cluster,僅在一個(gè) cluster 內(nèi)部訪問,只需要對(duì) 2MB 的 cluster 本身加鎖。由此去掉了原先管理 xarray 樹形結(jié)構(gòu)的鎖需求。

最后,大道至簡,swap table 這種類似數(shù)組的設(shè)計(jì)思路,寫出來的代碼人人都能看得懂。

關(guān)于 swap table 內(nèi)存占用方面的優(yōu)化,在[PATCH 8/9] mm, swap: implement dynamic allocation of swap table 中,Chris 和 Kairui 實(shí)際安排了 swap table 的動(dòng)態(tài)釋放,在一個(gè) cluster 里面的 512 個(gè) slot 都沒人用的時(shí)候,這個(gè) cluster 的 swap table 可以釋放。

由于 swap table 的顯著優(yōu)勢(shì)來源于查詢路徑的縮短、locality 的提升、lock contention 的減小,相對(duì) xarray 加速了 swapcache 的查詢、修改等操作,屬于基礎(chǔ)設(shè)施的改善,其優(yōu)勢(shì)在服務(wù)器等場景會(huì)呈現(xiàn)較大的實(shí)用價(jià)值,對(duì)一些關(guān)鍵業(yè)務(wù)的吞吐量帶來提升。


TCP 零拷貝發(fā)送 DMABUF

Device Memory TCP (devmem TCP)完成了 2 個(gè)目標(biāo):

  • 通過網(wǎng)絡(luò)發(fā)送設(shè)備 memory。底層的設(shè)備 memory 采用 dma-buf 機(jī)制;

  • 通過網(wǎng)絡(luò)接收設(shè)備 memory 并直接存入本地的設(shè)備 memory。

因此,它是一種 Direct-to-device 的網(wǎng)絡(luò)方法。

我們知道 dma-buf 提供了一種本機(jī)內(nèi)部設(shè)備與設(shè)備、設(shè)備與設(shè)備共享內(nèi)存的方法,之前筆者已經(jīng)在《)》中有論述。簡單地來說,dma_buf 可以實(shí)現(xiàn) buffer 在多個(gè)設(shè)備的共享,應(yīng)用可以把一片底層驅(qū)動(dòng) A 的 buffer 導(dǎo)出到用戶空間成為一個(gè) fd,也可以把 fd 導(dǎo)入到底層驅(qū)動(dòng) B。當(dāng)然,如果進(jìn)行 mmap() 得到虛擬地址,CPU 也是可以在用戶空間訪問到已經(jīng)獲得用戶空間虛擬地址的底層 buffer 的。


devmem TCP 實(shí)際上把 dma-buf 的傳輸擴(kuò)展到網(wǎng)絡(luò)上并非本機(jī)的設(shè)備、CPU 之間了。由于是 A 機(jī)器的 dma-buf 送到 B 機(jī)器的 dma-buf,這樣避免了設(shè)備的 dma-buf 和 host buffer 之間的拷貝。


跨節(jié)點(diǎn)的 device 到 device 的傳輸,在下面的一些應(yīng)用場景中可能受益:

  • 分布式訓(xùn)練,即在不同主機(jī)上的機(jī)器學(xué)習(xí)加速器(如GPU)之間交換數(shù)據(jù)。

  • 分布式 raw block storage 應(yīng)用與遠(yuǎn)程 SSD 傳輸大量數(shù)據(jù)。其中大部分?jǐn)?shù)據(jù)不需要主機(jī)處理。

相關(guān)的 patchset 主要由 Google 的 Mina Almasry 完成,Linux 6.12 中支持了 rx,而 6.16 內(nèi)核中,也支持了 TCP dmabuf 的 tx 路徑。接收端的網(wǎng)卡應(yīng)支持 header 的自動(dòng)分離,并且支持 flow steering 、RSS,確保目標(biāo)是 devmem 的網(wǎng)絡(luò)包能流向正確的 RX queue。


調(diào)度器時(shí)間片擴(kuò)展 time slice extension

想象用戶態(tài)的線程 A 拿到了 spinlock,由于用戶態(tài) spinlock 并不會(huì)像內(nèi)核態(tài) spinlock 那樣禁止搶占,完全有可能線程 B 搶占線程 A,線程 B 可能運(yùn)行很久,而假設(shè)線程 C 需要等待線程 A 的 spinlock 釋放,這個(gè) C 的等待可能是非常長的。


如果我們提供一個(gè)機(jī)制,比如線程 A 拿到了 spinlock,在 critical section 里面執(zhí)行的過程中,若發(fā)生時(shí)間片用完或者其他什么事情要搶占 A,調(diào)度器可以擴(kuò)展一點(diǎn)點(diǎn)時(shí)間片給 A,比如 50 微妙內(nèi)讓 A 不被搶占,則線程 A 大概率可以執(zhí)行完 critical section,從而規(guī)避一系列問題。而具體擴(kuò)展時(shí)間片的長度則可由新增的 rseq_slice_extension_nsec 這個(gè) sysctl 決定。

用戶空間線程通過 prctl() 顯式地告訴內(nèi)核,它需要時(shí)間片擴(kuò)展:

prctl(PR_RSEQ_SLICE_EXTENSION, PR_RSEQ_SLICE_EXTENSION_SET, +          PR_RSEQ_SLICE_EXT_ENABLE, 0, 0);

有一個(gè) per-cpu 的 Restartable sequences(簡稱rseq)供用戶態(tài)和內(nèi)核態(tài)交互,需要時(shí)間片擴(kuò)展的一個(gè)典型的用戶態(tài)偽代碼如下:


如果線程通過 prctl() 啟用了該機(jī)制,就可以把 rseq::slice_ctrl::request 設(shè)為 1 來請(qǐng)求延長當(dāng)前時(shí)間片。當(dāng)線程被中斷且內(nèi)核因此產(chǎn)生重新調(diào)度請(qǐng)求時(shí),內(nèi)核看到了用戶態(tài)設(shè)置了 rseq::slice_ctrl::request =1,它可能選擇不立即把線程換下 CPU,而是批準(zhǔn)一次 rseq_slice_extension_nsec 時(shí)間片擴(kuò)展并直接返回用戶態(tài)繼續(xù)執(zhí)行。

當(dāng)內(nèi)核同意時(shí)間片擴(kuò)展時(shí),會(huì)把 rseq::slice_ctrl::request 清零,并將 rseq::slice_ctrl::granted 置為 1,表示擴(kuò)展已批準(zhǔn);如果在擴(kuò)展之后線程仍然被resched(被換下 CPU),內(nèi)核會(huì)再把 granted 位清零,用來通知用戶態(tài)這次擴(kuò)展已經(jīng)結(jié)束或失效。

基于 RSEQ 的時(shí)間片擴(kuò)展工作,主要由 Thomas Gleixner 和 Peter Zijlstra 完成。


multi-kernel

Cong Wang 在 LKML 發(fā)送了一個(gè) RFC 序列,支持 multi-kernel。multi-kernel 與容器、hypervisor 都有本質(zhì)不同,它在同一臺(tái)機(jī)器上并行運(yùn)行多個(gè) Linux kernel,每個(gè) kernel 獨(dú)占一部分硬件,并通過消息通信協(xié)作。


在 Cong Wang 建議的方法中,host kernel 管理 spawn kernel。

Host kernel 負(fù)責(zé):硬件資源管理、創(chuàng)建 / 銷毀子 kernel、跨 kernel 協(xié)調(diào)。Spawn kernel 負(fù)責(zé)跑應(yīng)用、具備獨(dú)立調(diào)度 / 內(nèi)存 / IO 并與其他 kernel 隔離。Cong Wang 的 multi-kernel 實(shí)現(xiàn)可以概括為:

  1. 用 kexec 在同機(jī)啟動(dòng)多個(gè) Linux

  2. 用 CPU / 內(nèi)存 / IO 硬件分區(qū)做隔離

  3. 用 IPI + 共享內(nèi)存通信

  4. 用 hotplug + DT overlay 動(dòng)態(tài)調(diào)資源

  5. 用硬件 queue 切分 IO

  6. 每 workload 跑定制 kernel

這個(gè) multi-kernel 方案未來會(huì)走向何方、能否在 Linux 內(nèi)核上游社區(qū)引起足夠關(guān)注和投入,都會(huì)是很值得觀察的看點(diǎn)。


io_uring 的網(wǎng)絡(luò)零拷貝收包

由 Pavel Begunkov 和 David Wei 完成的工作,正式合入 Linux 內(nèi)核 6.15,為 io_uring 增加了零拷貝接收(zero-copy receive)支持,使數(shù)據(jù)能夠直接批量、快速地接收并寫入應(yīng)用程序內(nèi)存,而無需再從內(nèi)核內(nèi)存中拷貝一份。

io_uring 的零拷貝與 DPDK 有很大不同,DPDK 完全 bypass 了內(nèi)核,而 io_uring 這種內(nèi)核為 userspace 提供的 async I/O 模式,則仍然重用了內(nèi)核的網(wǎng)絡(luò)機(jī)制,如下圖,借鑒硬件的支持,payload 被硬件直接 DMA 到 userspace 的 buffers。


io_uring 提供了一種“混合旁路(hybrid bypass)”機(jī)制:在保持與 Linux 內(nèi)核體系緊密集成的同時(shí),實(shí)現(xiàn)了顯著的性能提升。相比 DPDK 這種完全旁路(full bypass)方案,它在使用上更加便捷,對(duì)現(xiàn)有系統(tǒng)的侵入性也更低。

它的整個(gè)工作流程如下:


在 io_uring中,用戶和內(nèi)核通過 2 個(gè) queue 交互:SQ(Submission Queue)、CQ(Completion Queue)。


由于 DMA 要直接往 userspace 的 buffers 里面?zhèn)鬏敂?shù)據(jù),所以 buffer 需要在內(nèi)核 pin 住,相關(guān) API 是:io_uring_register_buffers()。

與前面的 devmem TCP 相似,該機(jī)制也依賴于硬件的報(bào)文頭/數(shù)據(jù)分離(header/data split)、流量引導(dǎo)(flow steering)以及 RSS(接收端擴(kuò)展),以確保數(shù)據(jù)包頭部保留在內(nèi)核內(nèi)存中,而只有目標(biāo)流量才會(huì)被導(dǎo)向配置為零拷貝的硬件接收隊(duì)列。


io_uring dmabuf 讀寫支持

這個(gè) patchset 試圖讓存儲(chǔ)設(shè)備(如 NVMe)可以直接 DMA 到 dmabuf 所代表的內(nèi)存,而不是走用戶頁緩存 / copy 路徑。

用戶態(tài)發(fā)起:

    { dma_buf_fd, file_fd });

即:

  • 提供 dmabuf fd

  • 提供目標(biāo) file fd(如 nvme block)

發(fā)起讀:

io_uring_prep_read_fixed(..., reg_buf_idx);

注意這套能力不是給通用文件 I/O 準(zhǔn)備的,而是給高性能數(shù)據(jù)管線 / 設(shè)備直通 pipeline 用的,不是 ext4 / f2fs 等文件讀寫。

該 patchset 把 dmabuf 封裝成一種可被 block 層提交和 DMA 的 buffer 類型,讓存儲(chǔ)設(shè)備可以直接對(duì) dmabuf 做 DMA。主要實(shí)現(xiàn)原理(4 步):

A.注冊(cè):dmabuf → dma_token

用戶用 dmabuf fd 注冊(cè) io_uring buffer 時(shí):

dma_buf_get()

dma_buf_attach(target_device)

dma_buf_map_attachment()

→ stable

然后封裝成一個(gè)內(nèi)部對(duì)象:dma_token,它代表一塊可 DMA 的共享內(nèi)存。

B. 提交 IO:新 iterator 類型

新增一種 buffer 迭代器:ITER_DMA_TOKEN

提交 read/write 時(shí):

SQE → dma_token → iov_iter

讓 block 層識(shí)別這是 dmabuf,而不是用戶頁。

C. 構(gòu)建 bio / request

block 層改造后可以:

bio → dma_token → sg_table

不再依賴 page,而是直接用 dmabuf 的 scatter-gather 表。

D. Driver DMA

以 NVMe 為例:

sg_table → PRP / SGL → device DMA → dmabuf

實(shí)現(xiàn)存儲(chǔ)設(shè)備直接 DMA 到 dmabuf 內(nèi)存。


dmem cgroup

在較早的內(nèi)核中,cgroup 已經(jīng)可以管理普通系統(tǒng)內(nèi)存(RSS、swap 等),但缺少針對(duì) GPU / 加速器設(shè)備內(nèi)存的統(tǒng)一計(jì)量與限制機(jī)制。

dmem cgroup 是用來對(duì)“設(shè)備私有內(nèi)存(device memory)”做資源隔離與計(jì)量的 cgroup 控制器。它管的不是普通 DRAM,而是 GPU、accelerator 和其他的 device 本地內(nèi)存。dmem cgroup 目的在于:

  • 讓 cgroup 能統(tǒng)計(jì)設(shè)備內(nèi)存使用量;

  • 能針對(duì)這些內(nèi)存設(shè)置 min/low/max 限制;

  • 能在資源過度使用時(shí)做 eviction(回收/驅(qū)逐)

在 Linux 6.14 中,DMEM cgroup 支持已經(jīng)集成到 Intel Xe 內(nèi)核圖形驅(qū)動(dòng)中,用于根據(jù) cgroup 層級(jí)限制顯存(vRAM)的使用。這個(gè)用于顯存內(nèi)存計(jì)數(shù)的 DMEM cgroup 代碼,也可以“輕松地”被其他依賴 TTM(Translation Table Maps)進(jìn)行內(nèi)存管理的內(nèi)核圖形驅(qū)動(dòng)復(fù)用。

dmem 的 cgroup 接口如下:

  • dmem.current:當(dāng)前 cgroup 使用的 device memory 字節(jié)數(shù);

  • dmem.max, dmem.min, dmem.low: nested-keyed(支持層級(jí)鍵值),用于配置不同 cgroup 的內(nèi)存資源限制;

  • dmem.capacity:顯示該內(nèi)存區(qū)域的最大容量,僅存在于 root。

dmem 的整個(gè)實(shí)現(xiàn)原理如下:


作者簡介

宋寶華,經(jīng)典讀書《Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解》作者。Linux 主線內(nèi)核dma-mapping benchmark、SWAP、THP 的維護(hù)者或?qū)徍苏?,累?jì)給 Linux 主線內(nèi)核貢獻(xiàn)數(shù)百個(gè)補(bǔ)丁。在 Linux 調(diào)度器、內(nèi)存管理、ARM arch、DMA、中斷、驅(qū)動(dòng)等領(lǐng)域有廣泛的貢獻(xiàn),是 SCHED_CLUSTER、PER_NUMA CMA、zswap 硬件壓縮解壓、ARM64 TLB batch unmap、swap entries 批量 unmap、mTHP swap-in、madvise PER_VMA lock 等特性的 author 或 co-author。

參考文獻(xiàn):

[1]slab sheaves和barns

https://lore.kernel.org/linux-mm/20260123-sheaves-for-all-v4-0-041323d506f7@suse.cz/

[2]sched-ext sub-schedulers:

https://lore.kernel.org/lkml/20260121231140.832332-1-tj@kernel.org/

[3]代理執(zhí)行Proxy Execution:

https://lwn.net/ml/all/20250712033407.2383110-1-jstultz@google.com/

https://lwn.net/ml/all/20250722070600.3267819-1-jstultz@google.com/

[5]scheduler時(shí)間片擴(kuò)展:

https://lore.kernel.org/lkml/20251215155615.870031952@linutronix.de/

[6]tcp dmabuf tx零拷貝:

https://lore.kernel.org/netdev/20250508004830.4100853-1-almasrymina@google.com/

[7] io_uring zero_copy rx:

https://lwn.net/Articles/1004591/

[8] io_uring file->dmabuf:

https://lore.kernel.org/all/cover.1763725387.git.asml.silence@gmail.com/

[9]dmem cgroup:

https://lore.kernel.org/lkml/20241204134410.1161769-1-dev@lankhorst.se/

[10]swap table:

https://lore.kernel.org/linux-mm/20250822192023.13477-1-ryncsn@gmail.com/

https://lore.kernel.org/linux-mm/20250514201729.48420-25-ryncsn@gmail.com/

未來沒有前后端,只有 AI Agent 工程師。

這場十倍速的變革已至,你的下一步在哪?

4 月 17-18 日,由 CSDN 與奇點(diǎn)智能研究院聯(lián)合主辦「2026 奇點(diǎn)智能技術(shù)大會(huì)」將在上海隆重召開,大會(huì)聚焦 Agent 系統(tǒng)、世界模型、AI 原生研發(fā)等 12 大前沿專題,為你繪制通往未來的認(rèn)知地圖。

成為時(shí)代的見證者,更要成為時(shí)代的先行者。

奇點(diǎn)智能技術(shù)大會(huì)上海站,我們不見不散!

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關(guān)推薦
熱點(diǎn)推薦
做完手術(shù)人就廢了,這5種手術(shù)不需要做,別讓無知害了自己

做完手術(shù)人就廢了,這5種手術(shù)不需要做,別讓無知害了自己

醫(yī)學(xué)科普匯
2026-01-29 06:25:03
里子面子都丟了,森林北自曝身體出了問題,汪峰的體面被撕碎

里子面子都丟了,森林北自曝身體出了問題,汪峰的體面被撕碎

素衣讀史
2025-11-19 16:09:14
中國百億港口項(xiàng)目被踢開,歐洲撿漏,結(jié)果反而干成了?

中國百億港口項(xiàng)目被踢開,歐洲撿漏,結(jié)果反而干成了?

李子櫥
2026-03-28 08:25:06
中國最丑18大建筑:南京衛(wèi)生巾、昆山螃蟹,不忍直視!

中國最丑18大建筑:南京衛(wèi)生巾、昆山螃蟹,不忍直視!

秘密即將揭曉
2026-03-25 16:56:26
你要明白一位公眾人物去世,新華社發(fā)文的概念。

你要明白一位公眾人物去世,新華社發(fā)文的概念。

果媽聊娛樂
2026-03-27 09:42:42
巴拿馬接到通知,賠款156億還不夠,中方擴(kuò)大反制,港口管控升級(jí)

巴拿馬接到通知,賠款156億還不夠,中方擴(kuò)大反制,港口管控升級(jí)

小影的娛樂
2026-03-28 22:08:46
配合美國制裁,全球頂級(jí)會(huì)議拒絕中企和院校投稿,中國當(dāng)即反制

配合美國制裁,全球頂級(jí)會(huì)議拒絕中企和院校投稿,中國當(dāng)即反制

丁丁鯉史紀(jì)
2026-03-27 16:45:25
劉曉慶外甥否認(rèn)吃絕戶!怒斥劉曉慶造謠,承認(rèn)有矛盾希望私下解決

劉曉慶外甥否認(rèn)吃絕戶!怒斥劉曉慶造謠,承認(rèn)有矛盾希望私下解決

萌神木木
2026-03-26 13:31:02
詐騙13.9億,千萬豪車、成堆金條被拍,才知王麗坤夫婦究竟多奢靡

詐騙13.9億,千萬豪車、成堆金條被拍,才知王麗坤夫婦究竟多奢靡

蔡蔡說史
2026-03-27 19:34:38
原來精神小妹的生活方式這么離譜!看完網(wǎng)友分享,大開眼界了

原來精神小妹的生活方式這么離譜!看完網(wǎng)友分享,大開眼界了

另子維愛讀史
2026-03-02 19:55:07
換帥!知名大學(xué),迎新新黨委書記!

換帥!知名大學(xué),迎新新黨委書記!

雙一流高校
2026-03-29 00:10:41
錢再多有啥用?52歲劉強(qiáng)東上千億身家,兒子卻是他一生的遺憾

錢再多有啥用?52歲劉強(qiáng)東上千億身家,兒子卻是他一生的遺憾

青途歷史
2026-02-02 18:31:15
別被“某音”前凸后翹的網(wǎng)紅美女騙了....

別被“某音”前凸后翹的網(wǎng)紅美女騙了....

TVB的四小花
2026-03-19 08:01:21
廣東91歲老人讓兒子保管900多萬養(yǎng)老錢,兒媳去世前卻將300多萬分給自己姐姐,老人瞬間傻眼,法院:錢是保管不是贈(zèng)與,全額返還

廣東91歲老人讓兒子保管900多萬養(yǎng)老錢,兒媳去世前卻將300多萬分給自己姐姐,老人瞬間傻眼,法院:錢是保管不是贈(zèng)與,全額返還

觀威海
2026-03-18 22:11:07
這就是回家要脫褲子才能上床的原因!網(wǎng)友:看完天都塌了!

這就是回家要脫褲子才能上床的原因!網(wǎng)友:看完天都塌了!

夜深愛雜談
2026-02-07 19:05:55
蘋果突然宣布,Pro機(jī)型下架不再發(fā)布!

蘋果突然宣布,Pro機(jī)型下架不再發(fā)布!

3C毒物
2026-03-28 00:07:27
“墳頭放一日,家中窮三年”?為何后果如此嚴(yán)重?墳前不能擺什么

“墳頭放一日,家中窮三年”?為何后果如此嚴(yán)重?墳前不能擺什么

古怪奇談錄
2025-03-24 11:14:58
前國手透露壞消息!樊振東若參加奧運(yùn)有現(xiàn)實(shí)困擾,王皓必須著急了

前國手透露壞消息!樊振東若參加奧運(yùn)有現(xiàn)實(shí)困擾,王皓必須著急了

三十年萊斯特城球迷
2026-03-28 23:21:32
低估伊朗代價(jià)太大:美炸發(fā)電廠想癱瘓伊軍事,不料伊早有兩手準(zhǔn)備

低估伊朗代價(jià)太大:美炸發(fā)電廠想癱瘓伊軍事,不料伊早有兩手準(zhǔn)備

硯底沉香
2026-03-29 00:01:30
處長年年挪用我拉來的經(jīng)費(fèi),今年我索性不申請(qǐng)了,會(huì)上他當(dāng)眾發(fā)難

處長年年挪用我拉來的經(jīng)費(fèi),今年我索性不申請(qǐng)了,會(huì)上他當(dāng)眾發(fā)難

曉艾故事匯
2026-03-13 08:02:21
2026-03-29 01:12:49
CSDN incentive-icons
CSDN
成就一億技術(shù)人
26413文章數(shù) 242250關(guān)注度
往期回顧 全部

科技要聞

華為盤古大模型負(fù)責(zé)人王云鶴確認(rèn)離職

頭條要聞

美媒:和歐盟"外長"發(fā)生激烈交鋒 魯比奧"顯然很惱火"

頭條要聞

美媒:和歐盟"外長"發(fā)生激烈交鋒 魯比奧"顯然很惱火"

體育要聞

“我是全家最差勁的運(yùn)動(dòng)員”

娛樂要聞

陳牧馳陳冰官宣得子 曬一家三口握拳照

財(cái)經(jīng)要聞

臥底"科技與狠活"培訓(xùn):化工調(diào)味劑泛濫

汽車要聞

置換補(bǔ)貼價(jià)4.28萬起 第五代宏光MINIEV正式上市

態(tài)度原創(chuàng)

教育
旅游
親子
公開課
軍事航空

教育要聞

獨(dú)家!中招三大變化一文讀懂!2026北京中招政策出爐!

旅游要聞

泰安市岱岳區(qū):賞梨花 看村晚 萬畝梨園迎客來

親子要聞

小孩子能口無遮攔到什么程度!網(wǎng)友:恨不得當(dāng)場找個(gè)地縫鉆進(jìn)去

公開課

李玫瑾:為什么性格比能力更重要?

軍事要聞

美軍中東基地?fù)p失最新披露

無障礙瀏覽 進(jìn)入關(guān)懷版