LINUX.ORG.RU

Gentoo - ускорение сборки пакетов

 , , ,


0

1

Насколько безопасно использовать для сборки ccache и -j>1 ?

Кроме distcc, еще есть аналоги вынесения сборки частично на другие хосты, лучше облака?

Стоить ли пытаться ускорить каталог сборки вынесением его на tmpfs? Особенно, если tmpfs будет расположен на другом компе и присоединен локально, например через nfs?

Что еще можно улучшить кроме апгрейда железки?

Настройте сборку в несколько потоков, если вы ещё этого не сделали.

infomeh ★★
()

Насколько безопасно использовать для сборки ccache и -j>1

Полностью безопасно, в крайнем случае упадёт сборка.

Стоить ли пытаться ускорить каталог сборки вынесением его на tmpfs?

Конечно. Про удалённую машину - всё будет упираться в скорость соединения.

AbbaT
()

tmpfs по ощущениям ускоряет сборку примерно на треть. А держать его на сетевом ресурсе - бессмысленно на мой взгляд. Весь выигрыш от tmpfs будет нивелирован низкой скоростью сети. Гигабитная сеть - это в среднем около 100 Мб/сек. Что гораздо ниже скорости с которой может работать tmpfs.

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

Можно выделить, скажем, гига 3 под tmpfs (можно и больше или меньше, смотря как у тебя забита оперативка на ноуте) плюс отправлять пакеты через distcc. Ну и заюзать ccache.

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

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

Сравни 200 IOPs у локального HDD и ахулион IOPs у RAM/PCI_SSD на сервачке в локалке.

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

Хотя если distcc, и на слабой машине вся память задействована (нет возможности создать/увеличить tmpfs), то удаленный помощник таки даст некоторый прирост. Все лучше чем гонять на локальном HDD.

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

Ну и заюзать ccache.

Почему-то не собирается gcc-7.3.0-r3, и v6 тоже не собирается.

Gentoo: пытаюсь установить сорцы ядра grsec minipli, но ошибка, обычное ядро ставится (комментарий)

Уж не знаю как извернуться, чтобы заработало.

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

Хм, забавное случайное числовое совпадение у ссылки выше:

?cid=15133333

simoshina
() автор топика

Насколько безопасно использовать для сборки ccache

Актуально для частой пересборка одной версии пакета

и -j>1 ?

Что это? Обычно само собой стараются все ядра нагрузить.

Стоить ли пытаться ускорить каталог сборки вынесением его на tmpfs?

Стоит, но для крупных пакетов можно настроить сборку не в tmpfs, так как может потребоваться, например, 6 Гб и больше места. Если готов столько выделить в tmpfs, то никаких проблем.

Особенно, если tmpfs будет расположен на другом компе и присоединен локально, например через nfs?

Не стоит

distcc

Некоторые пакеты с ним почему-то не собираются.

grem ★★★★★
()

собирать на одном для другого, можно облака, можно разные архитектыры

distcc создавал проблемы после сборки некоторых пакетов

tmpfs, оперативка может понадобится для другого, можно лимиты приоритеты свап и тд но я тупо не парюсь это экономит время

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

Ну так просто сделай на сервере бинхост и с него бинарники качай

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

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

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

tmpfs удаленно? извращенец)

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

на одном для другого

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

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

distcc создавал проблемы после сборки некоторых пакетов

В этих пакетах уже прописано, чтобы emerge не использовал distcc для их сборки? флаги какие-нибудь типа -distcc ?

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

Может, скриптик хотя бы, который сначала разворачивает компиляторные хосты на дешевых линодах по $5/mo, потом апргейдит их и сразу же начинает сборку, а потом опять даунгрейдит :)

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

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

Если я собираю на таком конфиге:

Физический хост: AMD64 Логический chroot: Gentoo32

cat /etc/portage/make.conf (далее)

то это кросскомпиляция или нет?

# These settings were set by the catalyst build script that automatically
# built this stage.
# Please consult /usr/share/portage/config/make.conf.example for a more
# detailed example.

