测试驿栈-由浅入深学性能 网卡中断绑定 cpu
答疑微信号:uhz2008
概述
这次的标题大家可能有点陌生。
什么是网卡中断呢?收包过程中,网络数据包到达网卡的时候,网卡会通过 DMA 把收包队列写入缓冲区,然后 DMA 通知中断处理器产生中断,告诉 cpu 该干活了。这个时候 cpu 就会把正在执行的任务停下来,去轮询处理这批数据包。
这里就产生了一个问题,linux 的网卡有时候不止一个,cpu 的逻辑核也不是一个,那么怎么平衡这两者之间的关系?下面看一个图
图上可以看到 24 个逻辑核,几乎所有的软中断都集中在了 22 号逻辑核上,这样会导致单核中断过高,影响处理效率。
网卡中断号
基于刚刚的问题,我们要搞清楚几个问题。
1、是否开启多个网卡队列
ethtool -l eth0
Pre-set maximums 表示支持的最大网卡数
Current hardware 表示当前开启的网卡数
这里意思是能支持双网卡,但是只开了一个。开启多网卡命令是 ethtool -L eth0 combined 2
2、网卡中断号是多少
watch -d cat /proc/interrupts
这里可以看到两块网卡参与了中断
virtio0-input.0 表示第一块网卡,读写中断号是 25 26
virtio0-input.1 表示第二块网卡,读写中断号是 27 28
3、有几个逻辑核参与了中断
"for x in {25..28};do cat /proc/irq/$x/smp_affinity_list;echo "=====$x===";done”
可以看到两个逻辑核分别参与了两块网卡的中断。
中断绑定
那么如果像文章最初那个网卡中断集中在一颗逻辑核上怎么办?我们只需要手动把中断绑定到固定的逻辑核就行了
比如 echo “1”> echo "1" >/proc/irq/25/smp_affinity_list
1 表示 1 号 cpu 逻辑核,25 表示网卡中断号。这里表示把标识 25 的中断绑定到 1 号 cpu 上面