LINUX.ORG.RU

Дикий жор памяти при сборке кросскомпилятора

 , , ,


0

3

Собираю кросскомпилятор arm-gcc с make -j6.

В первый выжрал все 8 гиг рамы и превед адские тормоза. Думал чутка памяти не хватает - добавил 10 гигов свопа - выжрало все и не подавилось, превед адские тормоза.

Как сию похабщину исправить?

Ось - Devuan chimera x64. Ничего не ковырял, обнов не ставил. В сабже нуб.

Раньше собирал под msys - был свой цирк с конями, но память не жрало как не в себя.


Скорее всего линковка, особенно если это отладочная версия, хотя на моей памяти сборка GCC так много не потребляет. Можно сделать ulimit на память, а как упадёт уже собирать без -j6. Если это действительно линкер, то gold должен работать лучше.

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

Как можно сохранить в лог использование памяти?

Не знаю таких утилит.

Сборка меньшим количеством потоков должна помочь.

xaizek ★★★★★
()

Может помочь настройка zram и ограничение количество потоков до 3-4. Я так на ноуте собираю, тоже 8 гигов, больше в него просто не воткнуть. С zram всё стало значительно приятнее работать, в том числе и сборка. Я знаю что многие не любят компрессию памяти и предлагаю просто попробовать сначала. Не понравится - выключишь, там всей настройки ровно на две минуты ковыряния, вместе с чтением HOWTO.

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

Попробую ulimit с 4 гигами и 5 потоками. У меня своп на 10 гигов и тоже заполнен.

Перед зависанием htop показывал, что пользователю надо 2 раза по 99 гигов…

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

Не знаю как сейчас, но во времена моей молодости (4 года назад) армовский тулчейн из buildroot свободно на 8 гб собирался. Может разжирел за это время.

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

Ты же понимаешь что ulimit не ограничит жор памяти, а просто заставит компилятор упасть с ошибкой при достижении лимита? Попробуй zram настроить всё таки. При 8 и менее гигах настоятельно рекомендуется, а в некоторых дистрибутивах так аж по умолчанию уже включено.

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

Перазагрузил, продолжил сборку в шесть потоков. Жрет менее 500 мег рамы.

Х.з. что это такое было два раза подряд.

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

Компиляторы сами по себе штука сложная. Там куча нюансов есть, иногда на определённом железе сборка в многопотоке может вызывать различные сбои. Советую почитать LFS, там есть инфа про кросскомпиляцию и про сборку компиляторов.

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

Запустил сборку заново и в htop увидел более 10 cplus в момент жора памяти. Ctrl-c в консоли прекратили это безобразие. Затем make -j6 и все прошло как по маслу.

Тесты закончатся, поробую в 5 потоков собрать.

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

В какой-то момент сборочные процессы начинали плодиться как кролики пока не заканчивалась память.

Тащемта ограничил лимит потоков при сборке у make. И собрал в шесть протоков, да.

Такая фигня именно с 12.1.0. Собрал 11.2.0 без проблем.

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