LINUX.ORG.RU

Обсуждение флагов gcc и ld, которые вляют на производительность


0

0

Удалил, но, в общем, правильно.

http://www.linux.org.ru/jump-message.jsp?msgid=1992010

2Gharik:

http://forums.gentoo.org/viewtopic-t-44263-postdays-0-postorder-asc-start-25....

Вот тут ясно видно, что -fomit-frame-pointer ускоряет работу C программ (впрочем, я и сам это проверял). Стоит проверить.

Что касается C++, то, да, использование этого флага увеличивает размер бинарников, и, похоже, замедляет их работу (требуется проверка).

-ftree-vectorize у меня лично пока ничего не сломал

С помощью GCC 4.1.2 собраны RHEL5/FC6/F7 + у меня пока не было программ, которые бы из-за него глючили. Так что сидеть на 3.4.7 не вижу смысла.

Я с помощью GCC 4.2.0 собрал Qt 3.3.8, KDE 3.5.7, kernel, libpng, audacios, все кодеки - пока доволен на 100%.

Что касается ld:

Флаги -Wl,-O1 и -s - совершенно безопасны.

-Wl,--hash-style=gnu -Wl,-Bsymbolic -Wl,-Bsymbolic-functions улучшают скорость запуска (меньше время на relocations и меньше бинарник)

-Wl,--enable-new-dtags уже default в Gentoo 2007.1

Ваши комментарии и дополнения.

★★★★★

[birdie@localhost ~]$ LD_DEBUG=statistics konsole -e /bin/true
      3476:
      3476:     runtime linker statistics:
      3476:       total startup time in dynamic loader: 28261092 clock cycles
      3476:                 time needed for relocation: 24205268 clock cycles (85.6%)
      3476:                      number of relocations: 10555
      3476:           number of relocations from cache: 40832
      3476:             number of relative relocations: 70431
      3476:                time needed to load objects: 3716326 clock cycles (13.1%)
      3476:
      3476:     runtime linker statistics:
      3476:                final number of relocations: 12958
      3476:     final number of relocations from cache: 40866

birdie ★★★★★
() автор топика

2JB:

От -Wl,--sort-common - не увидел _никакой_ разницы - md5 суммы конечных файлов совпадают ;-)

-Wl,--as-needed - включать для сборки мира не надо!, ибо он итак включен в тех портах, где он реально нужен

birdie ★★★★★
() автор топика

2Gharik:

-O3 - это маразм, которым я никогда не пользовался. Я специально гонял пару тестов, разница с -O2 минимальна (±0.5%), зато бинарники получаются огроменные.

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

> -O3 - это маразм, которым я никогда не пользовался. Я специально гонял пару тестов, разница с -O2 минимальна (±0.5%), зато бинарники получаются огроменные.

Есть места, где выигрыш вполне себе реален (мультимедия всякая, и т.п. задачи) - но там такой нюанс, что помимо -O3 имеет место быть эмпирически нашаманенная последовательность флагов, и эффект таки больше от всей комбинации.

Нюанс - на разных процах по-разному, где есть выигрыш у k8 там может отсутствовать эффект у p4.

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

> ХЗ сколько прог работает почти в 2(!) раза медленнее из-за это бага.

Вот потому и сидел на 3.4, а до этого - очень-очень долго на 3.3.

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

> ХЗ сколько прог работает почти в 2(!) раза медленнее из-за это бага.

Ну сколько? 80%? 60% установленных? В крайнем случае никто же не запретит собрать нужные программы именно тем компилятором, который даст лучшую производительность.

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

> от -Wl,-z,now , по моему, уже все отказались.

Ну как у меня был когда-то пару лет назад собран мир, так с тех пор ничего и не менялось. Плавно так перетекаю. Дополнительно у меня ещё -Bdirect + соответственно прилатанные glibc и binutils. Не собирается на автомате только один пакет -- самба, но и это обходится тоже очень легко. Гариковских страшилок про то как всё падает и на глазах разлагается ни разу не наблюдал, отчего и возмутился. Не спорю, что сейчас есть более эффективные способы, которые дают новые gcc и binutils, но пока не обновлю железо текущее положение устраивает полностью. В планах amd64, вот тогда будет повод покрасноглазить. Насчёт -O3 -- в тех пакетах, где это реально необходимо, этот параметр вшит намертво. Так что -O2 и никаких гвоздей.

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

> Насчёт -O3 -- в тех пакетах, где это реально необходимо, этот параметр вшит намертво. Так что -O2 и никаких гвоздей.

Согласен.

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

> -Bdirect уже вроде устарел и сейчас в моде --hash-style=gnu или нет?

50/50 ;-)

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

> -Bdirect уже вроде устарел и сейчас в моде --hash-style=gnu или нет?

