1. トップ
  2. 新着ニュース
  3. IT
  4. IT総合

プレビュー版が登場したWSLのVer.2.0 新機能を具体的に見る

ASCII.jp / 2023年10月22日 10時0分

 Windows Subsystem for LinuxのプレビューVer.2.0が9月に公開された。WSL2と混同を避けるため、これをWSL V2.0と表記する。

 現在、WSLはMicrosoftストア経由で配布されており、自動的にアップデートされる。ただし、WSL V2.0はまだプレビュー段階で、安定版はV1.2.5だ。このため、Windows Insider Programのプレビュー版ではないWindows 11では、当面は安定版のままになる。ただし、強制的にプレビュー版をインストールすることはできる。

 追加される機能自体はそれほど難しいものではないが、動作条件などが複雑で、また既存のプログラムに影響を与える可能性があることから、評価やテストなどには十分な注意が必要と言える。実験的機能であることから、WSLや動作しているプログラムに大きな影響が出る可能性もある。日常的にWSLを使っているのであれば、安定版になるまで待つべきだろう。

WSL V2.0の概要

 現時点では、WSL V2.0の新機能の多くは「実験的」とされている。これらは標準状態では無効とされており、各ユーザーフォルダ以下にある.wslconfigファイルで機能を有効化させる必要がある。

 搭載される機能には、以下のようなものがある。

自動メモリ解放(Auto Memory Reclaim) 自動ディスクスペースクリーンアップ/スパースVHD(Automatic disk space clean up) ミラードモードネットワーク(Mirrored mode Networking) DNSトンネリング(DNS Tunneling) Hyper-V ファイアウォール(Firewall) 自動プロキシー(auto Proxy)

 それぞれで必要となる.wslconfigの設定項目を以下の表に示す。

WSL V2.0

自動メモリ解放

 「自動メモリ解放」は、Linuxのファイルキャッシュを自動的に解放して、WSLを動かす軽量ユーティリティ仮想マシンのメモリ利用量を下げる技術だ。Linuxでは利用できるメモリを積極的にファイルキャッシュとして用いる。このため、利用可能な物理メモリをできうる限り使ってしまう。これまでも、メモリが解放されたら、Win32側に返すという機能はあったものの、ファイルキャッシュとして利用されることが多かったためにあまり有効ではなかった。

 自動メモリ解放の設定には、「アイドル時に段階的に解放していくもの(gradual)」「全部を解放するもの(dropcache)」「自動メモリ解放機能の動作禁止(disable)」の3つの動作モードのどれか1つを指定する。また、シェルスクリプトを使うことで、キャッシュの解放ルールをカスタマイズすることができる。

 ただし、スクリプトによるカスタマイズやgradualでのキャッシュ解放には、ディストリビューションがcgroup v2(Contrl Group Ver.2)に対応している必要がある。Control Groupとは、CPU時間やメモリなどの「資源」を制限・分離するためのLinuxカーネルの機能で、仮想マシンやコンテナ技術で利用されている。cgroupにはv1とv2があり、現状では両方を併用しているディストリビューションが多い。

 cgroup v2がディストリビューションで利用できるかどうかは、以下のコマンドで調べることができる。

grep cgroup /etc/mtab

cgroup v2が動作しているディストビューションでは、/etc/mtabから「cgroup」という文字列を探すことで、対応状態を知ることができる。写真はUbuntu 20-04 LTSをWSL V2.0.4で動作させた場合。ただし、.wslconfigファイルでは“autoMemoryReclaim”は設定していない状態

 実行結果にcgroup v2を表す「cgroup2」があるかどうかを調べる。cgroupの機能は、sysファイルシステムにマウントされるため、マウンド結果を記録するmtabに情報がある。

 ただし、自動メモリ解放を設定すると、上記のmtabのマウント項目など、システムの挙動が大きく変わる。設定前の段階では、cgroup v1とcgroup v2の両方が利用できる状態だったが、自動メモリ解放を設定すると、cgroup v2のみが有効となり、cgroup v1に依存しているプログラムがあれば動作がしなくなる。

