このページの本文へ

前へ 1 2 次へ

Windows Info 第402回

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

2023年10月22日 10時00分更新

文● 塩田紳二 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

 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形式になっているようだ。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン