rtla-timerlat-hist¶
操作系统定时器延迟的直方图¶
- 手册章节:
1
概要¶
rtla timerlat hist [选项] ...
描述¶
rtla timerlat 工具是 timerlat 跟踪器的接口。timerlat 跟踪器为每个 CPU 调度一个内核线程。这些线程设置一个定期定时器来唤醒自身,然后返回睡眠状态。唤醒后,它们收集并生成有用的信息,用于调试操作系统定时器延迟。
timerlat 跟踪器以两种方式输出信息。它定期在定时器 IRQ 处理程序和 Thread 处理程序中打印定时器延迟。它还通过 osnoise: 跟踪点启用最相关信息的跟踪。
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 延迟高于参数(以微秒为单位),则停止跟踪。
-T, --thread us
如果 Thread 延迟高于参数(以微秒为单位),则停止跟踪。
-s, --stack us
如果 Thread 延迟高于参数(以微秒为单位),则在 IRQ 处保存堆栈跟踪。
-t, --trace [file]
将停止的跟踪保存到 [file|timerlat_trace.txt]。
- --dma-latency us
将 /dev/cpu_dma_latency 设置为 us,旨在限制从空闲状态退出的延迟。cyclictest 默认将此值设置为 0,使用 --dma-latency 0 可以获得类似的结果。
- --deepest-idle-state n
禁用运行 timerlat 线程的 CPU 的高于 n 的空闲状态,以减少从空闲状态退出的延迟。如果 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://linuxkernel.org.cn/doc/html/latest/trace/events.html#event-filtering。
- --trigger <trigger>
为之前的 -e sys:event 启用跟踪事件触发器。如果激活了 hist: 触发器,则输出直方图将自动保存到名为 system_event_hist.txt 的文件中。例如,命令
rtla <command> <mode> -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://linuxkernel.org.cn/doc/html/latest/trace/events.html#event-triggers。
-P, --priority o:prio|r:prio|f:prio|d:runtime:period
设置 osnoise 跟踪器线程的调度参数,设置优先级的格式为
o:prio - 使用 prio 的 SCHED_OTHER;
r:prio - 使用 prio 的 SCHED_RR;
f:prio - 使用 prio 的 SCHED_FIFO;
d:runtime[us|ms|s]:period[us|ms|s] - 使用以纳秒为单位的 runtime 和 period 的 SCHED_DEADLINE。
-C, --cgroup[=cgroup]
为跟踪器的线程设置 cgroup。如果传递不带参数的 -C 选项,则跟踪器的线程将继承 rtla 的 cgroup。否则,线程将放置在传递给该选项的 cgroup 上。
--warm-up s
在启动工作负载后,让它运行 s 秒,然后再开始收集数据,从而使系统预热。丢弃预热期间生成的统计数据。
- --trace-buffer-size kB
以 kB 为单位设置每个 CPU 的跟踪缓冲区大小,用于跟踪输出。
-h, --help
打印帮助菜单。
--dump-tasks
如果满足停止条件(取决于 !--no-aa),则打印所有 CPU 上运行的任务
--no-aa
禁用自动分析,减少 rtla timerlat 的 CPU 使用率
示例¶
在下面的示例中,rtla timerlat hist 设置为在 CPU 0-4 中运行 10 分钟,跳过仅零 行。此外,rtla timerlat hist 将更改 timerlat 线程的优先级,以在 SCHED_DEADLINE 优先级下运行,每 1 毫秒周期运行 100 微秒的运行时。1 毫秒的周期也传递给 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://linuxkernel.org.cn/doc/html/latest/trace/timerlat-tracer.html>