微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我在我的机器上用 WSL2 ubuntu 编译 perf 时遇到问题。

Ubuntu 是从微软商店下载的,内核版本是 4.19.128-microsoft-standard

我已经在 stackoverflow 上关注了 this 的回答,并且https://blog.haoxp.xyz/posts/wsl2-perf/

运行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 主目录(在 ext4 文件系统下)而不是您的 C: 驱动器下构建。

(很多)更长的答案——您可能会遇到两个不同的问题,源位于 C: 驱动器上(并通过 /mnt/c 访问它):

首先,权限问题。使用自动挂载的 git clone 挂载选项,即使 /mnt/c 在 WSL2 中的 /mnt/c 上对我来说也失败了。我猜你是用 Windows git 而不是 Linux git 来检查的?

您可以使用类似 sudo mount -t drvfs C: /mnt/src -o uid=1000,gid=1000(请参阅 this answer)之类的内容重新安装驱动器以更正权限。我能够做到这一点,但后来我注意到以下...

即使修复了权限,我仍然面临下一个问题 - WSL case sensitivity support on NTFS drives。 Linux git clone 警告我注意重复的目录。我相信这就是您收到“多重定义”警告的原因——该源树包含一些重复的目录名称,只是大小写不同。 Windows git 处理正确,但我猜测构建失败,因为它没有解析正确的目录。我还没有尝试过,但是在该 MS 文档中提供了在目录上设置区分大小写的命令。

但即便如此,如果你解决了这些问题(你可能可以),我仍然建议避免在 WSL2 下使用 /mnt/c(和任何其他 NTFS 驱动器)。由于 NTFS 在 WSL2 下的性能不佳(比在 WSL1 下差很多,远得多),任何繁重的文件操作都将完全停止。例如,该存储库的 git clone/home/myusername/src 下只用了几秒钟,但在 /mnt/c 上用了大约 10 分钟 (!!!)。这是 WSL2 的一个已知问题。

当我想对 NTFS 驱动器运行 Linux 命令时,我仍然保留 WSL1。例如,s3cmd 将我的照片同步/备份到 S3 兼容存储。我将 WSL2 用于其他一切,但我坚持使用 ext4 文件系统,那里的性能更好比 WSL1。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。