Edited at

WSL2を使ってみる (InsiderPreview)

Win10 Pro IPにWSL2が来たので使ってみました。

WSLは、VM⇔Host 間のファイルやり取りの為のセットアップが面倒になっている身には期待したいものがあります。現状でもDocker for Winが良い線行ってますが、WSLもなかなかのもの。

試用した感想としては良い感じ。ただ、/mnt/c/へのアクセスは速度的に要注意。


機能を有効化

Hyper-V上にて次の環境で試しました。


  • OS: Windows 10 Pro Insider Preview

  • Build: 18917.1000

  • WSL有効化済み

仮想マシンで試すならば、おそらくNested Hyper-Vの有効化が必要です (未確認)。

https://docs.microsoft.com/ja-jp/virtualization/hyper-v-on-windows/user-guide/nested-virtualization

現状ではWSL2を有効化するのにいくつか作業があるようです。

https://docs.microsoft.com/en-us/windows/wsl/wsl2-install

# 管理者権限で実行

# 「Windowsの機能の有効化または無効化」に相当。
PS> Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform

# ↑を実行後に再起動すること
PS> Restart-Computer

# インストールされているディストロを表示
# 著者の環境ではubuntuを入れています。
PS> wsl -l -v
NAME STATE VERSION
* Ubuntu Running 1

# ubuntuの動作環境をWSL2へ変換
# 別のディストロをWSL2化したい場合には"ubuntu"部分を書き換えます
PS> wsl --set-version ubuntu 2
変換中です。この処理には数分かかることがあります...
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
変換が完了しました。

# WSL1に戻す際は2の部分を1にすれば戻せます
# PS> wsl --set-version ubuntu 1


使ってみる

# バージョンが2になっていればWSL2が有効になってます

PS> wsl -l -v
NAME STATE VERSION
* Ubuntu Running 2

# あとはいつもどおりの方法で起動できます
PS> ubuntu
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

$ ls /
bin dev home lib lost+found mnt proc run snap sys usr
boot etc init lib64 media opt root sbin srv tmp var

$


噂の性能向上を計測

手頃なサイズのtarballを解凍してみました。

$ time tar -zxf WordPress-5.2.1.tar.gz

ついでに素のWindowsも

PS> Measure-Command { tar -zxf WordPress-5.2.1.tar.gz }

WslFsはWSL内のファイルシステム、DrvFsはWSLから見たWindowsのファイルシステムです。

WSL2はWslFsが高速化してる一方、DrvFsは遅くなってます。9pのせい?。

version
WslFs
DrvFs

WSL1
3.043s
25.044s

WSL2
0.391s
55.221s

Windows
41.18s
24.223s


まとめ


  • 有効化は「Windowsの機能有効化」と、「wsl --set-version ubuntu 2」で行う

  • WSL2のファイルアクセスは確かに早くなってる (もう少し大きいファイルが良かったな)。

  • /mnt/c/へのアクセスは旧版以上に重い

IOの主体をWSLかWinのどちらかに寄せたい。

VSCode Remoteにはその辺を期待してて、WindowsからWSL内のファイルへのアクセスを上手く活用し、作業時にはファイルの実体はWSL側に持たせたい感じ。ファイルアクセスの遅さに幻滅してるツイートを見かけましたが、この辺が原因かなと思った。

PS> explorer \\wsl$\Ubuntu