2012-06-06 17 views
6

Ho fatto il materiale KVM e ho un paio di domande che non riesco a capire.in che modo KVM gestisce l'interrupt

1> come sappiamo, normalmente l'interrupt esterno causerà VMexit e l'hypervisor inietterà un interrupt virtuale se è per il guest. Quindi quale irq verrà iniettato (intendo il vettore di interrupt per l'indicizzazione dell'ID ospite)? Come fa la KVM a sapere su questo (associare un IRQ host con un IRQ virtuale guest)?

2> se per il dispositivo assegnato all'ospite, l'hypervisor consegnerà quell'IRQ all'ospite. tracciando il codice, ho trovato che l'host IRQ è diverso da quello dell'ospite (intendo il vettore di interrupt). in che modo KVM configura il vettore di interrupt che il guest deve utilizzare?

3> se configuriamo non uscire su interrupt esterno impostando un campo in VMCS, cosa succederà durante gli interrupt fisici? la CPU utilizzerà l'IDT ospite per l'interruzione della risposta? In tal caso, KVM può reindirizzare la CPU per utilizzare un altro IDT per i guest (supponendo di modificare l'IDTR)?

4> dove si trova l'IDT ospite? è configurato da qemu durante l'inizializzazione di vcpu e registri (include l'IDTR)?

Spero davvero che qualcuno possa rispondere alle mie domande. Sarò molto apprezzato

Grazie

risposta

2

1- 2- Il codice è in irq_comm.c e molto complesso. Per il vettore guest, l'hypervisor intercetta e monitora lo spazio di configurazione PCI del guest (ciò è effettivamente fatto in QEMU - si veda per esempio kvm_msi_update - tuttavia un syscall per KVM lo aggiorna con i dati).

3- Sì. Per impostare un altro IDT, è necessario modificare il campo IDTR nel VMCS.

4- L'ID ospite è configurato dal codice ospite. QEMU/KVM non è direttamente coinvolto in esso. È necessario configurare i controlli di esecuzione da trap su LIDT per monitorare le modifiche per l'IDTR guest.

Sembra che tu stia cercando di implementare ELI da ASPLOS'12. Contattami offline (il secondo autore del documento - NA).

Problemi correlati