Просто -Bdirect не "взяли" в glibc и автора пнули. А --hash-style=gnu с опциями хэширования допилили до ума попозже, да и по эффективности он до -Bdirect всё-таки не дотянул. Я даже не знаю, в каком дистрибутиве сейчас он официально используется, и использовался ли вообще. Если только в сусе.

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

> Гариковских страшилок про то как всё падает и на глазах разлагается ни разу не наблюдал, отчего и возмутился.

Какое ещё "всё", дядя? Прочитать тяжко слово "x-org и его модули" было? За "Троцкого" вообще по уму стоило отловить и этим самым мешочком поучить уму-разуму...

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

> Прочитать тяжко слово "x-org и его модули" было?

Предлагаешь верить твоим правдивым речам, а не моим бесстыжим глазам? У меня уже два года мир крутится, регулярно апдейтится, и "x-org и его модули" в том числе с 6.8.2 до 7.2 (то, что я собирал именно с этим набором флагов). Так что тезис о фамилии остаётся в силе, хотя не исключены какие-нибудь более тонкие эффекты. ;)

> За "Троцкого" вообще по уму стоило отловить и этим самым мешочком поучить уму-разуму...

Запишись в очередь. Можешь в льготную -- для стариков, беременных, раненых и детей.

PS: Если будешь в Тамбове, стукни в джаббер (в профиле). Устроим LOR-party, а то у нас местные какие-то латентные все.

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

> Предлагаешь верить твоим правдивым речам, а не моим бесстыжим глазам? У меня уже два года мир крутится, регулярно апдейтится, и "x-org и его модули" в том числе с 6.8.2 до 7.2 (то, что я собирал именно с этим набором флагов). Так что тезис о фамилии остаётся в силе, хотя не исключены какие-нибудь более тонкие эффекты. ;)

Видать устройство глазюк принципиально разное, или же имеет место быть неявная фильтрация этого самого "-z now" (ну по логике-то вещей догадаться можно, что оно делает и почему с модулями иксорга глючить начинает, э?). Судя по слову "мир" - имеет место быть гента, а раз гента - то в ебилде 100% стоит фильтр.

> Запишись в очередь. Можешь в льготную -- для стариков, беременных, раненых и детей.

Дучше в ту, что "для инвалидов и контуженных" =)

> PS: Если будешь в Тамбове, стукни в джаббер (в профиле). Устроим LOR-party, а то у нас местные какие-то латентные все.

Сие может случиться только если в Тамбове нефть качают, иначе путь туда заказан.

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

Bdirect известен тем что шоманы из каноникала им орудуют, соответсвенно вся бубунта и валится на глазах.

Bdirect не просто костыль ломающий все что можно сломать, но и преимуществ он дает в максимум в 10% на особых случаях, хэшстайл же даже оптимизацией трудно назвать, но он сильнее чем Bdirect уменьшает время эффективного линкования по обратной пропорции size(n libs)/bogomips и при этом эффективен всегда и универсален и ничего не ломает.

Неудивительно что он считайте уже в 2.7 когда binutils новые допилят.

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

> Видать устройство глазюк принципиально разное, или же имеет место быть неявная фильтрация этого самого "-z now"

Ну уж /portage/eclass/x-modular.eclass и нужный .ebuild в /portage/x11-base/xorg-server/ я перекрыть оверлеем осилю.

> (ну по логике-то вещей догадаться можно, что оно делает и почему с модулями иксорга глючить начинает, э?).

С каким именно модулем? Может я просто проблемы не вижу, оттого, что просто об неё не спотыкаюсь? В логах ругани никакой не наблюдаю. Каких-то глюков не наблюдаю. Судя по текущему содержимому x-modular.eclass проблема действительно есть, но явно не у меня. Так что за модуль-то?

> Судя по слову "мир" - имеет место быть гента, а раз гента - то в ебилде 100% стоит фильтр.

Обижаешь... вшитое -Wl,-z,lazy выковыривается без каких-то адских напрягов. Опять же, если бы я этого не знал наверняка, то не спорил бы.

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

Конкретно, по:

x-modular_specs_check() {
        if [[ ${PN:0:11} = "xorg-server" ]] || [[ -n "${DRIVER}" ]]; then
                append-ldflags -Wl,-z,lazy
                # (#116698) breaks loading
                filter-ldflags -Wl,-z,now
        fi
}

фильтрация очевидна.

Когда модули (GLcore, glx, etc) иксорга линкуются с "-Wl,-z,now",
то вырезаются кросс-зависимости их друг от друга и в результате,
в частности, происходит облом с DRI на ATI X-YYY (glx хочет загрузить
GLcore, а ему - фиг в ответ). И точно так же с некоторыми другими
модулями.

Gharik
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.