2011-02-01 3 views
0

내 질문은 인터럽트와 관련이 있으며 게스트가 KVM에서 실행 중일 때 어떻게 처리됩니까?게스트가 실행 중일 때 인터럽트는 어떻게됩니까?

kvm이 vmentry 또는 vmresume을 호출하면 게스트 코드가 실행되기 시작합니다. 이제 외부 인터럽트가 타이머 인터럽트를 발생하면 게스트가 vmexit을 발생시킵니다. Vmexit 다음에 kvm의 다음 명령이 실행되거나 호스트 인터럽트 호출자가 호출됩니다. kvm의 다음 명령이 호출되면 kvm은 원하는 모든 작업을 수행 한 다음 적절한 호스트 인터럽트 처리기를 호출 할 수 있습니다.

덕분에, 인텔 VT-X에서

+0

항상 커널 프로세스에서 실행됩니다. 사용자 공간의 프로세스 나 권한에 커널 공간이 있어야합니까? – leppie

답변

1

는 모든 인터럽트는 호스트 운영 시스템에 트랩을 발생합니다. 인터럽트 인 경우 호스트는 다음 결정합니다 : 자체에 대한

  • (이 경우는 아마도 꽤 오랫동안 예정에 앉아 KVM 원인을 처리합니다) 또는

  • 게스트의 경우 KVM에 인터럽트를 알립니다. 그러면 KVM이 인터럽트를 게스트에 주입합니다. (KVM의이 부분은 커널 모드로 실행되지만이 부분은 여전히 ​​KVM이라고 생각합니다).

두 경우 모두 호스트 운영 체제가 먼저 제어합니다.

우리에게 가상화를 더 행복하게 만드는 VT-x에 대한 확장 기능은 호스트에 대한 트랩 (및 연관된 성능 패널티)을 완전히 피하면서 특정 인터럽트를 게스트에 직접 보낼 수 있는지 여부와 관련이 있습니다. 아아아, 아직 카드에없는 것 같습니다.

+0

답변 해 주셔서 감사합니다. 두 번째 요점에 관해서는, 나는 경유 장치가있을 때 가능하다고 생각합니다. 호스트는 그것에 대해 알지 못하기 때문에 게스트 인터럽트 핸들러는 항상 호출됩니다. – zombie

+0

현재 VT-x에서는 모든 인터럽트가 호스트에 트랩되어 적절할 경우 호스트에 전달해야합니다. 이로 인해 불행히도 실제 성능 문제가 발생하며 VT-x의 최신 개정판에서 인텔이 개선 할 것으로 기대됩니다. – davidg

+0

Re : 제안 된 개선 사항, 인터럽트가 도착했을 때 게스트가 현재 실행 중이 아니면 어떻게 될까요? – caf