Как реализованы таблицы теневых страниц в мониторе виртуальной машины, таком как ESXi Server от VMware? - PullRequest
2 голосов
/ 20 апреля 2010

Насколько я понимаю, такие VMM, как VMware ESXi Server, поддерживают таблицы теневых страниц для сопоставления адресов виртуальных страниц гостевых операционных систем непосредственно с адресами компьютеров (оборудования).Мне сказали, что таблицы теневых страниц затем напрямую используются аппаратным обеспечением подкачки процессора, чтобы обеспечить доступ к памяти в виртуальной машине без дополнительных затрат на трансляцию.

Я хотел бы немного подробнее понять, как работает механизм таблицы теневых страниц в VMM.Правильно ли мое понимание высокого уровня выше?Если это так,

  • Какие структуры данных используются при реализации таблиц теневых страниц?

  • Каков поток управления со стороныгостевая операционная система с аппаратным обеспечением?

  • Если не считать непосредственного чтения исходного кода VMM с открытым исходным кодом, какие ресурсы можно найти, чтобы узнать больше о виртуализации оборудования?

Ответы [ 3 ]

4 голосов
/ 26 апреля 2012

Вот что я могу сказать. Пожалуйста, поправьте меня, если я ошибаюсь. Таблица теневых страниц создается и поддерживается Hypervisor / VMM. Это таблица, которая содержит гостевые виртуальные адреса и физические адреса машины. Представьте себе, что без таблицы теневых страниц, чтобы получить физический адрес компьютера, нам нужно сначала получить виртуальный адрес, затем пройти по таблице страниц гостевой ОС, чтобы получить физический адрес гостя, а затем нам нужно преобразовать физический адрес гостя в физический адрес машины. Итак, вот что происходит, посмотрите, как один виртуальный адрес гостя преобразуется в физический адрес компьютера в соответствии с сенарио таблицы теневых страниц:

  1. Первый физический процессор увидит виртуальный адрес, и его назначение - получить физический адрес компьютера. Во-первых он пытается посмотреть на TLB (перевод в сторону буфера), если запись находится в TLB, теперь мы получаем адрес машины. Это самый простой случай, который мы назвали хитом TLB. Там нет производительности вопрос вообще. Он будет работать с тем, что когда-либо называют родной скоростью.

    Что произойдет, если в TLB нет записи (TLB miss)?

  2. Если в TLB нет записи, процессор выполнит обход таблицы страниц в таблице теневых страниц. Предполагая, что есть соответствующее сопоставление (гостевой виртуальный компьютер с физическим адресом), процессор вставит значение в TLB, затем перезапустит выполнение и нам хорошо идти этим делом. Это еще один хороший случай. Это может займет около 10 цикла, чтобы посмотреть в теневой таблице страниц, так Мы не должны сильно беспокоиться о производительности.

    Что произойдет, если в таблице теневых страниц нет записей?

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

    1. В случае поиска найдена запись: Когда поиск нашел запись, мы можем только пройти по таблице гостевой страницы, чтобы, наконец, получить гостевой физический адрес. Эй, наша цель - получить адрес физического компьютера. Как мы туда доберемся? Монитор будет принимать физический адрес гостя и будет выглядеть в их таблицу PMap (или структуру). Если он нашел запись, он вставит значение (в основном гостевой виртуальный адрес, физический адрес компьютера) в таблице теневых страниц. Теперь у нас есть запись в таблице теневых страниц, мы хорошо идти, как когда процессор перезапустите инструкцию, она может получить отображение из таблицы теневых страниц. , Ах! не забудьте упомянуть этот случай, когда монитор выполняет скрытую страницу, чтобы устранить с помощью PMap или PhysMap получить физический адрес соответствующего компьютера.

    2. В случае поиска не найдена запись монитор (VMM) будет выдавать ошибку виртуальной гостевой страницы. Теперь внутри гостя это видно что есть ошибка страницы. ОС придет и решит проблему. Это может занять тысячу до ста тысяч или более в случае, если страница была выгружена на диск гость. Теперь предположим, что ОС (гостевая ОС) решит проблему. Мы можем перезапустить шаги 3.1.

Ну, весь поток немного усложняется. Я надеюсь, что вы поймете процесс. , Замечания: Таблица теневых страниц реализована в программном обеспечении, таком как: VMware, Microsof. Он используется только в режиме двоичного перевода (BT). С Nested Page Table нам не нужна таблица теневых страниц вообще.

Есть некоторая проблема с таблицей теневых страниц.

  • Мы рассчитываем на то, что гость аннулирует TLB. Дело в том, что мы хотим сохранить соответствие между таблицей гостевой страницы и таблица теневых страниц. Представьте, что произойдет, если гость обновит таблицу страниц, что произойдетесли гость переключает процесс. Это должно переключить таблицу страниц. В этом случае это должен сообщить аппаратному обеспечению, что я обновляю запись в таблице страниц и делаю ее недействительной.

  • Агрессивное кэширование таблицы теневых страниц необходимо: Нам нужно кэшировать таблицу теневых страниц. Посмотрите, что произойдет, если гость делает переключение контекста и у нас много гостевых процессов. Он должен сообщить оборудованию, что он должен изменить это теневой указатель таблицы страниц. Каждый переключатель будет мигать TLB. Традиционно у нас есть таблица теневых страниц для каждого запущенного процесса, но у нас не так много, как таблица теневых страниц сравните с процессами у него таблица.

  • Защита от записи в таблице гостевых страниц (другое слово отслеживается), чтобы увидеть, что происходит в случае Например, страница была заблокирована операционной системой по какой-то причине, мы должны получить информацию.

0 голосов
/ 17 февраля 2012

По сути, гостевая ОС будет пытаться преобразовать виртуальный адрес в физический адрес, но этот, казалось бы, физический адрес на самом деле не является реальным физическим адресом, поскольку он исходит от VMM / гипервизора, и, следовательно, эти адреса не являются непрерывными адресами, как в случае обычная ОС без ВМ. Поэтому требуется еще один перевод, чтобы сопоставить физический адрес гостя с реальным адресом машины. Для этого VMM / гипервизор хранит таблицы теневых страниц для сопоставления этих гостевых физических адресов с физическими адресами компьютеров.

Кроме того, аппаратное обеспечение обеспечивает механизм, позволяющий избежать обхода таблицы страниц, предоставляя TLB, но, если вы можете себе представить, эти TLB внутри гостевой системы не должны быть реальным аппаратным TLB, и VMM / гипервизор должен каким-то образом имитировать их. В то же время таблицы теневых страниц можно использовать в качестве TLB для гостя.

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

Ниже приведена ссылка, которая рассказывает о некоторых из этих проблем с упрощенными таблицами теневых страниц и о том, как kvm пытается их избежать.

http://lwn.net/Articles/216794/

Еще одна вещь состоит в том, что есть также аппаратная поддержка для этого механизма, и они называются EPT и NPT, поддерживаемые как intel, так и amd.

НТН.

0 голосов
/ 05 мая 2010

более 50 просмотров и ничего?

Я говорил с Видаром Холеном по IRC на ## linux на freenode.net. Он предложил мне взглянуть на этот технический отчет AMD . Это оказалось отличным ресурсом. У кого-нибудь еще есть другие предложения?

...