我正在尝试查找哪些进程导致我的应用程序中发生上下文切换。谷歌返回了本指南:
https://www.brendangregg.com/perf.html#SchedulerAnalysis
很棒吗?我运行了它,但它不起作用:
sudo perf record ./Test
[ perf record: Captured and wrote 1.438 MB perf.data (37217 samples) ]
perf sched latency
perf: 'sched' is not a perf-command. See 'perf --help'.
出了什么问题?
我认为 Ubuntu 并没有构建包含许多依赖项的
perf
。例如,perf sched
和 perf record -e [software tracepoint]
需要 libtraceevent
。 Ubuntu 选择禁用这些功能而不是采用依赖项。
我也在 Ubuntu 22.04 上,
perf sched
不起作用,我之前的建议也不起作用 perf record -e sched:sched_switch
。
话虽如此,您可以下载内核源代码并自行构建
perf
。我必须安装libelf-dev
和libtraceevent-dev
才能让perf
能够提供以上两个功能
$ /usr/bin/sudo apt install linux-source
源代码显示为 /usr/src/
中的 tarball。$ cd [some-working-directory]
$ tar -xf /usr/src/linux-source*
$ cd linux-source-*
$ cp /boot/config-$(uname -r) ./.config
$ make oldconfig
$ cd tools/perf
$ make prefix=[some-working-directory]/install install
之后,您应该在
perf
中有一个新的 [some-working-directory]/install/bin
二进制文件。关于如何从该位置正确使用它可能有一些注意事项,但仅运行它似乎就可以满足基本用途。