Что происходит при прерывании, когда гость находится в процессе выполнения?

Мой вопрос касается прерываний и того, как они передаются, когда гость работает в KVM?

Допустим, когда kvm вызывает vmentry или vmresume, начинается выполнение гостевого кода. Теперь, когда происходит внешнее прерывание, например прерывание по таймеру, гость вызовет vmexit. После Vmexit будет выполнена следующая инструкция в kvm или будет вызван вызывающий прерывание хоста. Если вызывается следующая инструкция в kvm, то kvm может делать все, что захочет, а затем вызывать соответствующий обработчик прерываний хоста.

Спасибо,


person zombie    schedule 01.02.2011    source источник
comment
Он всегда будет работать в рамках процесса ядра, почему процессы или права пользовательского пространства должны иметь какое-либо отношение к пространству ядра?   -  person leppie    schedule 01.02.2011


Ответы (1)


В Intel VT-x все прерывания вызывают ловушку в операционной системе хоста. Затем хост определит, является ли прерывание:

  • Для себя (в этом случае он справится с этим, что может привести к незапланированному ожиданию KVM в течение некоторого времени); или

  • Для гостя, в этом случае он сообщит KVM о прерывании. Затем KVM, в свою очередь, введет прерывание в гостевую систему. (Обратите внимание, что эта часть KVM работает в режиме ядра, но я предполагаю, что вы все равно будете считать это KVM).

В любом случае операционная система хоста берет на себя управление первой.

Несколько несвязанное, но одно расширение VT-x, которое сделало бы нас, виртуалистов, более счастливыми, заключается в том, что определенные прерывания можно было бы отправлять непосредственно гостю, избегая ловушки в хосте (и связанного с этим снижения производительности). Увы, пока этого не видно.

person davidg    schedule 01.02.2011
comment
Спасибо за ответ. Что касается вашего второго пункта, я думаю, что это возможно, когда есть сквозное устройство. Поскольку хост об этом не знает, всегда будет вызываться обработчик гостевого прерывания. - person zombie; 01.02.2011
comment
В настоящее время на VT-x все прерывания перехватываются хостом, который при необходимости должен пересылать их гостю. К сожалению, это вызывает реальные проблемы с производительностью, и мы надеемся, что Intel улучшит их в более поздней версии VT-x. - person davidg; 02.02.2011
comment
Re: предложенное вами улучшение, что произойдет, если гость в данный момент не работает, когда поступит прерывание? - person caf; 02.02.2011
comment
Если бы гость не работал, вы все равно попали бы в ловушку хоста; дальнейшие прерывания будут маскироваться до тех пор, пока гость не будет назначен в следующий раз (и прерывания не будут обработаны). Однако, когда гость работает, вы избегаете этих посторонних ловушек и получаете прирост производительности. - person davidg; 02.02.2011
comment
С включенным APIC менее вероятно, что это будет гостевое прерывание? - person BananaBuisness; 02.04.2020