- Pros
- マネージドVM
- 完全なLinuxカーネル
- システムコールの完全な互換性
- Cons
- OSファイルシステム間でのパフォーマンス
パフォーマンス的には、WSL 2 は 9P というプロトコル経由で Windows ファイルシステムにアクセスするためにとても遅いとのこと。つまり、Windows ファイルシステムにある大量のファイルを WSL 2 上の Linux に処理させようとするとめちゃくちゃ遅い、ということのようです。そのため、Linux 側のコンパイルツールで Windows 側のソースツリーをコンパイルするというようなシナリオはパフォーマンスが非常に悪いようです。また、うっかり /mnt/c
以下で作業するとファイルアクセスが極端に遅くなるので、Windowsファイルシステム上にある大量のテキストファイルを処理するような作業も向かないのでしょう。
一方、WSL 2 では Hyper-V を仮想マシンプラットフォームとして管理下に置くため、WSL 2 の Hyper-V API を使用するように設定した VirtualBox や Android Emulator を同時に動かすことができるとのことで、WSL 1 が Hyper-V を専有しているために別の仮想マシンを同時利用できなかったのに比べると大きな違いになっています。
また、WSL 2 が管理している Linux 側のファイルシステムへのアクセスは WSL 1 に比べて高速化しているそうで、Linux ファイルシステム上でのコンパイル作業などは高速になるようです。
WSL 2 ではシステムコールについても完全に互換だということなので、Linux バイナリを持ってくればそのまま動くというのも特徴になります。
じゃあどちらを使えばいいのかというとこれがまたややこしくて、- WSL 1 は Hyper-V を使ってハイパーバイザを独占するので、Hyper-V プラットフォームに対応していない仮想マシンは同居できないし、対応していてもパフォーマンスが悪かったりする。
- Docker に関しては、WSL 1 の場合には WSL 上に Linux 版の Docker をインストールして使用することでこの問題は回避できるらしい。
- WSL 1 と WSL 2 は同居でき、仮想マシンがどちらを使うかを個別に指定できる。たとえば Ubuntu は WSL 1 上で動かし、Docker Desktop for Windows のバックエンドには WSL 2 を使うということができる(らしい)。
wsl -l -v
などとすると、パッケージがどちらの WSL で動いているかも表示される。また、wsl --set-version <ディストリビューション> <バージョン>
などとしてどちらのバージョンで動作するかを指定できる。
0 件のコメント:
コメントを投稿