首頁 > 軟體

零拷貝瞭解嗎,什麼原理,什麼場景下會使用

2021-05-15 15:31:24

導語

以前的linux操作I/O介面是基於作業系統的拷貝資料基礎上的,這樣的操作的好處是應用程式的地址空間和作業系統核心空間的緩衝區可以傳輸,減少了I/O操作的次數,

但是這樣做的壞處是cpu的消耗是很大的,因為需要大量的計算操作,雖然在物理磁碟減少了IO操作。

什麼是零拷貝

Linux的系統思想是一切都是檔案,對檔案的操作只有兩種,要麼是讀,要麼是寫,對系統的優化,無外乎就是對著兩種操作的優化。零拷貝技術就是為了提高效能出現的。

零拷貝技術是對cpu的優化,不讓cpu在對資料包操作時候,從一塊儲存區拷貝到另外一塊儲存區的技術。零拷貝技術應用在檔案系統、網路協議的堆棧以及硬體裝置的驅動程式。

這總操作不僅減少了資料了拷貝,而且也減少了共享匯流排的次數。

資料拷貝的幾種模式

僅cpu方式

這種方式首先由cpu向磁碟傳送讀請求,然後read()方法從使用者態進入核心態。磁碟收到請求之後會進入準備的這樣的一個狀態,然後把資料放在磁碟緩衝區,最後cpu開始拷貝資料,把狀態從核心態再切換到用使用者態。

Cpu結合DMA

只讓cpu和磁碟互動,感覺很浪費資源,聰明的科技人員就想加入這樣一個操作,直接記憶體去訪問,這種方式叫做DMA,繞開了cpu直接訪問磁碟的機制。

普通模式資料互動

在DMA的基礎上增加了syscall,網卡的內容。

最後一種就是我要講的零拷貝技術。

零拷貝原理

中斷方式如下

首先向使用者程序傳送讀寫請求,然後該程序分配cpu資源,cpu命令請求io操作,io完成後,使用者程序退出,資料被儲存在控制器的高速緩衝取裡。Cpu讀取資料進入記憶體。

總結一下,系統呼叫利用DMA引擎將檔案系統拷貝到緩衝區裡,零拷貝技術不基於任何一種程式語言,所有語言都可以實現零拷貝技術。


IT145.com E-mail:sddin#qq.com