Вопрос по установке на HP mini

В make.conf оставляй такие параметры:

CFLAGS="-O3 -march=native -mtune=native --param l1-cache-line-size=64 --param l1-cache-size=32 --param l2-cache-size=256 -msahf -mcx16 -mmmx -msse -msse2 -msse3 -mssse3 -mfpmath=both -fmerge-all-constants -fexcess-precision=fast -fomit-frame-pointer -fno-align-functions -fno-align-loops -fno-align-labels -fno-align-jumps --param max-unroll-times=4 --param max-unrolled-insns=72 --param max-average-unrolled-insns=216 -funroll-all-loops -fno-gcse -g0 -Wno-all -pipe"

CXXFLAGS="${CFLAGS}"

Если хочешь и gcc оптимизировать, то добавь в make.conf:

#Специальные ключи для компиляции самого gcc
BOOT_CFLAGS="${CFLAGS}"
#Устарел, но прописываем на всякий случай
T_CFLAGS="${CFLAGS}"

Для ядра:

HOSTCFLAGS   = -O3 -march=native -mtune=native --param l1-cache-line-size=64 --param l1-cache-size=32 --param l2-cache-size=256 -msahf -mcx16 -fmerge-all-constants -fexcess-precision=fast -fomit-frame-pointer -fno-align-functions -fno-align-loops -fno-align-labels -fno-align-jumps --param max-unroll-times=4 --param max-unrolled-insns=72 --param max-average-unrolled-insns=216 -funroll-all-loops -fno-gcse -g0 -Wno-all -pipe

HOSTCXXFLAGS = $(HOSTCFLAGS)
CFLAGS_MODULE   = $(HOSTCFLAGS)
CFLAGS_KERNEL   = $(HOSTCFLAGS)

Пересборку мира лучше делать, например в tty2 (из иксов переход по Ctrl+Alt+F2, обратно Ctrl+Alt+F7) с выводом информации в файл командой emerge -e --keep-going system world > /home/my-emerge.log > /dev/tty2

В случае сбоя иксов - пересборка не прервется, а посмотреть пропущенный пакет всегда можно будет в файле /home/my-emerge.log

Спасибо за обстоятельный совет. Сейчас аккуратно допишу в /etc/make.conf и /usr/src/linux/Makefile, наконец вычищу конфигурацию ядра от неиспользуемых драйверов и пересоберу еще разок. А вот world уже дома буду - с постоянным коннектом и питанием на ближайшие двое суток.

Но сначала - gcc :slight_smile:

А вот с gcc вновь незадача -

*warning: gcc/cc1-checksum.o differs
warning: gcc/cc1plus-checksum.o differs
Bootstrap comparison failure!
gcc/builtins.o differs
make[2]: ***** [compare] Ошибка 1
make[2]: Выход из каталога `/var/calculate/tmp/portage/sys-devel/gcc-4.5.3-r1/work/build’
make[1]: ***** [stage3-bubble] Ошибка 2
make[1]: Выход из каталога `/var/calculate/tmp/portage/sys-devel/gcc-4.5.3-r1/work/build’
make: ***** [bootstrap-lean] Ошибка 2
emake failed*
В общем - не собрался gcc…

Сейчас поставлю у себя gcc на проверку с этими параметрами собираться.

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

"-O2 -g0 -Wno-all -pipe"

(условно, просто как пример) и, вполне возможно, что в этих двух строках взаимоисключающие аргументы (на что, возможно, я и напоролся). Я закомментировал для проверки догадки в make.conf строки:

#BOOT_CFLAGS="${CFLAGS}"
#T_CFLAGS="${CFLAGS}"
и компилятор, естественно, собрался.

На самом деле виноват один из ключей -fno-align-labels -fno-align-loops -fno-align-jumps.

Без -fno-align-labels сломался на сравнении 2 и 3 стейджа:

Comparing stages 2 and 3
warning: gcc/cc1plus-checksum.o differs
warning: gcc/cc1-checksum.o differs
Bootstrap comparison failure!
gcc/builtins.o differs
make[2]: *** [compare] Ошибка 1
make[2]: Выход из каталога `/var/tmp/portage/sys-devel/gcc-4.5.3-r1/work/build'
make[1]: *** [stage3-bubble] Ошибка 2
make[1]: Выход из каталога `/var/tmp/portage/sys-devel/gcc-4.5.3-r1/work/build'
make: *** [bootstrap-lean] Ошибка 2

Вычеркиваю теперь первые два и запускаю по новой.

Доопределил в make.conf

переменную

B_FLAGS= "-O3 -march=native -mtune=native --param l1-cache-line-size=64 --param l1-cache-size=32 --param l2-cache-size=256 -msahf -mcx16 -mmmx -msse -msse2 -msse3 -mssse3 -mfpmath=both -fmerge-all-constants -fexcess-precision=fast -g0 -Wno-all -pipe"

чтобы не разбираться, что где мешает, выкинул большую часть из CFLAGS, т.к. полагаю, что в “строкодробилке” часть, которая отвечает за циклы не особо и критична - все равно все замедляется работой с файловой системой.

Далее подправил конструкцию

BOOT_CFLAGS="${B_FLAGS}"

и пересобрал gcc

Прошло нормально

gcc собрался со стандартными параметрами разворота циклов:

-O3 -march=native -mtune=native -fomit-frame-pointer -pipe --param l1-cache-line-size=64 --param l1-cache-size=32 --param l2-cache-size=256 -msahf -mcx16 -mmmx -msse -msse2 -msse3 -mssse3 -ffast-math -mfpmath=both -fexcess-precision=fast -fmerge-all-constants -fno-gcse -funroll-all-loops -g0 -Wno-all

А если включать ограничения, то сборка завершается неудачей:

--param max-unroll-times=4 --param max-unrolled-insns=72 --param max-average-unrolled-insns=216

Эти ограничения немного превышают стандартные, но почему ломается код одному gcc известно. Надо будет почитать еще раз документацию.

Совсем отказываться на процессорах атом от разворота циклов нельзя, так как в некоторых случаях потеря производительности доходит до 30%(

Собралось. Правда, за трое с половиной суток. Интересно, на atom 270 сколько это времени заняло?

Странно. На Atom N270 тоже 3,5 суток… с этими параметрами. На Atom N570 не больше 2 суток должно занимать. Единственно что могу сказать эти параметры примерно в 2 раза увеличивают время компиляции пакетов, но, на мой взгляд, оно того стоит.

Во-первых, может быть скорость сборки в большей степени определяется уже скоростью работы с дисковой подсистемой? И сам компилятор (в смысле работы) уже не особо критичен?

А во-вторых еще появился вопрос. Судя по описанию комилятора, существует возможность задать опцию -mtune=atom, которая, если верить описанию, определяет следующую поддержку: Intel Atom CPU with 64-bit extensions, MMX, SSE,SSE2, SSE3 ans SSSE3 instruction set support Может быть воткнуть этот ключ и заодно избавиться от ключей -mmmx -msse -msse2 -msse3 -mssse3 точно, а также, возможно, и от ключей *-msahf mcx16* ? При указании семейства, полагаю, компилятор автоматом должен включить эти ключи. Кроме того, возможе ли вариант, что указание ключа позволит как минимум избежать прямого указания кэша первого уровня? А второй указать явно - 256К.

Самое странное, что замена native на atom давала негативный результат. Хотя это более чем странно. Но попробовать стоит и замерить результаты, так как данная замена позволяет использовать распределенную компиляцию на группе компьютеров с использованием distcc и, возможно, ситуация изменилась уже в лучшую сторону. Другие предположения также нуждаются в проверке. В некоторых случаях gcc не включает опции, которые по идее должны быть включены. Именно по этому делал акцент на параметры, от которых зависит ощутимый вклад в увеличение производительности.

Первоначальная строка в make.conf:

CFLAGS="-O3 -march=native -mtune=native --param l1-cache-line-size=64 --param l1-cache-size=32 --param l2-cache-size=256 -msahf -mcx16 -mmmx -msse -msse2 -msse3 -mssse3 -mfpmath=both -fmerge-all-constants -fexcess-precision=fast -fomit-frame-pointer -fno-align-functions -fno-align-loops -fno-align-labels -fno-align-jumps --param max-unroll-times=4 --param max-unrolled-insns=72 --param max-average-unrolled-insns=216 -funroll-all-loops -fno-gcse -g0 -Wno-all -pipe"

Результат в файле test1_netbook.jpg

Далее вносим про атом и удаляем все, что связано с кэшем первого уровня и математикой:

CFLAGS="-O3 -march=native -mtune=atom --param l2-cache-size=256 -fmerge-all-constants -fexcess-precision=fast -fomit-frame-pointer -fno-align-functions -fno-align-loops -fno-align-labels -fno-align-jumps --param max-unroll-times=4 --param max-unrolled-insns=72 --param max-average-unrolled-insns=216 -funroll-all-loops -fno-gcse -g0 -Wno-all -pipe"

Результат в файле test2_netbook.jpg

Потом вновь добавил по кэш:

CFLAGS="-O3 -march=native -mtune=atom --param l1-cache-line-size=64 --param l1-cache-size=32 --param l2-cache-size=256 -fmerge-all-constants -fexcess-precision=fast -fomit-frame-pointer -fno-align-functions -fno-align-loops -fno-align-labels -fno-align-jumps --param max-unroll-times=4 --param max-unrolled-insns=72 --param max-average-unrolled-insns=216 -funroll-all-loops -fno-gcse -g0 -Wno-all -pipe"

Получил третий результат - файл test3_netbook.jpg

Вывод, на мой взгляд, следующий:

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

test1_netbook.jpg
test2_netbook.jpg
test3_netbook.jpg

Цитата “Вывод, на мой взгляд, следующий: несмотря на то, что четко прописанные ключи гарантируют заведомо лучший результат, использование в ключах компиляции семейства процессоров взамен детального уточнения видов инструкций позволяет получить результат, не намного хуже результата, получающегося при использовании предельно детализированной строки ключей компилятора.”

В общей оценке производительности системы потеря 5-10% не сильно заметна. Но… в некоторых задачах будет приличное проседание. В тесте NEURAL NET разрыв в 1 балл это значительный провал в производительности. В тесте LU DECOMPOSITION разрыв в 100 баллов это почти на 17% больше затраченного времени на некоторых задачах.

P.S.
За тесты спасибо. Жаль, что до сих пор не выправили параметры для процессора atom в компиляторе gcc 4.5.3. В версиях 4.6+ все обстоит еще хуже - наблюдается регресс.

P.P.S.
Почему то не работает форматирование текста в сообщениях.

Сергей Казаков wrote:

Во-первых, может быть скорость сборки в большей степени определяется уже скоростью работы с дисковой подсистемой? И сам компилятор (в смысле работы) уже не особо критичен?

Только если мало оперативной памяти.

А так вполне логично. Всякие “кЕши” спасают только на забегах с короткой дистанцией или при “круговых” бегах вокруг “стадиона”, когда основная масса критичного кода всегда в кеш памяти. В остальных случаях потеря производительности ошеломляет. Представьте бегуна на старте с хорошими кроссовками для бега, когда после старта секунд через 10 покрытие с хорошим сцеплением вдруг переходит в ледовое…