gentoo: Как заставить emerge лучше использовать больше ядер?

У меня есть Intel Atom N2800 (слабенький, но удобный Aspire One D270, которого все еще достаточно для той работы, для которой я его использую), но обновления идут очень медленно (около дней).

Я использую MAKEOPTS=" -j5 " в /etc/make.conf и emerge -DuNqv world, и иногда это доходит до Load avg 5.0 5.0 5.0 или около того, но обычно это где-то около 1,5.

Есть ли способ сделать его более параллельным (и, следовательно, более быстрым)?


person gilhad    schedule 02.01.2016    source источник
comment
Это вопрос программирования или аппаратный вопрос?   -  person OneCricketeer    schedule 02.01.2016
comment
Я думаю, это больше configuration вопрос о gentoo и его пакетном менеджере. Я упомянул аппаратное обеспечение, поскольку из-за этого могут быть некоторые ограничения. Но моя цель состоит в том, чтобы диспетчер пакетов использовал аппаратное обеспечение как можно больше, чтобы делать вещи быстрее, поэтому, возможно, есть какие-то другие варианты, чтобы сказать, что он запускает пакеты параллельно или иным образом использует больше ядер/потоков, даже если пакет просто компилируется. однопоточная или около того   -  person gilhad    schedule 02.01.2016


Ответы (1)


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

Вы можете управлять предполагаемой загрузкой, используя --load-average=##.## в сочетании с --jobs=## в командной строке. Замените # на цифры. Вы также можете сделать это и большинство других значений (полу)постоянными, добавив EMERGE_DEFAULT_OPTS="--jobs=## --load-average=##.##" в make.conf. Существует достойная статья об использовании этих значений в реальных приложениях. Чего нет в статье, так это того, как правильно обойти сбои сборки из-за настроенного make.conf. Если вы хотите сделать эти настройки глобальными (make.conf), вы также должны понимать, как обойти эти настройки с помощью пользовательской среды для определенных пакетов. См. здесь.

Еще несколько замечаний (хороших и плохих) по ускорению портежей:

1) Включите parallel_fetch в вашем make.conf, добавив/отредактировав FEATURES="${FEATURES} parallel-fetch". Эта запись позволит загружать пакеты во время сборки текущего. На самом деле это не отвечает на ваш вопрос как таковой, но это одно из наименее инвазивных «ускорений» Portage.

2) Включить кеш. Установите пакет ccache и добавьте ccache в FEATURES, как в #1. Вам также потребуется определить CCACHE_SIZE и CCACHE_DIR. Хотя это начиналось как отличная идея, многие люди охладели к преимуществам ccache. Известно, что он вызывает проблемы с некоторыми пакетами, и есть много отчетов, в которых утверждается, что он может чаще снижать производительность компиляции, чем ускорять ее. Я не могу сказать, насколько это правильно, но многие пункты адресованы в этой статье предупреждения об использовании ccache являются общепринятым мнением.

3) ReNice появится. Вы можете определить приращение вежливости, добавив PORTAGE_NICENESS=-#. Значение этого числа добавляется к значению процесса по умолчанию. Сделав его отрицательным, вы уменьшите привлекательность процессов возникновения. Будьте очень осторожны с этой настройкой, так как она будет применяться и к подпроцессам. С некоторыми пакетами, имеющими несколько подпроцессов, это может стать рискованным в спешке.

Последнее замечание: некоторые из этих функций зависят от версии вашего портаджа. Я упоминаю об этом, поскольку вы сказали, что редактируете /etc/make.conf, который является старым местоположением. В более новых версиях portage файлы конфигурации перенесены в /etc/portage. Если у вас есть make.conf в обоих местах, файл в /etc/portage заменит файл в /etc.

person gravy21    schedule 04.01.2016
comment
Часть --jobs и --load-average, являющихся параметрами emerge (не make), была именно тем, что я искал (и как-то пропустил/не понял) в документации. Я также буду использовать ReNicing, так как обычно я запускаю его ночью, и больше ничего не должно работать (или, по крайней мере, работать быстро — некоторые виджеты что-то показывают и тому подобное, но они не важны). Ccache, вероятно, не лучший вариант для меня, так как я делаю большие обновления (например, мир через полгода), поэтому вероятность попадания в кеш, вероятно, очень мала. - person gilhad; 19.02.2016