環境
以前 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 install
とnpm 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 という方式でマウントされている
ベンチマーク
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より。