LINUX.ORG.RU

Вопросы по Gentoo или немного паранойи

 ,


2

3

Всем здрасте =]

Собираю Gentoo, ядро с BFS и BFQ патчами, -fomit-frame-pointer во флагах компиляции, собираюсь в последующем юзать prelink и возможно e4rat (см. предыдущий мой тред).

Терзают некоторые сомнения на счет стабильности работы всего этого. Хотя может быть это лишь паранойя.

Итак, вопрос к знатокам.

1. Что плохого может сулить совместное использование -fomit-frame-pointer во флагах, BFS + BFQ в ядре и prelink/e4rat, могут ли они негативно повлиять друг на друга или же на общую стабильность системы?

2. Я знаю о том, что -fomit-frame-pointer делает отладку практически невозможной, а есть ли другие минусы?

3. Я не указал во флагах -mmmx, но

Gentoo ~ # echo | gcc -dM -E - -march=native | grep MMX
#define __MMX__ 1
Значит ли это, что MMX указывать во флагах не обязательно и оно в любом случае будет включено?

★★★★★

Последнее исправление: neocrust (всего исправлений: 1)
devl547@localhost ~ $ zgrep BFS /proc/config.gz 
CONFIG_SCHED_BFS=y
devl547@localhost ~ $ zgrep BFQ /proc/config.gz 
CONFIG_IOSCHED_BFQ=y
devl547@localhost ~ $ grep CFLAGS /etc/make.conf  
CFLAGS="-march=native -O3 -g0 -s -mmmx -mssse3 -mfpmath=both -ffast-math -ftree-vectorize -fno-tree-pre -ffunction-sections -fdata-sections -fno-asynchronous-unwind-tables -Wno-all"

Prelink и preload включены, e4rat особого профита не приносил, да и работает только с ext4. В таком состоянии уже больше года - все отлично, проблем никаких.

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

Starting with GCC version 4.6, the default setting for 32-bit GNU/Linux x86 and 32-bit Darwin x86 targets has been changed to -fomit-frame-pointer

То есть указывать уже не надо.

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

Разве fpmath=both не снижает производительность? И с O3 ведь не собирается/не работает большая часть пакетов..

~ $ grep O3 /etc/portage/package.env/x86_64-pc-linux-gnu 
dev-libs/icu gcc-O3
dev-libs/boost gcc-O3
dev-lang/perl gcc-O3
dev-lang/lua gcc-O3
app-emulation/wine gcc-O3 no-tmpfs
dev-lang/python gcc-O3
dev-db/sqlite gcc-O3
dev-db/mariadb gcc-O3 no-tmpfs
dev-libs/libxml2 gcc-O3

//frame-pointer вообще не нужен для amd64, к примеру.

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

Разве fpmath=both не снижает производительность?

Нет. Скорее наоборот - местами аж до +50% производительности может выдать.

И с O3 ведь не собирается/не работает большая часть пакетов..

У меня все работает. Проблемы только с sqlite, который не умеет в ffast-math.

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

Не похоже, что для x86 (i686) это справедливо =]

Gentoo ~ # gcc --version
gcc (Gentoo 4.6.3 p1.13, pie-0.5.2) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
Это свободно распространяемое программное обеспечение. Условия копирования
приведены в исходных текстах. Без гарантии каких-либо качеств, включая 
коммерческую ценность и применимость для каких-либо целей.
Gentoo ~ # gcc -march=native -msse3 -fomit-frame-pointer -Q --help=optimizers -fverbose-asm | grep fomit-fr
  -fomit-frame-pointer        		[включено]
Gentoo ~ # gcc -march=native -msse3 -Q --help=optimizers -fverbose-asm | grep fomit-fr
  -fomit-frame-pointer        		[выключено]
Gentoo ~ # 

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

про флаги

для всей системы : О2
для пакетов реально требующих скорости : О3 (Оfast) , но в большинстве случаев разрабы сами устанавливают нужные флаги (переопределить: USE=«custom-cflags custom-optimization»)
также можно профильнуть нужную приложуху : pgo (USE=«pgo», у www-client/firefox (например) даже в ебилде вшито)

остальное все - от лукавого

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

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

teod0r ★★★★★
()

-fomit-frame-pointer - одобряю, но на amd64 и так включено. (У тебя i686?)

Prelink - Не одобряю. Лучше устройся на работу и купи себе небольшой SSD. Глюки рандомные и довольно частые. ~1,5 года назад. Счас не знаю.

-03 и ffast-math тоже говно, но если интересно попересобирать мир и половить багов, то ставь. Ничего на свете лучше нету, чем бродить по белу свету -march=native или -march=your_arch -fommit... -O2 -pipe.

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

Можешь ещё ответить на третий вопрос (см. первый пост, про MMX), если знаешь ответ? =]

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

-fomit-frame-pointer - одобряю, но на amd64 и так включено.
на amd64 и так включено

Хочется разобраться, как это проверить?

