做性能測試的必備知識系列,可以看下面鏈接的文章哦
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 使用率,所以要注意間隔時間的設置,