效能測試必備知識(7)- 深入理解“CPU 使用率”

小菠蘿測試筆記發表於2020-07-29

做效能測試的必備知識系列,可以看下面連結的文章哦

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 列哦

  1. CPU 編號:第一行是 CPU 的累加
  2. user(us):使用者態 CPU 的時間,不包括下面的 nice 時間,但包括了 guest 時間
  3. nice(ni):低優先順序使用者態 CPU 的時間,就是程式的 nice 值被調整為 1-19 之間時的 CPU 時間;注意 nice 可取值範圍是 -20 到 19,數值越大,優先順序反而越低
  4. system(sys):核心態 CPU 的時間
  5. idle(id):空閒時間,它不包括等待 I/O 的時間(iowait)
  6. iowait(wa):等待 I/O 的 CPU 時間
  7. irq(hi):處理硬中斷的 CPU 時間
  8. softirq(si):處理軟中斷的 CPU 時間
  9. steal(st):當系統執行在虛擬機器中的時間,被其他虛擬機器佔用的 CPU 時間
  10. guest:通過虛擬化執行其他作業系統的時間,就是執行虛擬機器的 CPU 時間
  11. guest_nice(gnice):以低優先順序執行虛擬機器的時間

 

CPU 使用率計算公式(瞭解)

除了空閒時間外的其他時間佔總 CPU 時間的百分比

 

靈魂拷問

 /proc/stat 的資料,算的是什麼時間段的 CPU 使用率?

 

回答

這是開機以來的節拍數累加值,所以直接算出來的,是開機以來的平均 CPU 使用率,一般沒啥參考價值

 

效能工具所看到的 CPU 使用率的實際計算方法

為了計算 CPU 使用率,效能工具一般都會取間隔一段時間(比如 3 秒)的兩次值,作差後,再計算出這段時間內的平均 CPU 使用率

 

總結下

  • 各種各樣的效能分析工具已經幫我們計算好了 CPU 平均使用率,不需要自己單獨計算
  • 不過要注意的是,效能分析工具給出的都是間隔一段時間的平均 CPU 使用率,所以要注意間隔時間的設定,

 

 

相關文章