Japanese Stable CLIP を試してみた

WSL2 で GIT が遅い問題

結論

EXT4 などの Linux ファイルシステム上で作業しましょう。


説明

WSL2 上の Ubuntu で GIT 関連の動作が非常に遅くて困っていました。感覚的には、Linux カーネルソースをクローンしたディレクトリで git add すると数10秒応答がなくなるくらい。

マシン性能も決して高くはないので仕方がないのかと思っていましたが、どうやら WSL2 のファイルシステムに起因する問題だったようです。


WSL は、デフォルトで Windows のファイルシステムを透過的に扱うことが可能です。これは、WSL 内から見ると /mnt/c などにマウントする形で参照可能になっています。

自分の PC は C ドライブの容量が少なかったので、D や E ドライブを追加して、そちらで作業をしていました。そのため、Windows のファイルシステムをそのまま参照して作業していました。これがよくなかったようです。

WSL 上で mount コマンドを実行し各マウント状況を表示してみると、/mnt/c などの Windows のファイルシステムは以下のように表示されます。

「9p」という、見慣れないファイルシステムでマウントされています。これは Windows ホストと WSL のファイル共有プロトコル。Windows の NTFS と Linux(WSL) の EXT4 などのファイルシステムの変換などもうまいことやってくれる、とても便利な仕組みです。
ですが、特に細かいファイルのやりとりではこの変換にかかるオーバーヘッドが大きいようで、パフォーマンスは非常に落ちます。ソースコードのような、小さなファイルを多数扱うような処理は苦手なようです。

そのため、9p 上ではなく、EXT4 などの Linux ファイルシステム上で作業することで、あきらかにパフォーマンスは向上します。GIT だけでなく、ビルド時間も短縮が可能です。
(Nokia 7.2 のカーネルビルドは、9p 上だと 90 分程度 → EXT4 上だと 10 分程度まで短縮)

余談

9p は Windows と WSL のファイル共有プロトコルなので、WSL から Windows だけでなく、Windows から WSL へのアクセスも可能なようです。具体的には、(Windows の)エクスプローラーで "\\WSL$" にアクセスすると、WSL のディストリビューションが共有フォルダのように表示されます。

それを開くと、WSL のルートにアクセスできます。

コメント