RocketMQ 零拷貝、DMA

先介紹下DMA:英文全稱是Direct Memory Access,意思是直接存儲器訪問

他的作用就是不需要經過CPU進行數據傳輸,也就是替CPU分擔點事情做,什麼事情?數據傳輸方面的事情。也就是說,你只要使能並配置好了DMA,DMA就可以將一批數據從源地址搬運到目的地址去而不經過CPU的干預,這樣可以爲CPU節省好多精力去幹更重要的事情很人性化。就像我們人一樣,我們平常習慣性的動作是不用經過大腦思考的,比如說眨眼睛,呼吸等。DMA就是負責這些工作的,但它沒人這麼智能,需要將它設置好了它纔會正常工作。

具體介紹:https://www.jianshu.com/p/12f00061b223

 

一、零拷貝原理:Consumer 消費消息過程,使用了零拷貝,零拷貝包含以下兩種方式:

1、使用 mmap + write 方式  (RocketMQ選擇的方式:因爲有小塊數據傳輸的需求,效果會比 sendfile 更好)

優點:即使頻繁調用,使用小塊文件傳輸,效率也很高;

缺點:不能很好的利用 DMA 方式,會比 sendfile 多消耗CPU,內存安全性控制複雜,需要避免 JVM Crash 問題。

2、使用 sendfile 方式(硬盤—>內核緩衝區—>內核socket緩衝區—>協議引擎)

優點:可以利用 DMA 方式,消耗 CPU 較少,大塊文件傳輸效率高,無內存安全新問題;

缺點:小塊文件效率低亍 mmap 方式,只能是 BIO 方式傳輸,不能使用 NIO。

 

二、RocketMQ 文件系統

1、RocketMQ 選擇 Linux Ext4 文件系統 && IO調度算法調整爲deadline:

Ext4 文件系統刪除 1G 大小的文件通常耗時小亍 50ms,而 Ext3 文件系統耗時約 1s 左右,且刪除文件時,磁盤 IO 壓力極大,會導致 IO 寫入超時;

文件系統 IO 調度算法需要調整爲 deadline,因爲 deadline 算法在隨機讀情況下,可以合幵讀請求爲順序跳躍方式,從而提高讀 IO 吞吐量。

三、零拷貝技術-sendfile:https://www.jianshu.com/p/028cf0008ca5

 四、零拷貝技術-mmap:https://www.ibm.com/developerworks/cn/linux/l-cn-zerocopy2/index.html

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章