stringtranslate.com

Нагрузка (вычисления)

htop отображает значительную вычислительную нагрузку (вверху справа: Средняя нагрузка: )

В вычислениях UNIX загрузка системы является мерой объема вычислительной работы, которую выполняет компьютерная система. Средняя загрузка представляет собой среднюю загрузку системы за определенный период времени. Обычно она отображается в виде трех чисел, которые представляют загрузку системы за последние одно-, пяти- и пятнадцатиминутные периоды.

Расчет нагрузки в стиле Unix

Все Unix и Unix-подобные системы генерируют безразмерную метрику из трех чисел «средней нагрузки» в ядре . Пользователи могут легко запросить текущий результат из оболочки Unix , выполнив uptimeкоманду:

$ время работы 14:34:03 до 10:43, 4 пользователя, средняя загрузка: 0.06, 0.11, 0.09

Команды wи topпоказывают те же три средних значения нагрузки, что и ряд утилит графического пользовательского интерфейса .

В операционных системах на базе ядра Linux к этой информации можно легко получить доступ, прочитав /proc/loadavgфайл.

Для более глубокого изучения такого рода информации, согласно стандарту иерархии файловой системы Linux , в файле отображается информация, зависящая от архитектуры /proc/stat. [1] [2] [3]

Бездействующий компьютер имеет номер загрузки 0 (бездействующий процесс не учитывается). Каждый процесс , использующий или ожидающий ЦП ( очередь готовности или очередь выполнения ), увеличивает номер загрузки на 1. Каждый завершающийся процесс уменьшает его на 1. Большинство систем UNIX учитывают только процессы в запущенном ( на ЦП) или запущенном (ожидание ЦП) состоянии . Однако Linux также учитывает процессы в непрерываемых состояниях сна (обычно ожидающих активности диска ), что может привести к заметно отличающимся результатам, если многие процессы остаются заблокированными в вводе-выводе из-за занятой или остановленной системы ввода-вывода. [4] Это, например, включает процессы, блокирующиеся из-за сбоя сервера NFS или слишком медленного носителя (например, запоминающих устройств USB 1.x). Такие обстоятельства могут привести к повышенному среднему значению загрузки, что не отражает фактического увеличения использования ЦП (но все же дает представление о том, как долго пользователям приходится ждать).

Системы вычисляют среднюю нагрузку как экспоненциально затухающую/взвешенную скользящую среднюю нагрузки . Три значения средней нагрузки относятся к последним одной, пяти и пятнадцати минутам работы системы. [5]

Математически говоря, все три значения всегда усредняют всю нагрузку системы с момента запуска системы. Все они затухают экспоненциально, но они затухают с разной скоростью : они затухают экспоненциально по e через 1, 5 и 15 минут соответственно. Следовательно, средняя нагрузка за 1 минуту состоит из 63% (точнее: 1 - 1/ e ) нагрузки за последнюю минуту и ​​37% (1/ e ) средней нагрузки с момента запуска, исключая последнюю минуту. Для средних нагрузок за 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 , используют другие стратегии, такие как подсчет процесса только один раз для целей нагрузки (независимо от количества потоков) или подсчет только потоков, которые в данный момент представлены планировщиком пользовательских потоков ядру, что может зависеть от уровня параллелизма, установленного для процесса. Linux, по-видимому, считает каждый поток отдельно, добавляя 1 к нагрузке. [6]

Загрузка ЦП против использования ЦП

Сравнительное исследование различных индексов нагрузки, проведенное Феррари и др. [7], показало, что информация о загрузке ЦП, основанная на длине очереди ЦП, гораздо лучше справляется с балансировкой нагрузки по сравнению с использованием ЦП. Причина, по которой длина очереди ЦП показала лучшие результаты, вероятно, заключается в том, что когда хост сильно загружен, загрузка его ЦП, скорее всего, будет близка к 100%, и она не может отразить точный уровень загрузки. Напротив, длина очереди ЦП может напрямую отражать объем нагрузки на ЦП. Например, две системы, одна с 3, а другая с 6 процессами в очереди, с большой вероятностью будут иметь загрузку, близкую к 100%, хотя они, очевидно, различаются. [ оригинальное исследование? ]

Расчет загрузки ЦП

