网络是云计算绕不开的话题,其中主机内部网络性能开销最大的就是数据拷贝,那么通常情况下,当网卡接收到数据后,要经过几次拷贝才能被应用程序接收呢 ?
下图是一个网卡接收数据的整个流程 。
文章插图
1、当数据包到达网卡依据配置会将网络数据拷贝到DMA中,并触发硬件中断
2、驱动程序将从ring buffer中读取,填充内核skbuff结构 。执行上层协议栈操作
【Linux经典面试题:网卡接收数据后,经过几次拷贝才能到用户进程】3、socket read操作将数据从内核拷贝到用户态
可见用户态看到的数据包需要经过三次数据拷贝,这也限制了linux的网络性能,所以后期出现了DPDK、数据零拷贝等加速技术 。其中DPDK直接使用用户态IO(UIO),直接旁路内核,如下图,可以直接将网卡数据拷贝到用户态,其中Driver有两部分组成,一部分在内核空间一个部分在用户空间 。Driver主要作用是通过mmap地址映射物理地址和虚拟地址,以处理和禁止中断(这部分只能在内核空间完成) 。
文章插图
推荐阅读
- 再生龙 使用Clonezilla克隆、恢复Linux系统
- 吉利里面最好的汽车是什么车?
- 韩国土地面积和人口 韩国土地面积多少平方公里
- 炸糖糕怎么烫面窍门窍门 怎么烫面做糖糕
- 经典广告集锦泉
- 惠普台式机怎么样
- 博物馆|上官婉儿墓志首次面向公众展出:4月28日见
- 黄金面膜正确使用方法是什么?
- 美白补水面膜怎么自制
- |真是知人知面不知心,河边钓鱼多预防这样的人