自動ディスクスペースクリーンアップ

 「自動ディスクスペースクリーンアップ」は、WSL2のLinux側ファイルシステムを格納する仮想ハードディスクファイル(vhdxファイル)の未使用部分を解放することで、ファイルサイズを圧縮する機能である。

 容量可変(Dynamic)仮想ハードディスクファイルは、利用に応じて、物理ファイルサイズを拡張していくが、一回確保したファイル領域は、あとから未使用状態になっても開放されない。解放するためには、ファイルシステムやパーティション構造やVHDXの構造を理解して、ファイルシステム内の未使用領域が、VHDXファイルの末尾部分になるように変更した上で縮小処理をする必要があるからだ。

 これまでは、仮想マシンでWindowsを動かし、VHDファイル内にWindowsが作るパーティションとNTFSによるファイルシステムを作った場合に限り、「最適化」(仮想ハードディスクの編集ウィザードの機能)などを利用して、未使用領域を開放できた。

 「自動ディスクスペースクリーンアップ」は、おそらくExt4形式を理解して、未使用領域の物理ファイル領域を開放するものと考えられる。このコマンドに対応するため、wsl.exeに「--manage」オプションが追加され、WSLディストリビューションのext4.vhdxを「スパースVHD」ファイルに変換できる。

 このスパースVHD機能に対応して、wsl.exeコマンドには、既存の容量固定VHDファイルを容量可変VHDファイルに変換する機能が搭載された。

wsl.exe --manage <ディストリビューション名> --set-sparse

 ただし、WSL V2.0以前でも最近インストールしたWSLディストリビューションは、容量可変VHD形式になっているようだ。

ネットワークミラーモード

 「ミラードモードネットワーク」は、ホスト側のネットワーク機能を使うためのもの。現在は、WSLのLinuxカーネルにあるネットワークスタックが使われており、仮想ネットワークインターフェースと仮想的なネットワーク(仮想スイッチ)を介して、Win32側のNATを使って、LAN側のアクセスをしているがIPv6の利用などに制限がある。

 ミラーモードネットワークは、NATを使わずにWin32側のネットワーク機能を使ってWSLのネットワーク接続をするもの。これによりIPv6やマルチキャストの利用や物理LAN側アクセスが可能になる。ただし、この機能は、Windows Insider ProgramのWindows 11プレビュービルドのうち、Canary Channel版およびWindows 11 Ver.22H2のRelease Preview Channel版(ビルド22621.2359)でしか動作しない。

 このミラーモードに合わせて、WSL内でミラーモードで動作しているかどうかを確認するコマンド「/usr/bin/wslinfo」が用意された。具体的には、

/usr/bin/wslinfo --networking-mode

とすると、モードに応じて「nat」または「mirrored」を返す。

そのほかの機能

 「DNSトンネリング」は、WSLでDNS名前解決の方法を変更するものだ。現在のWSLでは、Win32側をDNSサーバーとして仮想ネットワークを介してWin32側にDNSパケットを送信しているが、その解決がうまくできないことがある。DNSトンネリングは、仮想ネットワークを介さずに仮想マシンの機能を使って直接DNSリクエストをWin32側に送る。これにより、WSL側での名前解決が正しくできる可能性が高くなる。なお、この機能は、Canary/Release Preview Channel版でしか動作しない。

 「Hyper-Vファイアウォール」は、WSLからのネットワークアクセスに対して、Hyper-V用のファイアウォールルールを適用することを可能にするものだ。これまでは、Windowsファイアウォールの全体設定ルールのみが適用されていた。この設定を有効にすると、仮想マシン内で動作するWSLに対して、Hyper-Vファイアウォールルールを定義し、フィルタリングすることが可能になる。このことでWSL独自のフィルタリングが実現される。ただし、この機能もCanary/Release Preview Channel版でしか動作しない。

 「自動プロキシ」は、Win32側のプロキシ情報を使ってLinux側のプロキシ設定をするもの。プロキシ設定は、原則インターネットアクセスをするプログラム固有の設定項目だが、システム側から設定情報を提供する仕組みがある。

 WindowsもLinuxもそれぞれプロキシの自動検出(Web Proxy Auto-Discovery、WPAD)や自動設定(Prox Auto-Config、PAC)の機能がある。ただしLinuxでは、WPADはディストリビューションごとに実装や設定が異なる。デスクトップ環境の起動時に処理されることもあって、必ずしもWSLでは利用しやすいものとは限らない。WSL V2.0の自動プロキシは、WSLディストリビューションに、Win32側で得たプロキシ情報を渡し、LinuxのWPADを代用するものだ。

 バージョン番号がV1.3.7からV2.0.0に上がったことから、今回のWSLのバージョンアップは大きなものであることがうかがえる。ただ、原稿執筆時点では、すでにアップデートが4回行われ、最新のバージョンはWSL V2.0.4まで進んでいる。変更が大きな分、問題も出やすいのであろう。次回は具体的に拡張機能を動かして評価してみることにする。

この記事に関連するニュース

トピックスRSS

ランキング

記事ミッション中・・・

10秒滞在

記事にリアクションする

記事ミッション中・・・

10秒滞在

記事にリアクションする

デイリー: 参加する
ウィークリー: 参加する
マンスリー: 参加する
10秒滞在

記事にリアクションする

次の記事を探す

エラーが発生しました

ページを再読み込みして
ください