3年ぶりにMacでDocker使ったらやっぱり遅いじゃねーかということで色々調べてみている。今回はWebアプリのパフォーマンスについて調査。
ちなみにDocker for Mac
ではなく、正しくはDocker Desktop for Mac
ですね。名称が変わってたのね。
Webアプリの代表ということでLaravelを使ってDocker Desktop for Mac
のパフォーマンスをチェック。方法としてはデフォルトインストール状態のLaravelに対してsiege
を使って10秒間のベンチーマーク負荷をかけてRequest完了できた総数で比較します。小数点以下は四捨五入で切り捨てます。
※例によって、私のMac Book Pro上で実行してますので、相対的なパフォーマンス比較としてご覧ください。
ベンチマーク結果
siege -b -t 10s http://localhost
gRPC FUSE
cached | delegated | ヒント指定なし | volumeマウント無し |
---|---|---|---|
512 | 509 | 520 | 1522 |
osxfs
cached | delegated | ヒント指定なし | volumeマウント無し |
---|---|---|---|
682 | 590 | 63 | 1364 |
Ubuntu上のDocker (Virtualbox)
Ubuntu |
---|
2186 |
まとめ
今回は、Docker社のリリースとか何も見ずにパターン分けしてベンチマークを取ってみたのですが、驚きの結果でした。
gRPC FUSE
はvolumeマウントのヒント有無に関わらずパフォーマンスが一定でした。osxfs
はヒント有無によるパフォーマンス向上が顕著です。確かに現段階ではosxfs
でcached
を使うのが最も効率が良いのですが、総合的にはgRPC FUSE
の方が優れていそうだなという感覚です。
いずれのファイルシステムでも、もちろんvolumeマウント無しが最も速度に優れています。この結果を見ると、MySQLのデータとかはしょうがないですが、Docker Desktop for Mac
ではファイルシステムとしてgRPC FUSE
を選択して、アプリケーションのファイル群はvolumeマウント無しでmutagenとかを使って同期するのが一番ストレスが無いかもしれません。
なお、どう頑張ってもVagrantで立ち上げたUbuntu上のDockerの方が断然速いというのも、やはり面白いですね。
というわけで、gRPC FUSE
はおそらく有望な次世代ファイルシステムで、現段階ではcached
より若干劣る性能だけど、総合力では有望だなという感じでした。
次回は、Docker社からのリリースや、他の開発者が発表しているベンチマーク等を元にしてgRPC FUSE
をもう少し掘り下げてみようと思います。