我目前正在尝试监控系统的一些硬件事件(6个硬件计数器和24个CPU)以及它的cgroup。我在这里以LLC load和cpu-cycles事件为例。
为此,我使用perf
命令。
但是,当考虑空闲cgroup(实际上对应于仅运行bash的docker容器)并为cgroups或系统范围监视运行perf
时,我似乎得到了大约相同数量的cpu-cycles在这两种情况下:
$ sudo perf stat -e LLC-loads,cpu-cycles -a sleep 60
$ sudo perf stat -e instructions,cpu-cycles --cgroup=docker/b1cd988201789e55128393cff5ffbf37b0d6efec0fc70e1b716163b4b1f91f1f -a sleep 60
我期待cgroup的cpu周期数量减少。 (提供--cpu=0-23
或-a
选项时会得到相同的结果。)
我在这里错过了什么吗?
我想知道--cgroup
选项是如何工作的。最后,它是否仅针对某些事件进行了配置?
提前感谢您的时间!
答案 0 :(得分:3)
好的,我在文档中找到了答案,但不清楚:
-G name, - cgroup name monitor仅在名为“name”的容器(cgroup)中。此选项仅在per-cpu模式下可用。 cgroup 必须安装filesystem。属于容器“名称”的所有线程 在受监控的CPU上运行时会受到监控。多个cgroup 可以提供。每个cgroup都应用于相应的事件, 即,第一个cgroup到第一个事件,第二个cgroup到第二个事件和 等等。可以提供一个空的cgroup(监视所有的 时间)使用例如-G foo ,, bar。 Cgroup必须有相应的 事件,即它们总是指前面定义的事件 命令行。
实际上,这意味着为了从同一个perf命令中的1个cgroup中获取多个事件,我应该将该cgroup的名称列为事件数量的多次。
EDIT示例(必须使用长容器ID,但为了清楚起见,我在这里使用短ID):
sudo perf stat -e instructions,cpu-cycles,LLC-loads --cgroup=docker/b1cd,docker/b1cd,docker/b1cd -a sleep 60