Запутался с -j, --jobs и load-average в make.conf [РЕШЕНО]

Вопрос первый: -j в MAKEOPTS и --jobs в EMERGE_DEFAULT_OPTS - это одно и то же или не совсем? У меня Phenom II x4, 4 ядра, соответственно, поставил -j5,правильно ли я понял, что --jobs тоже должно быть равно 5?
Вопрос второй: куда в make.conf вставляется опция load-average (MAKEOPTS или EMERGE_DEFAULT_OPTS) и чему она должна быть равна? Здесь на форуме попадалось, что при прочих равных иногда и на 2 тормозит, а иногда и на 6 без проблем. Поделитесь, пожалуйста, опытом, я так понимаю, число берётся именно из него.
На всякий случай - man emerge, man make и man make.conf я читал, собственно при очередном прочтении и возникли эти вопросы.

-j в MAKEOPTS это опция для

-j в MAKEOPTS это опция для gcc, которая разрешает gcc компилировать исходный код в несколько потоков. К emerge она имеет опосредованное отношение
--jobs в EMERGE_DEFAULT_OPTS указывает сколько пакетов будет емерджится одновременно(например при emerge -uDN world)

Рожденный в СССР

MAKEOPTS="-jN" здесь

MAKEOPTS="-jN" здесь указывается во сколько потоков будет непосредственно проходить компиляция.

EMERGE_DEFAULT_OPTS="--jobs 3" или EMERGE_DEFAULT_OPTS="-j 3" указывает сколько ставить одновременно пакетов.

EMERGE_DEFAULT_OPTS="-j 3 --load-average=3" - указывает меньше какой нагрузке на процессор ещё можно запускать установку следующего пакета.

К примеру вы ставите пакет и у него в зависимости 5 других пакетов.
Параметры переопределены такие:

MAKEOPTS="-j3"
EMERGE_DEFAULT_OPTS="--jobs 3 --load-average=3"

Допустим первый пакет содержит много модулей / библиотек в своём составе и в случае опций в MAKEOPTS его составные части будут собираться параллельно, т.е. будет запущено три компилятора gcc и будут собираться разные библиотеки в нём.

В случае если при сборке этого пакета загрузку процессора не превысила 3 будет запущена сборка следующего пакета из списка зависимостей., если в нём тоже есть составляющие, которые могут собираться параллельно (не зависимо друг от друга) будет также по возможности запущено три gcc.

Если же при всём этом средняя загрузку процессора не превышает 3 будет запущена сборка следующего пакета, он к примеру не может собираться параллельно (его составные части) и для него будет запущен один процесс gcc.

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

kostik87 написал(а): Если же

kostik87 написал(а):
Если же при всём этом средняя загрузку процессора не превышает 3, будет...

3 чего?

3 - среднее кол-во процессов

3 - среднее кол-во процессов в очереди на исполнение.

Погуглите что такое load average

Проблемы погуглить особой

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

Большое спасибо всем! Почти

Большое спасибо всем!
Почти на все вопросы ответили, а про load average нашёл здесь:

Цитата:
Общепринятое мнение, что значения в la не должны быть больше единицы. Однако, стоит учитывать особенности аппаратной части системы, а именно колличество процессоров. Например, в случае, если система располагает ресурсами 4-х процессоров(ядер), то значения la <= 4 считаются нормальными.

Кстати, банально ступил: почему-то считал, что load average относится именно к emerge, а то, что в top-е - это нечто совсем другое :-)))
Тему пока не закрываю, потому что остался последний вопрос - практический:
Итак, у меня 4-ядерный процессор и 4Гб памяти, сижу кропаю статью (Libreoffice, Firefox, GoldenDict и что-нибудь из картографии или же статистики - анализ данных). Всё это под Кедами. Параллельно обновляю мир (от раза в день до раза в неделю в среднем) и хочу, чтобы система не тормозила. Чему должны быть равны вышеперечисленные параметры?

