Понимание верхней и средней нагрузки

12

Я наблюдаю высокую нагрузку на определенную машину (около 9) во всех трех полях нагрузки. Я понимаю нагрузку как число процессов в состоянии «запущено» / в настоящее время требуется процессорное время. Правильно ли я считаю, что если на моей машине запущено N процессов, это не может привести к нагрузке, превышающей N?

Кроме того, учитывается ли загрузка в отношении процессов или потоков? Другими словами, может ли многопоточный процесс создавать нагрузку, превышающую 1?

Габриэль Шрайбер
источник
Обратите внимание, что (поскольку они обычно планируются очень скоро), задачи в состоянии «непрерывность» также считаются выполняющимися. Просто деталь, а не то, что меняет ваш вопрос.
mattdm

Ответы:

7

Средняя загрузка обычно описывается как «средняя длина очереди выполнения». Поэтому немногие процессы или потоки, потребляющие процессор, могут поднять LA выше 1. Нет проблем, если LA меньше общего числа ядер процессора. Но если он становится больше числа процессоров, это означает, что некоторые потоки / процессы останутся в очереди, готовые к запуску, но ожидающие освобождения процессора.

gelraen
источник
3

Числа, которые используются для расчета средней нагрузки, представляют собой задачи в рабочем или непрерывном состоянии и объем работы, выполненной во временном интервале скользящей средней. Эти задачи могут быть частью многопоточного процесса. По мере сглаживания результатов используемого алгоритма поля становятся нечеткими по времени.

Нагрузка 1 равна 100% стоимости одного процессора. Если бы у вас было многопоточное приложение, в котором количество активных потоков превышало количество доступных процессоров, то нагрузка, превышающая 1, могла бы быть у одного процесса, что, вероятно, будет кратковременным скачком и не будет отражено в более длинные временные срезы просмотра средней нагрузки.

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

nzwulfin
источник
1
- Я до сих пор не видел систему, в которой несколько ядер в сокете открыты для пользовательского пространства таким образом, что они выглядят как что угодно, кроме большего количества процессоров. Итак, в четырехъядерной системе с четырьмя разъемами видно 16 процессоров. (Таким образом, можно легко увидеть, что нагрузка на 9 ниже числа процессоров.)
mattdm
Я понимаю, что числа являются логарифмическими, поэтому они чуть ниже или выше 1. Одна система, которую я имею, я видела, как система сообщала об этом: средняя загрузка: 10,41, 9,57, 9,26. Какие?? Почему одна система Linux сообщает о средней загрузке: 0,81, 1,57, 0,98, тогда как эта система сообщает о средней загрузке: 10,41, 9,57, 9,26? Разве все Unix не одинаковы на этом?
Джангофан
3

Смотрите kernel / sched / loadavg.c, в котором содержится длинный и превосходный комментарий с самого начала, объясняющий вывод среднего значения нагрузки из экспоненциально убывающего среднего числа выполняемых потоков («очередь выполнения») плюс количество непрерывных потоков (ожидание) на ввод-вывод или ожидание блокировки).

Вот суть комментария, но его стоит прочитать полностью:

 * The global load average is an exponentially decaying average of
 * nr_running + nr_uninterruptible.
 *
 * Once every LOAD_FREQ:
 *     nr_active = 0;
 *     for_each_possible_cpu(cpu)
 *         nr_active += cpu_of(cpu)->nr_running +
 *                      cpu_of(cpu)->nr_uninterruptible;
 *     avenrun[n] = avenrun[0] *
 *                  exp_n + nr_active *
 *                  (1 - exp_n)

Реальная жизнь делает код несколько сложным: счетчики на процессор, ядра без галочек, процессоры с горячей заменой, отсутствие кода с плавающей запятой, требующего реализации exp (n) с фиксированной запятой. Но легко увидеть, что все они работают для добросовестной реализации метода, описанного в комментарии.

Вы заметите, что Linux считает потоки , а не только процессы, которые отвечают на ваш вопрос.

vk5tu
источник
0

3 средних значения нагрузки являются чем-то вроде логарифмической функции, вращающейся вокруг числа 1. Что-то похожее на f (x) = eX (e для показателя X). Технически представление с фиксированной запятой экспоненциальной функции убывания, моделирующей среднее значение. Они аддитивны для каждого процессора, поэтому полная загрузка может выглядеть как 4,00 в четырехъядерной системе. Первое число - среднее значение за последнюю минуту, второе - среднее значение за последние пять минут, а третье - среднее значение за последние 15 минут. Я думал, что ответ должен быть опущен здесь, который упоминает это.

djangofan
источник
0

Мгновенная загрузка: количество задач, запущенных или ожидающих выполнения, или иным образом, количество задач, готовых к запуску

Средняя нагрузка: показатель выше, но экспоненциально усредненный с предыдущими выборками того же показателя

Оба эти числа не ограничены, и часто намного больше, чем N.

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

Подробнее об этом здесь

http://blog.angulosolido.pt/2015/04/linux-load-average-definitive-summary.html

Густаво Хомем
источник