#ABI_X86="-32 -64 -x32"
#USE=" -abi_x86_64 -abi_x86_32 -abi_x86_x32 "
COMMON_FLAGS="-O2  -pipe -march=i486"

# -abi_x86_64 -abi_x86_32 -abi_x86_x32"

CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
FCFLAGS="${COMMON_FLAGS}"
FFLAGS="${COMMON_FLAGS}"
# WARNING: Changing your CHOST is not something that should be done lightly.
# Please consult https://wiki.gentoo.org/wiki/Changing_the_CHOST_variable before changing.
CHOST="i486-pc-linux-gnu"

# NOTE: This stage was built with the bindist Use flag enabled
PORTDIR="/usr/portage"
DISTDIR="/usr/portage/distfiles"
PKGDIR="/usr/portage/packages"

# This sets the language of build output to English.
# Please keep this setting intact when reporting bugs.
LC_MESSAGES=C
MAKEOPTS="-j1"

FEATURES="ccache"
CCACHE_DIR="/var/tmp/ccache/"
CCACHE_SIZE="20G"
simoshina
() автор топика
Ответ на: комментарий от grem

Обычно само собой стараются все ядра нагрузить.

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

Каждый раз временно переключать -j=1 в make.conf для поиска ошибки? Задавать его в командной строке emerge?

simoshina
() автор топика

Кроме distcc, еще есть аналоги вынесения сборки частично на другие хосты, лучше облака?

В смысле? Это специальный инструмент под это дело, что ещё нужно? Остальные ответы в гугле, да и этот тоже.

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

Под какую модель процессора?

В make.conf прописано следующее:

COMMON_FLAGS="-O2 -pipe -march=i486" CHOST=«i486-pc-linux-gnu»

Получается, под i486? Это кросскомпиляция или нет, если Gentoo 32bit i386 x32?

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

Насколько безопасно использовать для сборки ccache Актуально для частой пересборка одной версии пакета

Если еще не используются таймстампы или еще какая-нибудь недетерминировнная хрень (например, linux-ядро)

Обычно само собой стараются все ядра нагрузить.

В последнее время можно упереться в память, пытаясь загрузить все ядра.

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

Если еще не используются таймстампы или еще какая-нибудь недетерминировнная хрень (например, linux-ядро)

В смысле ядро можно собирать с использованием ccache или нет?

Ядро grsec minipli, если это имеет значение.

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

В смысле ядро можно собирать с использованием ccache или нет?

$ grep KBUILD_BUILD_TIMESTAMP -A 10 Documentation/kbuild/kbuild.txt

например так

$ KBUILD_BUILD_TIMESTAMP="$(env LC_ALL="C" date -u -d @0)" make CC="ccache gcc"

Но у меня есть подозрения, что некоторые модули (части) кладут на эту переменную среды.

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

Дык архитектура отличается от твоей - ты на AMD64, а тебе нужно i486.

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

cat путь/до/build.log | grep Error

Вот например mono:

host /var/tmp/portage/dev-lang/mono-4.8.0.524 # cat /var/tmp/portage/dev-lang/mono-4.8.0.524/temp/build.log | grep Error
make[4]: *** [Makefile:1645: mono-boehm] Error 1
make[4]: *** [Makefile:1649: mono-sgen] Error 1
make[3]: *** [Makefile:1474: all] Error 2
make[2]: *** [Makefile:455: all-recursive] Error 1
make[1]: *** [Makefile:535: all-recursive] Error 1
make: *** [Makefile:465: all] Error 2
host /var/tmp/portage/dev-lang/mono-4.8.0.524 # find /var/tmp/portage/dev-lang/mono-4.8.0.524/ -name Makefile | wc
    932     932  102954

Как мне найти ошибку в 932х файлах Makefile? Понятно, что можно скрипт свой написать и т.п. А какие готовые решения есть?

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

Самое простое - открой build.log в текстовом редакторе и ищи по строке Error 1, возможно где-то рядом должно быть сообщение о ошибке.

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

