Назад | Перейти на главную страницу

Сколько накладных расходов связано с виртуализацией x86 / x64?

Сколько накладных расходов имеет виртуализация x86 / x64 (я, вероятно, буду использовать VirtualBox, возможно, VMWare, определенно не паравиртуализацию) для каждой из следующих операций хоста Win64 и гостя Linux64 с использованием аппаратной виртуализации Intel?

Меня в первую очередь интересует случай x64 с аппаратной поддержкой (как Intel, так и AMD), но я бы не прочь услышать о самостоятельной двоичной трансляции и случаях x86 (т.е. 32-битный хост и гость). Меня не интересует паравиртуализация.

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

Это становится более сложным при попытке найти связь между различными тестами производительности. Ни одно из протестированных мной решений не показало хорошей производительности в тестах на микрооперации. Например: внутри виртуальной машины один единственный вызов gettimeofday () занимал в среднем в 11,5 раз больше тактовых циклов, чем на оборудовании. Гипервизоры оптимизированы для реальных приложений и плохо справляются с микрооперациями. Это может не быть проблемой для вашего приложения, которое может лучше подходить как реальное приложение. Под микрооперацией я подразумеваю любое приложение, для завершения которого требуется менее 1000 тактовых циклов (для ЦП с частотой 2,6 ГГц 1000 тактовых циклов тратятся за 385 наносекунд, или 3,85e-7 секунд).

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

Решения:

  • VMWare ESXi 5
  • Microsoft Hyper-V Windows 2008 R2 с пакетом обновления 1 (SP1)
  • Citrix XenServer 6
  • Red Hat Enterprise Virtualization 2.2

Гостевые ОС:

  • Microsoft Windows 2008 R2 64 бит
  • Red Hat Enterprise Linux 6.1 64-разрядная версия

Информация о тестировании:

  • Серверы: 2 сервера Sun Fire X4150 каждый с 8 ГБ ОЗУ, 2 процессора Intel Xeon E5440 и четыре порта Gigabit Ethernet
  • Диски: 6 дисков SAS по 136 ГБ через iSCSI через гигабитный Ethernet

Программное обеспечение для тестирования:

  • ЦП и память: Тест Linpack как для 32, так и для 64 бит. Это интенсивно использует ЦП и память.

  • Дисковый ввод-вывод и задержка: Bonnie ++

  • Сетевой ввод-вывод: Netperf: TCP_STREAM, TCP_RR, TCP_CRR, UDP_RR и UDP_STREAM

  • Микрооперации: rdtscbench: Системные вызовы, связь между технологическими трубами

Средние значения рассчитываются с параметрами:

  • ЦП и память: СРЕДНИЕ (HPL32, HPL64)

  • Дисковый ввод-вывод: СРЕДНИЙ (put_block, rewrite, get_block)

  • Сетевой ввод-вывод: СРЕДНИЙ (tcp_crr, tcp_rr, tcp_stream, udp_rr, udp_stream)

  • Микрооперации СРЕДНЕЕ (getpid (), sysconf (), gettimeofday (), malloc [1M], malloc [1G], 2pipes [], simplemath [])

Для моего тестового сценария с использованием моих показателей средние результаты четырех решений виртуализации следующие:

Накладные расходы на уровне виртуальной машины, гость Linux:

  • ЦП и память: 14,36%

  • Сетевой ввод-вывод: 24,46%

  • Дисковый ввод-вывод: 8,84%

  • Задержка диска при чтении: в 2,41 раза медленнее

  • Время выполнения микроопераций: в 10,84 раза медленнее

Накладные расходы уровня ВМ, гость Windows:

  • Среднее значение процессора и памяти для 32 и 64 бит: 13,06%

  • Сетевой ввод-вывод: 35,27%

  • Дисковый ввод-вывод: 15,20%

Обратите внимание, что эти значения являются общими и не отражают конкретный сценарий.

Пожалуйста, прочтите статью полностью: http://petersenna.com/en/projects/81-performance-overhead-and-comparative-performance-of-4-virtualization-solutions

В вашем вопросе слишком много переменных, однако я мог бы попытаться сузить его. Предположим, вы выбираете VMware ESX и делаете все правильно - новейший процессор с поддержкой виртуализации, инструменты VMware с паравиртуализированным хранилищем и сетевыми драйверами, много памяти. Теперь предположим, что вы запускаете одну виртуальную машину в этой настройке. По моему опыту, у вас должно быть ~ 90% скорости процессора для рабочей нагрузки, связанной с процессором. Я не могу много рассказать о сетевых скоростях, так как мы используем каналы 1 Гбит / с, и я могу без проблем заполнить их. С каналом 10 Гбит / с все может быть иначе, но у нас их нет. Пропускная способность хранилища зависит от типа хранилища: я могу получить около ~ 80% пропускной способности хранилища с локальным хранилищем, но для NFS 1 Гбит / с она близка к 100%, поскольку сеть здесь является узким местом. Не могу сказать о других показателях, вам нужно будет поэкспериментировать с вашим собственным кодом.

Эти числа очень приблизительны и сильно зависят от типа вашей нагрузки, вашего оборудования и вашей сети. Когда вы запускаете несколько рабочих нагрузок на сервере, ситуация становится еще более нечеткой. Но я хочу сказать, что в идеальных условиях вы должны быть в состоянии приблизиться к 90% собственной производительности.

По моему опыту, гораздо более серьезной проблемой для высокопроизводительных приложений является задержка, особенно это касается клиент-серверных приложений. У нас есть вычислительный механизм, который принимает запросы от 30+ клиентов, выполняет короткие вычисления и возвращает результаты. На «голом железе» он обычно нагружает ЦП до 100%, но тот же сервер на VMware может загружать ЦП только до 60-80%, и это в первую очередь из-за задержки при обработке запросов / ответов.

Я не углублялся в производительность основных примитивов, таких как переключение контекста и атомарные операции, но вот мои результаты теста грубой силы, который я недавно провел с разными гипервизорами. Это должно указывать на то, чего вы можете ожидать, если у вас в основном ограниченная пропускная способность ЦП и ОЗУ.

https://altechnative.net/virtual-performance-or-lack-thereof/