Сколько накладных расходов занимает виртуализация 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 тестов, сравнивая производительность внутри виртуальных машин с аппаратной производительностью. Я назвал «накладные расходы» разницей максимальной производительности, измеряемой внутри ВМ, с максимальной производительностью, измеряемой на оборудовании.
Решения:
Гостевые ОС:
Тестовая информация:
Программное обеспечение Benchmark:
Процессор и память: тест Linpack для 32 и 64 бит. Это требует много ресурсов процессора и памяти.
Дисковый ввод-вывод и задержка: Бонни ++
Сетевой ввод-вывод: Netperf: TCP_STREAM, TCP_RR, TCP_CRR, UDP_RR и UDP_STREAM
Микрооперации : rdtscbench : системные вызовы, межпроцессное взаимодействие
Средние значения рассчитываются по параметрам:
Процессор и память: СРЕДНИЙ (HPL32, HPL64)
Дисковый ввод / вывод: AVERAGE (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 [])
Для моего тестового сценария, используя мои метрики, средние результаты четырех решений виртуализации:
Накладные расходы слоя виртуальной машины, гостевой 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
источник
For a 2.6 GHz CPU, 1,000 clock cycles are spent in 23 milliseconds
разве это не должно быть простым делением 1000 на 2600000, чтобы получить количество секунд, которое занимает 1000 тактов? (что не 23 миллисекунды)В вашем вопросе слишком много переменных, однако я мог бы попытаться сузить их. Предположим, что вы работаете с VMware ESX, вы все делаете правильно - новейший ЦП с поддержкой виртуализации, инструменты VMware с паравиртуализированным хранилищем и сетевые драйверы, много памяти. Теперь давайте предположим, что на этой установке вы запускаете одну виртуальную машину. По моему опыту, вы должны иметь ~ 90% скорости процессора для рабочей нагрузки, связанной с процессором. Я не могу рассказать вам много о скорости сети, так как мы используем ссылки 1 Гбит / с, и я могу без проблем насытить ее, она может отличаться от 10 Гбит / с, однако у нас их нет. Пропускная способность хранилища зависит от типа хранилища, при этом я могу получить около 80% пропускной способности хранилища с локальным хранилищем, но для NFS 1 Гбит / с она близка к 100%, так как сетевое подключение здесь является узким местом. Не могу рассказать о других показателях,
Эти цифры очень приблизительны и сильно зависят от вашего типа нагрузки, вашего оборудования, вашей сети. Это становится еще более размытым, когда вы запускаете несколько рабочих нагрузок на сервер. Но я хочу сказать, что в идеальных условиях вы должны быть в состоянии достичь как минимум 90% производительности.
Кроме того, по моему опыту, гораздо более серьезной проблемой для высокопроизводительных приложений является задержка, и это особенно актуально для клиент-серверных приложений. У нас есть вычислительный движок, который получает запрос от 30+ клиентов, выполняет короткие вычисления и возвращает результаты. На голом железе он обычно увеличивает нагрузку на процессор до 100%, но тот же сервер на VMware может загружать процессор только на 60-80%, и это в основном из-за задержки в обработке запросов / ответов.
источник
Я не обращал внимания на производительность основных примитивов, таких как переключение контекста и атомарные операции, но вот мои результаты теста грубой силы, который я недавно провел с различными гипервизорами. Это должно указывать на то, что вы можете ожидать, если у вас ограничена пропускная способность ЦП и ОЗУ.
http://www.altechnative.net/2012/08/04/virtual-performance-part-1-vmware/
источник