LINUX.ORG.RU

gentoo, LTO

 , , , ,


0

2

Кто и как относится к этой волшебной опции компилятора?
Кто собирает GCC с ‘-flto’?
Кто сидит на Clang с ‘-flto=thin’?

А вы знали, что Fedora полностью собирается с этой опцией с 2021 года? А Debian Bookworm на финишной прямой?

https://fedoraproject.org/wiki/LTOByDefault
https://lists.opensuse.org/archives/list/factory@lists.opensuse.org/message/UT2YVWPZK2IZ5EUHMSHNCW3Q72CMPWCJ/

Если взять один из гиковских дистрибутивов, Crux:
https://crux.nu/ports/crux-3.7/xorg/xorg-server/Pkgfile
то многие пакеты собираются с опцией ‘-D b_lto=true’

Ваши предложения и рекомендации?

Ответ на: комментарий от monkdt

там вообще подняли вопрос о андроидах и их миллиардах устройств. Как бы выутюжить инструкции, сначала внесли правки для Clang, потом недавно и для Gcc. Ну, это ядро, а интересуют списки, кто и что компилирует, или вообще на всю систему в make.conf?

Neuromagus
() автор топика
Последнее исправление: Neuromagus (всего исправлений: 1)
Ответ на: комментарий от Neuromagus

Пробовал собирать с lto несколько лет назад. Не всë собиралось. Подробностей уже не скажу. В результате забил, вернул назад, больше не экспериментировал. Сейчас мой опыт слишком устаревший.

imul ★★★★★
()

lto часто ломает работоспособность. Сомневаюсь что в федоре он глобальный, скорее какие-то избранные пакеты. В gentoo для избранных пакетов есть флаг lto, gcc у меня собран с pgo+lto, что даёт неплохую производительность

mittorn ★★★★★
()

С LTO собирается и работает норм только то, что разработчик/ментейнер предусмотрел и протестил. Но чаще всего разрабы плюют на него и тогда софтина либо не собирается, либо собирается но работает криво (рандомные сегфолты, жор памяти и прочее).

Во фряхе часть портов протестировано и прекрасно работает с LTO оптимизацией, и в каждом таком пакете есть по дефолту выключеный LTO флаг. К примеру, postgresql, chromium, libjxl, python, rust, ffmpeg. Хоть оно и экспериментальное но как правило проблем не возникает. В том же chromium прибавка к скорости и отзывчивости отчетливо ощущается и работает стабильно.

iron ★★★★★
()
Ответ на: комментарий от iron

что разработчик/ментейнер предусмотрел и протестил.

-flto - это же набор флагов. Что он там предусматривает? Я вот давно на Си не писал, с этими новыми правилами.

Вот ситуация недавно: define перепишем на static const. А чё, нужно, так как сразу тип указываем, да только компилятору пофиг, и в массивах он плюётся ядом. Ситуация хуже, чем с JS.

Neuromagus
() автор топика
Ответ на: комментарий от mittorn

В gentoo для избранных пакетов есть флаг lto

Это 2 пакета от силы.

Вот мой список:

# for LTO compile
gui-libs/wlroots lto.conf
dev-libs/wayland lto.conf
dev-libs/wayland-protocols lto.conf
x11-base/xorg-server lto.conf
sys-auth/seatd lto.conf
x11-libs/libxkbcommon lto.conf
dev-libs/libinput lto.conf
x11-libs/libdrm lto.conf
media-libs/libepoxy lto.conf
media-libs/libglvnd lto.conf
x11-libs/cairo lto.conf
x11-libs/pango lto.conf
x11-libs/pixman lto.conf
dev-libs/gobject-introspection lto.conf
x11-libs/gtk+ lto.conf

gui-wm/sway lto.conf
gui-apps/swayidle lto.conf
gui-apps/swaybg lto.conf
gui-apps/mako lto.conf
gui-apps/wbg lto.conf
gui-apps/fnott lto.conf

media-video/mpv lto.conf
media-video/ffmpeg lto.conf

gui-apps/foot lto.conf
media-libs/fcft lto.conf

