2012-05-31 13 views
5

estoy trabajando en la optimización de KVM para IO de VM. He leído los códigos KVM, por lo general, toda la interrupción física causará el VMexit y entrará en KVM. Entonces el IDT del host manejará la interrupción física correspondiente. Mi pregunta es ¿cómo KVM decide si inyectar una interrupción virtual en el invitado o no? y en qué situación inyectará una interrupción virtual al invitado?¿Cómo maneja KVM la interrupción física?

Gracias

Respuesta

1

supongo que se refieren a las interrupciones asignadas dispositivo (y las interrupciones no emulados o virt-IO interrumpe el que no se envían directamente desde el dispositivo físico para el cliente). Para cada irq del dispositivo asignado, request_threaded_irq se llama y registra kvm_assigned_dev_thread para ser invocado en cada interrupción. Como puede ver, se llama a kvm_set_irq, y tal como se describe, la única combinación que se produce si la interrupción está enmascarada. En x86 las interrupciones pueden ser enmascaradas por rflags.if, mov-SS, debido a TPR que no permite que se entregue la interrupción o debido a una interrupción en el servicio con mayor prioridad. KVM está obligado a seguir la definición de arquitectura para no sorprender al invitado.

2

En la Documentación de kvm, esto es lo que se informa sobre cuándo se puede inyectar el interupt virtual. Aquí está el enlace http://os1a.cs.columbia.edu/lxr/source/Documentation/kvm/api.txt
mirada en la línea número 905.
La estructura struct kvm_run creo que da el control a la aplicación de cómo se hace la cscope behave.Use VM y la búsqueda de la request_interrupt_window cadena en el código fuente, comprenderán cómo el kvm ve cuándo ingresar al invitado para inyectar un interupt. También revisa el archivo api.txt, es muy útil.

Saludos

EDITADO
aquí está, un ejemplo del huésped inyectando interupts en el invitado.
Supongamos que hubo un error de página en el invitado de MV

  • esto provoca una VMEXIT
  • hipervisor/KVM se encarga de la VMEXIT
  • Su ve la razón de VMEXIT través de la estructura de control VMCS y encontrar que no había error de página
  • El anfitrión/KVM es responsable de la virtualización de la memoria, por lo que comprobar para ver si el error de página fue causado
    • debido a que la página no se asignó a los huéspedes en cuyo caso se llama alloc_page en el núcleo de la máquina y hace un VMENTRY para reanudar la ejecución INVITADA.
    • O el sistema operativo INVITADO quitó la asignación, en este caso el KVM utiliza una estructura de control VMCS como medio de comunicación inyecta un interupt virtual no 14 que hace que el núcleo INVITADO maneje el error de página.

Este es un ejemplo del huésped insertar interupt virtual. Por supuesto, hay muchas otras formas/razones para hacerlo.
De hecho, puede configurar el VMCS para hacer que el invitado haga una VMEXIT después de ejecutar CADA INSTRUCCIÓN esto se puede hacer utilizando la BANDEJA DE TRAMPA DE MONITOR.