Kafka速度快的原因-sendfile零拷贝介绍

所谓的零拷贝是指将数据直接从磁盘文件复制到网卡设备中,而不需要经由应用程序之手。零拷贝大大提高了应用程序的性能,减少了内核和用户模式之间的上下文切换。对 Linux 操作系统而言,零拷贝技术依赖于底层的 sendfile() 方法实现。对应于 Java 语言,FileChannal.transferTo() 方法的底层实现就是 sendfile() 方法。

所谓零拷贝,就是减少上下文切换,不经由用户空间,直接在内核空间把数据发往网卡接口。

Kafka速度快的原因-sendfile零拷贝介绍
操作系统底层提供的sendfile(transferTo()函数),零拷贝
Kafka速度快的原因-sendfile零拷贝介绍
sendfile
Linux2.1内核开始引入了sendfile函数,用于将文件通过socket传送。开始时跟mmap没什么区别,但是Linux2.4做出了重大优化,将零拷贝推到顶峰。

优化后的处理过程如下:

将文件拷贝到kernel buffer中;
向socket buffer中追加当前要发生的数据在kernel buffer中的位置和偏移量;
根据socket buffer中的位置和偏移量直接将kernel buffer的数据copy到网卡设备中;

Kafka速度快的原因-sendfile零拷贝介绍

Original: https://blog.51cto.com/u_15691622/5397512
Author: wilson_go
Title: Kafka速度快的原因-sendfile零拷贝介绍

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/517206/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球