当前位置:网站首页>传统的IO存在什么问题?为什么引入零拷贝的?
传统的IO存在什么问题?为什么引入零拷贝的?
2022-06-25 06:41:00 【詹Sir(开源字节)】
传统的IO存在什么问题?为什么引入零拷贝的?
如果服务端要提供文件传输的功能,我们能想到的最简单的方式是:将磁盘上的文件读取出来,然后通过网络协议发送给客户端。
传统 I/O 的工作方式是,数据读取和写入是从用户空间到内核空间来回复制,而内核空间的数据是通过操作系统层面的 I/O 接口从磁盘读取或写入。
代码通常如下,一般会需要两个系统调用:
read(file, tmp_buf, len); write(socket, tmp_buf, len);
代码很简单,虽然就两行代码,但是这里面发生了不少的事情。

首先,期间共发生了 4 次用户态与内核态的上下文切换,因为发生了两次系统调用,一次是 read() ,一次是 write(),每次系统调用都得先从用户态切换到内核态,等内核完成任务后,再从内核态切换回用户态。
上下文切换到成本并不小,一次切换需要耗时几十纳秒到几微秒,虽然时间看上去很短,但是在高并发的场景下,这类时间容易被累积和放大,从而影响系统的性能。
其次,还发生了 4 次数据拷贝,其中两次是 DMA 的拷贝,另外两次则是通过 CPU 拷贝的,下面说一下这个过程:
- 第一次拷贝,把磁盘上的数据拷贝到操作系统内核的缓冲区里,这个拷贝的过程是通过 DMA 搬运的。
- 第二次拷贝,把内核缓冲区的数据拷贝到用户的缓冲区里,于是我们应用程序就可以使用这部分数据了,这个拷贝到过程是由 CPU 完成的。
- 第三次拷贝,把刚才拷贝到用户的缓冲区里的数据,再拷贝到内核的 socket 的缓冲区里,这个过程依然还是由 CPU 搬运的。
- 第四次拷贝,把内核的 socket 缓冲区里的数据,拷贝到网卡的缓冲区里,这个过程又是由 DMA 搬运的。
我们回过头看这个文件传输的过程,我们只是搬运一份数据,结果却搬运了 4 次,过多的数据拷贝无疑会消耗 CPU 资源,大大降低了系统性能。
这种简单又传统的文件传输方式,存在冗余的上文切换和数据拷贝,在高并发系统里是非常糟糕的,多了很多不必要的开销,会严重影响系统性能。
所以,要想提高文件传输的性能,就需要减少「用户态与内核态的上下文切换」和「内存拷贝」的次数。
如若转载,请注明出处:开源字节 https://sourcebyte.cn/article/169.html
边栏推荐
- [batch dos-cmd command - summary and summary] - add comment command (REM or::)
- VOCALOID笔记
- IAR compiler flashback
- Chuantu microelectronics breaks through the high-end isolator analog chip market with ca-is3062w
- “空间转换”显著提升陡崖点云的地面点提取质量
- 國外LEAD域名郵箱獲取途徑
- 三年营收连续下滑,天地壹号困在醋饮料里
- Notes: [open class] neural network and deep learning -- tensorflow2.0 actual combat [Chinese course]
- 一“石”二“鸟”,PCA有效改善机载LiDAR林下地面点部分缺失的困局
- Application of point cloud intelligent drawing in intelligent construction site
猜你喜欢

微信小程序开通客服消息功能开发

el-input实现尾部加字

神经网络与深度学习-3- 机器学习简单示例-PyTorch

Path planner based on time potential function in dynamic environment

三年营收连续下滑,天地壹号困在醋饮料里

Misunderstanding of switching triode

The method of judging whether triode can amplify AC signal

数据可视化没有重点怎么办?

【深度学习 轻量型backbone】2022 EdgeViTs CVPR

搞清信息化是什么,让企业转型升级走上正确的道路
随机推荐
个人域名和企业域名的区别
单位转换-毫米转像素-像素转毫米
微信小程序开通客服消息功能开发
一次弄清楚 Handler 可能导致的内存泄漏和解决办法
[batch dos-cmd command - summary and summary] - commands related to Internet access and network communication (Ping, Telnet, NSLOOKUP, ARP, tracert, ipconfig)
【QT】Qt 5 的程序:打印文档
ts环境搭建
Can I open a stock account with a compass? Is it safe?
1742. 盒子中小球的最大数量
[batch dos-cmd command - summary and summary] - application startup and call, service and process operation commands (start, call, and)
"Spatial transformation" significantly improves the quality of ground point extraction of cliff point cloud
Getting started with OpenMP
NPM install reports an error: gyp err! configure error
Chuantu microelectronics breaks through the high-end isolator analog chip market with ca-is3062w
Manufacturing process of PCB 2021-10-11
shell小技巧(一百三十四)简单的键盘输入记录器
VectorDraw Developer Framework 10.10
Tuwei Digital Isolator and interface chip can perfectly replace imported brands Ti and ADI
Introduction to Sichuan Tuwei ca-is3082wx isolated rs-485/rs-422 transceiver
Insert and sort the linked list [dummy unified operation + broken chain core - passive node]