Из генту-вики:

The flag -fomit-frame-pointer is enabled at -O1, -O2, -O3 and -Os on arches where it doesn't interfere with debugging, such as AMD64, but not x86.
Из мана gcc - наоборот. И вот:

$ uname -sm
Linux x86_64
$ gcc -march=native -Q --help=optimizers | grep fomit
  -fomit-frame-pointer                  [disabled]
varchar
()
Ответ на: комментарий от devl547

Результаты выходят в пределах погрешности, существуют какие-нибудь приличные бенчмарки под линукс? Но пока BYTEmark benchmark показывает меньшие значения с fpmath=both, хотя тестированием это назвать сложно.

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

Глюки рандомные и довольно частые

ни разу не наблюдал никаких глюков

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

Нет. Скорее наоборот - местами аж до +50% производительности может выдать.

В давние времена, когда я собирал OpenOffice с mfpmath=both он у меня эпично падал в рандомные моменты. Остальное ПО вроде вело себя нормально, но с тех пор я зарекся глобально играться с CFLAGS, относящимися к математике/сопроцессору

Pinkbyte ★★★★★
()

1. нет
2. нет
3. -march задаёт некие инструкции поддерживаемые серией процов, например core2 задаёт все simd-ы вплоть до ssse3 (т.к. это поддерживают все корки, в отличии от sse4*)
да, указывать не обязательно, если в роли -march задан проц поколением выше пенька_mmx

megabaks ★★★★
()

Терзают некоторые сомнения на счет стабильности

ну вот может, через пару лет, дойдёт, перейдёшь на дебиан, закончишь школу и заведёшь девушку.

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

Товарищ, да хоть 42, мне то пофиг. Но в первые два года гентушества у меня тоже было -fomg-optimized и полный тюнинг. Но после того как пару раз половил сегфолтов и кучу различных мелких глюков причастность к которым имели prelink и флаги gcc я снес к чертям prelink и стал использовать -march=native. И ты знаешь, за эти полтора года у меня нет проблем со сборкой и работоспособностью системы.

Просто весь этот тюнинг не оправдан. Если ты мантейнер какого то одного пакета, то безусловно методом проб и ошибок можно определить оптимальные флаги без ущерба стабильности. Но в у меня даже в минимальной, аскетичной системе около 400 пакетов. Поди потом разберись почему отвалилось то, или другое.

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

Ещё Сильви на эту тему целую научную работу организовывала, да.

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

Со скайпом например, точно были. Может сейчас уже не так.

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

Ах вот оно как, ясно, правда удивляет. Как и это:

Ещё Сильви на эту тему целую научную работу организовывала
организовывала

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

Да пофиг горшки и детишки немытые. Компилятор врёт — вот беда! Целая «научная работа» была, а плоды где? Для женщины процесс важнее результата...

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

Насчёт -fomg-optimized соглашусь, хотя за сегфолты и глюки отвечают как правило вполне определённые флаги, но prelink весьма полезная штука, последний раз какие-либо проблемы с ней были проблемы много лет назад.

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

Плоды тут

P.S. НЕ верьте выхлопу

gcc ... -Q ...--help=target,optimizers...

Если уж хочется посмотреть какие именно флаги будут задействованы…

echo "int main() { return 0; }" |LANG=en gcc ваши_флаги -v -Q -x c - 2>&1 | tr "\n" " " | sed -e "s|.*options enabled:||" -e "s|Compiler.*||" -e 's| |\n|g' | sort -u

или просто

echo "int main() { return 0; }" |LANG=en gcc ваши_флаги -v -Q -x c - 2>&1

Посмотреть задаваемые -march и размеры кэшей(-march=native)

echo "int main() { return 0; }" |LANG=en gcc -march=native -v -E -x c - 2>&1

или

gcc -### -march=native -E /usr/include/stdlib.h 2>&1 | grep "/usr/libexec/gcc/.*cc1"

Авторство: megabaks

Кстати, мегабакс, твой сайт отдаёт 403, пришлось яндексокэшем пользоваться.

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

Я не ныкаюсь за проксями, по вечерам вынужден врубать VPN, так как пров режет скорость. Сейчас всё норм.

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

Ну я и писал, что последний раз юзал prelink года полтора назад. Как сейчас с ним дела обстоят я не знаю

partyzan ★★★
()

Паранойя пусть остается с мастдаем.

У меня на работе десктоп Core i7 3770K с GCC 4.7.2

CFLAGS="-O2 -march=core-avx-i -pipe -flto"
ACCEPT_KEYWORDS="amd64"
8 месяцев, полет нормальный... До этого стоял седьмой мастдай и глючил как только мог, тупил и тормозил 2 месяца из трех.

Плюс production server Xeon E5620 @ 2.40GHz с GCC 4.7.2

CFLAGS="-O2 -march=corei7 -pipe -flto"
ACCEPT_KEYWORDS="x86"
. 5 месяцев, полет нормальный...

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