rtla-hwnoise¶
检测和量化硬件相关噪声¶
- 手册部分:
1
概要¶
rtla hwnoise [OPTIONS]
描述¶
rtla hwnoise 收集在中断禁用状态下运行的 osnoise 跟踪器的周期性摘要。通过禁用中断以及随之而来的线程调度,只允许不可屏蔽中断和硬件相关噪声。
该工具还允许配置 osnoise 跟踪器并收集跟踪器输出。
选项¶
-a, --auto us
设置自动跟踪模式。此模式在调试系统时设置一些常用选项。它等同于使用 -s us -T 1 -t。
-p, --period us
设置 osnoise 跟踪器周期,单位为微秒。
-r, --runtime us
设置 osnoise 跟踪器运行时长,单位为微秒。
-s, --stop us
如果单个样本高于参数值(单位微秒),则停止跟踪。如果设置了 -T,它还会将跟踪保存到输出。
-S, --stop-total us
如果总样本高于参数值(单位微秒),则停止跟踪。如果设置了 -T,它还会将跟踪保存到输出。
-T, --threshold us
指定两次时间读取之间的最小增量,以便将其视为噪声。默认阈值为 5 us。
-t, --trace [file]
将停止的跟踪保存到 [file|osnoise_trace.txt]。
-q, --quiet
只在会话结束时打印摘要。
-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 - 使用 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
为跟踪输出设置每个 CPU 的跟踪缓冲区大小,单位为 kB。
-h, --help
打印帮助菜单。
示例¶
在下面的示例中,rtla hwnoise 工具被设置为在具有 8 核/16 线程且启用了超线程的系统上,在 CPU 1-7 上运行。
该工具被设置为检测任何高于一微秒的噪声,运行十分钟,并在会话结束时显示报告摘要
# rtla hwnoise -c 1-7 -T 1 -d 10m -q
Hardware-related Noise
duration: 0 00:10:00 | time is in us
CPU Period Runtime Noise % CPU Aval Max Noise Max Single HW NMI
1 #599 599000000 138 99.99997 3 3 4 74
2 #599 599000000 85 99.99998 3 3 4 75
3 #599 599000000 86 99.99998 4 3 6 75
4 #599 599000000 81 99.99998 4 4 2 75
5 #599 599000000 85 99.99998 2 2 2 75
6 #599 599000000 76 99.99998 2 2 0 75
7 #599 599000000 77 99.99998 3 3 0 75
第一列显示 CPU,第二列显示该工具在会话期间运行了多少个周期 (Periods)。运行时长 (Runtime) 是该工具在 CPU 上有效运行的时间。噪声 (Noise) 列是该工具观察到的所有噪声的总和,% CPU 可用 (CPU Aval) 是 运行时长 (Runtime) 和 噪声 (Noise) 之间的关系。
最大噪声 (Max Noise) 列是该工具在一个周期中检测到的最大硬件噪声,而 最大单次 (Max Single) 是观察到的最大单次噪声。
HW 和 NMI 列显示该工具观察到的硬件和 NMI 噪声的总发生次数。
例如,CPU 3 运行了 599 个1秒运行时长的周期。在整个执行过程中,该 CPU 产生了 86 us 的噪声,为应用程序留下了 99.99997 % 的 CPU 时间。在最差的单个周期中,该 CPU 给应用程序带来了 4 us 的噪声,但这肯定是由不止一个单个噪声引起的,因为 最大单次 (Max Single) 噪声为 3 us。该 CPU 存在 硬件噪声 (HW noise),发生率为 每十分钟六次。该 CPU 也存在 NMI,频率更高:大约 每秒七次。
在理想情况下,该工具应该报告 0 个硬件相关噪声。例如,通过禁用超线程以消除硬件噪声,并禁用 TSC 看门狗以消除 NMI(可以使用 rtla hwnoise 的跟踪选项来识别这一点),在相同的硬件上可以达到理想情况
# rtla hwnoise -c 1-7 -T 1 -d 10m -q
Hardware-related Noise
duration: 0 00:10:00 | time is in us
CPU Period Runtime Noise % CPU Aval Max Noise Max Single HW NMI
1 #599 599000000 0 100.00000 0 0 0 0
2 #599 599000000 0 100.00000 0 0 0 0
3 #599 599000000 0 100.00000 0 0 0 0
4 #599 599000000 0 100.00000 0 0 0 0
5 #599 599000000 0 100.00000 0 0 0 0
6 #599 599000000 0 100.00000 0 0 0 0
7 #599 599000000 0 100.00000 0 0 0 0
参见¶
rtla-osnoise(1)
Osnoise 跟踪器文档:<https://linuxkernel.org.cn/doc/html/latest/trace/osnoise-tracer.html>
作者¶
由 Daniel Bristot de Oliveira <bristot@kernel.org> 撰写
报告错误¶
请向 <linux-kernel@vger.kernel.org> 和 <linux-trace-devel@vger.kernel.org> 报告错误
许可¶
rtla 是根据 GNU GPLv2 许可的自由软件
版权¶
版权所有 (C) 2021 Red Hat, Inc. 依据 GNU 通用公共许可证 (GPL) 的条款,授予本软件的自由使用权。