はじめに

猫大好きエンジニアの福田です。
だいぶ暖かくなってきました。
暖かくなってくると猫ちゃんたちが一緒に寝てくれず寂しい今日この頃です。

さて、皆さん開発する端末は何をお使いですか?

弊社では開発端末を選択することができます。私は大学時代からずっとMacを利用し慣れていましたので当時最新のM1のMacBook Proを支給していただきました。
Appleシリコン搭載のMacは初めてだったので、Docker利用時にアーキテクチャの違いで動かなかったり、特に、DockerでIntelベースのイメージのエミュレートが遅いのがプチストレスでした。

そんなプチストレスを抱えていた中、Docker Desktop for Mac v4.16.0 が 2023-01-12 にリリースされ、Beta機能でIntelベースのイメージのエミュレートにRosettaを利用できるようになっていました!

リリースノートより引用

New Beta feature for MacOS 13, Rosetta for Linux, has been added for faster emulation of Intel-based images on Apple Silicon.

macOS 13 Ventura で Rosetta for Linux という機能が追加されたようで、それを利用しているようです。

Rosettaに変更するとどれくらい早くなるのだろうか?と期待をしつつ、今回は、Rosettaを利用する設定方法と、今まで利用しているQEMUに比べてどれくらい早くなるのかを計測していきます。

前提条件

Docker Desktop for Mac v4.16よりも前のバージョンの方は、v4.16以上にアップデートが必要です。

  • Apple シリコン搭載(M1/M2)のMacを利用している
  • macOS 13 Venturaを利用している
  • Rosettaをインストールしている
  • Docker Desktop for Mac v4.16 以降をインストールしている

注意事項

Beta機能ですので、うまく動かなかったり不具合等がある場合があります。利用時は注意してください。

設定手順

  1. Docker Desktop for Mac を起動します。
  2. メニューバーからDockerのアイコンをクリックし、「Settings...」をクリックします。
    2023-05-01_11.09.13
  3. Generalメニューの「Use Virtualization framework」にチェックを入れます。
    (Choose file sharing implementation for your containers で VirtioFS を選択している場合は自動でチェックが入ります)
    2023-05-01_11.11.02-2
  4. Features in development メニューの「Use Rosetta for x86/amd64 emulation on Apple Silicon」にチェックを入れます。
    ※Beta機能ですので、うまく動かなかったり不具合等がある場合がありますので、利用時は注意してください。
    2023-05-01_11.10.14-3
  5. ウインドウ右下の「Apply & restart」をクリックし、設定の反映と再起動を実行します。

以上で、Rosettaへの変更が完了しました。

ベンチマーク

QEMUと比べてRosettaがどれくらい早いのか計測してみました。

計測ツール

Amazon Linux 2 のIntelイメージで以下3種類のベンチマークを実行します。

計測端末・環境

  • 端末スペック
    • MacBook Pro 14インチ、2021
    • チップ:Apple M1 Pro
    • メモリ:16 GB
    • macOS:Ventura 13.2.1
  • Docker Desktop
    • バージョン:4.18.0 (104112)
    • リソース設定
      2023-05-01_11.28.05

結果

以下表が各ベンチマークツールの実行結果です。
QEMU, Rosettaでそれぞれ3回ずつ実行しその平均値を記載しました。
(thread数やcpu数は1で計測)

Benchmark コマンド QEMU Rosetta 高速化 集計した値
UnixBench ./Run -i 3 -c 1 242.83 444.70 約1.83倍 System Benchmarks Index Score を集計
sysbench sysbench --threads=1 cpu run 295.51 6684.66 約22.6倍 events per second を集計
sysbench sysbench --threads=1 memory run 8535515.67 61985060.00 約7.26倍 Total operations を集計
7zip 7z b -mmt1 1626 4179 約2.57倍 Tot を集計

※ベンチマークの結果や計測時のDockerfileやスクリプト等はリポジトリにプッシュ次第、追記します。

まとめ

各ベンチマークで測定方法などが異なるためばらつきはありますが 、全てのベンチマークでRosettaの方が高速であることがわかりました。
また、ベンチマーク上の結果だけでなく、実際に開発時でもDockerfileのビルドやWebpackのビルドなどの時間が短縮され、体感としても高速化が感じられました。
まだBeta機能でありますが、Appleシリコン搭載のMacでIntelベースのイメージをよく利用する方は一度設定してみると良いかと思います。

今回はIntelベースイメージのエミュレートを高速化する方法についてご紹介いたしました。
どなたかの参考になれば幸いです。