做效能測試的必備知識系列,可以看下面連結的文章哦
https://www.cnblogs.com/poloyy/category/1806772.html
回顧
CPU 使用率是單位時間內 CPU 使用情況的統計,以百分比的方式展示
靈魂拷問
最常用什麼指標來描述系統的 CPU 效能?
回答
CPU 使用率,而不是平均負載,CPU 上下文切換
CPU 使用率
前言
前面說過,Linux 作為一個多工作業系統,將每個 CPU 的時間劃分為很短的時間片,在通過排程器輪流分配給各個任務使用,因此造成多工同時執行的錯覺
瞭解節拍率
- 為了維護 CPU 時間,Linux 通過事先定義的節拍率(核心中表示為 HZ),觸發時間中斷,並使用全域性變數 Jiffies 記錄了開機以來的節拍數
- 每發生一次時間中斷,Jiffies 的值 就加 1。
- 節拍率 HZ 是核心的可配選項,可以設定為 100、250、1000 等
- 不同的系統可能設定不同數值,你可以通過查詢 /boot/config 核心選項來檢視它的配置值
- 比如在我的系統中, 節拍率設定成了 1000,也就是每秒鐘觸發 1000 次時間中斷。
grep 'CONFIG_HZ=' /boot/config-$(uname -r)
瞭解使用者空間節拍率
- 因為節拍率 HZ 是核心選項,所以使用者空間程式並不能直接訪問
- 為了方便使用者空間程式,核心還提供了一個使用者空間節拍率 USER_HZ
- 它總是固定為 100,也就是 1/100 秒
- 這樣,使用者空間程式並不需要關心核心中 HZ 被設定成了多少,因為它看到的總是固定值 USER_HZ
系統 CPU 資料來源(瞭解)
- Linux 通過 /proc 虛擬檔案系統,向使用者空間提供了系統內部狀態的資訊
- 而 /proc/stat 提供的就是系統的 CPU 和任務統計資訊
只檢視 CPU 的資料
cat /proc/stat | grep ^cpu
結果分析
從左往右一共 11 列哦
- CPU 編號:第一行是 CPU 的累加
- user(us):使用者態 CPU 的時間,不包括下面的 nice 時間,但包括了 guest 時間
- nice(ni):低優先順序使用者態 CPU 的時間,就是程式的 nice 值被調整為 1-19 之間時的 CPU 時間;注意 nice 可取值範圍是 -20 到 19,數值越大,優先順序反而越低
- system(sys):核心態 CPU 的時間
- idle(id):空閒時間,它不包括等待 I/O 的時間(iowait)
- iowait(wa):等待 I/O 的 CPU 時間
- irq(hi):處理硬中斷的 CPU 時間
- softirq(si):處理軟中斷的 CPU 時間
- steal(st):當系統執行在虛擬機器中的時間,被其他虛擬機器佔用的 CPU 時間
- guest:通過虛擬化執行其他作業系統的時間,就是執行虛擬機器的 CPU 時間
- guest_nice(gnice):以低優先順序執行虛擬機器的時間
CPU 使用率計算公式(瞭解)
除了空閒時間外的其他時間佔總 CPU 時間的百分比
靈魂拷問
/proc/stat 的資料,算的是什麼時間段的 CPU 使用率?
回答
這是開機以來的節拍數累加值,所以直接算出來的,是開機以來的平均 CPU 使用率,一般沒啥參考價值
效能工具所看到的 CPU 使用率的實際計算方法
為了計算 CPU 使用率,效能工具一般都會取間隔一段時間(比如 3 秒)的兩次值,作差後,再計算出這段時間內的平均 CPU 使用率
總結下
- 各種各樣的效能分析工具已經幫我們計算好了 CPU 平均使用率,不需要自己單獨計算
- 不過要注意的是,效能分析工具給出的都是間隔一段時間的平均 CPU 使用率,所以要注意間隔時間的設定,