Хабрахабр

Эпизод 0. Hack vs Mac. Xcode build time

Эта статья начинает собой цикл из нескольких об использовании 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
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 из них доступны в сторах):


1. Eidolon – iOS / swift 3 / cocoapods

2. Firefox – iOS / swift 3 / carthage — image

3. Kickstarter — iOS / swift 3 / carthage — image

4. Wikipedia — iOS / objc / carthage — image

5. Telegram — Mac OS / swift 4 — image

6. Wire — iOS / objc / cocoapods — image

Порядок проведения тестов

1. Замеры производились в Xcode 9 при «чистой» сборке для SBS и NBS

2. И после добавления одной строчки кода:

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 Гб (больше лучше)

Производительность рабочих станций

image

У нового iMac Pro SSD, конечно, самый быстрый

image

У «попугаев» по большому счету нет четкой корреляции со скоростью и временем сборки проектов. Далее будет видно почему. Но собрать цифры и проверить все же требовалось.

Результаты тестов

image

Первый тест и сразу же необычный результат. Время «чистой» сборки на хаке быстрее и равно времени сборки на iMac Pro на SBS и NBS, соответственно.

Сначала закралось сомнение, как такое может быть, чтобы 6 ядерный процессор обгонял/был равным 18 ядерному?! Были произведены контрольные замеры, но все осталось без изменений (1-2 секунды разницы на уровне погрешности).

image

Второй тест, все вроде бы встало на свои места. Но разница 2/4 секунды не настолько существенна для такого мощного железа.

image

Третий тест, тут уже ситуация «лучше». Разница в 5/10 секунд на SBS/NBS в пользу iMac Pro.

image

Wikipedia так же подбросила сюрприз. Ну тут совсем странно, iMac 4K середины 2017 года быстрее iMac Pro конца 2017 года на NBS на 8 сек.
А hack быстрее на целых 12 секунд!

Видимо нужен контрольный замер на еще одном iMac Pro. Если еще один такой найдется, то будет замечательно.
UPD: нашелся, пруфы позже

image

Telegram под Mac OS. Время сборки, конечно, космическое. Это связано с тем, что в проекте используется сгенерированный файл API (на время компиляции которого не выполняются другие задачи) и кодовая база самого проекта достаточно большая. И уже становится не так интересно, хакинтош опять быстрее. Кстати, на NBS проект не собирается, требуется много лишних действий. Поэтому этот вариант здесь отброшен.

image

Ну и последний тест на 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 при сборке некоторых проектов возникают ошибки. В ближайшее время ошибки будут исправлены, а результаты тестов и репозитории с проектами обновлены.

Теги
Показать больше

Похожие статьи

Кнопка «Наверх»
Закрыть