kafka零copy原理(3)

kafka 底层采用的零copy技术,前两节是铺垫。

仅实现两次上下文(即内核态和用户态之间的切换),而且只需要两次拷贝即可。是基于sendFile()实现的。

总结:

  1. 这种零拷贝技术 使用了两次内核态和用户态的之间的切换,依然使用了三次copy。 
  2. 数据不经过用户缓冲区;

从Linux2.4内核开始,对sendFile()进行改进,引入了gather,减少一次CPU的拷贝。

------------------------------------------------------------------------------------------------------------------------------------------

 总结:

  1. 使用了两次 拷贝 一次DMA拷贝,一次DMA Gather copy ;用户态和内核态的切换;
  2. 数据不经过用户缓冲区;
  3. 未用到CPU拷贝;Kafka是基于transform函数实现,这个函数的底层就是上述;

原理:

  1. sendfile 改进之处就是 不需要将数据拷贝到 Socket缓冲区,仅仅将内存地址和内存偏移量拷贝到Socket缓冲区;
  2. DMA Gather copy 将pageCache数据打包发送到网卡设备上;
  3. 零拷贝 其实是指没有CPU的拷贝;
  4. Kafka 使用的是destChannel.transForm(channel,position,count);

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值