gpt4 book ai didi

linux - 如何在运行压力 ng 的 docker 中使用 perf 工具?

转载 作者:行者123 更新时间:2023-12-02 18:59:59 27 4
gpt4 key购买 nike

我正在使用来自 https://hub.docker.com/r/polinux/stress-ng/dockerfile 的压力 docker 图像强调我的系统。我想使用 perf 工具来监控指标。
perf stat -- stress-ng --cpu 2 --timeout 10运行压力 ng 10 秒并返回性能指标。我尝试使用 perf stat -- docker run -ti --rm polinux/stress-ng --cpu 2 --timeout 10 对 docker 图像执行相同操作.这将返回指标,但不返回压力 ng 的指标。

在stress-ng上使用'perf stat'时得到的输出:

Performance counter stats for 'stress-ng --cpu 2 --timeout 10':

19975.863889 task-clock (msec) # 1.992 CPUs utilized
2,057 context-switches # 0.103 K/sec
7 cpu-migrations # 0.000 K/sec
8,783 page-faults # 0.440 K/sec
52,568,560,651 cycles # 2.632 GHz
89,424,109,426 instructions # 1.70 insn per cycle
17,496,929,762 branches # 875.904 M/sec
97,910,697 branch-misses # 0.56% of all branches

10.025825765 seconds time elapsed

在 docker 镜像上使用 perf 工具时得到的输出:
Performance counter stats for 'docker run -ti --rm polinux/stress-ng --cpu 2 --timeout 10':

154.613610 task-clock (msec) # 0.014 CPUs utilized
858 context-switches # 0.006 M/sec
113 cpu-migrations # 0.731 K/sec
4,989 page-faults # 0.032 M/sec
252,242,504 cycles # 1.631 GHz
375,927,959 instructions # 1.49 insn per cycle
84,847,109 branches # 548.769 M/sec
1,127,634 branch-misses # 1.33% of all branches

10.704752134 seconds time elapsed

有人可以帮助我了解如何在使用 docker 运行时获取压力指标吗?

最佳答案

从@osgx 的评论继续,

如前所述 here ,默认情况下,perf stat command 不仅会监视被监视进程的所有线程,还会监视其子进程和线程。

这种情况下的问题是通过运行 perf stat并监控 docker run stress-ng命令,您没有监控实际 stress-ng过程。需要注意的是,作为容器一部分运行的进程实际上不会由 docker 启动。客户端,而是由 docker-containerd-shim进程(它是 dockerd 进程的孙进程)。

如果运行 docker 命令运行 stress-ng在容器内部并观察进程树,它变得很明显。

docker run -ti --name=stress-ng --rm polinux/stress-ng --cpu 2 --timeout 100

ps -elf | grep docker

0 S ubuntu 26379 114001 0 80 0 - 119787 futex_ 12:33 pts/3 00:00:00 docker run -ti --name=stress-ng --rm polinux/stress-ng --cpu 2 --timeout 10000
4 S root 26431 118477 0 80 0 - 2227 - 12:33 ? 00:00:00 docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/72a8c2787390669ff4eeae6f343ab4f9f60434f39aae66b1a778e78b7e5e45d8 -address /var/run/docker/containerd/docker-containerd.sock -containerd-binary /usr/bin/docker-containerd -runtime-root /var/run/docker/runtime-runc
0 S ubuntu 26610 26592 0 80 0 - 3236 pipe_w 12:34 pts/6 00:00:00 grep --color=auto docker
4 S root 118453 1 3 80 0 - 283916 - May02 ? 01:01:57 /usr/bin/dockerd -H fd://
4 S root 118477 118453 4 80 0 - 457853 - May02 ? 01:14:36 docker-containerd --config /var/run/docker/containerd/containerd.toml

----------------------------------------------------------------------

ps -elf | grep stress-ng

0 S ubuntu 26379 114001 0 80 0 - 119787 futex_ 12:33 pts/3 00:00:00 docker run -ti --name=stress-ng --rm polinux/stress-ng --cpu 2 --timeout 10000
4 S root 26455 26431 0 80 0 - 16621 - 12:33 pts/0 00:00:00 /usr/bin/stress-ng --cpu 2 --timeout 10000
1 R root 26517 26455 99 80 0 - 16781 - 12:33 pts/0 00:01:08 /usr/bin/stress-ng --cpu 2 --timeout 10000
1 R root 26518 26455 99 80 0 - 16781 - 12:33 pts/0 00:01:08 /usr/bin/stress-ng --cpu 2 --timeout 10000
0 S ubuntu 26645 26592 0 80 0 - 3236 pipe_w 12:35 pts/6 00:00:00 grep --color=auto stress-ng

第一个的 PPID stress-ng进程是 26431,这不是 docker run命令,但实际上是 docker-containerd-shim过程。监控 docker run命令永远不会反射(reflect)正确的值,因为 docker客户端完全脱离启动 stress-ng的过程命令。
  • 解决此问题的一种方法是附加 perf stat命令到由 docker 运行时启动的压力 ng 进程的 PID。

  • 例如,在上述情况下,一旦 docker run命令已启动,您可以立即开始执行此操作 -
    perf stat -p 26455,26517,26518

    Performance counter stats for process id '26455,26517,26518':

    148171.516145 task-clock (msec) # 1.939 CPUs utilized
    49 context-switches # 0.000 K/sec
    0 cpu-migrations # 0.000 K/sec
    67 page-faults # 0.000 K/sec

    您可以增加 --timeout一点点,以便命令运行更长时间,因为您现在正在启动 perf stat发帖开始 stress-ng .此外,您还必须考虑损失的初始测量时间的一小部分。
  • 另一种方法是运行 perf stat在 docker 容器内,类似于 docker run perf stat ... ,但为此您必须开始提供 privileges到您的容器,因为默认情况下,perf_event_open系统调用在 docker 中被列入黑名单.您可以阅读此答案 here .
  • 关于linux - 如何在运行压力 ng 的 docker 中使用 perf 工具?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61456515/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com