PIB - 20200911: Windows 10 1909 - WSL2

承前

導入

Windows 10 1903/1909 への back port 適用

2004 から back port されたとの事。
MSI Z170A PC MATE に 2004 が落ちて来ないのだが、back port は落ちてきたようなので確認。

記事では「2020-08 x64 ベース システム用 Windows 10 Version 1909 の累積更新プログラム (KB4566116)」 となているが、これはプレビューなのでスルーされたらしく、
代わりに、「2020-09 x64 ベース システム用 Windows 10 Version 1909 の累積更新プログラム (KB4574747)」 が自動適用されていた。

他にも も適用されていたが、これは手動で入れたのだったろうか?

WSL の有効化

まず、OptionalFeatures.exe を実行して以下の二つを ON に
  • Linux 用 Windows サブシステム
  • 仮想マシン プラットフォーム

PowerShell からやる場合は管理者モードで立ち上げて
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
ここで、要再起動

既に WSL1 は導入済みだったので、前者は ON だったが後者は OFF だったので、実質的な設定変更は後者が ON になった部分。

この時点で cygwin から wsl コマンドを叩いてみると以下のようになっていた。
$ wsl -l -v
  NAME      STATE           VERSION
* Ubuntu    Running         1

WSL1 なので WSL2 への変換が必要だが、
再起動してないと、仮想マシン プラットフォームが機能してないので
$ wsl --set-version Ubuntu 2
変換中です。この処理には数分かかることがあります...
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
Windows の仮想マシン プラットフォーム機能を有効にして、BIOS で仮想化が有効になっ
ていることを確認してください。
詳細については、https://aka.ms/wsl2-install を参照してください
みたいに言われて、WSL1 から WSL2 への変換に失敗する。

再起動して変換を開始すると、変換には数分を要する。
$ time wsl --set-version Ubuntu 2
変換中です。この処理には数分かかることがあります...
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
変換が完了しました。

real    1m52.093s
user    0m0.000s
sys     0m0.000s

変換中は以下のようになる。
$ wsl -l -v
  NAME      STATE           VERSION
* Ubuntu    Converting      1
変換後
$ wsl -l -v
  NAME      STATE           VERSION
* Ubuntu    Stopped         2

WSL1 と WL2 の間で相互変換できるが、連続で行うと時間が短くなる。キャッシュが効いてるのかも?
$ time wsl --set-version Ubuntu 1
変換中です。この処理には数分かかることがあります...
変換が完了しました。

real    1m39.948s
user    0m0.000s
sys     0m0.000s
$ time wsl --set-version Ubuntu 2
変換中です。この処理には数分かかることがあります...
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
変換が完了しました。

real    1m0.263s
user    0m0.000s
sys     0m0.015s

最後の WSL1→2 変換時の負荷

Windows Update で「Windows Subsystem for Linux Update - 4.9.104」が適用済みだったので、20200530: WSL2 の時に言われてた「WSL 2 を実行するには、カーネル コンポーネントの更新が必要です。詳細については https://aka.ms/wsl2kernel を参照してください」ってのは出て来なかった。

WSL2 の初回起動。
ちょっと遅い。カーソル点滅10回分くらい程度。
起動すると以下のような状態になる。
$ wsl -l -v
  NAME      STATE           VERSION
* Ubuntu    Running         2
WSL2 の窓が1つでも残ってると、追加の起動はほぼ一瞬だが、全て閉じるとやはり10秒くらいかかる模様。

ベンチマーク

20200608: WSL2#benchmark で行ったベンチマークを行ってみたところ以下のようになった。

MSI Z170A PC MATE, Core i7-6700K, Windows 10 1909 OS Builds 18363.1082
$ # Cygwin
$ loop
27787 ms / 1000 loop, 27787 us/loop, 35 loop/s
$ # Ubuntu 18.04.4 LTS WSL1
$ loop
5662 ms / 1000 loop, 5662 us/loop, 176 loop/s
$ # Ubuntu 18.04.4 LTS WSL2
$ loop
684 ms / 1000 loop, 684 us/loop, 1460 loop/s
MSI Z170A PC MATE, Core i7-6700
$ # Ubuntu 20.04 LTS Native
$ loop
614 ms / 1000 loop, 614 us/loop, 1626 loop/s
WSL だと以下の方法で利用可能だった drvfs を用いた共有フォルダ(UNC)の参照が WSL2 だと上手く動かない模様。
これは の方法に習って素直に cifs-utils 入れて mount.cifs 使うべきなのだろうか?

とりあえず、
sudo mount -t cifs -oiocharset=utf8,user=$SMBUSERE,uid=$USER,gid=$USER $SHARE $MOUNTPOINT
で行けそう。
なぜか、素の Ubuntu なら大丈夫なのに、WSL2 の Ubuntu は iocharset 設定しないとマルチバイトが化けるのは注意点だろう。

関連