linux 性能自我學習 ———— 軟中斷 [五]
前言
linux 性能的自我學習。
正文
什么是軟中斷呢?
舉一個網絡的例子。
linux 將中斷處理過程分為兩個階段:
上半部用來快速處理中斷,他在中斷禁止模式下運行,注意是處理跟硬件緊密相關或時間敏感的工作。
下半部用來延遲處理上半部未完成的工作,通常以內核線程的方式運行。
比如網卡接收到數據包后,會通過硬件中斷的方式通知內核有新的數據到了。這時候,內核就應該調用中斷處理程序來響應它。
對于上半部分來說,就是快速處理,把網卡的數據讀取到內存中,然后更新硬件寄存器的狀態,最后發一個軟中斷信號,通知下半部分進一步處理。
下半部分被軟中斷喚醒后,需要從內存中找到網絡數據,再按照協議棧,對數據進行逐層解析和處理,直到把它送到了應用程序。
實際上,上半部分會打斷cpu正在執行的任務,然后立即執行中斷處理程序。下半部分以內核線程的方式執行,并且每個cpu都對應一個軟中斷內核線程,名字為: ksoftirqd/cpu 編號
軟中斷不僅僅是硬中斷的下部分,一些內核自定義時間也是軟中斷,比如內核調度和rcu鎖。
怎么查看軟中斷呢?
這里有10個不同的中斷類型。
下面開始實驗。
實驗
需要用到的工具是:
docker sysstat sar hping3 tcpdump 等工具。
-
sar 是一個系統活動報告工具,既可以實時查看系統當前的活動,又可以配置保存和報告歷史數據。
-
hping3 是一個可以構造tcp/ip 協議數據包的工具,可以對系統進行安全審計、防火墻測試等。
-
tcpdump 是一個常用的網絡抓包工具,常用來分析各種網絡問題。
hping3 在centos 安裝方式:
創建本地安裝目錄
mkdir -p /usr/local/hping && cd /usr/local/hping
下載并解壓
wget https://github.com/antirez/hping/archive/master.zip && unzip master.zip && cd hping-master
安裝依賴包
yum install -y libpcap-devel yum install -y gcc gcc-c++ yum install -y tcl tcl-devel
設置軟連接
ln -sf /usr/include/pcap-bpf.h /usr/include/net/bpf.h
進行安裝
./configure && make strip && make install
測試查詢版本
hping3 -v
然后執行:
hping3 -S -p 80 -i u100 192.168.62.136
這個時候你就發現變慢了:
curl http://192.168.62.136:5555
變慢一般查看cpu:
看起來似乎正常。
查看軟中斷:
watch -d cat /proc/softirqs
分析網卡情況:
sar -n DEV 1
第一列:表示報告時間
第二列: iface 表示網卡
第三四列: rxpck/s 和 txpck/s 分別表示每秒接收、發送的網絡幀數,也就是pps
第五、六列: rxkb/s 和 txkb/s 表示每秒接收、發送的字節數,也就是bps。
這里就看到一個問題:
比如說接收了12690.54 包,但是txkB/s 只有669.21k。
還有一個是接收了6550.00,發送是12690.54,如果是tcp的話,那么應該是收發個數差不多,因為tcp的確認機制。
然后可以說,接收的都是小包。
然后就可以通過tcpdump 來確定是什么問題,可以抓取到很多s包,確定是syn flood 攻擊。
結
下一節快速定位問題的手段