Я анализирую проблему, при которой производительность рабочих нагрузок, связанных с процессором, внутри виртуальных машин часто (не всегда) намного ниже того, что мы ожидали бы на основе базового оборудования.
Мы используем Hyper-V в Windows Server 2012 R2. Сервер имеет двойной Intel Xeon E5-2643 v2 @ 3,50 ГГц.
Вот некоторые цифры, которые кажутся актуальными:
На настольном компьютере с несколькими ядрами скорость ядра увеличивается сразу же, как только начинается активность, связанная с процессором.
Однако на наших хостах Hyper-V скорость ядра увеличивается только в том случае, если общая нагрузка на систему кажется высоким в течение нескольких секунд. Теперь, например, если у вас есть виртуальная машина с 4 виртуальными процессорами из 24 физических (с включенной функцией Hyperthreading), и этой виртуальной машине требуется мощность процессора, а диспетчер задач внутри виртуальной машины показывает почти 100% использование процессора, большую часть времени тактовая частота физический процессор не поднимается и производительность плохая.
Очевидно, это нежелательное поведение. Подумайте о сервере базы данных, которому требуется в 3 раза больше времени для ответа на запрос, потому что сервер не имеет «достаточной» нагрузки для увеличения частоты процессора. В этом нет никакого смысла.
Я нашел сообщение в блоге, описывающее точно такое же поведение для блейдов VMWare и Cisco, с 2011 года. Больше нигде информации по этому поводу не нашла.
Мне действительно удалось избавиться от этого поведения, переключившись на план управления питанием Windows «Высокая производительность» в powercfg.cpl
, за счет увеличения потребления энергии примерно на 30%. Я действительно получаю лучшую и более стабильную производительность, а Performance Monitor показывает более низкие показатели нагрузки.
(На более старом сервере я нашел дополнительный параметр «Управление мощностью обработки | Минимальное состояние процессора», который можно было установить на 100%, не отключая все другие параметры энергосбережения. Новые параметры показывают только «политику охлаждения системы», которая находится в состоянии «Активно» "даже для плана" Сбалансированный ", поэтому единственным выходом для меня было выбрать" Высокая производительность ".)
Это действительно лучшая практика для хостов Hyper-V или есть другой обходной путь? Если SpeedStep действительно является проблемой, мне интересно, почему они даже встраивают его в серверные процессоры и включают по умолчанию, и почему я никогда не читал об этом параметре в руководстве по настройке Hyper-V?
После небольшого поиска кажется, что это общая проблема современных серверных процессоров, даже не связанная с виртуализацией, и основные поставщики серверов, а также поставщики программного обеспечения, такие как Microsoft и VMWare, поставляют свои продукты с настройками по умолчанию, которые искусственно ограничивают производительность вашего процессора.. Мне до сих пор трудно в это поверить.
Решение для всех, кому важен мгновенный доступ к полной мощности процессора на ядро если сначала все ядра не будут заняты, следует отключить энергосбережение (Intel SpeedStep / EIST или AMD Cool'n'Quiet). В зависимости от настроек BIOS этим можно управлять на уровне ОС (например, в Windows powercfg.cpl
План «Высокопроизводительный») или через BIOS, в этом случае параметр ОС отображается серым цветом.
Брент Озар написал об этом («SQL Server на энергосберегающих процессорах? Не так быстро».) в 2011:
За последние несколько недель я видел несколько случаев, когда обновления серверов приводили к снижению производительности, и одним из ключевых факторов было снижение производительности ЦП. Теоретически серверы должны выжимать сок в соответствии со спросом, но на самом деле это бывает редко. Производители серверов скрывают настройки энергосбережения в BIOS, а Windows Server поставляется с опцией энергосбережения по умолчанию, которая слишком часто снижает производительность ЦП.
Microsoft говорит в KB2207548:
В некоторых случаях может наблюдаться снижение общей производительности на компьютере с Windows Server 2008 R2 при работе со стандартной (сбалансированной) схемой управления питанием. Проблема может возникнуть независимо от платформы и может проявляться как в собственной, так и в виртуальной среде. Снижение производительности может увеличить среднее время отклика для некоторых задач и вызвать проблемы с производительностью приложений, интенсивно использующих ЦП. [...] Эта проблема может возникнуть, если в настройках параметров электропитания установлено значение «Сбалансированный». По умолчанию Windows Server 2008 R2 устанавливает сбалансированный (рекомендуемый) план управления питанием.
Для Win2008R2 доступно исправление, и рекомендуется обновить BIOS, но, поскольку это проблема по-прежнему с Win2012R2, кажется, что нет способа обойти вторую рекомендацию, план «Высокая производительность».
Проблема с подобными симптомами описана в KB2534356 который также предлагает исправление только для Win2008R2. Поэтому для меня применяется только обычный обходной путь (план высокой производительности), но похоже, что исправление может быть возможно в будущем. (Он отлично работает на настольных процессорах, поэтому я не понимаю, почему это невозможно на сервере.)
Я обновлю этот ответ, если найду лучшее решение (или, конечно, изменю принятый ответ, если кто-то еще опубликует решение).
По-прежнему интересно, может ли у EC2 или Azure такая же проблема (в этом случае вы ничего не сможете с этим поделать, так как вам нужен контроль над хостом, изменение настройки в виртуальной машине не повлияет).
Еще несколько ссылок:
Я видел это лишь от случая к случаю. Теоретически speedtep (который, похоже, все чаще становится не настраиваемым) не должен влиять на вашу производительность. Однако, когда он понижается, и вы внезапно занимаетесь одной виртуальной машиной, иногда кажется, что процессор просто не думает, что этого достаточно. Я не уверен, что это проблема Microsoft, поскольку, как вы упомянули, VMware и Cisco имеют ту же проблему.
Это функция BIOS на сервере, чтобы убрать скорость. На блейд-сервере IBM это опция BIOS по умолчанию: без ускорения и иногда без турбо. проверьте технические подробности этого блога:
https://workinghardinit.wordpress.com/tag/c-states/
«В зависимости от ваших выводов и потребностей вы можете просто отключить SpeedStep или Cool’n’Quiet в BIOS или в Windows». Так что, если у вас возникнут проблемы, просто выключите их.
И в биосе проверка на виртуальную инструкцию не отключена в плохом биосе.
Не забудьте добавить «инструменты гипервизора» для лучшей «виртуальной осознанности» на старых ОС.