Если вы интересуетесь разработкой под Android, то, скорее всего, слышали о Telegram-канале «Android Broadcast» с ежедневными новостями для Android-разработчиков и одноимённом YouTube-канале. Этот пост — текстовая версия видео.

Выбор техники — всегда непростая задача, а новые процессоры Apple смогли здорово встряхнуть рынок и усложнить выбор. Какую модель MacBook выбрать, и насколько одна лучше другой, понять сложно. Искать качественные тесты — то ещё развлечение.

В этой статье я сделаю правильное сравнение скорости сборки реальных Android-проектов на различных MacBook, а также порекомендую, какой из них стоит выбрать в начале 2022 года.

Компьютеры для сравнения

Для сравнения я выбрал последние MacBook Pro на Intel, а также современные MacBook на основе M1. Также добавил свой старый iMac 27" Late 2015, чтобы наглядно увидеть прогресс от обновления.

  1. iMac 27" Late 2015 Intel Core i7 6700K | 24 GM RAM

  2. MacBook Pro 16" 2019 i7 9750H 6 CPU/12 Потоков | 16 GB RAM

  3. MacBook Pro 16" 2019 i9 9880H 8 CPU/16 Потоков | 32 GB RAM

  4. MacBook Air 2020 M1 | 16 GB RAM

  5. MacBook Pro 14" 2021 M1 Pro 8 CPU | 16 GB RAM

  6. MacBook Pro 14" 2021 M1 Pro 10 CPU | 32 GB RAM

  7. MacBook Pro 16" 2021 M1 Pro 10 CPU | 32 GB RAM

  8. MacBook Pro 16" M1 Max | 32 GB RAM

Методология проведения тестов

Обеспечить полностью равные условия для всех компьютеров непросто, но я постарался создать идеальные условия:

  • Использовать JDK 11 и обновить ее до последней ревизии.

  • Использовать Gradle 7.3.3 для сборки проекта.

  • Отключить внешние дисплеи.

  • Подключить компьютер к питанию.

  • По-максимуму закрыть все программы, включая фоновые.

  • Закрыть Android Studio!

  • Включить производительный режим в настройках (если такой имеется).

  • Ноутбук ставить на плоскую твердую поверхность, чтобы не было проблем с забором воздуха и охлаждением.

  • Не трогать компьютер во время теста.

  • Отключить индексацию Spotlight или добавить папку с проектами для тестов в исключения.

Если вы знаете какие-то дополнительные условия, которые стоит соблюдать при проведении бенчмарка, буду рад прочитать их в комментариях к статье.

Тесты проводились с помощью утилиты Gradle Profiler в режиме benchmark, предназначенной для замера скорости сборки проектов. В результат записывалось среднее значение по десяти тестовым прогонам — после двух сборок для прогрева, которые не шли в зачёт.

Для каждого проекта был создан сценарий для запуска теста (файл performance.scenarios), а все проекты собраны в отдельном репозитории.

Тесты

Конкретные цифры приведены в таблице ниже.

TiVi 0.6.3

TiVi Github

TiVi — небольшой проект для отслеживания прогресса TV-шоу на основе trakt.tv.

Стек технологий: Jetpack Compose, kapt, Kotlin, Dagger, Hilt, Android Arhitecture Components, Firebase, Google Services и др.
Количество строк Kotlin-кода: 15 422
Подключенные Gradle-плагины: Android, Kotlin, Crashlytics, Hilt, Google Services, Kotlin Extentions, Spotless, Gradle Depedency Updates
Количество модулей: 25

Проект небольшой, но даже тут Intel значительно отстал от M1. M1 Pro/Max вырвался вперёд всего на одну секунду от M1. Из результатов тестов понятно одно: даже на таком маленьком проекте уже видно, что Apple Silicon значительно быстрее Intel Core 9 поколения.

Скорость сборки TiVi 0.6.3
Скорость сборки TiVi 0.6.3

ExoPlayer r.2.16.1

ExoPlayer — популярный медиаплеер, который используется на уровне Android-приложения.

Количество строк Java-кода: 224 638
Количество модулей: 35

Следующий проект демонстрирует преимущество множества производительных ядер в M1 Pro/Max. Получился существенный отрыв в результате: M1 справился за 39,4 секунд, а M1 Pro/Max с 10 ядрами — за 28 секунд. Лучший Intel справился за 43,9 секунд.

Скорость сборки ExoPlayer r2.16.1
Скорость сборки ExoPlayer r2.16.1

Focus 95.2.0

Focus — специальная приватная и безопасная версия Web-браузера Firefox.

Количество строк Kotlin-кода: 19 066
Количество строк XML: ~30 тыс
Количество модулей: 3

Бенчмарк Focus демонстрирует уже выявленные закономерности, но показывает, что восьмиядерная версия M1 Pro не отстаёт значительно от полной версии M1 Pro или M1 Max.

Скорость сборки Firefox Focus 95.2.0
Скорость сборки Firefox Focus 95.2.0

Firefox 95.2.0

Firefox — полная версия Web-браузера Firefox.

Количество строк Kotlin-кода: ~97 тыс
Количество строк XML: ~100 тыс
Количество модулей: 4

Скорость компиляции Kotlin-кода на порядок ниже, чем Java. Тем не менее, процессоры Apple показывают закономерное ускорение компиляции. Вот только разница между M1 Pro с 8 и 10 ядрами CPU всё так же незаметна. Как так?

Скорость сборки Firefox 95.2.0
Скорость сборки Firefox 95.2.0

Signal 5.28.8

Signal — популярный мессенджер, альтернатива Telegram.

Количество строк Java-кода: 248 305
Количество строк Kotlin-кода: 42 476
Количество строк XML: ~270 тыс
Количество модулей: 13

Наконец-то видно, что 8 ядер M1 Pro медленнее, чем полная версия процессора. В остальном — лишь подтверждение выводов, полученных в предыдущих проектах.

Скорость сборки Signal Android 5.28.8
Скорость сборки Signal Android 5.28.8

Telegram 8.2.1

Telegram Android GitHub — популярный мессенджер. Проект написан довольно специфично: нет Kotlin, весь UI в Java-коде, нет генерации кода с помощью apt или kapt, используется NDK.

Количество строк Java-кода: 700 098
Количество строк С-кода: 988 320
Количество строк XML: ~40 тыс
Количество модулей: 1

Telegram Android — самый крупный из тестируемых проектов и наглядно показывает разницу между процессорами. Бенчмарк удивил: это единственный из тестируемых проектов, в которых i7 и i9 в MacBook Pro 2019 года смогли собрать проект быстрее, чем Apple M1 в MacBook Air. Конечно же, мне стало интересно, почему так вышло, и я полез разбираться.

Скорость сборки Telegram Android 8.2.1
Скорость сборки Telegram Android 8.2.1

Причина оказалась в CMake и всего тулинга для компиляции нативного кода, которого в Telegram достаточно. На Apple M1 компиляции запускается c использование Rosetta 2 — в Android NDK на момент написания статьи его ещё не успели перевести на поддержку Apple Silicon. Хотя CMake, начиная с версии 3.19, и другие инструменты эту поддержку уже имеют. Подробности здесь.

Получается, в будущем мы получим значительный буст: как минимум Apple M1 имеет шансы обогнать i7 и, чем чёрт не шутит, даже i9. Так что ждём, когда допилят тулинг. Из теста вы также можете понять насколько хорошо M1 Pro/Max справляется с выполнением неоптимизированного для него софта, что способен обогнать i9 9 поколения.


Результаты сборки приложений. Меньше — лучше
Результаты сборки приложений. Меньше — лучше

Выводы по итогам тестов

Intel Core пока рано списывать со счёта, если в проекте много нативного кода. Во всех остальных сценариях смысла в процессорах Intel нет: они проигрывают даже самому базовому Apple M1. Со временем тулинг допилят, и преимущества процессоров Apple станет ещё очевиднее.

MacBook Air на M1 подойдет для большинства мобильных разработчиков. Только советую брать вариант с 16 ГБ оперативной памяти. С ним можно разрабатывать под Android и iOS, а также попробовать мультиплатформенную разработку (Kotlin Multiplatform, Flutter). Большое преимущество — отсутствие кулеров, что делает его тихим, но порой горячим (при очень долгой сборке).

Если вы работаете с большими проектами и хотите получить максимальные возможности либо вам нужно больше 16 ГБ оперативной памяти, тогда рекомендую обратить внимание на MacBook Pro с процессором M1 Pro в вариации на 10 ядер. 16-дюймовая версия будет быстрее и тише.

M1 Max и M1 Pro не показал существенной разницы в результатах. Max-версию стоит брать для разработки, только если нужно 64 ГБ памяти. Покупать его нужно только в корпусе 16 дюймов: в 14-дюймовой версии стоят меньшие частоты у GPU, а процессор начнёт быстрее тротлить из-за нагрева и сильнее шуметь. Не стоит забывать, что и размер батареи в 14-дюймовой версии меньше: время автономной работы даже без сложных задач будет меньше по сравнению с 16-дюймовой версией.

Сравнение с Ryzen и Intel 12 поколения

Я хочу продолжить сравнение и оценить скорость компиляции на современных процессорах от AMD и Intel, но пока возможности это сделать нет. Буду рад, если вы присоединитесь к тесту, заполнив форму. Я уже успел прогнать тесты на Ryzen 5900X, и его скорость впечатлила, но это уже тема отдельной статьи...

