12
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

DMM WEBCAMP mentor Advent Calendar 2022

Day 8

【Mac】Finchの速さを体感してみよう

Last updated at Posted at 2022-12-07

※ 本記事はDMM WEBCAMP mentor Advent Calendar 2022 8日目のエントリーです。

先日の「AWS re:Invent 2022」でFinchというDocker Desktop代替のオープンソースクライアントが発表されました。

OSSなのでDocker Desktopの有料化や値上げ対策としても優秀ですし、何よりLimaベースなのでMacOSでも高速に動作することが魅力です。というか現在はMacOSでのみ動作するようです。

本記事ではそんなFinchを用いて、Dockerからどのくらい早くなったのかを検証します。

前提

以下のMacBook 14インチを使用しています。

Model Name: MacBook Pro
Model Identifier: MacBookPro18,3
Model Number: MKGP3J/A
Chip: Apple M1 Pro
Total Number of Cores: 8 (6 performance and 2 efficiency)
Memory: 16 GB

Finchのインストール

Githubのリリースページから自分の環境に適したアーキテクチャの.pkgファイルをダウンロードして展開します。

僕はM1 Proを使用しているためaarch64の方です。

インストールが完了したら、以下のコマンドを打って初期設定をします。

$ finch vm init

Dockerを使う際にはDocker Desktopが立ち上がってなければならないように、Finchを使う際にもFinch環境が立ち上がっている必要があります。

init後は自動で環境が立ち上がっているので問題ありませんが、PC本体の再起動等は

$ finch vm start

でFinch環境が起動します。

インストールできているか確認するには、以下のコマンドがお勧めです。

$ finch run --rm public.ecr.aws/finch/hello-finch
public.ecr.aws/finch/hello-finch:latest:                                          resolved       |++++++++++++++++++++++++++++++++++++++|
index-sha256:a71e474da9ffd6ec3f8236dbf4ef807dd54531d6f05047edaeefa758f1b1bb7e:    done           |++++++++++++++++++++++++++++++++++++++|
manifest-sha256:705cac764e12bd6c5b0c35ee1c9208c6c5998b442587964b1e71c6f5ed3bbe46: done           |++++++++++++++++++++++++++++++++++++++|
config-sha256:6cc2bf972f32c6d16519d8916a3dbb3cdb6da97cc1b49565bbeeae9e2591cc60:   done           |++++++++++++++++++++++++++++++++++++++|
elapsed: 0.9 s                                                                    total:   0.0 B (0.0 B/s)

                            @@@@@@@@@@@@@@@@@@@
                        @@@@@@@@@@@@    @@@@@@@@@@@
                      @@@@@@@                  @@@@@@@
                    @@@@@@                        @@@@@@
                  @@@@@@                            @@@@@
                 @@@@@                      @@@#     @@@@@@@@@
                @@@@@                     @@   @@@       @@@@@@@@@@
                @@@@%                     @     @@            @@@@@@@@@@@
                @@@@                                               @@@@@@@@
                @@@@                                         @@@@@@@@@@@&
                @@@@@                                  &@@@@@@@@@@@
                 @@@@@                               @@@@@@@@
                  @@@@@                            @@@@@(
                   @@@@@@                        @@@@@@
                     @@@@@@@                  @@@@@@@
                        @@@@@@@@@@@@@@@@@@@@@@@@@@
                            @@@@@@@@@@@@@@@@@@


Hello from Finch!

Visit us @ github.com/runfinch

Finch(小鳥)のAAが表示されたらインストール成功です。

今実行したfinch run --rm public.ecr.aws/finch/hello-finchのように、Docker Desktopを使っていた際のコマンドのdocker部分をfinchに置き換えれば、基本的にはDockerで使用できていた全てのコマンドが使用できるそうです。

ベンチマーク

以下の2ファイルを用意します。

compose.yml
services:
  bench:
    image: python:3.11.0-slim-bullseye
    volumes:
      - .:/app
    command: python /app/main.py
main.py
def main(n: int):
    with open("/tmp/log.txt", "w") as f:
        f.write(f"Called: n = {n}")
    if n < 3:
        return 1
    return main(n-1) + main(n-2)


if __name__ == "__main__":
    print(main(26))

フィボナッチ数列の第26項を計算するコードです。より実際のアプリケーションに近いベンチマークができるように、計算中の項を/tmp/log.txt書き込むようにしました。実はこれが無いとDockerとFinchで差はほとんど出ません。ファイルの書き込みは実際のアプリケーションでは、アプリケーションのビルドや、ライブラリのインストールに対応します。

$ time docker compose up
$ time finch compose up

で時間を計測しました。ただし、各コマンドは2回ずつ実行し、それぞれ2回目のデータを計測結果として採用しました(1回目はビルドが含まれるため)。

計測結果

Docker Finch
27.076[s] 21.078[s]

Dockerに比べてFinchの方が、22%速く処理を終えました。今回のコードよりも読み書きの部分の比重が大きくなってくると、この差は更に広がります。

例えば/tmp/log.txtを開いて計算中の項を書き込む処理をコピペ3倍多くすると、

Docker Finch
1:20.29[s] 58.385[s]

といった具合に27%程度速くなります。

という訳でこの結果のパーセンテージに全く意味はないのですが、読み書きを頻繁に行う場合にはFinchの方が速くなるということだけ知ってもらえれば大丈夫です。

余談

手元で試したところ

  • GCCを使ったコンパイル
  • マウント中のファイルの読み書き

辺りはむしろDockerの方が1.5倍程度速かったです。Limaに詳しい人ならこれもFinchの方が速くできそうな気はしているのですが、その辺りに気を使ってまでFinchを使うメリットは、Docker Desktopと違って企業利用でも無料なことくらいな気はしています。

結論

金銭面を除けば、まだDocker Desktopを使ってて良いんじゃない......? と思います。

12
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?