Я когда-то хотел себе установить Gentoo , но Великий Ктулху уберег меня от такого порочного шага . Хвала ему трижды ! Сколько же он мне времени сэкономил , и не сосчитатЬ .

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

Да я так то Devuan пользуюсь, суперскоростная и удобная установка, апгрейды, настройка и т.п.

Но проблемы запустить Devuan на первопеньке, да еще и чтобы приходили security обновления, Jessie - последний релиз, поддерживавший процы недо_i686.

Даже хваленая слака и та нынче требует i686. Да еще в придачу ко всему она глючная приглючная в плане инстолятора, который не смог даже установить lilo. А connochaetos-14.2 смог, но что толку.

Mono мне в принципе некритично для секурной текстовой консольки.

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

В принципе Gentoo без иксов вполне юзабельна, особенно если отдать компиляцию другим нескольким многоядерным хостам.

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

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

Никогда это обычно не было проблемой. Рядом с ошибкой обычно слово Error. Бывает, что разносит, но не слишком далеко и всё равно ясно от чего это.

Можно перед emerge вставлять MAKEOPTS=jX

где X число потоков, если очень нужно.

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

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

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

У меня для virtualbox в /etc/portage/env/makeopts-j1.conf

MAKEOPTS=-j1
и, соответственно, в /etc/portage/package.env/makeopts-j1
app-emulation/virtualbox				makeopts-j1.conf # fatal error: state/cr_statefuncs.h: No such file or directory # fixed with patch

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

А так из ~1100 пакетов всё собирается.

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

Клиент: Core2duo q9500, 6 гиг оперативки + HDD

Точно нужно обновлять, процессор для компиляний слабоват и 6Гб оперативки маловато, требуется 16Гб минимум

Сервер: Phenom2 X6, 32 гига оперативки + nvmeSSD

Странно. Материнские платы для Phenom2 x6 держат больше 16Гб ? Назовите её! Очень интересно!

nvme на материнсках платах под Phenom2 x6 еще интереснее, чем более 16Гб на оных.

То что названо у Вас сервером, это у меня клиенты с 16Гб. Больше 16Гб матери для Phenom2 x6 не держат у меня, да и диски в них втыкать nvme не кошерно, воткнуты SSD - так рационально, так как матери не имеют слотов nvme, а слотов и под периферию не так много, да и скорости нужной Phenom2 x6 для nvme не обеспечит, слабоват будет, как мне дилетанту показалось, Phenom2 x6 для nvme.

На сервер надо что-то от Ризена и мощнее.

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

host /var/tmp/portage/dev-lang/mono-4.8.0.524

Хи,

# eix -I dev-lang/mono
dev-lang/mono
     Installed versions:  6.0.0.313[5](19:08:39 21.07.2019)(doc nls -minimal -pax_kernel -xen ABI_MIPS="-n32 -n64 -o32" ABI_RISCV="-lp64 -lp64d" ABI_S390="-32 -64" ABI_X86="64 -32 -x32" KERNEL="linux")

# inxi
CPU: 6-Core AMD Phenom II X6 1100T (-MCP-) speed/min/max: 3527/800/3300 MHz Kernel: 5.2.2-gentoo x86_64 Up: 3d 6h 22m 
Mem: 6740.4/16038.5 MiB (42.0%) Storage: 465.76 GiB (91.4% used) Procs: 160 Shell: bash 5.0.7 inxi: 3.0.34 
/etc/portage/make.conf #cat phenom 
CFLAGS="-O2 -pipe -march=amdfam10"
CXXFLAGS="${CFLAGS}"
CHOST="x86_64-pc-linux-gnu"
MAKEOPTS="-j6"
CPU_FLAGS_X86="3dnow 3dnowext mmx mmxext popcnt sse sse2 sse3 sse4a"
GRUB_PLATFORMS="pc"

