rtla-timerlat-hist¶
作業系統定時器延遲的直方圖¶
- 手冊章節:
1
SYNOPSIS¶
rtla timerlat hist [選項] ...
描述¶
rtla timerlat 工具是 timerlat 跟蹤器的介面。timerlat 跟蹤器為每個 CPU 分配一個核心執行緒。這些執行緒設定一個週期性定時器以喚醒它們自己並返回休眠。喚醒後,它們收集並生成有用的資訊,用於除錯作業系統定時器延遲。
timerlat 跟蹤器以兩種方式輸出資訊。它定期在定時器 IRQ 處理程式和 Thread 處理程式中列印定時器延遲。它還透過 osnoise: 跟蹤點啟用最相關資訊的跟蹤。
rtla timerlat 工具設定 timerlat 跟蹤器的選項,並收集和顯示結果摘要。預設情況下,集合是在核心空間中使用附加到 timerlat 跟蹤器的專用 BPF 程式同步完成的。如果 BPF 或它附加到的 osnoise:timerlat_sample 跟蹤點不可用,則 rtla timerlat 工具將回退到使用 tracefs 在使用者空間中非同步處理資料。
rtla timerlat hist 顯示每個跟蹤器事件發生的直方圖。此工具使用週期性資訊,並且在使用 -T 選項時啟用 osnoise: 跟蹤點。
選項¶
-a, --auto us
設定自動跟蹤模式。此模式在除錯系統時設定一些常用選項。它等效於使用 -T us -s us -t。預設情況下,timerlat 跟蹤器對 timerlat 執行緒使用 FIFO:95,因此等效於 -P f:95。
-p, --period us
以微秒為單位設定 timerlat 跟蹤器週期。
-i, --irq us
如果 IRQ 延遲高於以 us 為單位的引數,則停止跟蹤。
-T, --thread us
如果 Thread 延遲高於以 us 為單位的引數,則停止跟蹤。
-s, --stack us
如果 Thread 延遲高於以 us 為單位的引數,則在 IRQ 處儲存堆疊跟蹤。
-t, --trace [檔案]
將停止的跟蹤儲存到 [檔案|timerlat_trace.txt]。
- --dma-latency us
將 /dev/cpu_dma_latency 設定為 us,旨在限制從空閒狀態退出的延遲。cyclictest 預設將此值設定為 0,使用 --dma-latency 0 以獲得類似的結果。
- --deepest-idle-state n
停用高於 n 的空閒狀態,以減少執行 timerlat 執行緒的 CPU 從空閒狀態退出的延遲。如果 n 為 -1,則停用所有空閒狀態。從 timerlat 退出時,空閒狀態設定將恢復到執行 timerlat 之前的原始狀態。
需要使用 libcpupower 構建 rtla。
-k, --kernel-threads
使用 timerlat 核心空間執行緒,與 -u 相對。
-u, --user-threads
設定 timerlat 在沒有工作負載的情況下執行,然後分派使用者空間工作負載以等待 timerlat_fd。一旦工作負載被喚醒,它將再次進入睡眠狀態,從而將核心到使用者和使用者到核心的測量新增到跟蹤器輸出中。除非使用者指定 -k,否則將使用 --user-threads。
-U, --user-load
設定 timerlat 在沒有工作負載的情況下執行,等待使用者分派每個 CPU 的任務,該任務等待 tracing/osnoise/per_cpu/cpu$ID/timerlat_fd 上的新週期。有關使用者載入程式碼的示例,請參見 linux/tools/rtla/sample/timerlat_load.py。
-b, --bucket-size N
設定直方圖桶大小(預設值 1)。
-E, --entries N
設定直方圖的條目數(預設值 256)。
--no-header
不列印標題。
--no-summary
不列印摘要。
--no-index
不列印索引。
--with-zeros
僅列印零條目。
-c, --cpus cpu-list
設定 osnoise 跟蹤器以在 cpu-list 中執行示例執行緒。
-H, --house-keeping cpu-list
僅在給定的 cpu-list 上執行 rtla 控制執行緒。
-d, --duration time[s|m|h|d]
設定會話的持續時間。
-D, --debug
列印除錯資訊。
-e, --event sys:event
在跟蹤 (-t) 會話中啟用事件。引數可以是特定事件,例如 -e sched:sched_switch,或系統組的所有事件,例如 -e sched。允許多個 -e。它僅在設定 -t 或 -a 時有效。
--filter <filter>
使用 <filter> 過濾之前的 -e sys:event 事件。有關事件過濾的更多資訊,請參見 https://kernel.linux.club.tw/doc/html/latest/trace/events.html#event-filtering。
- --trigger <trigger>
為之前的 -e sys:event 啟用跟蹤事件觸發器。如果激活了 hist: 觸發器,則輸出直方圖將自動儲存到名為 system_event_hist.txt 的檔案中。例如,命令
rtla <命令> <模式> -t -e osnoise:irq_noise --trigger=”hist:key=desc,duration/1000:sort=desc,duration/1000:vals=hitcount”
將自動將與 osnoise:irq_noise 事件關聯的直方圖的內容儲存在 osnoise_irq_noise_hist.txt 中。
有關事件觸發器的更多資訊,請參見 https://kernel.linux.club.tw/doc/html/latest/trace/events.html#event-triggers。
-P, --priority o:prio|r:prio|f:prio|d:runtime:period
為 osnoise 跟蹤器執行緒設定排程引數,設定優先順序的格式為
o:prio - 使用 SCHED_OTHER 和 prio;
r:prio - 使用 SCHED_RR 和 prio;
f:prio - 使用 SCHED_FIFO 和 prio;
d:runtime[us|ms|s]:period[us|ms|s] - 使用 SCHED_DEADLINE,以納秒為單位的 runtime 和 period。
-C, --cgroup[=cgroup]
為跟蹤器的執行緒設定一個 cgroup。如果傳遞了不帶引數的 -C 選項,則跟蹤器的執行緒將繼承 rtla 的 cgroup。否則,執行緒將放置在傳遞給選項的 cgroup 上。
--warm-up s
啟動工作負載後,讓它執行 s 秒,然後再開始收集資料,從而使系統預熱。在預熱期間生成的統計資料將被丟棄。
- --trace-buffer-size kB
以 kB 為單位設定跟蹤輸出的每個 CPU 跟蹤緩衝區大小。
-h, --help
列印幫助選單。
--dump-tasks
如果滿足停止條件,則列印在所有 CPU 上執行的任務(取決於 !--no-aa)
--no-aa
停用自動分析,從而減少 rtla timerlat cpu 使用率
示例¶
在下面的示例中,rtla timerlat hist 設定為在 cpus 0-4 中執行 10 分鐘,跳過僅零 行。此外,rtla timerlat hist 將更改 timerlat 執行緒的優先順序,以在 SCHED_DEADLINE 優先順序下執行,每 1ms 週期具有 100us 的執行時。1ms 週期也傳遞給 timerlat 跟蹤器。停用自動分析以減少開銷
[root@alien ~]# timerlat hist -d 10m -c 0-4 -P d:100us:1ms -p 1000 --no-aa
# RTLA timerlat histogram
# Time unit is microseconds (us)
# Duration: 0 00:10:00
Index IRQ-000 Thr-000 IRQ-001 Thr-001 IRQ-002 Thr-002 IRQ-003 Thr-003 IRQ-004 Thr-004
0 276489 0 206089 0 466018 0 481102 0 205546 0
1 318327 35487 388149 30024 94531 48382 83082 71078 388026 55730
2 3282 122584 4019 126527 28231 109012 23311 89309 4568 98739
3 940 11815 837 9863 6209 16227 6895 17196 910 9780
4 444 17287 424 11574 2097 38443 2169 36736 462 13476
5 206 43291 255 25581 1223 101908 1304 101137 236 28913
6 132 101501 96 64584 635 213774 757 215471 99 73453
7 74 169347 65 124758 350 57466 441 53639 69 148573
8 53 85183 31 156751 229 9052 306 9026 39 139907
9 22 10387 12 42762 161 2554 225 2689 19 26192
10 13 1898 8 5770 114 1247 128 1405 13 3772
11 9 560 9 924 71 686 76 765 8 713
12 4 256 2 360 50 411 64 474 3 278
13 2 167 2 172 43 256 53 350 4 180
14 1 88 1 116 15 198 42 223 0 115
15 2 63 3 94 11 139 20 150 0 58
16 2 37 0 56 5 78 10 102 0 39
17 0 18 0 28 4 57 8 80 0 15
18 0 8 0 17 2 50 6 56 0 12
19 0 9 0 5 0 19 0 48 0 18
20 0 4 0 8 0 11 2 27 0 4
21 0 2 0 3 1 9 1 18 0 6
22 0 1 0 3 1 7 0 3 0 5
23 0 2 0 4 0 2 0 7 0 2
24 0 2 0 2 1 3 0 3 0 5
25 0 0 0 1 0 1 0 1 0 3
26 0 1 0 0 0 2 0 2 0 0
27 0 0 0 3 0 1 0 0 0 1
28 0 0 0 3 0 0 0 1 0 0
29 0 0 0 2 0 2 0 1 0 3
30 0 1 0 0 0 0 0 0 0 0
31 0 1 0 0 0 0 0 2 0 2
32 0 0 0 1 0 2 0 0 0 0
33 0 0 0 2 0 0 0 0 0 1
34 0 0 0 0 0 0 0 0 0 2
35 0 1 0 1 0 0 0 0 0 1
36 0 1 0 0 0 1 0 1 0 0
37 0 0 0 1 0 0 0 0 0 0
40 0 0 0 0 0 1 0 1 0 0
41 0 0 0 0 0 0 0 0 0 1
42 0 0 0 0 0 0 0 0 0 1
44 0 0 0 0 0 1 0 0 0 0
46 0 0 0 0 0 0 0 1 0 0
47 0 0 0 0 0 0 0 0 0 1
50 0 0 0 0 0 0 0 0 0 1
54 0 0 0 1 0 0 0 0 0 0
58 0 0 0 1 0 0 0 0 0 0
over: 0 0 0 0 0 0 0 0 0 0
count: 600002 600002 600002 600002 600002 600002 600002 600002 600002 600002
min: 0 1 0 1 0 1 0 1 0 1
avg: 0 5 0 5 0 4 0 4 0 5
max: 16 36 15 58 24 44 21 46 13 50
參見¶
rtla-timerlat(1), rtla-timerlat-top(1)
timerlat 跟蹤器文件:<https://kernel.linux.club.tw/doc/html/latest/trace/timerlat-tracer.html>