中斷 中斷其實是一種非同步的事件處理機制,可以提高系統的併發處理能力。 由於中斷處理程式會打斷其他進程的運行,所以,為了減少對正常進程運行調度的影響,中斷處理程式就需要儘可能快地運行。如果中斷本身要做的事情不多,那麼處理起來也不會有太大問題;但如果中斷要處理的事情很多,中斷服務程式就有可能要運行很長時 ...
中斷
中斷其實是一種非同步的事件處理機制,可以提高系統的併發處理能力。
由於中斷處理程式會打斷其他進程的運行,所以,為了減少對正常進程運行調度的影響,中斷處理程式就需要儘可能快地運行。如果中斷本身要做的事情不多,那麼處理起來也不會有太大問題;但如果中斷要處理的事情很多,中斷服務程式就有可能要運行很長時間。
- 註意:
中斷處理程式在響應中斷時,還會臨時關閉中斷。這就會導致上一次中斷處理完成之前,其他中斷都不能響應,也就是說中斷有可能會丟失。
軟中斷(softirq)
Linux 將中斷處理過程分成了兩個階段,也就是上半部和下半部:
- 上半部用來快速處理中斷,它在中斷禁止模式下運行,主要處理跟硬體緊密相關的或時間敏感的工作。也就是我們常說的硬中斷,特點是快速執行;
- 下半部用來延遲處理上半部未完成的工作,通常以內核線程的方式運行。也就是我們常說的軟中斷,特點是延遲執行。
查看軟中斷和內核線程
- /proc/softirqs 提供了軟中斷的運行情況;
- /proc/interrupts 提供了硬中斷的運行情況。
查看軟中斷在CPU上累計次數:
// Linux 中的軟中斷包括網路收發、定時、調度、RCU 鎖等各種類型,可以通過查看 /proc/softirqs 來觀察軟中斷的運行情況。
// TIMER(定時中斷)、NET_RX(網路接收)、SCHED(內核調度)、RCU(RCU 鎖)
[root@k8s /proc]# cat softirqs
CPU0 CPU1
HI: 5 1
TIMER: 444492709 271957759
NET_TX: 18937 15860
NET_RX: 34769092 430587974
BLOCK: 12265925 0
BLOCK_IOPOLL: 0 0
TASKLET: 853 592
SCHED: 4489427 66716813
HRTIMER: 0 0
RCU: 151213683 128619479
每個 CPU 都對應一個軟中斷內核線程,這個軟中斷內核線程就叫做 ksoftirqd/CPU 編號。
// 查看軟中斷線程運行情況
[root@k8s /proc]# ps aux | grep softirq
root 6 0.0 0.0 0 0 ? S Apr02 0:06 [ksoftirqd/0]
root 14 0.0 0.0 0 0 ? S Apr02 2:06 [ksoftirqd/1]
Sar
sar(System Activity Reporter系統活動情況報告)是目前 Linux 上最為全面的系統性能分析工具之一,可以從多方面對系統的活動進行報告,包括:文件的讀寫情況、系統調用的使用情況、磁碟I/O、CPU效率、記憶體使用狀況、進程活動及IPC有關的活動等
[root@k8s /proc]# sar -n DEV 5
Linux 3.10.0-1062.4.1.el7.x86_64 (instance-010oj085) 04/07/2020 _x86_64_ (2 CPU)
04:28:56 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
04:29:01 PM vethweplf08851b 3.20 3.20 0.24 1.19 0.00 0.00 0.00
04:29:01 PM vethweplaa5bdc5 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:29:01 PM weave 30.40 31.60 3.54 9.76 0.00 0.00 0.00
04:29:01 PM vethwepl932b3c7 10.40 12.20 1.56 3.68 0.00 0.00 0.00
04:29:01 PM vxlan-6784 0.00 0.00 0.00 0.00 0.00 0.00 0.00
- 第一列:表示報告的時間。
- 第二列:IFACE 表示網卡。
- 第三、四列:rxpck/s 和 txpck/s 分別表示每秒接收、發送的網路幀數,也就是 PPS。
- 第五、六列:rxkB/s 和 txkB/s 分別表示每秒接收、發送的千位元組數,也就是 BPS
可以通過這個工具分析網路軟中斷的情況
學習筆記
來自極客時間:《Linux性能優化實戰》