app-editors/joe lto.conf

dev-libs/girara lto.conf
app-text/zathura lto.conf
app-text/zathura-pdf-mupdf lto.conf

media-sound/cmus lto.conf
media-sound/pulseaudio lto.conf
media-sound/pulseaudio-daemon lto.conf
media-libs/libva lto.conf
media-libs/libva-intel-media-driver lto.conf

dev-libs/glib lto.conf
media-libs/harfbuzz lto.conf
media-libs/freetype lto.conf
Neuromagus
() автор топика
Ответ на: комментарий от monkdt

Можно устроить опрос где люди работают? Мне интересно у кого столько свободного времени

Не душни, люди не в голове компилируют, впадая в кому часов на пять. И не сидят ручки ровно сложив пялясь на бегающие по экрану строчки. Обычно оно фоном компилится, с PORTAGE_SCHEDULING_POLICY=«idle», работать работу это не мешает никак.

По сабжу — когда то собирал по вышеприведённой вики с lto, чисто поиграться, так и не ощутил органолептически какого либо эффекта. Сейчас по приколу собираю с lto то что уже имеет USE lto. Файрфокс собираю с lto и pgo, просто потому что могу, но честно говоря разницы в работе не замечаю, он у меня и без этого всего быстро работал. Компилится из за pgo в два раза дольше, надо бы этот USE убрать, но я никуда не тороплюсь тащемто, не особо напрягает, всё равно всё это безобразие в фоновом режиме собирается.

Jameson ★★★★★
()
Последнее исправление: Jameson (всего исправлений: 2)
Ответ на: комментарий от Jameson

работать работу это не мешает никак.

смотря, что работаешь. Несколько лет назад я собирал проекты тогда еще был ant на жабе и тоже компилял на линухе. Обе работы вместе проводить было невозможно. Да многие более-менее тяжелые вещи будут тормозить пока там в бэкграунде что-то собирается.

monkdt
()
Ответ на: комментарий от monkdt

Открой для себя специальные политики планировщика задач, например idle. Почитай как она работает. И поймёшь что тормозить на переднем плане ничего не будет, потому что те процессы которые идут с политикой idle исполняются тогда когда процессор простаивает.

Jameson ★★★★★
()
Последнее исправление: Jameson (всего исправлений: 2)
Ответ на: комментарий от Jameson

Файрфокс собираю с lto и pgo

Все платформы первого уровня Mozilla в настоящее время создают новейший код браузера Firefox под управлением компилятора Clang и имеют включенную LTO. Это включает Linux, Mac, Android, Windows, полагающиеся на этот компилятор с открытым исходным кодом.
На данный момент только в сборках Linux также включена PGO.
https://www.phoronix.com/news/Firefox-Clang-LTO-All-Platforms
Статья от 12 сентября 2018 года.

Т.е. в репах mozilla уже давно лежат ‘правильно’ собранные бинарники, бери не хочу. ) Если я правильно понял.

krasnh ★★★
()
Ответ на: комментарий от krasnh

Да, это так. Можно просто emerge firefox-bin, это сборка сделанная самой Мозиллой, с её ftp сервачка. Но у гентушной юзов больше, и патчи есть... Дело вкуса короче. Многие нативный фокс собранный Мозиллой предпочитают, да, в этом нет ничего плохого.

Jameson ★★★★★
()
Последнее исправление: Jameson (всего исправлений: 1)
Ответ на: комментарий от Jameson

) и интересно когда он простаивает если ты работаешь? Если только пялиться на экран ничего больше не трогая.

Когда я не дома оставить работающий комп без присмотра я не могу, а когда дома на компе всегда что-нить происходит как и у всех

monkdt
()
Ответ на: комментарий от monkdt

дома на компе всегда что-нить происходит как и у всех

А ты всегда так напряжённо работаешь что у тебя проц на 100% нагружен постоянно, а не всплесками, вот прямо всеми ядрами? Вот когда он нагружен на 30% например — на остальные 60% он простаивает. Открою тебе секрет, который ты возможно не знал, хотя странно. «Обычные» процессоры в «обыкновенных» компьютерах по большей части простаивают. Даже когда ты вроде как с ним работаешь. Они «простаивают» и «работают» одновременно, лол. Занят работой на работе обычно ты, а не процессор. Равномерная 100% загрузка без простоев будет только на билдферме или каком нибудь гипервизоре виртуалок со множеством виртуалок.

