VM의 IO에 대한 KVM 최적화 작업을하고 있습니다. KVM 코드를 읽었습니다. 일반적으로 모든 물리적 인 인터럽트가 VMexit을 일으키고 KVM에 들어갑니다. 그런 다음 호스트의 IDT가 해당 물리적 인터럽트를 처리합니다. 내 질문은 KVM이 게스트에 가상 인터럽트를 주입할지 여부를 결정하는 방법입니다. 어떤 상황에서 게스트에게 가상 인터럽트를 주입합니까?KVM이 물리적 인터럽트를 처리하는 방법은 무엇입니까?
덕분에
VM의 IO에 대한 KVM 최적화 작업을하고 있습니다. KVM 코드를 읽었습니다. 일반적으로 모든 물리적 인 인터럽트가 VMexit을 일으키고 KVM에 들어갑니다. 그런 다음 호스트의 IDT가 해당 물리적 인터럽트를 처리합니다. 내 질문은 KVM이 게스트에 가상 인터럽트를 주입할지 여부를 결정하는 방법입니다. 어떤 상황에서 게스트에게 가상 인터럽트를 주입합니까?KVM이 물리적 인터럽트를 처리하는 방법은 무엇입니까?
덕분에
나는 당신이 (직접 게스트로 물리적 장치에서 전달되지 않습니다하지 에뮬레이트 인터럽트 또는 VIRT-IO 인터럽트) 할당 장치 인터럽트를 참조 같아요. 할당 된 장치의 각 irq에 대해 request_threaded_irq가 호출되고 모든 인터럽트시 호출 될 kvm_assigned_dev_thread를 등록합니다. 당신이 볼 수 있듯이 kvm_set_irq가 호출되고, 설명 된대로 인터럽트가 마스크 된 경우에만 병합이 수행됩니다. x86 인터럽트는 인터럽트가 전달되지 않거나 우선 순위가 더 높은 서비스의 인터럽트 때문에 TPR 때문에 rflags.if, mov-SS에 의해 마스크 될 수 있습니다. KVM은 게스트를 놀라게하지 않기 위해 아키텍처 정의를 따르도록되어 있습니다.
kvm의 문서에서 이것은 가상 인터럽트가 주입 될 수있는 때에 대해 말한 것입니다. 을 heres 링크 http://os1a.cs.columbia.edu/lxr/source/Documentation/kvm/api.txt
은 행 번호에 보기 (905) 내가 생각하는 구조체 kvm_run 구조는 VM behave.Use의 cscope를하게하고, 소스 코드에서 문자열 request_interrupt_window를 검색하는 방법에 응용 프로그램을 제어 할 수 있습니다
, 당신은 이해합니다 kvm이 인터 럽트를 주입하기 위해 손님을 입력하는 방법을 알 수 있습니다. 또한 api.txt 파일을 살펴보면 매우 유용합니다.
건배 여기
의 EDITED
게스트로 interrupts를 주입 호스트의 일례.
이는
이 가상 매치를 중지 삽입 호스트의 일례이다. 물론 그렇게 할 수있는 다른 방법/이유가 많이 있습니다.
실행 후 게스트가 VMEXIT을 수행하도록 VMCS를 구성 할 수 있습니다. 모든 지침 MONITOR TRAP FLAG를 사용하여 모든 지침을 수행 할 수 있습니다.