首先我们看一下一个主流多队列网卡(E1000)跟多核CPU之间的关系图:
非多队列:
linux的网卡由结构体net_device表示,一个该结构体对应一个可以调度的数据包发送队列。
数据包的实体在内核中以结构体sk_buff(skb),形如:
多队列:
一个网卡可以拥有多个队列
接下来,看看TX引擎是如何工作的(注:对于发送和接收数据包有两个名词,分别应对TX,RX)
解释:
函数-dev_queue_xmit():入队一个buffer以传输到网络驱动设备。
配合该函数的源码来解释上图的传输过程: