Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

В вычислениях 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.

Ссылки [ править ]

  1. ^ http://linuxtechsupport.blogspot.com/2008/10/what-exactly-is-load-average.html
  2. ^ Уокер, Рэй (1 декабря 2006 г.). «Проверка средней нагрузки» . Linux Journal . Проверено 13 марта 2012 года .
  3. ^ См. Http://serverfault.com/a/524818/27813
  4. ^ Феррари, Доменико; и Чжоу, Суннян; « Эмпирическое исследование индексов нагрузки для приложений балансировки нагрузки », Proceedings of Performance '87, 12-й международный симпозиум по компьютерному моделированию, измерению и оценке производительности, издательство North Holland Publishers, Амстердам, Нидерланды, 1988, стр. 515–528
  5. ^ "Как рассчитывается средняя загрузка FreeBSD?" . Обмен стеков Unix и Linux .
  6. ^ Рипке, Клаус (2011). «Архив ядра Linux: LOAD_FREQ (4 * HZ + 61) избегает loadavg Moire» . lkml.iu.edu . график и патч
  7. ^ «Исправить ядро ​​с загрузкой 4.61s. · Проблема №2109 · AOSC-Dev / aosc-os-abbs» . GitHub .
  8. ^ http://man7.org/linux/man-pages/man8/iotop.8.html