多队列网卡简介以及Linux通过网卡发送数据包源码

首先我们看一下一个主流多队列网卡(E1000)跟多核CPU之间的关系图:

多队列网卡简介以及Linux通过网卡发送数据包源码


非多队列:

linux的网卡由结构体net_device表示,一个该结构体对应一个可以调度的数据包发送队列。

数据包的实体在内核中以结构体sk_buff(skb),形如:


多队列:

一个网卡可以拥有多个队列

多队列网卡简介以及Linux通过网卡发送数据包源码


接下来,看看TX引擎是如何工作的(注:对于发送和接收数据包有两个名词,分别应对TX,RX)

多队列网卡简介以及Linux通过网卡发送数据包源码


解释:

函数-dev_queue_xmit():入队一个buffer以传输到网络驱动设备。

配合该函数的源码来解释上图的传输过程:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/22113.html