Try   HackMD

jitterdebugger 介紹

本工具用途為量化 scheduling latency / OS jitter

量化方法

在各個處理器核上綁定 (pin) 一個執行緒,並以 clock_nanosleep() 進行 1 us 的 sleep。

在 sleep 結束後,呼叫 clock_gettime() 獲取當下 timestamp,並將其與原先指定的 wakeup 時間相減,所得的差即為 scheduling latency / OS jitter

從上述介紹,我們可推斷 jitterdebugger 生成的 task 為 interactive task,因為其相關 task 大部分時候在 sleep。

使用方式

取得原始程式碼:

$ git clone https://github.com/igaw/jitterdebugger

執行 make 命令編譯專案。

預期可以在專案目錄下看到 jitterdebugger 執行檔。

使用以下命令執行可動態觀察輸出,倘若不使用參數 -v 則會在結束 (Ctrl + C) 時印出相關統計:

$ sudo ./jitterdebugger -v

(會需要 sudo 的原因是 jitterdebugger 在測量期間會關閉處理器的 C-state,避免處理器進入省電模式進而增加 jitter 的可能性,而只有 root 才有權限操作相關檔案)

預期可以看到類似以下輸出:

affinity: 0-15 = 16 [0xFFFF]
T: 0 (313591) A: 0 C:      3222 Min:         1 Avg:    1.03 Max:         9 
T: 1 (313593) A: 1 C:      3221 Min:         1 Avg:    1.04 Max:         4 
T: 2 (313594) A: 2 C:      3219 Min:         1 Avg:    1.04 Max:         3 
T: 3 (313595) A: 3 C:      3218 Min:         1 Avg:    1.03 Max:         4 
T: 4 (313596) A: 4 C:      3217 Min:         1 Avg:    1.25 Max:        11 
T: 5 (313597) A: 5 C:      3216 Min:         1 Avg:    1.02 Max:         4 
T: 6 (313598) A: 6 C:      3214 Min:         1 Avg:    1.04 Max:         4 
T: 7 (313599) A: 7 C:      3213 Min:         1 Avg:    1.05 Max:        24 
T: 8 (313600) A: 8 C:      3212 Min:         1 Avg:    1.05 Max:         4 
T: 9 (313601) A: 9 C:      3211 Min:         1 Avg:    1.01 Max:         3 
T:10 (313602) A:10 C:      3210 Min:         1 Avg:    1.05 Max:         3 
T:11 (313603) A:11 C:      3208 Min:         1 Avg:    1.05 Max:         4 
T:12 (313604) A:12 C:      3207 Min:         1 Avg:    1.01 Max:         3 
T:13 (313605) A:13 C:      3206 Min:         1 Avg:    1.03 Max:         4 
T:14 (313606) A:14 C:      3205 Min:         1 Avg:    1.05 Max:         4 
T:15 (313607) A:15 C:      3203 Min:         1 Avg:    1.07 Max:         4

C 表示執行次數
T 表示 pin 到 percpu 執行的 thread 的 id
輸出結果的時間單位為

μs (可指定參數 -N 將單位更改為 nanosecond)

值得注意的是,-c 這個參數可讓我們在背景執行自訂的工作負載,例如若想在背景執行 stress,可透過以下命令:

$ sudo ./jitterdebugger -v -c 'stress -c 20'

此外,本工具還支援以圖片方式輸出量測結果,不過首先需要安裝以下 Python 套件:

  • Matlibplot
  • Pandas

PIP 套件管理工具安裝相關套件的話可使用以下命令:

$ pip install pandas matplotlib

首先我們需將 jitterdebugger 的輸出導向至一目錄,例如:

$ sudo ./jitterdebugger -o result

接著執行 jitterplot 將數據輸出為 JPG 格式:

$ ./jitterplot  --output out.jpg hist result

預期可得到類似以下圖片:

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →