Если вы интересуетесь разработкой под Android, то, скорее всего, слышали о Telegram-канале «Android Broadcast» с ежедневными новостями для Android-разработчиков и одноимённом YouTube-канале. Этот пост — текстовая версия видео.
Выбор техники — всегда непростая задача, а новые процессоры Apple смогли здорово встряхнуть рынок и усложнить выбор. Какую модель MacBook выбрать, и насколько одна лучше другой, понять сложно. Искать качественные тесты — то ещё развлечение.
В этой статье я сделаю правильное сравнение скорости сборки реальных Android-проектов на различных MacBook, а также порекомендую, какой из них стоит выбрать в начале 2022 года.
Компьютеры для сравнения
Для сравнения я выбрал последние MacBook Pro на Intel, а также современные MacBook на основе M1. Также добавил свой старый iMac 27" Late 2015, чтобы наглядно увидеть прогресс от обновления.
Методология проведения тестов
Обеспечить полностью равные условия для всех компьютеров непросто, но я постарался создать идеальные условия:
Использовать JDK 11 и обновить ее до последней ревизии.
Использовать Gradle 7.3.3 для сборки проекта.
Отключить внешние дисплеи.
Подключить компьютер к питанию.
По-максимуму закрыть все программы, включая фоновые.
Закрыть Android Studio!
Включить производительный режим в настройках (если такой имеется).
Ноутбук ставить на плоскую твердую поверхность, чтобы не было проблем с забором воздуха и охлаждением.
Не трогать компьютер во время теста.
Отключить индексацию Spotlight или добавить папку с проектами для тестов в исключения.
Если вы знаете какие-то дополнительные условия, которые стоит соблюдать при проведении бенчмарка, буду рад прочитать их в комментариях к статье.
Тесты проводились с помощью утилиты Gradle Profiler в режиме benchmark, предназначенной для замера скорости сборки проектов. В результат записывалось среднее значение по десяти тестовым прогонам — после двух сборок для прогрева, которые не шли в зачёт.
Для каждого проекта был создан сценарий для запуска теста (файл performance.scenarios
), а все проекты собраны в отдельном репозитории.
Тесты
Конкретные цифры приведены в таблице ниже.
TiVi 0.6.3
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 поколения.
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 секунд.
Focus 95.2.0
Focus — специальная приватная и безопасная версия Web-браузера Firefox.
Количество строк Kotlin-кода: 19 066
Количество строк XML: ~30 тыс
Количество модулей: 3
Бенчмарк Focus демонстрирует уже выявленные закономерности, но показывает, что восьмиядерная версия M1 Pro не отстаёт значительно от полной версии M1 Pro или M1 Max.
Firefox 95.2.0
Firefox — полная версия Web-браузера Firefox.
Количество строк Kotlin-кода: ~97 тыс
Количество строк XML: ~100 тыс
Количество модулей: 4
Скорость компиляции Kotlin-кода на порядок ниже, чем Java. Тем не менее, процессоры Apple показывают закономерное ускорение компиляции. Вот только разница между M1 Pro с 8 и 10 ядрами CPU всё так же незаметна. Как так?
Signal 5.28.8
Signal — популярный мессенджер, альтернатива Telegram.
Количество строк Java-кода: 248 305
Количество строк Kotlin-кода: 42 476
Количество строк XML: ~270 тыс
Количество модулей: 13
Наконец-то видно, что 8 ядер M1 Pro медленнее, чем полная версия процессора. В остальном — лишь подтверждение выводов, полученных в предыдущих проектах.
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. Конечно же, мне стало интересно, почему так вышло, и я полез разбираться.
Причина оказалась в 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)
dimakey
20.01.2022 19:24+1del
kirich1409 Автор
20.01.2022 19:2714" стабильно хуже собирает. Это логично так как там выше нагрев и меньше сделаны частоты по умолчанию. В 3D тестах 16" M1 Max 24 GPU работает также как 14" M1 Max 32 GPU, а также меньше шумит.
UbuRus
20.01.2022 19:44+6Графики все-таки нужно с 0 делать, почему-то только у tivi это так, а дальше нужно напрягать мозг и смотреть на цифры, потому что картинка теряет смысл
А вообще вывод который я для себя сделал: самый cost-effective mac - air, собственно с него и пишу. Скажу еще что после mbp 16" i7 производительность air порадовала.kirich1409 Автор
20.01.2022 19:45+2Все верно! Air хорошая машинка для большинства разработчиков будет
Alex_ME
20.01.2022 21:15+2Telegram Android — самый крупный из тестируемых проектов и наглядно
показывает разницу между процессорами. Бенчмарк удивил: это единственный
из тестируемых проектов, в которых i7 и i9 в MacBook Pro 2019 года
смогли собрать проект быстрее, чем Apple M1. Конечно же, мне стало
интересно, почему так вышло, и я полез разбираться.Причина оказалась в CMake и всего тулинга для компиляции нативного кода,
которого в Telegram достаточно. На Apple M1 компиляции запускается c
использование Rosetta 2 — в Android NDK на момент написания статьи его ещё не успели перевести на поддержку Apple Silicon.Быстрее, чем M1, но медленнее, чем M1 MAX и PRO, которые вроде как тоже требуют Rosetta? Ваше описание очень запутывающее, можете разъяснить
kirich1409 Автор
20.01.2022 21:46+1Как минимум вы можете взяглунть на визаулизацию. M1 Pro и Max, смогли бысть быстрее даже с выполнением части сборки Telegram через Rosetta 2, за счет мощных ядер, которые даже в режиме совместимости оказались быстрее + Java код они тоже собрали быстрее.
Sergdesign
20.01.2022 23:57+1Есть парк машин на Ryzen 9 5950X , и в ближайшем будущем добавятся i9 12900K. Готов как-то поучаствовать в тестах.
inv2004
21.01.2022 13:45Если не затруднит, было бы очень интересно: https://habr.com/ru/company/surfstudio/blog/646677/comments/#comment_23968545
mpa4b
21.01.2022 18:56Не могла ли по каким-то причинам компиляция упираться скажем в диск?
kirich1409 Автор
21.01.2022 20:59Утверждать можно такое, но SSD у MacBook очень быстрые, особенно Pro.
event1
21.01.2022 19:27Как и коллега выше хотел спросить про диск. На линуксе после первой сборки всё кешируется (если ОЗУ достаточно) и дальше уже диск не играет роли. А как на маках?
P.S. Телеграм собирается столько же сколько и наш рабочий дистрибутив линукса вместе с тулчайнами! Куда катится наш мир...
kirich1409 Автор
21.01.2022 21:00Все прогоны были холодными т.е. без кэша. Gradle работает одинаково на Linux и macOS
event1
21.01.2022 21:17А в статье вы пишете:
В результат записывалось среднее значение по десяти тестовым прогонам — после двух сборок для прогрева, которые не шли в зачёт.
Gradle, ясно, работает одинаково, а вот за VFS, я не знаю. В маках, наверное, вообще нет VFS
В общем, надо для смеху на один мак поставить линукс и сравнить
kirich1409 Автор
21.01.2022 22:30Тут могу сказать что есть шанс различия скорости сборки на разных ОС. Из моего опыта Linux самые быстрые сборки, потом с небольшим отставанием macOS и замыкает все это Windows. Надо будет поиграться сос овременным железом и понять как сейчас дела обстоят
Mitai
22.01.2022 17:51ждем вторую часть где будут райзен
kirich1409 Автор
23.01.2022 15:00Обязательно хочу еще протестировать Ryzen 5 и 6 поколения, а также Intel 12 поколения. Помимо прочего интересует сравнение Windows и Linux на одинаковом железе
gizur
Было бы очень интересно посмотреть на оценку скорости на современных процессорах AMD/Intel - поможет таким, как я, кто думает об апгрейде.
kirich1409 Автор
И самому интересно провести такой тест, но без помощи сообщества не получтися его сделать (
Beanut
Вы же уже делали подобную анкету в телеграмме и вам предлагали помощь, но вы отказались, под предлогом что не сможете доверять всем подряд, а тут опять проводите точно такой же опрос и вам снова якобы "нужна помощь".
Surf_Studio
<>
kirich1409 Автор
Если не отписались вам, то это не значит что мне не помогали другие ребята. 5 из 8 компьютеров в этом тесте были не мои. Прогонять один и тот же тест у всех без контроля условий - это просто трата времени. Если вы очень хотите помочь с тестами Windows/Linux, то пишите мне в личку.
inv2004
Не очень понятно о какой оценки производительности речь, если о компиляции, то, наверное, я могу пропиарить свой репозиторий: https://github.com/inv2004/bench_nim_build
Там собранаа довольно разнообразная статистика, включая m1 и m1 max. Можно запустить у себя и сравнить с остальными конфигурациями
kirich1409 Автор
Буду только рад помочь. Завтра изучу и прогоню тесты.
kirich1409 Автор
Тест провел. M1 Max показал лучшие результаты, немного опередив M1 Pro
inv2004
Спасибо. Вижу - ракета