Нагрузка (вычисления)
Эта статья нуждается в дополнительных цитатах для проверки . ( ноябрь 2010 г. ) |
В UNIX вычислениях системы загрузка является мерой объема вычислительной работы, выполняемой компьютерной системой. представляет Средняя нагрузка собой среднюю нагрузку системы за определенный период времени. Обычно он отображается в виде трех чисел, обозначающих загрузку системы за последние одну, пять и пятнадцать минут.
Расчет нагрузки в стиле Unix
[ редактировать ] безразмерную метрику из трех чисел «средней нагрузки» Все Unix и Unix-подобные системы генерируют в ядре . Пользователи могут легко запросить текущий результат из оболочки Unix , запустив команду uptime
команда:
$ uptime 14:34:03 up 10:43, 4 users, load average: 0.06, 0.11, 0.09
The 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» в однопроцессорной системе как:
- За последнюю минуту система была перегружена в среднем на 73% (1,73 выполняющихся процесса, так что в среднем 0,73 процесса приходилось ждать своей очереди для однопроцессорной системы).
- В течение последних 5 минут процессор простаивал в среднем 40% времени.
- За последние 15 минут система была перегружена в среднем на 698% (7,98 выполняющихся процессов, так что в среднем 6,98 процессам приходилось ждать своей очереди для однопроцессорной системы).
Это означает, что данная система (ЦП, диск, память и т. д.) могла бы справиться со всей работой, запланированной на последнюю минуту, если бы она была в 1,73 раза быстрее.
В системе с четырьмя процессорами среднее значение нагрузки 3,73 будет означать, что в среднем имеется 3,73 процесса, готовых к запуску, и каждый из них можно запланировать для процессора.
В современных UNIX-системах обработка потоков в зависимости от средней нагрузки различается. Некоторые системы рассматривают потоки как процессы для расчета средней нагрузки: каждый поток, ожидающий запуска, добавляет 1 к нагрузке. Однако другие системы, особенно системы, реализующие так называемую многопоточность M:N , используют другие стратегии, такие как подсчет процесса ровно один раз с целью загрузки (независимо от количества потоков) или подсчет только потоков, открытых в данный момент пользователем. планировщик потоков к ядру, что может зависеть от уровня параллелизма, установленного для процесса. Похоже, что Linux считает каждый поток отдельно, добавляя 1 к нагрузке. [6]
Загрузка ЦП и загрузка ЦП
[ редактировать ]Сравнительное исследование различных индексов нагрузки, проведенное Феррари и др. [7] сообщили, что информация о загрузке ЦП, основанная на длине очереди ЦП, гораздо лучше справляется с балансировкой нагрузки по сравнению с загрузкой ЦП. Причина, по которой длина очереди ЦП оказалась лучше, вероятно, заключается в том, что когда хост сильно загружен, его загрузка ЦП, вероятно, будет близка к 100%, и он не может отразить точный уровень загрузки. Напротив, длина очереди ЦП может напрямую отражать величину нагрузки на ЦП. Например, две системы, одна с 3, а другая с 6 процессами в очереди, с большой вероятностью будут иметь загрузку, близкую к 100%, хотя они, очевидно, различаются. [ оригинальное исследование? ]
Учёт загрузки процессора
[ редактировать ]В системах Linux среднее значение нагрузки не рассчитывается для каждого такта, а определяется значением переменной, которая основана на настройке частоты Гц и проверяется на каждом такте. Этот параметр определяет тактовую частоту ядра в герцах (раз в секунду), и по умолчанию он равен 100 для тактов 10 мс. Действия ядра используют это количество тактов для определения времени. В частности, функция timer.c::calc_load(), вычисляющая среднее значение нагрузки, запускается каждый раз. LOAD_FREQ = (5*HZ+1) тиков или примерно каждые пять секунд:
unsigned long avenrun[3];static inline void calc_load(unsigned long ticks){ unsigned long active_tasks; /* fixed-point */ static int count = LOAD_FREQ; count -= ticks; 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 /* nr of bits of precision */#define FIXED_1 (1<<FSHIFT) /* 1.0 as fixed-point */#define LOAD_FREQ (5*HZ+1) /* 5 sec intervals */#define EXP_1 1884 /* 1/exp(5sec/1min) as fixed-point */#define EXP_5 2014 /* 1/exp(5sec/5min) */#define EXP_15 2037 /* 1/exp(5sec/15min) */#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]
Другие команды производительности системы
[ редактировать ]Другие команды для оценки производительности системы включают в себя:
uptime
– надежность системы и средняя нагрузкаtop
– для общего обзора системыvmstat
– vmstat сообщает информацию о запущенных или заблокированных процессах, памяти, подкачке, блочном вводе-выводе, ловушках и процессоре.htop
– интерактивный просмотрщик процессовdool
(ранееdstat
), [11]atop
– помогает сопоставить все существующие данные о ресурсах для процессов, памяти, подкачки, блочного ввода-вывода, ловушек и активности ЦП.iftop
– интерактивный просмотр сетевого трафика для каждого интерфейсаnethogs
– интерактивный просмотрщик сетевого трафика для каждого процессаiotop
– интерактивный просмотрщик ввода/вывода [12]iostat
– для хранения статистики ввода/выводаnetstat
– для сетевой статистикиmpstat
– для статистики процессораtload
— график средней загрузки терминалаxload
– график средней нагрузки для X/proc/loadavg
– текстовый файл, содержащий среднюю нагрузку
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Загрузка процессора» . Проверено 4 октября 2023 г.
- ^ "/прок" . Иерархия файловой системы Linux . Проверено 4 октября 2023 г.
- ^ «Разная статистика ядра в /proc/stat» . Проверено 4 октября 2023 г.
- ^ «Техническая поддержка Linux: что такое средняя загрузка?» . 23 октября 2008 г.
- ^ Уокер, Рэй (1 декабря 2006 г.). «Изучение средней нагрузки» . Linux-журнал . Проверено 13 марта 2012 г.
- ^ См . http://serverfault.com/a/524818/27813.
- ^ Феррари, Доменико; и Чжоу, Суннянь; « Эмпирическое исследование индексов нагрузки для приложений балансировки нагрузки », Proceedings of Performance '87, 12-й Международный симпозиум по моделированию, измерению и оценке производительности компьютеров, издательство North Holland Publishers, Амстердам, Нидерланды, 1988, стр. 515–528.
- ^ «Как рассчитывается средняя нагрузка во FreeBSD?» . Обмен стеками Unix и Linux .
- ^ Рипке, Клаус (2011). «Архив Linux-Kernel: LOAD_FREQ (4*HZ+61) позволяет избежать муара загрузки» . lkml.iu.edu . график и патч
- ^ «Обновите ядро с загрузкой версии 4.61 · Проблема № 2109 · AOSC-Dev/aosc-os-abbs» . Гитхаб .
- ^ Бейкер, Скотт (28 сентября 2022 г.). «dool — совместимый с Python3 клон dstat» . Гитхаб . Проверено 22 ноября 2022 г.
...Даг Вирс прекратил разработку Dstat...
- ^ «Iotop(8) — страница руководства Linux» .
Внешние ссылки
[ редактировать ]- Брендан Грегг (8 августа 2017 г.). «Средние значения нагрузки Linux: разгадка тайны» . Проверено 22 января 2018 г.
- Нил Дж. Гюнтер . «Средняя нагрузка UNIX – Часть 1: Как это работает» (PDF) . ТимКвест . Проверено 12 августа 2009 г.
- Андре Льюис (31 июля 2009 г.). «Понимание нагрузки на процессор Linux – когда вам следует беспокоиться?» . Проверено 21 июля 2011 г. Объяснение с использованием иллюстрированной аналогии с дорожным движением.
- Рэй Уокер (1 декабря 2006 г.). «Изучение средней нагрузки» . Linux-журнал . Проверено 21 июля 2011 г.
- Карстен Беккер. «Набор инструментов мониторинга нагрузки Linux OSS» . Средняя нагрузка