Комментарии (27)


  1. gizur
    20.01.2022 19:24
    +3

    Было бы очень интересно посмотреть на оценку скорости на современных процессорах AMD/Intel - поможет таким, как я, кто думает об апгрейде.


    1. kirich1409 Автор
      20.01.2022 19:25
      +1

      И самому интересно провести такой тест, но без помощи сообщества не получтися его сделать (


      1. Beanut
        20.01.2022 20:26
        +1

        Вы же уже делали подобную анкету в телеграмме и вам предлагали помощь, но вы отказались, под предлогом что не сможете доверять всем подряд, а тут опять проводите точно такой же опрос и вам снова якобы "нужна помощь".


        1. Surf_Studio
          20.01.2022 20:29

          <>


        1. kirich1409 Автор
          20.01.2022 20:31

          Если не отписались вам, то это не значит что мне не помогали другие ребята. 5 из 8 компьютеров в этом тесте были не мои. Прогонять один и тот же тест у всех без контроля условий - это просто трата времени. Если вы очень хотите помочь с тестами Windows/Linux, то пишите мне в личку.


    1. inv2004
      20.01.2022 21:46
      +1

      Не очень понятно о какой оценки производительности речь, если о компиляции, то, наверное, я могу пропиарить свой репозиторий: https://github.com/inv2004/bench_nim_build

      Там собранаа довольно разнообразная статистика, включая m1 и m1 max. Можно запустить у себя и сравнить с остальными конфигурациями


      1. kirich1409 Автор
        20.01.2022 21:48
        +1

        Буду только рад помочь. Завтра изучу и прогоню тесты.


      1. kirich1409 Автор
        21.01.2022 09:23
        +1

        Тест провел. M1 Max показал лучшие результаты, немного опередив M1 Pro


        1. inv2004
          21.01.2022 12:27

          Спасибо. Вижу - ракета


  1. dimakey
    20.01.2022 19:24
    +1

    del


    1. kirich1409 Автор
      20.01.2022 19:27

      14" стабильно хуже собирает. Это логично так как там выше нагрев и меньше сделаны частоты по умолчанию. В 3D тестах 16" M1 Max 24 GPU работает также как 14" M1 Max 32 GPU, а также меньше шумит.


  1. UbuRus
    20.01.2022 19:44
    +6

    Графики все-таки нужно с 0 делать, почему-то только у tivi это так, а дальше нужно напрягать мозг и смотреть на цифры, потому что картинка теряет смысл

    А вообще вывод который я для себя сделал: самый cost-effective mac - air, собственно с него и пишу. Скажу еще что после mbp 16" i7 производительность air порадовала.


    1. kirich1409 Автор
      20.01.2022 19:45
      +2

      Все верно! Air хорошая машинка для большинства разработчиков будет


    1. kirich1409 Автор
      21.01.2022 05:09
      +2

      Обновил графики


  1. Alex_ME
    20.01.2022 21:15
    +2

    Telegram Android — самый крупный из тестируемых проектов и наглядно
    показывает разницу между процессорами. Бенчмарк удивил: это единственный
    из тестируемых проектов, в которых i7 и i9 в MacBook Pro 2019 года
    смогли собрать проект быстрее, чем Apple M1. Конечно же, мне стало
    интересно, почему так вышло, и я полез разбираться.

    ![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/7b9/b11/f39/7b9b11f39f66b2f3f02b69dadc7863f6.jpg

    Причина оказалась в CMake и всего тулинга для компиляции нативного кода,
    которого в Telegram достаточно. На Apple M1 компиляции запускается c
    использование Rosetta 2 — в Android NDK на момент написания статьи его ещё не успели перевести на поддержку Apple Silicon.

    Быстрее, чем M1, но медленнее, чем M1 MAX и PRO, которые вроде как тоже требуют Rosetta? Ваше описание очень запутывающее, можете разъяснить


    1. kirich1409 Автор
      20.01.2022 21:46
      +1

      Как минимум вы можете взяглунть на визаулизацию. M1 Pro и Max, смогли бысть быстрее даже с выполнением части сборки Telegram через Rosetta 2, за счет мощных ядер, которые даже в режиме совместимости оказались быстрее + Java код они тоже собрали быстрее.


  1. Sergdesign
    20.01.2022 23:57
    +1

    Есть парк машин на Ryzen 9 5950X , и в ближайшем будущем добавятся i9 12900K. Готов как-то поучаствовать в тестах.


    1. kirich1409 Автор
      21.01.2022 09:20

      Напишу в личку


    1. inv2004
      21.01.2022 13:45

      Если не затруднит, было бы очень интересно: https://habr.com/ru/company/surfstudio/blog/646677/comments/#comment_23968545


  1. mpa4b
    21.01.2022 18:56

    Не могла ли по каким-то причинам компиляция упираться скажем в диск?


    1. kirich1409 Автор
      21.01.2022 20:59

      Утверждать можно такое, но SSD у MacBook очень быстрые, особенно Pro.


  1. event1
    21.01.2022 19:27

    Как и коллега выше хотел спросить про диск. На линуксе после первой сборки всё кешируется (если ОЗУ достаточно) и дальше уже диск не играет роли. А как на маках?

    P.S. Телеграм собирается столько же сколько и наш рабочий дистрибутив линукса вместе с тулчайнами! Куда катится наш мир...


    1. kirich1409 Автор
      21.01.2022 21:00

      Все прогоны были холодными т.е. без кэша. Gradle работает одинаково на Linux и macOS


      1. event1
        21.01.2022 21:17

        А в статье вы пишете:

        В результат записывалось среднее значение по десяти тестовым прогонам — после двух сборок для прогрева, которые не шли в зачёт.

        Gradle, ясно, работает одинаково, а вот за VFS, я не знаю. В маках, наверное, вообще нет VFS

        В общем, надо для смеху на один мак поставить линукс и сравнить


        1. kirich1409 Автор
          21.01.2022 22:30

          Тут могу сказать что есть шанс различия скорости сборки на разных ОС. Из моего опыта Linux самые быстрые сборки, потом с небольшим отставанием macOS и замыкает все это Windows. Надо будет поиграться сос овременным железом и понять как сейчас дела обстоят


  1. Mitai
    22.01.2022 17:51

    ждем вторую часть где будут райзен


    1. kirich1409 Автор
      23.01.2022 15:00

      Обязательно хочу еще протестировать Ryzen 5 и 6 поколения, а также Intel 12 поколения. Помимо прочего интересует сравнение Windows и Linux на одинаковом железе