Эта статья начинает собой цикл из нескольких об использовании Hackintosh в повседневной работе и особенно с IDE Xcode 9 и будет больше интересна разработчикам под языки objc/swift.
С другой стороны, мой первый хак был собран, когда я не был знаком с этими языками и может пригодиться даже тем, кто не является разработчиком, но по тем или иным причинам хочет попробовать Mac OS.
В то время у меня был достаточно мощный рабочий ноутбук Sony и большое желание начать программировать под iOS. Но я не был готов потратить определенную сумму денег на Mac не зная пригодиться он мне в конечном итоге или нет.
Поэтому было принято решение собрать Hackintosh, который в итоге позволил мне войти в мир разработки приложений под устройства компании Apple. В первой статье я хочу уделить внимание времени сборки проектов в среде Xcode. Разработчики прекрасно знают на сколько уменьшилась скорость и увеличилось время сборки проектов с выходом 9 версии этого IDE, особенно на языке swift или микса из objc/swift. Ускорить время компиляции можно, во-первых, настроив различные флаги и скрипты, во-вторых, с помощью рефакторинга непосредственно кодовой базы.
Но в этом эпизоде будет уделено внимание третье составляющей инструментов разработки, а именно «железу».Так как информации по времени сборки проектов не так много или она достаточно узкая и затрагивает только один язык/проект и нет объективности, у меня появилась идея собрать статистику под разные компьютеры и провести некоторый анализ. Я уверен, что эта информация вам пригодится в следующий раз, когда вам менеджер проекта или техлид спросят: «Зачем тебе такое мощный компьютер, все и так прекрасно работает?!». Или если вы фриланс разработчик и однажды задумаетесь стоит ли потраченных денег этот Mac и сколько в итоге вы выиграете времени на постоянные билды в течении дня.
У большинства есть понимание, что более дорогие компьютеры компании Apple обеспечивают более комфортное и самое главное быстрое выполнение поставленных работодателем задач. Но нет понимание о каких порядках идет речь.
Мной были найдены разработчики, которые в интересах всего ios-комьюнити провели ряд тестов на своих машинах и предоставили для вас результаты.
В тестах была изучена производительность хакинтош c новым процессором i7-8700K поколения Coffee Lake и iMac Pro c флагманским 18 ядерным процессором Xeon W-2191B поколения Skylake. Мне всегда было интересно сравнить время компиляции на хаках и нативных машинах Apple. Учитывая большую стоимость iMac Pro, думаю, многим будет интересно узнать рекомендуется ли он к покупке и действительно ли это принесет значительный прирост в скорости разработки проектов.
В конце вводной части хотелось бы поблагодарить Ash Furrow за репозиторий (его проект так же участвует в тесте) с уже собранными данными тестирования, который в том числе вдохновил меня на написание этой статьи.
Используемые сокращения:
Хак/hack – хакинтош/hackintosh
UEFI – как ни странно UEFI, а также BIOS (это не совсем одно
и то же, но даже в профессиональных кругах до сих пор используют этот термин)
SBS (Standard Build System) – «чистая» сборка на стандартной системе сборки
SBS-ret – повторная сборка на SBS
NBS (New Build System) – «чистая» сборка на новой системе сборки
NBS-ret – повторная сборка на NBS
Перейдем непосредственно к тестированию.
Тестирование
В тестировании участвовали следующие устройства:
- iMac Pro (18 core) Xeon W-2191B 2,3/4,3GHz / 64Gb
- Hackintosh i7-8700K (6 core) 3,7/4,7GHz (HFS+) / 32Gb
- iMac 4K mid 2017 i7-7700K (4 core) 4,2/4,5GHz / 16Gb
- Macbook Pro 2017 i7-7820HQ (4 core) 2,9/3,9GHz (HFS+) / 16Gb
Было принято решение использовать только open source проекты, чтобы после статьи у каждого разработчика была возможность добавить свои результаты и сравнить с топовым железом (пока только на Xcode 9.2). Большинство из этих проектов в настоящее время активно развиваются и, чтобы была возможность в дальнейшем с выходом нового железа производить «чистые» тесты и сравнить результаты, я подтянул проекты под свой аккаунт. Затем обновил на них фреймворки/билиотеки, проверил возможность просто скачать и без лишних действий (почти ) начать тестирование. Инструкция по тестированию.
Используемые проекты
Всего использовалось 6 проектов (5 из них доступны в сторах):
- Eidolon – iOS / swift 3 / cocoapods
- Firefox – iOS / swift 3 / carthage
- Kickstarter — iOS / swift 3 / carthage
- Wikipedia — iOS / objc / carthage
- Telegram — Mac OS / swift 4
- Wire — iOS / objc / cocoapods
Порядок проведения тестов
- Замеры производились в Xcode 9 при «чистой» сборке для SBS и NBS
- И после добавления одной строчки кода:
print("Hello, Ash Furrow") в application(: didFinishLaunchingWithOptions:) AppDelegate для swift
NSLog(@"Hello, Ash Furrow"); — для objc
Никакие дополнительные флаги не выставлялись, настройки проектов для ускорения времени сборки не производились.
Кроме определения времени сборки проектов, замерялась скорость работы диска в AJA System Test Lite и количество «попугаев» в Geekbench 4.
Ни для кого не секрет, что наибольшее влияние на время компиляции оказывает:
- Процессор, а точнее его частота, кэш и в меньшей степени количество ядер
- Скорость чтения/записи SSD диска
- Оперативная память (частота и объем)
Для комфортной продуктовой разработки с использованием Xcode 9, Slack, HipChat, Telegram, SourceTree, Chrome, Zeplin и пр. рекомендуется минимум 16 Гб (больше лучше)
Производительность рабочих станций
У нового iMac Pro SSD, конечно, самый быстрый
У "попугаев" по большому счету нет четкой корреляции со скоростью и временем сборки проектов. Далее будет видно почему. Но собрать цифры и проверить все же требовалось.
Результаты тестов
Первый тест и сразу же необычный результат. Время «чистой» сборки на хаке быстрее и равно времени сборки на iMac Pro на SBS и NBS, соответственно.
Сначала закралось сомнение, как такое может быть, чтобы 6 ядерный процессор обгонял/был равным 18 ядерному?! Были произведены контрольные замеры, но все осталось без изменений (1-2 секунды разницы на уровне погрешности).
Второй тест, все вроде бы встало на свои места. Но разница 2/4 секунды не настолько существенна для такого мощного железа.
Третий тест, тут уже ситуация «лучше». Разница в 5/10 секунд на SBS/NBS в пользу iMac Pro.
Wikipedia так же подбросила сюрприз. Ну тут совсем странно, iMac 4K середины 2017 года быстрее iMac Pro конца 2017 года на NBS на 8 сек.
А hack быстрее на целых 12 секунд!
Видимо нужен контрольный замер на еще одном iMac Pro. Если еще один такой найдется, то будет замечательно.
UPD: нашелся, пруфы позже
Telegram под Mac OS. Время сборки, конечно, космическое . Это связано с тем, что в проекте используется сгенерированный файл API (на время компиляции которого не выполняются другие задачи) и кодовая база самого проекта достаточно большая. И уже становится не так интересно, хакинтош опять быстрее. Кстати, на NBS проект не собирается, требуется много лишних действий. Поэтому этот вариант здесь отброшен.
Ну и последний тест на Wire. Собирается, как и Telegram только на SBS. iMac впереди.
Как видно из комментариев к тестам, наибольший интерес (по крайней мере для меня) представляло сравнение хака и топовой модели компьютера Apple. Но в первом тесте даже iMac 4K 2017 не так сильно отстал от iMac Pro – разница всего 8/10 секунд, а в 4-м обогнал (что повторюсь очень странно).
По результатам проведенных экспериментов можно сделать вывод, что производительность hackintosh вполне сопоставима с нативным Mac одной из топовой сборки стоимостью ~10k$ и соответственно хак может быть успешно использован в продуктовой разработке. Вероятно, что не последнее место в таких результатах могла оказать старая файловая система HFS+. По моим личным ощущениям после месяца работы на MBP 17 с APFS и последующей переустановки High Sierra на HFS+ скорость сборки, да и работа ноутбука в целом стала быстрее. Это подтверждают и разработчики kexts (драйверов) под hackintosh на различных форумах.
Выводы:
— Время сборки проектов зависит от скорости диска (причем скорость записи имеет больший приоритет);
— Частота процессора имеет больший приоритет над количеством ядер;
— Использование флага NO в команде defaults write com.apple.dt.Xcode BuildSystemScheduleInherentlyParallelCommandsSerially -bool NO в зависимости от проекта и вашего mac уменьшает время сборки на 9-15% (по крайней мере в Xcode версии 9.3);
— NBS в swift проектах дает максимальный прирост 67%;
— NBS в objc проекте (Wikipedia) показывает значительный прирост в производительности (150%) – как будто новую систему сборки писали специально под objc;
— На Fusion Drive NBS медленнее или примерно равен стандартной – по всей вероятности используется какой-то особый способ получить профит от быстрых дисков SSD;
— На NBS в проектах со swift и миксом из objc/swift почти сразу падает подсветка (ну это вы знаете).
В конце статьи назрел вопрос – стоит ли затраченные время, деньги и силы на поиск, покупку комплектующий, их последующие сборку и настройку?
Этот вопрос я раскрою в следующем эпизоде.
P.S. Спасибо ребятам из Badoo и Telegram, за то что нашли время и возможность для проведения тестов на iMac Pro. Спасибо, Юрию, Евгению и Кириллу за то, что смогли пройти «лайт» версию тестов на своих домашних компьютерах.
**UPD**:
В настоящее время пройти тесты можно только на Xcode 9.2.
После выхода Xcode 9.3 при сборке некоторых проектов возникают ошибки. В ближайшее время ошибки будут исправлены, а результаты тестов и репозитории с проектами обновлены.
Автор: Наташа