KR20130035996A - 인터럽트 가상화 - Google Patents

인터럽트 가상화 Download PDF

Info

Publication number
KR20130035996A
KR20130035996A KR1020127023264A KR20127023264A KR20130035996A KR 20130035996 A KR20130035996 A KR 20130035996A KR 1020127023264 A KR1020127023264 A KR 1020127023264A KR 20127023264 A KR20127023264 A KR 20127023264A KR 20130035996 A KR20130035996 A KR 20130035996A
Authority
KR
South Korea
Prior art keywords
interrupt
guest
processor
manager
virtual processor
Prior art date
Application number
KR1020127023264A
Other languages
English (en)
Inventor
벤자민 씨. 세레브린
로드니 더블유. 슈미트
데이비드 에이. 캐프랜
마크 디. 허멜
Original Assignee
어드밴스드 마이크로 디바이시즈, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 어드밴스드 마이크로 디바이시즈, 인코포레이티드 filed Critical 어드밴스드 마이크로 디바이시즈, 인코포레이티드
Publication of KR20130035996A publication Critical patent/KR20130035996A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/24Handling requests for interconnection or transfer for access to input/output bus using interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45579I/O management, e.g. providing access to device drivers or storage

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Debugging And Monitoring (AREA)
  • Multi Processors (AREA)
  • Bus Control (AREA)

Abstract

일 실시예에서, 게스트에 할당된 장치로부터 인터럽트를 수신하도록 장치 인터럽트 매니저가 구성될 수 있다. 장치 인터럽트 매니저는 게스트 내의 가상 프로세서에 대한 인터럽트를 레코딩하기 위해 시스템 메모리 내 메모리 위치에 표적이 된 작동을 송신하도록 구성될 수 있고, 상기 인터럽트는 표적이 된 가상 프로세서에게 전달되어야 한다. 일 실시예에서, 현재 실행 중이 아닌 가상 프로세서에 대해 장치 인터럽트 매니저에 의해 인터럽트가 레코딩되었음을 검출하도록 가상 머신 매니저가 구성될 수 있다. 가상 머신 매니저는 하드웨어 프로세서 상에서의 실행을 위해 가상 프로세서를 스케쥴링하도록 구성될 수 있고, 또는, 인터럽트에 따라, 스케쥴링을 위해 가상 프로세서를 우선순위화할 수 있다.

Description

