网卡驱动
文章平均质量分 81
redwingz
这个作者很懒,什么都没留下…
展开
-
网卡队列数量
内核网络设备结构使用两个成员表示队列数量,num_tx_queues表示最大队列数量,而real_num_tx_queues表示实际可用的队列数量。以intel的ixgbe驱动来看,在分配网卡设备时,队列数量设置为MAX_TX_QUEUES。如下将num_tx_queues和real_num_tx_queues都设置为了MAX_TX_QUEUES的值。宏MAX_TX_QUEUES定义为64,即最大队列数量为64。但是真正可用的队列数量为real_num_tx_queues,之后将更新其值。实际发送队列原创 2022-06-19 22:24:14 · 3193 阅读 · 0 评论 -
网卡发送队列选择
对于多队列的网络设备,real_num_tx_queues大于1,如果网络设备定义了自身的队列选择函数,使用此函数;否则,使用netdev_pick_tx选择发送队列。最后,队列选择完成之后,将队列索引保存到skb的成员queue_mapping中。首先,获取套接口中保存的队列索引值(sk_tx_queue_mapping),如果此值合法,范围在[0, skb->real_num_tx_queues]之间,并且ooo_okay不为1,意味着不需要重选队列,此时使用套接口中保存的队列索引值。否则,使用get原创 2022-06-18 21:33:37 · 1597 阅读 · 0 评论 -
X710网卡链路状态控制
驱动版本i40e-2.10.19.82,在ifconfig将网口down的时候,发现链路并没有断开,网卡的指示灯还是亮的。如下为控制网卡shutdown的函数:/** * i40e_down - Shutdown the connection processing * @vsi: the VSI being stopped **/void i40e_down(struct i40e_vsi *vsi){ int i; /* It is assumed that the call原创 2020-12-06 19:49:06 · 1779 阅读 · 0 评论 -
X710网卡接收丢包
通过ethtool命令看到是rx_dropped一项有数值。/ # ethtool -S eth0 | moreNIC statistics: rx_packets: 88037562 tx_packets: 66028257 rx_bytes: 7461153935 tx_bytes: 5612351710 rx_errors: 0 tx_errors: 0 rx_dropped: 372 tx_dropped: 0原创 2020-10-16 21:30:43 · 2719 阅读 · 0 评论 -
网络设备发送超时定时器
在注册网络设备函数register_netdevice中将调用Qdisc初始化函数dev_init_scheduler,这里将创建设备的watchdog定时器,超时处理函数设置为dev_watchdog,用来监控网络设备的发送队列传输超时。void dev_init_scheduler(struct net_device *dev){ dev->qdisc = &noop...原创 2020-02-17 09:50:40 · 2868 阅读 · 0 评论 -
网络设备的__LINK_STATE_START状态与IFF_UP标志
网络设备的打开函数__dev_open,对应于应用层的命令,以下可见,其中会设置状态位__LINK_STATE_START,但是如果设备驱动层的ndo_open函数执行失败,将清除此状态位。否则,执行成功之后,设备将设置IFF_UP标志位。可见两者之间差着对驱动层ndo_open函数的调用。static int __dev_open(struct net_device *dev, struct...原创 2020-02-17 09:48:16 · 3961 阅读 · 0 评论 -
内核网络设备状态
目前内核中定义了5中设备状态,如下所示。enum netdev_state_t { __LINK_STATE_START, __LINK_STATE_PRESENT, __LINK_STATE_NOCARRIER, __LINK_STATE_LINKWATCH_PENDING, __LINK_STATE_DORMANT,}; 网络设备PRESENT状...原创 2020-02-13 22:37:16 · 2021 阅读 · 2 评论 -
BQL队列控制
Byte Queue Limits算法试图控制网卡发送队列的大小,如下Intel的e1000驱动的网卡显示当前发送ring有256个,如果填满256个1500字节的报文,对于带宽为1G的e1000完全发送完成,需要256*1500/1G的时间,大约为3.84ms。意味值最后一个报文要在本地经历大约3.84ms的延迟,另一方面对于TCP协议,将对其RTT的估算等造成不利影响。BQL与TCP的TSQ...原创 2020-02-13 22:01:45 · 2963 阅读 · 5 评论 -
网络驱动发送队列的停止和冻结
内核中的枚举类型netdev_queue_state_t定义了三种情况,包括设备驱动层面的发送队列停止,协议栈层面的发送队列停止以及发送队列的冻结。另外,定义了三个宏表示了三种组合,其中QUEUE_STATE_ANY_XOFF包含驱动和协议栈两个层面的发送队列停止;其它两个定义如下所示,意义直观。enum netdev_queue_state_t { __QUEUE_STATE_DRV_...原创 2020-02-12 21:57:49 · 3176 阅读 · 1 评论 -
网络设备驱动发送锁
在协议栈上层提交报文到设备驱动时,内核使用发送锁锁住驱动的报文发送函数netdev_start_xmit,或者其封装函数dev_hard_start_xmit,如下为函数dev_direct_xmit中的调用。int dev_direct_xmit(struct sk_buff *skb, u16 queue_id){ local_bh_disable(); H...原创 2020-02-06 20:00:27 · 794 阅读 · 0 评论 -
以太网流量控制XON/XOFF
当以太网卡不能处理对端发送的数据帧时,将发送‘PAUSE’帧到对端,请求暂停发送。当本端以太网卡可处理更多数据时,或者‘PAUSE’请求的暂停时间超时,对端可继续发送数据。可使用以下的ethtool命令查看网卡的流控设置。$ ethtool --show-pause eth0 Pause parameters for eth0:Autonegotiate: onRX: ...原创 2019-09-23 09:49:49 · 5290 阅读 · 0 评论 -
i40e网卡驱动中的PCI-E带宽警告
使用的处理器为Xeon5122,4个核心,每个核心2个超线程。如下:/ # cat /proc/cpuinfo processor : 0vendor_id : GenuineIntelcpu family : 6model : 85model name : Intel(R) Xeon(R) Gold 5122 CPU @...原创 2019-08-08 20:36:49 · 3177 阅读 · 0 评论 -
ETHTOOL设置网卡接收哈希(RSS)
ethtool命令设置接收端哈希功能,按照哈希结果将数据流分发到网卡的不同接收队列中。例如以下命令,指定ipv4的tcp数据流中参与哈希的字段(sdfn):/ # ethtool --config-ntuple eth0 rx-flow-hash tcp4 sdfn同样,使用ethtool命令查看设置结果如下:/ # ethtool --show-ntuple eth0 rx-flo...原创 2019-03-04 18:07:29 · 13613 阅读 · 2 评论 -
intel网卡中断的亲核性与性能
以intel网卡IGB驱动为例,网口eth0与网卡eth1的中断进行亲核性配置。两个网卡驱动起来之后,查看其中断分配情况。如下为eth0的中断217到225共9个中断,除去217号中断,其余8个一半为接收队列中断,另一半为发送队列中断。/ # cat /proc/interrupts | grep eth0 217: 1 0 0 ...原创 2019-02-27 22:39:56 · 2274 阅读 · 4 评论 -
SIOCGIFMAP获取到错误的网络设备中断号
内核的ioctl(SIOCGIFMAP)处理函数如下,其由net_device结构的irq成员获取中断号。static int dev_ifsioc_locked(struct net *net, struct ifreq *ifr, unsigned int cmd){ switch (cmd) { case SIOCGIFMAP: ifr->ifr...原创 2019-02-11 18:01:32 · 614 阅读 · 0 评论 -
e1000e驱动的MSI中断测试
本文主要讲述一下e1000e网卡驱动的MSI中断测试,以及对通过PROC文件(/proc/irq/目录)设置的中断参数所造成的影响。intel网卡e1000e驱动的open函数e1000_open,会测试MSI中断。所以每次在使能网卡时,都会进行中断测试。intel的其它网卡如e1000等驱动没有此项测试功能。由代码中的注释可知,是由于PCIe的一些问题导致芯片忽略掉e1000e的MSI消息,...原创 2019-02-16 07:59:50 · 1258 阅读 · 0 评论