WikiDer > Нагрузка (вычисление)
Эта статья нужны дополнительные цитаты для проверка. (Ноябрь 2010 г.) (Узнайте, как и когда удалить этот шаблон сообщения) |

В UNIX вычисление, система нагрузка является мерой объема вычислительной работы, которую выполняет компьютерная система. В средняя нагрузка представляет собой среднюю загрузку системы за период времени. Обычно он представлен в виде трех чисел, которые представляют нагрузку на систему в течение последних одно-, пяти- и пятнадцатиминутных периодов.
Расчет нагрузки в стиле Unix
Все Unix и Unix-подобные системы генерируют безразмерную метрика трех чисел «средней нагрузки» в ядро. Пользователи могут легко запросить текущий результат из Оболочка Unix запустив время безотказной работы
команда:
$ время безотказной работы 14:34:03 до 10:43, 4 пользователя, средняя нагрузка: 0,06, 0,11, 0,09
В ш
и верх
команды показывают те же три числа средней нагрузки, что и диапазон графический интерфейс пользователя коммунальные услуги. В Linux, к ним также можно получить доступ, прочитав / proc / loadavg
файл.
Неактивный компьютер имеет номер загрузки 0 (бездействующий процесс не учитывается). Каждый процесс используя или ожидая ЦПУ (в готовая очередь или же очередь выполнения) увеличивает номер загрузки на 1. Каждый завершающий процесс уменьшает его на 1. Большинство систем UNIX учитывают только процессы в Бег (на CPU) или работоспособный (ждем CPU) состояния. Однако Linux также включает процессы в непрерывный сон состояния (обычно ждут диск activity), что может привести к заметно разным результатам, если многие процессы останутся заблокированными в Ввод / вывод из-за загруженной или остановленной системы ввода-вывода.[1] Это, например, включает блокировку процессов из-за NFS сбой сервера или слишком медленно средства массовой информации (например., USB 1.x запоминающие устройства). Такие обстоятельства могут привести к повышенной средней нагрузке, которая не отражает фактического увеличения использования ЦП (но все же дает представление о том, как долго пользователям придется ждать).
Системы рассчитывают нагрузку средний как экспоненциально затухающее / взвешенное скользящее среднее груза номер. Три значения средней нагрузки относятся к последней, пяти и пятнадцати минутам работы системы.[2]
С математической точки зрения, все три значения всегда усредняют всю загрузку системы с момента ее запуска. Все они распадаются экспоненциально, но распадаются с разной скорости: они экспоненциально затухают на е через 1, 5 и 15 минут соответственно. Следовательно, 1-минутная средняя нагрузка составляет 63% (точнее: 1 - 1 /е) нагрузки с последней минуты и 37% (1 /е) средней нагрузки с момента запуска, исключая последнюю минуту. Для 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) тики, или примерно каждые пять секунд:
беззнаковый длинный Avenrun[3];статический в соответствии пустота calc_load(беззнаковый длинный клещи){ беззнаковый длинный active_tasks; /* фиксированная точка */ статический int считать = LOAD_FREQ; считать -= клещи; если (считать < 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 (нагрузка; exp; n) нагрузка * = exp; нагрузка + = n * (FIXED_1-exp); нагрузка >> = FSHIFT;
«Выборочное» вычисление средних значений нагрузки - довольно распространенное поведение; FreeBSD тоже обновляет значение каждые пять секунд. Интервал обычно не является точным, чтобы они не собирали процессы, которые должны запускаться в определенный момент.[5]
Сообщение в списке рассылки Linux считает своим +1 отметка недостаточна, чтобы избежать артефактов муара из такой коллекции, и вместо этого предлагает интервал 4,61 секунды.[6] Это изменение распространено среди Система Android ядра, хотя точное используемое выражение предполагает 100 Гц.[7]
Другие команды производительности системы
Другие команды для оценки производительности системы включают:
время безотказной работы
- надежность системы и средняя нагрузкаверх
- для общего обзора системы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 журнал. Получено 21 июля 2011.
- Карстен Беккер. «Набор инструментов для мониторинга загрузки Linux OSS». LoadAvg.
Рекомендации
- ^ http://linuxtechsupport.blogspot.com/2008/10/what-exactly-is-load-average.html
- ^ Уокер, Рэй (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: 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