Linux 軟中斷


中斷

中斷其實是一種異步的事件處理機制,可以提高系統的並發處理能力。

由於中斷處理程序會打斷其他進程的運行,所以,為了減少對正常進程運行調度的影響,中斷處理程序就需要盡可能快地運行。如果中斷本身要做的事情不多,那么處理起來也不會有太大問題;但如果中斷要處理的事情很多,中斷服務程序就有可能要運行很長時間。

  • 注意:

中斷處理程序在響應中斷時,還會臨時關閉中斷。這就會導致上一次中斷處理完成之前,其他中斷都不能響應,也就是說中斷有可能會丟失。

軟中斷(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性能優化實戰》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM