Производительность выделенного и виртуального серверов

У меня есть приложение, работающее как в выделенных, так и в виртуальных серверных средах (все Windows Server 2008 R2). Учитывая почти идентичные спецификации серверов (память, процессоры), приложение, работающее на виртуальном сервере, значительно уступает по производительности тому, которое работает на выделенном сервере, с точки зрения времени для выполнения сложной задачи, занимая в 2 раза больше времени для выполнения. Во время этой задачи загрузка процессора виртуального сервера постоянно составляет около 30%, хотя она редко превышает этот уровень. Использование процессора выделенного сервера никогда не превышает 5%. На обоих серверах достаточно свободной памяти, и я не вижу узких мест при чтении / записи на диск.

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

Есть ли что-то, что мне не хватает с точки зрения того, почему мое приложение работает намного медленнее на виртуальном сервере с тем же приложением?

1
задан 15 May 2019 в 16:22
3 ответа

Только просмотр общесистемного использования ЦП / памяти / диска не решит многих проблем с производительностью.

Профилируйте приложение, чтобы увидеть, что именно работает медленно. В Windows попробуйте Windows Performance Toolkit (fka Xperf). Данные можно сравнивать и визуализировать разными способами, включая графики пламени .


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

0
ответ дан 3 December 2019 в 23:04

대부분의 하이퍼 바이저에서 모든 성능 향상 CPU 기능이 게스트에게 제공되지는 않는다는 차이점이 있습니다. (예를 들어 게스트가 대상 호스트에없는 이전 호스트에서 CPU 확장을 사용하는 경우 라이브 마이그레이션이 성공하지 못하기 때문에 다른 이유 중 하나입니다.)

기본적으로 대부분의 하이퍼 바이저는 제한적이지만 거의 보편적으로 호환되는 CPU 기능의 하위 집합입니다. 애플리케이션이 이러한 이점을 활용한다면 테스트 당시 베어 메탈 서버에서만 사용 가능했을 수 있습니다.

기본 설정을 사용하는 KVM (Qemu) Hyper-V 게스트 모두에서 누락 될 수있는 CPU 기능의 좋은 예는 AES 및 AES-NI [ 일반적으로 AES 암호화 / 복호화 속도를 크게 높일 수있는 명령어 세트입니다.

1
ответ дан 3 December 2019 в 23:04

К сожалению, это ожидаемо. Виртуализация оказывает значительное влияние на производительность приложений, интенсивно использующих ЦП, особенно при высоком уровне параллелизма процессов. Я проверял влияние виртуализации на производительность на протяжении многих лет, и хотя за последнее десятилетие ситуация улучшилась, она не сильно улучшилась. Даже процессоры AMD текущего поколения, которые не обременены мерами защиты от Spectre и Metdown, демонстрируют снижение производительности на 17-25% при виртуализации при рабочей нагрузке, связанной исключительно с ЦП.

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

Некоторое снижение производительности можно уменьшить за счет:

  1. привязки виртуальных ЦП к физическим ЦП
  2. выделения гостевой памяти из огромных страниц памяти (2 МБ против 4 КБ).

На новейших процессорах AMD это обычно ограничивает накладные расходы до 20 % даже при высокой параллельной нагрузке.

1
ответ дан 23 October 2020 в 13:46

Теги

Похожие вопросы