2012-05-31 7 views
5

pracuję nad optymalizacją KVM dla VMS' IO. Przeczytałem kody KVM, zwykle całe fizyczne przerwanie spowoduje VMexit i wejście do KVM. Następnie IDT hosta obsłuży odpowiednie fizyczne przerwanie. Moje pytanie brzmi, w jaki sposób KVM decyduje, czy wprowadzić wirtualne przerwanie do gościa czy nie? i pod jaką sytuacją wprowadzi wirtualne przerwanie do gościa?W jaki sposób KVM obsługuje przerwanie fizyczne?

Dzięki

Odpowiedz

1

Chyba odnoszą się do urządzeń przypisanych przerwań (i nie emulowane przerwań lub przerywa virt-IO, które nie są bezpośrednio przekazywane z urządzenia fizycznego dla gości). Dla każdego przerwania z przyporządkowanego urządzenia request_threaded_irq nazywa się i rejestruje kvm_assigned_dev_thread być wezwany każdego przerwania. Jak widzisz, kvm_set_irq jest wtedy wywoływana i jak opisano to jedyne koalescowanie, które ma miejsce, jeśli przerwanie jest maskowane. W x86 przerwania mogą być maskowane przez rflags.if, MOV-SS, ze względu na TPR, że nie pozwala na przerwanie być dostarczone lub z powodu przerwania w służbie o wyższym priorytecie. KVM musi przestrzegać definicji architektury, aby nie zaskoczyć gościa.

2

w dokumentacji kvm to jest to, co powiedziano o tym, kiedy wirtualny interupt można wstrzykiwać. Herezje link http://os1a.cs.columbia.edu/lxr/source/Documentation/kvm/api.txt
spojrzenie na linii numer 905.
Struktura struct kvm_run myślę daje kontrolę aplikacji, w jaki to czyni VM behave.Use Cscope i poszukać request_interrupt_window ciągu w kodzie źródłowym, będzie zrozumieć jak kvm zobaczyć, kiedy wprowadzić gościa do wstrzyknięcia przerwania.Również przejść przez plik api.txt jest to bardzo pomocne.

Cheers

EDITED
Oto jeden przykład przyjmującego wstrzykiwaniem interupts do gościa.
Załóżmy, że nie było winy strony w GOŚĆ VM

  • Powoduje to VMEXIT
  • hypervisor/KVM obsługuje się VMEXIT
  • Jego widzi przyczynę VMEXIT poprzez struktury kontroli VMCS i okaże się, że nie było błąd strony.
  • Gospodarz/KVM jest odpowiedzialny za wirtualizację pamięci, więc należy sprawdzić, czy usterka strona została spowodowana
    • ponieważ strona nie została przydzielona dla gości, w którym to przypadku nazywa alloc_page w jądrze gospodarzem i robi VMENTRY, aby wznowić wykonanie GUEST.
    • Lub mapowanie zostało usunięte przez system GUEST, w tym przypadku KVM używa struktury kontrolnej VMCS jako medium komunikacyjnego do wstrzyknięcia wirtualnego no 14, co powoduje, że jądro GUEST radzi sobie z błędem strony.

Jest to jeden z przykładów gospodarza wkładania wirtualnego interupt. Oczywiście istnieje wiele innych sposobów/powodów, aby to zrobić.
Można rzeczywiście skonfigurować VMCS aby gościa zrobić VMEXIT po wykonaniu każdej instrukcji Można to zrobić przy użyciu flagi MONITOR pułapkę.