Jameson ★★★★★
()
Последнее исправление: Jameson (всего исправлений: 2)
Ответ на: комментарий от kardapoltsev

Что хочу, то и собираю. Хромиум раньше собирал, теперь на Лисе. Лису не собираю, раньше собирал, поменялись приложения, теперь устраивает бинарный.

Плюс я теперь обновляюсь с задержкой. Быстрее выкатывают после обновления минорную версию с заплатками.

Can increase compile time by 2 to 3 times.

сильно зависит от того, что собираешь. Плюс есть опция -fwhopr

Neuromagus
() автор топика
Ответ на: комментарий от monkdt

Там запас по процессорам, по ядрам, потокам, и по ram, Давайте померяем силы наших CPU в реальной задаче (комментарий).

krasnh ★★★
()
Последнее исправление: krasnh (всего исправлений: 1)
Ответ на: комментарий от monkdt

Ну да, и что? Хромиум ещё и память при сборке жрать любит, и на диске отжирает гигабайт 15-20 в том месте где собирается. Так что там на ввод\вывод тоже время тратится, а если мало мозгов — ещё и на своп. У меня 128гб мозгов, поэтому у меня всё в tmpfs собирается, но не суть. С idle он будет ещё дольше собираться, потому что сборка будет приостанавливаться и уступать ресурсы всему что исполняется с политикой «по умолчанию». Но меня не волнует, хоть двое суток, компьютер у меня не выключается и с idle задачи переднего плана не тормозят, так что мне лично пофиг что у меня проц вместо того чтобы частоту снижать и ждать сборкой занят. Лично я хромиумом тоже не пользуюсь, но не потому что он долго собирается, просто так сложилось. На всякий случай в качестве «запасного» браузера у меня нормальный бинарный Хром стоит.

Jameson ★★★★★
()
Последнее исправление: Jameson (всего исправлений: 1)
Ответ на: комментарий от krasnh

Дело не в том что у меня на той машине много ядер и мозгов, у меня и вполне обычный ноут есть с 32гб и i7. И ещё одна помойка, с 16гб и i3. Просто чел пишет что мол сборка мешает задачам переднего плана. Да, она мешает, если и у портажа и у всего остального политика планировщика «по умолчанию». Тогда они конкурируют за ресурсы. Но суть PORTAGE_SCHEDULING_POLICY=«idle» в том чтобы использовать «специальный» режим планировщика, отличающийся от простой работы с низким приоритетом в общем пуле задач. С этой политикой задача исполняется только тогда когда ядру совсем нечего делать, и оно собирается снижать частоту и входить в режим idle (крайне грубо выражаясь, потому что idle это не sleep и куча тонкостей).

С политикой планировщика idle все остальные задачи вне этой политики вообще не ощущают этот фон, так как его нет когда они работают (исполняются). Поэтому они не конкурируют за ресурс и не тормозят. Но очевидно что если foreground процесс в запущенный в контексте политики «по умолчанию» займёт 100% проца — idle процесс не завершится пока загрузка не спадёт, он просто не будет выполняться, совсем.

man sched, читай там SCHED_IDLE

Jameson ★★★★★
()
Ответ на: комментарий от monkdt

Уважаемый, ты так и не понял о чём я. Ну ОК, как скажешь. Но ты всё таки man sched осиль, и узнай что помимо SCHED_OTHER, которая «по умолчанию», есть и другие политики у планировщика.

