在 Linux 系統裡,我們可以通過檢視
/proc/softirqs
的 内容來知曉「軟中斷」的運作情況,以及
/proc/interrupts
的 内容來知曉「硬中斷」的運作情況。
接下來,就來簡單的解析下
/proc/softirqs
檔案的内容,在我伺服器上檢視到的檔案内容如下:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAnYldHL0FWby9mZvwFN4ETMfdHLkVGepZ2XtxSZ6l2clJ3LcV2Zh1Wa9M3clN2byBXLzN3btgHL9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsQTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5yN1gTM1ADZzYGOkFWYzUTNzYzX1ITO1AjMzIzLcBTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
你可以看到,每一個 CPU 都有自己對應的不同類型軟中斷的累計運作次數,有 3 點需要注意下。
第一點,要注意第一列的内容,它是代表着軟中斷的類型,在我的系統裡,軟中斷包括了 10 個類型,分别對應不同的工作類型,比如
NET_RX
表示網絡接收中斷,
NET_TX
表示網絡發送中斷、
TIMER
表示定時中斷、
RCU
表示 RCU 鎖中斷、
SCHED
表示核心排程中斷。
第二點,要注意同一種類型的軟中斷在不同 CPU 的分布情況,正常情況下,同一種中斷在不同 CPU 上的累計次數相差不多,比如我的系統裡,
NET_RX
在 CPU0 、CPU1、CPU2、CPU3 上的中斷次數基本是同一個數量級,相差不多。
第三點,這些數值是系統運作以來的累計中斷次數,數值的大小沒什麼參考意義,但是系統的中斷次數的變化速率才是我們要關注的,我們可以使用
watch -d cat /proc/softirqs
指令檢視中斷次數的變化速率。
前面提到過,軟中斷是以核心線程的方式執行的,我們可以用
ps
指令可以檢視到,下面這個就是在我的伺服器上查到軟中斷核心線程的結果: