零拷贝技术

传统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的吞吐量高的原因,也是由于零拷贝技术。
相关推荐
qq_455760856 分钟前
Docker - 镜像
linux·运维·docker
m0_5348750510 分钟前
Ditto局域网同步功能实现宿主机和VMware虚拟机之间的复制粘贴共享
linux·运维·服务器
RisunJan19 分钟前
Linux命令-hdparm命令(获取和设置硬盘参数)
linux·运维·服务器
骄傲的心别枯萎20 分钟前
RV1126 NO.58:ROCKX+RV1126人脸识别推流项目之读取人脸数据库并保存到map
linux·数据库·计算机视觉·音视频·rv1126
羑悻的小杀马特21 分钟前
【Linux篇章】再续传输层协议TCP:用技术隐喻重构网络世界的底层逻辑,用算法演绎‘网络因果律’的终极推演(通俗理解TCP协议,这一篇就够了)!
linux·网络·后端·tcp/ip·tcp协议
博语小屋22 分钟前
Socket 编程TCP:多线程远程命令执行
linux·网络·c++·网络协议·tcp/ip
列逍28 分钟前
Linux 动静态库深度解析:原理、制作与实战
linux·运维·服务器·动态库·静态库
云和数据.ChenGuang28 分钟前
欧拉(openEuler)和CentOS
linux·运维·centos
qq_5895681032 分钟前
centos打开文件之后怎么退出 ,使用linux命令
linux·运维·centos
linuxxx11033 分钟前
Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64
linux·运维·centos