Из прочитанного получается:
-j5 - просто из формулы "число ядер +1" и по опыту проблем не было
--jobs=4 - в неком идеальном варианте по пакету на ядро
--load-average=3 - оставляю запас ресурса на текущую работу

Пожалуйста, поправьте, если ошибся, или подтвердите. Тогда можно будет считать материал усвоенным ;-) и пометить тему как завершённую.

Коли уж я на форуме и мне не

Коли уж я на форуме и мне не лень ткну)

semlanik, коль уж ты на

semlanik, коль уж ты на форуме, то читай до конца, ибо, видимо, тебе таки лень.

Danhuu, в целом так, но зависит от того, что конкретно ты собирать будешь. Вобщем тут надо по ощущуениям пробовать уменьшать/увеличивать. А если спешить особо некуда, то ставь небольшие зачения, и пусть оно там себе собирается..

Коль уж я на форуме начал

Коль уж я на форуме - начал дописывать сообщение, но ты откомментил его до того как я его засабмитил ) так что - то что осталось за кадром:

Цитата:
-j5 - просто из формулы "число ядер +1" и по опыту проблем не было

Меня многие могу сейчас закидать камнями, но на самом деле считается по формуле "число доступных потоков + n"
Поясню:
1. У вас система с Hyper Threading, из нового все что связано с Core i7 из старого все начиная с Pentium4, процессор имеет n физических ядер, но количество очередей удваивается из-за лихой интеловской технологии. Отсюда есть возможность строить в "2xчисло ядер" потоков.
2. У вас настроен distcc(в кратце распределенная компиляция через "сеть"). Тут формула становится сложной и зависит от пропускной способности сети и суммарного количества ядер в распределенной сети.

И наконец про n - это число можно получить эмпирическим путем просто поигравшись. В 70% случаев для обычного десктопа это 1. Для много процессорных систем оно иногда 2-3.

Цитата:
--jobs=4 - в неком идеальном варианте по пакету на ядро

- не ориентируйтесь на потоки сборки и ядра. Тут не угадаешь, несколько jobs сделано для того чтобы можно было распарралелить обращение к IO. Пока один процесс сборки пакета компилирует, другой занимает винчестер, и т.д. Чтобы ниодин ресурс не простаивал. Но два процесса именно компиляции в таком варианте будут работать медленнее или также, как еслибы их запустили последовательно.

Цитата:
--load-average=3 - оставляю запас ресурса на текущую работу

Ну как-то так )

В целом решено

Уважаемый semlanik, спасибо за теорию! Жаль, что к моему случаю она неприменима (AMD Phenom II X4), но если когда разбогатею на i7, пригодится ;-)
Тыкать было необязательно, я в курсе, и помечу только сейчас, т.к. именно после ответов izbushka и вашего последнего я как-то успокоился, сделав вывод, что предложенные значения параметров годятся как минимум в качестве стартовой позиции, дальше по ощущениям.

Тыкнул уж так от природной

Тыкнул уж так от природной вредности ;) Еще отмечу что раньше были пакетики, может быть и сейчас есть, которые так или иначе не хотели чтобы их собирали в несколько потоков. Из известных мне это firefox(который вроде оклемался) и openoffice(его судьба мне не известна, я теперь пользуюсь libre, там вроде с многопоточной сборкой все хорошо). Для них можно прописать MAKEOPTS отдельно, тут не ткну протите, но ставится в районе профайлов вроде. и вот небольшая хелпа если имеете навыки англ языка почитайте на досуге, наверно пригодится http://en.gentoo-wiki.com/wiki/Portage_tips

ЗЫ: преждевременная оптимизация зло;)

Подводя итоги

Итак, спасибо всем ответившим, пока оставил значения -j5, --jobs=4 и --load-average=3, но если будут мысли в тему - пишите, я проглядываю время от времени.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".