You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

询问ISR顶半部、底半部对应的内核线程名称及其所在CPU

Linux中断顶/底半部线程名称及CPU驻留查看指南

刚好之前研究过Linux中断处理的线程模型,来给你梳理清楚这些问题:

1. 顶半部(Top-half)对应的内核线程

你在top里看到的irq/<中断号>-<设备名>(比如你的irq/76-em1),就是顶半部的硬中断处理线程。顶半部负责处理中断里最紧急、不能拖延的操作——比如确认硬件中断信号、读取网卡寄存器里的数据包,必须在禁用中断的短时间内完成。

你可以通过/proc/interrupts验证中断号和设备的对应关系:

cat /proc/interrupts | grep em1

输出里就能看到em1绑定的中断号76,和top的信息完全对应。

2. 底半部(Bottom-half)对应的内核线程

底半部用来处理中断里非紧急、可以延迟的工作,不同实现机制对应不同的线程:

  • 软中断(softirq):对应线程是ksoftirqd/<CPU编号>,比如ksoftirqd/0是CPU0上的软中断处理线程。每个CPU都会有一个专属的ksoftirqd,当有软中断等待处理时,这个线程会被唤醒执行。
  • Tasklet:tasklet是基于软irq实现的轻量级机制,它没有独立的线程,而是依附在对应CPU的ksoftirqd线程里运行,所以不会在top里看到单独的tasklet线程。
  • 工作队列(Workqueue):如果中断底半部用工作队列实现,对应的线程是kworker/<CPU编号>:<优先级>,比如kworker/0:1。不过工作队列是内核通用的线程池,不止服务中断,所以要结合设备驱动代码才能确定哪些工作项属于网卡的底半部处理。

3. 查看这些线程驻留的CPU

用top快速查看

打开top后按f键,勾选P(Last Used Cpu)列,就能看到每个线程最后运行的CPU编号——你例子里irq/76-em1后面的4,就表示它最近驻留在CPU4上。

用ps精准过滤

执行这条命令可以直接列出目标线程的CPU信息:

ps -eo pid,tid,comm,pcpu,psr | grep -E "(irq/76-em1|ksoftirqd|kworker)"

其中psr列就是线程最后运行的CPU编号。

查看/proc文件系统细节

找到线程的PID(比如你例子里的627),查看stat文件的第39个字段:

cat /proc/627/task/627/stat | awk '{print $39}'

这个数值就是该线程最后运行的CPU编号。

额外提一句:硬中断线程(顶半部)通常会被绑定到特定CPU(通过中断亲和性配置),而ksoftirqd天生和CPU一一对应,所以线程名里的编号就是它常驻的CPU。


内容的提问来源于stack exchange,提问作者cwang.sh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:17:17