Итак есть такой замечательный проект apt-build. Замечателен он тем, что создан с благой целью, а именно: пересборка бинарных пакетов под машину | архитектуру | процессор | с нужными оптимизациями. В принципе cool!
В чем же развод? А в том, что никакой оптимизации не происходит. Вообще. По сути apt-build пересобирает пакет до уровня пакета в репозитории, т.е работает для обогрева комнаты. Почему же такое происходит? А потому что на конфигурационный файл apt-build.conf кладется с прибором. И все оптимизации которые вы туда прописали не используются. В этом легко убедиться, если повнимательней посмотреть на вывод скрипта в начале работы, в момент присвоения значений переменным "CFLAGS", "CXXFLAGS"
---
dpkg-buildpackage: установка CFLAGS в значение по умолчанию: -g -O2
dpkg-buildpackage: установка CPPFLAGS в значение по умолчанию:
dpkg-buildpackage: установка LDFLAGS в значение по умолчанию: -Wl,-Bsymbolic-functions
dpkg-buildpackage: установка FFLAGS в значение по умолчанию: -g -O2
dpkg-buildpackage: установка CXXFLAGS в значение по умолчанию: -g -O2
---
Ага! совсем не то что скажем у меня в конфиге
#cat /etc/apt/apt-build.conf
build-dir = /var/cache/apt-build/build
repository-dir = /var/cache/apt-build/repository
Olevel = -O3
mtune = -mtune=core2
options = "-pipe -fomit-frame-pointer "
make_options = " -j2"
Гугл забит ( по крайней мере в рунете) ссылкой на одну и ту же статью про "как оптимизировать debian", в части apt-build абсолютно бредовая, где автор оставил по умлочанию оптимизацию "O2" и даже не потрудился проверить работает ли оно вообще. Пара постов по делу на форумах в итоге ни к чему не приводит, народ не знает как это решить ( может не зря в man написано "BUGS: Many" ;)
В общем единственное решение , и то не знаю наколько работоспособное ( тестирую) это стягивать apt-build-ом исходники, распаковывать. Птому руками в debian/rules менять флаги по вкусу, и потом продолжать сборку.
типа
#apt-build --noupdate --source build-source firefox
правим
# apt-build --reinstall --yes --noupdate --source install firefox
--reinstall - Это потому что у меня firefox уже стоит.
UPD: Разобрался. действительно оптимизирует, но не совсем явным способом.
Цитата из документации.
Q: gcc and g++ do not seem to be called with good options!
A: *** They are called with them! ***
What you see on your screen is the command called by make, but
the wrapper wraps (yeah, it does) calls to gcc/g++ and adds options you
specified in the apt-build configuration file.
You won't see this on your screen.
Try `ps ax | grep gcc' instead as a proof, while building.
В чем же развод? А в том, что никакой оптимизации не происходит. Вообще. По сути apt-build пересобирает пакет до уровня пакета в репозитории, т.е работает для обогрева комнаты. Почему же такое происходит? А потому что на конфигурационный файл apt-build.conf кладется с прибором. И все оптимизации которые вы туда прописали не используются. В этом легко убедиться, если повнимательней посмотреть на вывод скрипта в начале работы, в момент присвоения значений переменным "CFLAGS", "CXXFLAGS"
---
dpkg-buildpackage: установка CFLAGS в значение по умолчанию: -g -O2
dpkg-buildpackage: установка CPPFLAGS в значение по умолчанию:
dpkg-buildpackage: установка LDFLAGS в значение по умолчанию: -Wl,-Bsymbolic-functions
dpkg-buildpackage: установка FFLAGS в значение по умолчанию: -g -O2
dpkg-buildpackage: установка CXXFLAGS в значение по умолчанию: -g -O2
---
Ага! совсем не то что скажем у меня в конфиге
#cat /etc/apt/apt-build.conf
build-dir = /var/cache/apt-build/build
repository-dir = /var/cache/apt-build/repository
Olevel = -O3
mtune = -mtune=core2
options = "-pipe -fomit-frame-pointer "
make_options = " -j2"
Гугл забит ( по крайней мере в рунете) ссылкой на одну и ту же статью про "как оптимизировать debian", в части apt-build абсолютно бредовая, где автор оставил по умлочанию оптимизацию "O2" и даже не потрудился проверить работает ли оно вообще. Пара постов по делу на форумах в итоге ни к чему не приводит, народ не знает как это решить ( может не зря в man написано "BUGS: Many" ;)
В общем единственное решение , и то не знаю наколько работоспособное ( тестирую) это стягивать apt-build-ом исходники, распаковывать. Птому руками в debian/rules менять флаги по вкусу, и потом продолжать сборку.
типа
#apt-build --noupdate --source build-source firefox
правим
# apt-build --reinstall --yes --noupdate --source install firefox
--reinstall - Это потому что у меня firefox уже стоит.
UPD: Разобрался. действительно оптимизирует, но не совсем явным способом.
Цитата из документации.
Q: gcc and g++ do not seem to be called with good options!
A: *** They are called with them! ***
What you see on your screen is the command called by make, but
the wrapper wraps (yeah, it does) calls to gcc/g++ and adds options you
specified in the apt-build configuration file.
You won't see this on your screen.
Try `ps ax | grep gcc' instead as a proof, while building.
4 комментария:
ответил на хабре.
спасибо.
меня это -02 и -03 тоже как-то смущало..
В любом случае прироста скорости на глаз не заметно. Да и глючит он.
Ну смотрю я на ps aux|grep gcc
...
и он компилирует со СВОИМИ флагами, конкретно игнорируя, как CFLAGS, так и свой конфиг-файл. А на арме оптимизации крайне важны. Как еще мне с неоном всю систему перекомпилировать
Отправить комментарий