在WSL下有什么运行性能的方法吗?

Is there any method to run perf under WSL?

当我想在 WSL 下 运行 性能时,我遇到了以下问题:

WARNING: perf not found for kernel 4.4.0-18362

You may need to install the following packages for this specific kernel:

linux-tools-4.4.0-18362-Microsoft

linux-cloud-tools-4.4.0-18362-Microsoft

You may also want to install one of the following packages to keep up to date:

linux-tools-Microsoft

linux-cloud-tools-Microsoft

但我找不到名为 linux-tools-4.4.0-18362-Microsoftlinux-cloud-tools-4.4.0-18362-Microsoft 的软件包。我想包名是自动生成的。

我还尝试在 docker 容器中使用 perf。但是,docker 容器使用与主机相同的内核。

在WSL下有什么方法可以运行性能吗?


听说WSL2可以用perf。但是在我升级到WSL2之后,它显示了类似的错误信息:

WARNING: perf not found for kernel 4.19.84-microsoft

You may need to install the following packages for this specific kernel:

linux-tools-4.19.84-microsoft-standard

linux-cloud-tools-4.19.84-microsoft-standard

You may also want to install one of the following packages to keep up to date:

linux-tools-standard

linux-cloud-tools-standard

WARNING: perf not found for kernel 4.19.84-microsoft

因为 WSL2 使用自定义 Linux 内核。它的源代码可以在这里找到 microsoft/WSL2-Linux-Kernel。我们必须从中编译 perf 工具。

程序

  • 安装所需的构建包。如果你在 WSL2 中使用 Ubuntu 这是 所需命令:
sudo apt install build-essential flex bison libssl-dev libelf-dev
  • 克隆 WSL2 Linux 内核存储库:
git clone --depth=1 https://github.com/microsoft/WSL2-Linux-Kernel.git
  • 转到 perf 文件夹并编译它:
cd WSL2-Linux-Kernel/tools/perf
make

perf 可执行文件将在该文件夹中。

如果您遵循接受的答案,请务必阅读 make 命令在开始时打印的抱怨,因为它可能缺少一些 headers 并禁用功能。

对我来说,它禁用了 tui、gtk 和 demangling 等一些功能。

您可以安装linux-tools-generic

apt install linux-tools-generic

然后 运行 perf 使用安装路径 /usr/lib/linux-tools/<linux-version>-generic/perf.

一些工具,如 flamegraph,将使用环境变量 PERF 作为 perf 路径。

PERF=/usr/lib/linux-tools/<linux-version>-generic/perf flamegraph -- my_program

已接受的答案有效。但是,缺少某些功能。

为了获得有用的信息和 demangled 信息,我必须安装以下库,然后 运行 make 再次安装。

  • libbabeltrace-dev
  • libunwind-dev
  • libdw-dev
  • binutils-dev
  • libiberty-dev

我不确定是否所有这些都是必需的。但是,这些足以让 cargo-flamegraph(我的用例)工作。