В UNIX вычислениях система нагрузка является мерой объема вычислительной работы, которую выполняет компьютерная система. средняя загрузка представляет собой среднюю загрузку системы за период времени. Обычно он представлен в виде трех чисел, которые представляют нагрузку на систему в течение последних одно-, пяти- и пятнадцатиминутных периодов.
Все Unix и Unix-подобные системы генерируют безразмерную метрику из трех чисел «средней нагрузки» в ядро . Пользователи могут легко запросить текущий результат из оболочки Unix, выполнив команду uptime
:
$ uptime 14:34:03 up 10:43, 4 пользователя, средняя нагрузка: 0,06, 0,11, 0,09
Команды w
и top
показывают те же три значения средней нагрузки, что и диапазон графических изображений. пользовательский интерфейс утилиты. В Linux к ним также можно получить доступ, прочитав файл /proc/loadavg
.
Неактивный компьютер имеет загрузку 0 (неактивный процесс не учитывается). Каждый процесс , использующий или ожидающий CPU (очередь готовности или очередь выполнения ) увеличивает номер загрузки на 1. Каждый завершающий процесс уменьшает его на 1. Большинство В системах UNIX учитываются только процессы в запущенном (на ЦП) или работающем (ожидающем ЦП) состояниях. Однако Linux также включает процессы в состояниях непрерывного сна (обычно ожидающие активности disk ), что может привести к заметно разным результатам, если многие процессы остаются заблокированными в I / O из-за загруженной или остановленной системы ввода-вывода. Это, например, включает блокировку процессов из-за сбоя сервера NFS или слишком медленного носителя (например, USB 1.x запоминающих устройств). Такие обстоятельства могут привести к повышенной средней нагрузке, которая не отражает фактического увеличения использования ЦП (но все же дает представление о том, как долго пользователям придется ждать).
Системы рассчитывают среднюю нагрузку как экспоненциально затухающее / взвешенное скользящее среднее числа нагрузки. Три значения средней нагрузки относятся к последней, пяти и пятнадцати минутам работы системы.
С математической точки зрения все три значения всегда усредняют всю нагрузку системы с момента запуска системы. Все они распадаются экспоненциально, но распадаются с разной скоростью: экспоненциально затухают на е через 1, 5 и 15 минут соответственно. Следовательно, 1-минутная средняя нагрузка состоит из 63% (точнее: 1 - 1 / е) нагрузки с последней минуты и 37% (1 / е) средней нагрузки с момента запуска, исключая последнюю минуту. Для 5- и 15-минутной средней нагрузки такое же соотношение 63% / 37% рассчитывается для 5 и 15 минут соответственно. Следовательно, технически неточно, что средняя нагрузка за 1 минуту включает только последние 60 секунд активности, так как она включает 37% активности из прошлого, но правильно утверждать, что она включает в основном последнюю минуту.
Для однопроцессорных систем, которые ограничены ЦП, можно рассматривать среднюю нагрузку как меру использования системы в течение соответствующего периода времени. Для систем с несколькими процессорами необходимо разделить нагрузку на количество процессоров, чтобы получить сопоставимый показатель.
Например, можно интерпретировать среднюю нагрузку «1,73 0,60 7,98» на однопроцессорной системе как:
Это означает, что эта система (ЦП, диск, память и т. д.) могли бы выполнить всю работу, запланированную на последнюю минуту, если бы она была в 1,73 раза быстрее.
В системе с четырьмя ЦП средняя загрузка 3,73 означает, что в среднем 3,73 процесса готовы к запуску, и каждый из них может быть запланирован для ЦП.
В современных системах UNIX обработка многопоточности по отношению к средней нагрузке различается. Некоторые системы рассматривают потоки как процессы для целей расчета средней нагрузки: каждый поток, ожидающий запуска, добавляет 1 к нагрузке. Однако другие системы, особенно системы, реализующие так называемое M: N threading, используют разные стратегии, такие как подсчет процесса ровно один раз для загрузки (независимо от количества потоков) или подсчет только потоков в настоящее время предоставляется планировщику пользовательского потока ядру, что может зависеть от уровня параллелизма, установленного для процесса. Linux, кажется, считает каждый поток отдельно как добавление к нагрузке 1.
Сравнительное исследование различных индексов нагрузки, проведенное Ferrari et al. сообщил, что информация о загрузке ЦП, основанная на длине очереди ЦП, намного лучше справляется с балансировкой нагрузки по сравнению с использованием ЦП. Причина, по которой длина очереди ЦП оказалась лучше, вероятно, состоит в том, что, когда хост сильно загружен, его загрузка ЦП может быть близка к 100% и не может отражать точный уровень загрузки. Напротив, длина очереди ЦП может напрямую отражать величину нагрузки на ЦП. Например, две системы, одна с 3, а другая с 6 процессами в очереди, с большой вероятностью будут иметь коэффициент использования, близкий к 100%, хотя они явно различаются.
В системах Linux средняя загрузка не рассчитывается на каждом такте часов, а определяется значением переменной, которое основано на настройке частоты HZ и проверяется на каждом такте часов. Этот параметр определяет тактовую частоту ядра в герцах (раз в секунду) и по умолчанию равен 100 для тактов 10 мс. Действия ядра используют это количество тактов для определения времени. В частности, функция timer.c :: calc_load (), которая вычисляет среднюю нагрузку, запускается каждые LOAD_FREQ = (5 * HZ + 1) тактов или примерно каждые пять секунд:
unsigned long avenrun [3]; статический встроенный void calc_load (длинные беззнаковые тики) {unsigned long active_tasks; / * фиксированная точка * / static int count = LOAD_FREQ; count - = тиков; if (count < 0) { count += LOAD_FREQ; active_tasks = count_active_tasks(); CALC_LOAD(avenrun[0], EXP_1, active_tasks); CALC_LOAD(avenrun[1], EXP_5, active_tasks); CALC_LOAD(avenrun[2], EXP_15, active_tasks); } }
Массив avenrun содержит среднее значение за 1, 5 и 15 минут. Макрос CALC_LOAD
и связанные с ним значения определены в sched.h:
#define FSHIFT 11 / * количество битов точности * / #define FIXED_1 (1 <>= FSHIFT;
«Выборочное» вычисление средних значений нагрузки - довольно распространенное поведение; FreeBSD также обновляет значение каждые пять секунд. Интервал обычно не является точным, чтобы они не собирали процессы, которые должны запускаться в определенный момент.
Сообщение в списке рассылки Linux считает, что его отметка +1 недостаточна, чтобы избежать Артефакты муара из такой коллекции; вместо этого предлагается интервал 4,61 секунды. Это изменение характерно для ядер системы Android, хотя точное используемое выражение предполагает 100 Гц.
Другие команды для оценки производительности системы включают:
время работы
- надежность системы и средняя нагрузкаверх
- для verall system viewvmstat
- vmstat сообщает информацию о запущенных или заблокированных процессах, памяти, подкачке страниц, блочном вводе-выводе, ловушках и ЦП.htop
- интерактивный процесс viewerdstat
- помогает сопоставить все существующие данные ресурсов для процессов, памяти, подкачки, блочного ввода-вывода, ловушек и активности ЦП.iftop
- интерактивная программа просмотра сетевого трафика для каждого интерфейсаnethogs
- интерактивная программа просмотра сетевого трафика для каждого процессаiotop
- интерактивная программа просмотра ввода-выводаiostat
- для хранения статистики ввода-выводаnetstat
- для сетевой статистикиmpstat
- для статистики процессораtload
- график средней нагрузки для терминалаxload
- график средней загрузки для X/ proc / loadavg
- текстовый файл, содержащий среднюю загрузку