<返回更多

Linux经典面试题:网卡接收数据后,经过几次拷贝才能到用户进程

2021-07-04  今日头条  云技术趣谈
加入收藏

网络是云计算绕不开的话题,其中主机内部网络性能开销最大的就是数据拷贝,那么通常情况下,当网卡接收到数据后,要经过几次拷贝才能被应用程序接收呢 ?

下图是一个网卡接收数据的整个流程。

Linux经典面试题:网卡接收数据后,经过几次拷贝才能到用户进程

 

1、当数据包到达网卡依据配置会将网络数据拷贝到DMA中,并触发硬件中断

2、驱动程序将从ring buffer中读取,填充内核skbuff结构。执行上层协议栈操作

3、socket read操作将数据从内核拷贝到用户态

可见用户态看到的数据包需要经过三次数据拷贝,这也限制了linux的网络性能,所以后期出现了DPDK、数据零拷贝等加速技术。其中DPDK直接使用用户态IO(UIO),直接旁路内核,如下图,可以直接将网卡数据拷贝到用户态,其中Driver有两部分组成,一部分在内核空间一个部分在用户空间。Driver主要作用是通过mmap地址映射物理地址和虚拟地址,以处理和禁止中断(这部分只能在内核空间完成)。

Linux经典面试题:网卡接收数据后,经过几次拷贝才能到用户进程

 

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>