在 WSL(Windows Subsystem for Linux)中使用 make
編譯項目時,如果發現編譯速度非常慢,通常是由以下幾個原因導致的。以下是一些常見的排查和優化方法:
🔍 一、常見原因及解決方案
? 1. 文件系統性能問題(最常見)
WSL 對 掛載在 /mnt/
下的 Windows 文件系統(如 NTFS)訪問性能較差,尤其是大量小文件的讀寫操作(例如編譯過程中的臨時文件生成、頻繁 IO 操作)。
📌 解決方案:
-
將源代碼放在 WSL 的 Linux 文件系統中,而不是 Windows 掛載目錄下。
示例路徑:
# 推薦位置:位于 WSL 根文件系統內 ~/myproject /home/yourname/myproject
? 不推薦路徑:
/mnt/c/Users/yourname/myproject # 來自 Windows 盤符
? 2. 禁用實時殺毒軟件或索引服務
Windows 的防病毒軟件(如 Windows Defender)會對 WSL 中的文件訪問進行掃描,顯著影響性能。
📌 解決方案:
- 添加 WSL 的項目目錄到防病毒軟件的排除列表。
- 或者臨時禁用防病毒軟件測試是否有效果。
? 3. 使用 WSL2 而不是 WSL1
如果你還在使用 WSL1,它雖然兼容性好,但文件系統橋接較慢;而 WSL2 使用虛擬化技術,原生 Linux 內核,對編譯更友好。
📌 查看當前 WSL 版本:
wsl --list --verbose
📌 設置默認版本為 WSL2:
wsl --set-default-version 2
📌 將已有 Ubuntu 分發版升級為 WSL2:
wsl --set-version Ubuntu 2
? 4. 啟用更多 CPU 核心 / 內存資源
默認情況下,WSL2 可能只分配了部分 CPU 和內存資源,可以手動設置限制。
📌 創建 .wslconfig
文件(在 Windows 用戶目錄下):
[wsl2]
memory=8GB
processors=4
然后重啟 WSL:
wsl --shutdown
wsl
? 5. 并行編譯(啟用多線程)
確保你使用的是并行編譯方式,比如:
make -j$(nproc)
或者指定具體線程數(例如 4 核):
make -j4
? 6. 更新 WSL 和 Ubuntu
確保你的 WSL 和 Ubuntu 是最新版本:
升級 WSL:
wsl --update
升級 Ubuntu 包:
sudo apt update && sudo apt upgrade -y
🧪 二、測試建議
你可以通過下面命令快速測試一下 WSL 的文件 I/O 性能:
dd if=/dev/zero of=testfile bs=1M count=100 oflag=direct
rm testfile
也可以測試 /tmp
和 /mnt/c
的性能差異,確認是否是文件系統的問題。
📝 三、總結優化建議
問題點 | 建議 |
---|---|
文件系統慢 | 使用 WSL2 + 放在 Linux 文件系統中 |
防病毒干擾 | 排除項目路徑 |
編譯效率低 | 使用 -j$(nproc) 并行編譯 |
資源不足 | 配置 .wslconfig 增加內存和 CPU |
WSL 版本舊 | 更新到 WSL2 |