WSL2のグローバル設定ファイル .wslconfigについて学んでみた。
DA事業本部の横山です。
今回は、WSL2の設定ファイルである.wslconfig
ファイルの設定について学んでみました。
気になった設定項目や、注意点について記載したので参考にしてみてください。
はじめに
私は開発環境としてWSL2で立てたUbuntu-20.04
を利用しており、基本的にはVSCodeのRemote Development拡張機能に含まれるWSL拡張機能を使って接続しています。(めちゃめちゃ便利です)
メモリ消費量等に関して気になることがあり、WSL2に関する設定について調べたのでまとめました。
WSL2の設定ファイルについて
WSL2の設定ファイルには2種類あり、wsl.conf
と.wslconfig
が存在します。
.wslconfig
- WSL2で実行されているすべてのインストール済みディストリビューションで設定をグローバルに構成します。
- つまり、WSL2で立てている全てのディストリビューションの共通設定です
- 共通設定なので、WSL2を立てている側であるWindows側に設定ファイルを置きます。
wsl.conf
- WSL1 または WSL2 で実行されている Linuxディストリビューションのディストリビューションごとの設定を構成します。
- つまり、各ディストリビューションごとの設定です。
- 個別の設定なので、各ディストリビューションのインスタンス内に設定ファイルを置きます。
参考
.wslconfig
ファイルについて
%UserProfile%
ディレクトリに格納されます。- つまり、
C:\Users\\.wslconfig
を作る必要があります
- つまり、
- WSL2バージョンとして実行されているすべてのLinuxディストリビューションに対するグローバル設定です。
- 複数のディストリビューションをインストールしている場合は影響があるため注意しましょう。
- WSL2で実行されるディストリビューションのみに適用されます。
- WSL1で実行しているディストリビューションは、仮想マシンとして実行されていないため設定内容が影響しません。
- ファイルが見つからない場合や、形式が不正の場合、WSLは設定を適用せずに通常通り起動し続けます。
- 設定ファイル内容が間違っている場合に、気が付きにくいので気を付けたいですね。
自分が立てているWSLのバージョンがわからない方は、コマンドプロンプトを開いてwsl -l -v
でバージョンを確認しましょう。
C:\Users\yokoyama.takato>wsl -l -v NAME STATE VERSION * Ubuntu Stopped 2 Ubuntu-20.04 Running 2
WSL1からWSL2にアップグレードする場合は、以下のリンクを参照してください。
.wslconfig
ファイルの設定内容について
注意 グローバル構成オプション
.wslconfig
は、Windows ビルド 19041 以降で WSL 2 として実行されているディストリビューションでのみ使用できます。 これらの変更を有効にするには、wsl --shutdown
を実行して WSL 2 VM をシャットダウンしてから WSL インスタンスを再起動することが必要な場合があることに注意してください。
自分のWindowsビルド番号がわからない場合は、コマンドプロンプトを開いてver
コマンドを叩いて確認しましょう。
以下の例では、19045
がバージョンに当たります。
C:\Users\yokoyama.takato>ver Microsoft Windows [Version 10.0.19045.2965]
.wslconfig
に記載できる内容は以下のリンクに全て記載されています。
現在設定可能なものはすべて[wsl2]
セクションに含まれるようです。
本記事では、私が気になったもののみを抜粋します。
memory
- notes
- WSL2のVMに割り当てられるメモリの量です。
- default
- Windows の合計メモリの 50% または 8 GB のどちらか少ない方。20175 より前のビルドでは、Windows の合計メモリの 80%
- コメント
- 20175ってInside Preview Build番号みたいなのですが、
19045(22H2)
はそれより後のビルドってことでいいんですかね? - Linuxでは、メモリ管理として空いているメモリががんがん
buff/cache
に回されるのでWindows側が逼迫していきます。 - いろいろなところでissueが上げられ、50% または 8GB のどちらか少ない方にdefault値が変更された模様。
- 20175ってInside Preview Build番号みたいなのですが、
processors
- notes
- WSL2 VMに割り当てる論理プロセッサの数
- default
- Windows上の同じ数の論理プロセッサ
- コメント
- もしもWSL2の利用でCPUが逼迫している方が居れば設定したほうがいいかも
swap
- notes
- WSL2 VMに追加するスワップ領域の大きさ。スワップファイルがない場合は 0。
- default
- Windowのメモリサイズの25%を、もっとも近いGBに切り上げた値
- コメント
- 後述する
swapFile
がWindows側のディレクトリを参照するため 0 にしました。
- 後述する
swapFile
- notes
- スワップファイルへの絶対パス。
- default
%USERPROFILE%\AppData\Local\Temp\swap.vhdx
- コメント
- WSL2から、Windows上のファイル(
/mnt/c/**
)へのアクセスは遅いことが知られているため気になる
- WSL2から、Windows上のファイル(
pageReporting
- notes
- 既定の true 設定により、Windows は WSL 2 仮想マシンに割り当てられた未使用のメモリを再利用できます
- default
- true
- コメント
- falseに設定すると、
memory
に設定した値が固定で予約されてしまうという意味?
- falseに設定すると、
その他の注意点。
- path 値を含むエントリでは、円記号をエスケープした Windowsパスを指定する必要がある。
- 例:
C:\\Temp\\myCustomKernel
- 例:
- size 値を含むエントリでは、サイズの後で単位を指定する必要があります。例:
8GB
、512MB
。- 例:
memory: 8GB
- 例:
- 値型の後に
*
を持つエントリは、Windows 11でのみ使用できる。- 例:
guiApplications
- 例:
公式ドキュメントには、設定ファイル例も記載してあるため参考にしてみてください。
自分の設定内容について
今回、公式ドキュメントを読んで自分の環境では、.wslconfig
を以下のように設定してみました。
Windows側のメモリが逼迫されることが減ってより快適に作業が行えるようになったと思っています。
[wsl2] memory=8GB swap=0 processors=2
おわりに
WSL2のグローバル設定ファイルである、.wslconfig
について学んでみました。
別記事に、wsl.conf
についても記載しました。気になる方はご参照ください。
以上になります。この記事がどなたかの助けになれば幸いです。