零拷贝技术

传统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的吞吐量高的原因,也是由于零拷贝技术。
相关推荐
a小胡哦12 分钟前
Windows、Mac、Linux,到底该怎么选?
linux·windows·macos·操作系统
_extraordinary_21 分钟前
Linux权限(一)
android·linux·excel
易安杰28 分钟前
ElasticSearch+Kibana通过Docker部署到Linux服务器中
linux·elasticsearch·搜索引擎·全文检索·中文分词
人生!?1 小时前
给小米/红米手机root(工具基本为官方工具)——KernelSU篇
android·linux·智能手机
Anna_Tong2 小时前
阿里云如何协助解决操作系统兼容性问题
linux·服务器·ubuntu·阿里云·centos·云计算·系统迁移
不良人天码星2 小时前
Linux的基础指令和环境部署,项目部署实战(下)
linux·运维·服务器
致奋斗的我们4 小时前
HAProxy介绍与编译安装
linux·汇编·数据库·mysql·青少年编程·haproxy·openeurler
waves浪游4 小时前
Linux基本指令(上)
linux·运维·服务器
不确定性确定你我5 小时前
`sh` 与 `bash` 的区别详解
linux·bash·运维开发
9毫米的幻想6 小时前
【Linux系统】—— 冯诺依曼体系结构与操作系统初理解
linux·运维·服务器·c语言·c++