エンジニアの片岡です。
先日、Docker Desktopの最新版4.19がリリースされました。 macOSでDockerコンテナとホストOSの間のネットワークが5倍高速になったとの情報を見て、もしそのような高速化がされているなら嬉しいなということで、早速試してみました。
また、昨年12月にリリースされた4.15で、コンテナとホストOS間のファイル共有実装として新たなVirtioFSというものが使用可能になりました。 既存のgRPC FUSEから新しいVirtioFSに変えることで高速化するとのことです。 これも合わせて試したいと思います。
環境
MacBook Pro(13-inch, 2020), 2.3 GHz クアッドコアIntel Core i7, メモリ32GB, macOS 12.6.3 Docker for Mac Resource設定: CPUs 8, Memory 20GB, Swap 1GB
確認方法
当社の実際のプロダクトで、フロントエンド(Angular / TypeScript)のビルドを行ってその時間を計測します。 大量にあるnode_modules内のファイルの読み込みと、最終的にビルドした結果をファイルに書き込む処理が行われるので、ファイルI/Oのパフォーマンスが処理時間に直結すると予想しました。
結果
Dockerバージョン | ファイル共有実装 | 処理時間(3回) |
---|---|---|
4.17 | gRPC FUSE | 平均189s(191s, 188s, 188s) |
4.17 | VirtioFS | 平均206s(195s, 198s, 227s) |
4.19 | gRPC FUSE | 平均200s(197s, 197s, 207s) |
4.19 | VirtioFS | 平均183s(163s, 179s, 208s) |
一応、4.19&VirtioFSが最速という結果にはなりましたが、ブレもあり、あまり大きくは変わらないという結果に・・・ 5倍高速という触れ込みはもちろん一番良い結果の出るベンチマークでの数字だとは思いますが、ちょっと期待外れでした。
ただ、その後一度gRPC FUSEに戻してまたVirtioFSに変更し、計測してみると135s, 139s, 142sという上記よりもかなり高速な結果も出たので、ちょっとブレが大きいなという印象でした。
M2 Macではどうか
M2 MacBook Proではどうかと試した所、下記の結果になりました。
Dockerバージョン | ファイル共有実装 | 処理時間(3回) |
---|---|---|
4.15 | gRPC FUSE | 平均62s(74s、58s、54s) |
4.15 | VirtioFS | 平均43s(47s, 40s, 42s) |
4.19 | gRPC FUSE | 平均61s(69s, 63s, 51s) |
4.19 | VirtioFS | 平均49s(45s, 48s, 54s) |
※前述のIntelでの検証時はバージョンアップ前が4.17でしたがこちらは4.15
4.15と4.19の差はほぼなし。gRPC FUSEよりVirtioFSの方が、5倍とはいかないものの明らかに速いという結果になりました。
M2の方がIntelより3〜4倍速いですね。私のメインマシンはまだIntelなのですが、早くM2に移行したいなと思いました・・