零拷贝kafka和netty零拷贝在实现机制上的区别
Posted Cry丶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了零拷贝kafka和netty零拷贝在实现机制上的区别相关的知识,希望对你有一定的参考价值。
简单画了一张对比2者零拷贝机制的逻辑图:
首先介绍一下什么是零拷贝,零拷贝有哪些实现办法?
零拷贝
零拷贝其实并不是完全没有数据拷贝,只要能减少内核空间和用户空间之间的数据复制次数,都可以称之为"零拷贝"。
零拷贝的实现机制,其实就是借助了某一块硬件的驱动功能,来代替cpu实现数据的搬运过程,如MDA。
详细过程可以参考这篇文章:Zero Copy I: User-Mode Perspective
Kafka的零拷贝
Kafka的零拷贝主要发生在broker处,通过可整理内存数据的MDA硬件支持的sendfile系统调用来代替read(file, tmp_buf, len),write(socket, tmp_buf, len),实现从读取硬盘数据的内核缓存区直接把数据转发至网卡缓存的效果,是从内核视角出发来看的零拷贝。
Netty的零拷贝
Netty的零拷贝主要发生在操作IO数据时的Buffer内存空间处,是从JVM视角出发来看的零拷贝。正常的JVM程序会多一层把堆外内存读取到对内执行的操作,这是带JVM的高级语言所认为增加的一层"冗余"操作。要多这一层操作的原因很好理解,os无法直接感知到jvm内部的内存状态的,jvm有属于自己的内存结构,比如我的jvm发生了一次gc让内存中的数据结构发生了变化,jvm外部是无法直接感知到的,所以需要把jvm外的内存空间复制一份到。jvm内独立处理。
以上是关于零拷贝kafka和netty零拷贝在实现机制上的区别的主要内容,如果未能解决你的问题,请参考以下文章