Важность оптимизированной цепочки инструментов — одна из самых горячих тем в мире разработчиков Android. Многие из вас, возможно, слышали о GCC и Linaro, двух крупнейших проектах такого типа. GCC — старый игрок, который первоначально был выпущен в 1987 году, а Линаро — относительно молодой игрок, которому всего четыре года.
Давайте сначала углубимся в историю этих двух проектов. Как я уже говорил ранее, коллекция компиляторов GNU устарела. На протяжении многих лет он использовался для компиляции различных проектов, в том числе для Android. Google решила использовать версии 4.6 и 4.7 в качестве своих наборов инструментов по умолчанию, и в этой серии тестов я хотел бы сосредоточиться на версии 4.7.
Linaro был запущен в 2010 году и оптимизирован для архитектур ARM. И, конечно же, ARM используется в подавляющем большинстве смартфонов и планшетов на базе Android. Вы можете найти Linaro как набор инструментов, используемый для компиляции ядер или целых ПЗУ, и многие разработчики утверждают, что этот набор инструментов быстрее и мощнее, чем GCC.
Вдохновленный нашим администратором-разработчиком Pulser_G2, я решил проверить этот миф и посмотреть, реальны ли эти утверждения. Для этого я сначала скачал исходники AOSP. Я построил aosp_mako-eng target для моего Nexus 4, используя набор готовых сборок Google по умолчанию. После сделать отапакет, У меня есть zip-файл размером 183115481 байт, готовый к прошивке. После этого я загрузил набор инструментов Linaro 4.7.4 и заменил GCC в готовые сборки/gcc/linux-86. Я выполнил необходимые изменения, чтобы установить уровень оптимизации O3. Поскольку AOSP поддерживает только готовые ядра (без модификаций), я собрал ядро самостоятельно с помощью Linaro и заменил ядро в mako-kernel своим собственным blob.
Ниже вы можете увидеть два полученных архива. Как видите, архив Linaro немного больше, поэтому эта цепочка инструментов действительно что-то делает с папками bin и xbin. Сам файл ядра также больше.
Но размер файла – это не самое главное. Вместо этого давайте сосредоточимся на производительности. Чтобы измерить это, я использовал тест AnTuTu. Для большей точности я запускал каждый тест три раза. Как вы можете видеть ниже, разница довольно большая. Однако я бы не стал слишком слепо доверять этим тестам, поскольку результаты каждого теста различались. Тем не менее, Linaro был на несколько пунктов лучше, чем GCC, но AnTuTu не так надежен, как вы думаете.
GCC
Линаро
Следующие тесты были проведены с помощью 3DMark, чтобы выяснить, может ли набор инструментов повлиять на производительность графики. Разница оказалась даже более существенной, чем с Антуту. Вы можете получить немного FPS с GCC, но общая плавность лучше с Linaro. Оценка также немного выше.
GCC
Линаро
Финальный тест проводился с использованием игры Asphalt 8: Airborne. Ниже вы можете увидеть два видеоролика игры, работающей на обеих цепочках инструментов. Первый был сделан с помощью Linaro, а второй — с помощью GCC. Лично я думаю, что Линаро ощущается немного мягче, чем GCC, но это может быть просто эффект плацебо, поскольку это не был двойной слепой тест. Оба ядра были стандартными и не содержали никаких настроек, разгона и любых других настроек, улучшающих производительность.
//www.youtube.com/embed/BZRZenaNr9A
Так Линаро лучше?
Хотя поначалу я был настроен скептически, я должен признать, что Linaro кажется лучшим выбором, чем GCC, по крайней мере, в моей аппаратной конфигурации. Операционная система стала более отзывчивой и быстрой, чем когда она была создана с использованием GCC. Тем не менее, GCC по-прежнему надежен, поэтому, если вам нужна максимальная стабильность, он все равно может быть лучшим выбором.
В следующих выпусках я попытаюсь сравнить другие наборы инструментов, такие как SabreMod и Linaro 4.8. Пожалуйста, сообщите нам о ваших любимых цепочках инструментов в комментариях ниже. И если вы хотите, чтобы мы протестировали какие-либо другие цепочки инструментов, скажите об этом!