Tadashi Nemoto
Published on

CircleCI M1 Mac performance comparison

Authors

CircleCI M1 Mac comparison

This article presents a performance comparison of the M1 Mac resource class released by CircleCI.

Build on Apple silicon with M1 support for CI/CD pipelines | CircleCI


Target application

GitHub - tadashi0713/circleci-duckduckgo-ios: CircleCI Demo of DuckDuckGo iOS Application

This repository was created by Forking the following DuckDuckGo iOS app (browser app).

GitHub - duckduckgo/iOS: DuckDuckGo iOS Application

This demo has the following 3 jobs:

  • unit_test(Running unit tests)
  • integration_test(Running integration tests / UI tests)
  • build(Building without code signing)

This is the CircleCI config file(.circleci/config.yml).

version: 2.1

orbs:
  ruby: circleci/ruby@2.0.0
  macos: circleci/macos@2.3.4

executors:
  gen2_medium:
    macos:
      xcode: 14.2.0
    resource_class: macos.x86.medium.gen2
  m1_large:
    macos:
      xcode: 14.2.0
    resource_class: macos.m1.large.gen1

jobs:
  unit_test:
    parameters:
      executor:
        type: executor
    executor: << parameters.executor >>
    steps:
      - macos/preboot-simulator:
          device: iPhone 14
          version: '16.2'
      - checkout
      - run: git submodule update --init --recursive
      - ruby/install-deps
      - run: bundle exec fastlane unit_tests
      - store_test_results:
          path: fastlane/report.xml

  integration_test:
    parameters:
      executor:
        type: executor
    executor: << parameters.executor >>
    steps:
      - macos/preboot-simulator:
          device: iPhone 14
          version: '16.2'
      - checkout
      - run: git submodule update --init --recursive
      - ruby/install-deps
      - run: bundle exec fastlane integration_tests
      - run: bundle exec fastlane atb_uitests
      - store_test_results:
          path: fastlane/report.xml

  build:
    parameters:
      executor:
        type: executor
    executor: << parameters.executor >>
    steps:
      - checkout
      - run: git submodule update --init --recursive
      - ruby/install-deps
      - run: bundle exec fastlane build

workflows:
  m1_large_workflow:
    jobs:
      - unit_test:
          executor: m1_large
      - integration_test:
          executor: m1_large
      - build:
          executor: m1_large

  gen2_medium_workflow:
    jobs:
      - unit_test:
          executor: gen2_medium
      - integration_test:
          executor: gen2_medium
      - build:
          executor: gen2_medium

Medium Gen 2

  • Intel processor
  • 4 CPU @ 3.2 GHZ
  • 8 GB RAM

Workflow duration

Gen2 Workflow

CPU/RAM usage

Gen2 CPU RAM Usage

M1 Large

  • Apple silicon
  • 8CPU
  • 12GB RAM

Workflow duration

M1 Workflow

CPU/RAM usage

M1 CPU RAM Usage