Когда вы говорите о производительности на сервере, есть несколько разных способов взглянуть на это. Существует очевидное время отклика (аналогично задержке в сети) и пропускная способность (аналогично пропускной способности сети).
Некоторые версии Windows Server поставляются с настройками сбалансированного питания, включенными по умолчанию. Как отметил Джефф. Windows 2008 R2 является одним из них. В наши дни очень немногие процессоры являются одноядерными, поэтому это объяснение применимо практически ко всем серверам Windows, с которыми вы будете работать, за исключением одноядерных виртуальных машин. (подробнее об этом позже).
Когда сбалансированная схема питания активна, процессор пытается уменьшить количество потребляемой энергии. Это происходит путем отключения половины ядер ЦП в процессе, известном как «парковка». Только половина процессора будет доступна одновременно, поэтому он потребляет меньше энергии во время низкого трафика. Это не проблема сама по себе.
Проблема в том, что, когда ЦП отключены, вы удвоили количество доступных циклов ЦП, доступных для системы, и неожиданно разбалансировали нагрузку на систему, взяв ее (например) с 70% до 35%. Система смотрит на это, и после обработки пакета трафика она думает: «Эй, я должен немного набрать этот номер для экономии энергии». И так оно и есть.
Вот плохая часть. Чтобы предотвратить неравномерное распределение тепла и энергии в ядрах процессора, он имеет тенденцию парковать процессоры, которые не были припаркованы в последнее время. И для того, чтобы это функционировало должным образом, ЦПУ необходимо сбросить все данные из регистров ЦП (кэш-память L1, L2 и L3) в другое место (скорее всего, в основную память).
В качестве гипотетического примера, скажем, у вас есть 8-ядерный процессор с C1-C8.
- Активный: C1, C3, C5, C7
- Припарковано: C2, C4, C6, C8
Когда это происходит, все они становятся активными в течение некоторого периода времени, и затем система будет парковать их следующим образом:
- Активный: C2, C4, C6, C8
- Припарковано: C1, C3, C5, C7
Но при этом существует большая нагрузка, связанная с очисткой всех данных из кэша L1-L3, чтобы это произошло, чтобы не возникало странных ошибок с программами, которые были очищены из конвейера ЦП.
Вероятно, есть официальное название, но мне нравится объяснять это как перегрузка процессора. В основном, процессоры тратят больше времени на занятую работу, перемещая данные внутри, чем на обработку рабочих запросов.
Если у вас есть какое-либо приложение, которому требуются низкие задержки для своих запросов, вам необходимо отключить настройки сбалансированной мощности. Если вы не уверены, что это проблема, сделайте следующее:
- Откройте «Диспетчер задач»
- Нажмите на вкладку «Производительность».
- Нажмите «Открыть монитор ресурсов»
- Выберите вкладку «CPU»
- Посмотрите на правую часть окна на различные процессоры.
Если вы видите, что кто-то из них припаркован, вы заметите, что половина из них припаркована в любой момент времени, они все сгорят, а затем другая половина будет припаркована. Он чередуется взад и вперед. Таким образом, системные процессоры бьются.
Виртуальные машины: эта проблема еще хуже, когда вы работаете на виртуальной машине, потому что есть дополнительные издержки гипервизора. Вообще говоря, для того, чтобы виртуальная машина работала, аппаратное обеспечение должно иметь временной интервал, доступный для каждого из ядер в каждом временном интервале.
Если у вас 16-ядерное аппаратное обеспечение, вы можете запускать виртуальные машины, используя более 16 ядер, но для каждого временного интервала для этого временного интервала будут доступны только до 16 виртуальных процессоров, и гипервизор должен соответствовать всем ядрам для виртуальной машины. в этом временном интервале. Он не может быть распределен по нескольким временным интервалам. (Временной интервал - это, по сути, набор циклов процессора X. Это может быть 1000 или 100 000 циклов)
Пример: 16-ти ядерное оборудование с 8 ВМ. 6 имеют 4 виртуальных процессора (4C) и 2 имеют 8 виртуальных процессоров (8C).
Временной интервал 1: 4x4C Временной интервал 2: 2x8C Временной интервал 3: 2x4C + 1x8C Временной интервал 4: 1x8C + 2x4C
То, что не может сделать гипервизор, - это разделить половину выделения для временного интервала на первые 4 ЦП виртуальной машины с 8 виртуальными ЦП, а затем на следующем временном интервале отдать остальное остальным 4 виртуальным ЦП этой виртуальной машины. Это все или ничего в пределах временного интервала.
Если вы используете Microsoft Hyper-V, настройки управления питанием могут быть включены в хост-ОС, то есть распространятся на клиентские системы, что также повлияет на них.
Как только вы увидите, как это работает, легко увидеть, как использование настроек сбалансированного управления питанием приводит к проблемам с производительностью и вялым серверам. Одна из основных проблем заключается в том, что входящий запрос должен дождаться завершения процесса парковки / отмены парковки ЦП, прежде чем сервер сможет ответить на входящий запрос, будь то запрос к базе данных, запрос веб-сервера или что-то еще ,
Иногда система будет парковать или отключать ЦП в середине запроса. В этих случаях запрос запускается в конвейер ЦП, выгружается из него, а затем другое ядро ЦП будет обрабатывать процесс оттуда. Если это достаточно большой запрос, это может происходить несколько раз в течение всего запроса, заменяя запрос базы данных в 5 секунд на запрос базы данных в 15 секунд.
Самое важное, что вы увидите в использовании Balanced Power, - это то, что системы будут чувствовать себя медленнее, реагируя практически на каждый ваш запрос.