Сколько накладных расходов имеет виртуализация x86 / x64 (я, вероятно, буду использовать VirtualBox, возможно, VMWare, определенно не паравиртуализацию) для каждой из следующих операций хоста Win64 и гостя Linux64 с использованием аппаратной виртуализации Intel?
64-битный код, полностью связанный с процессором, пользовательский режим
32-битный код, полностью связанный с процессором, пользовательский режим
Файловый ввод-вывод на жесткий диск (меня больше волнует пропускная способность, а не задержка)
Сетевой ввод / вывод
Примитивы синхронизации потоков (мьютексы, семафоры, условные переменные)
Переключатели контекста потока
Атомарные операции (с использованием lock
префикс, такие вещи, как сравнение и замена)
Меня в первую очередь интересует случай x64 с аппаратной поддержкой (как Intel, так и AMD), но я бы не прочь услышать о самостоятельной двоичной трансляции и случаях x86 (т.е. 32-битный хост и гость). Меня не интересует паравиртуализация.
Я обнаружил, что на такие вопросы, как ваш, нет простого и однозначного ответа. Каждое решение виртуализации ведет себя по-разному в определенных тестах производительности. Кроме того, такие тесты, как пропускная способность дискового ввода-вывода, можно разделить на множество различных тестов (чтение, запись, перезапись и т. Д.), И результаты будут отличаться от решения к решению и от сценария к сценарию. Вот почему нетривиально указать одно решение как самое быстрое для дискового ввода-вывода, и вот почему нет однозначного ответа на такие метки, как накладные расходы для дискового ввода-вывода.
Это становится более сложным при попытке найти связь между различными тестами производительности. Ни одно из протестированных мной решений не показало хорошей производительности в тестах на микрооперации. Например: внутри виртуальной машины один единственный вызов gettimeofday () занимал в среднем в 11,5 раз больше тактовых циклов, чем на оборудовании. Гипервизоры оптимизированы для реальных приложений и плохо справляются с микрооперациями. Это может не быть проблемой для вашего приложения, которое может лучше подходить как реальное приложение. Под микрооперацией я подразумеваю любое приложение, для завершения которого требуется менее 1000 тактовых циклов (для ЦП с частотой 2,6 ГГц 1000 тактовых циклов тратятся за 385 наносекунд, или 3,85e-7 секунд).
Я провел обширное тестирование производительности четырех основных решений для консолидации центров обработки данных для архитектуры x86. Я провел почти 3000 тестов, сравнивая производительность внутри виртуальных машин с производительностью оборудования. Я назвал «накладными расходами» разницу между максимальной производительностью, измеренной внутри виртуальных машин, и максимальной производительностью, измеренной на оборудовании.
Решения:
Гостевые ОС:
Информация о тестировании:
Программное обеспечение для тестирования:
ЦП и память: Тест 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/