Как реализованы таблицы теневых страниц в мониторе виртуальной машины, таком как ESXi Server от VMware?
Насколько я понимаю, такие виртуальные машины, как VMware ESXi Server, поддерживают таблицы теневых страниц для сопоставления адресов виртуальных страниц гостевых операционных систем непосредственно с адресами компьютеров (оборудования). Мне сказали, что затем таблицы теневых страниц используются непосредственно аппаратным обеспечением подкачки процессора, чтобы разрешить доступ к памяти в виртуальной машине без необходимости трансляции.
Я хотел бы понять немного больше о том, как механизм таблицы теневых страниц работает в VMM. Правильно ли мое понимание высокого уровня выше? Если так,
Какие структуры данных используются при реализации таблиц теневых страниц?
Каков поток управления от гостевой операционной системы до аппаратного обеспечения?
Если не считать непосредственного чтения исходного кода VMM с открытым исходным кодом, какие ресурсы я могу изучить, чтобы узнать больше о виртуализации оборудования?
3 ответа
Вот что я могу сказать. Пожалуйста, поправьте меня, если я ошибаюсь. Таблица теневых страниц создается и поддерживается Hypervisor/VMM. Это таблица, которая содержит гостевые виртуальные адреса и физические адреса машин. Представьте себе, что без таблицы теневых страниц, чтобы получить физический адрес компьютера, мы должны сначала получить виртуальный адрес, затем пройти по таблице страниц ОС (гостя), чтобы получить физический адрес гостя, а затем нам нужно преобразовать физический адрес гостя в физический адрес машины. Итак, вот что происходит, посмотрите, как один гостевой виртуальный адрес преобразуется в физический адрес машины в соответствии с сенарио таблицы теневых страниц:
Первый физический процессор увидит виртуальный адрес, а его назначение - получить физический адрес компьютера. Первое, что он делает, это пытается посмотреть на TLB(перевод в сторону буфера), если запись находится в TLB, мы теперь получаем адрес машины. Это самый простой случай, который мы назвали хит-кейсом TLB. Нет проблем с производительностью вообще. Он будет работать с тем, что когда-либо называют родной скоростью.
Что произойдет, если в TLB нет записи (TLB miss)?
Если в TLB нет записи, процессор выполнит обход таблицы страниц в таблице теневых страниц. Предполагая, что существует соответствующее сопоставление (гостевой виртуальный компьютер с физическим адресом машины), процессор вставит значение в TLB, а затем перезапустит выполнение, и мы готовы приступить к этому делу. Это еще один хороший случай. Поиск в таблице теневых страниц может занять около 10 циклов, поэтому в отношении производительности нам не нужно сильно беспокоиться.
Что произойдет, если в таблице теневых страниц нет записей?
Процессор просматривает таблицу теневых страниц и не может найти запись. Ну, в этом случае, поскольку поиск является привилегией, будет ошибка. VMM(монитор виртуальной машины) проверит таблицу гостевой страницы, чтобы решить проблему. Этот случай немного усложняет. В любом случае, когда VMM пройдет по таблице гостевой страницы, будет две возможности.
В случае поиска нашел запись: Когда поиск нашел запись, мы можем только пройти по таблице гостевой страницы, чтобы наконец получить физический адрес гостя. Эй, наша цель - получить адрес физического компьютера. Как нам туда добраться. Монитор получит гостевой физический адрес и выполнит поиск в их таблице PMap (или структуре). Если он найдет запись, он вставит значение (в основном, гостевой виртуальный адрес, физический адрес компьютера) в таблицу теневых страниц. Теперь у нас есть запись в таблице теневых страниц, и мы можем пойти дальше, поскольку, когда процессор перезапускает инструкцию, он может получить отображение из таблицы теневых страниц., Ах! не забудьте упомянуть этот случай, когда монитор выполняет скрытую страницу, чтобы решить проблему, используя PMap или PhysMap для получения соответствующего физического адреса компьютера.
В случае, если поиск не найден, монитор (VMM) будет выдавать ошибку виртуальной гостевой страницы. Теперь внутри гостя видно, что есть ошибка страницы. ОС придет и решит проблему. Это может занять от тысячи до ста тысяч циклов или более в случае, если страница была выгружена гостем на диск. Теперь предположим, что ОС (гостевая ОС) решит проблему. Мы можем перезапустить шаги 3.1.
Ну, весь поток немного сложнее. Я надеюсь, что вы поймете процесс., Примечание. Таблица теневых страниц реализована в программном обеспечении, таком как: VMware, Microsoft. Он используется только в режиме двоичного перевода (BT). С Nested Page Table нам вообще не нужна таблица теневых страниц.
Есть некоторые проблемы с таблицей теневых страниц.
Мы рассчитываем на то, что гость лишит законной силы TLB. Дело в том, что мы хотим сохранить соответствие между таблицей гостевых страниц и таблицей теневых страниц. Представьте, что произойдет, если гость обновит таблицу страниц, что произойдет, если гость переключит процесс. Это должно переключить таблицу страниц. В этом случае он должен сообщить аппаратному обеспечению, что я обновляю запись в таблице страниц и делаю ее недействительной.
Агрессивное кэширование таблицы теневых страниц необходимо: нам нужно кэшировать таблицу теневых страниц. Посмотрите, что произойдет, если guest делает переключение контекста, и у нас много гостевых процессов. Он должен сообщить аппаратному обеспечению, что он должен изменить указатель таблицы теневых страниц. Каждый переключатель будет мигать TLB. Традиционно у нас есть таблица теневых страниц для каждого запущенного процесса, но у нас не так много, как у таблицы теневых страниц по сравнению с таблицей процессов.
Защита от записи в таблицу гостевых страниц (другое слово - трассировка), чтобы увидеть, что произойдет, если, например, страница по какой-то причине заблокирована операционной системой, мы должны получить информацию.
Более 50 просмотров и ничего?
Я говорил с Видаром Холеном по IRC на ##linux на freenode.net. Он предложил мне взглянуть на этот технический отчет AMD. Это оказалось отличным ресурсом. У кого-нибудь еще есть другие предложения?
По сути, гостевая ОС будет пытаться преобразовать виртуальный адрес в физический адрес, но этот, казалось бы, физический адрес на самом деле не является реальным физическим адресом, поскольку он исходит от VMM/ гипервизора, и, следовательно, эти адреса не являются смежными адресами, как в случае обычной ОС без VM. Поэтому требуется еще один перевод, чтобы сопоставить физический адрес гостя с реальным адресом машины. Для этого VMM/ гипервизор хранит таблицы теневых страниц для сопоставления этих гостевых физических адресов с физическими адресами компьютеров.
Кроме того, аппаратное обеспечение обеспечивает механизм, позволяющий избежать обхода таблицы страниц, предоставляя TLB, но, если вы можете себе представить, эти TLB внутри гостевой системы не должны быть реальным аппаратным TLB, и VMM/ гипервизор должен каким-то образом эмулировать их. В то же время таблицы теневых страниц можно использовать в качестве TLB для гостя.
Так что это основная идея таблицы теневых страниц, но это, вероятно, самая сложная часть технологии аппаратной виртуализации. Я упустил много деталей и уловов, которые я также не совсем понимаю.
Ниже приведена ссылка, которая рассказывает о некоторых из этих проблем с упрощенными таблицами теневых страниц и о том, как kvm пытается их избежать.
http://lwn.net/Articles/216794/
Еще одна вещь состоит в том, что есть также аппаратная поддержка для этого механизма, и они называются EPT и NPT, поддерживаемые Intel и AMD.
НТН.