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

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

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

非多队列:

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

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

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

多队列:

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

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

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

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

解释:

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

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

相关推荐