查看网络中断绑定在cpu3
cat /proc/interrupts | grep -E 'CPU|44'
CPU0 CPU1 CPU2 CPU3
44: 0 0 0 3836 GIC 178 Level brcm_44
IPI2: 0 0 0 0 CPU stop interrupts
cat /proc/softirqs | grep -E 'CPU|NET_RX'
CPU0 CPU1 CPU2 CPU3
NET_RX: 653 10 9 193
思索了很久,认为跟ksoftirqd相关
ps | grep ksoftirq
3 root 0 0 SW <0> [ksoftirqd/0]
12 root 0 0 SW <1> [ksoftirqd/1]
16 root 0 0 SW <2> [ksoftirqd/2]
20 root 0 0 SW <3> [ksoftirqd/3]
2133 root 5596 560 S <1> grep ksoftirq
ksoftirqd是一种均衡机制引入的内核线程。在设计机制上,linux依次优先处理中断、软中断、进程。软中断有几个处理时机:1、中断返回;2、软中断重新触发自己执行(如网络子系统)。
在大网络包发生时,可能导致进程饿死。
但如果将自行触发的软中断延迟到下一次软中断中执行,可能导致软中饥饿。
作为改进,当大量软中断产生的时候,内核引入了一组内核线程来处理负载。这些线程的优先级比较低,避免跟重要任务冲突。
ksoftirq会在每个cpu上都有一个实例,这样,即使中断绑定到某单核,也会出现softirq出现在其他cpu上。
阅读(5525) | 评论(0) | 转发(0) |