Что такое процессорное время

Обновлено: 07.07.2024

Согласно пункту 5.2 условий предоставления услуг в рамках виртуального хостинга каждый хостинг-аккаунт должен использовать не более 100 процессорных минут в сутки. Данное ограничение не распространяется на тарифы бизнес-хостинга — в них предоставляются гарантированные ресурсы по выбранному тарифу без ограничений по времени использования (процессорному времени).

Статистика потребления ресурсов ведётся с помощью счётчика, встроенного в ядро операционной системы Linux. Подсчёт процессорного времени выполняется в целом по хостинг-аккаунту для всех запущенных в нём процессов. Определить, какой конкретно сайт или скрипт, размещённый в рамках этого хостинг-аккаунта, создаёт нагрузку, к сожалению, невозможно. Это связано с тем, что операционная система Linux ведёт учёт процессорного времени только по пользователям, а каждый хостинг-аккаунт — это отдельный пользователь Linux.

Процессорное время — это время, которое потратил процессор сервера на обработку задачи. Процессорное время зависит только от проделанной работы.

1 процессорная минута — это загрузка одного ядра процессора на 100% в течение одной минуты.

Превышение данного лимита означает, что сайты хостинг-аккаунта вызывают повышенную нагрузку на сервер и могут негативно влиять на работу и производительность хостинг-аккаунта.

Все ресурсы сервера распределяются между клиентами, размещающимися на этом сервере. Если один клиент использует значительно больше ресурсов сервера, чем другие, это приводит к тому, что качество услуг хостинга для остальных клиентов хостинга падает. В связи с этим мы вынуждены вручную контролировать ресурсы, которые потребляются пользователями.

Количество сайтов и их посещаемость напрямую не влияют на потребление ресурсов скриптами. Можно создать одну страницу, которая при посещаемости 100 человек в сутки будет использовать 100% ресурсов сервера, а можно создать сайт, который будет обрабатывать 100000 запросов в сутки и создавать нагрузку в 50 процессорных минут.

Мой сайт давно превышает все допустимые лимиты, но раньше меня не ограничивали

Раньше мы вручную обрабатывали только самых крупных нарушителей. Сейчас этот процесс автоматизирован и распространяется на всех клиентов. На сегодняшний день 2% аккаунтов хостинга потребляет 50% ресурсов серверов. Деньги, которые оплачиваются, не покрывают затрат на оплату электричества и эту проблему нужно решать не очередным поднятием цен для всех клиентов, а индивидуальной работой с проблемными хостинг-аккаунтами.

Можно ли за дополнительную плату увеличить лимит процессорных минут?

К сожалению, нет. Ограничение в 100 процессорных минут в сутки существует для всех тарифов стандартного виртуального хостинга.

Если хостинг-аккаунту необходимо больше ресурсов, можно рассмотреть возможность перехода на один из тарифов бизнес-хостинга (подробная информация), VPS или выделенный сервер, где отсутствует лимит процессорного времени — вы будете ограничены лишь ресурсами выбранного тарифа или сервера и сможете их использовать без ограничений по времени.

Однако, если в рамках одного хостинг-аккаунта размещено сразу несколько сайтов, каждый из которых в отдельности не превышал бы лимиты, то в качестве альтернативного варианта можно рассмотреть заказ дополнительных хостинг-аккаунтов и переноса сайтов на них автоматически или вручную.

Например, в одном хостинг-аккаунте размещено два сайта, каждый из которых потребляет примерно по 70 процессорных минут в сутки. В сумме нагрузка будет выше допустимой, но если заказать дополнительный хостинг-аккаунт и перенести на него один из сайтов, то в итоге вместо одного хостинг-аккаунта с превышением нагрузки получится два хостинг-аккаунта без превышений.

Уведомление о превышении нагрузки

С момента получения уведомления о превышении нагрузки у пользователя есть 3 дня, чтобы предпринять меры по её снижению до того, как к хостинг-аккаунту начнут применяться ограничения с целью удержать нагрузку в допустимых пределах. Если в течение этого времени нагрузка всё также будет выше допустимой, то для аккаунта постепенно (раз в день) начнут ограничиваться ресурсы до тех пор, пока суточная нагрузка не окажется в рамках допустимой.