/etc/portage/make.conf # cat ryzen
CFLAGS="-O2 -pipe -march=znver1"
CXXFLAGS="${CFLAGS}"
CHOST="x86_64-pc-linux-gnu"
MAKEOPTS="-j8"
CPU_FLAGS_X86="aes avx avx2 f16c fma3 mmx mmxext pclmul popcnt sse sse2 sse3 sse4_1 sse4_2 sse4a ssse3"
GRUB_PLATFORMS="efi-64"
Deleted
()
Последнее исправление: Deleted (всего исправлений: 5)
Ответ на: комментарий от simoshina

CHOST=«i486-pc-linux-gnu»

У меня как раз есть на продажу раритеты 486 :) и даже 386.

Только Gentoo да и современные linux им не по зубам, будет такое адское слайдшоу как и Win95 на 386 :) и я не про саму компиляцию, а про работу. Да и версий свежего софта которому хватит ОЗУ машинок 486 и 386 не так много среди того что сейчас активно используется. Веб-браузер современный к примеру очень плохо работает при ОЗУ менее 16Гб.

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

Да и версий свежего софта которому хватит ОЗУ машинок 486 и 386 не так много среди того что сейчас активно используется.

Пишут, что i486 поддерживает до 256 метров ОЗУ. Пытаюсь собрать mono под i486, не получается, под i586 получается (комментарий)

Графика ненужна, достаточно текстовой консольки.

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

Точно нужно обновлять, процессор для компиляний слабоват и 6Гб оперативки маловато, требуется 16Гб минимум

А distcc не подойдет? Где взять 16GB под Libreboot?

Странно. Материнские платы для Phenom2 x6 держат больше 16Гб ? Назовите её! Очень интересно!

https://komp.1k.by/utility-motherboards/s.php?alias=utility&alias2=mother...

То что названо у Вас сервером, это у меня клиенты с 16Гб.

Вы крутой и богатый

На сервер надо что-то от Ризена и мощнее.

у вас есть даже Ryzen с PSP.

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

богатый

Увы не богатый, до Дурова мне очень далеко.

Приобретение хотя бы Ryzen это вынужденная реальность, чтобы был хотя бы шанс приблизиться к состоянию богатых.

Для подготовки бинарей только distcc и используется, только зачем это делать, а не взять готовый бинарный легкий дистр ? Тот же Минт например ? Почему Gentoo потребовался на ноуте ?

Пишут, что i486 поддерживает до 256 метров ОЗУ.

Я таких плат для 486 не встречал. Да и емких модулей simm72 тоже, а более современные новые модули матери 486 не поддерживают.

Пытаюсь собрать mono под i486, не получается, под i586 получается

Mono очень прожорлив на память для практического использования даже на 586. Матери 586 тоже памяти не густо поддерживают, в сумме не более 768Мбайт и модули емкие сложно сыскать.

Как избавиться от всей этой 64 битной богохульщины?

Компьютеры на 32 бита и менее бита - это музейные экспонаты. Кстати 64битность подобралась и на мобильные устройства. Мобильные устройства тоже станут вскоре тотально 64 битные.

Поддержку 32 битности (так называемый multilib) я отключил давно уже на своих стендах, так легче жить мне.

/etc/portage/make.conf # cat deprecated 
USE="${USE} -deprecated -abi_x86_32 -multilib no-mulitlib \
-compat -flash -systemd -bluetooth -udisks -upower \
-thunar -ubuntu -spidermonkey \
-profile -cpu-profiler -libatomic -pm-utils acpi \
-nsplugin -smtp -device-mapper -irc -sasl"
Deleted
()
Последнее исправление: Deleted (всего исправлений: 3)
Ответ на: комментарий от simoshina

Графика ненужна, достаточно текстовой консольки.

На винтажные машинки ставьте FreeDOS - и будет текстовая консолька для кодинга без головной боли.

А на винтажные 586 можно Haiku и KolibriOS примерить попробовать, да и разработчикам на этих проектах будут рады, денег не заработать на этих темах (разве что делая курсовые работы школьникам и студентам на этих стендах), но драйва будет предостаточно для творчества.

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

Phenom2 X6, 32 гига оперативки + nvmeSSD

это откуда в древней матери с феномом возможность поставить 32 гига и тем более nvme?

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