在Linux系统中,软中断(SoftIRQ)是内核用于处理延迟敏感任务的重要机制,主要用于以下场景:
HI_SOFTIRQ
tasklet_hi
)TIMER_SOFTIRQ
hrtimer
/timer
)NET_TX_SOFTIRQ
NET_RX_SOFTIRQ
BLOCK_SOFTIRQ
IRQ_POLL_SOFTIRQ
TASKLET_SOFTIRQ
tasklet
)SCHED_SOFTIRQ
HRTIMER_SOFTIRQ
RCU_SOFTIRQ
raise_softirq()
主动触发ksoftirqd
辅助处理# 查看软中断统计
cat /proc/softirqs
CPU0 CPU1
HI: 42 10
TIMER: 123456 98765
NET_TX: 50 30
NET_RX: 30210 28050
bash
# 调整NET_RX处理权重
sysctl -w net.core.netdev_budget=600
bash
watch -n1 'cat /proc/softirqs | column -t'
bash
# 查看中断号
cat /proc/interrupts
# 设置CPU亲和性
echo 3 > /proc/irq/XX/smp_affinity
特性 | 硬中断 | 软中断 |
---|---|---|
触发源 | 硬件设备 | 内核代码 |
响应速度 | 纳秒级 | 微秒级 |
执行上下文 | 中断上下文 | 软中断上下文 |
可抢占性 | 不可抢占 | 可被硬中断抢占 |
理解软中断机制对优化系统性能(特别是网络吞吐量)至关重要。当出现ksoftirqd
进程高CPU占用时,通常表明需要调优网络或中断处理配置。