Если нагрузка за последние полные сутки не превышает 100 процессорных минут, то установленные ограничения начнут автоматически сниматься. Снятие ограничений происходит не сразу, а тоже постепенно (раз в день) в порядке, обратном их установке. Если на протяжении этого периода нагрузка так и не будет превышать допустимую, ограничения с хостинг-аккаунта будут сняты.

Уменьшение потребления процессорных минут

Для решения проблем с потреблением процессорных минут рекомендуем:

Обратите внимание, что потребление процессорных минут может зависеть от множества факторов, поэтому предоставить точные рекомендации по оптимизации, в силу особенностей и сложности современных систем сайтов и прочего, мы не можем. Для проведения анализа причин нагрузки и устранения проблемы с превышением потребления процессорных минут следует обратиться к профильным специалистам в сфере разработки сайтов.

Я решил проблему с нагрузкой

Если вы решили вопрос с нагрузкой, то на графиках и в статистике нагрузки на веб-сервер и нагрузки на MySQL-сервер не должно быть превышения потребления процессорных минут и не должно быть потребления более 25% CPU на протяжении более 90 секунд.

После запуска я получил много вопросов о том, как именно учитываются ресурсы в облаке. Некоторые интуитивно понимают, что такое «час процессорного времени» но есть и те, кто хочет подробного объяснения. Поскольку в общем анонсе подробные объяснения заняли бы много места, я вынес его в отдельный топик. Заодно, такой формат позволит более подробно описать, как Зен и виртуальные машины взаимодействуют. Уровень этого текста научно-популярный, то есть я не буду вдаваться в дебри кольцевых буферов, маскировки событий, «кредитного планировщика» и т.д., вместо этого я попробую рассказать относительно человеческим языком о том, как гипервизор управляет гостевыми машинами.



Что такое «процессорное время»? Сначала мы его хотели назвать более привычным «машинное время», благо, такой термин использовался во времена мейнфреймов, когда идея разделения машинного времени только-только зародилась, но вовремя остановились. Машинное время тех лет подразумевало все ресурсы, которые использовались машиной, а в нашем случае речь идёт именно о процессоре, так как каждый ограниченный ресурс учитывается раздельно.

Итак, что такое «процессорное время» и как может оказаться, что у одной виртуальной машины его насчитывается 4 часа в сутки, а у другой накручивает 30 «часов» за часов десять?

Облако Селектел работает под управлением Xen, точнее, Xen Cloud Platform, в котором гипервизором выступает Xen.

В Xen есть понятие «планировщик доменов». Оставляя в стороне разницу между доменом и виртуальной машиной (домен — запущенная конкретная виртуальная машина, когда виртуальная машина перезагружается, получается новый домен, когда виртуальная машина выключена, домена нет, а сама машина — есть), можно считать, что этот планировщик виртуальных машин. Те, кто знаком с работой современных ОС, наверное уже догадались, что планировщик доменов подозрительно похож на планировщик процессов в этих самых современных ОС.

Как выглядит работа виртуальной машины?