인터럽트 가상화{INTERRUPT VIRTUALIZATION}
본 발명은 프로세서 및 가상화에 관한 것이고, 특히, 가상 머신 게스트에 인터럽트를 전달하는 기술에 관한 것이다.
가상화는 다양한 용도로 컴퓨터 시스템에 사용되고 있다. 예를 들어, 가상화를 이용하여 "컨테이너" 내 특권 소프트웨어를 실행하여, 가상 머신을 제어하는 가상 머신 매니저(VMM: Virtual Machine Manager)에 의해 행하여지도록 허용되지 않으면서, 특권 소프트웨어가 가상 머신 상태 중 적어도 일부분에 직접 액세스하거나 이를 변경시키는 것을 방지할 수 있다. 이러한 컨테이너는 물리적 머신 상에서 "버그" 또는 악의적 소프트웨어가 문제를 야기하는 것을 방지할 수 있다. 추가적으로, 가상화를 이용하여 동일한 머신 상에서 2개 이상의 특권 프로그램을 동시에 실행할 수 있다. 특권 프로그램은 물리적 머신에 대한 액세스가 제어되기 때문에 서로 간섭하는 것이 방지된다. 특권 프로그램은 운영 체제를 포함할 수 있고, 소프트웨어가 수행되고 있는 하드웨어를 완전히 제어할 것으로 기대되는 다른 소프트웨어를 또한 포함할 수 있다. 다른 예에서, 가상화를 이용하여, 특권 프로그램에 의해 예상되는 하드웨어와는 다른 하드웨어 상에서 특권 프로그램을 실행할 수 있다.
일반적으로, 프로세서 또는 컴퓨터 시스템의 가상화는 특권 프로그램이 완전한 제어를 갖게 되는 가상 머신(상술한 컨테이너)에 대한 액세스를 하나 이상의 특권 프로그램에 제공하는 단계를 포함할 수 있으나, 물리적 머신의 제어는 VMM에 의해 보유된다. 가상 머신은 프로세서(또는 프로세서들), 메모리, 및 실행 중인 머신 내에서 특권 프로그램이 발견할 것으로 예상되는 다양한 주변 장치들을 포함할 수 있다. 가상 머신 요소는 VMM이 가상 머신에, 적어도 일시적으로, 할당하는 하드웨어에 의해 구현될 수 있고, 또는, 소프트웨어적으로 에뮬레이션될 수 있다. 각각의 특권 프로그램(및 일부 경우에 관련 소프트웨어, 가령, 운영 체제 상에서 수행되는 애플리케이션, 등)은 여기서 게스트로 불릴 수 있다. 가상화는 VMM 및 관련 가상 머신이 실행하고 있는 물리적 머신에서 특정 하드웨어 가상화 지원없이 소프트웨어적으로(가령, 상술한 VMM) 구현될 수 있다. 그러나, 가상화는 일부 하드웨어 지원이 제공될 경우 단순화될 수 있고, 및/또는, 더 우수한 성능을 달성할 수 있다.
가상화에서 나타나는 한가지 문제점은 인터럽트 전달의 대기시간(latency)이다. 상술한 바와 같이, 주변 장치는 (가상 머신에 가상 주변 장치로 기능하도록) 가상 머신에 의한 사용을 위해 할당될 수 있다. 이러한 주변 장치들은 가상 머신의 소프트웨어에 의해 처리될 인터럽트들을 발생시킬 수 있다. 비-가상화 환경에서, 인터럽트 처리 대기시간은 비교적 짧을 수 있다. 가상화 환경에서, 인터럽트는 일반적으로 VMM에 의해 인터셉트되고, VMM에 의해 처리되며, 일부 종류의 소프트웨어 메커니즘을 이용하여 VMM에 의해 표적 가상 머신에 전달된다. 그러나, 인터럽트 처리 대기시간이, 가상화되지 않은 환경에 비해, 훨씬 길어질 수 있다(약 100배 이상 길어짐). 주변 장치에 의해 발생된 인터럽트(간단히, 여기서, '장치 인터럽트')에 추가하여, 프로세서는 인터프로세서 인터럽트(IPI: Interprocessor Interrupts)를 발생시킬 수 있다. 가상 머신에서, IPI는 가상 프로세서(또는 vCPU)와 가상 머신 내 다른 vCPU 사이에서 발생될 수 있다. vCPU는 주어진 게스트의 가상 머신에 포함될 것으로 규정된 프로세서다. 게스트에 적어도 하나의 vCPU가 존재하지만, 멀티프로세싱 게스트의 경우 복수의 vCPU가 존재할 수 있다.
일 실시예에서, 게스트에 할당된 장치로부터 (또는 게스트에 할당된 가상 기능을 지원하는 장치로부터) 인터럽트를 수신하도록 장치 인터럽트 매니저가 구성될 수 있다. 장치 인터럽트 매니저는 게스트 내의 가상 프로세서에 대한 인터럽트를 레코딩하기 위해 시스템 메모리 내 메모리 위치에 표적이 된 작동을 송신하도록 구성될 수 있고, 상기 인터럽트는 표적이 된 가상 프로세서에게 전달되어야 한다. 일 구현예에서, 장치 인터럽트 매니저는 입/출력(I/O) 메모리 관리 유닛(IOMMU: Input/Output Memory Management Unit)에 포함될 수 있다.
일 실시예에서, 현재 실행 중이 아닌 가상 프로세서에 대해 장치 인터럽트 매니저에 의해 인터럽트가 레코딩되었음을 검출하도록 가상 머신 매니저가 구성될 수 있다. 가상 머신 매니저는 하드웨어 프로세서 상에서의 실행을 위해 가상 프로세서를 스케쥴링(scheduling)하도록 구성될 수 있고, 또는, 인터럽트에 따라, 스케쥴링을 위해 가상 프로세서를 우선순위화할 수 있다.
다음의 상세한 설명은, 아래 간략히 설명되는 첨부 도면을 참조한다.
도 1은 가상화를 구현하는 컴퓨터 시스템의 일 실시예의 블록도다.
도 2는 도 1에 도시되는 호스트 하드웨어의 블록도다.
도 3은 게스트에 전달되는 인터럽트의 일 실시예를 도시하는 블록도다.
도 4는 가상 머신 제어 블록(VMCB: Virtual Machine Control Block)의 일 실시예를 제시하는 블록도다.
도 5는 게스트 APIC 상태 데이터 구조의 게스트 APIC 상태 엔트리의 일 실시예를 제시하는 블록도다.
도 6은 인터럽트에 대한 게스트 APIC 상태 엔트리의 위치를 결정하기 위한 일 실시예를 제시하는 블록도다.
도 7은 장치로부터 인터럽트를 수신함에 따라 도 2에 도시되는 장치 인터럽트 매니저의 일 실시예의 작동을 제시하는 순서도다.
도 8은 가상 머신 런(VMRUN: Virtual Machine RUN) 명령에 따라 도 2에 도시되는 프로세서의 일 실시예의 작동을 설명하는 순서도다.
도 9는 가상 머신 탈출(VMExit: Virtual Machine Exit)에 따라 도 2에 도시되는 프로세서의 일 실시예의 작동을 설명하는 순서도다.
도 10은 프로세서 상에서 실행되는 게스트에 대한 게스트 인터럽트를 검출함에 따라, 도 2에 도시되는 프로세서의 일 실시예의 작동을 설명하는 순서도다.
도 11은 일반 명령에 따라 도 2에 도시되는 프로세서의 일 실시예의 작동을 설명하는 순서도다.
도 12는 게스트 초기화를 위한 VMM의 일 실시예를 설명하는 순서도다.
도 13은 게스트의 실행 중 게스트 지원을 제공하기 위한 VMM의 일 실시예를 설명하는 순서도다.
도 14는 게스트 삭제를 위한 VMM의 일 실시예를 설명하는 순서도다.
도 15는 VMM 및/또는 마이크로코드의 일 실시예를 저장하는 컴퓨터 판독가능한 기록 매체의 일 실시예의 블록도다.
도 16은 프로세서 내 게스트 인터럽트 제어 유닛에 게스트 인터럽트 제어 메시지를 전달하기 위한 모델-특정 레지스터(MSR: Model Specific Register) 인터페이스의 일 실시예를 설명하는 블록도다.
본 발명에 다양한 수정예 및 대안의 형태가 가능하지만, 구체적 실시예들이 도면에 예로서 도시되며 여기서 세부적으로 설명될 것이다. 그러나, 도면 및 상세한 설명은 개시되는 특정 형태로 발명을 제한하고자 하는 것이 아니라, 이에 반해 본 발명은, 첨부된 청구범위에 의해 규정되는 본 발명의 사상 및 범위 내에 있는 모든 수정예, 등가물, 및 대안들을 커버한다. 여기서 사용되는 헤딩은 조직화를 위한 것이고, 상세한 설명의 범위를 제한하고자 사용됨을 의미하지 않는다. 본 명세서 전반에 사용되는 바와 같이, "~할 수 있다"는 표현은 의무적인 의미('~해야만 한다'는 의미)보다는 허용어적인 의미('~할 가능성이 있다'는 의미)로 사용된다. 마찬가지로, "포함한다", "포함하는"은 포함하지만, 이에 제한되지 않음을 의미한다.
다양한 유닛, 회로, 또는 다른 구성요소들이 작업을 수행"하도록 구성되는" 것으로 설명될 수 있다. 이러한 범주에서, "~하도록 구성되는"은 동작 중 작업을 수행하는 회로를 갖는 것을 일반적으로 의미하는 구조의 넓은 언급이다. 이와 같이, 유닛/회로/구성요소는 유닛/회로/구성요소가 현재 온 상태가 아닐 때에도 작업을 수행하도록 구성될 수 있다. 일반적으로, "~하도록 구성되는"에 대응하는 구조를 형성하는 회로는, 동작을 구현하기 위해 하드웨어 회로들을 포함할 수 있다. 마찬가지로, 다양한 유닛/회로/구성요소들은 설명의 편의를 위해, 작업을 수행하기 위한 것으로 설명될 수 있다. 이러한 설명은 "~하도록 구성되는"의 어구를 포함하는 것으로 해석되어야 한다. 일부 경우에, 작업을 수행하도록 구성되는 회로는 작동을 구현하기 위해 실행가능한 프로그램 명령을 저장하는 메모리를 포함할 수 있다. 메모리는 SRAM 또는 DRAM과 같은 휘발성 메모리 및/또는 광학/자기 디스크 기록 장치, 플래시 메모리, 프로그래머블 ROM, 등과 같은 비휘발성 메모리를 포함할 수 있다. 하나 이상의 작업을 수행하도록 구성되는 유닛/회로/구성요소의 언급은 유닛/회로/구성요소에 대한 35 U.S.C.§112 단락의 6개의 해석을 불러들이지 않는 것을 명확히 한다.
실시예의 상세한 설명
일 실시예에서, 컴퓨터 시스템은 VMM 및 가상 머신에서 실행되는 하나 이상의 게스트를 포함한다. (가령, 게스트의 가상 머신에서 대응하는 가상 주변 장치로 작동하도록) 주변 장치가 게스트에 할당될 수 있다. 대안으로서, 주변 장치가 가상 기능을 지원할 수 있고, 가상 기능이 게스트에 할당될 수 있다. 주변 장치는 게스트에 전달될 장치 인터럽트를 발생시킬 수 있다. 장치 인터럽트 매니저는 (VMM, 또는, VMM이 실행하는 호스트 소프트웨어에서 표적이 되는 호스트 인터럽트에 반해) 게스트에서 장치 인터럽트가 표적이 됨을 검출하도록 구성될 수 있다. 특히, 장치 인터럽트 매니저는 게스트의 가상 머신 내의 어느 vCPU가 인터럽트에 의해 표적이 되는 지를 검출하도록 구성될 수 있다. 장치 인터럽트 매니저는 게스트 인터럽트 컨트롤러 데이터 구조에서 인터럽트를 레코딩하도록 구성될 수 있다.
표적화된 vCPU가 컴퓨터 시스템의 하드웨어 프로세서 상에서 현재 실행되고 있을 때, 하드웨어 프로세서는 게스트 인터럽트를 검출하고, 게스트/vCPU를 리디렉션시켜서 인터럽트에 서비스하게 할 수 있다.
예를 들어, 장치 인터럽트 매니저는 새 게스트 인터럽트가 데이터 구조에 레코딩되었음을 표시하기 위해 하드웨어 프로세서에 메시지를 송신할 수 있다. 이러한 메시지에 따라, 하드웨어 프로세서는 게스트 인터럽트 데이터 구조를 판독할 수 있고, 이러한 인터럽트를, 데이터 구조에 레코딩된 다른 계류 인터럽트와 우선순위화한다. 우선순위화에 기초하여, 하드웨어 프로세서는 인터럽트를 전달하거나, 하나 이상의 고-우선순위 인터럽트 및/또는 고-우선순위 프로세스의 완료를 기다릴 수 있다. 다른 예에서, 하드웨어 프로세서는 대응 게스트 vCPU의 실행 중 게스트 인터럽트 데이터 구조(또는 게스트 인터럽트 데이터 구조 내의 영역)를 모니터링하도록 구성되어, 인터럽트가 데이터 구조 내에 레코딩되었는 지를 검출할 수 있다. 데이터 구조에 대한 업데이트를 검출함에 따라, 하드웨어 프로세서는 데이터 구조를 판독하고, 상술한 바와 같이 인터럽트를 전달할 수 있다.
일 실시예에서, 하드웨어 프로세서는 게스트 인터럽트에 대해 상술한 작동의 프로세서 부분을 구현하도록 구성되는 게스트 인터럽트 제어 유닛을 포함할 수 있다. 추가적으로, 게스트 인터럽트 제어 유닛은 vCPU의 인터럽트 컨트롤러에 대한 게스트 액세스가, 하드웨어 프로세서에 연결될 수 있는 호스트 인터럽트 컨트롤러를 통해서가 아니라, 게스트 인터럽트 데이터 구조를 통해 취급됨을 보장할 수 있다. 즉, 게스트에서의 인터럽트 컨트롤러 액세스는 게스트 인터럽트 데이터 구조 내의 메모리 액세스로 변환될 수 있다. 따라서, 게스트 인터럽트 제어 유닛은 게스트 인터럽트 제어 유닛의 가상화 및 에뮬레이션에 참가할 수 있다. 일 구현예에서, 게스트 인터럽트 제어 유닛은 적어도 부분적으로 마이크로코드로 구현될 수 있다. 마이크로코드는 마이크로코드 루틴을 통해 구현되는 소정의 명령 또는 그외 다른 동작을 검출함에 따라, 프로세서 회로에 의해 호출되는, 프로세서 내의 비휘발성 메모리에 저장된 명령일 수 있다. 따라서, 마이크로코드는 구현되는 동작을 실행하기 위해 프로세스의 실행을 위해 디스패치될 수 있다. 일부 실시예에서, 게스트 인터럽트 제어 유닛은 주로 마이크로코드로 구현될 수 있다. 다른 실시예에서, 게스트 인터럽트 제어 유닛은 하드웨어적으로 구현될 수 있다.
vCPU 인터럽트 컨트롤러에 대한 게스트 액세스는 인터럽트 컨트롤러에서의 레지스터 판독/기록을 포함할 수 있다. 일 실시예에서, 인터럽트 컨트롤러에서 하나 이상의 레지스터를 기록하는 것은 IPI를 트리거링할 수 있다. 프로세서의 게스트 인터럽트 제어 유닛은 IPI를 야기하는 게스트에서의 기록에 따라 표적화된 vCPU에 대한 IPI를 개시할 수 있다. 게스트 IPI는 IPI를 레코딩하기 위해 표적화된 vCPU에 상관된 데이터 구조의 업데이트를 포함할 수 있다. 일반적으로, IPI는 프로세서에 의해, 특히, 프로세서 상에서 실행되는 소프트웨어에 의해, 소싱되는 인터럽트일 수 있다. IPI는 시스템 내 하나 이상의 프로세서를 표적으로 할 수 있고, 가끔 소싱 프로세서를 포함한다. 따라서, IPI는 다른 프로세서 상에서 실행되는 프로세스를 인터럽트시키기 위해 하나의 프로세서 상에서 실행되는 소프트웨어에 대한 메커니즘일 수 있다. IPI를 이용하여 서로 다른 프로세서 상에서 실행되는 스레드 간에 메시지를 전달할 수 있고, 일 프로세서에서 원래 표적화된 인터럽트를 다른 프로세서, 등으로 전달할 수 있다.
인터럽트가 프로세서/vCPU와 연계된 인터럽트 컨트롤러에 의해 수신되어야 할 경우, 프로세서 또는 vCPU가 인터럽트에 의해 표적이 될 수 있다. 프로세서/vCPU는 인터럽트를 반드시 처리할 필요할 필요는 없지만, 인터럽트 처리에 대한 후보일 수 있고, 어느 프로세서/vCPU가 인터럽트를 처리할 것인 지를 결정하는 데 참가할 수 있다. 인터럽트는 명확하게 표적을 명시할 수 있고(가령, 물리적 또는 논리 ID 이용), 또는, 모든 프로세서/vCPU를 표적으로 하는 송출 인터럽트일 수도 있다. 일반적으로, 인터럽트는 표적화된 프로세서와 상관된 인터럽트 컨트롤러가, 프로세서에 전달하기 위한 인터럽트를 레코딩하였을 경우, 수용된 것으로 언급될 수 있다. 즉, 수용 후 소정 시점에서, 인터럽트가 프로세서에 전달될 것이다. 인터럽트를 서비스하기 위해 프로세서를 차단하는 것은, 인터럽트를 전달하는 것으로 언급될 수 있다. vCPU 및/또는 대응하는 가상 인터럽트 컨트롤러, 및/또는 그 쌍은 게스트 내의 인터럽트의 목적지로 더 간결하게 언급될 수 있다. 목적지는 궁극적으로, 인터럽트를 서비스해야할 vCPU일 수 있으나, 대응하는 가상 인터럽트 컨트롤러는, 대응하는 프로세서와 연계되어 있고 인터럽트를 레코딩하기 때문에, 목적지로 보여질 수도 있다.
컴퓨터 시스템은 적어도 하나의 호스트 인터럽트 컨트롤러를 포함할 수 있다. 호스트 인터럽트 컨트롤러는 호스트(가령, 가상 환경에서 가상 머신 매니저(VMM), 및/또는 호스트 OS와 같이, VMM이 구동될 수 있는 다른 소프트웨어)에 의해 서비스될 인터럽트를 관리할 수 있다. 이러한 인터럽트는 예를 들어, 시스템 상에서 실행되는 게스트에 할당되지 않은 컴퓨터 시스템 내 장치로부터의 인터럽트와, VMM이 게스트에 노출시키고 싶어하지 않는 시스템 레벨 인터럽트, 등을 포함할 수 있다. 상술한 게스트 인터럽트 동작을 이용하여, 게스트에 의해 서비스되어야할 인터럽트("게스트 인터럽트")를 관리할 수 있다. 게스트 인터럽트는 예를 들어, 하나의 vCPU로부터 게스트 내의 다른 vCPU로 발급되는 게스트의 가상 머신 또는 IPI에 대한 장치의 기능을 제공하기 위해 게스트에 할당된 장치에 의해 발급되는 인터럽트를 포함할 수 있다.
일 실시예에서, 여기서 설명되는 게스트 인터럽트 동작은 게스트 인터럽트에 대한 대기 시간 감소를 유도할 수 있다. 예를 들어, 일부 실시예에서, 게스트 장치 인터럽트를 전달하기 위한 대기시간은, 호스트 장치 인터럽트를 전달하기 위한 대기시간과 유사할 수 있다. 게스트 인터럽트 대기시간은 호스트 인터럽트 대기시간, 동일 크기 수준의 대기시간, 등과 대략 동일할 수 있다.
일 실시예에서, 게스트 인터럽트 관리의 실질적 부분은 하드웨어 프로세서에서 구현될 수 있다. 시스템의 일부분에 상당분의 동작을 배치함으로써, 일부 실시예에서 구현예가 단순화될 수 있다. 따라서, 구현예는 일부 실시예에서, 보다 신속하게 교정되거나, 완료될 수 있다.
가상화 개관
도 1은 가상화를 구현하는 컴퓨터 시스템(5)의 일 실시예의 블록도를 도시한다. 도 1의 실시예에서, 복수의 게스트(10A-10N)가 도시된다. 게스트(10A)는 게스트 운영체제(OS)(12)와, 게스트 OS(12) 상에서 구동되는 하나 이상의 애플리케이션(14A-14N)을 포함한다. 게스트(10N)는 특권 코드(16)를 포함한다. 게스트(10A-10N)는 가상 머신 매니저(VMM)(18)에 의해 관리된다. VMM(18) 및 게스트(10A-10N)는, 컴퓨터 시스템(5)에 포함된 물리적 하드웨어를 포함할 수 있는, 호스트 하드웨어(20) 상에서 실행된다. 일 실시예에서, VMM(18)은 한 세트의 가상 머신 제어 블록(VMCB)(22)을 유지할 수 있다. 각각의 게스트(10A-10N)의 각각의 vCPU에 대해 하나씩 VMCB(22)가 존재할 수 있다. VMCB(22)가 도 1에 도시하기 위해 VMM(18)의 일부분으로 도시되지만, VMCB(22)는 호스트 하드웨어(20)에 디스크 드라이브와 같은 비휘발성 매체 및/또는 메모리에 저장될 수 있다.
호스트 하드웨어(20)는 일반적으로, 컴퓨터 시스템(5)에 포함된 모든 하드웨어를 포함한다. 다양한 실시예에서, 호스트 하드웨어(20)는 하나 이상의 프로세서, 메모리, 주변 장치, 및 이러한 구성요소들을 연결하는 데 사용되는 다른 회로를 포함할 수 있다. 예를 들어, PC-형 시스템은 프로세서, 메모리, 및 PCI 익스프레스 인터페이스와 같은 인터페이스를 이용하는 그래픽 장치를 연결하는 노스브리지(Northbridge)를 포함할 수 있다. 추가적으로, 노스브리지는 다양한 주변 구성요소가 직접적으로 또는 간접적으로 연결될 수 있는 주변 구성요소 인터페이스(PCI) 버스와 같은 주변 버스에 연결될 수 있다. 레거시 기능을 제공하거나 및/또는 레거시 하드웨어에 연결하기 위해 PCI 버스에 연결되는 사우스브리지(Southbridge)가 또한 포함될 수 있다. 다른 실시예에서, 다른 회로를 이용하여 다양한 하드웨어 구성요소를 연결할 수 있다. 예를 들어, HyperTransprotTM(HT)는 노드들을 링크시키는 데 사용될 수 있고, 각각의 노드는 하나 이상의 프로세서, 호스트 브리지, 및 메모리 컨트롤러를 포함할 수 있다. 각각의 노드는 노스브리지를 또한 포함할 수 있다. 호스트 브리지는 데이지 체인 방식으로 주변 장치에 HT 링크를 통해 연결하는 데 사용될 수 있다. 대안으로서, 예를 들어, 하나 이상의 프로세서, 노스브리지 기능, 및 그래픽 장치를 통합하는 단일 장치와 같은 단일 장치 상에, 구성요소들 중 상당수가 포함될 수 있다. 요망되는 임의의 회로/호스트 하드웨어 구조가 사용될 수 있다.
VMM(18)은 각각의 게스트(10A-10N)에 대한 가상화를 제공하도록 구성될 수 있고, 호스트 하드웨어(20)에 대한 게스트(10A-10N)의 액세스를 제어할 수 있다. VMM(18)은 호스트 하드웨어(20) 상에서의 실행을 위해 게스트(10A-10N)를 (그리고 특히, 2개 이상의 vCPU가 포함될 경우 게스트 내의 vCPU를) 스케쥴링할 책임이 또한 있다. VMM(18)은 가상화를 위해 호스트 하드웨어(20)에 제공되는 하드웨어 지원을 이용하도록 구성될 수 있다. 예를 들어, 프로세서는, 이벤트를 차단하기 위한 하드웨어를 포함한, 가상화를 위한 하드웨어 지원을 제공할 수 있고, 취급을 위해 VMM(18)으로 게스트를 내보낼 수 있다. 프로세서의 장치 인터럽트 매니저 및/또는 게스트 인터럽트 제어 유닛은 가상화를 지원하기 위해 제공되는 하드웨어일 수 있다.
일부 실시예에서, VMM(18)은, 호스트 하드웨어(20) 상에서 실행되고 게스트(10A-10N)에 대한 가상화를 제공하는, "신"(thin) 독립형 소프트웨어 프로그램으로 구현될 수 있다. 이러한 VMM 구현은 "하이퍼바이저"(hypervisor)로 종종 언급된다. 다른 실시예에서, VMM(18)은 호스트 OS 상에서 실행되거나 호스트 OS 내로 통합될 수 있다. 이러한 실시예에서 VMM(18)은, 시스템 바이오스에 의해 제공되는 플랫폼 시스템 관리 모드(SMM: System Mangament Mode), 호스트 OS의 임의의 드라이버를 포함하여, 호스트 OS에 의지할 수 있다. 따라서, 호스트 OS 구성요소(및 다양한 로우-레벨 구성요소, 가령, 플랫폼 SMM 코드)는 호스트 하드웨어(20) 상에서 직접 실행되고, VMM(18)에 의해 가상화되지 않는다. VMM(18) 및 호스트 OS(포함될 경우)는 일 실시예에서, 함께 호스트로 불릴 수 있다. 일반적으로, 호스트는 사용 중 호스트 하드웨어(20)를 직접 제어하는 임의의 코드를 포함할 수 있다. 예를 들어, 호스트는 VMM(18)일 수 있고, VMM(18)은 호스트 OS와 연계되거나 또는 호스트 OS 단독일 수 있다(가령, 비-가상화 환경).
다양한 실시예에서, VMM(18)은 풀 가상화, 파라가상화, 또는 두가지 모두를 지원할 수 있다. 더욱이 일부 실시예에서, VMM(18)은 파라가상화된 게스트와 풀 가상화된 게스트를 동시에 실행할 수 있다.
풀 가상화의 경우에, 게스트(10A-10N)는 가상화가 이루어지고 있는 지를 모른다. 각각의 게스트(10A-10N)는 가상 머신 내에, 인접한, 제로-기반 메모리를 가질 수 있고, VMM(18)은 호스트 물리적 어드레스 공간에 대한 액세스를 제어하기 위해 음영 페이지 표(shadow page tables) 또는 네스트 페이지 표(nested page tables)를 이용할 수 있다. 음영 페이지 표는 게스트 가상 어드레스로부터 호스트 물리적 어드레스로 리매핑(게스트(10A-10N)의 메모리 관리 소프트웨어에 의해 할당된 "물리적 어드레스"를 호스트 물리적 어드레스로 효과적으로 리매핑)이 이루어질 수 있고, 네스트 페이지 표는 입력으로 게스트 물리적 어드레스를 수신하여 호스트 물리적 어드레스로 매핑할 수 있다. 각각의 게스트(10A-10N)에 대하여 음영 페이지 표 또는 네스트 페이지 표을 이용하여, VMM(18)은 게스트가 호스트 하드웨어(20) 내 다른 게스트의 물리적 메모리에 액세스하지 않음을 보장할 수 있다.
파라가상화를 이용할 때, 게스트(10A-10N)는 적어도 부분적으로 VM-인지형일 수 있다. 이러한 게스트(10A-10N)는 메모리 페이지에 대해 VMM(18)과 협상할 수 있고, 따라서, 호스트 물리적 어드레스에 대한 게스트 물리적 어드레스의 리매핑이 요구되지 않을 수 있다. 일 실시예에서, 파라가상화에서, 게스트(10A-10N)는 호스트 하드웨어(20)의 주변 장치와 직접 상호작용하지 않는 것이 허용될 수 있다. 임의의 주어진 시기에, 주변 장치는 게스트(10A-10N)에 의해 "소유"될 수 있다. 일 구현예에서, 예를 들어, 주변 장치는 해당 주변 장치를 현재 소유하고 있는 하나 이상의 게스트(10A-10N)를 갖는 보호 도메인으로 매핑될 수 있다. 주변 장치를 소유하는 게스트들만이 직접 상호작용할 수 있다. 보호 도메인의 장치들이 다른 보호 도메인의 게스트에 할당된 페이지를 판독/기록하는 것을 방지하기 위해 보호 메커니즘이 또한 존재할 수 있다. 대안으로서, 주변 장치는 게스트가 소유할 수 있는, 또는, 게스트가 상호작용할 수 있는, 가상 기능을 지원할 수 있다.
앞서 언급한 바와 같이, VMM(18)은 각각의 게스트(10A-10N)에 대해 그리고 게스트 내 각각의 vCPU에 대해 VMCB(22)를 유지할 수 있다. VMCB(22)는 대응하는 게스트(10A-10N)에 대해 VMM(18)에 의해 할당되는 저장 영역에 저장되는 데이터 구조를 일반적으로 포함할 수 있다. 일 실시예에서, VMCB(22)는 한 페이지의 메모리를 포함할 수 있지만, 다른 실시예는 더 크거나 더 작은 메모리 영역을 이용하거나, 및/또는, 비휘발성 기억 장치와 같은 다른 매체 상의 기억 장치를 이용할 수 있다. 일 실시예에서, VMCB(22)는 게스트의 프로세서 상태를 포함할 수 있고, 이는 게스트의 실행이 스케쥴링될 때 호스트 하드웨어(20)의 프로세서로 로딩될 수 있고, 게스트가 빠져나갈 때(스케쥴된 시간을 마치거나, 또는, 게스트 탈출을 위해 프로세서가 검출하는 하나 이상의 인터셉트로 인해) VMCB(22)로 다시 저장될 수 있다. 일부 실시예에서, 프로세서 상태의 일부분만이 VMCB(22)에 대응하는 게스트에 제어를 전달하는 명령("가랑 머신 런(VMRUN)" 명령)을 통해 로딩되고, 다른 요망 상태는 VMRUN 명령 실행 이전에 VMM(18)에 의해 로딩될 수 있다. 마찬가지로, 이러한 실시예에서, 프로세스 상태의 일부분만이 게스트 탈출에 대해 프로세서에 의해 VMCB(22)에 저장될 수 있고, VMM(18)은 필요에 따라 추가적인 상태를 저장할 책임이 있을 수 있다. 다른 실시예에서, VMCB(22)는 프로세스 상태가 저장되는 다른 메모리 영역에 대한 포인터를 포함할 수 있다. 더욱이, 일 실시예에서, 2개 이상의 탈출 메커니즘(exit mechanism)이 규정될 수 있다. 일 실시예에서, 저장되는 상태의 양과 로딩되는 상태의 위치가, 어느 탈출 메커니즘이 선택되는 지에 따라 다를 수 있다.
일 실시예에서, VMM(18)은 VMM(18)에 대응하는 프로세서 상태를 저장하도록 할당된 메모리의 영역을 가질 수도 있다. VMRUN이 실행될 때, VMM(18)에 대응하는 프로세서 상태가 이 영역에 저장될 수 있다. 게스트가 VMM(18)으로 빠져나가면, 이 영역으로부터의 프로세서 상태는 이 영역으로부터 리로딩되어, VMM(18)으로 하여금 실행을 계속하게 한다. 예를 들어, 일 구현예에서, 프로세서는 VMM(18) 저장 영역의 어드레스를 저장하기 위한 레지스터(예를 들어, 모델 특정 레지스터(MSR))를 구현할 수 있다.
추가적으로, VMCB(22)는 게스트에 대해 인에이블링(enabling)되는 인터셉트 이벤트를 식별하는 인터셉트 구조와, 인에이블링된 인터셉트 이벤트가 검출될 경우 게스트를 빠져나가기 위한 메커니즘을 포함할 수 있다. 일 실시예에서, 인터셉트 구조는 한 세트의 인터셉트 표시를 포함할 수 있고, 프로세서가 지원하는 각각의 인터셉트 이벤트에 대해 하나씩 인터셉트 표시가 주어진다. 인터셉트 표시는 프로세스가 대응하는 이벤트를 인터셉트할 것인지 여부(또는 다른 방식으로 볼 경우, 인터셉트가 인에이블링되는 지 여부)를 표시할 수 있다. 여기서, 게스트에서 이벤트가 발생할 경우 이벤트 처리를 위해 프로세서가 게스트를 빠져나가면, 이벤트가 게스트에서 "인터셉트된다". 일 실시예에서, 인터셉트 구조는 두 탈출 메커니즘 중 어느 메커니즘이 사용되는 지를 표시하는 제 2 세트의 표시를 포함할 수 있다. 다른 실시예는 3개 이상의 탈출 메커니즘을 규정할 수 있다. 다른 실시예에서, 인터셉트 구조는 해당 이벤트에 대해 제 1 탈출 메커니즘이 사용되어야 하는지 여부를 표시하는, 인터셉트 이벤트 당 하나씩, 한 세트의 인터셉트 표시와, 해당 이벤트에 대해 제 2 탈출 메커니즘이 사용되어야 하는지 여부를 표시하는, 제 2 세트의 인터셉트 표시를 인터셉트 이벤트 당 하나씩 포함한다.
일반적으로, 탈출 메커니즘은 (일반적으로 재실행가능한 방식으로) 게스트 실행을 빠져나가기 위해, 그리고, 다른 코드의 실행을 시작하기 위해, 프로세서에 의해 수행될 작동을 규정할 수 있다. 일 실시예에서, 탈출 메커니즘은 소량의 프로세서 상태를 저장하고 미니비저(Minivisor)용 상태를 로딩하는 단계를 포함할 수 있다. 미니비저는 게스트 물리적 어드레스 공간에서 실행될 수 있고, 비교적 간단한 인터셉트 처리를 수행할 수 있다. 다른 탈출 메커니즘은 VMM으로 빠져나가서, 다량의 프로세서 상태를 저장하고 VMM의 프로세서 상태를 로딩한다. 따라서, 인터셉트 이벤트는 게스트에 따라 서로 다른 명령 코드에 의해 처리될 수 있다. 추가적으로, 비교적 간단한 인터셉트 처리는 수행에 시간이 덜 걸리는 "경량" 탈출 메커니즘을 통해 처리될 수 있고, 이는 일부 실시예에서 성능을 개선시킬 수 있다. 더 복잡한 처리는 "중량" 메커니즘이 탈출에 사용된 후, VMM에서 수행될 수 있다. 따라서, 일 실시예에서, VMM(18)은 VMM(18)이 게스트(10A-10N)의 내부적 처리를 원하지 않는 이벤트들을 인터셉트하도록 프로세서를 구성시킬 수 있고, 이용할 탈출 메커니즘에 대해 프로세서를 또한 구성할 수 있다. 이벤트는 명령(즉, 실행 대신에 명령을 인터셉트), 인터럽트, 예외, 및/또는 게스트 실행 중 발생할 수 있는 그외 다른 요망 이벤트를 포함할 수 있다.
일 실시예에서, VMCB(22)는 VMCB(22)를 로딩할 때 소정의 액션을 프로세서로 하여금 실행할 수 있게 하는 다른 제어 비트를 더 포함할 수 있다. 예를 들어, 제어 비트는 프로세서에서 TLB를 플러싱하기 위한 표시를 포함할 수 있다. 다른 제어 비트는 게스트에 대한 실행 환경(가령, 인터럽트 취급 모드, 게스트에 대한 어드레스 공간 식별자, 등)을 명시할 수 있다. 그외 다른 제어 비트를 이용하여, 게스트가 탈출한 이유, 등을 설명하는 탈출 코드와 통신할 수 있다.
일반적으로, "게스트"는 컴퓨터 시스템(50)에서의 실행을 위해 가상화될 하나 이상의 소프트웨어 프로그램을 포함할 수 있다. 게스트는, 특권 모드로 실행되고 있는 적어도 일부의 코드를 포함할 수 있으며, 이러한 적어도 일부의 코드는 실행되고 있는 컴퓨터 시스템에 대해 풀 제어를 할 수 있을 것으로 예상된다. 상술한 바와 같이, 게스트(10A)는 게스트가 게스트 OS(12)를 포함하는 예다. 게스트 OS(12)는 마이크로소프트사(미국, 워싱턴주, Redmond)의 제품인 윈도우즈 OS, 리눅스와 같은 유닉스-타입 운영 체제, IBM사(미국, 뉴욕주, Armonk) 제품인 AIX, 선마이크로시스템즈사(미국, 캘리포니아주, Santa Clara)의 제품인 Solaris, 휴렛-패커드사(미국, 캘리포니아주, Palo Alto)의 HP-UX, 등과 같은 임의의 운영체제(OS)일 수 있다. 게스트(10N)는 논-OS 특권 코드(16)를 포함하는 게스트의 일례다.
10N과 같은 도면부호에 사용될 때 "N"은 해당 도면 부호가 지닌 요소들의 수를 일반적으로 표시한다(가령, 하나의 게스트를 포함하여, 게스트(10A-10N)의 수). 추가적으로, 철자 "N"을 이용하는 여러 다른 도면 부호들(가령, 10N과 14N)은, 달리 명시하지 않을 경우, 서로 다른 요소들의 동일한 개수가 제공됨을 의도하는 것이 아니다(가령, 게스트(10A-10N)의 수가 애플리케이션(14A-14N)의 수와 다를 수 있다).
호스트 하드웨어 및 인터럽트 가상화
도 2를 참조하면, 호스트 하드웨어(20)의 일 실시예를 나타내는 블록도가 도시된다. 도시되는 실시예에서, 호스트 하드웨어(20)는 복수의 프로세서(30A-30B), 각자의 APIC(Advanced Programmable Interrupt Controllers)(32A-32B), 브리지(36)(장치 인터럽트 매니저(38)를 더 포함하는 입/출력 메모리 관리 유닛(IOMMU)(40)와 메모리 컨트롤러(42)를 포함함), 복수의 인터페이스 회로(IF: Interface Circuits)(44A-44C), 메모리 인터페이스 회로(MIF: Memory Interface Circuits)(46), I/O APIC(이후 IOAPIC)(50)를 포함할 수 있는 광학 브리지(48), 주변 장치(52A-52B)(그 중 일부가 IOAPIC(54)와 같은 IOAPIC를 포함할 수 있음), 및 메모리(56)를 포함한다. 프로세서(30A-30B)는 도 2에 도시되는 바와 같이, 브리지(36)와 각자의 APIC(32A-32B)에 연결된다. APIC(32A-32B)는 브리지(36)에 연결되고, 브리지(36)는 인터페이스 회로(44A-44C)와 메모리 인터페이스 회로(46)에 연결된다. 메모리 인터페이스 회로(46)는 메모리(56)에 연결되고, 인터페이스 회로(44A)는 브리지(48)에 연결되며, 브리지(48)는 주변 장치(52A-52B)에 연결된다.
도시되는 실시예에서, 각각의 프로세서(30A-30B)는 관련 APIC(32A-32B)를 갖는다. 본 실시예에서, 인터럽트는 인텔사(미국, 캘리포니아주, Santa Clara)에서 제시한 APIC 규격에 따라 호스트 하드웨어(20)에서 통신될 수 있다. 예를 들어, Intel 64 and IA-32 Architectures Software Developers's Manual, Volume 3A: System Programming Guide, Part 1, Chapter 10 (December 2009)를 참조할 수 있고, 그 내용은 본 발명에 포함된다. 이러한 규격에서, 각각의 프로세서는 (프로세서 자체로부터, 다른 프로세서로부터, 내부 APIC 인터럽트 소스로부터, 그리고 주변 장치와 관련된 IOAPIC로부터) 인터럽트를 수신하는 관련 로컬 APIC를 갖는다. 로컬 APIC는 현 인터럽트를 우선순위화하고, 프로세서 상에서 진행 중인 다른 인터럽트보다 우선순위가 높을 경우, 및/또는, 프로세서의 현 작업보다 우선순위가 높을 경우, 프로세서에 인터럽트를 송신한다. APIC 규격은 여기서 일례로 사용될 것이지만, 임의의 인터럽트 관리 규격이 다른 실시예에서 사용될 수 있다.
도 2의 실시예에서, APIC(32A-32B)는 프로세서의 호스트 인터럽트(즉, 호스트에 의해 처리될 인터럽트)에 대해 로컬 APIC일 수 있다. 다른 한편, 게스트 인터럽트에 대한 로컬 인터럽트 컨트롤러는 하드웨어 APIC로 예시되지 않을 수 있다. 대신에, 게스트 APIC(또는 간략히, gAPIC: Guest Advanced Programmable Interrupt Controllers)는 하드웨어 지원 및 VMM(18)을 통해 에뮬레이션될 수 있다. 구체적으로, 각각의 gAPIC가 gAPIC 상태 데이터 구조(58)에 저장된 상태를 가질 수 있다. gAPIC 데이터 구조(58)는 컴퓨터 시스템(5)에서 활성인 각각의 게스트 내 각각의 vCPU에 대해 gAPIC 상태 엔트리를 포함할 수 있다. 일 실시예에서, gAPIC 상태 엔트리는 대응하는 gAPIC 상태에 대한 데이터의 페이지일 수 있다. 이러한 실시예에서, gAPIC 상태 데이터 구조(58)는 단순히 페이지들의 집합일 수 있다. 페이지는 메모리 시스템 내에서 서로 근처에 위치할 필요가 없거나, 다양한 gAPIC에 대해 gAPIC 상태 데이터를 저장하는 외에 서로 다른 관계를 가질 것이다. 다른 실시예는 더 크거나 작은 gAPIC 상태 엔트리 및/또는 다른 데이터 구조를 이용할 수 있다. 게스트가 현재 프로세서 상에서 실행되고 있을 경우, 또는, 게스트가 탈출하여 VMM(18)이 실행 중일 경우, 게스트는 프로세서 상에서 활성일 수 있으나, 게스트는 프로세서 상에서 다시 실행될 것으로 예상된다.
VMM(18)이 프로세서(30A-30B) 상에서 게스트/vCPU를 스케쥴링할 때, VMM(18)은 vCPU의 VMCB(22)로부터 프로세서(30A-30B) 내로 (그리고 특히, 프로세서의 게스트 인터럽트 제어 유닛(34A-34B) 내로) 포인터를 로딩할 수 있다. 포인터는 gAPIC 상태 데이터 구조(58)에서 대응하는 gAPIC 상태 엔트리의 위치를 결정할 수 있다. 다라서, 게스트 인터럽트 제어 유닛(34A-34B)은 vCPU에 대한 gAPIC 상태의 위치를 결정할 수 있고, 장치 인터럽트 매니저(38)에 의해 레코딩되는 인터럽트를 검출할 수 있다. 일 실시예에서, 프로세서(30A-30B)는 게스트 인터럽트 전달 메커니즘을 구현할 수 있다. 예를 들어, 프로세서(30A-30B)는 (가령, 인터럽트 요청, 인터럽트 벡터, 등과 같은) 게스트 인터럽트로 프로그래밍될 수 있는 하나 이상의 레지스터를 포함할 수 있다. 가상 인터럽트는 프로세서(30A-30B) 상에서 실행되는 소프트웨어를 인터럽트시키기 위해 실제 인터럽트 소스(가령, 프로세서(30A-30B)에 대한 입력 핀)와 논리적으로 조합될 수 있다. 프로세서(30A-30B)는 인터럽트 서비스를 위해 인터럽트 벡터에 의해 명시되는 인터럽트 핸들러를 실행할 수 있다. 다른 실시예는 다른 게스트 인터럽트 전달 메커니즘을 구현할 수 있다.
일 실시예에서, 장치 인터럽트 매니저(38)는 게스트를 표적으로 하는 장치 인터럽트에 대한 게스트 인터럽트 상태를 업데이트하도록, 그리고, 대응하는 APIC(32A-32B)에 호스트 인터럽트를 전달하도록 구성될 수 있다. 특히, 일 실시예에서, 장치 인터럽트 매니저(38)는 gAPIC 상태 데이터 구조(58) 내 브리지(36)에서 수신되는 각각의 게스트 인터럽트를 레코딩하도록 구성될 수 있다. 게스트 인터럽트 수신에 따라, 장치 인터럽트 매니저(38)는 인터럽트가 표적으로 하는 게스트/vCPU에 대한 gAPIC 상태 데이터 구조(58)에서 gAPIC 상태를 업데이트하도록 구성될 수 있다. 장치 인터럽트 매니저(38)는 일 실시예에서, 게스트가 활성인지 아닌지에 관계없이 gAPIC 상태를 업데이트하도록 구성될 수 있다. 하나보다 많은 표적을 갖는 멀티캐스트 및 송출 인터럽트의 경우에, 장치 인터럽트 매니저(38)는 각각의 인터럽트 목표지에 대해 gAPIC 상태 데이터 구조(58)의 gAPIC 상태를 업데이트하도록 구성될 수 있다. 대안으로서, 장치 인터럽트 매니저(38)는 이러한 복수의 목표지 인터럽트에 대해 VMM(18)에 의지하도록 구성될 수 있다. 장치 인터럽트 매니저(38)는 이러한 실시예에서 VMM(18)에 액세스가능한 메모리 위치의 인터럽트를 로그하도록 구성될 수 있고, 메시지 처리를 VMM(18)에 신호하도록 구성될 수 있다.
장치 인터럽트 매니저(38)는 장치 표(62), 인터럽트 리매핑 표(64), 도 2의 메모리에 저장된 APIC 표(60)를 이용하여 주변 장치로부터 장치 인터럽트에 대한 표적화된 프로세서 또는 vCPU를 결정할 수 있다. 구체적으로, 장치 인터럽트 매니저(38)는 IOAPIC(50, 54)로부터 장치 인터럽트 요청에 포함된 정보에 따라 장치 표(62) 및 인터럽트 리매핑 표(64)에 액세스하도록 구성될 수 있다. 장치 표(62)는 각각의 주변 장치(52A-52B)에 대한 엔트리를 포함할 수 있다(그리고, 주변 장치가 연결되는 주변 인터페이스 상에 2개 이상의 식별자를 포함하는 주변 장치에 대해 복수의 엔트리를 포함할 수 있다). 주어진 주변 장치에 대한 장치 표 엔트리는 인터럽트 리매핑 표(64)에 대한 포인터를 포함할 수 있고, APIC ID 표(60) 중 하나에 대해 적어도 하나의 APIC ID 표 포인터를 또한 포함할 수 있다. APIC ID 표(60)는 게스트 내 각각의 APIC ID에 대해 하나씩 엔트리를 포함할 수 있고, 상기 APIC ID를 갖는 vCPU/gAPIC에 대응하는 gAPIC 상태 엔트리에 대한 포인터를 저장할 수 있다. 인터럽트 리매핑 표(64)는 원 목표지 및/또는 인터럽트 벡터로부터 새 목표지 및/또는 인터럽트 벡터까지 인터럽트를 리디렉션시키는 데 사용될 수 있다. 따라서, 인터럽트 리매핑 표(64)는 인터럽트에 대한 목표지 ID를 포함할 수 있다. 목표지 ID는 APIC ID이고, 게스트 인터럽트에 대해 업데이트될 gAPIC 상태 엔트리의 위치를 결정하기 위해 장치 표(62)로부터 APIC ID 표 포인터에 의해 표시되는 APIC ID 표(60) 내의 인덱스로 사용될 수 있다. 인터럽트 리매핑 표(64)로부터의 인터럽트 벡터에 기초하여, 장치 인터럽트 매니저는 식별된 gAPIC상태 엔트리의 인터럽트를 레코딩할 수 있다. 인터럽트 리매핑 표(64)는 장치가 게스트 또는 호스트에 할당되었는 지에 관한 표시를 또한 포함한다. 장치가 호스트에 할당되는 경우, 인터럽트는 APIC(32A-32B)에 전달될 호스트 인터럽트이고, gAPIC(60, 62, 64)는 업데이트되지 않을 수 있다. 표(60, 62, 64)의 일 실시예의 추가적 세부사항은 아래에서 더 설명된다.
gAPIC 상태 데이터 구조(58)가 도시되는 실시예에서 메모리(56)에 저장되는 것으로 도시되지만, 일부 실시예에서 브리지(36)에 액세스가능한 캐시 및/또는 장치 인터럽트 매니저(38)에 의해 일부분들이 캐싱(cache)될 수 있다. 추가적으로, 또는, 대안으로서, 하나 이상의 gAPIC 상태 엔트리에 대한 전용 메모리가 브리지(36)에서 구현될 수 있다.
APIC 인터럽트 메커니즘에서, 각각의 프로세서(로컬 APIC를 통해)는 물리적 APIC ID 및 논리적 APIC ID를 가질 수 있다. 물리적 APIC ID는 APIC ID 레지스터에 저장된다. 물리적 APIC ID는 물리적 전달 모드 인터럽트에 의해 표시되는 물리적 APIC ID와 일대일 관계로 매칭된다. 논리적 APIC ID는 로컬 APIC의 논리적 목표 레지스터에 저장된다. 논리적 APIC ID는 클러스터 ID 및 로컬 APIC ID를 갖고, 로컬 APIC ID는 통상적으로 1-핫 비트 벡터다. 논리적 전달 모드 인터럽트는 클러스터 내 하나 이상의 로컬 APIC에 인터럽트를 전달하기 위해 APIC ID의 벡터 부분에 임의의 설정 비트를 포함할 수 있다. 따라서, 논리적 APIC ID의 매칭은 클러스터 ID를 비교하고, 로컬 APIC의 1-핫 비트 벡터의 설정 비트와 동일 위치에서 로컬 APIC ID 벡터의 설정 비트를 검출하는 단계를 포함할 수 있다. 다른 방식으로 볼 때, 논리적 전달 모드 인터럽트의 로컬 APIC ID 벡터는 로컬 APIC의 로컬 APIC ID 벡터와 논리적으로 AND일 수 있고, 결과가 0이 아니고 클러스터 ID가 일치할 경우, 로컬 APIC는 논리적 인터럽트의 표적이다. 논리적 APIC ID가 여기서 더욱 간단하게 논리적 ID로 언급되며, 마찬가지로 물리적 APIC ID는 물리적 ID로 언급될 수 있다. 인터럽트와 관련하여 주어진 ID(논리적 또는 물리적)는 인터럽트의 목표 ID로 불릴 수 있다. 인터럽트에 대한 대응 전달 모드는 인터럽트의 목표 ID를 '논리적' 또는 '물리적'으로 식별할 수 있다.
APIC ID 표(60)는 주어진 게스트 내 논리적 APIC ID에 대한 논리적 APIC ID 표와, 주어진 게스트 내 물리적 APIC ID에 대한 물리적 APIC ID 표를 포함할 수 있다. APIC ID 표들은 앞서 언급한 바와 같이, APIC ID를 gAPIC 상태 포인터에 매핑시킬 수 있다. 일 실시예에서, 논리적 APIC ID 표는 논리적 ID를 물리적 ID로 매핑시킬 수 있고, 이는 물리적 ID 표를 통해 gAPIC 상태 포인터로 매핑될 수 있다. 다른 실시예는 논리적 ID를 gAPIC 상태 포인터로 직접 매핑할 수도 있다.
일 실시예에서, APIC ID 표(60)는 vCPU가 현재 구동 중인지 여부의 표시를 포함할 수 있다. vCPU가 구동 중일 경우, 인터럽트는 (새 인터럽트를 레코딩하는 업데이트에 대한 gAPIC 상태 엔트리의 모니터링을 통해, 또는, 장치 인터럽트 매니저(38)로부터의 메시지를 통해) vCPU를 실행하고 있는 프로세서(30A-30B)에 의해 검출될 수 있다. 따라서, 인터럽트는 구동 게스트에 전달될 수 있다. 그러나, 게스트가 구동 중이지 않을 경우(또는 활성이 아닌 경우), 인터럽트의 전달이 지연될 수 있다. 일 실시예에서, IOMMU는 인터럽트를 로그할 수 있다. VMM(18)은 로그에서 인터럽트를 검출할 수 있고, 스케쥴링을 위해 표적화된 vCPU를 우선순위화할 수 있다. vCPU가 하드웨어 프로세서 상에서 현재 실행 중인 경우 vCPU는 구동 중일 수 있다.
주어진 프로세서(30A-30B)에 대한 APIC(32A-32B)가 프로세서에 대한 임의의 인터페이스를 가질 수 있다. 예를 들어, 로컬 APIC와 각자의 프로세서 사이에 사용되는 인터페이스가 사용될 수 있다. 각각의 APIC는 인터럽트가 서비스를 위해 전달되고 있음을 프로세서에게 독립적으로 신호하도록 구성될 수 있다. 프로세서가 게스트를 실행하고 있고 APIC가 인터럽트를 신호할 경우, 프로세서는 호스트 인터럽트를 처리하기 위해 VMM(18)에게로 게스트를 내보내도록 구성될 수 있다. 프로세서가 게스트를 실행하고 있지 않을 경우, 프로세서는 APIC에 의해 신호된 인터럽트에 따라, 호스트 실행을 중단시키고 호스트 인터럽트 핸들러로 분기하도록 구성될 수 있다.
APIC(32A-32B)는 인터럽트 수신을 위해 브리지(36)에 연결된다. 임의의 인터페이스를 이용하여 APIC(32A-32B)로 인터럽트를 전달할 수 있다. 예를 들어, APIC 인터럽트 전달을 위해 구현된 임의의 인터페이스가 사용될 수 있다. 일 실시예에서, (예를 들어, 프로세서(30A-30B)에 의해 개시되는 메모리 읽기/쓰기 작동, 캐시 코히어런시 유지를 위한 프로브, 등과 같은) 프로세서(30A-30B)와의 다른 작동을 통신하는 데 사용되는 동일한 통신 메커니즘이, 인터럽트 메시지를 전달하는 데 사용될 수 있다. 다른 방식으로 볼 때, APIC(32A-32B)의 연결은 브리지(36)에 대한 프로세서(30A-30B)의 연결과 공유될 수 있다. 대안으로서, 프로세서(30A-30B)는 APIC(32A-32D)가 APIC "3 와이어 인터페이스"를 이용하는 경우처럼, 브리지(36)에 대한 별도의 경로를 가질 수 있다. 인터럽트 메시지는, 인터럽트의 송신과 인터럽트의 목표지를 식별하는 임의의 인터페이스에서의 임의의 통신일 수 있다. 예를 들어, 인터럽트는 관련된 인터럽트 벡터를 가질 수 있고, 인터럽트 벡터는 인터럽트 메시지의 일부분일 수 있다. 인터럽트 메시지는 목표지 ID(가령, 논리적 또는 물리적 APIC ID)를 또한 포함할 수 있다.
게스트 인터럽트 제어 유닛(34A-34B)은 대응하는 gAPIC 상태 엔트리에 레코딩될 게스트 인터럽트를 검출하도록 구성될 수 있고, 상술한 바와 같이 인터럽트를 전달할 수 있다. 추가적으로, 게스트 인터럽트 제어 유닛(34A-34B)은 게스트/vCPU 실행 중 자체 gAPIC에 대한 프로세스(30A-30B) 액세스를 검출할 수 있고, APIC(32A-32B)에 대한 액세스 대신에, 이러한 액세스를 gAPIC 상태 엔트리의 메모리 판독/기록으로 변환할 수 있다. 게스트 인터럽트 제어 유닛(34A-34B)은 일부 실시예에서, gAPIC의 일부 에뮬레이션을 또한 구현할 수 있다. 예를 들어, 상당한 성능 임팩트를 갖는 작동들이 구현될 수 있다. 게스트 인터럽트 제어 유닛(34A-34B)에 의해 구현되지 않는 에뮬레이션의 경우, 게스트 인터럽트 제어 유닛(34A-34B)이 VMM(18)에서의 에뮬레이션을 위해 게스트를 빠져나올 수 있다. 일부 액세스는 에뮬레이션을 필요로하지 않을 수 있다(가령 대부분의 판독은 데이터 판독과는 다른 효과를 갖지 않으며, 따라서, gAPIC 상태 엔트리로부터 데이터를 판독하는 것을 넘어서는 에뮬레이션이 필요하다). APIC의 어떤 부작용을 생성하지 않는 기록은, gAPIC 상태 엔트리의 대응 위치를 업데이트함으로써 또한 완료될 수 있다.
일 실시예에서, 게스트 인터럽트 제어 유닛(34A-34B)에서 에뮬레이션되는 작동들은 게스트 내 IPI 개시, 작업 우선순위 레지스터(TPR)에 대한 액세스, 및 엔드 오브 인터럽트(EOI) 레지스터에 대한 액세스를 포함할 수 있다. 다른 실시예는 게스트 인터럽트 제어 유닛(34A-34B)의 작동들의 서로 다른 서브세트를 구현할 수 있다. 앞서 언급한 바와 같이, 일부 실시예에서, 게스트 인터럽트 제어 유닛(34A-34B)은 주로 마이크로코드로 구현될 수 있다. 따라서, 게스트 실행 중, gAPIC에 대한 액세스는 마이크로코드 실행을 야기할 수 있다. 추가적으로, (vCPU가 프로세서 상에서 실행되고 있는 경우에) 장치 인터럽트 매니저(38)에 의한 gAPIC 상태 엔트리에 대한 업데이트는, 마이크로코드 실행을 야기할 수 있다. VMM(18)으로 빠져나가는 명령의 경우에, 명령이 중단된 후(즉, 기록을 위해 gAPIC 상태 엔트리에 대한 업데이트가 완료되거나, gAPIC 상태 엔트리로부터 판독된 데이터가 판독을 위해 표적 레지스터에 기록된 후), 또는 명령이 중단되기 전, 탈출이 수행될 수 있다. 명령 중단 후 VMExit의 개시는 '트래핑'(trapping)으로 불릴 수 있다. 일부 경우에, 대응 명령은 중단되게 될 경우 회복불가능한 변화를 야기할 수 있다. 따라서, 이러한 명령은 명령 결함(faulting the instruction)이라 불릴 수 있는, VMExit 이전에 중단되도록 허용되지 않을 수 있다.
IOMMU(40)는 상술한 바와 같이, 장치 인터럽트 매니저(38)를 포함한다. 추가적으로, IOMMU(40)는 I/O-개시 메모리 작동(예를 들어, 주변 장치(52A-52B) 대신에 DMA 컨트롤러에 의해, 또는, 주변 장치(52A-52B)로부터 소싱되는 메모리 판독/기록 작동)에 대한 가상-물리적 어드레스 매핑을 수행하도록 구성될 수 있다. 변환 작동의 일부분으로, IOMMU(40)는 장치 표(62)와, 선택적으로, 인터럽트 리디렉트 표(64)에 액세스하도록 구성될 수 있다. 각각의 주변 장치(52A-52B)에 대한 장치 표 엔트리는 메모리 판독/기록 작동(도시되지 않음)의 메모리 어드레스를 변환하기 위한 페이지 표 포인터 - I/O 페이지 표를 포함할 수 있다.
메모리 컨트롤러(42)는 프로세서(30A-30B)에 의해 발급되는 메모리 작동(가령, 명령 페치, 로드/저장 데이터 액세스, 변환을 위한 프로세서 페이지 표 액세스, 등), 장치 인터럽트 매니저(38)로부터 메모리 작동(가령, gAPIC 상태 데이터 구조(58)의 판독/업데이트 및/또는 표(60, 62, 64) 액세스를 위한), IOMMU(40)(I/O 페이지 표, 장치 표(62), 및 인터럽트 리매핑 표(64)에 액세스하기 위한), 및 (일부 실시예에서) 인터페이스 회로(44A-44C)로부터 수신되는 메모리 작동을 수신하도록 연결될 수 있다. 메모리 컨트롤러(42)는 메모리 작동을 지시하도록, 그리고, 메모리 작동 수행을 위해 메모리(56)와 통신하도록 구성될 수 있다. 메모리 인터페이스 회로(46)는 메모리(56)에 대한 물리적 레벨 액세스를 수행할 수 있다.
메모리(56)는 임의의 타입의 메모리를 포함할 수 있다. 예를 들어, 메모리(56)는 동기식 DRAM(SDARM), DDR SDRAM의 모바일 버전(mDDR3, 등) 및/또는 저전력 버전(LPDDR2, 등)을 포함하는 더블 데이터 레이트(DDR, DDR2, DDR3, 등) SDRAM, RAMBUS DRAM, SRAM, 등을 포함할 수 있다. 메모리(56)는 단일 인라인 메모리 모듈(SIMM), 듀얼 인라인 메모리 모듈(DIMM), 등과 같은, 복수의 메모리 칩을 포함하는 하나 이상의 메모리 모듈을 포함할 수 있다.
장치 인터럽트 매니저(38), IOMMU(40), 및 메모리 컨트롤러(42)를 포함함에 추가하여, 본 실시예에서, 브리지(36)는 프로세서(30A-30B), APIC(32A-32B), 및 인터페이스 회로(44A-44D)에 연결된 장치 사이에서 통신하기 위해 다른 통신 기능을 또한 포함할 수 있다. 예를 들어, 도시되는 실시예에서, 다른 브리지(48)가 인터페이스 회로(44A)에 연결될 수 있고, 주변 장치(52A-52B)에 의해 사용되는 프로토콜과 인터페이스 회로(44A)에 의해 사용되는 프로토콜 사이에서 통신을 브리지하도록 구성될 수 있다. 일 실시예에서, 인터페이스 회로(44A-44C)는 예를 들어, 상술한 HT 인터페이스를 구현할 수 있고, 브리지(48)는 HT로부터 PCI 익스프레스(PCIe) 인터페이스와 같은 다른 인터페이스로 브리지될 수 있다. 브리지(48)는 다른 인터페이스로 브리지하도록 구성될 수도 있고, 다른 브리지가 브리지(48)에 연결되어, 다른 인터페이스로 브리지시킬 수도 있다. 임의의 주변 인터페이스가 사용될 수 있다. 추가적으로, 주변 장치(52A-52B)는 HT 인터페이스에 직접 연결하도록 구성된 HT 주변 장치를 포함할 수 있다. 이러한 주변 장치는 브리지(48)를 필요로하지 않을 수 있다.
일 실시예에서, 브리지(48) 및/또는 하나 이상의 주변 장치(52A-52B)는 IOAPIC(도 2의 50, 54)를 포함할 수 있다. IOAPIC는 주변 장치로부터 인터럽트 요청을 수신할 책임이 있고, 인터럽트 메시지를 형성하여 (메모리에 gAPIC 상태 데이터 구조(58)로 레코딩을 위한) APIC(32A-32B) 및 장치 인터럽트 매니저(38)에 인터럽트 요청을 송신할 책임이 있다.
상술한 바와 같이, 일 실시예에서, 인터페이스 회로(44A-44C)는 HT 인터페이스 상에서 통신하도록 구성될 수 있다. 인터페이스 회로(44A-44C)는 HT를 이용하여 주변 장치/브리지와 통신하도록 구성될 수 있다. 추가적으로, 일부 실시예에서, 인터페이스 회로(44A-44C)는 프로세서, APIC, 등을 갖는 다른 노드에 연결되도록 구성될 수 있다. 이러한 실시예에서, 브리지(36)는 앞서 설명한 회로에 추가하여 코히어런스 관리 회로를 포함할 수 있다.
프로세서(30A-30B)는 임의의 명령 세트 구조를 구현할 수 있고, 명령 세트 구조에서 규정된 명령을 실행하도록 구성될 수 있다. 프로세서(30A-30B)는 수퍼파이프라인, 수퍼스칼라, 및/또는 이들의 조합, 순서에 따른(in-order) 또는 순서를 벗어난(out-of-order) 실행, 투기적 실행(speculative execution), 등과 같은 임의의 마이크로구조를 포함할 수 있다. 프로세서(30A-30B)는 요망되는 대로, 마이크로코딩 기술을 구현할 수도 있고, 구현하지 않을 수도 있다.
주변 장치(52A-52B)는 임의의 타입의 주변 장치를 포함할 수 있다. 주변 장치(52A-52B)는 자기, 고상, 광학 디스크 드라이브, 비휘발성 메모리 장치(가령, 플래시 메모리, 등)와 같은 저장 장치를 포함할 수 있다. 주변 장치(52A-52B)는 사용자 입/출력 장치(키보드, 마우스, 디스플레이, 음성 입력부, 등), 네트워킹 장치, 범용 시리얼 버스(USB)와 같은 외부 인터페이스 장치, 또는 펌웨어, 등과 같은 입/출력 장치를 포함할 수 있다.
도시되는 실시예에서, 프로세서(30A-30B), 브리지(36), APIC(32A-32B), 인터페이스 회로(44A-44C), 및 메모리 인터페이스 회로(46)는 집적 회로(66)로 단일 반도체 기판에 통합될 수 있다. 다른 실시예는 요망되는 바에 따라, 서로 다른 양의 통합 및 이산 회로를 구현할 수 있다. 프로세서, APIC, 인터페이스 회로, 주변 장치, 브리지, 등과 같은 다양한 개수의 구성요소들이 도 2에 도시되지만, 다른 실시예들은 각각의 구성요소의 하나 이상을 임의의 개수로 구현할 수 있다.
다른 실시예에서, IOMMU(40) 및 장치 인터럽트 매니저(38)의 위치가 변할 수 있다. 예를 들어, 둘 중 적어도 하나가 브리지(48)에, 주변 장치(52A-52B)에, 브리지에 연결된 다른 브리지에, 등등에 놓일 수 있다.
도시되는 실시예에서, 각각의 APIC(32A-32B)는 도 2에 도시되는 바와 같이 특정 프로세서(30A-30B)와 상관된다. 따라서, 주어진 인터럽트 컨트롤러는 본 실시예에서 대응 프로세서(30A-30B)에 전용 제공된다. 특히, 도 2에서, APIC(32A)는 프로세서(30A) 전용이고, APIC(32B)는 프로세서(30B) 전용이다. 인터럽트 컨트롤러가 대응 프로세서에 인터럽트를 임의의 방식으로 신호할 수 있다. 일반적으로, 시그널링은 인터럽트가 필요함을 표시할 수 있다. 시그널링은 인터럽트 벡터를 포함할 수 있고, 또는 인터럽트가 전달된 후 실행되는 소프트웨어에 의해 인터럽트 벡터가 판독될 수 있다. 인터럽트 전달은 일 실시예에서, 프로세서의 시그널링과, 프로세서가 인터럽트를 수용함을 의미할 수 있다. 인터럽트 서비스는 인터럽팅 장치에 의해 요구되는 작동을 수행하기 위해 인터럽트 벡터와 관련된 인터럽트 서비스 루틴을 실행하는 것을 의미할 수 있다.
도 3을 이제 참조하면, 일 실시예의 경우 주변 장치로부터 gAPIC로 인터럽트의 진전을 제시하는, 그리고, 게스트 내에 IPI를 또한 제시하는, 블록도가 도시된다. 도시되는 실시예에서, 주변 장치(52A)는 인터럽트가 요망됨을 결정한다. 주변 장치(52A) 내의 IOAPIC(54)(도 2 참조)는 주변 장치(52A)에 대한 인터럽트 메시지를 발생시킬 수 있다. 구체적으로, IOAPIC(54)는 (예를 들어, 주변 장치(52A)에 서 요구되는 서비스에 기초하여, 주변 장치(52A)가 복수의 기능을 구현할 경우 인터럽트를 시그널링하는 특정 기능, 등) 요망 인터럽트에 대응하는 인터럽트 벡터를 발생시킬 수 있다. 마찬가지로, IOAPIC(50)는 자체 IOAPIC를 구현하지 못하는 주변 장치(52B)와 같은 주변 장치에 대한 인터럽트 메시지를 발생시킬 수 있다. 인터럽트 벡터는 인터럽트 통신의 일부분이며, 인터럽트 소스의 식별, 인터럽트의 우선순위화, 등에 사용될 수 있다. 일부 경우에, 인터럽트 벡터는 IOMMU(40)에 의해 리매핑될 수 있고, 따라서, 인터럽트 벡터가 도 3에서 "오리지널 벡터"로 제시된다. 주변 장치(52A)는 IOMMU(40)에 인터럽트 메시지를 송신할 수 있다(화살표 A). 본 실시예에서, 인터럽트는, 예를 들어, PCIe 규격에서 규정된 바와 같이, 메시지-시그널 인터럽트(MSI)의 형태로 송신될 수 있다. 다른 실시예는 임의의 요망 방식으로 인터럽트를 송신할 수 있다. 일반적으로, 송신은 인터럽트, 전달 모드, 인터럽트의 목표지 ID(DestID)를 식별할 수 있다.
IOMMU(40)는 MSI를 수신할 수 있다. MSI는 주변 장치의 식별자를 포함한다. 예를 들어, PCI 프로그래밍 모델을 구현하는 인터페이스는 버스 번호와 해당 버스의 장치 번호로 각각의 장치를 식별할 수 있다(복수의 PCI 인터페이스가 수직구조적으로 및/또는 병렬 형태로 시스템에 존재할 수 있게 된다). 장치는 복수의 "기능"들을 가질 수 있고, 이는 물리적 장치 상에서 개별적인 가상 장치일 수도 있고, 이 장치 상에서의 장치의 파티션일 수도 있다. 식별자는 기능 번호를 또한 포함할 수 있다. 따라서, 본 실시예에서, 식별자는 버스-장치-기능(BDF)으로 불릴 수 있다. IOMMU(40)(본 실시예에서, 그리고 특히, 장치 인터럽트 매니저(38))는 BDF를 이용하여 장치 표(62) 내로 인덱싱될 수 있고(화살표 B), 주변 장치(52A)에 대응하는 장치 표 엔트리를 식별할 수 있다. 엔트리는 APIC ID 표 포인터를 포함할 수 있다(화살표 C). 본 실시예에서, 장치 표 엔트리는 장치에 대응하는 인터럽트 리매핑 표(64)를 식별할 수 있는 인터럽트 리매핑 표 포인터(IRTP)를 또한 포함할 수 있다(화살표 C1). 인터럽트 리매핑 표(64)는 오리지널 인터럽트 벡터에 의해 인덱싱될 수 있고, 인터럽트에 대한 출력 벡터 및 목표지 ID(DestID, 가령, 논리적 또는 물리적 APIC ID)를 제공할 수 있다(화살표 C2). 추가적으로, 게스트/호스트 표시가 출력될 수 있다(G/H). 일 실시예에서, G/H 표시는 설정될 때, 인터럽트가 게스트에 의해 서비스될 것임을 표시하고, 클리어 상태일 때, 인터럽트가 호스트에 의해 서비스될 것임을 표시하는 비트일 수 있다. 다른 실시예는 설정 및 클리어 상태의 반대 의미들을 이용할 수 있고, 또는, 표시에 대해 다른 인코딩을 이용할 수 있다.
G/H 표시가 호스트을 표시할 경우, 장치 인터럽트 매니저(38)는 APIC(32A-32B)에 인터럽트 메시지를 송신할 수 있고, 인터럽트는 APIC 규격에 따라 취급될 수 있다(화살표 F). 다른 한편, G/H 표시가 게스트를 표시하면, 장치 인터럽트 매니저(38)는 물리적 APIC ID 표(60A) 내로 인덱스로(화살표 D) 목표지 ID를 이용할 수 있고, 이러한 표(60A)는 장치 표(62)에 의해 제공되는 APIC ID 표 포인터에 의해 포인팅되는 표다. 물리적 APIC ID 표(60A)는 업데이트될 gAPIC 상태 엔트리를 식별하는 gAPIC 상태 포인터를 출력할 수 있다. 장치 인터럽트 매니저(38)는 gAPIC 상태에 대한 인터럽트를 기록할 수 있다(gAPIC 상태 업데이트, 도 3의 화살표 E). 물리적 APIC ID 표(60A)는 vCPU에 대한 Is_Running(IR) 표시를 또한 공급할 수 있다. vCPU가 구동 중일 경우, 인터럽트는 상당히 빠르게 전달될 수 있다. vCPU가 구동 중이 아닐 경우, 장치 인터럽트 매니저(38)는 VMM(18)에 대한 인터럽트를 로그하고, 이는 인터럽트 처리를 위해 vCPU를 스케쥴링할 수 있다.
도시되는 실시예는 목표지 ID를 갖는 물리적 APIC ID 표(60A)에만 액세스한다. 따라서, 도시되는 실시예에서, 게스트 인터럽트에 대한 목표지 ID는 물리적 APIC ID일 수 있다. 논리적 APIC ID는 장치 표(62), 인터럽트 매핑 표(64), 등을 프로그래밍할 때, VMM(18)에 의해 물리적 APIC ID로 변환될 수 있다. 다른 실시예에서, 논리적 APIC ID 및 물리적 APIC ID 모두가 지원될 수 있고, 주어진 게스트에 대해 논리적 APIC ID 표 및 물리적 APIC ID 표가 gAPIC 상태 포인터의 위치 결정에 필요에 따라 사용될 수 있다.
일 실시예에서, gAPIC 상태는 각각의 인터럽트 벡터에 대한 비트를 포함하는 인터럽트 요청 레지스터(IRR: Interrupt Reqeust Register)를 포함한다. 인터럽트를 레코딩하기 위해, 인터럽트 벡터에 대응하는 비트가 IRR에서 설정될 수 있다. gAPIC 상태의 IRR이 2개 이상의 소스로부터 업데이트되는 것이 가능하다. 따라서, 업데이트는 상태 손실 방지를 위해 원자적으로 이루어질 수 있다. 특히, 업데이트는 메모리의 IRR 내로 설정된 비트를 OR 처리하는 원자적 OR일 수 있다. 원자적 작동은 작동이 복수의 단계로 구현됨에도 불구하고, 일 단위로 효과적으로 수행되는 작동일 수 있다. 원자적으로 업데이트되고 있는 위치에 액세스하려는 관찰자는, 원자적 업데이트 이전에 또는 원자적 업데이트 이후에 해당 값을 수신하지만, 중간 값을 수신하지 못할 수 있다. 자동적으로 업데이트되는 위치를 업데이트하려 시도하는 관찰자가 원자적 작동 이전에, 또는 원자적 작동 종료 후에 업데이트를 수행하지만, 원자적 작동 중에는 수행하지 않는다. 본 실시예가 원자적 OR을 구현할 수 있지만, 다른 실시예는 더욱 일반적인 원자적 업데이트 작동을 구현할 수 있다. 예를 들어, 원자적 업데이트는 수정되지 말아야 하는 표적의 비트를 식별하는 AND 마스크와, OR 처리되어야할 비트를 식별하는 OR 마스크를 포함할 수 있다. 다른 구현예도 물론 가능하다. 예를 들어, 메모리 위치로부터 원래 값이 판독되고 원래의 값에 대해 OR 처리된 새 값과의 비교 및 스왑 작동(Compare and Swap Operation)이 수행되는, 비교 및 스왑 구현예가 사용될 수 있다. 비교가 실패할 경우, 프로세스는 반복될 수 있다(새 원래 값을 판독하고, 비교 및 스왑을 실행한다). 백오프 및/또는 타임아웃 메커니즘을 이용하여, 필요시 루프로부터 빠져나올 수 있다.
일 실시예에서, 프로세서(30A-30B)(그리고 특히 게스트 인터럽트 제어 유닛(34A-34B))는 프로세서 상에서 실행되고 있는 vCPU에 대응하는 gAPIC 상태 엔트리에 대한 업데이트를 모니터링할 수 있다. 구체적으로, 프로세서는 IRR 비트를 포함하는 gAPIC 상태 엔트리의 영역을 각각 모니터링할 수 있고, gAPIC 상태 엔트리는 프로세서가 실행하고 있는 vCPU에 대응한다. 이 영역은 여기서 "와치 영역"(watch region)이라 불린다. 와치 영역은 다양한 방식으로 구축될 수 있다. 예를 들어, 프로세서(30A-30B)는 캐시를 포함할 수 있고, 캐시와 메모리 사이에 코히어런시를 유지하도록 구성될 수 있다. 코히어런시 메커니즘의 일부분으로서, 프로세서(30A-30B)는 캐시에 저장되는 데이터에 대한 업데이트를 안내받을 수 있다. 프로세서(30A-30B)는 따라서, 캐시 내의 영역을 판독함으로써 와치 영역을 구축할 수 있다. 예를 들어, 일 실시예에서, 2개의 캐시 블록이 해당 영역을 커버할 수 있다. 일부 실시예에서, 캐시 블록들이 캐시 내에 남아있음을 보장할 필요가 있을 수 있다. 예를 들어, 일부 실시예는 프로세서의 캐시에서 놓친다고 알려진 코히어런시 프로브를 필터링할 수 있다. 와치 영역 블록이 캐시에 남아 있다는 점을 보장하면, 와치 영역 업데이트에 대응하는 프로브가 이러한 실시예에서 필터링되지 않음을 보장할 수 있다.
다양한 메커니즘을 이용하여, 와치 영역 블록이 프로세서의 캐시에 남아 잇음을 보장할 수 있다. 예를 들어, 프로세서들은 캐시 내 블록을 잠그기 위해 캐시 라킹(cache locking)을 구현할 수 있다. 대안으로서, 프로세서는 캐시에 의해 구현되는 캐시 대체 알고리즘에서 "가장 최근에 사용됨"을 유지하도록 블록들을 강제할 수 있다. 다른 한편, 예를 들어, 코히어런시 프로브가 필터링되지 않을 경우, 와치 영역 블록이 프로세서의 캐시에 머무름을 보장할 필요가 없을 수 있다. 이러한 실시예에서, 프로세서는 레지스터에 영역의 어드레스를 단순히 저장할 수 있고, 어드레스를 프로브에 비교할 수 있다.
프로세서(30A-30B) 상에서 구동되는 vCPU에 대한 gAPIC 상태 엔트리에 gAPIC 상태 업데이트가 이루어질 경우, 대응 프로세서는 와치 영역에 대한 업데이트를 검출할 수 있다(화살표 G2). 대응 프로세서의 게스트 인터럽트 제어 유닛(34A-34B)은 업데이트된 IRR을 판독할 수 있고, 현 인터럽트를 우선순위화하여 높은 우선순위일 경우 새 인터럽트를 취할 수 있다.
다른 실시예에서, 와치 영역이 사용되지 않고, 대신에 장치 인터럽트 매니저(38)가 게스트 인터럽트 제어 메시지를 APIC(32A-32B)에(또는 프로세서(30A-30B)에 직접) 송신할 수 있다(화살표 G1). 게스트 인터럽트 제어 메시지는 호스트 인터럽트 메시지 및 IPI와 구분가능할 수 있고, 따라서, 게스트 인터럽트가 요청되었음을 알라기 위해 게스트 인터럽트 제어 유닛(34A-34B)에 전달될 수 있다. 예를 들어, 게스트 인터럽트 제어 메시지는 앞서 규정되지 않은 인터럽트 메시지 코딩을 이용하여, 기존 인터럽트 메시지 코딩을 이용하는 호스트 인터럽트 메시지 및 IPI로부터 이를 구분할 수 있다. 다른 실시예는 와치 영역 및 게스트 인터럽트 제어 메시지 모두를 구현할 수 있다.
일 실시예에서, 게스트 인터럽트 제어 메시지는 모델-특정 레지스터(MSR) 인터페이스를 통해 게스트 인터럽트 제어 유닛(34A-34B)에 전달될 수 있다. MSR은 게스트 인터럽트 제어 유닛(34A-34B)에 액세스가능할 수 있다(예를 들어, 게스트 인터럽트 제어 유닛(34A-34B)이 부분적으로 또는 완전하게 마이크로코드로 구현될 경우, 마이크로코드에 액세스가능하다). MSR은 프로세서(30A-30B) 상에서 실행되는 특권 코드에 또한 액세스가능하다. 그러나, MSR은 게스트 액세스를 포함한 비-특권 액세스로부터 보호될 수 있다. APIC(32A-32B)는, IPI를 인터럽트 소프트웨어에 전달하는 대신에 MSR이 기록된다는 점을 제외하곤, MSR에 인터럽트를 전달하는 데 IPI를 위해 사용되는 것과 유사한 인터페이스를 이용할 수 있다. MSR의 업데이트는 게스트 인터럽트 제어 유닛(34A-34B)으로 하여금 게스트 인터럽트 전달을 활성화시킬 수 있게 한다. 예를 들어, 마이크로코드로 게스트 인터럽트 제어 유닛(34A-34B)을 구현하는 실시예에서, MSR의 업데이트는 게스트에 전달을 위한 인터럽트를 처리하는 마이크로코드 루틴을 실행시킬 수 있다. MSR 인터페이스가 일 실시예에서 사용될 수 있지만, 다른 실시예는 게스트 인터럽트 제어 메시지를 게스트 인터럽트 제어 유닛(34A-34B)에 전달시키는 임의의 메커니즘을 이용할 수 있다. 이러한 메커니즘은 "도어벨"(doorbell) 메커니즘이라 불릴 수 있다.
장치 인터럽트에 추가하여, 프로세서 상에서 실행되는 게스트 vCPU는 동일한 가상 머신 내의 다른 vCPU에 IPI를 발급할 수 있다. 본 실시예에서, IPI는 vCPU 상에서 실행되고 있는 소프트웨어가 인터럽트 명령 레지스터(ICR)를 업데이트하고 있을 때 발급된다. 인터럽트 명령 레지스터는 하이 부분(ICRH) 및 로우 부분(ICRL)을 포함할 수 있고, IPI는 ICRL 레지스터에 대한 기록에 따라 개시될 수 있다. 이러한 메커니즘은 x1 APIC 인코딩 및 x2 APIC 인코딩 모두와 호환가능할 수 있다. IPI의 소스 vCPU를 실행하는 프로세서의 게스트 인터럽트 제어 유닛(34A-34B)은 ICRL 레지스터에 대한 기록을 검출할 수 있고, APIC ID 표(60)의 gAPIC 상태 포인터를 식별하기 위해 IPI의 목표지 ID를 이용할 수 있다(화살표 a). IPI의 목표지 ID는 논리적일 수도 있고 물리적일 수도 있으며, 게스트 인터럽트 제어 유닛(34A-34B)은 목표지 ID에 대해 적절한 것으로 논리적 및/또는 물리적 APIC ID 표(60)를 이용할 수 있다.
gAPIC 상태 포인터를 이용할 때, 게스트 인터럽트 제어 유닛(34A-34B)은 gAPIC 상태 데이터 구조(58)의 표적 vCPU의 gAPIC 상태 엔트리를 업데이트할 수 있다(화살표 b). 게스트 인터럽트 제어 유닛(34A-34B)은 표적 vCPU를 실행하고 잇는 프로세서(30A-30B)의 게스트 인터럽트 제어 유닛(34A-34B)에 게스트 인터럽트 제어 메시지를 통신하도록 또한 구성될 수 있다(화살표 c). 특히, IPI 전달을 위한 게스트 인터럽트 제어 메시지는 일 실시예에서, APIC(32A-32B)를 통해 이동할 수 있다. 대안으로서, 와치 영역을 구현하는 실시예는 업데이트 검출을 위해 와치 영역 검출을 이용할 수 있다. 다른 실시예는 IPI 개시를 위해 다른 메커니즘을 구현할 수 있다. 게스트 인터럽트 제어 유닛(34A-34B)은 이러한 메커니즘을 검출할 수 있고, 따라서, 표적 vCPU에 대한 gAPIC 상태를 업데이트할 수 있다. 추가적으로, 표적 vCPU가 구동되지 않음을 APIC ID 표(60)가 표시할 경우, 소스 프로세서로부터 게스트 인터럽트 제어 유닛은 VMExit로 하여금 VMM(18)이 표적 vCPU를 스케쥴링하게 할 수 있다.
일 실시예에서, 인터럽트에 대한 게스트 인터럽트 제어 메시지를 정확한 프로세서(30A-30B)에 송신하기 위해, APIC ID 표(60)의 IR 비트는 어느 프로세서가 대응 vCPU를 실행하고 있는 지를 식별하는 필드일 수 있다(또는 vCPU가 구동 중인 지 여부를 표시하는 비트와 프로세서를 식별하는 필드가 존재할 수 있다). 필드는 게스트 인터럽트 제어 메시지에 대한 표적을 식별하는 데 사용될 수 있다.
도 4를 이제 참조하면, VMCB(22)의 일 실시예의 블록도가 도시된다. 도시되는 실시예에서, VMCB(22)는 gAPIC 상태 포인터 필드(70), 물리적 APIC ID 표 포인터 필드(72), 논리적 APIC ID 표 포인터 필드(74), 및 다른 가상 머신 데이터(76)를 포함한다. gAPIC 상태 포인터(70)는 메모리(56) 내 게스트/vCPU에 대응하는 gAPIC 상태 엔트리의 위치를 결정할 수 있다. gAPIC 상태 포인터(70)는 VMRUN 명령의 일부분으로 프로세서(30A-30B) 내로 로딩될 수 있고, vCPU에 대한 gAPIC 상태의 위치를 결정하도록 게스트 인터럽트 제어 유닛(34A-34B)에 의해 사용될 수 있다. 물리적 APIC ID 포인터 필드(72) 및 논리적 APIC ID 표 포인터 필드(74)는 게스트에 대한 물리적 APIC ID 표 포인터 및 논리적 APIC ID 표 포인터를 각각 저장할 수 있다. 나머지 VM 데이터(76)는 VMRUN 및 VMExit 상에 로딩/저장되는 다양한 다른 프로세서를 포함할 수 있다.
도 5를 이제 참조하면, gAPIC 상태 엔트리(90)의 일 실시예의 블록도가 도시된다. 도 5의 도해는 상태의 논리적 모습일 수 있다. 메모리 내 상태의 실제 배열은 다를 수 있다. 일 실시예에서, 상태의 배열은 상태가 APIC에 어드레싱되는 순서일 수 있다. 즉, 각각의 레지스터가 APIC의 베이스 어드레스로부터 오프셋을 가질 수 있고, 각각의 레지스터에 대한 gAPIC 상태 엔트리(90) 내 상태의 대응 사본들은 gAPIC 상태 엔트리(9)의 베이스 어드레스로부터 동일한 오프셋에 놓일 수 있다.
gAPIC상태 엔트리(90)는 APIC 상태의 완전한 사본을 포함할 수 있다. 모든 상태가 도 5에 도시되지는 않는다. 그러나, IRR, ISR(In-Service Register), TMR(Trigger Mode Register), 및 ICHR 및 ICRL 레지스터, TPR(Task Priority Register), 및 EOI(End of Interrupt) 레지스터가 다른 APIC 상태와 함께 도시된다. 나머지 APIC 상태는 (예를 들어, APIC 어드레스 맵 내 각각의 레지스터에 대한 오프셋에 따라) 도시되는 상태 내에서 인터리빙될 수 있다. 더욱이, 도 5에 도시되는 바와 같은 상태의 순서는 메모리에 저장된 상태의 순서가 아닐 수 있다.
IRR 레지스터는 gAPIC에 송신된 인터럽트 요청을 레코딩한다. IRR의 인터럽트 요청 위치는 인터럽트 벡터에 대응한다. IRR은 "고정" 인터럽트를 추적할 수 있다. 다른 인터럽트 타입은 NMI(Non-Maskable Interrupt), SMI(System Management Interrupt), extINT(Legacy External Interrupt), 등을 포함할 수 있다. 이러한 인터럽트는 다른 APIC 상태의 일부분으로 취급될 수 있다. 일 실시예에서, 인터럽트 메시지는 각각의 인터럽트(레벨 또는 에지)에 대해 트리거 모드를 또한 포함할 수 있다. TMR은 어느 트리거 모드가 인터럽트에 적용되는 지에 대한 표시를 저장할 수 있다. 예를 들어, 에지 트리거 인터럽트는 TMR에서 이진수 0으로 표시될 수 있고, 트리거 레벨은 이진수 1로 표시될 수 있다. 다른 실시예에서, 에지 트리거 인터럽트는 gAPIC에서 지원될 수 있고, TMR이 제거될 수 있다.
고정 인터럽트의 경우, 게스트 인터럽트 제어 유닛(34A)은 인터럽트 요청이 프로세서에 전달되어야 하는 지 여부를 결정하기 위해 인터럽트 요청 및 인-서비스 인터럽트를 우선순위화하도록 구성될 수 있다. 일반적으로, 최고 우선순위 인터럽트 요청이 최고 우선순위 인-서비스 인터럽트보다 우선순위가 높을 경우(인터럽트에 대응하는 인터럽트 핸들러를 실행하도록 소프트웨어 실행을 프로세서가 차단한 경우 인터럽트가 인-서비스인 경우), 게스트 인터럽트 제어 유닛(34A)은 요청받은 인터럽트를 전달하도록 구성될 수 있다. 추가적으로, TPR은 vCPU에 의해 수용되고 있는 인터럽트의 최소 우선순위 레벨을 구축하도록 소프트웨어에 의해 프로그래밍될 수 있다. 게스트 인터럽트 제어 유닛(34A)은, 최고 우선순위 인-서비스 인터럽트보다 우선순위가 높을 경우, 그리고, TPR에서 표시된 우선순위보다 우선순위가 높을 경우, 최고 우선순위 인터럽트 요청을 전달하도록 구성될 수 있다.
vCPU가 인터럽트를 취할 때, 프로세서는 gAPIC에 인터럽트 수신확인 명령으로 응답할 수 있다. 게스트 인터럽트 제어 유닛(34A)은, IRR(70)로부터 최고 우선순위 인터럽트 요청을 제거하고 ISR의 인-서비스로 인터럽트를 로그하도록 구성될 수 있다. ISR 내 인터럽트에 대응하는 인-서비스 표시의 위치는 인터럽트의 인터럽트 벡터에 대응할 수 있다. 프로세서(30A)는 인터럽트 서비스를 위해 인터럽트 서비스 루틴을 실행할 수 잇다. 인터럽트 서비스 루틴은 인터럽트 서비스가 완료됨을 신호하기 위해 gAPIC에 대한 인터럽트 종료(EOI) 명령과 함께 종료될 수 있다. 게스트 인터럽트 제어 유닛(34A)은 EOI 명령에 따라 ISR로부터 최고 우선순위 인-서비스 인터럽트를 제거하도록 구성될 수 있다. EOI 명령을 수행할 때, 마이크로코드는 ISR 비트 #N을 비울 수 있다(N은 최고 우선순위 인-서비스 인터럽트임). TMR의 비트 #N이 설정되면, 마이크로코드는 가상 머신 탈출(VMExit)하여 VMM(18)으로 하여금 레벨-민감 인터럽트 거동을 에뮬레이션하게 할 수 있다. 다른 실시예에서, ISR 업데이트는 VMM(18)에 의해 관리될 수 있다.
상술한 바와 같이, IPR, ISR, TMR 각각은 gAPIC에 의해 지원되는 각각의 인터럽트 벡터에 대응하는 위치를 포함한다. 도시되는 실시예에서, 0에서 255까지의 벡터가 지원된다. 인터럽트 벡터 번호는 다른 인터럽트와의 상대적 우선순위를 표시할 수도 있다(높은 벡터 번호는 낮은 벡터 번호보다 우선순위가 높거나, 다른 실시예의 경우 그 역이 성립한다). 각각의 인터럽트 벡터에 대해, IRR은 인터럽트 벡터에 인터럽트가 요청되었는지 여부를 표시하는 인터럽트 요청 비트를 저장한다. 예를 들어, 표시는 설정 상태일 때 요청을 표시하는 비트일 수 있고, 클리어 상태일 때 어떤 요청도 표시하지 않는 비트일 수 있다. 마찬가지로, 각각의 인터럽트 벡터에 대하여, ISR은 인터럽트가 해당 인터럽트 벡터에 대해 서비스 중인 지 여부를 표시하는(가령, 설정시 인-서비스 인터럽트를 표시하고 클리어 상태일 때 인-서비스 인터럽트를 표시하지 않는) 인-서비스 비트를 저장한다. 각각의 인터럽트 벡터에 대하여, TMR은 트리거 모드를 저장한다. IRR, ISR, TMR 각각에 대하여, 레지스터 내 비트 위치는 인터럽트에 대응하는 인터럽트 벡터 번호와 동일하다. 256개의 인터럽트 벡터가 본 실시예에서 지원되지만, 이보다 많거나 이보다 적은 인터럽트 벡터, 또는 우선순위 레벨 그룹들이 다른 실시예에서 지원될 수 있다. 나머지 APIC 상태는 내부적으로 발생된 인터럽트, 타이머, 로컬 벡터 표, 등을 포함할 수 있다.
일 실시예에서, gAPIC 상태 엔트리(90)의 IRR, ISR, 및/또는 TMR의 비트는 바이트당 8비트로 배열되지 않을 수 있다. 특정 IRR, ISR, 또는 TMR 비트에 대한 손쉬운 어드레싱을 촉진시키기 위해, 더 산포된 방식으로 비트가 저장될 수 있다(가령, 바이트당 2비트, 바이트당 1비트, 등).
도 6을 참조하면, 장치 표(62), 인터럽트 리매핑 표(64), 및 APIC ID 표(60A-60B)와 이러한 표를 이용한 gAPIC상태 엔트리의 배치에 대한 일 실시예의 블록도가 도시된다.
장치 인터럽트의 경우에, 인터럽트를 소싱하는 주변 장치의 버스/장치/기능(BDF)이 장치 표(62) 내의 인덱스로 사용될 수 있다. 장치 표(62)의 베이스 어드레스는 IOMMU(40)에 저장될 수 있고, 컴퓨터 시스템(5) 당 하나의 장치 표(62)가 존재할 수 있다(또는 복수의 IOMMU가 시스템에 포함될 경우, IOMMU(40) 당 장치 표(52) 하나). BDF에 따라 선택되는 장치 표 엔트리는 인터럽트 리매핑 표 포인터(IRTP)를 포함하며, 이는 인터럽트 리매핑 표(64)의 베이스 어드레스다. 일 실시예에서, 시스템(5) 내 게스트 당 하나의 인터럽트 리매핑 표(64)가 존재할 수 있다. 추가적으로, 장치 표 엔트리는 APIC ID 표 포인터(AIDTP: APIC ID Table Pointer)를 포함할 수 있고, 이는 물리적 APIC ID 표(60A)의 베이스 어드레스일 수 있다. 다른 실시예에서, 논리적 APIC ID가 장치 인터럽트에 대해 지원될 수 있고, 장치 표(62)에 2개의 ADITP 필드가 존재할 수 있다(논리적 APIC ID 표(60B)에 대해 하나, 물리적 APIC ID 표(60A)에 대해 하나씩). 일 실시예에서, 컴퓨터 시스템(500 내 게스트 당, 논리적 APIC ID 표(60B) 하나와, 물리적 APIC ID 표(60A) 하나가 존재할 수 있다.
인터럽트 리디렉트 표(64) 내의 인덱스는 인터럽트에 대한 인터럽트 식별자다. 인터럽트 식별자는 인터럽트 벡터를 포함할 수 있고, 물리적, 또는 논리적인, 전달 모드(Delmode)를 또한 포함할 수 있다. 선택된 엔트리는 새 벡터 및 목표지 ID(DestID)를 포함할 수 있다. 추가적으로, 선택된 엔트리는 상술한 게스트/호스트(G/H) 필드를 포함할 수 있다.
목표지 ID는 물리적 APIC ID 표(60A) 내의 인덱스일 수 있고, 선택된 엔트리는 gAPIC 상태 엔트리(90)에 대한 gAPIC 상태 포인터를 포함할 수 있다. 추가적으로, 선택된 엔트리는 vCPU에 대한 IR 표시를 포함할 수 있다.
IPI의 경우에, 표적 vCPU는 논리적 APIC ID 또는 물리적 APIC ID에 의해 식별될 수 있다. 물리적 APIC ID의 경우에, ID는 물리적 APIC ID 표(60A) 내의 인덱스로 사용될 수 있다(그 어드레스는 VMCB로부터 게스트 인터럽트 제어 유닛(34A-34B) 내의 인덱스로 사용될 수 있다). 따라서, gAPIC 상태 포인터 및 IR 필드는 물리적 IPI에 대해 액세스될 수 있다.
IPI가 논리적 APIC ID를 가질 경우, 논리적 APIC ID는 논리적 APIC ID 표(60B) 내의 인덱스로 사용될 수 있다. 논리 APIC ID의 최대 유효 부분은 클러스터를 식별할 수 있다. 따라서, 표는 클러스터로 나누어지며, 각각의 클러스터는 클러스터의 각각의 논리 멤버 당 하나 이상의 엔트리를 포함할 수 있다. 클러스터 내 멤버의 수는 모드에 따라 다를 수 있다(예를 들어, x1 APIC 플랫 모드는 클러스터 당 최대 8개의 멤버를 포함할 수 있고, x1 APIC 클러스터 모드는 클러스터 당 최대 4개의 멤버를 포함할 수 있으며, x2 APIC모드는 최대 16개의 클러스터 멤버를 포함할 수 있다). 논리적 APIC ID 표(60B)는 어떤 모드도 취급할 수 있는 크기를 가져서, 본 실시예에서 각각의 클러스터 분할이 16개의 멤버를 포함할 수 있게 된다.
도 6에 도시되는 바와 같이, 논리적 APIC ID 표(60B) 내 각각의 엔트리는 대응하는 클러스터 멤버를 대응하는 클러스터 멤버의 물리적 APIC ID에 매핑시킬 수 있다. 논리적 APIC ID 표(60B)로부터 출력되는 물리적 APIC ID는 물리적 APIC ID표(60A) 내의 인덱스로 사용될 수 있고, 이는 vCPU에 대한 IR 필드와 gAPIC 상태 포인터를 공급할 수 있다.
도 7을 참조하면, 주변 장치로부터 인터럽트 메시지를 수신함에 따라 장치 인터럽트 매니저(38)의 일 실시예의 작동을 설명하는 순서도가 도시된다. 블록들이 이해를 돕기 위해 특정 순서로 도시되지만, 다른 순서가 사용될 수도 있다. 장치 인터럽트 매니저(38)의 조합 로직에서 병렬로 블록들이 수행될 수 있다. 블록, 블록들의 조합, 및/또는 순서도가 복수의 클럭 사이클에 대해 파이프라인처리될 수 있다. 일반적으로, 장치 인터럽트 매니저(38)는 도 7에 제시되는 작동을 구현하도록 구성될 수 있다.
장치 인터럽트 매니저(38)는 주변 장치로부터 수신되는 인터럽트 정보 및 BDF에 따라 장치 표(62) 및 인터럽트 리매핑 표(64)에 액세스할 수 있다. 장치 인터럽트 매니저(38)는 인터럽트 리매핑 표(64)로부터 G/H 표시를 수신할 수 있고, 인터럽트가 호스트에 대한 것일 경우(결정 블록(100), "예"), 장치 인터럽트 매니저(38)는 목표지 ID 및 벡터를 갖는 인터럽트 메시지를 APIC(32A-32B)에 송신할 수 있다(가능하다면 리매핑될 수 있다)(블록(108)).
장치 인터럽트가 G/H 표시에 따른 게스트에 대한 인터럽트일 경우(결정 블록(100), "아니오"), 장치 인터럽트 매니저(38)는 게스트/vCPU에 대한 gAPIC 상태 엔트리에서 인터럽트를 레코딩할 수 있다. 장치 인터럽트에 대한 논리적 APIC ID를 지원하는 일부 실시예에서, 장치 인터럽트 매니저(38)는 논리적 APIC ID를 논리적 APIC ID 표(60B)를 통해 물리적 APIC ID로 변환할 수 있다(블록(102)).
장치 인터럽트 매니저(38)는 장치 인터럽트에 대한 물리적 APIC ID 및 장치 표(62)로부터 AIDTP를 이용하여, 물리적 APIC ID 표(60A)로부터 gAPIC 상태 엔트리 포인터를 결정하도록 구성될 수 있다(블록(110)). 장치 인터럽트 매니저(38)는 gAPIC 상태 엔트리(90)에 표현되는 IRR의 인터럽트 벡터에 대응하는 비트를 설정하도록 구성될 수 있다(블록(112)). 추가적으로, 장치 인터럽트 매니저(38)는 인터럽트에 의해 표적이 되는 vCPU가 구동되고 있는지 여부를 결정하기 위해 물리적 APIC ID 표(60A)로부터 IR 표시를 이용할 수 있다(결정 블록(104)). vCPU가 구동되고 있지 않을 경우(결정 블록(104), "아니오"), 장치 인터럽트 매니저(38)는 VMM(18)에 대한 로그 메시지를, 예를 들어, 이벤트 큐에, 레코딩할 수 있다(블록(106)). VMM(18)은 이어서, vCPU를 스케쥴링하기 위해 로그 메시지를 처리할 수 있다. 다른 실시예는 다른 방식으로 비-구동 vCPU에 대한 인터럽트의 수신을 통신할 수 있다. vCPU가 구동하고 있을 경우(결정 블록(104), "예"), vCPU를 구동하고 있는 게스트 인터럽트 제어 유닛(34a-34b)은 와치 영역 메커니즘을 이용하여 IRR 비트의 업데이트를 검출할 수 있다(블록(112)). 다른 실시예에서, 장치 인터럽트 매니저(38)는 게스트 인터럽트의 수신을 표시하기 위해 프로세서(30A-30B)에 게스트 인터럽트 제어 메시지를 송신할 수 있다(블록(116)).
물리적 인터럽트가 송출되거나 단일 목적지일 수 있다. 물리적 인터럽트가 송출될 경우(결정 블록(114), "예"), 장치 인터럽트 매니저(38)는 게스트의 가상 머신 내 각각의 목표지에 대해 블록(110, 112, 104, 106, 116)를 반복하도록 구성될 수 있다. 대안으로서, 송출되는 물리적 인터럽트들은, VMM(18)에 액세스가능한 데이터 구조에 인터럽트를 로그함으로써, 장치 인터럽트 매니저(38)에 의해 처리될 수 있다(가령, 이벤트 큐). 장치 인터럽트 매니저(38)는 이벤트를 VMM(18)에 알리기 위해 VMM(18)에 신호하도록(프로세서(30A-30B)들 중 하나 상의 가상 머신으로부터 탈출을 야기함) 또한 구성될 수 있다. 대안으로서, 장치 인터럽트 매니저(38)는 주기적으로만 VMM에 신호할 수 있고, VMM(18)은 시그널링이 지원할 수 있는 것보다 훨씬 빠르게 임의의 이벤트에 서비스하고 주기적으로 이벤트 큐를 점검할 수 있다. 일 실시예에서, 이벤트 큐는 장치 인터럽트 매니저(38) 대신에 IOMMU(40)에 의해 관리될 수 있다. 멀티캐스트 논리적 인터럽트에 대해 유사한 메커니즘이 구현될 수 있어서, 인터럽트의 논리적 APIC ID의 벡터 부분 내 용이한 종착을 위해 블록(102, 110, 112, 104, 106, 116)을 반복할 수 있다.
도 8-11은 컴퓨터 시스템(5) 내 다양한 명령 및/또는 다른 이벤트에 따라 프로세서(30A-30B)(및 특히, 게스트 인터럽트 제어 유닛(34A-34B))의 일 실시예의 작동을 나타내는 순서도다. 게스트 인터럽트 제어 유닛(34A-34B)은 각각의 순서도에 도시되는 작동을 구현하도록 구성될 수 있다. 앞서 언급한 바와 같이, 게스트 인터럽트 제어 유닛(34A-34B)의 전부 또는 일부가 마이크로코드로 구현될 수 있다. 이러한 실시예에서, 게스트 인터럽트 제어 유닛(34A-34B)은 프로세서에서의 실행을 위해 마이크로코드를 디스패치함으로써 작동을 구현하도록 구성될 수 있다. 블록들이 이해를 돕기 위해 특정 순서로 순서도에 도시되지만, 다른 순서가 사용될 수도 있다. 블록들은 게스트 인터럽트 제어 유닛(34A-34B)의 조합 로직에서 병렬로 수행될 수 있다. 블록, 블록들의 조합, 및/또는 순서도는 전체적으로, 복수의 클럭 사이클에 대해 파이프라인 처리될 수 있다.
도 8은 일 실시예의 경우, VMRUN 명령을 프로세서가 실행함에 따라, 프로세서(30A-30B) 내 게스트 인터럽트 제어 유닛(34A-34B)의 작동을 설명한다. 게스트 인터럽트 제어 유닛은 프로세서 내 APIC 액세스에 대해 트랩/폴트(trap/fault) 작동을 인에이블링할 수 있다(블록(120)). 프로세서 하드웨어는 본 실시예에서 vCPU에 대한 gAPIC 상태 엔트리(90)에 대한 APIC 액세스를 메모리 액세스로 변환하도록 구성될 수 있고, 또는 APIC 액세스가 마이크로코드로 구현될 수 있다. gAPIC 액세스 중 상당수가 필요할 경우, VMM으로 하여금 임의의 부작용을 에뮬레이션하도록 하기 위해 중단시 트래핑될 수 있다. 그러나, 일부 작동은 gAPIC 상태로 회복불가능한 변화를 수행할 수 있고, 이러한 액세스는 폴트처리되어 VMM에서 수행될 수 있다. 일 실시예에서, 게스트 인터럽트 상태는 재평가될 수 있다(가령, vCPU가 구동되지 않은 시간 동안 인터럽트의 전달을 검출하기 위함). 도 10의 작동은 예를 들어, VMRUN 명령의 일부분으로 구현될 수 있다.
와치 영역 작동이 구현될 경우, 게스트 인터럽트 제어 유닛은 gAPIC 상태 엔트리(90) 내 IRR비트에 대해 와치 영역을 인에이블링할 수 있다(블록(122)). 예를 들어, 게스트 인터럽트 제어 유닛은 VMCB(22)로부터 gAPIC 상태 엔트리 포인터를 이용하여, IRR 비트를 캐시 내로 커버하는 gAPIC 상태 엔트리(90) 내 하나 이상의 캐시 블록을 판독할 수 있고, 캐시 블록에 대한 업데이트의 모니터링을 시작할 수 있다. 다른 실시예들은 게스트 인터럽트가 vCPU에 대해 수신되었음을 신호하도록 게스트 인터럽트 제어 메시지를 구현할 수 있고, 와치 영역이 구현되지 않을 수 있다.
프로세서는 VMRUN 명령에 따라 수행되는 다양한 다른 처리를 수행할 수 있다(블록(124)). 예를 들어, VMCB(22)로부터 로딩되는 다양한 프로세서 상태가 로딩될 수 있고, 프로세서 상태가 VMM 상태 저장 영역에 저장될 수 있는, 등등이다. 블록(124)의 작동은 일부 실시예에서, 블록(120) 및 블록(122) 전에, 후에, 및/또는 이들과 인터리빙되어 발생될 수 있다.
도 9는 일 실시예에서, 게스트로부터 가상 머신 탈출(VMExit)에 따른 작동을 제시한다. 게스트 인터럽트 제어 유닛은 APIC 액세스에 대한 트랩/폴트 거동을 디스에이블링(disabling)시킬 수 있다(블록(126)). 추가적으로, 와치 영역 작동을 이용하여 vCPU에 대한 인터럽트 수신을 검출할 경우, 와치 영역이 디스에이블링되고(블록(128)), 프로세서는 다른 VMExit 처리를 계속할 수 있다(가령, VMCB(22)에 상태를 저장, VMM(18) 상태 복원, 등)(블록(130)). 블록(130)의 작동은 일부 실시예에서, 블록(126, 128) 이전에, 이후에, 및/또는 블록(126, 128)과 인터리빙되어 이루어질 수 있다.
이제 도 10을 참조하면, 프로세서 상에서 실행되는 vCPU에 대한 게스트 인터럽트를 프로세서가 검출함에 따라 게스트 인터럽트 제어 유닛의 일 실시예의 작동을 제시하는 순서도가 도시된다. 게스트 인터럽트는 다양한 방식으로, 와치 영역에서 업데이트를 검출하고, 게스트 인터럽트 제어 메시지를 수신하는, 등의 방식으로, 검출될 수 있다.
게스트 인터럽트 제어 유닛은 vCPU에 대한 gAPIC 상태 엔트리(90)로부터 IRR 및 ISR 데이터 콘텐츠를 판독할 수 있다(블록(132)). 게스트 TPR이 프로세서에서 구현되지 않을 경우, TPR이 마찬가지로 판독될 수 있다. 게스트 인터럽트 제어 유닛은 서비스 중이지 않은 IRR에 레코딩된 최고 우선순위 인터럽트를, vCPU의 현재-전달되는 인터럽트에 그리고, 현 TPR에 비교할 수 있다(블록(134)). 최고 우선순위 인터럽트가 TPR 및 최고 우선순위 인-서비스 인터럽트에 비해 우선순위가 높을 경우(결정 블록(136), "예"), 게스트 인터럽트 제어 유닛은 vCPU에 대해 새로운 높은 우선순위 인터럽트를 전달할 수 있다(블록(138)). 게스트 내로 인터럽트를 공급하기 위한 메커니즘은 다양한 실시예에서 변할 수 있다. 앞서 언급한 바와 같이, 프로세서는 실행 중 게스트를 인터럽트하기 위해 게스트 인터럽트를 대기(queuing)시키기 위한 하드웨어를 포함할 수 있다. 게스트 인터럽트 제어 유닛은 이러한 실시예에서 더 높은 우선순위의 인터럽트에 대한 정보를 하드웨어에 로딩시킬 수 있다.
마이크로코드로 도 10의 작동을 구현하는 게스트 인터럽트 제어 유닛의 실시예의 경우에, 게스트 인터럽트의 검출은 마이크로코드로 트랩을 야기할 수 있다. 이 경우에 트랩은, 트래핑되는 명령에 직접 관련되지 않을 수 있다. 그러나, 트랩은 마이크로코드로 하여금 인터럽트를 실행 및 취할 수 있게 한다. 마이크로코드는 트래핑에 따라 도 10에 제시되는 작동을 구현하도록 실행될 수 있다.
도 11은 게스트 인터럽트 제어 유닛을 포함하는 프로세서 상에서 vCPU의 명령 실행을 위한 게스트 인터럽트 제어 유닛의 일 실시예의 작동을 설명하는 순서도다. 명령이 APIC 액세스가 아닐 경우(결정 블록(140), "아니오"), 또는 APIC 액세스이지만(결정 블록(140), "예") 프로세서가 게스트를 실행하고 있지 않은 경우(즉, 프로세서가 호스트를 실행하고 있을 경우 - 결정 블록(142), "아니오"), 게스트 인터럽트 제어 유닛은 어떤 액션도 취하지 않을 수 있고 명령은 정상적으로 실행될 수 있다(블록(144)). 이 범주에서, 정상적인 실행은 게스트 인터럽트 제어 유닛으로부터 간섭없이 실행됨을 의미할 수 있다. 명령은 게스트에서 인터셉트 구조를 통해 여전히 인터셉트될 수 있고, 예외를 경험할 수 있는, 등등이다.
명령이 APIC 액세스이고(결정 블록(140), "예") 게스트 실행 중에 있을 경우(결정 블록(142), "예"), 게스트 인터럽트 제어 유닛은 액세스가 가속 액세스인 지를 결정할 수 있다(결정 블록(146)). 가속 액세스는 액세스에 의해 야기될 수 있는 임의의 부작용을 포함한, 게스트 인터럽트 제어 유닛에 의해 구현되는 액세스일 수 있다. 일 실시예에서, 액세스는, 임의의 부작용을 포함하여, 마이크로코드로 구현될 수 있다. 액세스가 가속 액세스가 아닐 경우, 게스트 인터럽트 제어 유닛은 명령이 트래핑될 경우(폴트가 아닐 경우) gAPIC 상태 엔트리에 대한 액세스를 수행할 수 있다(블록(148)). 앞서 언급한 바와 같이, 대부분의 명령이 트래핑될 수 있다. 폴트인 명령은 중단될 경우 회복불가능한 상태 변화를 야기하는 명령일 수 있다. 예를 들어, IRR, ISR, 및 선택적으로 TMR에 대한 기록은 인터럽트 상태가 이러한 명령에 의해 덮어써질 수 있기 때문에 폴트될 수 있다. 추가적으로, 일 실시예에서, 현 카운트 레지스터에 대한 액세스가 에뮬레이션에 대해 폴트될 수 있고, 이는 현 카운트 레지스터가 집적 회로(66)에 공급되는 클럭에 따라 작동하는 자유 구동 카운터이기 때문이다. 가상화의 오버헤드는 에뮬레이션되지 않을 경우 카운터에서 검출될 수 있다. 다른 액세스가 트래핑될 수 있다. 다른 실시예는 트래핑되는 그리고 폴트되는 명령의 서로 다른 윤곽을 만들 수 있다.
VMM(18)이 하나 이상의 부작용을 에뮬레이션할 경우(결정 블록(150), "예"), 게스트 인터럽트 제어 유닛은 VMM(18)으로 가상 머신 탈출(VMExit)할 수 잇다(블록(152)). 일부 액세스는 부작용을 전혀 갖지 않는다(가령, 대부분의 판독 작동). 기록 작동 및 일부 판독 작동은 부작용을 가질 수 있고(예를 들어, 기록에 따라 예상되는 APIC의 작동), 이러한 부작용들이 VMM(18)에서 에뮬레이션될 수 있다. 이러한 범주에서, 부작용은 상태의 업데이트(기록의 경우), 또는 표적 레지스터(판독의 경우)와는 다른 작동일 수 있다. VMM(18)에 의해 에뮬레이션되는 부작용이 전혀 없을 경우(결정 블록(150), "아니오"), 명령에 대한 작동이 완료될 수 있다.
액세스가 가속 액세스일 경우(결정 블록(146), "예"), 게스트 인터럽트 제어 유닛은 명령에 의해 액세스되는 레지스터에 대응하는 gAPIC 상태 엔트리 내 위치를 판독 또는 기록할 수 있다(블록(154)). 가속되는 액세스 세트는 실시예마다 다를 수 있다. 일반적으로, 자주 발생하는 및/또는 중요한 성능일 수 있는 액세스가 가속 후보일 수 있다. 일 실시예에서, ICRL(IPI를 야기할 수 있음), TPR, 및 EOI 레지스터에 대한 액세스가 가속될 수 있다. 액세스가 TPR 또는 EOI에 대한 액세스이거나 액세스가 ICRL에 대한 액세스인데 IPI를 야기하지 않을 경우(결정 블록(156), "아니오"), 게스트 인터럽트 제어 유닛은 다른 부작용(있다면)을 구현할 수 있고 명령이 완료될 수 있다(블록(158)). 명령이 IPI를 야기할 경우(결정 블록(156), "예"), 게스트 인터럽트 제어 유닛은 APIC ID 표(60)를 이용하여, IPI의 목표지 ID를 표적 vCPU에 대한 gAPIC 상태 포인터로 변환할 수 있다(블록(160)). 논리적 APIC ID 표(60B) 및 물리적 APIC ID 표(60A)의 베이스 어드레스는 VMCB(22)로부터 얻을 수 있고, 프로세서 상에서 실행되고 있는 vCPU가 호출되었을 때 프로세서 내로 로딩되었을 수 있다. 게스트 인터럽트 제어 유닛은 IPI를 레코딩하기 위해 gAPIC 상태에서 IRR을 기록할 수 있다(블록(162)). 게스트 인터럽트 제어 메시지를 이용하여 인터럽트가 레코딩되었고 표적 vCPU가 구동 중임을 통신할 경우, 게스트 인터럽트 제어 유닛은 표적 프로세서에 게스트 인터럽트 제어 메시지를 송신할 수 있다(블록(164)). 표적 vCPU가 구동 중이 아닐 경우(결정 블록(166), "아니오"), 프로세서는 가상 머신 탈출(VMExit)하여, VMM(18)으로 하여금 표적 vCPU를 스케쥴링할 수 있게 한다(블록(168)).
도 7과 관련한 송출 물리적 인터럽트에 대한 앞서의 설명과 유사하게, IPI가 송출되거나(물리적) 또는 복수의 표적을 가질 경우(논리적), 게스트 인터럽트 제어 유닛은 복수의 gAPIC 상태 엔트리를 업데이트함으로써 복수의 표적을 지원할 수 있고, 또는, 복수-표적 IPI에 대한 VMM(18)으로 탈출할 수 있다.
도 16은 프로세서(30A) 내 게스트 인터럽트 제어 유닛(38A)에 게스트 인터럽트 제어 메시지(및 게스트 IPI)를 전달하는 데 사용될 수 있는 MSR 인터페이스의 일 실시예를 제시하는 블록도다. 게스트 인터럽트 제어 유닛(38A) 및 MSR 유닛(212)(둘 모두 프로세서(30A)의 일부분일 수 있음), 특권 코드(210), 및 APIC(32A)가 도 16에 도시된다. 게스트 인터럽트 제어 유닛(38A)은 MSR 유닛(212)에 연결되고, MSR 유닛은 MSR(214)을 포함한다. MSR(214)은 게스트 인터럽트 유효(GIV: Guest Interrupt Valid) 비트를 저장할 수 있다. 다른 인터럽트-관련 데이터가 MSR(214)에 마찬가지로 저장될 수 있다. MSR 유닛(212)은 APIC(32A)에 연결된다.
따라서, APIC(32A)는 M게스트 인터럽트 제어 메시지를 수신할 수 있고, MSR(214)에 대한 업데이트를 송신하도록 구성될 수 있다. 업데이트는 GIV 비트를 설정할 수 있다. 설정된 GIV 비트에 따라, 게스트 인터럽트 제어 유닛(38A)은 수신한 게스트 인터럽트를 처리할 수 있다(가령, 도 10에 도시됨). GIV 비트의 설정은 게스트 인터럽트 제어 유닛(38A) 내의 회로로 하여금, 게스트 인터럽트의 처리를 개시할 수 있게 한다. 대안으로서, GIV 비트의 설정은 게스트 인터럽트 제어 유닛(38A)으로부터 마이크로코드의 발급이 게스트 인터럽트의 처리를 개시하게 한다.
상술한 바와 같이, 특권 코드(210)는 MSR 유닛(212)(MSR(214) 포함)에 액세스할 수 있다. 특권 코드(210)는 프로세서(30A)(가령, 호스트 OS, 등) 상에서 실행될 수 있는 VMM(18) 및 그외 다른 특권 코드를 포함할 수 있다. 그러나, 비-특권 코드 및 게스트 코드는 MSR(214)에 액세스하지 못할 수 있다.
도 12-14는 앞서 설명한 하드웨어를 이용하여 게스트 인터럽트 가상화를 지원하기 위해 VMM(18)의 일 실시예의 하이 레벨 동작을 설명하는 순서도다. VMM에 의해 구현되는 많은 다른 동작들이 이러한 순서도에 도시되지 않으며, 다양한 다른 작동들의 일부분이 도시되는 작동들과 인터리빙될 수 있으며, 및/또는 제시되는 작동 전에 및/또는 후에 수행될 수 있다. 블록들이 이해를 돕기 위해 특정 순서로 순서도에 도시되어 있으나, 다른 순서도 사용될 수 있다. VMM(18)은 실행될 때, 순서도에 도시되는 작동을 구현하는 명령을 포함할 수 있다.
도 12는 컴퓨터 시스템(5) 상에서 실행을 위한 게스트의 초기화 중 VMM(18)의 작동의 일 실시예를 제시하는 순서도다. 즉, 초기화는 컴퓨터 시스템(5) 상에서 게스트를 실행하기 전에, 게스트에 대한 가상 머신을 설명하는 데이터 구조를 생성하는 단계를 포함할 수 있다. VMM(18)은 게스트의 각각의 vCPU에 대해 gAPIC 상태를 구축할 수 있다(블록(170)). gAPIC 상태 구축은, 예를 들어, 해당 상태에 대해 페이지 할당 및 해당 상태에 대한 초기값 삽입을 포함할 수 있다. 초기값들은, 예를 들어, APIC의 리셋 상태에 대응할 수 있다.
VMM(18)은 게스트에 대한 APIC ID 표(60)를 구축하여, 각각의 vCPU의 APIC ID에 기초하여 게스트에 대해 할당된 페이지로 gAPIC 상태 엔트리 포인터를 매핑시킬 수 있다(블록(172)). VMM(18)은 구동 중이 아님을 표시하기 위해 IR 표시를 또한 초기화할 수 있다. 게스트에게 할당될 수 있는 임의의 주변 장치의 경우에, VMM(18)은 장치 표(62)를 인터럽트 리매핑 표(64) 및 물리적 APIC ID 표(60B)에 대한 포인터와 함께 프로그래밍할 수 있다. VMM(18)은 게스트에 대한 인터럽트 리매핑 표(64)를 프로그래밍할 수 있고, G/H 비트를 설정하여 게스트를 표시할 수 있다(블록(174)).
도 13은 초기화 완료 후 인터럽트 가상화를 위해 게스트를 지원하는 VMM(18)의 작동의 일 실시예를 제시하는 순서도다. VMM(18)이 실행을 위한 게스트를 스케쥴링하거나, 게스트의 vCPU를 디스케쥴링(descheduling)할 경우(결정 블록(176), "예"), VMM(18)은 구동 중임을(게스트 스케쥴링을) 또는 구동 중이 아님을(게스트 디스케쥴링을) 표시하기 위해 상기 vCPU에 대응하는 물리적 APIC ID 표(60A)의 엔트리의 IR필드를 업데이트할 수 있다(블록(178)). APIC 액세스에 대한 VMExit가 검출될 경우(결정 블록(180), "예"), VMM(18)은 gAPIC 상태에 기초하여 APIC 액세스를 에뮬레이션할 수 있다(블록(182)). VMM(18)은 구동 중이 아닌 vCPU를 표적으로 하는 인터럽트가 수신되었음을 표시하는 로그 엔트리를 IOMMU(40)로부터 검출할 경우(결정 블록(184), "예"), VMM(18)은 인터럽트 취급을 위해 스케쥴링에 대한 표적 vCPU를 우선순위화할 수 있다.
도 14는 시스템으로부터 게스트를 삭제하기 위해 VMM(18)의 일 실시예의 작동을 설명하는 순서도다. VMM(18)은 임의의 주변 장치의 게스트 할당을 제거하기 위해 장치 표(62) 및 인터럽트 리매핑 표(64)를 업데이트할 수 있다(블록(188)). VMM(18)은 게스트의 gAPIC 상태 엔트리(90) 및 APIC ID 표(60)를 또한 삭제할 수 있다(블록(190)).
도 15를 다시 참조하면, 컴퓨터 판독가능한 기록 매체(200)의 블록도가 도시된다. 일반적으로 말하자면, 컴퓨터 판독가능한 기록 매체는 컴퓨터에 명령 및/또는 데이터를 제공하기 위해 사용 중 컴퓨터에 의해 액세스가능한 임의의 기록 매체를 포함할 수 있다. 예를 들어, 컴퓨터 판독가능한 기록 매체는 자기 또는 광학 매체, 예를 들어, 디스크(고정 또는 탈착형), 테이프, CD-ROM, 또는 DVD-ROM, CD-R, CD-RW, DVD-R, DVD-RW, HDDVD, 및/또는 블루-레이 디스크와 같은 기록 매체를 포함할 수 있다. 기록 매체는 RAM(가령, 동기식 DRAM, 즉, SDRAM, 램버스 DRAM, 즉, RDRAM, SRAM, 등), ROM, 플래시 메모리, 또는, 범용 시리얼 버스(USB) 인터페이스 또는 그외 다른 인터페이스, 등과 같은 주변 인터페이스를 통해 액세스가능한 비휘발성 메모리(가령, 플래시 메모리)와 같은 휘발성 또는 비휘발성 메모리 매체를 더 포함할 수 있다. 기록 매체는 네트워크 및/또는 무선 링크와 같은 통신 매체를 통해 액세스가능한 기록 매체와, 마이크로일렉트로미캐니컬 시스템스(MEMS)를 포함할 수 있다. 도 15의 컴퓨터 판독가능한 기록 매체(200)는 VMM(18)을 저장할 수 있고, VMM(18)은 도 12-14의 순서도에 도시된 작동의 전부 또는 일부분을 구현할 수 있고, 본 설명에서 VMM(18)에 할당된 그외 다른 기능을 구현할 수 있다. 컴퓨터 판독가능한 기록 매체(200)는 마이크로코드로 구현되는 게스트 인터럽트 제어 유닛(34A)의 부분을 위해 도 8-13의 순서도에서 제시되는 작동의 전부 또는 일부분과, 및/또는, 본 설명에서 마이크로코드로 할당된 그외 다른 기능을 구현할 수 있는, 마이크로코드(202) 또는 그외 다른 명령 및/또는 데이터(Verilog 또는 그외 다른 하드웨어 설명 언어)를 저장할 수 있다. 일반적으로, 컴퓨터 판독가능한 기록 매체(200)는 실행될 때, 도 8-13에 도시되는 순서도의 전부 또는 일부분을 구현하는 임의의 세트의 명령을 저장할 수 있다. 일부 실시예에서, 프로세서(30A)(그리고 특히 게스트 인터럽트 제어 유닛(34A))에 대해 여기서 설명되는 작동의 전부 또는 일부분이 하드웨어적으로 구현될 수 있고, 마찬가지로, IOMMU(40)(그리고 특히 장치 인터럽트 매니저(38))가 하드웨어적으로 구현될 수 있다. 컴퓨터 판독가능한 기록 매체(200)는 이러한 하드웨어의 요망 표현을 저장할 수 있다. 예를 들어, 이 표현은 Verilog 또는 VHDL과 같은 하이 레벨 설계 언어(HDL)로 된 하드웨어 기능의 거동-레벨 설명 또는 레지스터-전달 레벨(RTL) 설명일 수 있다. 설명은 합성 라이브러리로부터 게이트들의 리스트를 포함하는 네트리스트를 생성하기 위해 설명을 합성하는 합성 툴에 의해 판독될 수 있다. 네트리스트는 시스템(10)을 포함하는 하드웨어의 기능을 또한 나타내는 한 세트의 게이트를 포함한다. 그 후 네트리스트가 배치되고 전달되어, 마스크에 도포될 기하학적 형상을 설명하는 데이터 세트를 생성하게 된다. 그 후 마스크는 다양한 반도체 제조 단계에서 사용되어, 시스템(10)에 대응하는 반도체 회로를 생성할 수 있다. 대안으로서, 컴퓨터 액세스가능한 기록 매체(300) 상에서의 표현은 요망되는 바에 따라, 네트리스트(합성 리스트가 있거나 없음), 또는 데이터 세트일 수 있다. 프로세서(30A), 게스트 인터럽트 제어 유닛(34A), IOMMU(40), 및/또는 장치 인터럽트 매니저(38)에 대해 여기서 설명한 작동의 전부 또는 일부와, 및/또는 도 8-13의 순서도에 설명된 작동의 전부 또는 일부를 구현하는 집적 회로를 생성하도록 제작 설비가 적응되도록, 예를 들어, 마스크 작업의 발생을 통해 회로 제조 설비를 구성하기 위한 명령이 사용될 수 있다. 반송 매체는 무선 또는 유선 전송과 같은 전송 매체뿐 아니라, 컴퓨터 액세스가능한 기록 매체를 포함할 수 있다.
위 개시 내용을 충분히 이해하면 당 업자에게 수많은 변형예 및 수정예가 명백해질 것이다. 다음의 청구범위는 이러한 모든 변형예 및 수정예를 포괄하는 것으로 간주된다.

Claims (20)

  1. 게스트에 할당된 장치로부터 인터럽트를 수신하도록 구성된 장치 인터럽트 매니저에 있어서, 상기 장치 인터럽트 매니저는 메모리 위치에서 인터럽트의 레코딩을 위한 작동을 송신하도록 구성되고, 상기 메모리 위치는 상기 게스트 내의 가상 프로세서와 연계되며, 상기 가상 프로세서는 인터럽트의 표적이 되는,
    장치 인터럽트 매니저.
  2. 제 1 항에 있어서,
    상기 장치 인터럽트 매니저는 하나 이상의 표에 따라 상기 가상 프로세서에 대응하는 메모리 위치를 식별하도록 또한 구성되며, 상기 인터럽트와 관련된 인터럽트 컨트롤러 식별자에 따라 하나 이상의 표의 엔트리가 선택되는,
    장치 인터럽트 매니저.
  3. 제 2 항에 있어서,
    상기 인터럽트 컨트롤러 식별자가 물리적 인터럽트 컨트롤러 식별자인,
    장치 인터럽트 매니저.
  4. 제 2 항에 있어서,
    상기 장치 인터럽트 매니저는, 상기 하나 이상의 표의 엔트리를 식별하는 데 사용되는 인터럽트 컨트롤러 식별자에 대해 상기 장치에 의해 송신되는 인터럽트 벡터를 리매핑하도록 또한 구성되는,
    장치 인터럽트 매니저.
  5. 제 2 항에 있어서,
    상기 장치 인터럽트 매니저는, 엔트리 내 표시에 따라 하드웨어 프로세서 상에서 상기 가상 프로세서가 활성인 지 여부를 결정하도록 또한 구성되고, 상기 장치 인터럽트 매니저는 상기 가상 프로세서가 상기 하드웨어 프로세서 상에서 활성임을 검출함에 따라, 상기 하드웨어 프로세서로 지향되는 인터럽트 메시지를 송신하도록 구성되는,
    장치 인터럽트 매니저.
  6. 제 5 항에 있어서,
    상기 장치 인터럽트 매니저는, 상기 하드웨어 프로세서 상에서 상기 가상 프로세서가 구동되지 않고 있음을 검출함에 따라, 상기 가상 프로세서를 스케쥴링(scheduling)하기 위한 요청을 레코딩하도록 시스템 메모리에 기록 작동을 송신하도록 구성되는,
    장치 인터럽트 매니저.
  7. 장치 인터럽트 매니저가 메모리 위치에서 인터럽트를 레코딩하는 단계를 포함하며, 상기 메모리 위치는 장치가 할당된 게스트에 연계된 가상 프로세서와 연계되며, 상기 가상 프로세서는 인터럽트의 표적이 되는,
    방법.
  8. 제 7 항에 있어서,
    상기 장치 인터럽트 매니저가 인터럽트 컨트롤러 식별자를 가상 프로세서에 매핑하도록 프로그래밍되는 하나 이상의 표 내의 엔트리를 선택하는 단계, 상기 장치 인터럽트 매니저가 상기 엔트리를 선택하는 것은 상기 인터럽트에 연계된 인터럽트 컨트롤러 식별자에 응답하여 이루어지며,
    상기 장치 인터럽트 매니저가 상기 엔트리에 저장된 어드레스를 통해 상기 메모리 위치를 식별하는 단계,
    를 더 포함하는 방법.
  9. 제 8 항에 있어서,
    상기 인터럽트 컨트롤러 식별자는 물리적 인터럽트 컨트롤러 식별자인
    방법.
  10. 제 8 항에 있어서,
    상기 장치 인터럽트 매니저가 상기 엔트리의 식별에 사용되는 인터럽트 컨트롤러 식별자에 대해 상기 장치에 의해 전송되는 인터럽트 벡터를 리매핑하는 단계를 더 포함하는,
    방법.
  11. 제 8 항에 있어서,
    상기 엔트리에 저장된 데이터에 따라 하드웨어 프로세서 상에서 상기 가상 프로세서가 활성임을 상기 장치 인터럽트 매니저가 결정하는 단계와,
    상기 가상 프로세서가 상기 하드웨어 프로세서 상에서 활성임을 검출함에 따라 상기 하드웨어 프로세서에게로 지향되는 인터럽트 메시지를 상기 장치 인터럽트 매니저가 송신하는 단계,
    를 더 포함하는 방법.
  12. 제 8 항에 있어서,
    상기 엔트리에 저장된 데이터에 따라 하드웨어 프로세서 상에서 상기 가상 프로세서가 활성이 아님을 상기 장치 인터럽트 매니저가 결정하는 단계와,
    상기 가상 프로세서가 상기 하드웨어 프로세서 상에서 활성이 아님을 검출함에 따라 상기 가상 프로세서를 스케쥴링하기 위한 요청을 레코딩하기 위해 시스템 메모리에 대한 쓰기 작동을 상기 장치 인터럽트 매니저가 송신하는 단계,
    를 더 포함하는 방법.
  13. 컴퓨터 시스템 상에서 실행가능한 프로그램에 의해 작동되는 데이터 구조를 포함하는 컴퓨터 판독가능한 기록 매체에 있어서, 상기 프로그램은 상기 데이터 구조에 의해 설명되는 회로를 포함하는 집적 회로를 제조하기 위한 프로세스의 일부분을 수행하도록 상기 데이터 구조 상에서 작동하며, 상기 데이터 구조로 설명되는 회로는 게스트에게 할당된 장치로부터 인터럽트를 수신하도록 구성되는 장치 인터럽트 매니저를 포함하며, 상기 장치 인터럽트 매니저는 메모리 위치에서 상기 인터럽트의 레코딩을 위한 작동을 송신하도록 구성되고, 상기 메모리 위치는 상기 게스트 내의 가상 프로세서와 연계되며, 상기 가상 프로세서는 상기 인터럽트의 표적이 되는,
    컴퓨터 판독가능한 기록 매체.
  14. 제 13 항에 있어서, 상기 장치 인터럽트 매니저는 하나 이상의 표에 따라 상기 가상 프로세서에 대응하는 상기 메모리 위치를 식별하도록 또한 구성되고, 상기 하나 이상의 표의 엔트리는 상기 인터럽트에 연계된 인터럽트 컨트롤러 식별자에 따라 선택되는,
    컴퓨터 판독가능한 기록 매체.
  15. 제 13 항에 있어서,
    상기 장치 인터럽트 매니저는 실행을 위해 하드웨어 프로세서에 상기 가상 프로세서가 할당되어 있는지 여부를 결정하도록 또한 구성되고,
    상기 장치 인터럽트 매니저는, 상기 가상 프로세서가 상기 하드웨어 프로세서에 할당되었음을 검출함에 따라, 상기 하드웨어 프로세서로 지향되는 인터럽트 메시지를 송신하도록 구성되는,
    컴퓨터 판독가능한 기록 매체.
  16. 컴퓨터 상에서 실행될 때,
    가상 머신에 할당된 장치에 의해 소싱되는 인터럽트가, 상기 가상 머신 내 가상 프로세서에 대응하는 메모리 위치에서 레코딩되었음을 검출하는 단계와,
    상기 인터럽트를 서비스하기 위해, 상기 인터럽트가 상기 가상 프로세서에 대해 레코딩됨에 따라, 상기 컴퓨터 내 하드웨어 프로세서 상에서의 실행을 위해 상기 가상 프로세서를 스케쥴링하는 단계,
    를 수행하는 복수의 명령을 저장하는 컴퓨터 판독가능한 기록 매체.
  17. 제 16 항에 있어서,
    실행될 때, 상기 인터럽트가 레코딩되었음을 검출하는 상기 명령은, 실행될 때, 컴퓨터에서 검출된 이벤트들의 로그를 저장하는 다른 메모리 위치를 판독하는 명령을 포함하고, 상기 이벤트들의 로그는 상기 컴퓨터 시스템의 장치 인터럽트 매니저에 의해 업데이트되며, 장치 인터럽트 매니저는 상기 인터럽트를 수신하여 상기 인터럽트가 상기 가상 프로세서에서 표적이 됨을 결정하도록 구성되는
    컴퓨터 판독가능한 기록 매체.
  18. 제 17 항에 있어서,
    실행될 때, 상기 가상 프로세서를 스케쥴링하는 명령은, 실행될 때, 상기 가상 프로세서가 활성임을 표시하기 위해 인터럽트를 가상 프로세서들에 매핑시키는 하나 이상의 표를 업데이트하는 명령을 포함하는,
    컴퓨터 판독가능한 기록 매체.
  19. 제 18 항에 있어서,
    실행될 때, 상기 가상 프로세서를 디스케쥴링(descheduling)하고, 상기 가상 프로세서가 활성이 아님을 표시하기 위해 상기 하나 이상의 표를 업데이트하는, 명령을 저장하는,
    컴퓨터 판독가능한 기록 매체.
  20. 제 19 항에 있어서,
    실행될 때, 상기 장치가 게스트들에 할당됨에 따라 상기 하나 이상의 표의 데이터를 관리하는 명령을 저장하는,
    컴퓨터 판독가능한 기록 매체.
KR1020127023264A 2010-02-05 2011-02-07 인터럽트 가상화 KR20130035996A (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US30193710P 2010-02-05 2010-02-05
US61/301,937 2010-02-05
US12/961,186 2010-12-06
US12/961,186 US8489789B2 (en) 2010-02-05 2010-12-06 Interrupt virtualization
PCT/US2011/023942 WO2011097588A2 (en) 2010-02-05 2011-02-07 Interrupt virtualization

Publications (1)

Publication Number Publication Date
KR20130035996A true KR20130035996A (ko) 2013-04-09

Family

ID=44354565

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020127023264A KR20130035996A (ko) 2010-02-05 2011-02-07 인터럽트 가상화
KR1020127023265A KR20120131175A (ko) 2010-02-05 2011-02-07 게스트 로컬 인터럽트 컨트롤러를 가상화하도록 구성된 프로세서

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020127023265A KR20120131175A (ko) 2010-02-05 2011-02-07 게스트 로컬 인터럽트 컨트롤러를 가상화하도록 구성된 프로세서

Country Status (6)

Country Link
US (3) US20110197004A1 (ko)
EP (2) EP2531918A2 (ko)
JP (2) JP2013519169A (ko)
KR (2) KR20130035996A (ko)
CN (2) CN102792272A (ko)
WO (2) WO2011097589A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170042762A (ko) * 2014-08-20 2017-04-19 자일링크스 인코포레이티드 이기종 멀티프로세서 시스템에서의 프로세서간 인터럽트를 위한 메커니즘

Families Citing this family (107)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110197004A1 (en) * 2010-02-05 2011-08-11 Serebrin Benjamin C Processor Configured to Virtualize Guest Local Interrupt Controller
JP5440419B2 (ja) * 2010-06-29 2014-03-12 富士通セミコンダクター株式会社 情報処理システム
US8495217B2 (en) * 2010-09-30 2013-07-23 International Business Machines Corporation Mechanism for preventing client partition crashes by removing processing resources from the client logical partition when an NPIV server goes down
US20120166172A1 (en) * 2010-12-23 2012-06-28 Fleming Bruce L Providing legacy computing compatibility
US8578080B2 (en) * 2011-07-01 2013-11-05 Intel Corporation Secure handling of interrupted events utilizing a virtual interrupt definition table
US8631181B2 (en) * 2011-09-26 2014-01-14 Oracle International Corporation Validating message-signaled interrupts by tracking interrupt vectors assigned to devices
US8910158B2 (en) * 2011-12-14 2014-12-09 Intel Corporation Virtualizing interrupt priority and delivery
US8656079B2 (en) * 2011-12-19 2014-02-18 Advanced Micro Devices, Inc. Method and apparatus for remapping interrupt types
WO2013100948A1 (en) * 2011-12-28 2013-07-04 Intel Corporation Delivering real time interrupts with an advanced programmable interrupt controller
US9038084B2 (en) 2012-02-23 2015-05-19 International Business Machines Corporation Managing utilization of physical processors of a shared processor pool in a virtualized processor environment
JP5820525B2 (ja) * 2012-03-29 2015-11-24 株式会社日立製作所 仮想計算機のスケジュールシステム及びその方法
US9229884B2 (en) 2012-04-30 2016-01-05 Freescale Semiconductor, Inc. Virtualized instruction extensions for system partitioning
US9152587B2 (en) 2012-05-31 2015-10-06 Freescale Semiconductor, Inc. Virtualized interrupt delay mechanism
CN102750178B (zh) * 2012-06-08 2015-04-29 华为技术有限公司 通信设备硬件资源的虚拟化管理方法及相关装置
JP5933356B2 (ja) * 2012-06-12 2016-06-08 ルネサスエレクトロニクス株式会社 コンピュータシステム
US9122780B2 (en) * 2012-06-20 2015-09-01 Intel Corporation Monitoring resource usage by a virtual machine
US9442870B2 (en) * 2012-08-09 2016-09-13 Freescale Semiconductor, Inc. Interrupt priority management using partition-based priority blocking processor registers
US9436626B2 (en) * 2012-08-09 2016-09-06 Freescale Semiconductor, Inc. Processor interrupt interface with interrupt partitioning and virtualization enhancements
US9424199B2 (en) * 2012-08-29 2016-08-23 Advanced Micro Devices, Inc. Virtual input/output memory management unit within a guest virtual machine
US8806104B2 (en) * 2012-09-25 2014-08-12 Intel Corporation Enabling virtualization of a processor resource
US9355032B2 (en) 2012-10-08 2016-05-31 International Business Machines Corporation Supporting multiple types of guests by a hypervisor
US9355040B2 (en) 2012-10-08 2016-05-31 International Business Machines Corporation Adjunct component to provide full virtualization using paravirtualized hypervisors
US9348757B2 (en) 2012-10-08 2016-05-24 International Business Machines Corporation System supporting multiple partitions with differing translation formats
US9740624B2 (en) 2012-10-08 2017-08-22 International Business Machines Corporation Selectable address translation mechanisms within a partition
US9280488B2 (en) 2012-10-08 2016-03-08 International Business Machines Corporation Asymmetric co-existent address translation structure formats
US9600419B2 (en) 2012-10-08 2017-03-21 International Business Machines Corporation Selectable address translation mechanisms
US9009368B2 (en) 2012-10-23 2015-04-14 Advanced Micro Devices, Inc. Interrupt latency performance counters
US10078603B2 (en) * 2012-11-30 2018-09-18 Red Hat Israel, Ltd. MSI events using dynamic memory monitoring
US9075789B2 (en) * 2012-12-11 2015-07-07 General Dynamics C4 Systems, Inc. Methods and apparatus for interleaving priorities of a plurality of virtual processors
EP2946296A4 (en) * 2013-01-17 2016-11-16 Xockets Ip Llc DELIBRATION PROCESSOR MODULES FOR CONNECTING TO A SYSTEM MEMORY
US9235538B2 (en) * 2013-02-07 2016-01-12 Red Hat Israel, Ltd. Injecting interrupts in virtualized computer systems
US9329880B2 (en) 2013-02-13 2016-05-03 Red Hat Israel, Ltd. Counter for fast interrupt register access in hypervisors
US10331589B2 (en) * 2013-02-13 2019-06-25 Red Hat Israel, Ltd. Storing interrupt location for fast interrupt register access in hypervisors
US9830286B2 (en) 2013-02-14 2017-11-28 Red Hat Israel, Ltd. Event signaling in virtualized systems
US9378162B2 (en) 2013-05-21 2016-06-28 Arm Limited Handling and routing interrupts to virtual processors
CN104239238B (zh) * 2013-06-21 2018-01-19 格芯公司 用于管理转换旁视缓冲的方法和装置
US9015374B2 (en) 2013-07-09 2015-04-21 Advanced Micro Devices, Inc. Virtual interrupt filter
JP6029550B2 (ja) * 2013-07-19 2016-11-24 株式会社日立製作所 計算機の制御方法及び計算機
GB2517493A (en) * 2013-08-23 2015-02-25 Advanced Risc Mach Ltd Handling access attributes for data accesses
WO2015031277A1 (en) 2013-08-26 2015-03-05 Vmware, Inc. Networking stack of virtualization software configured to support latency sensitive virtual machines
US9697031B2 (en) * 2013-10-31 2017-07-04 Huawei Technologies Co., Ltd. Method for implementing inter-virtual processor interrupt by writing register data in a single write operation to a virtual register
CN103559087B (zh) * 2013-10-31 2017-11-28 华为技术有限公司 一种虚拟处理器之间的中断的实现方法、相关装置和系统
US9355050B2 (en) 2013-11-05 2016-05-31 Qualcomm Incorporated Secure, fast and normal virtual interrupt direct assignment in a virtualized interrupt controller in a mobile system-on-chip
US9465760B2 (en) 2013-11-18 2016-10-11 Futurewei Technologies, Inc. Method and apparatus for delivering MSI-X interrupts through non-transparent bridges to computing resources in PCI-express clusters
WO2015097839A1 (ja) * 2013-12-27 2015-07-02 株式会社日立製作所 優先度割込み対応リアルタイムハイパバイザ
US10042790B2 (en) * 2014-03-07 2018-08-07 Hitachi, Ltd. Computer and method with interrupt vector management
WO2015159359A1 (ja) * 2014-04-15 2015-10-22 株式会社日立製作所 物理計算機
US9507740B2 (en) 2014-06-10 2016-11-29 Oracle International Corporation Aggregation of interrupts using event queues
US9396142B2 (en) * 2014-06-10 2016-07-19 Oracle International Corporation Virtualizing input/output interrupts
KR101847518B1 (ko) 2014-06-20 2018-05-28 후아웨이 테크놀러지 컴퍼니 리미티드 가상화 플랫폼에 의한 중단을 처리하는 및 관련 장치
US9697154B2 (en) * 2014-08-20 2017-07-04 Red Hat Israel, Ltd. Managing message signaled interrupts in virtualized computer systems
WO2016092667A1 (ja) * 2014-12-11 2016-06-16 株式会社日立製作所 計算機及び割込み制御方法
US9772870B2 (en) * 2015-01-29 2017-09-26 Red Hat Israel, Ltd. Delivering interrupts to virtual machines executing privileged virtual machine functions
GB2541133B (en) * 2015-06-16 2018-01-03 Nordic Semiconductor Asa Interrupt generating unit
EP3118740B1 (en) * 2015-07-15 2021-09-08 Huawei Technologies Co., Ltd. Device and method for hardware virtualization support
US9792232B2 (en) 2015-11-16 2017-10-17 International Business Machines Corporation Techniques for queueing interrupts in a data processing system
US10846117B1 (en) * 2015-12-10 2020-11-24 Fireeye, Inc. Technique for establishing secure communication between host and guest processes of a virtualization architecture
US10108446B1 (en) 2015-12-11 2018-10-23 Fireeye, Inc. Late load technique for deploying a virtualization layer underneath a running operating system
US20170206091A1 (en) * 2016-01-20 2017-07-20 International Business Machines Corporation Sharing ownership of an input/output device with an existing partition
US10042720B2 (en) 2016-02-22 2018-08-07 International Business Machines Corporation Live partition mobility with I/O migration
US10002018B2 (en) 2016-02-23 2018-06-19 International Business Machines Corporation Migrating single root I/O virtualization adapter configurations in a computing system
US10042723B2 (en) 2016-02-23 2018-08-07 International Business Machines Corporation Failover of a virtual function exposed by an SR-IOV adapter
US10671419B2 (en) * 2016-02-29 2020-06-02 Red Hat Israel, Ltd. Multiple input-output memory management units with fine grained device scopes for virtual machines
US10025584B2 (en) 2016-02-29 2018-07-17 International Business Machines Corporation Firmware management of SR-IOV adapters
US20210026950A1 (en) * 2016-03-07 2021-01-28 Crowdstrike, Inc. Hypervisor-based redirection of system calls and interrupt-based task offloading
KR102509986B1 (ko) 2016-03-28 2023-03-14 삼성전자주식회사 다중 코어 프로세서 및 다중 코어 프로세서를 제어하는 방법
US10956345B2 (en) * 2016-04-01 2021-03-23 Intel Corporation Enhanced directed system management interrupt mechanism
US10180854B2 (en) * 2016-09-28 2019-01-15 Intel Corporation Processor extensions to identify and avoid tracking conflicts between virtual machine monitor and guest virtual machine
US9760512B1 (en) 2016-10-21 2017-09-12 International Business Machines Corporation Migrating DMA mappings from a source I/O adapter of a source computing system to a destination I/O adapter of a destination computing system
US9715469B1 (en) 2016-10-21 2017-07-25 International Business Machines Corporation Migrating interrupts from a source I/O adapter of a source computing system to a destination I/O adapter of a destination computing system
US9785451B1 (en) 2016-10-21 2017-10-10 International Business Machines Corporation Migrating MMIO from a source I/O adapter of a computing system to a destination I/O adapter of the computing system
US9740647B1 (en) 2016-10-21 2017-08-22 International Business Machines Corporation Migrating DMA mappings from a source I/O adapter of a computing system to a destination I/O adapter of the computing system
US9720863B1 (en) 2016-10-21 2017-08-01 International Business Machines Corporation Migrating MMIO from a source I/O adapter of a source computing system to a destination I/O adapter of a destination computing system
US9720862B1 (en) 2016-10-21 2017-08-01 International Business Machines Corporation Migrating interrupts from a source I/O adapter of a computing system to a destination I/O adapter of the computing system
US10635479B2 (en) * 2016-12-19 2020-04-28 Bitdefender IPR Management Ltd. Event filtering for virtual machine security applications
WO2018176360A1 (en) 2017-03-31 2018-10-04 Intel Corporation Scalable interrupt virtualization for input/output devices
US10228981B2 (en) * 2017-05-02 2019-03-12 Intel Corporation High-performance input-output devices supporting scalable virtualization
CN109144679B (zh) * 2017-06-27 2022-03-29 华为技术有限公司 中断请求的处理方法、装置及虚拟化设备
TWI621946B (zh) 2017-06-28 2018-04-21 緯創資通股份有限公司 排程方法、PCIe控制器及其相關電子系統
US11487574B2 (en) 2017-09-19 2022-11-01 Microsoft Technology Licensing, Llc Targeted interrupts for virtual processors
JP2019114097A (ja) 2017-12-25 2019-07-11 ルネサスエレクトロニクス株式会社 半導体装置
CN108123850B (zh) * 2017-12-25 2020-04-24 上海交通大学 针对中断持有者抢占问题的综合调度方法及装置
CN108334282B (zh) * 2017-12-28 2021-07-09 宁德时代新能源科技股份有限公司 汽车电子控制单元的程序文件下载方法和装置
WO2019127191A1 (zh) * 2017-12-28 2019-07-04 深圳前海达闼云端智能科技有限公司 一种多操作系统共享文件系统的方法、装置和电子设备
GB2571922B (en) 2018-03-05 2020-03-25 Advanced Risc Mach Ltd External exception handling
CN111353595A (zh) * 2018-12-20 2020-06-30 上海寒武纪信息科技有限公司 运算方法、装置及相关产品
TWI764082B (zh) * 2019-02-14 2022-05-11 美商萬國商業機器公司 用於經引導中斷虛擬化之中斷信號之方法、電腦系統及電腦程式產品
CN113424150A (zh) 2019-02-14 2021-09-21 国际商业机器公司 具有运行指示符的定向中断虚拟化
BR112021016093A2 (pt) * 2019-02-14 2021-10-26 International Business Machines Corporation Interrupção dirigida para virtualização de multiníveis
TWI727607B (zh) 2019-02-14 2021-05-11 美商萬國商業機器公司 用於具有中斷表之經引導中斷虛擬化之方法、電腦系統及電腦程式產品
JP7459119B2 (ja) 2019-02-14 2024-04-01 インターナショナル・ビジネス・マシーンズ・コーポレーション 割り込みテーブルを使用したマルチレベルの仮想化のための有向割り込み方法、システム、プログラム
TWI759677B (zh) 2019-02-14 2022-04-01 美商萬國商業機器公司 用於具有回退之經引導中斷虛擬化之方法、電腦系統及電腦程式產品
WO2020165666A1 (en) 2019-02-14 2020-08-20 International Business Machines Corporation Directed interrupt virtualization with blocking indicator
EP3924817A1 (en) * 2019-02-14 2021-12-22 International Business Machines Corporation Directed interrupt virtualization
US11204796B2 (en) * 2019-04-11 2021-12-21 International Business Machines Corporation Dynamic assignment of interrupts based on input/output metrics
US10949243B2 (en) 2019-04-26 2021-03-16 Red Hat, Inc. Reducing IPI overhead with CPU overcommit support via IPI broadcast
US11194611B2 (en) 2019-07-29 2021-12-07 International Business Machines Corporation Dynamic assignment of interrupts based on input/output metrics
US11042495B2 (en) * 2019-09-20 2021-06-22 Advanced Micro Devices, Inc. Providing interrupts from an input-output memory management unit to guest operating systems
US11842227B2 (en) * 2019-10-10 2023-12-12 Advanced Micro Devices, Inc. Hypervisor secure event handling at a processor
US10922253B1 (en) * 2019-10-22 2021-02-16 Vmware, Inc. Implementing interrupt remapping via input/output memory management unit faults
US11281607B2 (en) 2020-01-30 2022-03-22 Red Hat, Inc. Paravirtualized cluster mode for legacy APICs
CN114077379B (zh) * 2020-08-19 2024-03-26 华为技术有限公司 一种计算机设备、异常处理的方法以及中断处理的方法
CN112084128B (zh) * 2020-09-09 2023-01-17 中国航空工业集团公司雷华电子技术研究所 消息中断通信方法、计算机设备和存储介质
CN113157624B (zh) * 2021-04-21 2021-12-07 科东(广州)软件科技有限公司 一种串口通信方法、装置、设备及存储介质
US11989144B2 (en) 2021-07-30 2024-05-21 Advanced Micro Devices, Inc. Centralized interrupt handling for chiplet processing units
US11755512B2 (en) * 2021-08-17 2023-09-12 Red Hat, Inc. Managing inter-processor interrupts in virtualized computer systems
US11550745B1 (en) 2021-09-21 2023-01-10 Apple Inc. Remapping techniques for message signaled interrupts

Family Cites Families (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5222215A (en) * 1991-08-29 1993-06-22 International Business Machines Corporation Cpu expansive gradation of i/o interruption subclass recognition
US5689713A (en) 1995-03-31 1997-11-18 Sun Microsystems, Inc. Method and apparatus for interrupt communication in a packet-switched computer system
US5892970A (en) 1996-07-01 1999-04-06 Sun Microsystems, Inc. Multiprocessing system configured to perform efficient block copy operations
US6977908B2 (en) * 2000-08-25 2005-12-20 Hewlett-Packard Development Company, L.P. Method and apparatus for discovering computer systems in a distributed multi-system cluster
US6622193B1 (en) 2000-11-16 2003-09-16 Sun Microsystems, Inc. Method and apparatus for synchronizing interrupts in a message passing queue oriented bus system
US7054975B2 (en) 2001-08-10 2006-05-30 Koninklijke Philips Electronics N.V. Interrupt generation in a bus system
US6961806B1 (en) * 2001-12-10 2005-11-01 Vmware, Inc. System and method for detecting access to shared structures and for maintaining coherence of derived structures in virtualized multiprocessor systems
US6799231B2 (en) * 2002-10-22 2004-09-28 Asix Electronics Corp. Virtual I/O device coupled to memory controller
US20040117532A1 (en) 2002-12-11 2004-06-17 Bennett Steven M. Mechanism for controlling external interrupts in a virtual machine system
US7000051B2 (en) * 2003-03-31 2006-02-14 International Business Machines Corporation Apparatus and method for virtualizing interrupts in a logically partitioned computer system
US7281075B2 (en) * 2003-04-24 2007-10-09 International Business Machines Corporation Virtualization of a global interrupt queue
US7130949B2 (en) * 2003-05-12 2006-10-31 International Business Machines Corporation Managing input/output interruptions in non-dedicated interruption hardware environments
US7222203B2 (en) 2003-12-08 2007-05-22 Intel Corporation Interrupt redirection for virtual partitioning
US7467381B2 (en) * 2003-12-16 2008-12-16 Intel Corporation Resource partitioning and direct access utilizing hardware support for virtualization
US20050228921A1 (en) 2004-03-31 2005-10-13 Prashant Sethi Sharing of interrupts between operating entities
US7209994B1 (en) * 2004-05-11 2007-04-24 Advanced Micro Devices, Inc. Processor that maintains virtual interrupt state and injects virtual interrupts into virtual machine guests
US7917740B1 (en) 2004-05-11 2011-03-29 Advanced Micro Devices, Inc. Virtualization assist for legacy x86 floating point exception handling
US7444493B2 (en) * 2004-09-30 2008-10-28 Intel Corporation Address translation for input/output devices using hierarchical translation tables
US7689747B2 (en) 2005-03-28 2010-03-30 Microsoft Corporation Systems and methods for an augmented interrupt controller and synthetic interrupt sources
US7552236B2 (en) 2005-07-14 2009-06-23 International Business Machines Corporation Routing interrupts in a multi-node system
US7522236B2 (en) * 2005-09-23 2009-04-21 Apple Inc. Cosmetically uniform reflective border area in a transflective display
US8286162B2 (en) * 2005-12-30 2012-10-09 Intel Corporation Delivering interrupts directly to a virtual processor
US7945908B1 (en) 2006-03-31 2011-05-17 Vmware, Inc. Method and system for improving the accuracy of timing and process accounting within virtual machines
CN100472451C (zh) * 2006-04-20 2009-03-25 联想(北京)有限公司 一种虚拟机系统及其硬件设备访问方法
US7945905B2 (en) 2006-06-02 2011-05-17 Accenture Global Services Limited Quality inspector tool
CN100547571C (zh) * 2006-08-29 2009-10-07 联想(北京)有限公司 一种虚拟机系统及其硬件设备中断处理方法
US7873770B2 (en) * 2006-11-13 2011-01-18 Globalfoundries Inc. Filtering and remapping interrupts
US20080162762A1 (en) * 2006-12-29 2008-07-03 Gilbert Neiger Interrupt remapping based on requestor identification
CN100568181C (zh) * 2007-06-22 2009-12-09 浙江大学 基于处理器虚拟化技术的虚拟机系统及其实现方法
US8453143B2 (en) 2007-09-19 2013-05-28 Vmware, Inc. Reducing the latency of virtual interrupt delivery in virtual machines
JP2009134565A (ja) 2007-11-30 2009-06-18 Hitachi Ltd 仮想計算機システム及び仮想計算機システムの制御方法
US8312230B2 (en) * 2008-06-06 2012-11-13 International Business Machines Corporation Dynamic control of partition memory affinity in a shared memory partition data processing system
GB2462258B (en) * 2008-07-28 2012-02-08 Advanced Risc Mach Ltd Interrupt control for virtual processing apparatus
US8055827B2 (en) * 2009-01-26 2011-11-08 Advanced Micro Devices, Inc. Guest interrupt controllers for each processor to aid interrupt virtualization
US20110107328A1 (en) 2009-11-02 2011-05-05 Advanced Micro Devices, Inc. Virtual machine device and methods thereof
US8566492B2 (en) 2009-12-31 2013-10-22 Intel Corporation Posting interrupts to virtual processors
US20110197004A1 (en) * 2010-02-05 2011-08-11 Serebrin Benjamin C Processor Configured to Virtualize Guest Local Interrupt Controller

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170042762A (ko) * 2014-08-20 2017-04-19 자일링크스 인코포레이티드 이기종 멀티프로세서 시스템에서의 프로세서간 인터럽트를 위한 메커니즘
KR20220160709A (ko) * 2014-08-20 2022-12-06 자일링크스 인코포레이티드 이기종 멀티프로세서 시스템에서의 프로세서간 인터럽트를 위한 메커니즘

Also Published As

Publication number Publication date
WO2011097588A2 (en) 2011-08-11
US8706941B2 (en) 2014-04-22
EP2531919A2 (en) 2012-12-12
EP2531918A2 (en) 2012-12-12
JP2013519170A (ja) 2013-05-23
CN102792272A (zh) 2012-11-21
US20130275638A1 (en) 2013-10-17
KR20120131175A (ko) 2012-12-04
WO2011097589A2 (en) 2011-08-11
US20110197003A1 (en) 2011-08-11
WO2011097589A3 (en) 2011-09-29
WO2011097588A3 (en) 2011-09-29
JP2013519169A (ja) 2013-05-23
CN102804143A (zh) 2012-11-28
US20110197004A1 (en) 2011-08-11
US8489789B2 (en) 2013-07-16

Similar Documents

Publication Publication Date Title
US8706941B2 (en) Interrupt virtualization
KR101610838B1 (ko) 인터럽트 가상화를 돕기 위한 각 프로세서에 대한 게스트 인터럽트 제어기들
US7707341B1 (en) Virtualizing an interrupt controller
US7209994B1 (en) Processor that maintains virtual interrupt state and injects virtual interrupts into virtual machine guests
EP2316069B1 (en) Lazy handling of end of interrupt messages in a virtualized environment
US8910158B2 (en) Virtualizing interrupt priority and delivery
US9952990B2 (en) Implementing pseudo non-masking interrupts behavior using a priority interrupt controller
US9952895B2 (en) Implementing pseudo non-masking interrupts behavior using a priority interrupt controller

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid