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

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

  • Чистый CPU-интерфейс 64-битного кода пользователя

  • Purely CPU-bound, пользовательский режим 32-битный код

  • Файловый ввод-вывод на жесткий диск (в основном я забочусь о пропускной способности, а не о задержке)

  • Сетевой ввод-вывод

  • примитивы синхронизации потоков (мьютексы, семафоры, переменные условий)

  • Переключатели контекста потока

  • Атомные операции (с использованием префикса lock, например, для сравнения и замены)

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

22 голоса | спросил dsimcha 21 AMpThu, 21 Apr 2011 03:48:23 +040048Thursday 2011, 03:48:23

3 ответа


24

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

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

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

Решения:

  • VMWare ESXi 5
  • Microsoft Hyper-V Windows 2008 R2 SP1
  • Citrix XenServer 6
  • Red Hat Enterprise Virtualization 2.2

Гостевые ОС:

  • Microsoft Windows 2008 R2 64 бит
  • Red Hat Enterprise Linux 6.1 64 бит

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

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

Программное обеспечение Benchmark:

  • Процессор и память: Linpack benchmark для 32 и 64 бит. Это интенсивность процессора и памяти.

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

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

  • Микрооперации: rdtscbench : системные вызовы, межпроцессное взаимодействие с каналами

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

  • Процессор и память: СРЕДНИЙ (HPL32, HPL64)

  • Диск I /O: СРЕДНИЙ (put_block, rewrite, get_block)

  • Сетевой ввод-вывод: AVERAGE (tcp_crr, tcp_rr, tcp_stream, udp_rr, udp_stream)

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

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

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

  • Процессор и память: 14.36%

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

  • Диск ввода /вывода: 8.84%

  • Задержка диска для чтения: в 2.41 раза медленнее

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

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

  • Среднее значение CPU и памяти для 32 и 64 бит: 13.06%

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

  • Дисковый ввод-вывод: 15.20%

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

Пожалуйста, взгляните на полную статью: http://petersenna.com/En /проекты /81-представлени-накладных-и-сравнительно-производительность-на-4-виртуализации-решений

ответил Peter Senna 8 FebruaryEurope/MoscowbWed, 08 Feb 2012 19:56:23 +0400000000pmWed, 08 Feb 2012 19:56:23 +040012 2012, 19:56:23
4

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

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

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

ответил dtoubelis 21 AMpThu, 21 Apr 2011 09:09:42 +040009Thursday 2011, 09:09:42
0

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

http: //www.altechnative. сеть /2012/08/04 /виртуальная производительность неполного 1-VMware /

ответил Gordan 7 PM00000050000001231 2012, 17:25:12

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132