Linux“Perf”工具不能在Docker镜像中运行?

我知道“perf”工具要求安装对应于特定的linux内核版本。 而且我知道所有的docker映像都运行在相同的linux内核版本上,不pipelinux发行版本。

我在Docker里面使用了Ubuntu 16.04并且已经安装了linux-tools-common,启动perf告诉我我还缺less一些软件包:'

# perf /usr/bin/perf: line 32: lsb_release: command not found WARNING: perf not found for kernel 4.9.12 You may need to install the following packages for this specific kernel: linux-tools-4.9.12-moby linux-cloud-tools-4.9.12-moby You may also want to install one of the following packages to keep up to date: linux-tools-moby linux-cloud-tools-moby 

然后我试图安装我错过的东西:

 root@xxxxxx:/# apt-get install linux-tools-4.9.12-moby linux-cloud-tools-4.9.12-moby Reading package lists... Done Building dependency tree Reading state information... Done E: Unable to locate package linux-tools-4.9.12-moby E: Couldn't find any package by glob 'linux-tools-4.9.12-moby' E: Couldn't find any package by regex 'linux-tools-4.9.12-moby' E: Unable to locate package linux-cloud-tools-4.9.12-moby E: Couldn't find any package by glob 'linux-cloud-tools-4.9.12-moby' E: Couldn't find any package by regex 'linux-cloud-tools-4.9.12-moby' root@b2543b6e985d:/# apt-get install linux-tools-moby linux-cloud-tools-moby Reading package lists... Done Building dependency tree Reading state information... Done E: Unable to locate package linux-tools-moby E: Unable to locate package linux-cloud-tools-moby 

(1)很奇怪,但是如何解决这个安装问题呢?

(2)另外:我还是感到困惑,如果“perf”和“kernel”没有严格匹配,那么在linux的docker里怎么能够“perf”呢?

我知道“perf”工具要求安装对应于特定的linux内核版本。 而且我知道所有的docker映像都运行在相同的linux内核版本上,不pipelinux发行版本。

来自其他版本内核的Perf工具仍然可以使用( perf_event子系统中的系统调用具有良好的devise,并且与较旧/较新的工具兼容)。 所以,你可以在任何地方find任何perf二进制文件(而不是/usr/bin/perf脚本),检查它的库依赖于( ldd ..path_to_perf/perf )并拷贝到Docker里面(并且安装libs)。

在硬件事件,系统范围或内核分析的使用可能是有限的docker,所以试试

  • perf -e cycles:u ./program (仅用于用户空间的硬件计数器),
  • perf -e task-clock ./program (用于内核和用户空间的软件定时器),
  • perf -e task-clock:u ./program (仅用于用户空间的软件定时器),