零拷贝技术

网络文件传输通常涉及多次数据拷贝,包括磁盘到内核、内核到用户空间、用户空间到socket及socket到网卡。通过使用mmap和sendfile函数,可以减少这些拷贝次数,提升效率。mmap允许直接将文件映射到用户空间,而sendfile利用SG-DMA技术,在某些情况下仅需两次拷贝即可完成传输。这些优化方法对于提高网络传输性能至关重要。
摘要由CSDN通过智能技术生成

在网络传输文件时,涉及到大量的io操作。
发送端:
read函数读取文件到用户缓冲区,先把文件从磁盘拷贝到linux内核(DMA来完成,不占用cpu),再从linux内核拷贝到用户缓冲区(cpu来完成),涉及到了两次数据拷贝。
然后把用户缓存区数据使用send发送,cpu再把数据从用户缓存拷贝到socket缓冲区,DMA再把linux内核中的数据拷贝到网卡。
总共需要四次拷贝才能把磁盘文件发送出去。
在这里插入图片描述

解决办法:

一、使用mmap函数而不是用read,DMA把文件拷贝到linux内核后,linux内核和用户缓存区共享linux内核数据,相当于把linux内核数据映射到用户缓存区。
再使用send的时候,cpu把数据从内核拷贝到socket缓冲区,再把数据从socket缓冲区拷贝到网卡(DMA)。
只用了三次拷贝,磁盘到内核,内核到网卡。
在这里插入图片描述

二、sendfile函数
sendfile和mmap类似,都需要三次拷贝
在这里插入图片描述

对于支持网卡支持 SG-DMA 技术的情况下, sendfile只会产生两次数据拷贝
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值