如何对短命命令进行基准测试(跟踪 CPU 使用情况)?
How to benchmark (track CPU usage of) a short-lived command?
虽然我知道 top
等命令(列出了一些等价物 here),但我不清楚如何捕获 CPU 的用法一个 "short-lived" 过程。例如,如果我想查看 ls
命令的性能,我该怎么做才能足够频繁和足够快地对负载测量进行采样以供使用?
我在这个主题上看到的大多数现有答案都使用一个循环,该循环每 n 秒重复一次类似 top
的内容,这不适用于快速/简短- 实时命令,特别是考虑到我没有时间及时查看 PID 以将其提供给所述技术。我也许可以使用 this answer 中的一些东西,因为它似乎是在很短的时间尺度上进行采样,但我怀疑有一种更直接/强度更低的方法。
如果您可以检测每个 运行 的短命命令,则可以使用 [=10] 测量挂钟、用户 CPU 和系统 CPU 时间=].
要了解更多详情,请查看 perf stat ls
。根据您的 sysctl kernel.perf_event_paranoid = 0
设置,您可以使用 HW 性能计数器来测量内核代码以及用户 space 中的 CPU 周期/缓存未命中等。它还处理页面错误等软件事件。但是对于 非常 的短暂命令,如 ls
,perf
将有显着的启动开销。在 Intel CPUs 上,ocperf.py
是 perf
的包装器,具有更多事件。有关使用 ocperf.py
作为 asm 微基准测试的示例,请参阅 。
strace -c ls
将计算系统调用所花费的时间。
如果您不能 运行 测量包装器下的每个短命令,系统范围的 perf record -a
可能会起作用。
虽然我知道 top
等命令(列出了一些等价物 here),但我不清楚如何捕获 CPU 的用法一个 "short-lived" 过程。例如,如果我想查看 ls
命令的性能,我该怎么做才能足够频繁和足够快地对负载测量进行采样以供使用?
我在这个主题上看到的大多数现有答案都使用一个循环,该循环每 n 秒重复一次类似 top
的内容,这不适用于快速/简短- 实时命令,特别是考虑到我没有时间及时查看 PID 以将其提供给所述技术。我也许可以使用 this answer 中的一些东西,因为它似乎是在很短的时间尺度上进行采样,但我怀疑有一种更直接/强度更低的方法。
如果您可以检测每个 运行 的短命命令,则可以使用 [=10] 测量挂钟、用户 CPU 和系统 CPU 时间=].
要了解更多详情,请查看 perf stat ls
。根据您的 sysctl kernel.perf_event_paranoid = 0
设置,您可以使用 HW 性能计数器来测量内核代码以及用户 space 中的 CPU 周期/缓存未命中等。它还处理页面错误等软件事件。但是对于 非常 的短暂命令,如 ls
,perf
将有显着的启动开销。在 Intel CPUs 上,ocperf.py
是 perf
的包装器,具有更多事件。有关使用 ocperf.py
作为 asm 微基准测试的示例,请参阅
strace -c ls
将计算系统调用所花费的时间。
如果您不能 运行 测量包装器下的每个短命令,系统范围的 perf record -a
可能会起作用。