なんか速度比べばかりしているような気がしますが・・・
今回はWSL2のファイルアクセス速度についてです。
WSL1から比べるとWSL2ではLinuxファイルシステムのアクセスは高速になったが、Windowsファイルシステム(/mnt/ドライブ名)のアクセスは遅くなったと言われます。
実際例えばJavaのソースリポジトリを /mnt/c/
以下のディレクトリにcloneしてきてビルドしたりすると極端に遅いので体感的にもわかります。
それでも意外とWSL2のほうが最新だしWSL2使おうというような感じで使われてて、かつ /mnt/ドライブ名
以下にワークディレクトリがあってビルドが遅くても比較対象がないので気にしていないなんてことが散見されるので、今更ながら記事にしてみました。
検証環境
- OS
- Windows 10 Pro
- バージョン
- 21H1
- CPU
- Core i7-10700
- ディスク
- Crucial P2 SSD 1TB
速度計測方法
WSL1,WSL2でそれぞれ以下のように計測しました。
- Ubuntu20.04の環境を作成。
- /dev/urandomを使い1kBの中身がランダムなファイルを10000個、Linux,Windows両ファイルシステムに作成。
- 上記10000個のファイルをcpコマンドでそれぞれ同一ファイルシステムにコピーする時間をtimeコマンドで計測。
- コピー元のディスクキャッシュの影響があるため何度か計測して安定してきた値を計測値とする。
ディスクキャッシュの関係から読込側というよりは書き込み側の速度テストになっています。
また、本来のディスクベンチマークであれば大きいサイズのファイルコピーなども行うのでしょうが、簡易計測ということで割愛しています。
計測結果
以下にファイルコピーの時間をそれぞれ記載しますが、時間の絶対値は環境によって変わるので、あくまで相対的に見るようにしてください。
WSL1
Linuxファイルシステム
real 0m4.789s
user 0m0.094s
sys 0m4.625s
Windowsファイルシステム
real 0m6.413s
user 0m0.109s
sys 0m6.297s
WSL2
Linuxファイルシステム
real 0m0.197s
user 0m0.044s
sys 0m0.154s
Windowsファイルシステム
real 0m56.177s
user 0m0.625s
sys 0m8.962s
結論
-
WSL1の場合はWindowsファイルシステムのほうが多少遅いものの、大差ない。(どちらもそこそこ遅い?)
-
WSL2は言われている通りLinuxファイルシステムは高速。だが、Windowsファイルシステムは致命的に遅い。
例えばWSL2でJavaサーバーの開発をする場合を想定すると、ワークディレクトリをWindowsファイルシステム側に置くのは非常に効率が悪いので避けるべきでしょう。逆にLinuxファイルシステム側に置くことでビルド等は速くなりそうです。(ビルドはファイルの読み書きが大量に発生するため)
IntelliJもWSLに対応して、WSL側でプロジェクトを開けるようになりましたし(かつJDKもWSL側のを使える)、VSCodeもWSL側から開けるので今後はそういったツールを活用していくのがよさそうです。
どうしても利用ツールの問題でWindowsファイルシステム側にワークディレクトリを置く必要がある場合はWSL1を利用しましょう。