Запутался с -j, --jobs и load-average в make.conf [РЕШЕНО]
Danhuu 16 ноября, 2011 - 16:31
Вопрос первый: -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 его составные части будут собираться параллельно, т.е. будет запущено три компилятора gcc и будут собираться разные библиотеки в нём.
В случае если при сборке этого пакета загрузку процессора не превысила 3 будет запущена сборка следующего пакета из списка зависимостей., если в нём тоже есть составляющие, которые могут собираться параллельно (не зависимо друг от друга) будет также по возможности запущено три gcc.
Если же при всём этом средняя загрузку процессора не превышает 3 будет запущена сборка следующего пакета, он к примеру не может собираться параллельно (его составные части) и для него будет запущен один процесс gcc.
И того при таких настройках в случае не высокой загрузки процессора у вас может быть запущено на сборку 9 копий gcc для различных частей пакетов.
Дальше после завершения сборки одного из пакетов в случае не превышения загрузки процессора будет запущена установка следующего пакета с возможной параллельной компиляцией тремя копиями gcc.
kostik87 написал(а): Если же
3 чего?
3 - среднее кол-во процессов
3 - среднее кол-во процессов в очереди на исполнение.
Погуглите что такое load average
Проблемы погуглить особой
Проблемы погуглить особой нет, я спрашивал не для себя. Просто если уж отвечают топикстартеру на вопрос, хорошо бы сразу писать, проценты это, число загруженных на данный момент ядер, или число процессов в очереди или что-то ещё.
Большое спасибо всем! Почти
Большое спасибо всем!
Почти на все вопросы ответили, а про load average нашёл здесь:
Кстати, банально ступил: почему-то считал, что load average относится именно к emerge, а то, что в top-е - это нечто совсем другое :-)))
Тему пока не закрываю, потому что остался последний вопрос - практический:
Итак, у меня 4-ядерный процессор и 4Гб памяти, сижу кропаю статью (Libreoffice, Firefox, GoldenDict и что-нибудь из картографии или же статистики - анализ данных). Всё это под Кедами. Параллельно обновляю мир (от раза в день до раза в неделю в среднем) и хочу, чтобы система не тормозила. Чему должны быть равны вышеперечисленные параметры?
Из прочитанного получается:
-j5 - просто из формулы "число ядер +1" и по опыту проблем не было
--jobs=4 - в неком идеальном варианте по пакету на ядро
--load-average=3 - оставляю запас ресурса на текущую работу
Пожалуйста, поправьте, если ошибся, или подтвердите. Тогда можно будет считать материал усвоенным ;-) и пометить тему как завершённую.
Коли уж я на форуме и мне не
Коли уж я на форуме и мне не лень ткну)
semlanik, коль уж ты на
semlanik, коль уж ты на форуме, то читай до конца, ибо, видимо, тебе таки лень.
Danhuu, в целом так, но зависит от того, что конкретно ты собирать будешь. Вобщем тут надо по ощущуениям пробовать уменьшать/увеличивать. А если спешить особо некуда, то ставь небольшие зачения, и пусть оно там себе собирается..
Коль уж я на форуме начал
Коль уж я на форуме - начал дописывать сообщение, но ты откомментил его до того как я его засабмитил ) так что - то что осталось за кадром:
Меня многие могу сейчас закидать камнями, но на самом деле считается по формуле "число доступных потоков + n"
Поясню:
1. У вас система с Hyper Threading, из нового все что связано с Core i7 из старого все начиная с Pentium4, процессор имеет n физических ядер, но количество очередей удваивается из-за лихой интеловской технологии. Отсюда есть возможность строить в "2xчисло ядер" потоков.
2. У вас настроен distcc(в кратце распределенная компиляция через "сеть"). Тут формула становится сложной и зависит от пропускной способности сети и суммарного количества ядер в распределенной сети.
И наконец про n - это число можно получить эмпирическим путем просто поигравшись. В 70% случаев для обычного десктопа это 1. Для много процессорных систем оно иногда 2-3.
- не ориентируйтесь на потоки сборки и ядра. Тут не угадаешь, несколько jobs сделано для того чтобы можно было распарралелить обращение к IO. Пока один процесс сборки пакета компилирует, другой занимает винчестер, и т.д. Чтобы ниодин ресурс не простаивал. Но два процесса именно компиляции в таком варианте будут работать медленнее или также, как еслибы их запустили последовательно.
Ну как-то так )
В целом решено
Уважаемый 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, но если будут мысли в тему - пишите, я проглядываю время от времени.