🐋

M1 Mac における Lima + Docker のベンチマーク

2022/02/21に公開

背景

Lima は主に Mac 向けに Linux の VM を構築できる大変便利な CLI です。特に、Intel on ARM や ARM on Intel など、CPU のアーキテクチャをまたいだコンテナの実行が可能な点が特に便利です。

しかし、Docker Desktop の乗り換え先として Lima を選択したところ、ARM on Intel なコンテナ内で yarn install が成功しないという問題に遭遇して Scrap にまとめていました。

https://zenn.dev/odan/scraps/f4141ef5b9dce5

この記事ではもう少し真面目にベンチマークを計測したのでその結果を共有します。

リポジトリ

https://github.com/odan-sandbox/lima-docker-benchmark

ベンチマーク

  • unix-bench
  • 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.1Improve x86_64 emulation on aarch64 platform という変更が入ったので 2022-02-21 時点での latest

結果

生の結果はリポジトリの 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 variablesFile 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