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


做性能測試的必備知識系列,可以看下面鏈接的文章哦

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 使用率,所以要注意間隔時間的設置,

 

 


免責聲明!

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



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