IT评测·应用市场-qidao123.com

标题: 【操纵体系】零拷贝 [打印本页]

作者: tsx81428    时间: 2025-1-10 04:27
标题: 【操纵体系】零拷贝
传统的文件传输: 涉及四次CPU上下文切换,四次拷贝

零拷贝技术:
1.mmap+write:用mmap替换read,淘汰一次CPU拷贝,涉及四次CPU上下文切换,三次拷贝

2.sendfile():涉及两次CPU上下文切换,三次拷贝

3.真正的零拷贝:
如果网卡支持 SG-DMA 技术(和普通的 DMA 不同),可以直接通过 SG-DMA 将内核缓冲区的数据拷贝到网卡,不再需要CPU进行拷贝。

总结:什么是零拷贝技术?
为了提高文件传输性能,于是出现了零拷贝技术,他通过一次体系调用(sendfile方法)合并了磁盘读取与网络发送两个操纵,降低了上下文切换次数。别的,拷贝数据都是发生在内核中的,天然降低了数据拷贝的次数。同时,数据拷贝的工作都是由DMA完成的,无需CPU进行数据拷贝。
使用零拷贝技术的项目:Ngnix、Kafka
需要留意的:针对于大文件,不应该使用 PageCache,即不应该使用零拷贝技术,由于可能由于PageCache 被大文件占据,而导致热点小文件无法利用到 PageCache,在高并发环境下,会带来严重性能题目。
大文件传输用什么方式实现?
在高并发场景下,针对大文件传输,使用异步I/O+直接I/O来替代零拷贝技术。
异步I/O可以解决阻塞题目,直接I/O可以不经过Page Cache 直接从磁盘读取数据到用户缓冲区,两者结合,可以实现无阻塞读取文件。如图所示:


总结:传输大文件时,使用异步I/O+直接I/O;传输小文件时,使用零拷贝技术。



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4