Эта статья требует дополнительных ссылок для проверки . ( ноябрь 2010 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения ) |
В вычислениях UNIX загрузка системы - это мера объема вычислительной работы, которую выполняет компьютерная система. Средняя нагрузка представляет собой среднюю загрузку системы в течение определенного периода времени. Обычно он представлен в виде трех чисел, которые представляют нагрузку на систему в течение последних одно-, пяти- и пятнадцатиминутных периодов.
Расчет нагрузки в стиле 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 (бездействующий процесс не учитывается). Каждый процесс, использующий ЦП или ожидающий его ( очередь готовности или очередь выполнения ), увеличивает номер загрузки на 1. Каждый завершающий процесс уменьшает его на 1. Большинство систем UNIX учитывают только процессы в запущенном (на ЦП) или исполняемом (ожидающем ЦП) ) состояний . Однако Linux также включает процессы в непрерывном состоянии сна (обычно ожидающие активности диска ), что может привести к заметно разным результатам, если многие процессы остаются заблокированными при вводе-выводе из-за занятости или остановки системы ввода-вывода. [1]Это, например, включает блокировку процессов из-за сбоя сервера NFS или слишком медленного носителя (например, запоминающих устройств USB 1.x). Такие обстоятельства могут привести к повышенной средней нагрузке, которая не отражает фактического увеличения использования ЦП (но все же дает представление о том, как долго пользователям придется ждать).
Системы расчета нагрузки в среднем , как экспоненциально затухает / взвешенное скользящее среднее от нагрузки числа . Три значения средней нагрузки относятся к последней, пяти и пятнадцати минутам работы системы. [2]
С математической точки зрения, все три значения всегда усредняют всю загрузку системы с момента ее запуска. Все они распадаются экспоненциально, но распадаются с разной скоростью : экспоненциально затухают на е через 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 к нагрузке. [3]
Загрузка ЦП и загрузка ЦП [ править ]
Сравнительное исследование различных показателей нагрузки, проведенное Ferrari et al. [4] сообщил, что информация о загрузке ЦП, основанная на длине очереди ЦП, намного лучше справляется с балансировкой нагрузки по сравнению с загрузкой ЦП. Причина, по которой длина очереди ЦП улучшилась, вероятно, состоит в том, что, когда хост сильно загружен, его загрузка ЦП может быть близка к 100% и не может отражать точный уровень загрузки. Напротив, длина очереди ЦП может напрямую отражать величину нагрузки на ЦП. Например, две системы, одна с 3, а другая с 6 процессами в очереди, с большой вероятностью будут иметь коэффициент использования, близкий к 100%, хотя они, очевидно, различаются. [ оригинальное исследование? ]
Расчет загрузки процессора [ править ]
В системах Linux средняя загрузка не рассчитывается на каждом такте часов, а определяется значением переменной, которое основано на настройке частоты HZ и проверяется на каждом такте часов. Этот параметр определяет тактовую частоту ядра в герцах (раз в секунду) и по умолчанию равен 100 для тактов 10 мс. Действия ядра используют это количество тактов для определения времени. В частности, функция timer.c :: calc_load (), которая вычисляет среднюю нагрузку, запускается каждые LOAD_FREQ = (5 * HZ + 1) тактов или примерно каждые пять секунд:
беззнаковый длинный авенран [ 3 ];статический встроенный void calc_load ( длинные беззнаковые тики ) { unsigned long active_tasks ; / * фиксированная точка * / static int count = LOAD_FREQ ; count - = тиков ; если ( количество < 0 ) { количество + = 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) / * 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 тоже обновляет значение каждые пять секунд. Интервал обычно не является точным, чтобы они не собирали процессы, которые должны запускаться в определенный момент. [5]
Сообщение в списке рассылки Linux считает, что его отметка +1 недостаточна, чтобы избежать артефактов муара из такой коллекции, и вместо этого предлагает интервал 4,61 секунды. [6] Это изменение распространено среди системных ядер Android , хотя точное используемое выражение предполагает 100 Гц. [7]
Другие команды производительности системы [ править ]
Другие команды для оценки производительности системы включают:
uptime
- надежность системы и средняя нагрузка- top - для общего обзора системы
- vmstat - vmstat сообщает информацию о запущенных или заблокированных процессах, памяти, подкачке страниц, блочном вводе-выводе, ловушках и ЦП.
- htop - интерактивный просмотрщик процессов
dstat
- помогает сопоставить все существующие данные ресурсов для процессов, памяти, подкачки, блочного ввода-вывода, ловушек и активности ЦП.- iftop - интерактивный просмотрщик сетевого трафика для каждого интерфейса
nethogs
- интерактивный просмотрщик сетевого трафика для каждого процессаiotop
- интерактивный просмотрщик ввода / вывода [8]- iostat - для статистики ввода / вывода хранилища
- netstat - для сетевой статистики
mpstat
- для статистики процессораtload
- график средней нагрузки для терминалаxload
- график средней нагрузки для X/proc/loadavg
- текстовый файл со средней загрузкой
См. Также [ править ]
- использование процессора
Внешние ссылки [ править ]
- Брендан Грегг (8 августа 2017 г.). «Средняя загрузка Linux: разгадывая тайну» . Проверено 22 января 2018 .
- Нил Дж. Гюнтер . «Средняя нагрузка UNIX - Часть 1: Как это работает» (PDF) . TeamQuest . Проверено 12 августа 2009 года .
- Андре Льюис (31 июля 2009 г.). «Понимание загрузки процессора Linux - когда вам следует беспокоиться?» . Проверено 21 июля 2011 года . Объяснение с использованием иллюстрированной аналогии с дорожным движением.
- Рэй Уокер (1 декабря 2006 г.). «Проверка средней нагрузки» . Linux Journal . Проверено 21 июля 2011 года .
- Карстен Беккер. «Набор инструментов для мониторинга загрузки Linux OSS» . LoadAvg.
Ссылки [ править ]
- ^ http://linuxtechsupport.blogspot.com/2008/10/what-exactly-is-load-average.html
- ^ Уокер, Рэй (1 декабря 2006 г.). «Проверка средней нагрузки» . Linux Journal . Проверено 13 марта 2012 года .
- ^ См. Http://serverfault.com/a/524818/27813
- ^ Феррари, Доменико; и Чжоу, Суннян; « Эмпирическое исследование индексов нагрузки для приложений балансировки нагрузки », Proceedings of Performance '87, 12-й международный симпозиум по компьютерному моделированию, измерению и оценке производительности, издательство North Holland Publishers, Амстердам, Нидерланды, 1988, стр. 515–528
- ^ "Как рассчитывается средняя загрузка FreeBSD?" . Обмен стеков Unix и Linux .
- ^ Рипке, Клаус (2011). «Архив ядра Linux: LOAD_FREQ (4 * HZ + 61) избегает loadavg Moire» . lkml.iu.edu . график и патч
- ^ «Исправить ядро с загрузкой 4.61s. · Проблема №2109 · AOSC-Dev / aosc-os-abbs» . GitHub .
- ^ http://man7.org/linux/man-pages/man8/iotop.8.html