零拷貝問題

2021-10-22 21:26:01 字數 804 閱讀 7935

零拷貝:

定義:避免cpu將資料從一塊儲存空間拷貝到另乙個儲存空間的技術。通常用於網路檔案傳輸 以減少cpu消耗和記憶體頻寬的占用 ,減少使用者空間(使用者可操作的記憶體快取區域)和cpu核心空間(cpu核心可操作的記憶體快取和暫存器快取)的拷貝過程,減少使用者上下文和cpu核心上下文的切換,讓cpu解脫出來可以做別的是事情,提高系統效率;通過dma的方式(直接訪問記憶體)

1.傳統的拷貝過程(以從硬碟讀取資料並傳送為例)首先在使用者空間切換到核心空間 核心呼叫read方法 然後核心會發起讀取資料的請求 然後硬碟在dma的控制下將資料拷貝到核心空間的核心快取 然後核心空間要切換到使用者空間 在cpu的控制下將資料拷貝到使用者空間的使用者快取 使用者空間在切換到核心空間 核心呼叫send方法 在cpu的控制下將資料copy核心空間的socket快取 然後dma的控制下拷貝到協議引擎 最後 需要核心切換到用空間 send方法執行成功響應。這裡一共經歷了四次切換 四次拷貝 兩次cpu參與的拷貝

2.對於零拷貝技術 他沒有cpu的拷貝 他直接將核心空間的核心快取中的資料在dma的控制下將數劇拷貝到了socket快取 這裡一共經歷了兩次上下文切換 還有兩次拷貝 沒有cpu參與

3因為都在核心空間考慮到沒有必要要進行拷貝 所以沒有將資料拷貝到socket快取 而是將資料描述資訊寫入到緩衝中 那麼拷貝資料時只需要同個資料描述資訊到核心快取裡面取就可以了兩次上下文切換 一次拷貝。(gather copy)

3.上一種方法只是用於沒有對資料進行任何操作 如果需要對資料進行一些操作還是需要到使用者空間 於是採用mmap這種方法使使用者和核心共享一塊核心快取 這樣不需要拷貝 也可以對資料進行操作 但是這種方法增加了兩次上下文切換 copy仍為1次。

零拷貝初探

什麼是零拷貝?零拷貝技術,就是避免將資料從一塊儲存拷貝到另外一塊儲存的技術,從而節省拷貝帶來的cpu開銷,零拷貝並不是將拷貝操作完全消除掉。傳統拷貝 傳統的linux系統中,標準的i o介面 例如read,write 都是基於資料拷貝操作的,即是i o操作會導致資料在核心位址空間的緩衝區和使用者位址...

零拷貝技術

一 應用場景 核心優化 快速拷貝檔案 filechannel至filechannel 二 產生原因 拷貝檔案 傳統傳輸檔案時,資料需要經過4次資料拷貝,分別為磁碟到核心快取 核心到使用者快取 使用者到核心快取 核心到磁碟,頻繁切換使用者態和核心態 三 解決方案 四 引數 引數作用和優點 缺點inpu...

核心旁路 共享記憶體的零拷貝問題

實習時,測試萬兆網絡卡在使用onload和tcpdirect加速時用到了記憶體旁路技術,學習一下。下面是乙個問題 總結一下 1 使用核心旁路技術可以實現零拷貝,共享記憶體也可以實現零拷貝。所謂零拷貝是對於核心來說的,不會有核心讀取的操作。2 共享記憶體一般對於兩個程序來說,核心旁路是在使用者態層面,...