Обзор виртуализации прерываний с Intel VT-x

Я пытаюсь разрешить запуск кода в режиме non-root VMX для отправки IPI от одного ядра к другому с помощью xAPIC. Я реализую эту функциональность как в VMM, так и в гостевой ОС. У меня с трудом получается, чтобы это сработало, и, потратив часы на чтение документации, я хотел бы узнать, может ли кто-нибудь указать на очевидные недостатки или помочь консолидировать полезную информацию.

Вот мое понимание:

В EPT я должен сопоставить все гостевые обращения к физическому адресу в регистры APIC с отображением памяти на физический базовый адрес хоста регистров APIC с отображением памяти. Таким образом, когда я пытаюсь записать регистры APIC в гостевой ОС, они перейдут в регистры APIC. Насколько я понимаю, поскольку CPU находится в режиме без корневого VMX, когда это происходит, APIC знает, чтобы виртуализировать эти прерывания.

Затем, когда IPI принимается, выход VM происходит по причине выхода EXIT_REASON_EXTERNAL_INTERRUPT. Затем VMM должен просмотреть ISR, чтобы найти бит, соответствующий принятому прерыванию. Затем я ввожу прерывание в гостевую ОС.

Я думаю, что правильно отправляю IPI, или, по крайней мере, то, что я написал выше, похоже, работает правильно. Однако мне трудно получить IPI. Когда я просматриваю ISR, бит не устанавливается. У кого-нибудь есть предложения? Я использую Intel Xeon CPU E5-2630, но я установил x2APIC для использования интерфейса xAPIC, установив nox2apicпараметр ядра.

linux,linux-kernel,x86,virtual-machine,

2

Ответов: 0

Обзор виртуализации прерываний с Intel VT-x

Я пытаюсь разрешить запуск кода в режиме non-root VMX для отправки IPI от одного ядра к другому с помощью xAPIC. Я реализую эту функциональность как в VMM, так и в гостевой ОС. У меня с трудом получается, чтобы это сработало, и, потратив часы на чтение документации, я хотел бы узнать, может ли кто-нибудь указать на очевидные недостатки или помочь консолидировать полезную информацию.

Вот мое понимание:

В EPT я должен сопоставить все гостевые обращения к физическому адресу в регистры APIC с отображением памяти на физический базовый адрес хоста регистров APIC с отображением памяти. Таким образом, когда я пытаюсь записать регистры APIC в гостевой ОС, они перейдут в регистры APIC. Насколько я понимаю, поскольку CPU находится в режиме без корневого VMX, когда это происходит, APIC знает, чтобы виртуализировать эти прерывания.

Затем, когда IPI принимается, выход VM происходит по причине выхода EXIT_REASON_EXTERNAL_INTERRUPT. Затем VMM должен просмотреть ISR, чтобы найти бит, соответствующий принятому прерыванию. Затем я ввожу прерывание в гостевую ОС.

Я думаю, что правильно отправляю IPI, или, по крайней мере, то, что я написал выше, похоже, работает правильно. Однако мне трудно получить IPI. Когда я просматриваю ISR, бит не устанавливается. У кого-нибудь есть предложения? Я использую Intel Xeon CPU E5-2630, но я установил x2APIC для использования интерфейса xAPIC, установив nox2apicпараметр ядра.

02Linux, Linux-ядро, x86, виртуальные машины,
Похожие вопросы
Яндекс.Метрика