如何在WSL2上正确安装perf命令

3
我在WSL2 Ubuntu上编译perf时遇到了问题。
Ubuntu是从Microsoft Store下载的,内核版本为4.19.128-microsoft-standard
我已经按照StackOverflow的这个答案这篇文章中的步骤进行了尝试。
当运行make命令时,我遇到了以下错误:
mv: cannot stat 'util/.env.o.tmp': No such file or directory
make[4]: *** [/mnt/c/Users/micro/Documents/tools/WSL2-Linux-Kernel/tools/build/Makefile.build:97: util/env.o] Error 1
make[4]: *** Waiting for unfinished jobs....
  LD       bench/perf-in.o
make[3]: *** [/mnt/c/Users/micro/Documents/tools/WSL2-Linux-Kernel/tools/build/Makefile.build:139: util] Error 2
make[2]: *** [Makefile.perf:633: libperf-in.o] Error 2
make[2]: *** Waiting for unfinished jobs....
ld: bench/futex-lock-pi.o:/mnt/c/Users/micro/Documents/tools/WSL2-Linux-Kernel/tools/perf/bench/futex-lock-pi.c:38: multiple definition of `end'; bench/futex-hash.o:/mnt/c/Users/micro/Documents/tools/WSL2-Linux-Kernel/tools/perf/bench/futex-hash.c:38: first defined here
ld: bench/futex-lock-pi.o:/mnt/c/Users/micro/Documents/tools/WSL2-Linux-Kernel/tools/perf/bench/futex-lock-pi.c:38: multiple definition of `start'; bench/futex-hash.o:/mnt/c/Users/micro/Documents/tools/WSL2-Linux-Kernel/tools/perf/bench/futex-hash.c:38: first defined here
ld: bench/futex-lock-pi.o:/mnt/c/Users/micro/Documents/tools/WSL2-Linux-Kernel/tools/perf/bench/futex-lock-pi.c:38: multiple definition of `runtime'; bench/futex-hash.o:/mnt/c/Users/micro/Documents/tools/WSL2-Linux-Kernel/tools/perf/bench/futex-hash.c:38: first defined here
make[4]: *** [/mnt/c/Users/micro/Documents/tools/WSL2-Linux-Kernel/tools/build/Makefile.build:145: bench/perf-in.o] Error 1
make[3]: *** [/mnt/c/Users/micro/Documents/tools/WSL2-Linux-Kernel/tools/build/Makefile.build:139: bench] Error 2
make[3]: *** Waiting for unfinished jobs....
  LD       tests/perf-in.o
ld: tests/bp_account.o:/mnt/c/Users/micro/Documents/tools/WSL2-Linux-Kernel/tools/perf/tests/bp_account.c:25: multiple definition of `the_var'; tests/bp_signal.o:/mnt/c/Users/micro/Documents/tools/WSL2-Linux-Kernel/tools/perf/tests/bp_signal.c:37: first defined here
make[4]: *** [/mnt/c/Users/micro/Documents/tools/WSL2-Linux-Kernel/tools/build/Makefile.build:145: tests/perf-in.o] Error 1
make[3]: *** [/mnt/c/Users/micro/Documents/tools/WSL2-Linux-Kernel/tools/build/Makefile.build:139: tests] Error 2
make[2]: *** [Makefile.perf:507: perf-in.o] Error 2
make[1]: *** [Makefile.perf:206: sub-make] Error 2
make: *** [Makefile:70: all] Error 2

有人能帮我找出我做错了什么吗?


这个回答解决了你的问题吗?有没有在WSL下运行perf的方法? - laffuste
1个回答

4

简短回答 - 尝试在WSL家目录(在ext4文件系统下)克隆repo并构建,而不是在C:驱动器下。

更长的答案 - 您可能遇到了两个单独的问题,因为源代码位于C:驱动器上(通过/mnt/c访问):

首先,权限问题。 即使使用自动挂载的/mnt/c挂载选项,在WSL2中从/mnt/c内克隆都会失败。 我猜您是使用Windows git而不是Linux git进行检出?

您可以使用类似sudo mount -t drvfs C: /mnt/src -o uid=1000,gid=1000(参见this answer)这样的命令重新挂载驱动器以更正权限。我也能做到这一点,但然后我注意到以下内容 ...

即使修复了权限问题,我仍然面临下一个问题 - NTFS驱动器上的WSL大小写敏感支持。Linux git clone警告我存在重复目录。我相信这就是你收到“多次定义”的警告的原因--源代码树包含一些只在大小写区分时不同的重复目录名称。Windows git正在正确处理它,但我的猜测是构建失败是因为它没有解析正确的目录。我没有尝试过,但在那个微软文档中设置目录大小写敏感度的命令。

但即使你解决了这些问题(你可能可以),我仍然建议避免在WSL2下使用/mnt/c(以及任何其他NTFS驱动器)。由于NTFS在WSL2下性能非常差(比在WSL1下还要糟糕得多),任何大量文件操作都会完全停滞。例如,那个repo的git clone/home/myusername/src下只需要几秒钟,但在/mnt/c下需要约10分钟(!)。这是WSL2的已知问题。

我仍然保留WSL1,以便在需要运行Linux命令来操作NTFS驱动器时使用。例如,s3cmd用于将我的照片同步/备份到S3兼容存储中。而我则使用WSL2进行其他所有操作,但我会坚持使用ext4文件系统,在那里性能比WSL1 更好


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接