WSL2とWindowsのファイルのやり取りを500MB/sまで高速化した

概要

WSL2でホスト側のディスクへのアクセス速度が遅いので、SSHFSを使用することで読み取りが5MB/s->50MB/sに改善した。

追記: エクスプローラから、WSLに直接アクセスすることで500MB/sまで改善できた。

現状

WSL2ではホスト側のディスク(CドライブとかDドライブとか)をマウントする場合に、仮想ファイルシステムを経由するようで、アクセス速度がめちゃくちゃ遅い。測定結果は以下のようになる。以下は測定したいディスク(/mnt/dなど)で行う。

まず書き込み。ただしエラーとなったため参考まで。

/mnt/d$ dd if=/dev/zero of=tmp bs=1M count=1024
dd: error writing 'tmp': Input/output error
180+0 records in
179+0 records out
188219200 bytes (188 MB, 179 MiB) copied, 0.802771 s, 234 MB/s

次に読み込み。5.2 MB/sと非常に遅いことがわかる。

$ dd of=/dev/zero if=tmp
367615+1 records in
367615+1 records out
188219200 bytes (188 MB, 179 MiB) copied, 36.0973 s, 5.2 MB/s

5MB/sならネットワークのほうが早いじゃないか、ということでSSHFSを使ってみる。

SSHFS の準備

  • WSLでのSSHサーバー起動

wsl2でsshサーバを起動し、外部からそこに接続 - Qiita

  • SSHFSwinのインストール&起動

Windows10にwin-sshfsをインストールする方法

計測結果

上記のようにすると、WSL側のディレクトリがWindows側にマウントされている状態となる。なのでWindows側でアクセス速度を計測する。結果は以下の通り。通常のディスクに比べるとかなり見劣りしてしまうものの、一応高速化することはできた。

WSLに直接アクセス

エクスプローラから「\wsl$」と打つと、現在あるWSLの/にアクセスできる。例えば自分だとUbuntu-18.04というフォルダが作成されており、その下に/dev, /etc ...とフォルダがある。ここにファイルを書き込んでしまえばWSLからも見え、ファイルの読み書きができる状態になる。

ちなみにアクセス速度は以下のような感じ。/ではテストできないので、ホームディレクトリで計測している。ここまで高速化できればOKだろう。