Ещё раз. Если ты посмотришь на график загрузки процессора — ты увидишь что он не молотит со 100% нагрузкой с момента когда ты комп включил до момента когда ты его выключил. Ты обнаружишь колебания в нагрузке. И вот когда она не 100%, а к примеру 10% — остальные 90% это idle. И если ты посчитаешь — ты обнаружишь что проц у тебя в течении сеанса по большей части простаивает, если ты конечно не занимаешься кодированием чего либо во множество потоков и т.п. вещами. При обычном сценарии — браузер, текстовый редактор, музычка, фильм, чятик и даже игра — он по большей части простаивает. И вот с политикой планировщика idle вместо простоя он в это время компилять будет. А как только чему либо другому потребуется камень - не будет.

Jameson ★★★★★
()
Последнее исправление: Jameson (всего исправлений: 2)
Ответ на: комментарий от Jameson

Да всё проще. Берём TLP, настраиваем, чтобы не взлетал на каждый чих твой ноут, опцию MAKEOPTS на одно/два недоядра меньше и всё, можно полноценно пользоваться машиной, если не кодировать видео весь день. Серфить, писать код, читать и смотреть не мешает совсем.

Neuromagus
() автор топика
Последнее исправление: Neuromagus (всего исправлений: 2)
Ответ на: комментарий от Jameson

хосподя да никто в здравом уме не будет шото там компилять когда есть просто дистрибутивы с просто готовыми пакетами. Остальное клоунада для задротов. Да, интересно знать разницу между собраным софтом с разными алгоритмами оптимизации и без. На этом все

Скажи напоследок в чем для обычного юзера смысл компиляции? Хоть что-нить внятное?

monkdt
()
Ответ на: комментарий от monkdt

хосподя да никто в здравом уме не будет шото там компилять когда есть просто дистрибутивы с просто готовыми пакетами. Остальное клоунада для задротов

Отлично поговорили. Ты назвал гентушников, и меня в том числе, клоунами, задротами и отказал в здравом уме.

На этом все

Да, на этом всё.

Скажи напоследок в чем для обычного юзера смысл компиляции? Хоть что-нить внятное?

А зачем? Уже миллион раз сказано всё. У тебя уже есть мнение, с ним и оставайся. Очередной клоун-задрот в здравом уме не находящийся тебя не переубедит. Удачи.

Jameson ★★★★★
()
Последнее исправление: Jameson (всего исправлений: 2)
Ответ на: комментарий от monkdt

Ты мне дверь запили! А потом уже поговорим про

Остальное клоунада для задротов.

Вот я пользуюсь Emacs. Сколько у него опций configure? Вот есть Mpv, Ffmpeg, десятки их.

Моё окружение работает дольше дефолта от батареи на почти 50%, моё окружение работает на пассивном охлаждении, не воя вентилятором по каждому чиху, моё окружение очень редко обновляется, так как установлено ровно то, чем я пользуюсь. Стабильно, надёжно, предсказуемо.

Скажи напоследок в чем для обычного юзера смысл компиляции? Хоть что-нить внятное?

Что такое «обычный» пользователь?

Neuromagus
() автор топика
Ответ на: комментарий от Neuromagus

моё окружение работает на пассивном охлаждении, не воя вентилятором по каждому чиху

Да зачем такой пафос? Любому понятно что сколько не оптимизируй mpv нагрузка на проц или гпу будет зависеть от тяжести файла, его кодировки и почих вещей. Мое окружение тоже позволяет работь раза в 3 дольше чем тот же гном или даже дольше. А особенно если использовать черную тему ибо экран жрет батарею не меньше проца хоть ты там заоптимизируйся

monkdt
()
Ответ на: комментарий от monkdt

Любому понятно что сколько не оптимизируй mpv нагрузка на проц или гпу будет зависеть от тяжести файла, его кодировки и почих вещей.

А что нужно включить в ffmpeg, чтобы он работал на всех видах, допустим, amd64? А что ты теряешь, как пользующийся? А что вшито в mpv? А что за меню на lua? A pipewire? A почему он падает в той же Ubuntu, если слезть с modesetting драйвера?

Это скорее всего не вопросы, а шум для тебя, приводящего мне как аргумент тёмную тему ;))) Я говорил о замерах одного и того же окружения, где ты не меняешь тему и делаешь замеры, а делаешь что-то другое ;))

Neuromagus
() автор топика
Последнее исправление: Neuromagus (всего исправлений: 1)