Происходит какое-то событие: приходит сетевой пакет, срабатывает таймер, сигнал о перезагрузке и т.д. Xen отдаёт процессору команду начать выполнять виртуальную машину (точнее, домен, но в пределах этого объяснения будем считать эти понятия эквивалентными). Ядро виртуальной машины обрабатывает событие, из-за которого его разбудили. Если надо, то оно вызывает пользовательские процессы. Процессы делают свою работу и говорят ядру «всё, закончили». Ядро разбирается со своими вопросами и так же говорят гипервизору (Xen'у) — «всё, я закончило». После этого Xen останавливает выполнение машины. Она просто ничего не делает в буквальном смысле слова. Машина пребывает в таком состоянии до момента, пока не наступает новое событие.

В современных машинах эти события наступают с огромной скоростью — например, если вы загружаете файл со скоростью 5Мб/с, то это (при размере пакета в 1500 байт) — это больше 3000 пакетов в секунду. Каждый пакет — это отдельное прерывание (точнее, в Xen'е всё хитрее, там несколько вызовов объединяются в один, так что иногда виртуальная машина оказывается чуть-чуть быстрее, чем даже на голом железе). И каждое такое событие — это пробуждение машины. Но скорость современных процессоров такова, что после каждого такого вызова ядро виртуальной машины и процессы (например, апач или nginx) успевают отработать и заснуть. Отдача статики на 5Мб/с — это очень низкая нагрузка, примерно 1-2% одного ядра процессора, так что, не смотря на то, что события происходят с интервалом в 300 микросекунд, виртуальная машина отрабатывает за 3-6 микросекунд и оставшиеся 294-296 микросекунд успевает сказать гипервизору «я всё» и заснуть. А через микросекунды снова проснуться, отработать и снова заснуть. Так и получается, что виртуальная машина большую часть времени просто спит.

Вот именно моменты времени, когда виртуальная машина работает и являются «процессорным временем».

Вдумчивый читатель может спросить — а что, если виртуальная машина не скажет «я всё»? Если бы у нас была Windows 3.11, где была кооперативная многозадачность, то это бы привело к тому, что остальные не получили бы полагающееся им время. Но в Xen'е используется вытесняющая многозадачность — и виртуальная машина, которая слишком жадно работает, будет просто приостановлена. Принудительно. А потом снова продолжена.

Обычно такая ситуация происходит в условиях нехватки процессорного времени, и авторы Xen'а потратили тысячи часов, разрабатывая справедливые планировщики, которые в условиях перегруженности процессора решают задачу распределения времени так, чтобы все продолжили работать более-менее равномерно.

Однако, в реальных условиях современного хостинга, скорость работы процессора так высока, что процессор — наименее востребованный и самый простаивающий ресурс и в 99% случаев конкуренции за ресурсы вообще не возникает.

Процессорным временем является время, в течение которого работает виртуальная машина. Если она работала 2с за час, то это так и есть. Если 40 минут — значит, сорок минут. Процессорное время никак не связано с «реальным» временем на часах. Так как Xen командует виртуальными машинами, то Xen с точностью до наносекунды знает, сколько времени отработала каждая машина. Мы это значение округляем до микросекунд (чтобы избежать проблемы с int64), а в биллинге фиксируются лишь целые секунды (дробная часть копится, пока не набежит на секунду). Деньги же за процессорное время списываются как только набежит хотя бы на 1 копейку (в настоящий момент это 36 секунд). Для сравнения — загрузка виртуальной машины съедает примерно 3-6 секунд машинного времени, а это самая «дорогостоящая» операция в жизненном цикле домена.

Если загрузка машины меньше 100% (то есть она потребляет меньше часа процессорного времени в час), то, формально, можно было бы ограничиться одним ядром.

Но, помните, что я выше сказал про одновременное обслуживание клиентов? Несколько ядер обеспечивают большую «отзывчивость» на запросы, хотя, возможно, одно ядро вполне бы справилось, пусть и ценой увеличения времени ответа на запрос.


Кстати, это ответ и ещё на один вопрос: влияет ли количество ядер на затрачиваемое процессорное время? Ответ — нет, если эти ядра простаивают, то процессорное время не используется. А большое число ядер лишь уменьшает задержку при обслуживании одновременных запросов от нескольких клиентов.

Ну и вдогонку немного о том, как нужно понимать понятия «отдаёт время», «выделяет время». Процессор — железка кремниевая и бестолковая. Всё, что может делать процессор — это выполнять код (ну и реагировать на прерывания). И процессор не особо разбирается «домен виртуальной машины» это, или запущенная копия angry birds. Таким образом, понятие «домен», «гипервизор» — это в каком-то смысле условности. Когда мы говорим «виртуальная машина работала 10 мс», мы на самом деле подразумеваем фразу «процессор исполнял код виртуальной машины 10 мс». Когда мы говорим «гипервизор вытеснил виртуальную машину», мы на самом деле подразумеваем «по прерыванию таймера процессор обновил счётчик времени, сохранил контекст процесса и передал управление в другое место, отличное от места, где его прервал таймер». Подобный перевод объекта (код) в субъект, обладающий способностью к действию, сильно упрощает объяснение — у каждой программы есть алгоритм поведения, и проще сказать, что «программа ведёт себя так-то», вместо того, чтобы говорить «процессор, исполняя программу, делает то-то и то-то».

Теперь немного о том, что сколько кушает. В начале статьи — график весьма нагруженного сервера, который держит на себе asterisk с звонками целой компании, веб-сервер, сбор статистики с машрутизаторов и т.д. Внизу — сайт с примерно 5000 уникальных посетителей в день. Это к вопросу о том, сильно ли используют процессор современные серверные приложения (циан на графиках — простаивающий процессор).

Процессорное время - это время, которое потратил процессор сервера на обработку задачи. За базовое время можно взять общее время решения задачи (генерации страницы и т.д.), однако, в него не входит время, которое было затрачено на генерацию других параллельных задачи или ожидание внешних событий.

Процессорное время зависит только от проделанной работы. В случае, если из-за загруженности сервера или из-за ожиданий (например, ответа от mySQL сервера) время выполнения скрипта изменяется, реальное процессорное время (т.е. нагрузка на процессор) остается постоянным.

Содержание

Лучше всего пояснить этот термин примерами.

  • На вашей домашней машине вы архивировали большой файл. Это заняло 40 секунд. Общее время - 40 секунд, процессорное время - 40 секунд.
  • Аналогично, но два файла одновременно. Общее время завершения процессов - 80 секунд, процессорное время каждого - 40 секунд.
  • На пустом сервере выполняется скрипт, время генерации страницы - 2 секунды. Процессорное время - 2 секунды.
  • На сервере выполняется одновременно 10 таких скриптов. Время генерации страницы будет 20 секунд, однако, процессорное время по прежнему 2 секунды.
  • На соседнем сервере произошла перегрузка mySQL сервера, в результате чего ваш скрипт работал не 2 секунды, а 45 секунд. Время генерации страницы - 45 секунд, процессорное время по прежнему 2 секунды.

Именно процессорное время - тот ресурс, который может закончиться на сервере. Необходим его учет. При этом, как видно из примеров, не важно, сколько именно работал ваш скрипт - важно, какую именно работу он при этом делал, т.е. процессорное время, необходимое для работы скрипта. Нормальным количеством времени на одну страницу является 10 - 100 мс (т.е. в 10 - 100 раз меньше, чем одна секунда). Поскольку сервер одновременно обрабатывает десятки запросов, время генерации страницы составляет обычно в пределах одной секунды. Это нормально.

Веб-сервер ведет лог-файл процессорного времени, которое было затрачено на каждый запрос. Его сообщает операционная система. Затем данные суммируется для каждого сайта в пределах одного часа. Если суммарное процессорное время для вашего сайта составило 1 минуту в 1 час, это обозначает, что в этот час вы потратили 1/60 = 1.7% ресурсов одного процессора сервера.

Сервера обладают разным количеством процессоров. На сервере, где 8 процессоров (точнее, более реалистично, 2 процессора по 4 ядра в каждом – таков современный сервер 1Gb), общее процессорное время может достигать 800%, это обозначает, что вы на 100% загрузили все 8 логических процессоров.

Учет ведется именно по ядрам процессоров, так как в одном сервере может быть от 1 до 8 независимых ядер, при этом цифра «3.5% от ресурсов сервера» может означать мощность, которая фактически отличается в 8 раз в зависимости от конфигурации сервера, что было бы некорректно.

Для сравнения наших тарифов с тарифами других провайдеров необходимо делать на это поправку. Например, тариф П-15, обеспечивающий нагрузку до 15% на один процессор, эквивалентен общей нагрузке на сервер в размере 3.75%, если другой провайдер указывает её для 4-х процессорного сервера целиком.

Таким образом, нагрузка в пределах 3.5% - 7.5% (предел стандартных тарифов) по этому показателю соответствует принятым для виртуального хостинга пределам, выраженным в нагрузке от всего сервера – встречаются условия от 1% до 3%. Общий предел нужно сначала умножить на 8 - общее количество процессоров в текущем сервере 1Gb - а потом поделить на среднее кол-во процессоров для установленного предела у сравниваемого провайдера. В подавляющем большинстве упоминается "машина класса Dual Xeon 3 ГГц", что составляет 4 логических процессора.

Процессорного времени (или время процесса ) представляет собой количество времени , в течение которого центральный процессор был использован (ЦП) для обработки инструкций о наличии компьютерной программы или операционной системы , в отличие от истекшего времени, которая включает в себя, например, в ожидании ввода / вывода (I / O) или переход в режим пониженного энергопотребления (ожидания). Время процессора измеряется в тактах или секундах. Часто бывает полезно измерить время ЦП в процентах от мощности ЦП, что называется загрузкой ЦП . Процессорное время и загрузка процессора имеют два основных значения.

Время ЦП используется для количественной оценки общей эмпирической эффективности двух функционально идентичных алгоритмов. Например, любой алгоритм сортировки берет несортированный список и возвращает отсортированный список и будет делать это за детерминированное количество шагов на основе данного входного списка. Однако пузырьковая сортировка и сортировка слиянием имеют разную сложность времени выполнения, поэтому сортировка слиянием, как правило, выполняется за меньшее количество шагов. Без каких-либо знаний о работе любого из алгоритмов большее время ЦП сортировки пузырьков показывает, что она менее эффективна для определенных входных данных, чем сортировка слиянием.

Этот тип измерения особенно полезен при сравнении похожих алгоритмов, которые не являются тривиальными по сложности. В этом случае время стены (фактическое истекшее время) не имеет значения, компьютер может выполнять программу медленнее или быстрее в зависимости от реальных переменных, таких как температура процессора, а также других переменных операционной системы, таких как приоритет процесса.

Использование ЦП используется для количественной оценки того, как процессор распределяется между компьютерными программами. Высокая загрузка ЦП одной программой может указывать на то, что она очень требовательна к вычислительной мощности или что она может работать со сбоями; например, он вошел в бесконечный цикл . Процессорное время позволяет измерять вычислительную мощность, необходимую для одной программы, устраняя помехи, такие как время ожидания ввода или приостановки для выполнения других программ.

Напротив, прошедшее реальное время (или просто реальное время, или время настенных часов ) - это время , прошедшее от начала компьютерной программы до конца, измеренное обычными часами. Истекшее реальное время включает время ввода-вывода, любые задержки многозадачности и все другие типы ожидания, понесенные программой.

СОДЕРЖАНИЕ

Подразделение

Время ЦП или использование ЦП можно сообщать для каждого потока , для каждого процесса или для всей системы. Более того, в зависимости от того, что именно делал ЦП, сообщаемые значения можно разделить на:

  • Пользовательское время - это количество времени, в течение которого ЦП был занят выполнением кода в пользовательском пространстве .
  • Системное время - это время, в течение которого ЦП был занят выполнением кода в пространстве ядра . Если это значение сообщается для потока или процесса, то оно представляет количество времени, в течение которого ядро ​​выполняло работу от имени исполняющего контекста , например, после того, как поток отправил системный вызов .
  • Время простоя (только для всей системы) - это количество времени, в течение которого ЦП не был занят, или, иначе, количество времени, в течение которого он выполнял процесс простоя системы . Время простоя фактически измеряет неиспользованную мощность ЦП.
  • Время кражи (только для всей системы) на виртуализированном оборудовании - это время, в течение которого операционная система хотела выполнить, но не была разрешена гипервизором . Это может произойти, если на физическом оборудовании работает несколько гостевых операционных систем, а гипервизор решил выделить один временной интервал ЦП другому.

Команды Unix для процессорного времени


наверху отображение процессорного времени различных процессов в Unix-подобной ( GNU / Linux ) системе

Команда Unix вверху

Unix командной топ предоставляет процессорное время, приоритет, прошедшее в режиме реального времени , а также другую информацию для всех процессов и обновлений в режиме реального времени.

Время команды Unix

Unix команды время печатает процессорное время и прошло в режиме реального времени для процесса Unix.

Этот процесс занял в общей сложности 0,337 секунды процессорного времени, из которых 0,327 секунды было потрачено в пользовательском пространстве, а последние 0,010 секунды в режиме ядра от имени процесса. Истекшее реальное время составило 1,15 секунды.

Ниже приведен исходный код приложения nextPrimeNumber, которое использовалось в приведенном выше примере.

POSIX функции clock() и getrusage()

POSIX функционирует clock() и getrusage() может использоваться для получения процессорного времени, потребляемого любым процессом в среде POSIX. Если процесс многопоточный, процессорное время является суммой для всех потоков . В Linux, начиная с ядра 2.6.26, есть параметр RUSAGE_THREAD, который ведет к статистике использования ресурсов только для вызывающего потока.

Общее время процессора

На многопроцессорных машинах компьютерная программа может использовать два или более ЦП для обработки с использованием планирования параллельной обработки . В таких ситуациях используется понятие общего времени ЦП , которое представляет собой сумму времени ЦП, потребляемого всеми ЦП, используемыми компьютерной программой.

Процессорное время и прошедшее реальное время

Истекшее реальное время всегда больше или равно времени ЦП для компьютерных программ, которые используют только один ЦП для обработки. Если для ввода-вывода или других ресурсов не требуется ожидания, истекшее реальное время и время ЦП очень похожи.

Процессорное время и прошедшее реальное время для технологии параллельной обработки

Если программа использует параллельную обработку , общее время ЦП для этой программы будет больше, чем истекшее реальное время. (Общее время ЦП) / (Количество ЦП) будет таким же, как затраченное в реальном времени, если рабочая нагрузка равномерно распределена по каждому ЦП и не требуется ожидания ввода-вывода или других ресурсов.

Пример: программное приложение, выполняемое на шестиядерном процессоре, создает три процесса Unix для выполнения требований пользователя. Каждый из этих трех процессов создает два потока, перечисляя в общей сложности 6 рабочих потоков. Вычисления равномерно распределяются по 6 независимым потокам. Если ожидание ресурсов не задействовано, ожидается, что общее время ЦП будет в шесть раз больше, чем истекшее реальное время.


Использование CPU измеряется в секундах, в контексте лимитов и тарифов используется суточное ограничение (секунд CPU в сутки).

Когда пользователь открывает Ваш сайт, браузер обращается к серверу, сервер в свою очередь запускает скрипт для генерации страницы, которую увидит пользователь.

Скрипт занимает место на диске, а для его работы (генерации страниц, выполнение вычислений и другие операции) требуется ресурс центрального процессора (CPU).

Некоторые виды обращений к сайту используют очень мало процессорного времени, например, когда сервер отдает статический контент (картинки, js, css, шрифты), нагрузка на процессор незначительная.

С другой стороны, есть обращения, которые создают значительную нагрузку: это, как правило, динамический контент, генерируемый неоптимизированными скриптами.

Большинство обращений к сайту будет связано с получением динамического и статического контента одновременно. Каждое обращение поискового робота (например Google) для сканирования сайта также будет использовать ресурс.

Как узнать, сколько CPU потребляет мой сайт и необходимо ли увеличение тарифа?

Тарифы виртуального хостинга имеют параметры на использование процессорного времени CPU секунд в сутки.

Например, в тарифе Start-3: 500 секунд CPU в сутки, или 15000 секунд CPU в месяц.

Сравните эти цифры с данными в вашем личном кабинете или в панели управления ISPManager за прошлый или текущий месяц.

Если потребление будет превышать лимит, мы направим вам уведомление о превышении нагрузки, и вы сможете или увеличить тариф, или оптимизировать потребление CPU.

Чтобы посмотреть потребление CPU в личном кабинете, после авторизации нажмите на вкладку «Аккаунт» в главном меню (шаг 1) и выберите пункт «продукты/услуги» (шаг 2). В открывшемся окне кликните мышкой на услугу «размещение сайта» (шаг 3).



Откроется страница подробной информации о услуге хостинга, где вы можете увидеть среднесуточное потребление CPU вашим сайтом (данные берутся за месяц), ваш среднесуточный лимит и процент его использования (шаг 1).

С этой же страницы можно перейти непосредственно в панель управления хостинг-аккаунтом в ISPmanager, чтобы увидеть более детальные данные. Для этого нужно перейти в раздел «Статистика» (шаг 2)


Откроется панель управления ISPmanager. В меню, расположенном слева, выберите пункт Статистика (шаг 1) -> Системные ресурсы (шаг 2). Укажите период, за который вам необходимы данные (шаг 3) месяц, нажмите Ок.

В появившемся отчете суммируйте итоговые показатели «CPU системное время» и «CPU польз. время» и разделите на количество дней в отчетном периоде.


Если вы только запускаете сайт и у вас еще нет статистики, вы можете воспользоваться тестовым периодом или минимальным тарифом хостинга и спустя некоторое время работы подобрать наиболее подходящие параметры вашего тарифа с учетом CPU.

Читайте также: