現在プレビュー中の20H1のビルド19013から、WSL2(Windows Subsystem for Linux 2)は、一旦確保したメモリでも不要になれば、きちんとWin32に返すようになった。今回はこのあたりを調べてみる。
|
|
|---|
| プレビュー中の20H1に含まれるWSL2では、不要なメモリをWin32側に返すことができるようになった。グラフは、WSL2側でメモリを消費させ、その後開放したときの様子である |
WSL2におけるメモリ割り当て
WSL2は、軽量ユーティリティ仮想マシン(Light Weight Utility Virtual Machine:以下、LWUVM)内で動作している。このため、ホストとなるWindows 10のメモリの一部を利用する。ただし、メモリ割り当ては、Hyper-Vでいう動的メモリ割り当てであり、上限を決めるものの、実際に使っている分のみを確保して、必要になれば上限までメモリを確保しようとする。
この上限は、WSL2側からは「実装メモリ量」のように見える。デフォルトでは、PC側のメモリの75%をWSL2の上限として割り当てているようだ。たとえば、物理メモリ4GBのマシンならば3GBが、8GBのマシンなら6GBが実装メモリとしてWSL2内からは見えている。
またWSL2では、Linuxのカーネルがそのまま動作しており、仮想記憶機構が動作している。Linuxでは、実装メモリ以上のメモリを使えるようにswapを設定できる。Linuxのswapには、ファイルもしくは、パーティションを割り当てることができるが、どうもWSL2では、デフォルトで「/swap/file」という仮想的なswapファイルが設定されているようだ。
“仮想的”としているのは、実際にはこうしたパスを持つファイルやデバイスはなく、WSL2側からは何も見えないからだ。しかしWSL2の実装メモリを越えそうになると、swapが使われるようになる。なお、仮想swapファイルは、Hyper-Vなどで利用する仮想HDDファイル(vhdxファイル)になっており、「%localappdata%\Temp\swap.vhdx」が使われるようだ。このswapファイルに関しては別途解説する予定だ。
メモリやswapは、WSL2をホストしているLWUVMが実現しているもので、WSL2では、その制御をユーザーフォルダーにある「.wslconfig」ファイルで指定できるようになっている。このファイルは単純なテキストファイルで1行ごとにキーワードを書いて設定する。まとまった資料がないようなので、とりあえず判明している範囲のキーワードを以下の表に示す。なお、このファイルによる指定には、すべてデフォルト値を持っているため、ファイルの中身は空、あるいはファイル自体がなくてもWSL2の動作には影響しない。
|
|
|---|
実装メモリ量を指定してみる
まずは、.wslconfigで実装メモリ量を変更してみよう。ただし、.wslconfigの設定を反映させるには、一回WSL2をシャットダウンして再起動させる必要がある(Linuxの再起動ではない点に注意)。それには、以下のコマンドなどで、WSL2を終了させる。
wsl.exe --shutdown
その後、.wslconfigを書き換えてWSL2のディストリビューションを起動する。これでWSL2側が認識する実装メモリ量が増える。
|
|
|---|
| メモリ8GBのマシンで、WSL2を起動すると、デフォルトのメモリ割り当て量は6GB程度。%userprofile%\.wslconfigで「memory=4GB」を指定して起動すると割り当ては3.9GB程度になる |
ただし、起動直後でbashのコマンド入力待ちの状態では、WSL2内では、50~60MB程度、Win32側で見ても270MB程度しかメモリを占有していない。
なお、WSL2内でメモリ量を調べるには、
free -h
とする。“-h”は数値を人間が見やすい形式にするオプションである。
この連載の記事
- 第198回 Windows 10の秋のアップデートは数分で終わる! 「November 2019 Update」はこっそり忍び寄っていた
- 第197回 Chromeと同じエンジンのEdge、正式版の来年1月配信を前に開発版の機能を見る
- 第196回 開発が進むWindows 10用ユーティリティ「PowerToys」 その機能をチェック
- 第195回 さらに開発が進む新コンソール「Windows Terminal」
- 第194回 変更点はそれほど多くないWindows 10の秋アップデートが完成
- 第193回 Windows Subsystem for Linux 2のNTFSソフトリンク対応
- 第192回 スリープ中に見えてもスマホのようにアプリが動作するWindows 10の「モダンスタンバイ」
- 第191回 「スロットリング」ではCPUの電力管理をOSではなく、CPU任せにする
- 第190回 Windows 10の電力管理を支えるACPIを見る
- 第189回 Windows 10のUWPアプリのファイルから情報を取り出す
- この連載の一覧へ