M1 Mac における Lima + Docker のベンチマーク
背景
Lima は主に Mac 向けに Linux の VM を構築できる大変便利な CLI です。特に、Intel on ARM や ARM on Intel など、CPU のアーキテクチャをまたいだコンテナの実行が可能な点が特に便利です。
しかし、Docker Desktop の乗り換え先として Lima を選択したところ、ARM on Intel なコンテナ内で yarn install が成功しないという問題に遭遇して Scrap にまとめていました。
この記事ではもう少し真面目にベンチマークを計測したのでその結果を共有します。
リポジトリ
ベンチマーク
- unix-bench
- UnixBench
- ベンチマークについてググると定番らしいので選びました
- UnixBenchでベンチマーク - IDCF テックブログ
- speed-test
- speed-test
- ネットワークに関する計測をするためにシュッと試せそうなツールを探して見つけました
- speedtest.net のラッパーらしく、中身はhttps://www.speedtest.net/ のバイナリ実行する仕組みです
- wget-gh-binary
- wget で cli/cli のバイナリをダウンロードするだけのケースです
環境
MacBook Pro(14 inch, 2021)
CPU: Apple M1 Pro
Memory: 32 GB
Docker コンテナを動かす環境は次の通りです
- Docker Desktop
- Lima ARM64 (0.8.0)
- Lima AMD64 (0.8.0)
- Lima AMD64 (0.8.3)
-
0.8.1 で
Improve x86_64 emulation on aarch64 platform
という変更が入ったので 2022-02-21 時点での latest
-
0.8.1 で
結果
生の結果はリポジトリの logs ディレクトリにあります。
それぞれの指標について、Docker Desktop を1としたときの、各環境での値を整理しました。
Dhrystone 2 using register variables
は CPU の演算能力に関するベンチマーク、File Copy 4096 bufsize 8000 maxblocks
はファイルのコピーに関するベンチマークです。
Docker Desktop | Lima ARM64 (0.8.0) | Lima AMD64 (0.8.0) | Lima AMD64 (0.8.3) | |
---|---|---|---|---|
Dhrystone 2 using register variables (Index) | 1.000 | 1.010 | 0.042 | 0.066 |
File Copy 4096 bufsize 8000 maxblocks (Index) | 1.000 | 1.724 | 0.017 | 0.140 |
wget-gh-binary (MS/s) | 1.000 | 1.052 | 0.447 | 1.426 |
考察
ARM64 な Lima の Docker コンテナは Docker Desktop と遜色ないパフォーマンスを発揮しています。
AMD64 における Dhrystone 2 using register variables
と File Copy 4096 bufsize 8000 maxblocks
はどちらも 0.8.3 の Lima の方がパフォーマンスが良いです。しかし、Docker Desktop と比べるとパフォーマンスの差は大きいです。
wget-gh-binary
は5回計測した平均を比べていますが、実行するタイミングによってばらつきが大きそうです。AMD64 の 0.8.0 から 0.8.3 でパフォーマンスがかなり改善していますが、原因はよくわかっていません。
次試す
- Intel Mac で AMD64/ARM64 のアーキテクチャの上で Docker コンテナのパフォーマンスを調査する
- Fast mode でのパフォーマンスを調査する
Discussion