articleList

25-Kafka的高性能原理分析归纳ZeroCopy

2025/03/13 posted in  Kafka
Tags: 

  • 零拷贝ZeroCopy(SendFile)
    • 例子:将一个File读取并发送出去(Linux有两个上下文,内核态,用户态)
    • File文件的经历了4次copy
      • 调用read,将文件拷贝到了kernel内核态
      • CPU控制 kernel态的数据copy到用户态
      • 调用write时,user态下的内容会copy到内核态的socket的buffer中
      • 最后将内核态socket buffer的数据copy到网卡设备中传送
    • 缺点:增加了上下文切换、浪费了2次无效拷贝(即步骤2和3)
      image-20210509180416238
    • ZeroCopy
      • 请求kernel直接把disk的data传输给socket,而不是通过应用程序传输。Zero copy大大提高了应用程序的性能,减少不必要的内核缓冲区跟用户缓冲区间的拷贝,从而减少CPU的开销和减少了kernel和user模式的上下文切换,达到性能的提升
      • 对应零拷贝技术有mmap及sendfile
        • mmap:小文件传输快
        • sendfile:大文件传输比mmap快
      • 应用:Kafka、Netty、RocketMQ等都采用了零拷贝技术