Я не совсем уверен, что это правильное место для этого вопроса, но я хотел бы создать сервер для проведения некоторых экспериментов, и я рассматриваю руку, большую часть моего кода можно скомпилировать для запуска на руке, но будут некоторые внешние зависимости который, возможно, придется запускать на 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 для соответствующих рабочих нагрузок. Немного усложняет работу, но вы получаете разнообразие оборудования.