Разработчики Mozilla столкнулись с проблемой производительности в GCC 4.5

Разработчики проекта Mozilla опубликовали уведомление, в котором приводятся факты значительного падения производительности Firefox при его сборке в GCC 4.5. Проблемы были обнаружены после попытки перехода для сборки Linux-версии браузера с GCC 4.3 на GCC 4.5, после чего автоматизированные тесты выявили падение производительности браузера на 4-19%, как в 32-разрядном, так и в 64-разрядном варианте.

Убедиться в справедливости заявления может любой желающий, достаточно проверить скорость прохождения JavaScript-теста Sunspider, при сборке Firefox в GCC 4.5, тест показывает на 8% более низкие показатели при прочих равных условиях. Переход на GCC 4.5 был связан с плагинами и возможностью сборки с PGO (profile-guided optimization) . После обнаружения регрессии, разработчики Mozilla отменили свое решение о переходе на сборку с использованием GCC 4.5.

В ответ на заявление, один из разработчиков GCC подчеркнул, что среди используемых при сборке Firefox флагов оптимизации ("-fPIC -fno-rtti -fno-exceptions -Os") присутствует опция "-Os", которая переводит компилятор в режим оптимизации по размеру исполняемого кода в ущерб скорости и посоветовал использовать при сборке режим оптимизации "-O2". Представители Mozilla ответили, что сборка с опцией "-Os" производится, так как исторически сложилось, что такая сборка работает быстрее, чем при использовании "-O2" - код получается существенно меньшего размера (уменьшение до 30%), что приводит к его ускорению за счет того, что код чаще влазит в кэш процессора.

В итоге, проблема оказалась связана с прекращением в GCC 4.5 inline-развертывания кода в режиме "-Os", что и приводит к замедлению выполнения. В настоящее время разработчики рассматривают возможные пути устранения возникшей регрессии, устранение которой скорее всего появится в ветке GCC 4.6.

©  OpenNet