Bulblub

ManjaroとWin10+WSL2どっちが速いか、あるいは遅いか。

June 14, 2020

環境

以前 Manjaro Linuxに移行しました で書いた、ThinkCentre M715q TinyにManjaro LinuxとWindows 10のデュアルブート環境。この環境は次の自作PCするための繋ぎ兼検証環境(macOSから完全に離れられるか?今の所戻る気にはならない)。

WSL2導入

このマシンにインストールされているWindows10はHomeエディションなので、WSLからの移行ではなく新規でWSL2をインストール。

主に WSL2導入|WinアップデートからWSL2を既定にするまでのスクショ - Qiitaの記事を参考にさせて頂いた。自分の環境では特につまづきポイントもなかった。途中でなにかのツールをインストールしたんだけど、それがGithubで公開されている公式のもので時代を感じた。ディストリビューションはUbuntuを選択。

プロジェクトビルド

途中でインストールした、 Windows Terminal のフォントレンダリングが綺麗でなんか本格的に移行しても良い気がしてきたのがこの辺り。githubからプロジェクトをcloneしてきて、composer installnpm ciが重い。いや、きっとネットワークのせいだWSL2は悪くないと言い聞かせながらnpm run buildを実行。・・・全然終わらない。その時の記録がこれ。

# WSL2(9p) 
$ time npm run build
real    10m31.614s
user    7m10.199s
sys     1m1.781s

これは仕事にならない、話が違うではないか。10分以上かかってる一方ネイティブなLinux環境では40秒ちょっと。

# manjaro 
$ time npm run build
Executed in   42.07 secs   fish           external 
   usr time   72.09 secs  353.00 micros   72.09 secs 
   sys time    2.36 secs  173.00 micros    2.36 secs

原因調査

あまりに酷いので何か自分の設定が悪いのかなど調べるもわからず、次の記事にたどり着く。 Windows10 Insider 18917 で WSL2 が来たので雑にボリュームマウントのベンチマークとってみた(追記あり) - Qiita

なるほど、WSL2でWindowsとLinuxが共有するディスクスペースは9pというファイルフォーマットでLinux側からマウントしていて、そこへのI/Oは遅いらしい。(どこかで聞いたことある話)

  • / 以下は ext4 でマウントされている
  • WSL のときと違ってちゃんとした? cgroup が動いている(Linuxカーネルが動いてるんだからまぁそうだわな)
  • Windowsの領域は /mnt/c にマウントされていて(これはWSL同様)、9p という方式でマウントされている

mount の状態 - @kunit

ベンチマーク

Windows側と共有しているユーザ直下の9pフォーマットの領域

snize@DESKTOP-CS7E8BJ:/mnt/c/Users/snize$ time dd if=/dev/zero of=test bs=1k count=100000
100000+0 records in
100000+0 records out
102400000 bytes (102 MB, 98 MiB) copied, 16.501 s, 6.2 MB/sreal    0m16.514s
user    0m0.309s
sys     0m3.344s

Ubuntuのホームディレクトリでext4フォーマットの領域

snize@DESKTOP-CS7E8BJ:~$ time dd if=/dev/zero of=test bs=1k count=100000
100000+0 records in
100000+0 records out
102400000 bytes (102 MB, 98 MiB) copied, 0.176402 s, 580 MB/sreal    0m0.178s
user    0m0.030s
sys     0m0.147s

0m16.514 vs 0m0.178s …約90倍差がある。ということは、ext4の領域にプロジェクトファイル置けば良いのでは!?

ext4領域で再度プロジェクトビルド

# WSL2(ext4) 
$ time npm run build
real    1m40.553s
user    0m0.648s
sys     0m0.073s

遅い、Nativeな環境に比べて1分遅い。いや、開発中の差分ビルドだったら初回ちょっと我慢すれば、あるいはマシンスペックが上がれば我慢できるかも。というような微妙な着地を見ました。

課題

多くのWindowsのGUIアプリはLinux側のext4領域を触りに行けない(?)ので、Linux側からコードを触らないといけない。VSCodeの場合はRemote Developmentで接続できるらしいので問題無さそう。自分はJetbrainsラバーなので、LinuxのGUIアプリが普通に使えるようになったらこの課題は解決するかも。

まとめ

なんか最近面白さもなければ、品質も高くない(ビジュアル除く)macOSに比べれば今後、このパフォーマンスの解決やLinuxのGUIアプリの動作など、Windows10は期待でいっぱいなので引き続きManjaroを使いつつ状況を見ていきたい。(UbuntuではなくManjaro入れたい)

以上、ManjaroのTyporaより。

Tags:

Tomotsugu Kaneko

Webのフロントエンドからバックエンド、プロトタイピングからプロダクションまで。定額の開発サービスも。詳しくはAboutページで。