SLAT можно избежать в HV? - PullRequest
       51

SLAT можно избежать в HV?

0 голосов
/ 24 сентября 2018

Этот вопрос может быть забавным (также я очень плохо знаком с гипервизором). У меня большая путаница по поводу SLAT (, почему он требуется? ). Если я не ошибаюсь, SLAT (преобразование адресов второго уровня)используется для преобразования адреса гостевого виртуального адреса в реальный физический адрес (гостевой виртуальный для физического хоста (исправьте меня, если я не прав, например: guest virt addr -> host virt addr -> host физическогоадрес ). Если HW не поддерживает SLAT, то мы должны использовать теневую таблицу страниц, чтобы сделать то же самое (что является дополнительной нагрузкой на процессор для выполнения дополнительного перевода на SW).

Но мой вопрос не можем ли мы пропустить обработку таблицы страниц , передав фактическую физическую память гостевой ОС и позволяя гостевой ОС обрабатывать то же самое (вместо использования SLAT или теневого пейджинга)?UNMAP несколько банков памяти (диапазон адресов физической ОЗУ) от гипервизора и выделение его для гостевой системы и запуск этого конкретного ЦП с отключенной MMU и точно перед тем, как начать выполнение гостевого кода.не будет ли загрузочный код ядра) работать в гостевой системе, позволить ему создавать свои собственные таблицы страниц и включать MMU вместо SLAT?Когда нам требуется остановить виртуальную машину (в конце гостевой команды opt должен снова остановить MMU), тогда мы можем восстановить пейджинг HV обратно на это конкретное ядро ​​процессора и включить MMU, верно?

Это какая-то дыра /проблема в этом подходе (это имеет смысл?)?Разве мы не можем пропустить SLAT при виртуализации?

( Пожалуйста, прости меня, если мой вопрос не имеет никакого смысла, так как я очень плохо знаком с виртуализацией: (* ​​1018 *)

1 Ответ

0 голосов
/ 24 сентября 2018

Преобразование адресов второго уровня необходимо по трем причинам: чтобы гостевой вид памяти отличался от карты физических адресов;защитить память гипервизора и память других гостей от гостя;и позволить гипервизору перехватывать определенную память и доступы MMIO для виртуализации платформы и устройств.

Если вы запускаете гостя с отключенной подкачкой, у него будет полный неограниченный доступ ко всей памяти (и пространству MMIO).).

Это особенно важно при работе с несколькими гостями.Каждый гость может ожидать, что его память будет начинаться с адреса 0. Преобразование адресов второго уровня может преобразовать адрес 0 каждого гостя в другой адрес физической памяти.

...