VMresume не удалось с незапущенной VMCS, как с этим бороться? - PullRequest
0 голосов
/ 12 мая 2018

Я работаю над модулем ядра Linux и программой пользовательского пространства для тестирования VMX.
Код работает на ноутбуке Ubuntu16.04 с процессором Broadwell.

Программа пространства пользователя будет вызывать коды модулей ядра для выполнения инструкций VMX для запуска тестирующей виртуальной машины, таких как vmxon, vmclear, vmptrld, vmlaunch, vmxoff для vmlaunce VM или vmxon, vmptrld, vmresume, vmxoff toвозобновить выполнение виртуальной машины.

После VMexit (переключитесь обратно в программу пользовательского пространства для проверки состояний ВМ, затем вернитесь в пространство ядра для продолжения операций VMX), модуль вызовет vmresume для возобновления работы ВМ, но vmresume завершился ошибкой с ошибкой инструкциичисло 5 означает «вызов vmresume с незапущенной VMCS».

Затем я изменил код, не переключаясь обратно на пользовательское пространство, просто запустил vmlaunch, (vmexit) и vmresume в пространстве ядра (модуль ядра), он будет работать нормально.

Чтобы проверить причину сбоя, я переключился обратно, чтобы использовать пространство пользователя.И используйте sched_setaffinity, чтобы связать все мои исполнения VMX в одном ядре ЦП, и выгружать VMCS при каждой ошибке инструкции vmexit или vmx.

Я все еще сталкиваюсь с этой ошибкой, даже журналы ядра показывают, что все эти операции VMX выполняются в одном процессоре, например CPU0.И дамп VMCS показал почти пустой VMCS после сбоя.

Я не знаю, почему попал в эту ошибку с одной областью VMCS и привязкой к ядру ЦП.

Я что-то упустил?

1 Ответ

0 голосов
/ 13 мая 2018

Перед использованием vmxoff вам сначала нужно использовать vmclear на любых VMCS, которые вы хотите использовать снова.

Каждый раз, когда вы хотите возобновить работу виртуальной машины с помощью VMCS, для которой вы сделали vmclear, вам нужно использовать vmlaunch, а не vmresume.

Итак, если вы хотите использовать vmresume, вы не должны делать vmclear или vmxoff.

См. Разделы 24.1 и 24.11 SDM.

...