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
(仅用于用户空间的软件定时器),