wsl2 和 Windows 本机编译性能为什么差距不大

3 天前
 misaka9527
我之前看见别人说, 在编译和启动速度上,wsl 上的 linux 都比 Windows 强,我使用同一台机器,使用 maven 编译同一个项目,实际对比了下,时间没啥差距,为什么?(注:wsl 我分配的全部核心和 16G 内存,编译的项目也复制到 wsl 内部了)。

我的 mac mini m1 ( 16+256 )倒是在编译和启动方面都有显著提升,比我的 Windows 电脑(amd R7 5800H + 32G + 512G)快一倍了
2758 次点击
所在节点    程序员
21 条回复
Yanlongli
3 天前
这个不绝对,有些编程语言的编译器针对 linux 系统有优化
xgdgsc
3 天前
java 编译是吃 io 还是 cpu ,node 会不会差别比较大
aloxaf
3 天前
主要是那种喜欢创建一堆进程的构建工具跑起来差别比较大吧
ca2oh4
3 天前
maven 用什么 wsl
SonicKang
3 天前
mac mini 主要是 io 太有优势了
xtreme1
3 天前
win 主要是 ntfs 处理大量小文件比较慢, java 顶多就几百几千个 .class 其实还好
murmur
3 天前
5800H 的性能不占优吧,7840 这个级别就好多了
minami
3 天前
他们说的编译速度差距基本是 C/C++那种编译。不过也挺扯淡的,因为影响的变量也太多了。我反正 mac 上装了 linux 容器,用 gcc 编译,实测速度也就那样
misaka9527
3 天前
@xtreme1 我还试过 Windows 自带的 dev drive , 用 ReFs 来存储源代码和相关库,微软自己说用于编译挺牛的,实际使用起来,效果也不明显
interim
3 天前
maven 指定下构建线程数看看,默认是单线程跑的,两者 IO 差距不大的话不会有大差异的。
misaka9527
3 天前
@minami 主要我研究相关问题时,搜到的都是说 Windows 的文件系统比 linux 慢,我就换成 linux 试了下,没想到没啥提升,用 Windows 的 ReFs 试了下,效果也不明显,难不成这方面没啥瓶颈,可能最主要还是看 CPU 的频率吧
misaka9527
3 天前
@interim maven 已经设置了 -T 1C 多线程了, 但是指定线程是多模块构建用的,我是单模块编译,javac 本身好像是单线程编译的
janus77
3 天前
说明你的项目编译速度已经快拉满了,再提升只能靠硬件了。
mac 不就是换了个硬件么?不要看都是 16G 就觉得内存一样,其实 mac 的内存和 win 的内存还真有区别的。
minami
3 天前
@misaka9527 #11 ntfs 性能没有问题,msvc 编译甚至比 mingw 还快,当然有些菜鸡都不知道 msvc 怎么开多线程编译,那就没办法了。一般 windows 上编译卡住都是杀毒把磁盘卡住了,完全是误会
BenjaminSu
3 天前
有没有一种可能?
WSL 的行为,不被防火墙检查,所以比较快?
Geon97
3 天前
主要是 io 的问题吧
yolee599
3 天前
因为 wsl 里面的 linux 无论用什么文件系统,最终落盘的时候都会转成 ntfs (假设你用的是这个)保存到磁盘,这一道转换都要浪费不少性能。你试试把磁盘直通 linux 看看
misaka9527
3 天前
@BenjaminSu 防火墙都关了的
@yolee599 我看相关文档,说两边系统是隔离的,只要不通过 /mnt 的方式来跨系统访问,应该不会进行转换吧,所以我测试也是将项目放到 wsl 里了
Ipsum
3 天前
试试用 wsl 在 ntfs 上编译 openwrt ,会慢到你怀疑人生。
yolee599
3 天前
@misaka9527 #18 编译出来的文件也要保存啊,最终可能就是你在 Windows 资源管理器里的 .vmdk 之类的文件,你也可以把编译输出文件夹挂载到 tmpfs ,把它放内存里

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1158513

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX