一塞椎、概念
指在計算機(jī)執(zhí)行操作時桨仿,CPU不需要先將數(shù)據(jù)從一個內(nèi)存區(qū)域復(fù)制到另一個內(nèi)存區(qū)域,從而減少上下文切換以及 CPU 的拷貝案狠。所有的數(shù)據(jù)都是通過 DMA 直接內(nèi)存訪問技術(shù)來進(jìn)行傳輸?shù)摹?/p>
二服傍、作用
是在數(shù)據(jù)從網(wǎng)絡(luò)設(shè)備到用戶程序空間傳遞的過程中,減少數(shù)據(jù)拷貝次數(shù)骂铁,減少系統(tǒng)調(diào)用吹零,實(shí)現(xiàn) CPU 的零參與,徹底消除 CPU 在這方面的負(fù)載从铲。
三瘪校、技術(shù)
實(shí)現(xiàn)零拷貝用到的最主要技術(shù)是 DMA直接內(nèi)存訪問 和 mmap內(nèi)存映射文件。
3.1 DMA
定義: DMA 是一種計算機(jī)系統(tǒng)中的技術(shù)名段,它允許外設(shè)直接訪問系統(tǒng)內(nèi)存,而無需經(jīng)過中央處理器(CPU)的干預(yù)泣懊。
用途: 主要用于高速數(shù)據(jù)傳輸伸辟,例如從磁盤到內(nèi)存,從網(wǎng)絡(luò)適配器到內(nèi)存等馍刮。它可以提高數(shù)據(jù)傳輸效率信夫,減輕 CPU 的負(fù)擔(dān)。
關(guān)系: DMA 通常用于設(shè)備之間的數(shù)據(jù)傳輸卡啰,而不是直接訪問文件系統(tǒng)中的數(shù)據(jù)静稻。DMA 是一種用于直接傳輸數(shù)據(jù)的硬件機(jī)制。
從圖中可以看到匈辱,零拷貝技術(shù)就是把cpu在這其中拷貝的工作去掉了振湾,不需要在內(nèi)核態(tài)和用戶態(tài)之間數(shù)據(jù)傳輸,直接由dma操作把磁盤數(shù)據(jù)讀取到內(nèi)核頁緩沖區(qū)中亡脸,再由內(nèi)核頁緩沖區(qū)發(fā)送到網(wǎng)絡(luò)中去押搪,實(shí)現(xiàn)了cpu的零拷貝。
3.2 mmap
定義: mmap 是一種將文件內(nèi)容映射到內(nèi)存的機(jī)制浅碾。它允許應(yīng)用程序直接在內(nèi)存中操作文件數(shù)據(jù)大州,而無需通過 read 和 write 等系統(tǒng)調(diào)用。
用途: 主要用于文件 I/O 操作垂谢,允許應(yīng)用程序像訪問內(nèi)存一樣訪問文件厦画。修改內(nèi)存映射的數(shù)據(jù)將自動反映到底層文件。
關(guān)系: mmap 是一種文件 I/O 操作的方式滥朱,適用于需要頻繁訪問文件數(shù)據(jù)的場景根暑,但它不是 DMA 的直接替代品力试。在一些情況下,DMA 可能與內(nèi)存映射結(jié)合使用购裙,例如在網(wǎng)絡(luò)數(shù)據(jù)包的接收中懂版,可以使用 DMA 將網(wǎng)絡(luò)數(shù)據(jù)直接傳輸?shù)絻?nèi)存,然后通過 MMAP 將內(nèi)存映射到用戶空間躏率,以便應(yīng)用程序訪問數(shù)據(jù)躯畴。
從圖中可以看到,讀寫文件都需要經(jīng)過?頁緩存
薇芝,所以?mmap
?映射的正是文件的?頁緩存
蓬抄,而非磁盤中的文件本身。