零拷贝技术

传统I/O

传统I/O的工作方式是,数据读取和写入是从用户空间到内核空间来回复制,而内核空间的数据是通过操作系统层面的I/O接口从磁盘读取或写入。

涉及到下面两个函数:

read(file, tmp_buf, len);

write(socket, tmp_buf, len);

  • 需要4次数据拷贝,2次CPU ,2次DMA。
  • 发生4次上下文切换,因为发生2次系统调用,一次是read,一次是write

零拷贝

  • 通过DMA将磁盘上的数据拷贝到内核缓存区中
  • 缓冲区描述符和数据长度传到socket缓冲区中,这样网卡的SG-DMA控制器就可以直接将内核缓存的数据拷贝到网卡的缓存区中。此过程不需要将数据从操作系统的内核缓存区拷贝到socket缓存区中,减少了一次数据拷贝

此过程只进行了两次数据拷贝,2次上下文切换

零拷贝:没有在内存层面去拷贝数据,也就是全程没有通过CPU来搬运数据。

  • 相比传统方式,少了2次系统调用,再加上网卡支持SG-DMA技术的话,数据拷贝只需要两次,且都不需要CPU,只需要DMA
  • Kafka消息队列I/O的吞吐量高的原因,也是由于零拷贝技术。
相关推荐
Sapphire~4 小时前
Linux-07 ubuntu 的 chrome 启动不了
linux·chrome·ubuntu
伤不起bb4 小时前
NoSQL 之 Redis 配置与优化
linux·运维·数据库·redis·nosql
广东数字化转型4 小时前
nginx怎么使用nginx-rtmp-module模块实现直播间功能
linux·运维·nginx
啵啵学习4 小时前
Linux 里 su 和 sudo 命令这两个有什么不一样?
linux·运维·服务器·单片机·ubuntu·centos·嵌入式
半桔5 小时前
【Linux手册】冯诺依曼体系结构
linux·缓存·职场和发展·系统架构
网硕互联的小客服5 小时前
如何利用Elastic Stack(ELK)进行安全日志分析
linux·服务器·网络·安全
冰橙子id6 小时前
linux——磁盘和文件系统管理
linux·运维·服务器
无聊的小坏坏7 小时前
环境变量深度解析:从配置到内核的全链路指南
linux·bash
才鲸嵌入式7 小时前
01 Ubuntu20.04下编译QEMU8.2.4,交叉编译32位ARM程序,运行ARM程序的方法
linux·c语言·单片机·嵌入式·arm·qemu·虚拟机
伤不起bb8 小时前
Kafka 消息队列
linux·运维·分布式·kafka