Как стать автором
Обновить

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

Время на прочтение6 мин
Количество просмотров15K

Следующий эпизод Стоимость хака

Эта статья начинает собой цикл из нескольких об использовании 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 & swift / carthage — image

5. Telegram — Mac OS / swift 4 — image

6. Wire — iOS / objc / cocoapods & carthage — 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 почти сразу падает подсветка (ну это вы знаете).
  • Причем на маках с Fusion Drive при использовании NBS подсветка не падает

В конце статьи назрел вопрос – стоят ли затраченные время, деньги и силы на поиск, покупку комплектующий, их последующие сборку и настройку?

Этот вопрос я раскрою в следующем эпизоде.

P.S.: Спасибо ребятам из Badoo и Telegram, за то что нашли время и возможность для проведения тестов на iMac Pro. Спасибо, Юрию, Евгению и Кириллу за то, что смогли пройти «лайт» версию тестов на своих домашних компьютерах.
UPD:
В настоящее время пройти тесты можно только на Xcode 9.2.
После выхода Xcode 9.3 при сборке некоторых проектов возникают ошибки.В ближайшее время ошибки будут исправлены, а результаты тестов и репозитории с проектами обновлены.
UPD 21.04.2018:
Репозитории обновил, можно сравнивать свое железо.
Как только кто-то пройдет на mac mini, mac pro или, например, macbook pro 2014 года добавлю их результаты в диаграммы. Больше интересны процессоры i7/i5.

Следующий эпизод Стоимость хака

Дизайн — Людмила Котович
Теги:
Хабы:
Всего голосов 13: ↑13 и ↓0+13
Комментарии24

Публикации

Истории

Работа

iOS разработчик
24 вакансии
Swift разработчик
32 вакансии

Ближайшие события