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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值