В системах Linux средняя загрузка не рассчитывается на каждом такте часов, а управляется значением переменной, которое основано на настройке частоты HZ и проверяется на каждом такте часов. Эта настройка определяет частоту тактов ядра в Герцах (раз в секунду), и по умолчанию она равна 100 для тактов в 10 мс. Действия ядра используют это количество тактов для измерения времени. В частности, функция timer.c::calc_load(), которая вычисляет среднюю загрузку, запускается каждые LOAD_FREQ = (5*HZ+1) тактов, или примерно каждые пять секунд:

неподписанный длинный авенран [ 3 ];  static inline void calc_load ( unsigned long ticks ) { unsigned long active_tasks ; /* фиксированная точка */ static int count = LOAD_FREQ ;               количество -= тики ; если ( количество < 0 ) { количество += LOAD_FREQ ; активные_задачи = количество_активных_задач (); CALC_LOAD ( avenrun [ 0 ], EXP_1 , активные_задачи ); CALC_LOAD ( avenrun [ 1 ], EXP_5 , активные_задачи ); CALC_LOAD ( avenrun [ 2 ], EXP_15 , активные_задачи ); } }                       

Массив avenrun содержит 1-минутное, 5-минутное и 15-минутное среднее значение. Макрос CALC_LOADи его связанные значения определены в sched.h:

#define FSHIFT 11 /* количество бит точности */ #define FIXED_1 (1<<FSHIFT) /* 1.0 как фиксированная точка */ #define LOAD_FREQ (5*HZ+1) /* 5-секундные интервалы */ #define EXP_1 1884 /* 1/exp(5сек/1мин) как фиксированная точка */ #define EXP_5 2014 /* 1/exp(5сек/5мин) */ #define EXP_15 2037 /* 1/exp(5сек/15мин) */#define CALC_LOAD(load,exp,n) \  load *= exp; \  load += n*(FIXED_1-exp); \  load >>= FSHIFT;

«Выборочное» вычисление средних значений нагрузки — довольно распространенное поведение; FreeBSD тоже обновляет значение только каждые пять секунд. Интервал обычно не считается точным, чтобы не собирать процессы, которые должны запускаться в определенный момент. [8]

В сообщении в списке рассылки Linux говорится, что его +1 тик недостаточен для избежания артефактов муара от такого сбора, и вместо этого предлагается интервал в 4,61 секунды. [9] Это изменение распространено среди ядер системы Android , хотя точное используемое выражение предполагает HZ 100. [10]

Другие команды производительности системы

Другие команды для оценки производительности системы включают:

Смотрите также

Ссылки

  1. ^ "Загрузка ЦП" . Получено 4 октября 2023 г.
  2. ^ "/proc". Иерархия файловой системы Linux . Получено 4 октября 2023 г.
  3. ^ "Различные статистические данные ядра в /proc/stat" . Получено 4 октября 2023 г. .
  4. ^ «Техническая поддержка Linux: Что такое средняя загрузка?». 23 октября 2008 г.
  5. Уокер, Рэй (1 декабря 2006 г.). «Исследование средней нагрузки». Linux Journal . Получено 13 марта 2012 г.
  6. ^ См. http://serverfault.com/a/524818/27813
  7. ^ Феррари, Доменико; и Чжоу, Соннянь; «Эмпирическое исследование индексов нагрузки для приложений балансировки нагрузки», Труды Performance '87, 12-й Международный симпозиум по моделированию, измерению и оценке производительности компьютеров, North Holland Publishers, Амстердам, Нидерланды, 1988, стр. 515–528
  8. ^ "Как рассчитывается средняя нагрузка на FreeBSD?". Unix & Linux Stack Exchange .
  9. ^ Рипке, Клаус (2011). "Архив ядра Linux: LOAD_FREQ (4*HZ+61) избегает муара loadavg". lkml.iu.edu .график и патч
  10. ^ "Патч ядра с загрузкой 4.61s · Проблема № 2109 · AOSC-Dev/aosc-os-abbs". GitHub .
  11. ^ Бейкер, Скотт (28 сентября 2022 г.). "dool - совместимый с Python3 клон dstat". GitHub . Получено 22 ноября 2022 г. ...Даг Вирс прекратил разработку Dstat...
  12. ^ "Iotop(8) - Страница руководства Linux".

Внешние ссылки