內容:記錄kafka快的其中乙個原因:零拷貝、
不使用零拷貝技術時:乙個程序讀取磁碟內容並傳送出去的過程如下
1、作業系統從磁碟讀取資料到核心空間的 pagecache
2、應用程式讀取核心空間的資料到使用者空間的緩衝區
3、應用程式將資料(使用者空間的緩衝區)寫回核心空間到套接字緩衝區(核心空間)
4、作業系統將資料從套接字緩衝區(核心空間)複製到通過網路傳送的網絡卡緩衝區
實際呼叫函式內容是
1:呼叫read函式,檔案資料copy到核心緩衝區
2:read函式返回,檔案資料從核心緩衝區copy到使用者緩衝區
原始方法顯然是低效的,有四次 copy 操作和兩次系統呼叫。如果使用零拷貝技術就可以減少
不必要的拷貝。
零拷貝技術:
使用sendfile方法,可以允許作業系統將資料從 pagecache 直接傳送到網路,這樣避免重新複製
資料。所以這種優化方式,只需要最後一步的copy操作,將資料複製到網絡卡緩衝區。如下圖
「零拷貝技術」只用將磁碟檔案的資料複製到頁面快取中一次,然後將資料從頁面快取直接傳送到
網路中(傳送給不同的訂閱者時,都可以使用同乙個頁面快取),避免了重複複製操作。
效能提公升:
如果有100個消費者:
1、不使用零拷貝技術,資料複製次數為4
*100
=400次
2、使用「零拷貝技術」只需要1
+100
=101次,其中一次為從磁碟複製到頁面快取,100次表示100個
消費者各自讀取一次頁面快取。
適用場景:不是所有的都可以使用零拷貝
讀取磁碟檔案後,不需要做其他處理,直接用網路傳送出去。如果讀取磁碟的資料需要用程式進一步
處理的話,必須要經過第二次和第三次資料copy,讓應用程式在記憶體緩衝區處理。
從kafka說起零拷貝機制的運用
參考文章 kafka的零拷貝技術 kafka高吞吐量的原因 1 磁碟順序寫 磁碟的順序io速度遠大於固態硬碟隨機寫操作 2 訊息壓縮 資料壓縮減少網路傳輸 3 分批傳送 kafka允許批量傳送訊息 4 分割槽 多分割槽,並行消費 5 零拷貝機制 今天主要講講零拷貝機制與在kafka中的應用 傳統的檔...
網絡卡的零拷貝理解
jack 最近聽說了網路處理的 零拷貝 技術,覺得非常神奇,在網上查閱了很多資料。不過,並不是太明白 知其然,而不知其所以然。你能通俗地解釋一下嗎?我 這是乙個相對比較複雜的話題,說起來話就多了。本質上來說,其實就是80386的分頁管理變異而已。jack 分頁管理?這個跨度有點大,穿越了。我 你覺得...
網絡卡的零拷貝理解
jack 最近聽說了網路處理的 零拷貝 技術,覺得非常神奇,在網上查閱了很多資料。不過,並不是太明白 知其然,而不知其所以然。你能通俗地解釋一下嗎?我 這是乙個相對比較複雜的話題,說起來話就多了。本質上來說,其實就是80386的分頁管理變異而已。jack 分頁管理?這個跨度有點大,穿越了。我 你覺得...