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

Снижение производительности виртуализации x86 из arm против x86 из x86

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

Я понимаю, что запуск приложений x86 из arm снижает производительность. Мне не совсем понятно, как это обрабатывается - например, я предполагаю, что если данное приложение не скомпилировано для arm, оно не будет запускаться изначально в среде arm, поэтому какова будет процедура для вызова такого приложения - например, распознает ли ОС это как исполняемый файл и каким-то образом имитировать вызовы x86 в фоновом режиме (я думаю, возможно, зависит от ОС), или вам придется развернуть полностью виртуализированную среду x86 для запуска этих приложений x86.

Я использовал ряд технологий виртуализации, и меня особенно интересует, как это повлияет на типичный гипервизор типа 2 (есть ли дополнительный штраф, переходящий с x86 на x86 и arm на x86, а также что-то вроде вина, которое все равно отображает вызовы Windows - это поддержка даже есть для этого в это время?

был бы признателен за краткое объяснение того, как это работает, и ссылку на любые тесты производительности для описанных операций.

Для запуска x86 на ARM требуется эмуляция. Насколько прозрачно и легко использовать, зависит от вашей среды.

Windows 10 на ARM расширяет WOW64. Наша цель - устройство ARM, которое просто работает с приложениями x86. Серверных сборок пока нет, хотя, предположительно, такая штука тестируется внутри Azure.

Другой пример пользовательской эмуляции: QEMU в Linux с binfmt_misc, чтобы сделать его немного более удобным для пользователя. Не нужно эмулировать оборудование и запускать другое ядро. Однако вам необходимо предоставить библиотеки другой архитектуры, как при кросс-компиляции.

Эмулируйте оборудование, и вы можете создать любую виртуальную машину, какую захотите. ARM VM на x86 с использованием QEMU это один из примеров. Это другое ядро ​​на виртуальном оборудовании, но виртуальные машины в наши дни знакомы.

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

В худшем случае вы приобретаете блоки ARM и x86 для соответствующих рабочих нагрузок. Немного усложняет работу, но вы получаете разнообразие оборудования.