[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

KR20220001016A - 게스트 운영체제에 입출력 메모리 관리 유닛 레지스터 복사본을 제공하는 방법 - Google Patents

게스트 운영체제에 입출력 메모리 관리 유닛 레지스터 복사본을 제공하는 방법 Download PDF

Info

Publication number
KR20220001016A
KR20220001016A KR1020217042281A KR20217042281A KR20220001016A KR 20220001016 A KR20220001016 A KR 20220001016A KR 1020217042281 A KR1020217042281 A KR 1020217042281A KR 20217042281 A KR20217042281 A KR 20217042281A KR 20220001016 A KR20220001016 A KR 20220001016A
Authority
KR
South Korea
Prior art keywords
iommu
operating system
guest operating
mmio
guest
Prior art date
Application number
KR1020217042281A
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 KR20220001016A publication Critical patent/KR20220001016A/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/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1448Management of the data involved in backup or backup restore
    • 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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0292User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1081Address translation for peripheral access to main memory, e.g. direct memory access [DMA]
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30138Extension of register space, e.g. register cache
    • 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/45575Starting, stopping, suspending or resuming virtual machine instances
    • 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
    • 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/45583Memory management, e.g. access or allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/15Use in a specific computing environment
    • G06F2212/151Emulated environment, e.g. virtual machine

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

전자 디바이스는 게스트 운영 체제를 실행하는 프로세서, 입출력 메모리 관리 유닛(IOMMU), IOMMU 백업 저장소를 저장하는 메인 메모리를 포함한다. IOMMU 백업 저장소는 지원 게스트 운영체제 세트의 각 게스트 운영체제에 대한 IOMMU 메모리 매핑 입출력(MMIO) 레지스터 세트의 개별 복사본을 포함한다. IOMMU는 소정의 IOMMU MMIO 레지스터의 데이터에 액세스하는 통신을 게스트 운영체제에서 수신한다. IOMMU는 이어서 게스트 운영체제와 연관된 IOMMU 백업 저장소에 있는 소정의 IOMMU MMIO 레지스터 복사본의 데이터에 대한 해당 액세스를 수행한다.

Description

게스트 운영체제에 입출력 메모리 관리 유닛 레지스터 복사본을 제공하는 방법
일부 전자 디바이스(예: 서버 또는 데스크톱 컴퓨터 등)는 입출력(IO) 장치 등과 같은 전자 디바이스 하드웨어의 "가상화(virtualization)"를 지원한 다. 가상화는 전자 디바이스에서 실행되는 소프트웨어(예: 애플리케이션 프로그램 등)의 인스턴스가, 소프트웨어 인스턴스가 전자 디바이스 하드웨어에 직접 액세스 할 수 있다는 환영(illusion)을 제공하는 전자 디바이스의 중개 엔티티(intermediary entity)를 포함하며, 이 경우 중개 엔티티는 실제로는 소프트웨어의 인스턴스에 의한 액세스를 가로채거나 리디렉션 또는 그 외 방식으로 지원한다. 예를 들어, 공통 중개 엔티티는 "가상 머신(virtual machine)"에 해당한다. 가상 머신은 전자 디바이스 하드웨어를 추상화하고, 전자 디바이스 하드웨어에 대해 알려진 인터페이스를 에뮬레이션하거나 제공하여 소프트웨어 인스턴스가 기본 전자 디바이스 하드웨어, 이를테면 본래는 소프트웨어 인스턴스와 호환하지 않을 전자 디바이스 하드웨어의 다양한 유형과 구성에서 실행이 가능하도록 하는 소프트웨어 엔티티를 말한다. 일부 전자 디바이스에서 가상 머신은 "게스트(guset)" 운영체제라고 하는 운영체제의 인스턴스 하나 이상을 실행할 수 있도록 지원한다. 게스트 운영 체제는 생산성 애플리케이션(productivity application), 데이터베이스 등의 그 외 소프트웨어 인스턴스를 실행하기 위한 환경을 제공한다.
일부 전자 디바이스에서, 가상 머신은 하이퍼바이저(hypervisor)로 알려진 소프트웨어 엔티티가 관리하고 제어한다. 하이퍼바이저는 가상 머신의 시작 또는 초기화; 가상 머신에 의한 전자 디바이스 하드웨어 액세스의 제어, 모니터링, 지원; 가상 머신의 종료 등의 동작을 할 수 있다. 도 1은 가상 머신과 하이퍼바이저를 도시하는 블록도이다. 도 1에 도시된 바와 같이, 가상 머신(VM)(100) 3개가 있고, 각 가상 머신은 게스트 운영체제(GUEST OS)(102)와 데이터베이스, 소프트웨어 애플리케이션 등 하나 이상의 프로그램(PRGRMS)(104)을 실행한다. 가상 머신(100)은 호스트 운영체제(HOST OS)(108)와 가상 머신(100) 사이에서 인터페이스를 제공하는 하이퍼바이저(106)와 통신한다. 호스트 운영체제(108)는 전자 디바이스 하드웨어(110)와 하이퍼바이저(106) 사이의 인터페이스를 제공한다. 하이퍼바이저(106)는, IO 디바이스 하드웨어(114)를 위한 메모리 관리 유닛 및 컨트롤러로서의 역할을 하는 입출력 관리 유닛(IOMMU)(112)과 가상 머신(100) 사이의 인터페이스를 제공한다.
하이퍼바이저가 수행하는 작업은 전자 디바이스 하드웨어와 게스트 운영체제(더 광범위하게는 가상 머신) 사이 통신의 핸들링을 포함한다. 예를 들어, 하이퍼바이저는 게스트 운영체제와 입출력 관리 유닛(IOMMU) 사이의 통신을 번역, 리디렉션 또는 지원할 수 있다. 하이퍼바이저가 핸들링하는 통신은 주변 페이지 요청(peripheral page request, PPR) 로그, IOMMU에 의한 이벤트 로그 기록(event log write), 게스트 운영 체제에 의한 커맨드 버퍼 기록(command buffer write) 등의 통신을 포함한다. PPR 로그, 이벤트 로그, 커맨드 버퍼 기록은, 본원에 원용되는 2016년 12월 기준 AMD I/O 가상화기술(IOMMU) 사양 개정 제3판에서 자세히 설명하고 있다.
도 2는 하이퍼바이저가 핸들링하는 게스트 운영체제와 IOMMU 사이의 통신을 도시하는 블록도이다. 도 2는 로그, 버퍼 등의 요소를 점선으로 나타내었다. 요소는 메모리(예: 전자 디바이스의 메인 메모리)에 저장되며, 일반적인 메모리 액세스 기술로 액세스할 수 있다. 도 2의 요소는, 게스트 운영체제(102), 하이퍼바이저(106), IOMMU(112)와 함께, 게스트 주변 페이지 요청(PPR) 로그(200), 게스트 커맨드 버퍼(CMD BUF)(202), 게스트 이벤트 로그(204)를 포함하며, 이는 게스트 운영체제(102)와 주고받는 통신을 저장하기 위해 쓰이는는 메모리 내 구조(예: 리스트, 테이블)에 해당한다. 해당 요소는 또한 게스트 포인터(PTRS)/상태 레지스터(REGS)(206)를 포함하는데, 이는 게스트 운영체제 구조에 대한 포인터와, 게스트 운영체제와 연관된 상태 정보를 저장하는 메모리 내 위치의 세트에 해당한다. 상기 요소는 IOMMU 주변 페이지 요청 로그(208), IOMMU 명령 버퍼(210), IOMMU 이벤트 로그(212)를 추가로 포함하며, 이들은 IOMMU(112)와 주고받는 통신의 저장에 쓰이는 메모리 내의 구조(예: 리스트, 테이블)에 해당한다. 애당 요소는 또한 IOMMU(112)의 IOMMU 메모리 매핑 입출력(MMIO) 포인터/상태 레지스터(REGS)(214)을 포함하는데, 이는 다양한 IOMMU(112) 구조에 대한 포인터 및 IOMMU(112)와 연관된 상태 정보를 저장하는 IOMMU(112) 레지스터의 세트를 말한다.
예시로 명령을 들자면, 작업 중에 게스트 운영체제(102)는 IOMMU(112)로 향하는 명령을 게스트 명령 버퍼(202)에 기록한다(다시 말해 게스트 운영체제(102)에서의 명령을 저장하는 메모리 버퍼에서 다음으로 이용 가능한 위치에 기록한다). 하이퍼바이저(106)는 도 2에서 점선으로 도시된 바와 같이, 게스트 운영체제의 게스트 명령 버퍼(202)에 대한 쓰기를 감지하고, 명령을 획득하고 처리하며(예: 명령의 게스트 도메인 ID 및/또는 게스트 디바이스 ID를 해당 호스트 도메인 ID 및/또는 디바이스 ID로 대체), IOMMU 명령 버퍼(210)에서 처리한 명령을 저장한다. 하이퍼바이저(106)은 또한 IOMMU MMIO 명령 버퍼(210)에 대한 IOMMU MMIO 포인터/상태 레지스터(214)이 테일 포인터를 업데이트하여 새로 기록한 명령을 가리키게 한다(예: 테일 포인터를 IOMMU 명령 버퍼(210)의 다음 위치로 증가시킨다). 이어서 IOMMU(112)는 명령 버퍼 헤드 포인터를 사용하여 IOMMU 명령 버퍼(210)에서 명령을 검색하고 해당 명령을 실행함으로써IOMMU(112)가 대응하는 작업을 수행하게 한다. 하이퍼바이저(106)는 IOMMU 주변 페이지 요청 로그(208) 및 IOMMU 이벤트 로그(212)에 대한 IOMMU(112)의 기록에도 유사한 작업을 수행한다(예: 호스트 디바이스 ID를 게스트 디바이스 ID로 교체함). 메모리 독취 및 쓰기, 포인터 업데이트, 하이퍼바이저(106)가 수행하는 그 외 작업은 레이턴시가 더 길기 때문에, 하이퍼바이저(106)를 사용하여 게스트 운영체제(102)와 IOMMU(112) 사이에 개입하는 것은 통신 처리를 지연시킬 뿐만 아니라 프로세서를 사용하게 하고 전자 디바이스의 메모리 버스에 트래픽을 늘리게 된다.
도 1은 가상 머신 및 하이퍼바이저를 도시하는 블록도이다.
도 2는 하이퍼바이저가 핸들링하는 게스트 운영체제와 IOMMU 사이의 통신을 도시하는 블록도이다.
도 3은 일부 실시형태에 따른 가상 머신 및 하이퍼바이저를 도시하는 블록도이다.
도 4는 일부 실시형태에 따른 전자 디바이스를 도시하는 블록도이다.
도 5는 일부 실시형태에 따른 IOMMU가 액세스하는 메모리 부분를 도시하는 블록도이다.
도 6은 일부 실시형태에 따른 IOMMU MMIO 레지스터 게스트 복사본에 저장된 값을 도시하는 블록도이다.
도 7은 일부 실시형태에 따른 IOMMU가 핸들링하는 게스트 운영체제와 IOMMU 사이의 통신을 도시하는 블록도이다.
도 8은 일부 실시형태에 따라 IOMMU가 게스트 운영체제를 대신하여 IOMMU 백업 저장소에 있는 IOMMU MMIO 레지스터 복사본에 액세스할 때의 프로세스를 도시하는 플로우차트이다.
도 9는 일부 실시형태에 따라 게스트 운영체제가 IOMMU 백업 저장소에 있는 IOMMU MMIO 레지스터 복사본에 기록하고 IOMMU가 해당 복사본에서 독취하는 프로세스를 도시하는 플로우차트이다.
도 10는 일부 실시형태에 따라 IOMMU가 IOMMU 백업 저장소에 있는 IOMMU MMIO 레지스터 복사본에 기록하고 게스트 운영체제가 해당 복사본에서 독취하는 프로세스를 도시하는 플로우차트이다.
도면 및 설명 전반에서 동일한 참조번호는 동일한 도면 요소를 가리킨다.
다음의 설명은 당업자가 실시형태를 참조하여 발명을 재현할 수 있도록 하기 위한 것으로, 특정한 용도와 그에 따른 필수사항으로 한정한다. 실시형태를 수정 또는 개량하는 것은 당업자가 용이하게 상도할 수 있는 것이며, 여기에서 정의하는 일반적인 원리는 그 외의 실시형태와 용도에도 적용이 가능하다. 따라서 실시형태는 본원에서 설명하는 실시형태에 한정해서는 안되며, 본원이 개시하는 원리 및 특징과 일치하는 최대 범위를 망라한다.
용어집
하기의 설명에서는 실시형태를 설명하기 위해 다양한 용어를 사용하고 있다. 다음에서는 해당 용어의 일반적인 의미를 간결하게 설명하였다. 명확성과 간결성을 위해 본원에서는 용어의 주요한 의미를 일부 생략할 수 있으며, 따라서 본 설명은 용어의 해석을 한정하지 않는다.
기능 블록(functional block): 기능 블록은 집적 회로 요소, 개별 회로 요소와 같이 상호 연관된 회로 요소 하나 이상의 집합, 모음 및/또는 세트를 가리킨다. 회로 요소의 "상호 연관"은 적어도 한 가지를 공유한다는 뜻이다. 예를 들어, 상호 연관된 회로 요소는 특정 집적 회로 칩 또는 그 일부에 포함되거나, 그에 제조되거나, 그 외 방식으로 결합해도 좋으며, 주어진 기능(계산 또는 처리 기능, 메모리 기능)의 수행에 관여해도 좋고, 공통 제어 요소 및/또는 공통 클록 등으로 제어되어도 좋다. 기능 블록은 단일 회로 요소(예: 단일 집적 회로 논리 게이트)에서 수백만 또는 수십억의 회로 요로(예: 집적 회로 메모리)에 이르기까지 임의의 각종 회로 요소를 포함할 수 있다.
가상화, 가상 머신 및 하이퍼바이저
실시형태는 메모리, 입출력(IO) 디바이스 등 전자 디바이스 하드웨어의 "가상화"를 지원한다. 가상화는 일반적으로 전자 디바이스에서 실행되는 소프트웨어(예: 애플리케이션 프로그램 등)의 인스턴스가, 소프트웨어 인스턴스가 전자 디바이스 하드웨어에 직접 액세스할 수 있다는 환영(illusion)을 제공하는 전자 디바이스의 중개 엔티티(intermediary entity)를 포함하며, 이 경우 중개 엔티티는 실제로는 소프트웨어의 인스턴스에 의한 액세스를 가로채거나 리디렉션, 번역, 또는 그 외 방식으로 지원한다. 예를 들어, 중개 엔티티는, 소프트웨어 인스턴스를, 소프트웨어 인스턴스에 전자 디바이스의 실제 디바이스 레지스터나 메모리 위치처럼 보이지만 실제로는 중개 엔티티가 제공하는 복사본에 불과한 전자 디바이스 레지스터, 메모리 위치, 전자 디바이스 설정 및 기타 기능 블록의 세트와 함께 제공해도 좋다. 이 경우 중개 엔티티는 전자 디바이스 하드웨어의 복사본을 수신하거나 가로채고, 혹은 그 외 방식으로 액세스를 확보하며, 소프트웨어 인스턴스를 대신하여 실제 전자 디바이스 하드웨어와 실제 상호 작용을 수행한다. 전자 디바이스 하드웨어의 가상화는 여러 가지 이점이 있는데, 예를 들어 소프트웨어 인스턴스를 중개 엔티티를 통해 전자 디바이스 하드웨어에 동일한 인터페이스로 제공하는 동안, 그 외 전자 디바이스가 전자 디바이스 하드웨어의 그 외 구성, 여타 주소, 위치 또는 전자 디바이스 하드웨어에 대한 식별자 등을 사용하는 것이 가능하다. 또한, 중개 엔티티가 소정의 소프트웨어 인스턴스에 의한 전자 디바이스 하드웨어의 액세스의 허용 또는 차단 여부를 결정해도 좋으므로, 전자 디바이스 하드웨어의 가상화로 전자 디바이스 하드웨어(또는 그 일부) 및/또는 전자 디바이스에서 실행하는 소프트웨어 인스턴스를 보호할 수 있다. 상술한 바와 같이 액세스를 제어함으로써, 중개 엔티티는 여러 소프트웨어 인스턴트 사이에서 전자 디바이스 하드웨어를 공유하는 한편으로, 소프트웨어의 개별 인스턴스에 전자 디바이스 하드웨어의 일부에 대한 독점적 액세스를 제공할 수 있다.
해당 실시형태에서, 중개 엔티티는 "가상 머신"을 포함한다. 가상 머신은 전자 디바이스 하드웨어를 추상화하고 소프트웨어 인스턴스에 실제 또는 에뮬레이트한 전자 디바이스 하드웨어에 대한 주지의 인터페이스를 제공하는 소프트웨어 엔티티를 말한다. 하드웨어를 추상화(abstracting)하면 소프트웨어 인스턴스가 기본 전자 디바이스 하드웨어, 이를테면 본래는 소프트웨어 인스턴스와 호환하지 않을 전자 디바이스 하드웨어의 다양한 유형과 구성에서 실행이 가능해진다. 해당 실시형태에서, 가상 머신은 "게스트" 운영체제라 하는 운영체제의 인스턴스 하나 이상의 실행을 지원한다. 게스트 운영체제는 애플리케이션, 데이터베이스 등 그 외 소프트웨어 프로그램을 실행하기 위한 환경을 제공한다.
해당 실시형태에서, 가상 머신은 하이퍼바이저로 알려진 소프트웨어 엔티티로 관리하고 제어한다. 하이퍼바이저는 가상 머신의 시작 또는 초기화; 가상 머신에 의한 전자 디바이스 하드웨어 액세스의 제어, 모니터링, 지원; 가상 머신의 종료 등의 동작을 할 수 있다. 도 3은 일부 실시형태에 따른 가상 머신과 하이퍼바이저를 도시하는 블록도이다. 도 3에 도시된 바와 같이, 가상 머신(VM)(300) 3개가 있고, 각 가상 머신은 게스트 운영 체제(GUEST OS)(302)와 데이터베이스, 소프트웨어 애플리케이션 등 하나 이상의 프로그램(PRGRMS)(304)을 실행한다. 가상 머신(300)은 호스트 운영체제(HOST OS)(308)와 가상 머신(300) 사이에서 인터페이스를 제공하는 하이퍼바이저(306)와 통신한다. 호스트 운영 체제(308)는 전자 디바이스 하드웨어(310)와 하이퍼바이저(306) 사이의 인터페이스를 제공한다. 기존의 전자 디바이스에 관하여 도 1에 도시한 것과는 달리, 도 3에서 IOMMU(312)는 하이퍼바이저(306)의 개입 없이 게스트 운영체제(302)와 IO 디바이스 하드웨어(314) 사이에서 직접 인터페이스로 기능한다(IOMMU(312)와 게스트 운영체제(302) 사이의 굵은 선으로 도시함). 따라서 기존의 전자 디바이스와 달리, 해당 실시형태에서 하이퍼바이저(306)는 본원에서 설명하고 있는 바와 같이 게스트 운영체제(302)와 IOMMU(312) 사이의 통신을 핸들링하는 작업의 중 적어도 일부를 수행할 필요가 없다. 그러나 하이퍼바이저(306)와 IOMMU(312) 사이의 선으로 도시한 바와 같이, 특정한 통신은 IOMMU(312)와 하이퍼바이저(306) 사이에서 발생한다는 사실에 유의해야 한다. 또한, 일부 실시형태에서는 호스트 운영체제(308)가 존재하지 않으며, 하이퍼바이저(306)가 전자 디바이스 하드웨어(310)와 직접적으로 통신한다는 점에도 유의해야 한다.
개요
해당 실시형태에서, 전자 디바이스는 프로세스, 메모리(예: 메인 메모리), 복수의 입출력(IO) 디바이스(예: 네트워크 인터페이스 디바이스, 디스크 컨트롤러 등), 프로세서와 IO 디바이스 사이의 인터페이스로 기능하는 입출력 메모리 관리 유닛(IOMMU)을 포함한다. 프로세서는 하이퍼바이저와 하나 이상의 가상 머신을 실행하고, 가상 머신에서는 게스트 운영체제를 실행한다. 각 게스트 운영체제는 해당 게스트 운영체제에서 액세스할 데이터 또는 정보를 저장하고자 예비한 메모리의 게스트 부분(예: 연속 또는 비연속 영역, 혹은 메모리 블록)을 할당받는다. 해당 실시형태에서, IOMMU는 게스트 운영체제와 IOMMU 간의 통신을 핸들링하기 위한 작업을 수행한다.
게스트 운영체제와 IOMMU 간의 통신을 핸들링하는 작업의 일환으로서, 기존 시스템에서처럼 특정 버퍼 및 로그의 단일 IOMMU 복사본을 사용하는 대신, IOMMU는 메모리의 해당 게스트 부분에 있는 각 게스트 운영체제에 대한 버퍼와 로그에 직접 액세스한다. 다시 말해 IOMMU는, 기존 시스템에서 IOMMU(및 하이퍼바이저)가 유지관리하는 버퍼 및 로그의 복사본 대신, 각 게스트 운영체제에서 사용하는 버퍼 및 로그의 개별 복사본에 액세스하는 것이다. 예를 들어 일부 실시형태에서, 각 게스트 운영체제는 메모리의 해당 게스트 부분에 명령 버퍼, 이벤트 로그 및/또는 주변 페이지 요청(PPR) 로그를 포함하는 버퍼 및 로그를 유지한다. IOMMU는 메모리의 해당 게스트 운영체제 부분에 있는 각 게스트 운영체제의 버퍼 및 로그에서 정보를 독취하거나, 상기 버퍼 및 로그에 정보를 기록한다. 예를 들어, 소정의 게스트 운영체제가 있을 때, IOMMU는 문제의 게스트 운영체제에 할당된 메모리 부분에 있는 명령 버퍼에서 명령을 독취할 수 있다.
IOMMU가 버퍼 및 로그의 단일 복사본을 사용하는 기존 시스템의 경우, IOMMU는 버퍼 및 로그에 관한 정보를 저장하는 데 쓰이는 IOMMU 메모리 매핑 입출력(MMIO) 레지스터 세트를 유지한다. 예를 들어, IOMMU MMIO 레지스터는 버퍼 및 로그에 대한 포인터(예: 각 로그 또는 버퍼에 대한 헤드/테일 포인터)와 제어값(예: 각 로그 또는 버퍼에 대한 크기 표시기 및/또는 구성값)의 세트와 같은 정보를 포함한다. 해당 실시형태에서는 IOMMU가 메모리의 여러 게스트 부분에 있는 버퍼 및 로그에 개별적으로 액세스하기 때문에(다시 말해 메모리 주소가 다르며, 때로는 제어값이 다르기도 하다), 단일 IOMMU MMIO 레지스터 세트는 적합하지 않다. 따라서 해당 실시형태에서 IOMMU는 메모리의 해당 게스트 부분에 있는 버퍼 및 로그에 액세스할 때 사용할 수 있도록, 각 게스트 운영체제에 대한 IOMMU MMIO 레지스터 세트의 개별 복사본을 가진다. 다시 말해 일부 실시형태에서, 시스템이 게스트 운영체제 N개를 지원하는 경우, IOMMU는 각 게스트 운영체제에 하나씩, IOMMU MMIO 레지스터(즉 버퍼 및 로그에 대한 포인터와 제어값의 세트) 복사본 N개를 제공받게 된다.
사용 가능한 게스트 운영체제 전부(상당히 많을 수도 있다)에 대한 버퍼 및 로그를 추적하는 데 필요한 레지스터 수를 감안하여, IOMMU MMIO 레지스터의 개별 복사본은 IOMMU에 물리적으로 존재하지 않는다. 그 대신 게스트 운영체제용 IOMMU MMIO 레지스터 세트의 개별 복사본을 IOMMU 백업 저장소에 저장한다. IOMMU 백업 저장소는 IOMMU에 관한 데이터 및 정보를 저장하기 위해 마련한 메인 메모리의 일부이다. 해당 실시형태에서, IOMMU는 IOMMU MMIO 레지스터를 "가상화"하거나, 게스트 운영체제(하이퍼바이저 등 그 외 엔티티 포함)에게, 지정 IOMMU MMIO 주소를 통해 IOMMU MMIO 레지스터에 액세스할 수 있는 것 같은 인상(appearance)을 준다. 실제로는 IOMMU MMIO 주소에는 레지스터가 없다. 대신 IOMMU는 IOMMU MMIO 주소에서 IOMMU MMIO 레지스터에 대한 게스트 운영체제의 액세스를 가로채고 IOMMU MMIO 레지스터의 액세스를 IOMMU 백업 저장소의 해당 위치로 리디렉션한다. 예를 들어, 일부 실시예에서 IOMMU MMIO 주소는 IOMMU 백업 저장소에 있는 IOMMU 레지스터 복사본으로 통신을 매핑하는 데 사용하는 IOMMU 인터페이스/애퍼처에서 IOMMU가 제공하는 지정 범위 내의 주소를 포함한다.
일부 실시형태에서, IOMMU는 소정의 IOMMU MMIO 레지스터의 데이터에 액세스하는 통신을 게스트 운영체제에서 수신한다. 예를 들어, 메모리의 해당 게스트 부분에 있는 게스트 운영체제의 명령 버퍼에 명령을 기록한 다음, 게스트 운영체제는 메모리 기록을 전송하여 IOMMU가 수신한 명령 버퍼 테일 포인터를 업데이트해도 좋다. 그런 다음 IOMMU는 게스트 운영체제와 연관된 IOMMU 백업 저장소에 있는 소정의 IOMMU MMIO 레지스터 복사본의 데이터에 대한 해당 액세스를 수행한다. IOMMU는 IOMMU 백업 저장소에 있는 게스트 운영체제에 대한 명령 버퍼 테일 포인터 레지스터의 복사본에 업데이트된 데이터(예: 명령 버퍼 테일 포인터의 새 주소)를 기록해도 좋다. IOMMU MMIO 레지스터 복사본에 액세스하는 게스트 운영체제 외에도, 일부 실시형태에서는 IOMMU가 직접 백업 저장소에 있는 IOMMU MMIO 레지스터의 복사본을 업데이트한다. 예를 들어 일부 실시형태에서, IOMMU는 게스트 명령 버퍼로부터의 명령을 선입선출(FIFO) 순서로 처리한 후, 게스트 운영 체제에 대한 명령 버퍼 헤드 포인터(및/또는 그 외 명령 버퍼값)을 업데이트해도 좋다.
일부 실시형태에서, IOMMU 백업 저장소에 있는 IOMMU MMIO 레지스터의 복사본과 연관된 주소의 가상화로 인해, 다양한 엔티티는 IOMMU MMIO 레지스터 복사본이 IOMMU 백업저장소에 위치하고 있는 물리적 주소를 연산, 번역, 혹은 결정하기 위한 작업을 수행한다. 이들 중 일부 실시형태에서, 소정의 게스트 운영체제는 소정의 게스트 운영체제에 의해 생성 또는 제공된 IOMMU MMIO 레지스터에 대한 로컬 주소인 해당 게스트 가상 주소를 사용하여 IOMMU MMIO 레지스터에 액세스한다. 게스트 가상 주소는 프로세서의 메모리 관리 유닛(MMU)가 (예: 하나 이상의 페이지 테이블을 이용) IOMMU MMIO 주소로 번역한다. 다시 말해, IOMMU MMIO 레지스터의 게스트 복사본 매핑에 쓰이는 범위에서 IOMMU MMIO 애퍼처/인터페이스에 속하는 시스템 물리적 주소로 번역한다. IOMMU MMIO 주소는 여러 게스트 운영체제에 사용하고자 가상화하였으므로, IOMMU는 이어서 소정의 게스트 운영체제에 대한 IOMMU MMIO 레지스터의 특정 복사본의 주소를 결정한다. 이 프로세스를 위해 IOMMU는 먼저 소정의 게스트 운영체제에 대한 식별자와 MMU에서 제공하는 시스템 물리적 주소를 기반으로, 알고리즘, 테이블 등을 이용하여 소정의 게스트 운영체제에 대한 IOMMU MMIO 레지스터 복사본의 IOMMU 가상 주소를 연산한다. 그런 다음 IOMMU는 하나 이상의 페이지 테이블을 이용해 IOMMU 가상 주소를 소정의 게스트 운영 체제에 대한 IOMMU MMIO 레지스터 복사본이 IOMMU 백업 저장소에 저장되어 있는 시스템 물리적 주소로 번역한다.
일부 실시형태에서, 게스트 운영체제에 의해 IOMMU MMIO 레지스터에서 데이터의 업데이트를 감지하면, IOMMU는 하나 이상의 대응 처리 작업을 수행한다. 예를 들어 일부 실시형태에서, 게스트 운영체제가 해당 IOMMU MMIO 레지스터(즉 백업 저장소의 복사본)에서 게스트 운영체제의 명령 버퍼 테일 포인터를 업데이트했음을 감지하면, 그에 응답하여 IOMMU는 해당 게스트 운영체제의 명령 버퍼에서 명령을 검색하고 처리한다.
일부 실시형태에서, 하이퍼바이저는 IOMMU 백업저장소에 저장된 게스트 운영체제에 대한 IOMMU MMIO 레지스터 세트의 개별 복사본에 포함되지 않은 특정 IOMMU MMIO 레지스터를 에뮬레이트한다. 예를 들어 일부 실시형태에서, 하이퍼바이저는 IOMMU에 대하여 IOMMU 제어 MMIO 레지스터, 번역 테이블 기본 주소 MMIO 레지스터 등을 에뮬레이트한다. 이들 실시형태에서 하이퍼바이저는 에뮬레이트한 IOMMU MMIO 레지스터의 게스트 운영체제 액세스를 가로채고 IOMMU를 통해 해당 액세스를 수행한다.
일부 실시형태에서, IOMMU는 IOMMU의 로컬 캐시 메모리에 IOMMU MMIO 레지스터 세트의 개별 복사본 중 일부로부터 얻은 IOMMU MMIO 레지스터의 복사본의 정보를 저장한다. 예를 들어, IOMMU는 각 게스트 운영체제에 대한 개별 IOMMU MMIO 레지스터에서 최근 사용하거나 자주 사용한 값의 복사본을 저장해도 좋다.
메모리의 게스트 부분에 있는 버퍼 및 로그에 액세스할 때 쓰이는 IOMMU MMIO 레지스터 세트의 개별 복사본을 제공함으로써, IOMMU는 메모리의 게스트 부분에 있는 버퍼 및 로그의 직접 액세스를 가능하게 한다. 다시 말해 IOMMU는 기존 시스템처럼 버퍼 및 로그 액세스 핸들링을 하이퍼바이저에 의존할 필요가 없는 셈이다. 하이퍼바이저(소프트웨어로 구현)에서 IOMMU(하드웨어로 구현)에 대한 이와 같은 작업을 제거하면 작업 속도가 빨라지고 메모리 시스템 대역폭이 많이 필요하지 않으며 프로세서의 연산 기능 블록에 대한 부하가 줄어들어 전자 디바이스의 전체 성능이 향상한다. 전자 디바이스의 성능이 향상하므로 그에 따라 사용자 만족도도 높아진다.
전자 디바이스
도 4는 일부 실시형태에 따른 전자 디바이스(400)를 도시하는 블록도이다. 도 4에 도시한 바와 같이, 전자 디바이스(400)는 프로세서(402), 메모리(404), 대용량 저장소(406), 입출력(IO) 디바이스(408-412), 입출력(IO) 허브(414), 메모리 컨트롤러(416)를 포함한다.
프로세서(402)는 전자 디바이스(400)에서 연산 작업을 수행하는 기능 블록이다. 프로세서(402)는 코어 2개(418~420)를 포함하고, 각 코어는 중앙 처리 장치(CPU) 코어, 그래픽 처리 장치(GPU) 코어, 임베디드 프로세서, 주문형 집적회로(ASIC) 및/또는 그 외 연산 메커니즘과 같은 하나 이상의 연산 메커니즘을 포함한다. 프로세서(402)는 또한 코어(418~420)에 의한 메모리 액세스를 위한 주소 변환(예: 페이지 테이블 워크, 번역 색인 버퍼(translation lookaside buffer) 조회), 메모리 액세스 보호 등과 관련된 작업을 수행하는 기능 블록인 메모리 관리 유닛(MMU)(422)을 포함한다.
메모리(404)는 전자 디바이스(400)의 메모리(예: "메인" 메모리)의 작업을 수행하는 기능 블록이다. 메모리(404)는 메모리 회로에 저장된 데이터 및 명령어의 액세스(예: 독취, 기록, 검사, 삭제, 무효화 등)를 처리하기 위한 제어 회로와 전자 디바이스(400)의 그 외 기능 블록에서 사용하기 위한 데이터 및 명령어를 저장하는 동적 랜덤 액세스 메모리(DRAM), 이중 데이터 속도 동기 DRAM(DDR SDRAM) 및/또는 그 외 유형의 메모리 회로와 같은 하나 이상의 메모리 회로를 포함한다.
대용량 저장소(mass storage)(406)는 전자 디바이스(400)의 그 외 기능 블록들에서 사용하기 위한 데이터 및 명령어를 저장하는 고용량 비휘발성 저장 요소의 작업을 수행하는 기능 블록 및/또는 디바이스를 가리킨다. 대용량 저장소(406)는 고용량 반도체 메모리(예: 플래시 메모리), 디스크 드라이브(예: 하드 드라이브), 광학 드라이브 등 이거나 이를 포함할 수 있다. 대용량 저장소(406)에 저장한 데이터 및 명령어의 복사본은 전자 디바이스(400)의 그 외 기능 블록에서 사용할 수 있도록 획득하여 메모리(404)에 저장한다. 예를 들어, 일부 실시형태에서 데이터 및/또는 명령어는 소정 크기(예: 4kB, 2MB)의 블록 또는 "페이지"의 대용량 저장소(406)로부터 검색되고, 페이지는 그 외 기능 블록의 액세스를 위해 메모리(404)에 저장된다. 또한 페이지는 메모리(404)의 이용 가능한 위치에서 새로 생성해도 좋다(예: 연산 결과 등을 저장하려는 목적으로).
IO 디바이스(408~412)은 해당 IO 작업을 수행하는 기능 블록 및/또는 디바이스이다. 각 IO 디바이스(408~412)가 수행하는 IO 작업의 특정한 성질은 IO 디바이스의 특성에 따라 달라진다. 예를 들어, IO 디바이스(408~412)는 휴먼 인터페이스 디바이스, 네트워크 인터페이스 디바이스, 시청각 처리 또는 제공 디바이스, GPU, 센서 디바이스, 디스크 제어기, 주변 구성 요소 인터페이스(PCI) 디바이스, 범용 직렬 버스(USB) 디바이스 등을 포함해도 좋으며, 각 IO 디바이스는 사용자의 입력 수신(예: 키보드, 마우스), 네트워크에서의 데이터 수신 또는 전송 과 같은 관련 작업을 수행한다. IO 디바이스(408-412)는 전자 디바이스(400)의 그 외 기능 블록들에 데이터 및/또는 명령어를 제공하거나 그 외 기능 블록들로부터의 데이터 및/또는 명령어를 소비한다. 예를 들어, 일부 실시형태에서 IO 디바이스(408~412)는 게스트 메모리(428)의 메모리 페이지(즉 소정의 데이터 운영체제에 할당한 메모리 부분)에 있는 데이터에 액세스한다(즉 판독, 기록, 무효화 등).
IO 허브(414)는 IO 디바이스(408~412)와 전자 디바이스(400)의 그 외 기능 블록(예: 프로세서(402), 메모리(404)) 사이에서 인터페이스로 기능하는 입출력 허브의 작업을 수행하는 기능 블록이다. IO 허브(414)가 수행하는 작업은 IO 디바이스(408~412)로 향하는 통신이 목적지인 IO 디바이스에 도착하는 것, IO 디바이스(408~412)에서의 통신이 그 외 기능 블록에 적절하게 도착하는 것, 그 외 기능 블록에 대한 IO 디바이스(408~412)의 무허가 액세스 또는 그 반대를 안전하게 차단하는 것을 보장하기 위한 작업을 포함한다. 일부 실시형태에서 IO 허브(414)는 PCIe(Peripheral Component Interface Express) 버스와 HyperTransport Link®와 같이 다양한 통신 프로토콜을 사용하는 버스 사이에서 인터페이스를 제공하고, 그에 따라 관련 통신을 변환 또는 번역한다.
IO 허브(414)는 IO 디바이스(408~412)가 메모리(404)의 데이터 및/또는 명령어에 액세스하고 프로세서(402)(및 그에 의해 실행되는 게스트 운영체제)와 통신하는 등의 작업을 수행하는 기능 블록인 IOMMU(424)를 포함한다. 이들 실시형태에서, 데이터 및 명령어를 메모리(404)의 IO 디바이스(예: IO 디바이스(408))로 액세스해야 하는 경우, IO 디바이스는 IOMMU(424)에 메모리 액세스 요청(예: 직접 메모리 액세스 요청 또는 DMA)을 전송한다. 이어서 IOMMU(424)는 메모리 액세스 요청을 충족하기 위해 메모리(404)에 해당 요청을 전송한다. 예를 들어, 일부 실시형태에서 데이터를 메모리 액세스 요청에 기초하여 검색해야 하는 경우, IOMMU(424)는 메모리(404)(데이터가 메모리(404)에 존재하지 않는 경우 대용량 저장소(406))로부터 데이터를 획득하고 요청을 보낸 IO 디바이스로 전달한다. 일부 실시형태에서, IOMMU(424)는 IO 디바이스(408~412)가 사용하는 "가상" 또는 로컬 메모리 주소를 데이터가 실제로 위치하는 메모리(404)의 물리적 주소로 번역할 때 사용하는 페이지 테이블, 번역 색인 버퍼(translation lookaside buffer), 그 외 기능 블록을 포함한다.
해당 실시형태에서, IOMMU(424)는 가상 머신의 코어(418~420)가 실행하는 게스트 운영체제와 통신을 교환한다. 예를 들어, 일부 실시형태서, IOMMU(424)(또는 IOMMU(424)를 통한 IO 디바이스(408~412))는 게스트 운영 체제에 이벤트 및 주변 페이지 요청(PPR)을 전달한다. 일부 실시형태에서, IOMMU(424)는 게스트 운영체제에 메모리(404)의 공유 이벤트 로그를 통해 IO 페이지 오류(fault)(IO 디바이스(408~412)를 대신하는 페이지 테이블에 대한 것), IOMMU(424) 하드웨어 오류 등의 이벤트를 보고한다. 이들 실시형태에서, IOMMU(424)는 메모리(404)의 공유 게스트 PPR 로그를 통해 메모리 페이지 서비스 작업(즉 게스트 운영체제에 의해 액세스 가능한 메모리(404)의 페이지에 있거나 이에 연관된 작업)을 수행하고자, 주지의 주소 번역 서비스 또는 ATS 표준을 사용하는 주변 장치(IO 디바이스)로부터 온 PPR을 게스트 운영체제로 전달한다. 또다른 예로, 일부 실시형태에서, 게스트 운영 체제는 IOMMU(424)에 명령을 전달한다. 이들 실시형태에, 게스트 운영 체제는 메모리(404)의 공유 게스트 명령 버퍼를 통해 완료 대기(IOMMU(424)가 진행되기 전에 이전 명령을 완료하도록 강제하는 명령 장벽으로 기능), 디바이스 테이블 엔트리 무효화, IOMMU(424) 번역 색인 버퍼 엔트리 무효화 등, IOMMU(424) 및/또는 IO 디바이스(408~412) 제어를 위해 IOMMU(424)를 대상으로 명령을 발행한다.
일부 실시형태에서, IOMMU(424)는, IOMMU(424)와의 통신에 쓰이는 메모리 매핑 위치, 레지스터 등을 포함하는 인터페이스를 게스트 운영체제에 제공한다. 예를 들어, 일부 실시형태에서 IOMMU(424)는 게스트 운영체제가 값을 기록하고 IOMMU(424)가 값을 수신할 수 있는 메모리 매핑 입출력(MMIO) 메모리 위치 세트를 제공한다. 일부 실시형태에서, 메모리 위치, 레지스터 등을 게스트 운영체제가 가정한 대로 값을 저장하는 데 사용하는 대신 IOMMU(424)에서 간단하게 제시하는 방식으로 인터페이스를 가상화한다. 이들 실시형태에서 IOMMU(424)는 게스트 운영체제로부터 인터페이스를 통해 값을 수신할 수 있지만(예: IOMMU MMIO 주소 등으로 주소를 지정), 각 게스트 운영체제에 대해 메모리 위치, 레지스터 등에 값의 개별 복사본을 저장하기 위해 IOMMU 백업 저장소(426) 및/또는 메모리(404)의 그 외 위치를 사용한다. 게스트 운영체제 및 그 외 엔티티(예: 프로세서(402))와 통신하기 위해 IOMMU(424)가 액세스하는 메모리는 하기에서 더 상세하게 설명한다.
일부 실시형태에서, 도 4에서 도시하지는 않았으나, IOMMU(424)는 IOMMU(424)에 대한 데이터 또는 정보의 복사본을 저장하는 데 사용하는 로컬 캐시 메모리를 포함한다. 예를 들어, 일부 실시형태에서 캐시 메모리는 소정의 게스트 운영체제 및/또는 해당 게스트 운영체제에서 얻은 개별 값에 대한 IOMMU MMIO 레지스터의 값 세트와 같이, IOMMU 백업 저장소(426)에서 최근 사용하거나 자주 사용한 복사본을 저장하는 데 쓰인다. 캐시 메모리는 IOMMU 백업 저장소(426)보다 작으므로 IOMMU 백업 저장소(426)에 저장된 데이터의 및 정보의 일부(상대적으로 작을 가능성이 높다)만을 저장할 수 있는 용량(즉 메모리 위치)을 가지게 된다.
게스트 메모리(428)는 게스트 운영 체제가 사용할 데이터 및 정보를 저장하기 위해 해당 게스트 운영 체제가 사용하는 메모리(404)의 일부(예: 하나 이상의 연속적 또는 비연속적 페이지 혹은 메모리 블록)이다. 일반적으로, 게스트 메모리(428)는 게스트 운영체제 및/또는 그 외 엔티티가, 게스트 운영체제 및/또는 그 외 엔티티가 사용하는 임의의 형태의 데이터 및 정보를 저장하는 데 사용할 수 있다. 일부 실시형태에서, 게스트 메모리(428)는 보호를 받으며, 특정 엔티티의 게스트 메모리(428) 액세스만을 허용한다. 예를 들어, 해당 게스트 운영체제, 하이퍼바이저, 보안 프로세서 및/또는 전자 디바이스(400)의 운영체제는 게스트 메모리(428)의 액세스를 해당 게스트 운영체제, 그 외 지정된 디바이스 및/또는 기능 블록으로 한정함으로써 게스트 메모리(428)를 "보호"할 수 있다. 일부 실시형태에서, 게스트 메모리(428)은 암호화하거나 그 밖의 수단으로 미허가 엔티티의 액세스를 차단한다. 일부 실시형태에서, 게스트 메모리(428)는 게스트 운영체제와 IOMMU 사이의 통신에 쓰이는 데이터 구조(예: 테이블, 리스트)에 해당하는 게스트 이벤트 로그, 게스트 주변 페이지 요청(PPR) 로그, 게스트 명령 버퍼를 저장할 때 쓰인다. 게스트 이벤트 로그, 게스트 주변 페이지 요청(PPR) 로그, 게스트 명령 버퍼는 하기에서 상세하게 설명한다.
일부 실시형태에서, 요소 사이의 화살표 선이 도시하는 바와 같이, 통신 경로는 전자 디바이스(400)의 다양한 기능 블록(프로세서(402), 메모리 컨트롤러(416), 메모리(404) 등)을 연결한다. 통신 경로는 하나 이상의 버스, 와이어, 가이드 및/또는 그 외 연결, 나아가 컨트롤러, 패브릭 요소(스위치, 라우터 등), 회로 요소 등을 포함한다. 통신 경로는 기능 블록 사이에서 명령, 데이터, 제어 신호 및/또는 기타 정보를 라우팅하는 데 쓰인다. 예를 들어, 일부 실시형태에서 코히어런트 버스 패브릭(coherent bus fabric) 또는 인터커넥트(interconnect)는 IO 허브(414), 프로세서(402)(예: MMU(422)) 및 메모리(404) 사이를 연결한다. 전자 디바이스(400)의 일부 통신 경로들은 명확성을 위해 도 4에 도시하지 않았다.
일부 실시형태에서, 도 3의 전자 디바이스 하드웨어(310)는 프로세서(402) 및 메모리(404)와 같은 기능 블록 및 디바이스를 포함하고, IO 디바이스 하드웨어(314)는 IO 디바이스(408~412)와 같은 기능 블록 및 디바이스를 포함한다. 이들 실시형태에서, 도 3의 IOMMU(312) 및 도 4의 IOMMU(424)는 최소한 동일한 작업의 일부를 수행한다.
전자 디바이스(400)는 특정한 개수와 구성의 요소(예: 프로세서(402), 메모리(404) 등 기능 블록 및 디바이스)및 통신 경로로 도시한다. 그러나 전자 디바이스(400)는 예시를 위해 단순화한 것으로, 일부 실시형태에서는 전자 디바이스(400)에 있어서 요소 및/또는 통신 경로의 개수와 구성을 달리할 수 있다. 예를 들어, 전자 디바이스(400)는 전력 서브시스템, 디스플레이 등을 포함할 수 있다. 일반적으로 전자 디바이스(400)는 본원이 설명하는 작업을 충분히 수행할 수 있는 요소 및 통신 경로를 포함한다.
전자 디바이스(400)는 연산 작업을 수행하는 임의의 전자 디바이스이거나, 해당 디바이스의 일부일 수 있다. 예를 들어, 전자 디바이스(400)는 데스크톱 컴퓨터, 노트북 컴퓨터, 웨어러블 전자 디바이스, 태블릿 컴퓨터, 스마트 폰, 서버, 인공 지능 장치, 가상 또는 증강 현실 장비, 네트워크 기기, 장난감, 시청각 장비, 가전 제품, 제어기, 차량, 이들의 조합 등의 전자 디바이스이거나 해당 디바이스의 일부일 수 있다.
I OMMU가 액세스하는 메모리 부분
일부 실시형태에서, IOMMU는 본원에서 설명하는 작업을 수행하기 위해 메모리(예를 들어, 메모리(404))의 여러 부분에서 데이터 및 정보에 액세스한다. 이들 실시형태 중 일부에서, 메모리 부분은 IOMMU 백업 저장소(예: IOMMU 백업 저장소(426)), 게스트 메모리(예: 게스트 메모리(428)) 및/또는 하이퍼바이저 메모리를 포함한다. 도 5는 일부 실시형태에 따른 IOMMU가 액세스하는 메모리 부분을 도시하는 블록도이다. 도 5를 예시로 제시하고 있으나, 일부 실시형태에서는 메모리 및/또는 메모리 부분은 그 외 정보의 유형 및/또는 구성을 저장하기도 한다. 일반적으로, 메모리는 본원에 설명한 작업을 수행하기에 충분한 정보를 포함한다.
도 5에서 도시한 바와 같이, IOMMU 백업 저장소(500)는 ID 번역 테이블(502)을 포함한다. 일반적으로, ID 번역 테이블(502)은 게스트 운영체제로부터 IOMMU로의 통신에서 게스트 도메인ID 및/또는 디바이스 ID를 호스트 도메인 ID 및/또는 디바이스 ID로 번역 또는 전환하기 위해, 혹은 반대로 IOMMU에서 게스트 운영 체제로의 통신을 위해 IOMMU가 사용하는 정보를 포함한다. 도메인 ID 및 디바이스 ID는 2016년 12월 기준 AMD I/O 가상화기술(IOMMU) 사양 개정 제3판에 더 자세히 설명하고 있으며, 해당 사양은 상술한 바와 같이 본원에 원용되고 있다.
일부 실시형태에서, ID 번역 테이블(502)은 도메인 ID 매핑 테이블(504)로 도시된 도메인 ID 및 디바이스 ID 매핑 테이블(506)로 표시된 디바이스ID에 대한 별도의 테이블을 포함하되 별도의 테이블을 요구하지는 않는다(따라서 모든 번역이 단일 테이블에 포함 가능). 도메인 ID 매핑 테이블(504)은 엔트리 세트를 포함하며, 각 엔트리는 지정 호스트 도메인 ID와 연관되거나 관련된 게스트 도메인 ID의 식별 또는 표시를 저장하는 데 쓰인다. 디바이스 ID 매핑 테이블(506)은 엔트리 세트를 포함하며, 각 엔트리는 지정된 호스트 디바이스 ID와 연관되거나 관련된 게스트 디바이스ID의 식별 또는 표시를 저장하는 데 쓰인다. 작업 중에 게스트 또는 호스트 도메인 ID 및/또는 디바이스 ID가 통신에서 번역 또는 전환될 때, IOMMU는 대응하는 번역 또는 전환을 획득하기 위해 ID 번역 테이블(502)(즉 도메인 ID 매핑 테이블(504) 및/또는 디바이스 ID 매핑 테이블(506))에서 조회를 실시한다.
아울러 IOMMU 백업 저장소(500)는 게스트 제어(508)를 포함한다. 일반적으로, 게스트 제어(508)는 전자 디바이스의 게스트 운영체제에 대한 인터페이스 레지스터와 제어 레지스터에 저장되거나 제어 레지스터에서 얻은 값의 복사본을 포함한다. 게스트 제어(508)는, 각각의 지원 게스트 운영체제에 대해, IOMMU와 해당 게스트 운영체제 간의 상호 작용을 제어하는 게스트 운영체제 제어 레지스터 및/또는 게스트 인터페이스 레지스터(또는 적어도 레지스터에 저장한 값)의 복사본을 포함한다. 예를 들어, 게스트 제어(508)는, 각각의 게스트 운영체제에 대해, 게스트 운영체제에 대한 도메인 ID 및/또는 디바이스 ID 매핑을 IOMMU에 전달하는 데 쓰이는 맵 제어 레지스터를 포함할 수 있다.
IOMMU 백업 저장소(500)는 게스트 메모리 매핑 입출력(MMIO)(510)을 추가로 포함한다. 일반적으로, 게스트 MMIO(510)는 메모리(404)의 게스트 부분(예: 게스트 메모리(428))에서 게스트 운영체제에 대한 버퍼 및 로그(예: 게스트 명령 버퍼, 게스트 이벤트 로그 및 게스트 PPR 로그)에 액세스하는 데 사용되는 포인터 및 제어 정보를 포함한다. 구체적으로는, 게스트 MMIO(510)는 각각의 지원 게스트 운영체제에 대해, 메모리(404)의 게스트 부분에서 버퍼 및 로그의 액세스를 제어하는 데 쓰이는 값의 복사본을 포함한다. 예를 들어, 일부 실시형태에서 IOMMU는 2N개의 게스트 운영체제를 지원한다(상호 작용, 통신 처리 등). 여기서 N=10, 16 또는 그 외의 값일 수 있다. 따라서 게스트 MMIO(510)는 지원하는 각 게스트 운영체제에 대해 하나씩, 최대 2N개의 값 복사본을 포함한다. 해당 실시형태에서 액세스 제어에 쓰이는 값은 기존 디바이스의 IOMMU MMIO 레지스터에 저장한 값과 유사하지만, 지원하는 각 게스트 운영체제에 대해 별도의 값 세트를 유지한다. 또한 문제의 게스트 운영체제의 메모리(404) 내 게스트 부분에 해당한다(기존 디바이스의 IOMMU에 있는 단일 사본이 아님).
도 6은 일부 실시형태에 따른 게스트 MMIO(510)에 저장된 값을 도시하는 블록도이다. 도 6의 예시에서는, 소정의 게스트 운영체제에 대한 IOMMU MMIO 레지스터의 단일 완전 세트에 대한 값이, 단일 완전 세트를 전후하는 IOMMU MMIO 레지스터 인접 세트 두 개의 일부에 대한 값과 함께 표시된다. 도 6은 상술한 바와 같이 일부 실시형태에서 IOMMU 백업 저장소(426)가 소정의 게스트 운영체제와 연관된 값의 개별 세트 여럿을 포함하는 구성을 도시한다. 예시로 도 6을 들었지만, 일부 실시형태에서는 게스트 MMIO(510)가 그 외의 값 또는 구성을 달리한 값을 저장하기도 한다. 일반적으로 게스트 MMIO(510) 및/또는 그 외 엔티티는 본원에서 설명한 바와 같이 메모리의 게스트 부분에 있는 버퍼 및 로그에 충분히 액세스할 수 있는 정보를 저장한다.
게스트 MMIO(510)의 각 값 세트에 포함되는 값은 일반적으로 게스트 명령(CMD) 버퍼, 게스트 이벤트 로그, 게스트 운영체제용 게스트 PPR 로그와 연관된 값으로 그룹을 나눌 수 있다. 게스트 명령 버퍼의 경우, 값은 메모리(404)의 해당 게스트 부분에서 게스트 명령 버퍼의 엔드, 테일, 또는 최근에 기록한 엔트리를 나타내는 포인터 또는 그 외 레퍼런스인 명령 테일 포인터(600)를 포함한다. 다시 말해 명령 테일 포인터(600)는 메모리 주소와 같은 포인터 또는 레퍼런스, 예를 들어 메모리(404)의 게스트 부분에 있는 물리적 주소의 비트 전부 또는 일부를 보유하며, 이는 명령 버퍼의 테일 또는 가장 최근에 기록한 엔트리가 있는 위치를 나타낸다. 게스트 명령 버퍼의 값은 그 밖에도 명령 버퍼의 헤드 또는 베이스, 즉 메모리(404)의 해당 게스트 부분에서 명령 버퍼 및/또는 버퍼링된 명령이 시작하는 위치를 나타내는 포인터 또는 그 외 레퍼런스인 명령 헤드 포인터(602)를 포함한다. 게스트 명령 버퍼의 값은 또한 명령 버퍼의 현재 크기 또는 최대 크기, 예를 들어 엔트리의 수 또는 바이트를 나타내는 명령 길이(604)를 포함한다. 게스트 명령 버퍼의 값은 또한 명령 제어(606)를 포함한다. 명령 제어(606)은 메모리(404)의 해당 게스트 부분에 있는 게스트 운영체제 및/또는 명령 버퍼의 구성을 나타내는 비트(또는 그 조합)의 수를 가지는 비트의 세트 또는 시퀀스에 해당한다. 예를 들어 일부 실시형태에서 명령 제어(606)는 특정 명령 버퍼 관련 인터럽트의 활성화 여부, 명령 버퍼링 또는 처리 활성화(또는 비활성화/중지) 여부, 명령 버퍼에 존재하거나 허용 가능한 명령의 유형 등을 나타내는 비트를 포함한다. 한 예로, 일부 실시형태에서, 명령 제어(606)는 본원에 원용된 AMD I/O 가상화기술(IOMMU) 사양 개정 제3판에서 설명하는 것과 유사한 명령 버퍼의 제어값, 예를 들어 CmdWaitInt, CmdBufRun, CmdWaitInteEn, CmdBufEn 및/또는 그 외 값을 포함한다.
일부 실시형태에서는 명령 헤드 포인터(602)를 사용하여 이어서 독취할 명령 버퍼의 다음 엔트리/위치를 가리키고, 명령 테일 포인터(600)를 사용하여 명령 버퍼의 마지막/가장 최근에 추가한 엔트리/위치를 가리키는 방식으로 (명령 버퍼에 명령을 하나만 저장하는 경우 동일한 엔트리/위치일 수도 있다) 명령 버퍼를 링 버퍼로서 구현한다. 이들 실시형태에서 명령을 엔트리에서 독취하여 처리할 때, 명령 헤드 포인터(602)는 명령 헤드 포인터(602)와 명령 테일 포인터(600)가 동일한 엔트리 또는 인접 엔트리를 가리킬 때까지 한 엔트리씩 전진한다. 이들 실시형태 중 일부에서 명령 길이(604)는 명령 버퍼의 최대 길이를 저장한다. 링 버퍼 구현을 위해 포인터를 사용하는 방법은 당업계에서 주지의 방식이므로 여기서는 자세히 설명하지 않는다.
이벤트 로그의 경우, 게스트 MMIO(510)의 값, 즉 이벤트 테일 포인터(608), 이벤트 헤드 포인터(610), 이벤트 길이(612), 이벤트 제어(614)는, 메모리(404)의 해당 게스트 부분에 있는 이벤트 로그에 액세스할 때 쓰이는 값이라는 점만 제외하면 명령 버퍼에서 설명한 값과 기능 상에서 거의 동일하다. 이는 PPR 로그에서도 마찬가지인데, 게스트 MMIO(510)의 값, 즉 PPR 테일 포인터(616), PPR 헤드 포인터(618), PPR 길이(620), PPR 제어(622)는, 메모리(404)의 해당 게스트 부분에 있는 PPR 로그에 액세스할 때 쓰이는 값이라는 점만 제외하면 명령 버퍼에서 설명한 값과 기능 상에서 거의 동일하다.
일부 실시형태에서, 지원 가능한 게스트 운영체제의 수보다 적은 (훨씬 더 적을 수 있다) 게스트 운영체제가 소정의 시간에 전자 디바이스(400)에서 실행되며, 그 결과 이들 실시형태에서는 IOMMU 백업 저장소(500)를 조정하여 게스트 MMIO(510)을 저장하기에 충분한 공간을 확보하게 된다. 다시 말해, 게스트 운영체제가 초기화되면, 하이퍼바이저 및/또는 그 외 엔티티는 게스트 운영체제의 IOMMU MMIO 레지스터 값을 저장할 수 있도록 IOMMU 백업 저장소(500)(즉 게스트 MMIO(510))의 공간을 할당, 추가 또는 활성화한다.
일부 실시형태에서, 하이퍼바이저는 IOMMU 백업 저장소(500)에 대한 적어도 일부의 초기화 작업을 수행한다. 예를 들어 일부 실시형태에서, 하이퍼바이저는 메모리, 이를테면 메모리(404)의 연속 또는 분산 페이지를 IOMMU 백업 저장소의 저장에 할당한다. 상술한 바와 같이, 메모리(404)는 데이터 및 정보를 저장하고자 다양한 기능 블록(예: 코어(418~420) 등)이 사용하는 전자 디바이스(400)의 범용 메모리로, IOMMU의 단순한 로컬 메모리가 아니다. 따라서 이 작업은 IOMMU 백업 저장소 저장을 위해 전자 디바이스(400)의 "메인" 메모리에 공간을 할당하는 하이퍼바이저를 포함한다. 또다른 예로서, 일부 실시형태에서 하이퍼바이저는 IOMMU를 통해 각각의 활성화 게스트 운영체제에 대한 백업 저장소의 IOMMU MMIO 레지스터 복사본에 초기값을 기록한다. 따라서 하이퍼바이저는 각각의 활성화 게스트 운영체제에 대한 포인터 및 제어값의 초기값을 IOMMU 백업 저장소에 있는 IOMMU MMIO 레지스터의 각 복사본에, 예를 들어 게스트 운영체제가 가동할 때 기록하게 된다.
일부 실시형태에서, IOMMU 백업 저장소에 있는 IOMMU MMIO 레지스터 복사본은 사용 가능한 IOMMU MMIO 레지스터의 서브세트만을 포함한다. 이들 실시형태에서, 그 밖의 레지스터를 IOMMU이 직접 제공해도 좋다. 예를 들어, 일부 실시형태에서, IOMMU 제어값(예: IOMMU 활성화/비활성화 등), 페이지 테이블 기본 주소 등을 저장하는 IOMMU의 레지스터는 IOMMU가 제공한다. 일반적으로 게스트 운영체제용의 메모리 게스트 부분에 있는 버퍼 및 로그에 액세스할 때 쓰이지 않는 IOMMU MMIO 레지스터는 복사본으로 존재하지 않으나, 그 대신 각 레지스터의 단일 복사본을 IOMMU가 제공한다. 이들 실시형태 중 일부에서, 하이퍼바이저는 게스트 운영체제의 이들 IOMMU 레지스터를 에뮬레이트하지만, IOMMU의 레지스터에 대한 액세스는 IOMMU가 수신하고 처리한다.
도 5로 돌아가 보면, 게스트 메모리(512)는 게스트 운영체제를 위한 게스트 이벤트 로그(514), 게스트 주변 페이지 요청(PPR) 로그(516), 게스트 명령 버퍼(518)를 포함한다. 일반적으로, 게스트 이벤트 로그(514), 게스트 PPR 로그(516), 게스트 명령 버퍼(518)는 IOMMU 및/또는 게스트 운영체제에 의한 액세스를 위한 해당 이벤트, PPR 요청, 명령을 저장하는 데 쓰이는 메모리 구조(예: 리스트, 테이블, 버퍼 등)이다. 작업 중에 IOMMU는 게스트 메모리(512)의 게스트 이벤트 로그(514) 및 게스트 PPR 로그(516)의 대응 로그를 통해 게스트 운영체제와 이벤트 및 PPR을 통신으로 주고받는다. 또한, 게스트 운영체제는 게스트 메모리(512)의 게스트 명령 버퍼(518)에 있는 대응 명령 버퍼를 통해 IOMMU와 명령을 통신으로 주고받는다.
일부 실시형태에서, 전자 디바이스(400)에서 활성화된 각 게스트 운영체제는 게스트 운영체제가 사용하고 의해 사용하고 IOMMU가 액세스할 수 있는 게스트 명령 버퍼, 게스트 이벤트 로그, 주변 페이지 요청 로그를 포함하는, 메모리의 해당 게스트 부분(즉, 메모리(404)의 페이지)과 연관된다. 이는 게스트 메모리(512) 뒤의 추가 게스트 메모리(520~522)로서 도 5에 도시되어 있다.
하이퍼바이저 메모리(524)는 디바이스 테이블(526)을 포함한다. 일반적으로, 디바이스 테이블(526)은 전자 디바이스에 포함, 관련 및/또는 연결된 디바이스(실제/물리적 디바이스 또는 가상 디바이스일 수 있다)에 대한 디바이스 관련 정보를 저장하는 테이블이다. 디바이스 테이블(526)은 엔트리 세트를 포함하며, 각 엔트리는 페이지 테이블 및 인터럽트 테이블에 대한 포인터, 제어 및 구성 값, 기능 표시기, 모드 표시기, 도메인 ID, 보안 정보 및 설정 등 해당 디바이스에 대한 정보를 저장할 때 사용할 수 있다. 또한 해당 실시형태에서, 기존 디바이스 테이블과는 달리, 디바이스 테이블(526)의 각 엔트리는 디바이스와 통신하거나, 디바이스를 담당하거나, 그 외 방식으로 디바이스와 연관되는 게스트 운영체제에 대한 게스트 식별자 및 디바이스 ID를 포함한다. 작업 중에 IOMMU는 디바이스에 대한 정보를 결정하기 위해 디바이스 테이블을 사용하는 한편, 게스트 디바이스 ID를 호스트 디바이스 ID로 번역 또는 전환하기 위해 디바이스 ID 및/또는 게스트 식별자를 사용한다.
일부 실시형태에서, IOMMU 백업 저장소(500), 게스트 메모리(512) 및 하이퍼바이저 메모리(524) 및/또는 이들의 부분은, 전부 또는 일부가 인접하지 않으나 그 대신 메모리의 그 외 영역 또는 위치에 저장된다. 예를 들어, 게스트 이벤트 로그(514)의 기본 주소(즉 게스트 이벤트 로그 자체)는 메모리 내에서 게스트 PPR 로그(516)에서 멀리 떨어진 위치에 위치해도 좋다. 이 경우 게스트 이벤트 로그(514)는 도 5에 도시한 바와 같이 게스트 PPR 로그(516)와 인접하지 않는다.
일부 실시형태에서, IOMMU는 IOMMU가 액세스할 메모리 내의 다양한 데이터 및 정보의 메모리에서의 위치에 대한 포인터, 레퍼런스 및/또는 그 외 표시들을 포함하는 개인 주소 맵(private address map)을 포함한다. 예를 들어, IOMMU 개인 주소 맵은 게스트 이벤트 로그(514), 게스트 PPR 로그(516) 등에 대한 메모리의 기본 주소의 포인터를 포함할 수 있다. 이들 실시형태에서는, 메모리의 데이터 및 정보에 액세스하기 전에, IOMMU는 데이터 및 정보의 위치에 관하여 개인 주소 맵에서 조회를 실시하며, 혹은 사용하기 전에 해당 주소에 대하여 페이지 테이블 등을 이용해 번역을 실시해도 좋다.
일부 실시형태에서, 전자 디바이스(400)의 그 외 엔티티는, IOMMU 백업 저장소(500) 및/또는 그 일부(제어 비트 등)에 IOMMU를 통해 (예: IOMMU에 요청을 보냄) 액세스하며, 혹은 액세스 불가가된다. 예를 들어, 그 외 엔티티는 IOMMU 백업 저장소(500)의 데이터 및 정보 중 적어도 일부에, 해당 IOMMU MMIO 레지스터에 기록하거나 레지스터에서 독취하는 방식으로 액세스해도 좋다.
IOMMU 및 게스트 운영체제 통신
해당 실시형태에서, IOMMU(예: IOMMU(424))는 IOMMU(또는 IOMMU가 서비스하는 IO 디바이스)와 게스트 운영체제 사이의 통신을 핸들링한다. 도 7은 일부 실시형태에 따른 IOMMU(702)가 핸들링하는 게스트 운영체제(700)와 IOMMU(702) 사이의 통신을 도시하는 블록도이다. 도 7에서는 여러 요소를 특정한 방식으로 구성했으나 그 외의 실시형태에서는 요소의 수 또는 구성을 변경할 수 있다. 일반적으로, 해당 실시형태에서 IOMMU(702)는 본원에 설명한 작업을 가능하게 하기에 충분한 요소를 포함하거나 그에 액세스한다. 도 7에서는 여러 요소를 점선으로 도시했다. 이들 요소는 메모리(예: IOMMU 백업 저장소(500), 게스트 메모리(512) 등)에 저장하고 IOMMU(720), 게스트 운영체제(700) 및/또는 그 외 엔티티가 일반적인 메모리 액세스 기술을 이용하여 액세스하는 로그, 버퍼 등에 해당한다. 일부 실시형태에서, 게스트 운영 체제(700), IOMMU(702), 하이퍼바이저(704)는 도 3의 게스트 운영체제(302), IOMMU(312), 하이퍼바이저(306)와 유사하게 구성되지만, 필수 사항은 아니다.
도 7에서 도시한 바와 같이, 아울러 기존 시스템에 관한 도 2의 도시와는 달리, 해당 실시형태에서 IOMMU(702)와 게스트 운영체제(700)는 보다 직접적으로 통신을 주고받는다. 다시 말해, IOMMU(702)와 게스트 운영체제(700)는 메모리, 즉 게스트 운영체제(700)에 대한 메모리의 게스트 부분(예: 게스트 메모리(428))에 있는 게스트 이벤트 로그(514), 게스트 PPR 로그(516), 게스트 명령 버퍼(BUFF)(518)를 상호 통신으로 주고받는 것이다. 아울러 게스트 운영체제(700) 및 IOMMU(702)는 게스트 제어(508) 및 게스트 MMIO(510)를 사용하여 통신 수행 방식을 지시한다. 예를 들어, 일부 실시형태에서, IOMMU(702)는 게스트 운영체제(700)에 대한 게스트 이벤트 로그(514), 게스트 커맨드 버퍼(518) 및 게스트 PPR 로그(516)의 메모리 내 위치를 결정하기 위해 게스트 MMIO(510)의 포인터를 사용한다. 하이퍼바이저(704)는 개입하지 않거나, 최소한 통신을 완료하기 위한 작업의 일부 또는 전부에 관여하지 않는다. 예를 들어, 하이퍼바이저(704)는 상기 통신을 위한 도메인 ID 및 디바이스 ID 번역, 게스트 MMIO(510)의 포인터에 대한 액세스 및/또는 메모리의 게스트 부분에 있는 버퍼 및 로그에 대한 액세스 등의 작업을 수행하지 않는다. IOMMU(702)가 해당 작업을 수행한다. IOMMU(702)가 도메인 ID와 디바이스 ID를 번역하고 게스트 MMIO(510) 등에서 정보를 획득하므로, 해당 실시형태에는 게스트 운영체제(700)와 IOMMU(702) 간의 통신 중 적어도 일부를 처리하는 데 하이퍼바이저(704)를 사용하는 것을 피하고, 따라서 통신을 보다 신속하게 완료하여 프로세서(402)와 메모리(404) 등에 걸리는 부하를 줄일 수 있다.
작업 중에 예를 들어 명령을 사용하면, 게스트 운영체제(700)은 게스트 명령 버퍼(518)에 invalidate_IOMMU_pages 명령을 기록하고, 해당 명령으로 IOMMU(702)는 명령의 도메인 ID가 지정하는 바와 같이 IOMMU 번역 캐시 내 엔트리의 범위를 무효화한다. 다시 말해서, 게스트 운영체제는 메모리의 해당 게스트 부분에 있는 메모리 기록을 실시하여 게스트 명령 버퍼(518)의 다음 개방/이용 가능 엔트리를 업데이트해 invalidate_IOMMU_pages 명령에 대한 데이터(즉 명령을 나타내는 비트)를 포함하게 한다. 게스트 운영체제(700)는 IOMMU에 기록 명령을 전송하여 해당 IOMMU MMIO 레지스터에 있는 명령 버퍼 테일 포인터(예: 명령 테일 포인터(600))를 업데이트(예: 전진, 증분 등)해 게스트 명령체제(700)가 명령을 명령 버퍼에 썼음을 나타낸다. IOMMU(702)는 예를 들어 해당 게스트 명령 버퍼의 어드레스에 대한 기록을 스누핑(snooping)하고, 버퍼 테일 포인터 값의 변화를 감지하고, 게스트 운영체제(700)로부터 기록 명령을 수신하는 것 등을 통해 게스트 운영체제(700)의 명령 버퍼 테일 포인터 기록을 감지한다. 명령 버퍼 테일 포인터의 기록을 감지하면, IOMMU(702)는 명령 버퍼 헤드 포인터(예: 명령 헤드 포인터(602))의 값을 이용하여 메모리의 게스트 부분에 있는 명령 버퍼에서 다음 명령을 검색하고 , 처리용 명령을 준비한다(예: 명령에서 게스트 도메인 ID와 연관이 있는 호스트 도메인 ID를 교체). 이어서 IOMMU(702)는 명령을 처리한다. 해당 명령에 따라 IOMMU(702)는 호스트 도메인 ID이 표시하는 IOMMU(702)의 번역 캐시에 있는 엔트리의 범위를 무효화한다. IOMMU(702)는, IOMMU(702)가 게스트 PPR 로그(516)과 게스트 이벤트 로그(514)를 기록하고 게스트 운영체제(700)가 로그를 읽을 때, IOMMU(702)가 로그를 기록하도록 적어도 일부 유사한 작업을 수행하되, 순서는 역순이다.
하이퍼바이저(704)는 게스트 운영체제(700)와 IOMMU(702)의 통신 중 특정 부분, 예를 들어 게스트 도메인 ID를 호스트 도메인 ID로 번역하는 것에는 관여하지 않지만, 하이퍼바이저(704)와 게스트 운영체제(700) 및/또는 IOMMU(702)는 게스트 운영체제(700)와 IOMMU(702)의 통신과는 별개의 통신을 주고받아도 좋으며, 혹은 하이퍼바이저(704)는 게스트 운영체제(700) 및/또는 IOMMU(702)가 통신을 적합하게 처리하도록 하는 데 관여해도 좋다. 예를 들어, 하이퍼바이저(704)는 직접(예: 통신) 또는 간접적(예: 메모리 액세스 스누핑)으로, IOMMU(702) 또는 게스트 운영체제(700)가 특정 작업(예: 버퍼 또는 로그의 기록)을 이미 수행했는지 결정해도 좋으며, 게스트 운영체제(700) 및/또는 IOMMU(702)에 대한 인터럽트 시그널링, 플래그로 기능하는 공유 메모리 위치 업데이트 등의 작업을 실시해도 좋다. 상술한 바와 같이, 하이퍼바이저(704)는 IOMMU 백업 저장소 등을 초기화해도 좋다.
IOMMU MMIO 레지스터값을 이용하는 프로세스
해당 실시형태에서, IOMMU(예: IOMMU(702))는 게스트 운영체제(예: 게스트 운영체제(700))에 IOMMU MMIO 레지스터의 가상 복사본을 제공하기 위한 작업을 실시한다. 상술한 바와 같이 작업은 게스트 운영체제를 대신하여 IOMMU 백업 저장소에 저장된 IOMMU MMIO 레지스터의 해당 복사본에 액세스하는 것을 포함한다. 도 8은 일부 실시형태에 따라 IOMMU가 게스트 운영체제를 대신하여 IOMMU 백업 저장소에 있는 IOMMU MMIO 레지스터 복사본에 액세스할 때의 프로세스를 도시하는 플로우차트이다. 도 8에 도시된 작업은 일부 실시형태가 수행하는 작업의 일반적인 예시이다. 그 밖의 실시형태에서는 작업의 종류, 실행 순서, 작업을 실행하는 엔티티 또는 기능블록을 변경할 수 있다.
도 8이 도시하는 IOMMU MMIO 레지스터의 복사본에 액세스하기 위한 작업은 일반적이고 다양한 유형의 액세스, 예를 들어 독취, 기록, 무효화 등과 관련이 있다. 보다 구체적인 예를 도 9~10에 제시하였다. 도 9는 IOMMU MMIO 레지스터의 복사본을 기록하는 게스트 운영체제를, 도 10은 IOMMU MMIO 레지스터의 복사본을 독취하는 게스트 운영체제를 도시한다.
도 8의 작업은 IOMMU가 소정의 IOMMU MMIO 레지스터의 데이터에 액세스하는 게스트 운영체제에게서 통신을 수신할 때 시작한다(STEP 800). 액세스는 IOMMU MMIO 레지스터의 데이터를 독취하는 것일 수 있다. 이 경우 통신은 독취 요청이 되며, 액세스가 IOMMU MMIO 레지스터에 데이터를 기록하는 것이라면 기록 요청이 된다. 그 밖에도 무효화 등의 또다른 액세스일 수도 있다. 예를 들어 IOMMU는, 명령 버퍼 테일 포인터를 초기화 또는 업데이트할 목적으로 특정 데이터를 명령 버퍼 테일 포인터(예: 명령 테일 포인터(600))기록하도록 요청하는 게스트 운영체제에서 통신을 수신해도 좋다.
그런 다음 IOMMU는 IOMMU 백업 저장소에 있는 게스트 운영체제와 연관된 소정의 IOMMU MMIO 레지스터 복사본의 데이터에 대한 해당 액세스를 수행한다(STEP 802). IOMMU는 IOMMU MMIO를 가상화한다는 점에 주목한다. 다시 말해 게스트 운영체제(및 그 외 엔티티)에, 게스트 운영체제가 IOMMU에 있는 실제 MMIO 레지스터에 액세스한다는 환영을 제공하지만 실제로는 IOMMU는 각각의 지원 게스트 운영체제에 대하여 IOMMU 백업 저장소에 저장한 IOMMU MMIO 레지스터의 별도 복사본을 이용하는 것이다. 따라서 이 작업은 백업 저장소에서 IOMMU MMIO 레지스터 중 어느 복사본에 액세스할지를 결정하고 이어서 액세스를 실시하는 IOMMU를 포함한다.
도 9는 일부 실시형태에 따라 게스트 운영체제가 IOMMU 백업 저장소에 있는 IOMMU MMIO 레지스터 복사본에 기록하고 IOMMU가 해당 복사본에서 독취하는 프로세스를 도시하는 플로우차트이다. 도 9에 도시된 작업은 일부 실시형태가 수행하는 작업의 일반적인 예시이다. 그 밖의 실시형태에서는 작업의 종류, 실행 순서, 작업을 실행하는 엔티티 또는 기능블록을 변경할 수 있다.
도 9의 작업은 게스트 운영체제(예: 게스트 운영체제(700))이 메모리의 게스트 부분(예: 게스트 메모리(428))에 있는 명령 버퍼(예: 게스트 명령 버퍼(518))에 명령을 기록할 때 시작한다(STEP 900). 예를 들어, 일부 실시형태에서, 게스트 명령 버퍼는 메모리의 게스트 부분에 있는 복수의 엔트리를 포함하는 순환 버퍼로, 해당 작업은 게스트 운영체제가 게스트 명령 버퍼의 이용 가능한 다음 엔트리에 명령(예: 명령을 나타내는 비트 시퀀스)를 기록하는 것을 포함한다.
게스트 운영체제는 IOMMU(예: IOMMU(702))에 의한 처리를 필요로 하는 게스트 명령 버퍼에 명령을 추가했기 때문에, 해당 명령을 IOMMU에 알린다. 보다 구체적으로, 게스트 운영체제는 명령 버퍼 테일 포인터를 업데이트하기 위한 기록 요청을 발송한다. 기록 요청은 명령 버퍼 테일 포인터가 저장된 IOMMU MMIO 레지스터의 게스트 가상 주소로 디렉션한다(STEP 902). 해당 실시형태에서, 게스트 운영체제는 로컬 또는 "가상" 주소를 이용하여 IOMMU MMIO 레지스터에 액세스한다(실제 IOMMU 주소를 인식하지 못해도 좋다). 게스트 운영체제를 실행하는 프로세서의 메모리 관리유닛(MMU)이 게스트 가상 주소를 MMIO 레지스터가 위치한 IOMMU의 시스템 물리적 주소(즉 IOMMU MMIO 주소)로 번역한다(예: 게스트 운영체제에 대한 페이지 테이블에서 페이지 테이블 워크를 실시하여 번역할 수 있다). 상술한 바와 같이 IOMMU는 IOMMU MMIO 레지스터를 가상화한다. 때문에 MMU가 사용하는 시스템 물리적 주소는 게스트 운영체제에 대한 IOMMU MMIO의 복사본이 위치한 주소가 아니며, MMIO 레지스터의 액세스로서 IOMMU가 인식하는 IOMMU용의 인터페이스/애퍼처에 있는 주소이다. 따라서, MMU에서의 번역에 이어 MMU는 게스트 가상 주소와 연관되어 있는 IOMMU MMIO 주소(예: 시스템 물리적 주소)에서 IOMMU에게 기록 요청을 전달한다(STEP 904).
IOMMU MMIO 주소는 단순히 게스트 운영체제에서 액세스 요청을 수신하고자 IOMMU가 제공하는 주소이기 때문에, IOMMU 역시 번역을 실행하여 기록 요청을 기반으로 게스트 운영체제의 명령 버퍼 테일 포인터 복사본이 위치하는 메모리의 물리적 주소를 결정한다(STEP 906). 해당 작업 중에 IOMMU는 IOMMU 백업 저장소에서 액세스할 IOMMU MMIO 레지스터의 복사본을 지시하는 게스트 운영체제의 ID를 이용하여 메모리의 물리적 주소를 결정한다. 이 프로세스를 위해 IOMMU는 먼저 소정의 게스트 운영체제에 대한 식별자와 MMU에서 제공하는 시스템 물리적 주소를 기반으로, 알고리즘, 테이블 등을 이용하여 소정의 게스트 운영체제에 대한 IOMMU MMIO 레지스터 복사본의 IOMMU 가상 주소를 연산한다. 그런 다음 IOMMU는 하나 이상의 페이지 테이블을 이용해 IOMMU 가상 주소를 소정의 게스트 운영 체제에 대한 IOMMU MMIO 레지스터 복사본이 IOMMU 백업 저장소에 저장되어 있는 시스템 물리적 주소로 번역한다.
이어서 IOMMU는 메모리의 물리적 주소에 기록 요청으로부터 얻은 데이터를 저장하고, 게스트 운영체제에 대한 명령 버퍼 테일 포인터의 복사본을 업데이트한다(STEP 908). 다시 말해 IOMMU는 명령 버퍼 테일 포인터에 대한 업데이트 완료 주소의 비트 하나 이상, 엔트리 식별자, 실행 카운트 등의 데이터를, 게스트 운영체제에 연관된 명령 버퍼 테일 포인터의 복사본이 IOMMU 백업 저장소에 저장되어 있는 메모리 위치에 저장한다. 업데이트에 따라 명령 버퍼 테일 포인터는 직접 또는 간접적으로 명령이 게스트 운영체제에 기록되었음을 나타내며, 따라서 IOMMU의 처리를 기다리게 된다. 일부 실시형태에서, IOMMU, 게스트 운영체제 및/또는 그 외 엔티티는, 그 밖의 포인터 또는 표시기를 설정하여 명령이 게스트 명령 버퍼에서 처리 대기 상태임을, 또는 게스트 운영체제가 명령을 제공했음을 나타낸다. 예를 들어, 일부 실시예에서, IOMMU는 명령 대기 비트 세트를 각각의 지원 게스트 운영체제에 하나씩 포함한다. 명령 대기 비트는 게스트 운영체제에 대하여 설정되거나 지워져서 게스트 명령 버퍼에서 명령이 처리 대기 상태임을 나타낸다.
IOMMU는 기록 요청(또는 처리 대기 상태의 명령)을 검출하여, 명령 버퍼 헤드 포인터(예: 명령 헤드 포인터(602))의 복사본에서 얻은 데이터를 이용해 하나 이상의 후속 작업을 실행하고 게스트 명령 버퍼에 있는 명령을 처리한다(STEP 910). 예를 들어 일부 실시형태에서, 명령 버퍼 헤드 포인터의 복사본에 있는 값은, 메모리의 게스트 부분에서 게스트 명령 버퍼의 다음 엔트리가 위치하는 곳의 주소를 저장하고, IOMMU는 직접 또는 간접적으로 해당 주소를 사용하여 명령을 처리하기 전에 게스트 명령 버퍼에서 명령을 취득한다.
도 10는 일부 실시형태에 따라 IOMMU가 IOMMU 백업 저장소에 있는 IOMMU MMIO 레지스터 복사본에 기록하고 게스트 운영체제가 해당 복사본에서 독취하는 프로세스를 도시하는 플로우차트이다. 도 10에 도시된 작업은 일부 실시형태가 수행하는 작업의 일반적인 예시이다. 그 밖의 실시형태에서는 작업의 종류, 실행 순서, 작업을 실행하는 엔티티 또는 기능블록을 변경할 수 있다.
도 10의 작업은 IOMMU(예: IOMMU(702))가 게스트 운영체제에 대한 메모리의 게스트 부분(예: 게스트 메모리(428))에 있는 게스트 이벤트 로그(예: 게스트 이벤트 로그(514))에 이벤트를 기록할 때 시작한다(STEP 1000) 예를 들어, 일부 실시형태에서, 게스트 이벤트 로그는 메모리의 게스트 부분에 있는 복수의 엔트리를 포함하는 순환 버퍼로, 해당 작업은 IOMMU가 게스트 이벤트 로그의 이용 가능한 다음 엔트리에 이벤트(예: 이벤트를 나타내는 비트 시퀀스)를 기록하는 것을 포함한다.
간결성을 위해 도 10에는 도시하지 않았으나, 일부 실시형태에서 IOMMU는 먼저 이벤트 로그 테일 포인터의 복사본 및/또는 IOMMU 백업 저장소에 있는 게스트 운영체제와 연관된 그 외 IOMMU MMIO 포인터의 복사본에서 얻은 게스트 이벤트 로그 관련 정보를 먼저 취득한다. 이어서 IOMMU는 해당 정보를 사용해 STEP 1000을 실시한다. 예를 들어, 일부 실시형태에서 IOMMU는, IOMMU 백업 저장소에 있는 게스트 운영체제에 대한 이벤트 로그 테일 포인터의 복사본에서 얻은 게스트 이벤트 로그의 위치(또는 이용 가능한 엔트리)를 나타내는 직접 또는 간접적 표시(예: 물리적 주소 등)를 이용하여 게스트 이벤트 로그에 이벤트를 기록한다. 일부 실시형태에서는 게스트 이벤트 로그 관련 정보를 얻기 위해 IOMMU는 STEP 1002와 비슷한 방식으로 이벤트 로그 테일 포인터의 복사본 및/또는 그 외 IOMMU MMIO 포인터의 복사본에 대한 물리적 주소를 결정하고, 해당 물리적 주소를 이용하여 정보를 취득한다.
IOMMU는 게스트 운영체제에 의한 처리를 필요로 하는 이벤트를 게스트 이벤트 로그에 추가했기 때문에, 해당 이벤트를 게스트 운영체제에 알린다. 일부 실시형태에서, 게스트 운영체제에 알리는 것은 IOMMU 백업 저장소에 있는 게스트 운영체제에 대한 이벤트 로그 테일 포인터 복사본의 업데이트와, 게스트 운영체제에 인터럽트를 보내 게스트 운영체제에게 통지를 주는 것을 모두 포함한다. 따라서 IOMMU는 IOMMU 백업 저장소에 있는 게스트 운영체제에 대한 이벤트 로그 테일 포인터 복사본의 물리적 주소를 결정한다(STEP 1002). 해당 작업 중에 IOMMU는 IOMMU 백업 저장소에서 액세스할 IOMMU MMIO 레지스터의 복사본을 지시하는 게스트 운영체제의 ID와, 하나 이상의 IOMMU 개인 주소 테이블 및/또는 페이지 테이블을 이용하여 메모리의 물리적 주소를 결정한다. 이어서 IOMMU는 물리적 주소에 게스트 운영체제에 대한 명령 버퍼 테일 포인터의 복사본을 업데이트하는 데이터를 저장한다(STEP 1004). 다시 말해 IOMMU는 이벤트 로그 테일 포인터에 대한 업데이트 완료 주소의 비트 하나 이상, 엔트리 식별자, 실행 카운트 등의 데이터를, 게스트 운영체제에 연관된 이벤트 로그 테일 포인터의 복사본이 IOMMU 백업 저장소에 저장되어 있는 메모리 위치에 저장한다. 업데이트에 따라 이벤트 로그 테일 포인터는 직접 또는 간접적으로 이벤트가 이벤트 로그에 기록되었음을 나타내며, 따라서 게스트 운영체제의 처리를 기다리게 된다.
IOMMU는 또한 게스트 운영체제에 인터럽트를 전송한다. 인터럽트는 이벤트가 게스트 이벤트 로그에서 대기 중임을 표시한다(STEP 1006). 해당 작업에서, IOMMU는 게스트 운영체제와 연관된 가상 고급 프로그래밍 가능형 인터럽트 컨트롤러(vAPIC) 등을 통해 IOMMU와 게스트 운영체제 간에 인터럽트를 전달하는 인터럽트 메커니즘을 사용할 수 있다.
인터럽트 수신에 응답하여, 게스트 운영체제는 IOMMU에 독취 요청을 보내 이벤트 로그 헤드 포인트(예: 이벤트 헤드 포인터(610))에서 데이터를 독취한다. 독취 요청은 이벤트 로그 헤드 포인터가 저장되어 있는 IOMMU MMIO 레지스터의 게스트 가상 주소로 디렉션된다(STEP 1008). 해당 실시형태에서, 게스트 운영체제는 로컬 또는 "가상" 주소를 이용하여 IOMMU MMIO 레지스터에 액세스한다(실제 및/또는 가상 IOMMU 주소를 인식하지 못해도 좋다). 게스트 운영체제를 실행하는 프로세서의 메모리 관리유닛(MMU)이 게스트 가상 주소를 MMIO 레지스터가 위치한 IOMMU의 시스템 물리적 주소(즉 IOMMU MMIO 주소)로 번역한다(예: 게스트 운영체제에 대한 페이지 테이블에서 페이지 테이블 워크를 실시하여 번역할 수 있다). 상술한 바와 같이 IOMMU는 IOMMU MMIO 레지스터를 가상화한다. 때문에 MMU가 사용하는 시스템 물리적 주소는 게스트 운영체제에 대한 IOMMU MMIO의 복사본이 위치한 주소가 아니며, MMIO 레지스터의 액세스로서 IOMMU가 인식하는 IOMMU용의 인터페이스/애퍼처에 있는 주소이다. 따라서, MMU에서의 번역에 이어 MMU는 게스트 가상 주소와 연관되어 있는 IOMMU MMIO 주소(예: 시스템 물리적 주소)에서 IOMMU에게 독취 요청을 전달한다(STEP 1010).
IOMMU MMIO 주소는 단순히 게스트 운영체제에서 액세스 요청을 수신하고자 IOMMU가 제공하는 주소이기 때문에, IOMMU 역시 번역을 실행하여 독취 요청을 기반으로 게스트 운영체제의 이벤트 로그 헤드 포인터 복사본이 위치하는 메모리의 물리적 주소를 결정한다(STEP 1012). 해당 작업 중에 IOMMU는 IOMMU 백업 저장소에서 액세스할 IOMMU MMIO 레지스터의 복사본을 지시하는 게스트 운영체제의 ID를 이용하여 메모리의 물리적 주소를 결정한다. 이 프로세스를 위해 IOMMU는 먼저 소정의 게스트 운영체제에 대한 식별자와 MMU에서 제공하는 시스템 물리적 주소를 기반으로, 알고리즘, 테이블 등을 이용하여 소정의 게스트 운영체제에 대한 IOMMU MMIO 레지스터 복사본의 IOMMU 가상 주소를 연산한다. 그런 다음 IOMMU는 하나 이상의 페이지 테이블을 이용해 IOMMU 가상 주소를 소정의 게스트 운영 체제에 대한 IOMMU MMIO 레지스터 복사본이 IOMMU 백업 저장소에 저장되어 있는 시스템 물리적 주소로 번역한다.
이어서 IOMMU는 메모리 내의 물리적 주소에 위치하는 메모리 위치에서 독취 요청에 해당하는 데이터를 독취한다(STEP 1014). 다시 말해 IOMMU는 이벤트 로그 헤드 포인터에 대한 주소의 비트 하나 이상, 엔트리 식별자, 실행 카운트 등의 데이터를, 게스트 운영체제에 연관된 이벤트 로그 헤드 포인터의 복사본이 IOMMU 백업 저장소에 저장되어 있는 메모리 위치에서 독취한다. 이벤트 로그 헤드 포인터는 직접 또는 간접적으로 게스트 이벤트에 게스트 운영체제의 처리를 기다리는 다음 이벤트가 기록되었음을 나타낸다. 일부 실시형태에서, IOMMU, 게스트 운영체제 및/또는 그 외 엔티티는, 그 밖의 포인터 또는 표시기를 설정하여 이벤트가 게스트 이벤트 로그에서 처리 대기 상태임을, 또는 IOMMU가 이벤트를 제공했음을 나타낸다. 예를 들어, 일부 실시예에서, 게스트 운영체제 및/또는 하이퍼바이저는 이벤트 대기 비트 세트를 각각의 지원 게스트 운영체제에 하나씩 포함한다. 이벤트 대기 비트는 게스트 운영체제에 대하여 설정되거나 지워져서 게스트 이벤트 로그에서 이벤트가 처리 대기 상태임을 나타낸다.
이벤트 로그 헤드 포인터에서 데이터를 독취한 다음, IOMMU는 데이터를 게스트 운영체제에 반환한다(STEP 1016). 게스트 운영체제는 해당 데이터를 사용하여 하나 이상의 후속 처리를 실시해 게스트 이벤트 로그의 이벤트를 처리한다(STEP 1018). 예를 들어 일부 실시형태에서, 게스트 운영체제에 대한 이벤트 로그 헤드 포인터의 복사본은, 메모리의 게스트 부분에서 이벤트 로그의 엔트리가 위치하는 곳의 주소를 저장하고, 게스트 운영체제는 직접 또는 간접적으로 해당 주소를 사용하여 이벤트를 처리하기 전에 게스트 이벤트 로그에서 이벤트를 취득한다.
일부 실시형태에서 전자 디바이스(예: 전자 디바이스(400) 및/또는 그 일부)는 비일시적 컴퓨터 가독형 저장매체에 저장한 코드 및/또는 데이터를 사용하여 본원이 설명하는 작업의 일부 또는 전부를 수행한다. 보다 구체적으로는, 전자 디바이스는 컴퓨터 가독형 저장매체로부터 코드 및/또는 데이터를 독취하여, 해당 코드를 실행하거나 데이터를 사용하여 본원이 설명하는 작업을 실시한다. 컴퓨터 가독형 저장매체는 전자 디바이스가 사용할 수 있는 코드 및/또는 데이터를 저장하는 임의의 디바이스, 매체, 또는 이들의 조합이어도 좋다. 예를 들어 컴퓨터 가독형 저장매체는, 플래시 메모리, 랜덤 액세스 메모리(예: eDRAM, RAM, SRAM, DRAM, DDR4 SDRAM 등), 읽기 전용 메모리(ROM) 및/또는 자기/광학 저장매체(예: 디스크 드라이브, 자기 테이프, CD, DVD 등)를 포함하되, 이에 한정되지는 않는다.
일부 실시형태에서는 하나 이상의 하드웨어 모듈이 본원에서 설명한 작업을 수행한다. 예를 들어, 하드웨어 모듈은 하나 이상의 프로세서/ 코어/ 중앙처리장치(CPU)들, 주문형 직접회로(ASIC) 칩, 신경망 프로세서 또는 가속기, 필드 프로그래머블 게이트 어레이(FPGA), 컴퓨팅 유닛, 임베디드 프로세서, 그래픽 프로세서(GPU)/그래픽 코어, 파이프라인, 가속처리장치(APU), 캐시/캐시 컨트롤러, 메모리/메모리 컨트롤러, 기능 블록 및/또는 그 외 프로그래밍 가능 논리 디바이스를 포함하되 이에 한정되지는 않는다. 상기 하드웨어 모듈이 활성화되면, 하드웨어 모듈이 작업의 일부 또는 전부를 실시한다. 일부 실시형태에서, 하드웨어 모듈은 작업을 실시하기 위한 명령어(프로그램 코드, 펌웨어 등)를 실행하도록 구성되는 하나 이상의 범용 회로를 포함한다.
일부 실시형태에서, 본원에서 설명하는 구조 또는 메커니즘의 일부 또는 전부를 나타내는 데이터 구조(예: 전자 디바이스(400), IOMMU(424) 및/또는 그 일부)는 데이터베이스 또는 전자 디바이스로 독취하거나, 직접 또는 간접적으로 해당 구조 및 메커니즘을 포함하는 하드웨어의 제조에 사용이 가능한 그 외 데이터 구조를 포함하는 비일시적 컴퓨터 가독형 저장매체에 저장된다. 예를 들어, 데이터 구조는 Verilog 또는 VHDL과 같은 고수준 설계 언어(High Level Design Language, HDL)의 하드웨어 기능에 대한 동작 수준 기술(description) 또는 레지스터 전송 수준(Register-Transfer Level, RTL) 기술일 수 있다. 해당 기술은, 상기에 개시한 구조 및 메커니즘을 포함하는 하드웨어의 기능을 나타내는 합성 라이브러리로부터 게이트/회로 요소의 리스트를 포함하는 넷리스트를 생성하기 위해 기술을 합성할 수 있는 합성 툴로 판독할 수 있다. 이어서 넷리스트를 배치 또는 라우팅하여 마스크에 적용할 기하학적 형상을 설명하는 데이터 세트를 생성해도 좋다. 마스크는 상술한 구조 및 메커니즘에 대응하는 반도체 회로(예: 집적 회로)를 생성하는 각종 반도체 제조 단계에서 쓰일 수도 있다. 혹은, 컴퓨터 액세스가 가능한 저장매체 상의 데이터베이스는 (합성 라이브러리의 유무에 관계없이) 넷리스트, 데이터 세트, 때로는 그래픽 데이터 시스템(Graphic Data System: GDS) II 데이터여도 좋다.
본 명세서에서는 변수 또는 명시하지 않은 값(다시 말해, 값의 특정 인스턴스가 없는 값의 일반적인 설명)은 N과 같은 문자로 표기한다. 본 명세서는 여러 요소에 유사한 문자를 사용할 수 있지만, 이 경우 변수와 미지정값이 항상 같지는 않다. 다시 말해 일반 변수와 미지정값의 일부 또는 전체에 대해 의도한 변수량 또는 변수값이 달라질 수도 있다. 다시 말해 본 명세서에서 변수 및 미지정값을 나타내는 데 쓰이는 N과 그 외 문자는 반드시 상호 관련이 있지는 않다.
본 명세서에서 사용하는 표현인 "등(etc.)"은 하나 이상의 사례를 제시하기 위한 것이다. 다시 말해 등(etc.)과 연관이 있는 목록 중에서 "적어도 하나"의 요소에 해당한다는 뜻이다. 예를 들어, 전자 디바이스가 제 1작업, 제 2작업 등을 수행하는 경우, 전자 디바이스는 제 1작업, 제 2작업 및 기타 작업 중 적어도 하나를 수행한다. 아울러 등(etc.)과 관련이 있는 목록의 요소는 예시 중의 일부 집합에 지나지 않으며, 일부 실시형태는 개중 일부 실시예와는 일체의 상관이 없을 수도 있다.
실시형태의 상세한 설명은 예시만을 목적으로 한다. 실시형태는 독점적이지 않으며 본 발명은 실시형태에 한정되지 않는다. 따라서 당업자는 수정 및 변형을 용이하게 상도할 수 있을 것이다. 아울러 상기의 개시는 실시형태를 한정하지 않는다. 실시형태의 범위는 하기의 청구범위로 정의한다.

Claims (22)

  1. 전자 디바이스로서,
    게스트 운영체제를 실행하는 프로세서와,
    입출력 메모리 관리 유닛(IOMMU)과,
    지원 게스트 운영체제 세트의 각 게스트 운영체제에 대한 IOMMU 메모리 매핑 입출력(MMIO) 레지스터 세트의 개별 복사본을 포함하는 IOMMU 백업 저장소를 저장하는 메인 메모리를 포함하고,
    상기 IOMMU는
    소정의 IOMMU MMIO 레지스터의 데이터에 액세스하는 통신을 상기 게스트 운영체제에서 수신하고,
    상기 게스트 운영체제와 연관된 상기 IOMMU 백업 저장소에 있는 상기 소정의 IOMMU MMIO 레지스터 복사본의 데이터에 대한 해당 액세스를 수행하도록 구성되는, 전자 디바이스.
  2. 제1항에 있어서, 상기 소정의 IOMMU MMIO 레지스터의 데이터 액세스하는 통신을 상기 게스트 운영체제에서 수신하는 단계는,
    상기 프로세스의 메모리 관리 유닛(MMU)에서 상기 통신을 수신하며, 상기 MMU는 상기 게스트 운영체제로부터 상기 통신을 수신하고, 상기 소정의 IOMMU MMIO 레지스터와 연관된 IOMMU MMIO 주소의 상기 IOMMU에 상기 통신을 전달하는 단계를 포함하는, 전자 디바이스.
  3. 제2항에 있어서, 상기 데이터에 액세스하는 것은 상기 소정의 IOMMU MMIO 레지스터에 데이터를 저장하는 것을 포함하며, 상기 IOMMU는 또한
    상기 게스트 운영체제 및 하나 이상의 번역 테이블과 연관이 있는 도메인 식별자를 사용하여, 상기 IOMMU MMIO 주소에 근거해 상기 소정의 IOMMU MMIO 레지스터 복사본이 위치하는 상기 IOMMU 백업 저장소의 물리적 주소를 결정하고,
    상기 물리적 주소에 상기 게스트 운영체제와 연관된 상기 백업 저장소에 있는 상기 소정의 IOMMU MMIO 레지스터 복사본의 상기 데이터를 저장하도록 구성되는, 전자 디바이스.
  4. 제3항에 있어서, 상기 IOMMU는 또한,
    상기 백업 저장소에 있는 상기 소정의 IOMMU MMIO 레지스터 복사본에 상기 데이터를 저장하도록 하는 상기 통신을 감지하고,
    상기 통신 감지에 응답하여 상기 백업 저장소에 있는 상기 소정의 IOMMU MMIO 레지스터 복사본에서의 상기 데이터를 사용하여 하나 이상의 후속 처리 작업을 수행하도록 구성된, 전자 디바이스.
  5. 제2항에 있어서, 상기 데이터에 액세스하는 것은 상기 소정의 IOMMU MMIO 레지스터에서 데이터를 독취하는 것을 포함하며, 상기 IOMMU는 또한
    상기 게스트 운영체제 및 하나 이상의 번역 테이블과 연관이 있는 도메인 식별자를 사용하여, 상기 IOMMU MMIO 주소에 근거해 상기 소정의 IOMMU MMIO 레지스터 복사본이 위치하는 상기 IOMMU 백업 저장소의 물리적 주소를 결정하고,
    상기 물리적 주소에서 상기 게스트 운영체제와 연관된 상기 백업 저장소에 있는 상기 소정의 IOMMU MMIO 레지스터 복사본의 상기 데이터를 독취하고,
    상기 데이터를 상기 게스트 운영체제에 반환하도록 구성된, 전자 디바이스.
  6. 제1항에 있어서, 상기 IOMMU는 또한
    상기 게스트 운영체제 및 하나 이상의 번역 테이블과 연관이 있는 도메인 식별자를 사용하여 상기 소정의 IOMMU MMIO 레지스터 복사본이 위치하는 상기 IOMMU 백업 저장소의 물리적 주소를 결정하고,
    상기 물리적 주소에 상기 게스트 운영체제와 연관된 상기 백업 저장소에 있는 상기 소정의 IOMMU MMIO 레지스터 복사본의 상기 데이터를 저장함으로써, 상기 백업 저장소에 있는 상기 소정의 IOMMU MMIO 레지스터의 정보를 업데이트하도록 구성된, 전자 디바이스.
  7. 제1항에 있어서, 상기 백업 저장소에 있는 IOMMU MMIO 레지스터 세트의 각 복사본은 각각의 게스트 운영체제에 대하여,
    해당 게스트 운영체제의 버퍼 및 로그에 대한 포인터와,
    해당 게스트 운영체제에 대한 상기 버퍼 및 로그에 관련된 제어 필드를 저장하기 위한 메모리 위치를 포함하는, 전자 디바이스.
  8. 제1항에 있어서, 상기 프로세서는 추가로 하이퍼바이저를 실행하고, 상기 하이퍼바이저는
    상기 IOMMU 백업 저장소의 초기화 작업 동안, 상기 IOMMU 백업 저장소 저장에 사용할 상기 메인 메모리에 있는 메모리의 연속 또는 분산 페이지를 할당하는, 전자 디바이스.
  9. 제8항에 있어서, 상기 하이퍼바이저는 상기 게스트 운영체제에 대하여, 상기 백업 저장소에 있는 상기 게스트 운영체제용의 대응 IOMMU MMIO 레지스터 세트에 포함되지 않는 적어도 일부 IOMMU MMIO 레지스터를 추가로 에뮬레이트하고,
    상기 IOMMU를 경유하여 에뮬레이트한 IOMMU MMIO 레지스터의 정보에 액세스하는, 전자 디바이스.
  10. 제9항에 있어서, 상기 하이퍼바이저에 의해 에뮬레이트한 상기 IOMMU MMIO 레지스터는 번역 테이블 기본 주소 및 IOMMU 제어 레지스터를 포함하는, 전자 디바이스.
  11. 제1항에 있어서, 상기 IOMMU에 캐시 메모리를 추가로 포함하고, 상기 IOMMU는,
    상기 IOMMU MMIO 레지스터 세트의 개별 복사본 중 일부로부터 IOMMU MMIO 레지스터의 정보 복사본을 캐시하는, 전자 디바이스.
  12. 게스트 운영체제를 실행하는 프로세서와, 입출력 메모리 관리 유닛(IOMMU)과, IOMMU 백업 저장소를 저장하는 메인 메모리를 포함하고, 상기 IOMMU 백업 스토어는 지원 게스트 운영체제 세트의 각 게스트 운영체제에 대한 IOMMU 메모리 매핑 입출력(MMIO) 레지스터 세트의 개별 복사본을 포함하는 전자 디바이스에서, IOMMU 레지스터 복사본을 게스트 운영체제에 제공하는 방법에 있어서,
    상기 IOMMU에 의해, 소정의 IOMMU MMIO 레지스터의 데이터에 액세스하는 통신을 상기 게스트 운영체제에서 수신하는 단계와,
    상기 IOMMU에 의해, 상기 게스트 운영체제와 연관된 상기 IOMMU 백업 저장소에 있는 상기 소정의 IOMMU MMIO 레지스터 복사본의 데이터에 대한 해당 액세스를 수행하는 단계를 포함하는, 방법.
  13. 제12항에 있어서, 상기 소정의 IOMMU MMIO 레지스터의 데이터 액세스하는 통신을 상기 게스트 운영체제에서 수신하는 단계는,
    상기 프로세스의 메모리 관리 유닛(MMU)에서 상기 통신을 수신하며, 상기 MMU는 상기 게스트 운영체제로부터 상기 통신을 수신하고, 상기 소정의 IOMMU MMIO 레지스터와 연관된 IOMMU MMIO 주소의 상기 IOMMU에 상기 통신을 전달하는 단계를 포함하는, 방법.
  14. 제13항에 있어서, 상기 데이터에 액세스하는 것은 상기 소정의 IOMMU MMIO 레지스터에 데이터를 저장하는 것을 포함하며, 상기 방법은 또한,
    상기 IOMMU에 의해, 상기 게스트 운영체제 및 하나 이상의 번역 테이블과 연관이 있는 도메인 식별자를 사용하여, 상기 IOMMU MMIO 주소에 근거해 상기 소정의 IOMMU MMIO 레지스터 복사본이 위치하는 상기 IOMMU 백업 저장소의 물리적 주소를 결정하는 단계와,
    상기 IOMMU에 의해, 상기 물리적 주소에 상기 게스트 운영체제와 연관된 상기 백업 저장소에 있는 상기 소정의 IOMMU MMIO 레지스터 복사본의 상기 데이터를 저장하는 단계를 포함하는, 방법.
  15. 제 14 항에 있어서,
    상기 IOMMU에 의해, 상기 백업 저장소에 있는 상기 소정의 IOMMU MMIO 레지스터 복사본에 상기 데이터를 저장하도록 하는 상기 통신을 감지하는 단계와,
    상기 IOMMU에 의해, 상기 통신 감지에 응답하여 상기 백업 저장소에 있는 상기 소정의 IOMMU MMIO 레지스터 복사본에서의 상기 데이터를 사용하여 하나 이상의 후속 처리 작업을 수행하는 단계를 포함하는, 방법.
  16. 제13항에 있어서, 상기 데이터에 액세스하는 것은 상기 소정의 IOMMU MMIO 레지스터에서 데이터를 독취하는 것을 포함하며, 상기 방법은 또한,
    상기 IOMMU에 의해, 상기 게스트 운영체제 및 하나 이상의 번역 테이블과 연관이 있는 도메인 식별자를 사용하여, 상기 IOMMU MMIO 주소에 근거해 상기 소정의 IOMMU MMIO 레지스터 복사본이 위치하는 상기 IOMMU 백업 저장소의 물리적 주소를 결정하는 단계와,
    상기 IOMMU에 의해, 상기 물리적 주소에서 상기 게스트 운영체제와 연관된 상기 백업 저장소에 있는 상기 소정의 IOMMU MMIO 레지스터 복사본의 상기 데이터를 독취하는 단계와,
    상기 IOMMU에 의해, 상기 데이터를 상기 게스트 운영체제에 반환하는 단계를 포함하는, 방법.
  17. 제12항에 있어서,
    상기 IOMMU에 의해,
    상기 게스트 운영체제 및 하나 이상의 번역 테이블과 연관이 있는 도메인 식별자를 사용하여 상기 소정의 IOMMU MMIO 레지스터 복사본이 위치하는 상기 IOMMU 백업 저장소의 물리적 주소를 결정하고,
    상기 물리적 주소에 상기 게스트 운영체제와 연관된 상기 백업 저장소에 있는 상기 소정의 IOMMU MMIO 레지스터 복사본의 상기 데이터를 저장함으로써, 상기 백업 저장소에 있는 상기 소정의 IOMMU MMIO 레지스터의 정보를 업데이트하는 단계를 추가로 포함하는, 방법.
  18. 제12항에 있어서, 상기 백업 저장소에 있는 IOMMU MMIO 레지스터 세트의 각 복사본은 각각의 게스트 운영체제에 대하여,
    해당 게스트 운영체제의 버퍼와 로그에 대한 포인터, 및
    해당 게스트 운영체제에 대한 상기 버퍼 및 로그에 관련된 제어 필드를 저장하기 위한 메모리 위치를 포함하는, 방법.
  19. 제12항에 있어서, 상기 프로세서는 하이퍼바이저를 실행하고, 상기 방법은,
    상기 하이퍼바이저에 의해, 상기 IOMMU 백업 저장소의 초기화 작업 동안, 상기 IOMMU 백업 저장소 저장에 사용할 상기 메인 메모리에 있는 메모리의 연속 또는 분산 페이지를 할당하는 단계를 추가로 포함하는, 방법.
  20. 제19항에 있어서,
    상기 하이퍼바이저에 의해, 상기 게스트 운영체제에 대하여, 상기 백업 저장소에 있는 상기 게스트 운영체제용의 대응 IOMMU MMIO 레지스터 세트에 포함되지 않는 적어도 일부 IOMMU MMIO 레지스터를 추가로 에뮬레이트하는 단계와,
    상기 하이퍼바이저에 의해, 상기 IOMMU를 경유하여 에뮬레이트한 IOMMU MMIO 레지스터의 정보에 액세스하는 단계를 추가로 포함하는, 방법.
  21. 제20항에 있어서, 상기 하이퍼바이저에 의해 에뮬레이트한 상기 IOMMU MMIO 레지스터는 번역 테이블 기본 주소 및 IOMMU 제어 레지스터를 포함하는, 방법.
  22. 제12항에 있어서, 상기 IOMMU에 캐시 메모리를 추가로 포함하고, 상기 방법은,
    상기 IOMMU에 의해, 상기 IOMMU MMIO 레지스터 세트의 개별 복사본 중 일부로부터 IOMMU MMIO 레지스터의 정보 복사본을 캐시하는 단계를 추가로 포함하는, 방법.
KR1020217042281A 2019-05-27 2020-05-25 게스트 운영체제에 입출력 메모리 관리 유닛 레지스터 복사본을 제공하는 방법 KR20220001016A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/423,077 US10909053B2 (en) 2019-05-27 2019-05-27 Providing copies of input-output memory management unit registers to guest operating systems
US16/423,077 2019-05-27
PCT/US2020/034455 WO2020243043A1 (en) 2019-05-27 2020-05-25 Providing copies of input-output memory management unit registers to guest operating systems

Publications (1)

Publication Number Publication Date
KR20220001016A true KR20220001016A (ko) 2022-01-04

Family

ID=73549697

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217042281A KR20220001016A (ko) 2019-05-27 2020-05-25 게스트 운영체제에 입출력 메모리 관리 유닛 레지스터 복사본을 제공하는 방법

Country Status (6)

Country Link
US (2) US10909053B2 (ko)
EP (1) EP3977286A4 (ko)
JP (1) JP7564830B2 (ko)
KR (1) KR20220001016A (ko)
CN (1) CN113906389A (ko)
WO (1) WO2020243043A1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10380039B2 (en) * 2017-04-07 2019-08-13 Intel Corporation Apparatus and method for memory management in a graphics processing environment
US11301402B2 (en) * 2020-04-30 2022-04-12 Red Hat, Inc. Non-interrupting portable page request interface
US12020053B2 (en) 2021-03-29 2024-06-25 Red Hat, Inc. Exposing untrusted devices to virtual machines

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7035963B2 (en) * 2000-12-27 2006-04-25 Intel Corporation Method for resolving address space conflicts between a virtual machine monitor and a guest operating system
JP4346850B2 (ja) 2001-01-23 2009-10-21 インターナショナル・ビジネス・マシーンズ・コーポレーション Osイメージごとに論理分割された論理分割データ処理システム
JP4322232B2 (ja) * 2005-06-14 2009-08-26 株式会社ソニー・コンピュータエンタテインメント 情報処理装置、プロセス制御方法、並びにコンピュータ・プログラム
US8291180B2 (en) * 2008-03-20 2012-10-16 Vmware, Inc. Loose synchronization of virtual disks
US8386745B2 (en) * 2009-07-24 2013-02-26 Advanced Micro Devices, Inc. I/O memory management unit including multilevel address translation for I/O and computation offload
US9535849B2 (en) 2009-07-24 2017-01-03 Advanced Micro Devices, Inc. IOMMU using two-level address translation for I/O and computation offload devices on a peripheral interconnect
US8347294B2 (en) * 2009-10-14 2013-01-01 Oracle International Corporation Automated administration using composites of atomic operations
US8635385B2 (en) 2010-07-16 2014-01-21 Advanced Micro Devices, Inc. Mechanism to handle peripheral page faults
US20120167082A1 (en) 2010-12-23 2012-06-28 Sanjay Kumar Direct sharing of smart devices through virtualization
US8719464B2 (en) 2011-11-30 2014-05-06 Advanced Micro Device, Inc. Efficient memory and resource management
US9424199B2 (en) 2012-08-29 2016-08-23 Advanced Micro Devices, Inc. Virtual input/output memory management unit within a guest virtual machine
US9134954B2 (en) * 2012-09-10 2015-09-15 Qualcomm Incorporated GPU memory buffer pre-fetch and pre-back signaling to avoid page-fault
US20160077981A1 (en) * 2014-09-12 2016-03-17 Advanced Micro Devices, Inc. Method and Apparatus for Efficient User-Level IO in a Virtualized System
CN106155933B (zh) 2016-07-06 2019-02-05 乾云众创(北京)信息科技研究院有限公司 一种基于KSM及Pass-through相结合的虚拟机内存共享方法
US10459850B2 (en) * 2016-09-20 2019-10-29 Advanced Micro Devices, Inc. System and method for virtualized process isolation including preventing a kernel from accessing user address space
US10013199B2 (en) 2016-11-15 2018-07-03 Red Hat Israel, Ltd. Translation bypass by host IOMMU for systems with virtual IOMMU
WO2018176360A1 (en) * 2017-03-31 2018-10-04 Intel Corporation Scalable interrupt virtualization for input/output devices
US10140148B1 (en) 2017-08-30 2018-11-27 Red Hat Israel, Ltd. Copy based IOMMU emulation for out-of-process emulated devices

Also Published As

Publication number Publication date
JP7564830B2 (ja) 2024-10-09
EP3977286A4 (en) 2023-06-14
JP2022534977A (ja) 2022-08-04
US20200379927A1 (en) 2020-12-03
US20220269621A1 (en) 2022-08-25
EP3977286A1 (en) 2022-04-06
CN113906389A (zh) 2022-01-07
US10909053B2 (en) 2021-02-02
WO2020243043A1 (en) 2020-12-03

Similar Documents

Publication Publication Date Title
US7613898B2 (en) Virtualizing an IOMMU
US7383374B2 (en) Method and apparatus for managing virtual addresses
US11341059B2 (en) Using multiple memory elements in an input-output memory management unit for performing virtual address to physical address translations
US9798487B2 (en) Migrating pages of different sizes between heterogeneous processors
KR20220061983A (ko) 입출력 메모리 관리 유닛으로부터 게스트 운영 시스템으로의 인터럽트 제공
US20220269621A1 (en) Providing Copies of Input-Output Memory Management Unit Registers to Guest Operating Systems
JP2024503259A (ja) 入出力デバイスによってアクセス可能なメモリのページの移行
KR20230162100A (ko) 계층형 메모리 관리를 오프로드하기 위한 방법들 및 장치들
JP7520843B2 (ja) 入出力メモリ管理ユニットによるドメイン識別子及びデバイス識別子の変換
CN114080587A (zh) 输入-输出存储器管理单元对访客操作系统缓冲区和日志的访问
US12086447B2 (en) Systems and methods for reducing instruction code memory footprint for multiple processes executed at a coprocessor