KR20140102695A - 효율적 메모리 및 자원 관리 - Google Patents

효율적 메모리 및 자원 관리 Download PDF

Info

Publication number
KR20140102695A
KR20140102695A KR1020147016579A KR20147016579A KR20140102695A KR 20140102695 A KR20140102695 A KR 20140102695A KR 1020147016579 A KR1020147016579 A KR 1020147016579A KR 20147016579 A KR20147016579 A KR 20147016579A KR 20140102695 A KR20140102695 A KR 20140102695A
Authority
KR
South Korea
Prior art keywords
memory
iommu
data
pointer
guest
Prior art date
Application number
KR1020147016579A
Other languages
English (en)
Other versions
KR101861297B1 (ko
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 KR20140102695A publication Critical patent/KR20140102695A/ko
Application granted granted Critical
Publication of KR101861297B1 publication Critical patent/KR101861297B1/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/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • 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
    • 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/109Address translation for multiple virtual address spaces, e.g. segmentation
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/651Multi-level translation tables

Abstract

본 시스템은 포인터를, 메모리 내 데이터에 액세스하는 것과 연관되어, 입/출력 메모리 관리 유닛(IOMMU)을 통해 입/출력(I/O) 디바이스에 패스하는 것을 가능하게 한다. I/O 디바이스는 데이터를 로컬 I/O 디바이스 메모리에 복사함이 없이 IOMMU를 통해 메모리 내 데이터에 액세스한다. I/O 디바이스는, I/O 디바이스가 비용 드는 복사 없이 메모리에 액세스하게 되도록, 포인터에 기반하여 메모리 내 데이터 상에 동작을 수행할 수 있다.

Description

효율적 메모리 및 자원 관리{EFFICIENT MEMORY AND RESOURCE MANAGEMENT}
본 발명은 일반적으로는 컴퓨팅 시스템에 관한 것이다. 더 구체적으로는, 본 발명은 컴퓨팅 시스템 내 가상 어드레스 공간의 공유에 관한 것이다.
단위 출력 및/또는 비용당 GPU(그래픽 프로세싱 유닛)의 전형적 성능에 기인하여 일반 계산에 GPU를 사용하려는 소망이 최근 더더욱 현저하게 되었다. 일반적으로 GPU에 대한 계산 능력은 대응하는 중앙 프로세싱 유닛(CPU) 플랫폼의 능력을 초과하는 레이트로 성장하였다. 이러한 성장은, 모바일 컴퓨팅 시장 및 그 필요한 지원 서버/기업 시스템의 폭발적 증가와 결합하여, 특정 품질의 소망 사용자 경험을 제공하도록 사용되어 왔다. 결과적으로, 데이터 병렬 컨텐트를 갖는 작업부하를 실행하기 위해 CPU 및 GPU의 조합된 사용은 볼륨 기술이 되고 있다.
그렇지만, 전통적으로 GPU는 그래픽의 가속에만 이용가능한 제약된 프로그래밍 환경에서 동작하여 왔다. 이들 제약은 GPU가 CPU만큼 풍부한 프로그래밍 에코시스템을 갖지 않았다는 사실로부터 유발되었다. 그래서, 그 사용은, 그래픽 및 비디오 애플리케이션 프로그래밍 인터페이스(API)를 다루는데 이미 익숙한, 2차원(2D) 및 3차원(3D) 그래픽 및 소수의 최첨단 멀티미디어 애플리케이션으로 대부분 한정되어 왔다.
멀티-벤더 지원형 OpenCL® 및 DirectCompute®, 표준 API 및 지원 툴의 출현으로, 전통적 애플리케이션에서 GPU의 제한은 전통적 그래픽 너머로 미치게 되었다. OpenCL 및 DirectCompute가 유망한 시작이기는 하지만, CPU 및 GPU의 조합이 대부분의 프로그래밍 태스크에 CPU만큼 유동적으로 사용되도록 하는 환경 및 에코시스템을 생성하는데 남아있는 난관이 많이 있다.
기존 컴퓨팅 시스템은 흔히 다중 프로세싱 디바이스를 포함한다. 예를 들어, 일부 컴퓨팅 시스템은 단일 칩 패키지에 또는 별개의 칩들 상에 CPU 및 GPU 둘 다를 포함할 수 있다(예를 들어, CPU는 마더보드에 위치할 수 있고 GPU는 그래픽 카드에 위치할 수 있다). 그렇지만, 이들 배열 둘 다는 여전히 - 모두 전력 소모를 최소화하면서 (i) 효율적 스케줄링, (ii) 프로세스 간 서비스 품질(QoS) 보증 제공, (iii) 프로그래밍 모델, (iv) 다중 표적 명령어 세트 아키텍처(ISA)로의 컴파일링, 및 (v) 별개의 메모리 시스템과 연관된 중요한 도전과제를 포함하고 있다.
예를 들어, 개별 칩 배열은 시스템 및 소프트웨어 아키텍처가 각각의 프로세서에 대해 칩 대 칩 인터페이스를 이용하여 메모리에 액세스하도록 강제한다. 이들 외부 인터페이스(예를 들어, 칩 대 칩)는 이종 프로세서를 협력시키는데 메모리 레이턴시 및 전력 소모에 악영향을 미치는 한편, 별개 메모리 시스템(즉, 별개 어드레스 공간) 및 드라이버 관리형 공유 메모리는 미세 분담에 허용가능하지 않게 되는 오버헤드를 생성한다.
또 다른 예에 있어서, 다중 프로세서에 의해 액세스되는 메모리 내 저장된 일부 이미지는 소망 레벨의 품질로 저장되지 않을 수 있다. 예를 들어, 이미지의 사진 품질, 콘트라스트, 오리엔테이션(예를 들어, 회전) 등이 틀릴 수 있다. 전형적으로, 디스플레이되기 이전에 조작을 필요로 하는 메모리 내 거주 이미지 데이터가 있으면, 이러한 이미지 데이터는 그것이 조작될 수 있는 I/O 디바이스의 메모리에 복사되고 그 후 그것들이 인쇄될 수 있도록 메모리에 다시 복사되어야 한다. 이러한 프로세스는 시간-소비적이고, 예를 들어, 저장되는 이미지 데이터의 품질을 감소시킬 수 있다.
그래서 필요로 되는 것은 다중 프로세서가 공유 메모리 내 저장된 데이터에 액세스하기 위한 효율적 저장 방식이다.
GPU, 가속화된 프로세싱 유닛(APU), 및 그래픽 프로세싱 유닛의 범용 사용(GPGPU)은 이 분야에서 일반적으로 사용되는 용어이지만, "가속화된 프로세싱 디바이스(APD)"라는 표현은 더 넓은 표현이라고 생각된다. 예를 들어, APD는 종래 CPU, 종래 GPU, 및/또는 그 조합과 같은 자원에 관하여 가속화된 방식으로 그래픽 프로세싱 태스크, 데이터 병렬 태스크, 또는 네스팅된 데이터 병렬 태스크를 가속화하는 것과 연관된 그들 기능 및 계산을 수행하는 소프트웨어 및/또는 하드웨어의 어느 협력 모음을 지칭한다.
더 구체적으로, 본 발명의 실시예는 IOMMU 효율적 메모리 및 자원 관리를 위한 방법, 시스템, 및 컴퓨터 가독 매체에 관한 것이다. 일 실시예에 있어서, 메모리 내 데이터에 액세스하는 것과 연관된 포인터는 입/출력 메모리 관리 유닛(IOMMU)을 통해 입/출력(I/O) 디바이스에 패스된다. I/O 디바이스는 로컬 I/O 디바이스 메모리 내에 데이터를 복사함이 없이 IOMMU를 통해 메모리 내 데이터에 액세스한다. I/O 디바이스는 포인터에 기반하여 메모리 내 데이터 상에 동작을 수행한다.
본 발명의 추가적 특징 및 이점과 더불어, 본 발명의 다양한 실시예의 구조 및 동작은 수반 도면을 참조하여 아래에 더 상세하게 설명된다. 본 발명은 여기에서 설명되는 특정 실시예로 한정되는 것은 아니다. 그러한 실시예는 여기에서 예시의 목적으로만 제시된다. 부가적 실시예는 여기에 포함된 가르침에 기반하여 관련 업계(들)의 당업자에게 명백할 것이다.
여기에 편입되어 명세서의 일부를 형성하는 수반 도면은 본 발명을 예시하며, 그 설명과 함께, 더욱 본 발명의 원리를 설명하고 관련 업계의 당업자가 본 발명을 하고 사용 가능하게 하는 역할을 한다. 본 발명의 다양한 실시예는 도면을 참조하여 아래에 설명되며, 유사한 참조 숫자는 곳곳에서 유사한 구성요소를 지칭하는데 사용된다.
도 1은 본 발명의 실시예에 따른 프로세싱 시스템의 예시적 블록 선도,
도 2는 도 1에 예시된 APD의 예시적 블록 선도,
도 3a는 본 발명의 일 실시예에 따라 IOMMU 네스팅된 페이징 트랜잭션 시스템의 제1 계층의 예시적 블록 선도,
도 3b는 일 실시예에 따라 IOMMU 네스팅된 페이징 트랜잭션 시스템의 제2 계층의 예시적 블록 선도,
도 4는 본 발명의 실시예가 적용될 수 있는 종래의 메모리 및 I/O 디바이스 관계의 블록 선도,
도 5는 본 발명의 실시예가 적용될 수 있는 직접 디바이스 할당 스킴의 블록 선도,
도 6은 본 발명의 실시예가 적용될 수 있는 I/O 디바이스 페이지 폴팅 및 해결 스킴의 예시도, 및
도 7은 본 발명에 따라, 효율적 메모리 및 자원 관리를 예시하는 흐름도의 블록 선도.
이하의 상세한 설명에 있어서, "하나의 실시예", "일 실시예", "예시적 실시예" 등의 언급은 설명되는 실시예가 특정 특징, 구조 또는 특성을 포함하지만, 모든 실시예가 그 특정 특징, 구조 또는 특성을 반드시 포함하지는 않을 수 있음을 나타낸다. 더욱, 그러한 문구는 반드시 동일 실시예를 지칭하는 것은 아니다. 더욱, 일 실시예와 연관하여 특정 특징, 구조 또는 특성이 설명될 때, 명시적으로 설명되든 아니든 다른 실시예와 연관하여 그러한 특징, 구조 또는 특성에 영향을 미치는 것이 당업자의 지식 내에 있는 것으로 된다.
"본 발명의 실시예"라는 용어는 본 발명의 모든 실시예가 논의되는 특징, 이점 또는 동작 모드를 포함하는 것을 요구하지는 않는다. 대체 실시예가 본 발명의 범위로부터 벗어남이 없이 고안될 수 있고, 본 발명의 주지의 엘리먼트는 상세히 설명되지 않을 수 있거나 본 발명의 관련 상세를 모호하게 하지 않도록 생략될 수 있다. 부가적으로, 여기서 사용되는 용어는 특정 실시예를 설명하는 목적을 위한 것일 뿐이고 본 발명을 한정하려는 의도는 아니다. 예를 들어, 여기서 사용되는 바와 같이, 단수 형태 "a", "an" 및 "the"는, 맥락이 명확하게 다르게 나타내지 않는 한, 복수 형태 역시 포함하려는 의도이다. 용어 "구성된다", "구성되는", "포함한다" 및/또는 "포함하는"은, 여기서 사용될 때, 서술된 특징, 정수, 단계, 동작, 엘리먼트 및/또는 컴포넌트의 존재를 특정하지만, 하나 이상의 다른 특징, 정수, 단계, 동작, 엘리먼트, 컴포넌트 및/또는 그 그룹의 존재 또는 부가를 못하게 하지는 않음을 더욱 이해할 것이다.
도 1은 CPU(102) 및 APD(104)를 포함하는 통합된 컴퓨팅 시스템(100)의 전형적 예시이다. CPU(102)는 하나 이상의 단일 또는 멀티 코어 CPU를 포함할 수 있다. 본 발명의 일 실시예에 있어서, 시스템(100)은, 통합된 프로그래밍 및 실행 환경을 제공하도록 CPU(102) 및 APD(104)를 조합하여, 단일 실리콘 다이 또는 패키지 상에 형성된다. 이러한 환경은 APD(104)가 일부 프로그래밍 태스크에 대해 CPU(102)만큼 유동적으로 사용될 수 있게 한다. 그렇지만, CPU(102) 및 APD(104)가 단일 실리콘 다이 상에 형성되는 것이 본 발명의 절대적 요건은 아니다. 일부 실시예에서는, 그것들이 별개로 형성되거나 동일 또는 다른 기판 상에 장착되는 것이 가능하다.
하나의 예에 있어서, 시스템(100)은 또한 메모리(106), 운영 체제(OS)(108), 및 통신 기반구조(109)를 포함한다. OS(108) 및 통신 기반구조(109)는 아래에서 더 상세하게 논의된다.
시스템(100)은 또한 커널 모드 드라이버(KMD)(110), 소프트웨어 스케줄러(SWS)(112), 및 입/출력 메모리 관리 유닛(IOMMU)과 같은 메모리 관리 유닛(116)을 포함한다. 시스템(100)의 컴포넌트는 하드웨어, 펌웨어, 소프트웨어 또는 그 어느 조합으로 구현될 수 있다. 당업자는 시스템(100)이 도 1에 도시된 실시예에 도시된 것에 부가하여 또는 그와는 다른 하나 이상의 소프트웨어, 하드웨어 및 펌웨어 컴포넌트를 포함할 수 있음을 인식할 것이다.
하나의 예에 있어서, KMD(110)와 같은 드라이버는 전형적으로 하드웨어가 접속하는 컴퓨터 버스 또는 통신 서브시스템을 통해 디바이스와 통신한다. 호출 프로그램이 드라이버 내 루틴을 인보크할 때, 드라이버는 디바이스에 커맨드를 발행한다. 디바이스가 데이터를 다시 드라이버에 보내고 나면, 드라이버는 원래 호출 프로그램 내 루틴을 인보크할 수 있다. 하나의 예에 있어서, 드라이버는 하드웨어-종속적이고 운영-체제-특정적이다. 그것들은 통상 어느 필요한 비동기식 시간-종속적 하드웨어 인터페이스에 요구되는 인터럽트 취급을 제공한다. 디바이스 드라이버는, 특히 현대 윈도우즈 플랫폼 상에서, 커널-모드(링 0)로 또는 사용자-모드(링 3)로 실행될 수 있다. 사용자 모드로 드라이버를 실행하는 주요 이점은 개선된 안정성인데, 좋지 않게 쓰인 사용자 모드 디바이스 드라이버는 커널 메모리를 덮어씀으로써 시스템과 충돌할 수 없기 때문이다. 다른 한편으로, 사용자/커널-모드 트랜지션은 통상 상당한 성능 오버헤드를 부과하고, 그로써 낮은 레이턴시 및 높은 스루풋 요건에 대하여 사용자 모드-드라이버를 금지한다. 커널 공간은 시스템 호출의 사용을 통해서만 사용자 모듈에 의해 액세스될 수 있다. UNIX 쉘 또는 다른 GUI 기반 애플리케이션과 같은 최종 사용자 프로그램은 사용자 공간의 일부분이다. 이들 애플리케이션은 커널 지원된 기능을 통해 하드웨어와 대화한다.
CPU(102)는 제어 프로세서, 필드 프로그램가능한 게이트 어레이(FPGA), 주문형 반도체(ASIC), 또는 디지털 신호 프로세서(DSP) 중 하나 이상(도시하지 않음)을 포함할 수 있다. CPU(102)는, 예를 들어, 컴퓨팅 시스템(100)의 동작을 제어하는, OS(108), KMD(110), SWS(112) 및 애플리케이션(111)을 포함하는 제어 로직을 실행한다. 이러한 예시적 실시예에 있어서, CPU(102)는, 하나의 실시예에 의하면, 예를 들어, CPU(102) 및 APD(104)와 같은 다른 프로세싱 자원을 가로질러 그 애플리케이션과 연관된 프로세싱을 분산시킴으로써 애플리케이션(111)의 실행을 개시 및 제어한다.
APD(104)는, 다른 것들 중에서도, 예를 들어 특히 병렬 프로세싱에 적합할 수 있는 그래픽 동작 및 다른 동작과 같이 선택된 기능에 대해 커맨드 및 프로그램을 실행한다. 일반적으로, APD(104)는 픽셀 동작, 기하구조 계산, 및 디스플레이할 이미지 렌더링과 같이 그래픽 파이프라인 동작을 실행하는데 빈번하게 사용될 수 있다. 본 발명의 다양한 실시예에 있어서, APD(104)는 CPU(102)로부터 수신된 커맨드 또는 명령어에 기반하여 계산 프로세싱 동작을 또한 실행할 수 있다.
예를 들어, 커맨드는 명령어 세트 아키텍처(ISA)에 정의되지 않고 통상 하드웨어의 고유 피스 또는 주어진 ISA로부터의 명령어 세트에 의해 성취되는 특수 명령어로서 생각될 수 있다. 커맨드는 디스패치 프로세서, 커맨드 프로세서 또는 네트워크 컨트롤러와 같은 특수 프로세서에 의해 실행될 수 있다. 다른 한편으로, 명령어는, 예를 들어, 컴퓨터 아키텍처 내 프로세서의 단일 동작으로 생각될 수 있다. 하나의 예에 있어서, 2개의 ISA 세트를 사용할 때, 일부 명령어는 x86 프로그램을 실행하도록 사용되고 일부 명령어는 APD/GPU 계산 유닛 상에서 커널을 실행하도록 사용된다.
예시적 실시예에 있어서, CPU(102)는 선택된 커맨드를 APD(104)에 송신한다. 이들 선택된 커맨드는 병렬 실행을 처리할 수 있는 그래픽 커맨드 및 다른 커맨드를 포함할 수 있다. 또한 계산 프로세싱 커맨드를 포함할 수 있는 이들 선택된 커맨드는 CPU(102)와 실질적으로 독립적으로 실행될 수 있다.
APD(104)는, 국한되는 것은 아니지만, 하나 이상의 단일 명령 다중 데이터(SIMD) 프로세싱 코어와 같은 그 자신의 계산 유닛(도시하지 않음)을 포함할 수 있다. 여기서 지칭되는 바와 같이, SIMD는 그 자신의 데이터 및 공유 프로그램 카운터를 각각 갖는 다중 프로세싱 엘리먼트 상에서 동시에 커널이 실행되는 수학 파이프라인 또는 프로그래밍 모델이다. 모든 프로세싱 엘리먼트는 정확히 똑같은 명령어 세트를 실행한다. 예측의 사용은 작업-항목이 각각의 발행된 커맨드에 대해 참가하게 또는 하지 않게 할 수 있다.
하나의 예에 있어서, 각각의 APD(104)는 계산 유닛은 하나 이상의 스칼라 및/또는 벡터 부동-소수점 유닛 및/또는 산술 및 로직 유닛(ALU)을 포함할 수 있다. APD 계산 유닛은 또한 역-제곱근 유닛 및 사인/코사인 유닛과 같이 특수 목적 프로세싱 유닛(도시하지 않음)을 포함할 수 있다. 하나의 예에 있어서, APD 계산 유닛은 여기서는 일괄하여 셰이더 코어(122)라고 지칭된다.
하나 이상의 SIMD를 갖는 것은, 일반적으로, APD(104)를 그래픽 프로세싱에서 공통적인 것과 같은 데이터-병렬 태스크의 실행에 이상적으로 적합하게 한다.
픽셀 프로세싱과 같은 일부 그래픽 파이프라인 동작, 및 다른 병렬 계산 동작은 동일한 커맨드 스트림 또는 계산 커널이 입력 데이터 엘리먼트의 스트림 또는 모음에 수행될 것을 요구할 수 있다. 동일 계산 커널의 각자의 인스턴스 생성은 그러한 데이터 엘리먼트를 병렬로 프로세싱하기 위해 셰이더 코어(122) 내 다중 계산 유닛에서 동시에 실행될 수 있다. 여기서 지칭되는 바와 같이, 예를 들어, 계산 커널은 프로그램 내 선언되고 APD/GPU 계산 유닛 상에서 실행되는 명령어를 포함하는 함수이다. 이러한 함수는 또한 커널, 셰이더, 셰이더 프로그램, 또는 프로그램이라고 지칭된다.
하나의 예시적 실시예에 있어서, 각각의 계산 유닛(예를 들어, SIMD 프로세싱 코어)은 입중계 데이터를 프로세싱하도록 특정 작업-항목의 각자의 인스턴스 생성을 실행할 수 있다. 작업-항목은 커맨드에 의해 디바이스 상에 인보크된 커널의 병렬 실행의 모음 중 하나이다. 작업-항목은 계산 유닛 상에서 실행하는 작업-그룹의 일부분으로서 하나 이사의 프로세싱 엘리먼트에 의해 실행될 수 있다.
작업-항목은 그 글로벌 ID 및 로컬 ID에 의해 모음 내 다른 실행과 구별된다. 하나의 예에 있어서, 단일 SIMD 엔진 상에서 함께 동시에 실행하는 작업그룹 내 작업-항목의 서브세트는 웨이브프론트(136)라고 지칭될 수 있다. 웨이브프론트의 폭은 하드웨어 SIMD 엔진의 특성이다. 여기서 지칭되는 바와 같이, 작업그룹은 단일 계산 유닛 상에서 실행하는 관련 작업-항목의 모음이다. 그룹 내 작업-항목은 동일 커널을 실행하고 로컬 메모리 및 작업-그룹 배리어를 공유한다.
작업그룹으로부터의 모든 웨이브프론트는 동일 SIMD 엔진 상에서 프로세싱된다. 웨이브프론트를 가로지르는 명령어는 한번에 하나씩 발행되고, 모든 작업-항목이 동일 제어 흐름을 따를 때, 각각의 작업-항목은 동일 프로그램을 실행한다. 실행 마스크 및 작업-항목 예측은 웨이브프론트 내 발산 제어 흐름을 가능하게 하도록 사용되고, 여기서 각각의 개개의 작업-항목은 실제로는 커널을 통해 고유 코드 경로를 취할 수 있다. 부분적으로 파퓰레이팅된 웨이브프론트는 작업-항목의 완전 세트가 웨이브프론트 시작 시간에 이용가능하지 않을 때 프로세싱될 수 있다. 또한 웨이브프론트는 워프, 벡터 또는 스레드라고 지칭될 수 있다.
커맨드는 웨이브프론트에 대해 한번에 하나씩 발행될 수 있다. 모든 작업-항목이 동일 제어 흐름을 따를 때, 각각의 작업-항목은 동일 프로그램을 실행할 수 있다. 하나의 예에 있어서, 실행 마스크 및 작업-항목 예측은 발산 제어 흐름을 가능하게 하도록 사용되어 각각의 개개의 작업-항목은 실제로는 커널 드라이버를 통해 고유 코드 경로를 취할 수 있다. 부분적 웨이브프론트는 작업-항목의 완전 세트가 시작 시간에 이용가능하지 않을 때 프로세싱될 수 있다. 예를 들어, 셰이더 코어(122)는 미리 결정된 수의 웨이브프론트(136)를 동시에 실행할 수 있고, 각각의 웨이브프론트(136)는 미리 결정된 수의 작업-항목을 포함한다.
시스템(100) 내에서, APD(104)는 그래픽 메모리(130)와 같이 그 자신의 메모리를 포함한다. 그래픽 메모리(130)는 APD(104)에서의 계산 동안의 사용을 위한 로컬 메모리를 제공한다. 셰이더 코어(122) 내 개개의 계산 유닛(도시하지 않음)은 그들 자신의 로컬 데이터 스토어(도시하지 않음)를 가질 수 있다. 일 실시예에 있어서, APD(104)는 로컬 그래픽 메모리(130)로의 액세스와 더불어, 메모리(106)로의 액세스도 포함한다. 다른 실시예에 있어서, APD(104)는 메모리(106)와는 별개로 그리고 APD(104)에 직접 부착된 동적 램(DRAM) 또는 다른 그러한 메모리(도시하지 않음)로의 액세스를 포함할 수 있다.
도시된 예에 있어서, APD(104)는 또한 하나 또는 (n)개의 커맨드 프로세서(CP)(124)를 포함한다. CP(124)는 APD(104) 내 프로세싱을 제어한다. CP(124)는 또한 메모리(106) 내 커맨드 버퍼(125)로부터 실행될 커맨드를 검색하고 APD(104) 상의 그들 커맨드의 실행을 조정한다.
하나의 예에 있어서, CPU(102)는 애플리케이션(111)에 기반한 커맨드를 적합한 커맨드 버퍼(125)에 입력한다. 여기서 지칭되는 바와 같이, 애플리케이션은 CPU 및 APD 내 계산 유닛 상에서 실행할 프로그램 부분들의 조합이다.
복수의 커맨드 버퍼(125)는 APD(104) 상에서의 실행을 위해 스케줄링되는 각각의 프로세스로 유지될 수 있다.
CP(124)는 하드웨어, 펌웨어 또는 소프트웨어, 또는 그 조합으로 구현될 수 있다. 일 실시예에 있어서, CP(124)는 스케줄링 로직을 포함하는 로직을 구현하기 위해 마이크로코드를 갖는 축소된 명령어 세트 컴퓨터(RISC) 엔진으로서 구현된다.
APD(104)는 또한 하나 또는 (n)개의 디스패치 컨트롤러(DC)(126)를 포함한다. 본 출원에 있어서, 디스패치라는 용어는 계산 유닛 세트 상의 작업그룹 세트에 대해 커널의 실행의 시작을 개시하도록 컨텍스트 상태를 사용하는 디스패치 컨트롤러에 의해 실행되는 커맨드를 지칭한다. DC(126)는 셰이더 코어(122)에서 작업그룹을 개시하는 로직을 포함한다. 일부 실시예에 있어서, DC(126)는 CP(124)의 일부분으로서 구현될 수 있다.
또한 시스템(100)은 APD(104) 상에서의 실행을 위해 실행 리스트(150)로부터 프로세스를 선택하도록 하드웨어 스케줄러(HWS)(128)를 포함한다. HWS(128)는 라운드 로빈 방법론을 사용하여, 우선순위 레벨을 사용하여, 또는 다른 스케줄링 정책에 기반하여 실행 리스트(150)로부터 프로세스를 선택할 수 있다. 예를 들어, 우선순위 레벨을 동적으로 결정될 수 있다. HWS(128)는 또한, 예를 들어, 새로운 프로세스를 부가함으로써 그리고 실행-리스트(150)로부터 현존 프로세스를 삭제함으로써, 실행 리스트(150)를 관리하는 기능성을 포함할 수 있다. HWS(128)의 실행 리스트 관리 로직은 때로는 실행 리스트 컨트롤러(RLC)라고 지칭된다.
본 발명의 다양한 실시예에 있어서, HWS(128)가 RLC(150)로부터 프로세스의 실행을 개시할 때, CP(124)는 대응하는 커맨드 버퍼(125)로부터 커맨드를 검색 및 실행하기를 시작한다. 일부 경우에 있어서, CP(124)는, CPU(102)로부터 수신된 커맨드와 대응하는, APD(104) 내 실행될 하나 이상의 커맨드를 발생시킬 수 있다. 일 실시예에 있어서, CP(124)는, 다른 컴포넌트와 함께, APD(104) 및/또는 시스템(100)의 자원의 이용을 개선 또는 최대화하는 방식으로 APD(104) 상의 커맨드의 우선순위결정 및 스케줄링을 구현한다.
APD(104)는 인터럽트 발생기(146)를 포함할 수 있거나 그로의 액세스를 가질 수 있다. 인터럽트 발생기(146)는 페이지 폴트와 같은 인터럽트 이벤트가 APD(104)에 의해 마주쳐질 때 OS(108)를 인터럽트하도록 APD(104)에 의해 구성될 수 있다. 예를 들어, APD(104)는 위에서 언급된 페이지 폴트 인터럽트를 생성하도록 IOMMU(116) 내 인터럽트 발생 로직에 의존할 수 있다.
APD(104)는 또한 셰이더 코어(122) 내 현재 실행 중인 프로세스를 선취하기 위한 선취 및 컨텍스트 스위치 로직(120)을 포함할 수 있다. 컨텍스트 스위치 로직(120)은, 예를 들어, 프로세스를 정지시키고 그 현재 상태(예를 들어, 셰이더 코어(122) 상태 및 CP(124) 상태)를 저장하는 기능성을 포함한다.
여기서 지칭되는 바와 같이, 상태라는 용어는 초기 상태, 중간 상태, 및 최종 상태를 포함할 수 있다. 초기 상태는 출력 데이터 세트를 생성하기 위해 머신이 프로그램에 따라 입력 데이터 세트를 프로세싱하는 시작 포인트이다. 예를 들어, 프로세싱이 포워드 진행을 가능하게 하도록 수개 포인트에 저장될 필요가 있는 중간 상태가 있다. 이러한 중간 상태는 때로는 어떤 다른 프로세스에 의해 인터럽트될 때 나중 시간에 실행의 계속을 허용하도록 저장된다. 또한 출력 데이터 세트의 일부분으로서 기록될 수 있는 최종 상태가 있다.
선취 및 컨텍스트 스위치 로직(120)은 또한 또 다른 프로세스를 APD(104) 내로 컨텍스트 스위칭하는 로직을 포함할 수 있다. 또 다른 프로세스를 APD(104) 상에서 실행 중으로 컨텍스트 스위칭하는 기능성은, 예를 들어, APD(104) 상에서 실행하도록 CP(124) 및 DC(126)를 통해 프로세스의 인스턴스를 생성하고, 그 프로세스에 대해 어느 이전에 저장된 상태를 복원하고, 그 실행을 시작하는 것을 포함할 수 있다.
메모리(106)는 DRAM(도시하지 않음)과 같은 비-영속적 메모리를 포함할 수 있다. 메모리(106)는, 예를 들어, 애플리케이션 또는 다른 프로세싱 로직의 부분들의 실행 동안 프로세싱 로직 명령어, 상수 값, 변수 값을 저장할 수 있다. 예를 들어, 일 실시예에 있어서, CPU(102) 상에서 하나 이상의 동작을 수행하는 제어 로직의 부분은 CPU(102)에 의한 각자의 동작 부분의 실행 동안 메모리(106) 내 거주할 수 있다. 여기서 사용되는 바와 같이 용어 "프로세싱 로직" 또는 "로직"은 제어 흐름 커맨드, 계산을 수행하기 위한 커맨드, 및 자원으로의 연관된 액세스를 위한 커맨드를 지칭한다.
실행 동안, 각자의 애플리케이션, OS 함수, 프로세싱 로직 커맨드 및 시스템 소프트웨어는 메모리(106)에 거주할 수 있다. OS(108)에 핵심적인 제어 로직 커맨드는 일반적으로 실행 동안 메모리(106)에 거주할 수 있다. 예를 들어 KMD(110) 및 소프트웨어 스케줄러(112)를 포함하는 다른 소프트웨어 커맨드는 또한 시스템(100)의 실행 동안 메모리(106)에 거주할 수 있다.
이러한 예에 있어서, 메모리(106)는 APD(104)에 커맨드를 보내도록 CPU(102)에 의해 사용되는 커맨드 버퍼(125)를 포함한다. 또한 메모리(106)는 프로세스 리스트 및 프로세스 정보(예를 들어, 액티브 리스트(152) 및 프로세스 제어 블록(154))를 포함하고 있다. 이들 리스트와 더불어 그 정보는 APD(104) 및/또는 관련 스케줄링 하드웨어에 스케줄링 정보를 통신하도록 CPU(102) 상에서 실행하는 스케줄링 소프트웨어에 의해 사용된다. 메모리(106)로의 액세스는 메모리(106)에 연결되어 있는 메모리 컨트롤러(140)에 의해 관리될 수 있다. 예를 들어, 메모리(106)에 쓰기 위해 또는 그로부터 읽기 위해, CPU(102)로부터 또는 다른 디바이스로부터의 요청은 메모리 컨트롤러(140)에 의해 관리된다.
시스템(100)의 다른 태양을 다시 참조하면, IOMMU(116)는 멀티-컨텍스트 메모리 관리 유닛이다.
여기서 사용되는 바와 같이, 컨텍스트(때때로 프로세스라고 지칭)는 커널이 실행되는 환경 및 동기화 및 메모리 관리가 정의되는 도메인으로 생각될 수 있다. 컨텍스트는 디바이스 세트, 그들 디바이스에 액세스가능한 메모리, 대응하는 메모리 속성, 및 메모리 오브젝트 상에서 커널(들) 또는 동작의 실행을 스케줄링하도록 사용되는 하나 이상의 커맨드-큐를 포함한다. 다른 한편으로, 프로세스는 애플리케이션을 위한 프로그램의 실행이 컴퓨터 상에서 실행되는 프로세스를 생성할 것으로 생각될 수 있다. OS는 실행할 프로그램을 위해 가상 메모리 어드레스 공간 및 데이터 레코드를 생성할 수 있다. 프로그램의 실행의 현재 상태 및 메모리는 프로세스라 불릴 수 있다. OS는 초기 상태부터 최종 상태까지 메모리 상에서 동작할 프로세스를 위해 태스크를 스케줄링할 것이다.
도 1에 도시된 예를 다시 참조하면, IOMMU(116)는 APD(104)를 포함하는 디바이스에 대해 메모리 페이지 액세스를 위해 가상 대 물리적 어드레스 변환을 수행하는 로직을 포함한다. IOMMU(116)는 또한, 예를 들어, APD(104)와 같은 디바이스에 의한 페이지 액세스가 페이지 폴트의 결과를 초래할 때, 인터럽트를 발생시키는 로직을 포함할 수 있다. IOMMU(116)는 또한 변환 색인 버퍼(TLB)(118)를 포함하거나 그로의 액세스를 가질 수 있다. TLB(118)는, 예로서, 메모리(106) 내 데이터에 대하여 APD(104)에 의해 이뤄진 요청에 대해 물리적 메모리 어드레스로 논리적(즉, 가상) 메모리 어드레스의 변환을 가속화하도록 컨텐트 어드레싱가능한 메모리(CAM)에 구현될 수 있다.
도시된 예에 있어서, 통신 기반구조(109)는 필요에 따라 시스템(100)의 컴포넌트를 상호접속한다. 통신 기반구조(109)는 주변장치 컴포넌트 상호접속(PCI) 버스, 확장된 PCI(PCI-E) 버스, 어드밴스트 마이크로컨트롤러 버스 아키텍처(AMBA) 버스, 가속화된 그래픽 포트(AGP), 또는 그러한 통신 기반구조 중 하나 이상(도시하지 않음)을 포함할 수 있다. 통신 기반구조(109)는 또한 이더넷, 또는 유사한 네트워크, 또는 애플리케이션의 데이터 전송 레이트 요건을 만족하는 어느 적합한 물리적 통신 기반구조를 포함할 수 있다. 통신 기반구조(109)는 컴퓨팅 시스템(100)의 컴포넌트를 포함하는 컴포넌트를 상호접속하는 기능성을 포함한다.
이 예에 있어서, OS(108)는 시스템(100)의 하드웨어 컴포넌트를 관리하고 공통 서비스를 제공하는 기능성을 포함한다. 다양한 실시예에 있어서, OS(108)는 CPU(102) 상에서 실행되고 공통 서비스를 제공할 수 있다. 이들 공통 서비스는, 예를 들어, CPU(102) 내 실행을 위한 애플리케이션 스케줄링, 폴트 관리, 인터럽트 서비스와 더불어, 다른 애플리케이션의 입력 및 출력 프로세싱을 포함할 수 있다.
일부 실시예에 있어서는, 인터럽트 컨트롤러(148)와 같은 인터럽트 컨트롤러에 의해 발생된 인터럽트에 기반하여, OS(108)가 적합한 인터럽트 취급 루틴을 인보크한다. 예를 들어, 페이지 폴트 인터럽트 검출시, OS(108)는 메모리(106) 내로 관련 페이지의 로딩을 개시하도록 그리고 대응하는 페이지 테이블을 업데이트하도록 인터럽트 핸들러를 인보크할 수 있다.
OS(108)는 또한 하드웨어 컴포넌트로의 액세스가 OS 관리된 커널 기능성을 통해 중재됨을 보장함으로써 시스템(100)을 보호하는 기능성을 포함할 수 있다. 실제로, OS(108)는 애플리케이션(111)과 같은 애플리케이션이 사용자 공간에서 CPU(102) 상에서 실행됨을 보장한다. OS(108)는 또한 애플리케이션(111)이 하드웨어 및/또는 입/출력 기능성에 액세스하도록 OS에 의해 제공된 커널 기능성을 인보크함을 보장한다.
예로써, 애플리케이션(111)은 CPU(102) 상에 또한 실행되는 사용자 계산을 수행하도록 다양한 프로그램 또는 커맨드를 포함한다. 통합화 개념은 CPU(102)가 APD(104) 상의 프로세싱을 위해 선택된 커맨드를 무결절성으로 보낼 수 있게 한다. 이러한 통합된 APD/CPU 프레임워크 하에, 애플리케이션(111)으로부터의 입/출력 요청은 대응하는 OS 기능성을 통해 프로세싱될 것이다.
하나의 예에 있어서, KMD(110)는 CPU(102) 또는 CPU(102) 상에서 실행되는 애플리케이션 또는 다른 로직이 통해 APD(104) 기능성을 인보크할 수 있는 애플리케이션 프로그램 인터페이스(API)를 구현한다. 예를 들어, KMD(110)는 APD(104)가 후속하여 커맨드를 검색해낼 커맨드 버퍼(125)에 CPU(102)로부터의 커맨드를 인큐잉할 수 있다. 부가적으로, KMD(110)는, SWS(112)와 함께, APD(104) 상에서 실행될 프로세스의 스케줄링을 수행할 수 있다. SWS(112)는, 예를 들어, APD 상에서 실행될 프로세스의 우선순위결정된 리스트를 유지하는 로직을 포함할 수 있다.
본 발명의 다른 실시예에 있어서, CPU(102) 상에서 실행되는 애플리케이션은 커맨드를 인큐잉할 때 KMD(110)를 전적으로 우회할 수 있다.
일부 실시예에 있어서, SWS(112)는 APD(104) 상에서 실행될 프로세스의 메모리(106)에 액티브 리스트(152)를 유지한다. SWS(112)는 또한 하드웨어에서 HWS(128)에 의해 관리될 액티브 리스트(152) 내 프로세스의 서브세트를 선택한다. APD(104) 상에서 각각의 프로세스를 실행하는데 관련된 정보는 CPU(102)로부터 APD(104)로 프로세스 제어 블록(PCB)(154)을 통해 통신된다.
애플리케이션용 프로세싱 로직, OS, 및 시스템 소프트웨어는, 궁극적으로는 마스크워크/포토마스크의 발생을 통해 제조 프로세스를 구성 가능하게 하여 여기서 설명되는 발명의 태양을 구체화하는 하드웨어 디바이스를 발생시키도록, C와 같은 프로그래밍 언어로 그리고/또는 베릴로그, RTL 또는 넷리스트와 같은 하드웨어 기술 언어로 특정된 커맨드를 포함할 수 있다.
당업자는, 이 설명을 읽을 때, 컴퓨팅 시스템(100)이 도 1에 도시된 것보다 더 많거나 더 적은 컴포넌트를 포함할 수 있음을 이해할 것이다. 예를 들어, 컴퓨팅 시스템(100)은 하나 이상의 입력 인터페이스, 비-휘발성 저장소, 하나 이상의 출력 인터페이스, 네트워크 인터페이스, 및 하나 이상의 디스플레이 또는 디스플레이 인터페이스를 포함할 수 있다.
도 2는 메모리(206), 및 CPU(202)를 포함하는 I/O 디바이스 인터페이싱 아키텍처를 예시하고 또한 도 1의 더 상세한 보기를 예시하는 블록 선도(200)이다. 도 2는 버스(278)를 통해 각자 접속된, 숫자(250, 252, 254)로 표현된, I/O 디바이스 A, B 및 C와 IOMMU(216)와 메모리(206)와의 사이에서 동작하도록 구성된 메모리 매핑 구조를 더 예시한다. IOMMU(216)와 같은 IOMMU는 직접 메모리 액세스(DMA) 가상 어드레스를 시스템 물리적 어드레스로 변환하도록 동작하는 하드웨어 디바이스일 수 있다. 일반적으로, IOMMU(216)와 같은 IOMMU는 하나 이상의 고유 어드레스 공간을 구성하고 고유 어드레스 공간(들)을 사용하여 디바이스의 DMA 동작이 어떻게 메모리에 액세스하는지 제어한다. 도 2는 예의 편의상 하나의 IOMMU만을 도시하고 있지만, 본 발명의 실시예는 하나보다 많은 IOMMU를 포함할 수 있다.
일반적으로, IOMMU는 그 자신의 각자의 버스 및 I/O 디바이스(들)에 접속되어 있을 수 있다. 도 2에 있어서, 버스(209)는 PCI 버스, AGP 버스, PCI-E 버스(더 정확히는 포인트-대-포인트 상호접속), 또는 현재 이용가능하든지 장래 개발되든지 어느 다른 유형의 버스 또는 통신 채널을 포함하여 컴퓨터 시스템에서 사용되는 어느 유형의 버스일 수 있다. 버스(209)는 더욱 인터럽트 컨트롤러(248), KMD(210), SWS(212), 애플리케이션(211) 및 OS(208)를 시스템(200) 내 다른 컴포넌트와 상호접속할 수 있다. 더욱, 인터럽트 컨트롤러(248), KMD(210), SWS(212), 애플리케이션(211) 및 OS(208) 상호접속은 여기서 설명된 바와 같이 인터럽트 컨트롤러(148), KMD(110), SWS(112), 애플리케이션(111) 및 OS(108) 상호접속과 실질적으로 유사하고, 다시 설명되지 않는다.
IOMMU(216)에 접속될 수 있는 I/O 디바이스는 도 2에 더 예시된다. I/O 디바이스 인터페이싱 아키텍처는 엘리먼트 번호(250, 252, 254)에 의해 표현되는 I/O 디바이스 A, B 및 C를 포함한다. I/O 디바이스 C는 또한 메모리 관리 I/O(MMIO) 맵 및 호스트 데이터 경로(HDP)(256), 디바이스 프로세싱 콤플렉스(258), 프라이빗 MMU(260), IOTLB(264), 어드레스 변환 서비스(ATS)/주변장치 요청 인터페이스(PRI) 요청 블록(262), 로컬 메모리(268), 로컬 메모리 보호 맵(266) 및 멀티플렉서(270, 272, 274, 276)를 포함한다.
I/O 디바이스 A, B 및 C는, 국한되는 것은 아니지만, APD, 확장 카드, 주변장치 카드, 확장성 분담 능력을 갖는 네트워크 인터페이스 컨트롤러(NIC) 카드, WAN 인터페이스 카드, 음성 인터페이스 카드, 및 네트워크 모니터링 카드를 포함하는 많은 유형의 I/O 디바이스를 표현한다. 하나보다 많은 I/O 디바이스가 다양한 버스 구성을 통해 각각의 IOMMU에 접속되어 있을 수 있다.
시스템(200)은 시스템의 하이 레벨 기능성을 예시하고, 실제 물리적 구현은 많은 형태를 취할 수 있다. 예를 들어, MMU(214)는 일반적으로 각각의 프로세서(202) 내에 집적된다. 도 2에 예시된 예는 프로세서(202)의 노드 간 HyperTransportTM(HT) 코히어런트 패브릭 및 프로세서(202)의 노드와 I/O 디바이스(250, 252, 254) 간 HT I/O 링크 또는 다른 I/O 디바이스의 상호접속에 브리징하는 어느 I/O 허브(도시하지 않음)에 기반할 수 있다.
대안으로, 어느 다른 코히어런트 상호접속이 프로세서(202)의 노드 사이에 사용될 수 있고 다른 I/O 상호접속이 프로세서 노드와 I/O 디바이스 사이에 사용될 수 있다. 더욱, 또 다른 예는, 전통적 PC 설계에 있어서, 메모리(206) 및 하나 이상의 I/O 상호접속에 더 결합되는 노스브리지에 결합된 프로세서(202)를 포함할 수 있다.
I/O 디바이스(250, 252, 254) 중 어느 하나는 DMA 동작이 프로세싱되게 되는 IOMMU(216)를 통해 상방으로 흐르는 DMA 동작(즉, 인터럽트)을 발행할 수 있다. 그 후 흐름은 내부에 내장된 메모리 컨트롤러(214)를 포함할 수 있는 프로세서(202)로 계속 한다.
I/O 디바이스의 접속시, IOMMU(216)가 검출되면, 소프트웨어는 필요한 제어 및 데이터 구조를 확립하는 프로세스를 개시한다. 예를 들어, IOMMU(216)가 셋업될 때, IOMMU(216)는 디바이스 테이블 베이스 레지스터(DTBR)(241), 커맨드 버퍼 베이스 레지스터(CBBR)(238), 이벤트 로그 베이스 레지스터(ELBR)(236), 제어 로직(249), 및 주변장치 페이지 요청 레지스터(PPRR)(242)를 포함할 수 있다. 더욱, 초기 셋-업 동안, IOMMU(216)는 적합한 게스트 페이지 테이블의 베이스 포인터 레지스터 테이블을 선택하기 위한 오퍼레이터(246)를 포함할 수 있다. 베이스 포인터 레지스터 테이블은, 예를 들어, 현재 태스크에 대한 페이지 디렉토리 및 페이지 테이블 둘 다의 위치를 찾아냄으로써 가상 어드레스로부터 물리적 어드레스를 변환하도록 x86 마이크로프로세서 프로세스에 의해 사용되는 제어 레지스터 3(CR3)일 수 있다.
게스트 CR3(GCR3) 변경은 새로운 변환 세트를 확립할 수 있고 그래서 프로세서는 이전 컨텍스트와 연관된 TLB(218) 엔트리를 자동으로 무효화할 수 있다. GCR3 레지스터는, 필요하다면, 여기에 그 전체가 참조에 의해 편입되는 것인 미국 특허출원 제61/423,062호 발명의 명칭 "Input/Output Memory Management Unit Two-Layer Addressing"에 논의된 바와 같이 I/O 페이지 테이블 워커(244)를 개시하도록 동작한다. 또한, IOMMU(216)는 페이지 테이블 워크(page table walk)를 수행할 필요 없이 후속 변환을 이행하는데 사용되는 어드레스 변환을 캐싱하기 위해 하나 이상의 TLB(218)와 연관될 수 있다. 디바이스 테이블로부터의 어드레스는 버스(282)를 통해 IOMMU(216)에 통신될 수 있다.
데이터 구조가 셋업되고 나면, IOMMU(216)는 DMA 동작 액세스, 인터럽트 리매핑 및 어드레스 변환을 제어하기 시작할 수 있다.
IOMMU(216)는 2-레벨 변환이 지원됨을 나타내도록 메모리 관리 I/O(MMIO)를 사용할 수 있다. 2-레벨 변환이 지원된다고 결정될 때, 2-레벨 변환은 적합한 디바이스 테이블 엔트리(DTE)를 프로그래밍함으로써 활성화된다.
네스팅된 페이징에 있어서, DTE와 연관된 트랜잭션은 메모리(206) 내 I/O 페이지 테이블(224)에 대한 데이터 구조의 루트를 가리키는 페이지 테이블 루트 포인터를 포함할 수 있다.
따라서, IOMMU(216)는 GVA-대-GPA 어드레스 변환을 포함하도록 디바이스 테이블 엔트리를 확장함으로써 I/O 페이지 테이블에 액세스하도록 매핑된 게스트 포인터를 사용할 수 있다. GVA-대-GPA 변환은 게스트 OS에 의해 관리될 수 있다(이후, "L1" 변환).
더욱, IOMMU(216)는 I/O 페이지 테이블에 액세스하여 GPA-대-SPA 변환을 수행하도록 매핑된 시스템 포인터를 사용할 수 있다. GPA-대-SPA 변환은 하이퍼바이저(234)에 의해 관리될 수 있다(이후, "L2" 변환).
따라서 양 유형의 포인터를 포함하는 DTE는 2 계층의 캐스케이딩된 어드레스 변환 워크를 수행하도록 사용될 수 있다.
L2 및 L1 변환 프로세스에 의해 생성된 네스팅된 어드레스 공간은 계산 분담, 사용자-레벨 I/O, 및 가속화된 I/O 디바이스와 같이 가상화 시스템 내 어드밴스 계산 아키텍처를 감안한다.
도 2에 도시된 바와 같이, IOMMU(216)는 메모리(206)와 I/O 디바이스(250, 252, 254) 사이에 접속되어 있다. 더욱, IOMMU(216)는 메모리(206), 메모리 컨트롤러(240), 및 I/O 디바이스(250, 252, 254)와는 별개의 칩 상에 위치할 수 있다. IOMMU(216)는 주 시스템 자원을 관리하도록 설계될 수 있고 I/O 페이지 테이블(224)을 사용하여 I/O 디바이스에 의해 액세스되는 메모리 상에서의 허가 체크 및 어드레스 변환을 제공할 수 있다. 또한, I/O 페이지 테이블은 AMD64 롱 포맷으로 설계될 수 있다. 디바이스 테이블(226)은 I/O 디바이스가 특정 도메인에 할당될 수 있게 한다. I/O 페이지 테이블(224)은 또한 I/O 디바이스의 페이지 테이블로의 포인터를 포함하도록 구성될 수 있다.
IOMMU(216)는 허가되지 않은 DMA 요청을 리매핑함으로써 보안 및 허가 체크 수단으로서 악성 DMA 요청을 좌절시키도록 구성될 수 있다. 더욱, 인터럽트 리매핑에 관하여, IOMMU(216)는 또한 (i) DMA 요청을 올바른 메모리 위치로 리디렉팅하고 그리고 (ii) DMA 요청을 게스트 VM을 실행하는 올바른 가상 또는 물리적 CPU로 리디렉팅하도록 구성될 수 있다. IOMMU(216)는 또한 I/O 디바이스의 보안 직접 할당을 효율적으로 관리한다. IOMMU(216)는 더욱 I/O 디바이스 인터럽트를 위해 허가 체크 및 인터럽트 리매핑을 제공하도록 인터럽트 리매핑 테이블을 사용한다.
하나의 실시예에 있어서, IOMMU(216)는 게스트 가상 어드밴스트 프로그램가능한 인터럽트 컨트롤러(APIC) 구성(도시하지 않음)을 포함한다. 또 다른 실시예는 가상화된 게스트 APIC을 지원하도록 설계된 아키텍처 특징을 갖는 IOMMU를 포함한다.
IOMMU(216)는 하이퍼바이저 개입 없이 하나 이상의 동시 실행 게스트(예를 들어, 게스트 VM)에 직접 인터럽트의 배달을 지원한다. 환언하면, IOMMU(216)는 하이퍼바이저(234)의 필요성 없이 변환 서비스를 제공할 수 있다. 전형적 IOMMU(216)는 표준 PCI INTx, MSI, 또는 MSI-X 인터럽트를 사용하여 인터럽트를 신호보낸다.
시스템(200)은 또한 부가적 메모리 블록(도시하지 않음)을 포함하는 메모리(206)를 포함한다. 메모리 컨트롤러(240)는 별개의 칩 상에 있을 수 있거나 프로세서(202) 실리콘 내 집적될 수 있다. 메모리(206)는 DMA 및 프로세서 활동이 메모리 컨트롤러(240)와 통신하게 되도록 구성된다.
메모리(206)는 I/O 페이지 테이블(224), 디바이스 테이블(226), 인터럽트 리매핑 테이블(IRT)(228), 커맨드 버퍼(222), 이벤트 로그(220), 및 하이퍼바이저(234)와 같은 호스트 변환 모듈을 포함한다. 메모리(206)는 또한, 숫자(230)로 표현된 게스트 OS 1, 및 게스트 OS 2(232)와 같이 동시에 실행 중인 하나 이상의 게스트 OS를 포함할 수 있다. 하이퍼바이저(234) 및 게스트 OS(230, 232)는 시스템을 가상화하도록 작업하는 소프트웨어 구성이다.
게스트 OS(230) 및 게스트 OS(232)와 같은 게스트 OS는, 전통적 접근법 하에서는 하이퍼바이저(234)가 했어야 할 작업을 IOMMU(216), 하드웨어 디바이스가 하도록 허가되기 때문에, 시스템(200)에서 I/O 디바이스(250, 252, 254)와 같은 I/O 디바이스에 더 직접 접속된다.
더욱, IOMMU(216) 및 메모리(206)는 DTBR(241)이 디바이스 테이블(226)의 시작 인덱스를 가리키게 되도록 초기화될 수 있다. 더욱, CBBR(238)은 IOMMU(216)가 커맨드 버퍼(222)에 저장된 커맨드를 읽고 소비할 수 있도록 커맨드 버퍼(222)의 시작 인덱스와 연관된다. ELBR(236)은 이벤트 로그(220)의 시작 인덱스를 가리킨다. PPRR(242)은 주변장치 페이지 서비스 요청(PPSR) 테이블(227)의 시작 인덱스를 가리킨다.
IOMMU(216)는 CPU(202)와 같은 시스템 프로세서(들)와 IOMMU(216) 간 커맨드 및 상태 정보를 교환하기 위해 메모리-기반 큐를 사용한다. 커맨드 큐는 도 2에서 커맨드 버퍼(222)로 표현된다. 커맨드 버퍼(222) 및 이벤트 로그(220)는 각각의 액티브 IOMMU(216)에 의해 구현된다. 또한, 각각의 IOMMU(216)는 I/O 페이지 서비스 요청 큐를 구현할 수 있다.
가능으로 될 때, IOMMU(216)는 다운스트림 디바이스로부터 도착하는 요청(예를 들어, HyperTransportTM 링크 또는 PCI-기반 통신을 사용하여 통신될 수 있음)을 인터셉트하고, 요청 상에 퍼가 체크 및 어드레스 변환을 수행하고, 변환된 버전 업스트림을 HyperTransportTM 링크를 통해 메모리(206) 공간에 보낸다. 다른 요청은 바뀌지 않고 통과될 수 있다.
IOMMU(216)는 그 허가 체크, 인터럽트 리매핑 및 어드레스 변환을 수행하도록 메모리(206) 내 테이블로부터 읽을 수 있다. 교착상태 없는 동작을 보장하기 위해, IOMMU(216)에 의해 디바이스 테이블(226), I/O 페이지 테이블(224) 및 인터럽트 리매핑 테이블(228)에 대한 메모리 액세스는 등시성 가상 채널을 사용하고 오직 메모리(206) 내 어드레스를 참조할 뿐일 수 있다.
커맨드 버퍼(222), 이벤트 로그 엔트리(220), 및 옵션사항으로서 요청 큐 엔트리(도시하지 않음)로 IOMMU(216)에 의해 비롯된 다른 메모리 읽기는 정규 가상 채널을 사용할 수 있다.
IOMMU(216)가 그것이 취급하는 모든 디바이스 요청마다 전 테이블 룩업 프로세스를 수행하면 시스템 성능은 실질적으로 떨어질 수 있다. 그래서 IOMMU(216)의 구현은 IOMMU(216)의 인-메모리 테이블의 컨텐트에 대한 내부 캐시를 유지할 것으로 예상된다. 동작 동안, IOMMU(216)는 시스템 소프트웨어를 사용하여 그것이 IOMMU(216)에 의해 캐싱된 테이블 엔트리를 업데이트함에 따라 적절한 무효화 커맨드를 보낼 수 있다.
IOMMU(216)는 정규 가상 채널을 사용할 수 있는 능력으로 메모리(206) 내 이벤트 로그(220)에 쓴다. 옵션으로서, IOMMU(216)는 메모리(206) 내 주변장치 페이지 서비스 요청 큐(227)에 쓸 수 있다. 메모리 내 주변장치 페이지 서비스 요청 큐(227)에 쓰기는 또한 정규 가상 채널을 사용할 수 있다.
IOMMU(216)는 메모리 내 요청 큐에 대해 주변장치 페이지 요청을 서비스하도록 제공하는 한편 시스템 프로세서 CPU(202)는 폴트 메커니즘을 사용한다. I/O 디바이스(250, 252, 254) 중 어느 하나는 IOMMU(216)로부터의 변환을 요청할 수 있고 IOMMU(216)는 성공적 변환으로 또는 페이지 폴트로 응답할 수 있다.
본 발명의 실시예에 있어서, IOMMU(216)는 페이지 테이블에 따라 관리되는 네스팅된 페이지 테이블에 대한 2-레벨 어드레스 변환을 지원할 수 있다. 예시의 게스트 변환은 4K 바이트, 2M 바이트 및 1G 바이트 페이지를 지원하는 AMD64 롱 페이지 테이블과 직접 호환가능하다.
IOMMU(216)는 메모리 액세스에 대한 요청을 취급하고 메모리 보호가 IOMMU(216)가 변환 테이블 데이터를 공유하도록 허가하게 구현된다. 이러한 변환 테이블 데이터는 IOMMU(216) 및/또는 MMU(214)에 의해 사용되는 네스팅된 페이지 테이블 데이터를 포함할 수 있다. IOMMU(216)는 또한 변환 테이블의 공유가 IOMMU(216)와 MMU(214) 사이에서 허가되지 않도록 구현될 수 있다.
호스트 OS는 또한 I/O 디바이스-개시된 액세스에 대한 변환을 수행할 수 있다. IOMMU(216)는 I/O 디바이스에 의해 액세스되는 메모리 어드레스를 변환하는 한편, 호스트 OS는 소망 변환을 특정하는 I/O 페이지 테이블을 구성함으로써 그 자신의 페이지 테이블을 셋업할 수 있다. 호스트 OS는 새롭게 구성된 I/O 페이지 테이블을 가리키는 디바이스 테이블 내 엔트리를 만들 수 있고 새롭게 업데이트된 디바이스 엔트리를 IOMMU에 알릴 수 있다. 이러한 포인트에서, (예를 들어, 그래픽 또는 다른 I/O 디바이스로부터) 대응하는 IOMMU I/O 테이블 및 호스트 OS I/O 테이블은 동일 테이블로 매핑될 수 있다.
호스트 OS가 페이지 보호 또는 변환 상에 수행하는 어떠한 변경이라도 프로세서 I/O 페이지 테이블 및 메모리 I/O 페이지 테이블 둘 다에서 업데이트될 수 있다.
IOMMU(216)는 전통적으로 전형적 하이퍼바이저(234)에 의해 수행되는 I/O 태스크를 수행하도록 구성된다. 이러한 배열은 보호, 격리, 인터럽트 리매핑, 및 어드레스 변환을 위한 하이퍼바이저 개입의 필요성을 없앤다. 그렇지만, IOMMU(216)에 의해 취급될 수 없는 페이지 폴트가 일어날 때, IOMMU(216)는 해결을 위해 하이퍼바이저(234)에 의해 개입을 요청할 수 있다. 그렇지만, 상충이 해결되고 나면, IOMMU(216)는, 다시 하이퍼바이저 개입 없이, 원래 태스크로 계속할 수 있다.
가상 머신 모니터(VMM)이라고도 알려져 있는 하이퍼바이저(234)는 게스트 VM(230, 232)을 분리 및 격리시키도록 네스팅된 변환 계층을 사용한다. I/O 디바이스(250, 252, 254)와 같은 I/O 디바이스는 I/O 디바이스(250, 252, 254)가 각자의 VM 중 어느 하나의 메모리 공간에 포함되게 되도록 동시 실행 중 게스트 VM 중 어느 하나에 직접 할당될 수 있다. 더욱, I/O 디바이스(250, 252, 254)와 같은 I/O 디바이스는 하이퍼바이저(234) 또는 또 다른 VM에 속하는 메모리 또는 다른 I/O 디바이스를 변질 또는 검사할 수 없다. 게스트 VM 내에, 커널 어드레스 공간 및 수개의 프로세스(사용자) 어드레스 공간이 있다. 네스팅된 변환 정보를 사용하여, 게스트 변환 계층을 사용함이 없이, I/O 디바이스는 그것이 게스트 VM 메모리의 컨텐트 전체로의 비교적 자유로운 액세스를 갖도록 커널 특권을 승인받을 수 있다.
사용자-레벨(프로세스) I/O 및 어드밴스트 계산 모델을 가능하게 하기 위해, 게스트 변환 계층은 게스트 프로세스 및 I/O의 분리 및 격리를 위해 구현된다. IOMMU(216)에서의 게스트 변환을 사용하여, I/O 디바이스 중 어느 하나는 APD(104) 또는 I/O 디바이스(250, 252, 254)와 같이 게스트 VM 또는 I/O 디바이스에서의 프로세스에 직접 할당될 수 있고, 사용자 프로세스와 동일한 어드레스 공간에서 계산을 실행할 수 있다. 프로세스 어드레스 공간은 적절한 변환 테이블이 사용되도록 IOMMU(216)에 식별될 수 있다. 즉, 각각의 메모리 변환은 프로세스 어드레스 공간 ID(PASID)로 태깅될 수 있다. 더 구체적으로, 예시의 PASID는 x86-정규 게스트 VM 내 애플리케이션 어드레스 공간을 식별하도록 사용될 수 있다. PASID는 공유된 로컬 메모리(268)에 거주하는 동시 컨텍스트를 격리시키도록 I/O 디바이스(250, 252, 254)와 같은 I/O 디바이스 상에서 사용될 수 있다.
디바이스 ID는 어드레스 변환 또는 인터럽트 리매핑 동작을 위해 네스팅된 매핑 테이블을 선택하도록 IOMMU(216)에 의해 사용될 수 있다. 함께, PASID 및 디바이스 ID는 애플리케이션 어드레스 공간을 고유하게 식별하도록 사용될 수 있다.
I/O 버스를 사용하여 I/O 디바이스를 접속하는 시스템에 있어서, 버스 프로토콜은 발신 PASID와 더불어 디바이스 ID, 어드레스 및 액세스 유형을 반송하도록 확장될 수 있다. PCI-SIG PCI-E 사양에 있어서, 버스 패킷의 PASID 트랜잭션 계층 패킷(TLP) 접두부는, 전술된 미국 특허출원 제61/423,062호에서 논의된 바와 같이 그리고 엘리먼트 번호(246)로 표현된 바와 같이, 적절한 게스트 CR3 GCR3 테이블을 선택하도록 IOMMU(216)에 의해 그 후 사용될 수 있는 PASID 정보를 반송한다. 이것은 프로세스와 VM 간 메모리 격리를 보장한다.
I/O 디바이스를 프로세서 다이 상에 집적하는 시스템에 있어서, I/O 디바이스를 메모리에 접속하도록 I/O 버스를 사용하는 것이 불필요하다. 이들 경우에 있어서, PASID는 단순히 집적된 I/O 디바이스와 집적된 IOMMU 간 태그로서 또는 와이어 상에서 반송될 수 있다. 소프트웨어 호환성을 위해, 집적된 I/O 디바이스는 ATS 거동 및 시맨틱스를 에뮬레이팅하는 것이 권고된다. 어느 경우에서든, 프로세스와 VM 간 메모리 격리가 보장된다.
성능 또는 보안을 위해 로컬 메모리(268)와 같은 로컬 메모리를 포함하는 정교한 멀티-컨텍스트 I/O 디바이스는 IOMMU(216)에 의해 제공된 동일한 메모리 격리 및 분리 보증을 제공할 수 있다.
그러한 디바이스의 일반적 아키텍처에 대해, 시스템 엘리먼트 CPU(202) 및 IOMMU(216)를 예시하는 도 2를 다시 참조한다. I/O 디바이스의 많은 부분은 옵션이고 그래서 기능이 우회될 수 있는 멀티플렉서(270, 272, 274, 276)가 도시되어 있다. 예를 들어, 시스템 어드레스 공간으로의 액세스는 ATS/PRI 유닛(262)과 작업하는 IOTLB(264)를 통해 흐를 수 있거나, 또는 그것은 서비스에 대한 IOMMU(216)로 직접 흐를 수 있다. 디바이스 프로세싱 콤플렉스(258)는, 여기서 논의되는 바와 같이, APD(104)와 같은 범용 APD, I/O 디바이스(250, 252, 254)와 같은 I/O 디바이스, 또는 다른 전문 계산 엔진을 표현할 수 있다.
본 발명의 실시예에 있어서, 데이터 액세스는 CPU(202)로 또는 디바이스 프로세싱 콤플렉스(258)로 비롯될 수 있다. 데이터 액세스는 로컬 메모리(268)로부터의 로컬 메모리 액세스에서 또는 메모리(206)로부터의 시스템 액세스에서 종료할 수 있다. 전형적 구현에 있어서, 변환 효율성을 위해 ATS를 사용하는 IOTLB(264) 기능성이 부가될 수 있다. PPR/PRI 지원이 어드밴스트 기능 및 효율성을 위해 부가될 수 있다. ATS/PRI 어드밴스트 기능성은 엘리먼트 번호(262)로 표현되어 있다. 주변장치는 커스텀 어드레스 변환 및 액세스 제어를 위해 프라이빗 MMU(260) 기능과 같은 프라이빗 MMU를 제공할 수 있다.
예로써, 주변장치 로컬 메모리(268)의 구현은 각각의 디바이스에 고유할 수 있다. 그렇지만, 일반적으로 이러한 구현은 바람직하게는 각각의 디바이스가 이하의 시스템 속성을 보존할 것을 보장한다.
1. 디바이스 프로세싱 콤플렉스(258)로부터 메모리(206)로의 액세스는 게스트 변환의 요구되는 정책을 집행하기 위해 IOMMU(216)에 의해 또는 프라이빗 MMU(260)에 의해 프로세싱된다.
2. 디바이스 프로세싱 콤플렉스(258)로부터 메모리(206)로의 액세스는 네스팅된 변환의 요구되는 정책을 집행하기 위해 IOMMU(216)에 의해 또는 (ATS 및/또는 PRI 요청(262)을 사용할 수 있는) IOTLB(264)에 의해 프로세싱된다.
3. CPU(202) 또는 디바이스 프로세싱 콤플렉스(258)로부터 주변장치 로컬 메모리(268)로의 액세스는 게스트 변환의 요구되는 정책을 집행하기 위해 프라이빗 MMU(260)에 의해 프로세싱된다.
4. CPU(202) 또는 디바이스 프로세싱 콤플렉스(258)로부터 주변장치 로컬 메모리(268)로의 액세스는 네스팅된 변환의 요구되는 정책을 집행하기 위해 로컬 메모리 보호 맵(266)에 의해 프로세싱된다.
각자 (314) 및 (312)로 표현된 도 3a 및 도 3b는 도 2의 예시적 실시예에 따라 2-계층 어드레스 변환 시스템의 예시적 블록 선도로서 함께 기능한다. 더 구체적으로, 시스템은, I/O 페이지 테이블(224) 데이터 구조로 셋업되는 바와 같이, 게스트 어드레스 변환 테이블 구조(314) 및 시스템 어드레스 변환 테이블 구조(312)를 포함한다. 4-레벨 페이지 테이블 구조가 예시되어 있고 4K바이트 물리적 페이지(331)에 액세스하도록 사용된다. 본 발명의 실시예는 더 많거나 더 적은 레벨(예를 들어, 2M바이트 물리적 페이지를 참조하는 3-레벨 페이지 테이블 구조; 1G바이트 물리적 페이지를 참조하는 2-레벨 페이지 테이블 구조; 등)을 사용하는 페이지 테이블 구조를 제공한다.
GVA는 어드레스 변환 트랜잭션(예를 들어, ATS에 대한 요청)을 발행하는 I/O 디바이스에 의해 제공될 수 있다. 궁극적으로, GVA는 데이터 바이트(330)에 액세스하는 것과 연관된 SPA로 변환될 수 있다.
GCR3 테이블 엔트리(317)는 페이지-맵 레벨-4(PML4) 테이블 어드레스(332)를 포함한다. PML4 테이블 어드레스(332)가 루트 페이지 테이블 포인터(334)에 대응하기는 하지만, PML4 테이블 어드레스(332)는 GPA의 포맷이다. 시스템(314, 312)은 함께 기능하여 네스팅된 워크(336)를 수행하여 PML4 테이블 어드레스(332)를 GPA 포맷으로부터 SPA 포맷으로 변환한다. SPA는 레벨-4 페이지 테이블(338)의 루트의 시스템 물리적 어드레스에 대응한다. 그리하여, 예를 들어 루트 페이지 테이블 포인터(334)와 연관된 굵은 흑색 선은 네스팅된 워크(336)를 사용하여 획득된 SPA를 표현할 수 있다.
레벨-4 페이지 테이블(338)은 루트 페이지 테이블 포인터(334)를 사용하여 식별되고, 레벨-4 페이지 테이블(338)의 엔트리는 페이지-맵 레벨-4(PML4) 오프셋(337)을 사용하여 인덱싱된다. PML4 오프셋(337)은 변환되기로 되어 있는 GVA(326)의 비트 39-47과 연관된다. 따라서, PML4 엔트리(PML4E)(339)는 루트 페이지 테이블 포인터(334), 레벨-4 페이지 테이블(338) 및 PML4 오프셋(337)을 사용하여 위치 찾아내어진다. 게스트가 GVA(326)를 사용하여 메모리를 참조하려 시도할 때, PML4E(339)는 GPA이기 때문에, 시스템(314, 312)은 네스팅된 워크(336)를 사용하여 PML4E(339)를 SPA로 변환하도록 함께 작업한다.
네스팅된 워크(336)를 완료하기 위해, 시스템(312)은 게스트 어드레스 변환 테이블 구조(314)로부터 GPA의 각각에 대한 GPA-대-SPA 변환을 수행하도록 메모리(206)에 셋업된 I/O 페이지 테이블(224) 구조를 사용하여 구현될 수 있다. 예를 들어, GPA(340)는 루트 페이지 테이블 포인터(341)에 대한 대응하는 SPA를 획득하도록 변환을 위해 PML4E(339)로 로딩될 수 있다. GPA(340)는 시스템 어드레스 변환 테이블 구조(312)의 다양한 테이블을 인덱싱하도록 사용된 오프셋을 포함한다.
네스팅된 워크(336)는 페이지-맵 레벨-4(PML4) 테이블(344)의 루트 위치를 찾아내도록 PML4E(339)와 연관된 nCR3(342)를 사용한다. PML4 오프셋(346)(GPA(340)의 비트 39-47)은 PML4 테이블(344) 내로 인덱싱하고 엔트리 nPML4E(348)를 획득하도록 사용된다. nPML4E(348)는 페이지 디렉토리 포인터(PDP) 테이블(350)의 루트를 가리키고, PDP 오프셋(352)(GPA(340)의 비트 30-38)은 PDP 테이블(350) 내로 인덱싱하고 엔트리 nPDPE(354)를 획득하도록 사용된다.
nPDPE(354)는 페이지 디렉토리(PD) 테이블(356)의 루트를 가리키고, PD 오프셋(358)(GPA(340)의 비트 21-29)은 PD 테이블(356) 내로 인덱싱하고 엔트리 nPDE(360)를 획득하도록 사용된다. nPDE(360)는 페이지 테이블(362)의 루트를 가리키고, PT 오프셋(364)(GPA(340)의 비트 12-20)은 페이지 테이블(362) 내로 인덱싱하고 엔트리 nPTE(366)를 획득하도록 사용된다. nPTE(366)는 게스트 4KB 메모리 페이지(368)의 루트를 가리키고, 물리적 페이지 오프셋(370)(GPA(340)의 비트 0-11)은 게스트 4KB 메모리 페이지(368) 내로 인덱싱하고 엔트리 gPML4E(372)를 획득하도록 사용된다. gPML4E(372)는 GPA PML4E(339)에 대응하는 SPA 값이고 게스트 어드레스 변환 테이블 구조(314) 내 레벨-3 페이지 테이블(374) 위치를 찾아내도록 루트 페이지 테이블 포인터(341)에 의해 사용된다.
레벨-3 페이지 테이블(374)은 PDPE(376)(GPA 포맷)을 획득하도록 PDP 오프셋(375)을 사용하여 인덱싱된다. 네스팅된 워크(336)는 GPA PDPE(376)를 루트 페이지 테이블 포인터(377)에 대응하는 SPA 값으로 변환하도록 사용된다. 루트 페이지 테이블 포인터(377)는 PDE(380)(GPA 포맷)를 획득하도록 페이지-디렉토리 오프셋(379)(GVA(326)의 비트 21-29)을 사용하여 인덱싱되는 레벨-2 페이지 테이블(378) 위치를 찾아내도록 사용된다. 네스팅된 워크(336)는 GPA PDE(380)를 루트 페이지 테이블 포인터(381)에 대응하는 SPA 값으로 변환하도록 사용된다.
본 발명의 실시예에 있어서, 루트 페이지 테이블 포인터(381)는 PTE(384)(GPA 포맷)를 획득하도록 페이지-테이블 오프셋(383)(GVA(326)의 비트 12-20)을 사용하여 인덱싱되는 레벨-1 페이지 테이블(382) 위치를 찾아내도록 사용된다. 네스팅된 워크(336)는 GPA PTE(384)를 루트 페이지 테이블 포인터(385)에 대응하는 SPA 값으로 변환하도록 사용된다. 루트 페이지 테이블 포인터(385)는 데이터 바이트(330)를 획득하도록 물리적 페이지 오프셋(386)(GVA(326)의 비트 0-11)을 사용하여 인덱싱되는 4K바이트 물리적 페이지(331) 위치를 찾아내도록 사용된다.
그리하여, 시스템(314, 312)은 2-계층 GVA-대-GPA 및 GPA-대-SPA 어드레스 변환을 수행하도록 페이지 테이블 워크의 네스팅된 캐스케이드를 사용한다. 네스팅된 어드레스 변환의 2 계층이 도시되어 있지만, 부가적 계층이 유사한 네스팅된/회귀 호출을 사용하여 구현될 수 있다. 시스템 어드레스 변환 테이블 구조(312) 및 게스트 어드레스 변환 테이블 구조(314)와 연관된 변환은 하드웨어로 구현될 수 있다. 게스트/시스템 변환의 각각의 세트에 대하여 별개의 하드웨어가 제공될 수 있지만, 하드웨어의 하나의 세트가 변환의 양 세트에 사용될 수 있다.
위에서 언급된 바와 같이, 종래 다중 프로세싱 디바이스 컴퓨팅 시스템과 연관된 도전과제 중 하나는 공유된 메모리 시스템과 관련한 드라이버 관리 및/또는 별개 메모리 시스템을 유지하는 것과 연관된 오버헤드이다. 종래 다중 프로세싱 디바이스 시스템에서의 이러한 오버헤드의 하나의 예는 다중 프로세싱 디바이스 간 단일 데이터 세트를 공유할 때 2개 이상의 복사 커맨드를 수용하라는 요구이다.
도 4는 2개의 별개 복사 커맨드를 사용하는 종래 시스템 내 메모리 복사 트랜잭션의 예시적 블록 선도(400)이다. 편의상, 메모리(402), 및 APD 또는 다른 I/O 디바이스(406)는 메모리(206) 및 APD(104) 또는 다른 I/O 디바이스(250, 252, 254)와 실질적으로 유사하고, 다시 설명되지 않는다.
어드레스 변환에 부가하여, IOMMU(216)는 I/O 디바이스에 의한 DMA 전송 상 액세스 보호를 제공한다. 더욱, IOMMU(216)는 보안 사용자-레벨 애플리케이션에 대해 I/O 디바이스를 선택하도록 제공한다. 또한, IOMMU(216)는 보안 VMVM 게스트 OS 액세스에 대해 I/O 디바이스를 선택하도록 제공한다.
다중 복사 커맨드를 수행하라는 요구는, 도 4에 예시된 바와 같이, 불필요한 시스템 오버헤드를 생성한다. 예를 들어, 소프트웨어 구성으로 보일 수 있는 별개 바운스 버퍼는 통상 다중 복사 커맨드를 수용하도록 요구된다. 전통적으로, 바운스 버퍼는 64-비트 어드레싱을 지원하지 않는 디바이스용 DMA 트래픽을 위해 로우 시스템 메모리에 위치하고 있다. OS는 DMA 데이터를 바운스 버퍼에 또는 그로부터 I/O 드라이버에 의해 사용되는 하이 메모리 내 실제 버퍼에 복사할 수 있다. 예에 있어서, 이러한 기술은 시스템 메모리가 하나의 프로세싱 디바이스로부터 수신된 데이터(예를 들어, 이미지 데이터)를 그것이 조작될 수 있는 또 다른 프로세싱 디바이스(또는 로컬 I/O 디바이스) 메모리(406)에 복사하도록 요구한다. 로컬 디바이스 메모리(406)에 복사하는 것은 숫자(404)로 표현되어 있다. 숫자(408)는 이미지 데이터 상에 수행된 동작(예를 들어, 계산, 서브루틴 실행, 또는 어떤 기능)을 표현한다. 숫자(410)로 표현된 바와 같이, 동작이 완료될 때, 그 후 이미지 데이터는 시스템 메모리(402)에 다시 복사되어야 한다.
IOMMU(216)는 시스템 레벨 소프트웨어에 중요한 강화를 가능하게 할 수 있다. 예를 들어, 하나의 강화는 64 비트 시스템 상 레거시 32-비트 I/O 디바이스 지원을 대비한다. 이러한 강화는 바운스 버퍼 및 비용이 드는 메모리 복사를 요구하지 않는다. 그래서, 복사 커맨드와 연관된 오버헤드가 감축된다.
도 5는 도 4에 도시된 별개 복사 커맨드의 필요성을 없애는 효율적 메모리 관리 시스템의 예시적 블록 선도(500)이다.
도 5에 있어서, IOMMU(516), 메모리(506), 게스트 OS(530, 532), 및 하이퍼바이저(534)는 각자 IOMMU(216), 메모리(206), 게스트 OS(230, 232), 및 하이퍼바이저(235)와 각각 실질적으로 유사하다. 더욱, I/O 디바이스(550, 552, 554)는 APD(104) 또는 다른 I/O 디바이스(250, 252, 254)와 실질적으로 유사하다. 그래서, 편의상, 도 2 및 도 5에서의 유사한 엘리먼트의 설명은 반복되지 않을 것이다.
또한 도 5에 있어서, 숫자(590, 592, 594)는 각자 전형적 I/O 디바이스(550, 552, 554)에 의해 보내어진 DMA 요청을 표현한다. IOMMU(516)에 의해 제공된 네스팅된 페이징 트랜잭션은 전형적 I/O 디바이스(550, 552, 554)에 대해 동작의 일부 엘리먼트(예를 들어, 계산, 서브루틴 실행, 또는 어떤 기능)를 취하도록 제공하고 시스템이 직접 조작을 통해 동작을 효율적으로 수용하도록 허용한다.
하나의 전형적 실시예에 있어서, 직접 조작을 통해, APD 또는 다른 I/O 디바이스(들)는 이미지 데이터를 포함할 수 있는 메모리(506)를 직접 조작할 수 있는 한편, 이미지 데이터는 여전히 메모리(506)에 있다. 메모리(506)의 이러한 직접 조작은 메모리(506) 및 I/O 디바이스(550, 552, 554)가 동일 게스트 가상 어드레스 공간으로부터 동작 가능하게 한다. 이 예에 있어서, IOMMU(516)는 I/O 디바이스(550, 552, 554)에 의한 메모리(506)로의 직접 액세스를 용이하게 하기 위해 매핑된 게스트 포인터를 사용할 수 있다. 이것은, 데이터 조작 전에 또는 데이터 상에서의 어떠한 동작의 완료 후에, 메모리(506)가 데이터(예를 들어, 이미지 데이터)를 우선 I/O 디바이스(550, 552, 554)에 복사할 필요성을 없앤다. 직접 메모리 조작을 통해 이들 부가적 복사 조치를 없애는 것, 및 여기서 설명된 다른 강화는 데이터 복사와 연관된 오버헤드의 감축 및 개선된 효율성을 가능하게 한다.
도 6은 본 발명의 또 다른 태양에 따른 동작 흐름 선도(600)이다. 도시된 예에 있어서, 시스템(600)은 메모리(606), IOMMU(616) 및 주변장치 디바이스(687)를 포함하며, 각자의 메모리(206), IOMMU(216) 및 I/O 디바이스(254)와 실질적으로 유사하다.
하나의 예에 있어서, 메모리(606)는 이벤트 로그(620), 커맨드 버퍼(622), I/O 페이지 테이블(624), 디바이스 테이블(626), PPSR 큐(627), 인터럽트 리매핑 테이블(628), 게스트 OS(630), 게스트 OS(632) 및 하이퍼바이저(634)를 포함한다. 이들 엘리먼트는 도 2에 설명된 것들과 유사하다. ATS 요청(680), ATS 응답(682), PRI 요청(684), PRI 응답(686)은 전형적 도 2에 따라 도입된 ATS/PRI(262)의 더 상세한 예시이다. 주변장치(687)는 숫자(688)로 표현된 바와 같이 ATS 응답을 평가하도록 구성될 수 있고 숫자(689)로 표현된 바와 같이 PRI 응답을 평가하도록 구성될 수 있다.
본 발명의 또 다른 태양은 주변장치(687)에 의해 사용되는 ATS에 대해 GPA를 SPA로 변환하도록 제공한다. 도 6에 있어서, ATS는 가상화를 위해 보안, 디바이스-개시된 어드레스 변환을 제공한다. GPA를 SPA로 변환하기 위해, PCI-E-접속된 주변장치(687)는 IOMMU(616)에 의해 인식된 PASID TLP 접두부 없이 또는 함께 ATS 요청(680)(PCI SIG 사양)을 발행한다. IOMMU(616)는 IOTLB(264)로부터의 캐싱된 정보를 사용하여 그리고/또는, 요구될 때, 테이블 워커(244)를 사용하여 페이지 테이블을 워킹함으로써 액세스 특권을 평가한다. IOMMU(616)는 ATS(680) 요청의 결과를 결정(681)하도록 구성되고 결과적 액세스 특권은 프로세서 및/또는 하이퍼바이저(634)에 의한 개입을 요구함이 없이 ATS 응답(682)으로 반환된다.
더욱, 어드레스 변환 서비스는 GVA 또는 GPA를 SPA로 변환하도록 주변장치(687)에 의해 요청될 수 있다. GVA를 SPA로 변환하기 위해, PCIe에 접속된 주변장치(687)는 플래그(예를 들어, 액세스 및 더티 비트 상태) 및 정규 가상 어드레스를 제시하도록 유효 PASID를 포함하는 ATS 요청(680)을 발행한다. 집적 주변장치(687)는 와이어 신호와 같이 플래그 및 가상 어드레스를 제시하도록 ATS 프로토콜 이외의 수단을 사용할 수 있다. IOMMU(616)는 효율성을 위해 IOTLB(264) 캐싱된 정보를 사용하여 액세스 특권을 평가하고, 요구될 때, 테이블 워커(244)를 사용하여 페이지 테이블을 워킹할 수 있다. AMD64 시맨틱스와 매칭하기 위해, IOMMU는, 이전에 캐싱된 정보가 액세스에 대한 불충분한 특권을 나타내면, 게스트 페이지 테이블, I/O 페이지 테이블(624)을 리워킹할 수 있다. 결과적 액세스 특권은 ATS 응답(682)으로 반환(681)된다. 게스트 어드레스에 대한 부가적 정보를 반송하기 위해, IOMMU(616)는 유효 PASID를 포함하는 PCIe TLP 접두부를 사용한다.
IOMMU(616)는 GVA 페이지 테이블, I/O 페이지 테이블(624) 내 액세스된 그리고 더티 비트(도시하지 않음)를 업데이트해야 하는 한편, 주변장치(687)가 실제로 메모리에 액세스한 것처럼 ATS 요청(680)을 서비스한다. GVA 액세스된 그리고 더티 비트를 평가하려는 목적으로, IOMMU(616)는 ATS 요청(680)의 ATS 패킷(도시하지 않음)에 나타내어진 액세스 레벨을 사용할 수 있다. 읽기-전용 액세스에 대한 ATS 요청(680)은 액세스된 비트 세팅을 결정할 수 있고 읽기-쓰기 액세스에 대한 ATS 요청(680)은 더티 비트 세팅을 결정할 수 있다. GPA를 프로세싱할 때, IOMMU(616)는 페이지 테이블을 읽기-전용으로 다룰 수 있다.
더욱, 소프트웨어는 IOMMU(616)가 주변장치(687)에 무효화 요청을 발생시키게 야기하도록 INVALIDATE_IOTLB_PAGES 커맨드를 발행한다. 주변장치(687)로 다운스트림으로 보내어진 무효화 요청은 컨텐트가 GPA일 때 유효 PASID 접두부가 결여되어 있다. 주변장치(687)에 다운스트림으로 보내어진 무효화 요청은 컨텐트가 GVA일 때 유효 PASID 접두부를 갖고 PASID는 PASID TLP 접두부 내에 있다.
IOTLB(264)를 갖는 주변장치(687)가 불충분한-특권 실패를 야기한 캐싱된 변환 엔트리를 무효화하고 ATS를 사용하여 신생 변환을 획득해야 하는 조건이 이제 설명된다.
주변장치(687)는 네스팅된(호스트) 액세스에 대한 액세스 특권을 결정하도록 ATS를 통해 획득된 또는 IOTLB(264)로부터의 어드레스 변환 정보를 사용할 수 있다. AMD 확장으로서, IOTLB(264)를 갖는 주변장치(687)는 게스트 액세스에 대해 IOTLB 엔트리에 액세스 비트 및 더티 비트 둘 다 "1"로 설정되어 있을 때 불충분한-특권 실패를 야기하는 캐싱된 엔트리를 무효화할 수 있다. 그 후 주변장치(687)는 ATS를 사용하여 게스트 변환 정보를 요청하고 액세스를 재시도해야 한다. 개정된 특권이 재시도에 불충분하면, 주변장치(687)는 액세스를 포기하거나 확대된 특권에 대한 PCI-E PRI 요청(684)을 발행하도록 적절한 조치를 취해야 한다.
ATS의 경우에 있어서, IOMMU(616)는 ATS 응답(682)으로 되돌려 보낼 결과를 결정(681)하는데 필요한 모든 정보를 갖고 있다. 그렇지만, PRI의 경우에 있어서, PRI 요청은 PRI 응답(686)에 대한 결과를 결정(683)하는데 조력하도록 게스트 OS(630, 632), 하이퍼바이저(634) 및/또는 소프트웨어(SW)에 패스된다. 예를 들어, PRI 요청(684)은 소프트웨어 정책 결정이 게스트 OS(630, 632) 및/또는 하이퍼바이저(634)에 의해 이루어지도록 요구한다. PRI, PCI-Sig 사양은 주변장치(687)가 전형적 VM 블록(629)(예를 들어, 소프트웨어)로부터 메모리 관리 서비스를 요청할 수 있게 한다.
더욱, 옵션으로서 IOMMU(616)는 PCI-SIG ATS 사양에 대한 보완으로서 PRI 사양을 지원한다. PRI는 ATS와 함께 주변장치 페이지 폴트 지원을 제공한다. PRI에 대한 IOMMU(616) 지원은 PPR 서비스이다.
전통적 시스템에 있어서, OS는 I/O에 사용되는 메모리 페이지를 핀(pin)잉하도록 요구된다. 핀잉된 메모리는 항상 실제 메모리에 유지되기로 되어 있는 메모리 페이지를 지칭한다. 메모리 페이지를 핀잉하는 것은 페이저가 다른 사용을 위해 메모리 페이지를 훔치는 것을 금지한다. 전형적으로 메모리 페이지는 DMA가 시작하기 전에 핀잉되어야 하고 DMA가 완료할 때 핀잉해제될 수 있다. 핀잉된 페이지는 흔히 한정된 용량의 별개 메모리 풀로부터 할당된다.
ATS 및 PRI는 주변장치(687)가 I/O에 대해 핀잉해제된 페이지를 사용 가능하게 하도록 함께 사용될 수 있다. ATS 요청(680)을 프로세싱할 때, IOMMU(616)는 불충분한 액세스 특권 또는 비-존재 페이지가 검출될 때 에러를 신호보내지 않는다. 대신에, IOMMU(616)는 I/O 페이지 테이블(624)로부터 계산된 허가를 반환한다. 주변장치(687)는 PRI 응답(686)을 조사하여 적절한 조치를 결정한다(예를 들어, PRI를 사용하여 시스템 소프트웨어가 I/O 페이지 테이블(624) 내 페이지 테이블 엔트리를 서비스하도록 요청한다). 주변장치 페이지 요청 서비스(PPR)/PRI의 사용은 주변장치(687)로 하여금 OS가 I/O 페이지 테이블(624) 페이지의 액세스 특권을 변경하도록 요청할 수 있게 한다. PPR을 갖는 ATS의 사용은 시스템이 감축된 메모리 풋프린트에서 효율적으로 동작할 수 있게 할 수 있다.
본 발명의 전형적 동작에 있어서, IOMMU(616)는 메모리(606)가 DMA 작업 요청을 서비스하도록 물리적으로 이용가능하지 않을 때 주변장치(687)에 메모리를 제공하도록 구현된다. 예를 들어, 주변장치(687)가 ATS 요청(680)을 보내고 메모리가 메모리(606)에서 물리적으로 이용가능하지 않으면, 전형적으로 페이지 폴트의 결과를 초래할 수 있다. 페이지 폴트는 ATS_Calc(623)를 통해 메모리 액세스 시도에 응답하여 커맨드 버퍼(622)로부터 IOMMU(616)로의 신호에 의해 표현될 수 있다.
또한, 주변장치(687)가 ATS-능력이 있으면, 주변장치(687)는 PRI 요청(684)을 IOMMU(616)에 발행할 수 있다. 소프트웨어 정책(683)이 PRI 응답(686)을 계산하는데 필요로 되므로 PRI 요청(684)에 응답하여 게스트 OS(630), 게스트 OS(632) 및 하이퍼바이저(634)를 포함하는 시스템 블록(629)에 신호(631)를 보내는 IOMMU(616)에 의해 PRI 요청(684)이 수신된다. 하이퍼바이저(634)는 IOMMU 신호 PRI_Calc(631)를 취급하도록 게스트 OS(630, 632)보다 우선순위를 취하고, 게스트 OS(630, 632)에 PRI_Calc(631)의 프로세싱을 패스하기 이전에, PRI_Calc(631) 프로세싱을 거절하는 우선적 권리를 갖는다. 주변장치(687)가 PRI 요청(684)을 보내고 메모리가 메모리(606)에서 물리적으로 이용가능하지 않으면, 전형적으로 페이지 폴트의 결과를 초래할 수 있다. 페이지 폴트는 PRI_Calc(631)을 통해 메모리 액세스 시도에 응답하여 커맨드 버퍼(622)로부터 IOMMU(616)로의 신호에 의해 표현될 수 있다.
페이지 폴트의 결과를 초래하면, IOMMU(616)는 ATS_Calc(623) 또는 PRI_Calc(631)을 PPSR 테이블(627)(예를 들어, PPR 큐)에 보내도록 구성된다. 이것은, IOMMU(616)가 유효 PRI 요청(684)을 수신할 때 그것이 가상 어드레스 공간에 대한 변경을 요청하는 PPR 메시지를 생성하기 때문이다. VM 블록(629) 내 있는 소프트웨어 정책은 페이지 내 스와핑, 새로운 페이지 할당, 요청 거절, 보안 특권 업그레이드, 쓰기-중-복사 동작 제공에 의해, 또는 확정적 페이지 폴트를 방지하기 위한 어느 다른 조절에 의해 페이지 폴트 문제를 해결할 수 있다.
PPR을 지원하는 IOMMU(616)는 메모리(606) 내 공유된 원형 버퍼(도시하지 않음)에 의해 호스트 소프트웨어(683)에 PPI 요청을 보고할 수 있다. IOMMU(616)는 가능으로 될 때 버퍼에 I/O 디바이스의 PPR 기록을 쓸 수 있다. 호스트 소프트웨어(683)는 호스트 소프트웨어(683)가 고갈된 PPR 요청 로그 엔트리를 갖고 있음을 IOMMU(616)에 나타내도록 IOMMU(216)의 PPR 요청 로그 헤드 포인터(도시하지 않음)를 증분한다. 소프트웨어(683)가 PPR 요청(601) 프로세싱을 완료했을 때, PPR 큐(627)는 I/O 디바이스(687)에 결과를 알리도록 IOMMU 작업 완료 커맨드를 사용한다.
메모리(606)에 더 많은 메모리에 대한 IOMMU(616)의 요청이 존중될 때, 가상 블록(629) 내 게스트 OS(630, 632) 중 하나는, 메모리(606)에 물리적으로 존재하지 않는 메모리(606) 내 페이지(즉, I/O 페이지 테이블(624) 페이지는 OS에 의해 아직 로딩되지 않았음)에 액세스하려는 시도가 이루어지는 경우에만, 메모리(606) 내에 디스크 페이지(즉, 물리적 메모리)를 복사할 수 있다.
일반적으로, 애플리케이션(211)이 프로세싱을 시작할 때, 그 페이지 중 어느 것도 메모리에 있지 않다. DMA 동작을 수행하는데 필요한 애플리케이션(211)의 필수 페이지가 PRI 응답(686)과 연관하여 메모리(606) 내에 로딩되기 전에 많은 페이지 폴트가 일어날 수 있다는 것이다. 가상 메모리 블록(629)이 DMA 동작에 대해 필요한 페이지만을 로딩하도록 동작할 때, 가상 블록(629) 내 더 많은 프로세스가 결과로서 로딩되도록 허가된다는 것이다. 더 많은 프로세스가 가상 블록(629) 내에 로딩되도록 허용될 때, 전술된 미국 특허출원 제61/423,062호 발명의 명칭 "Input/Output Memory Management Unit Two-Layer Addressing"에서 논의된 바와 같이, GCR3 레지스터를 로딩하는데 필요한 시간량이 감축된다.
소프트웨어 정책(683)이 VM 블록(629)에 의해 도입되고 나면, 커맨드 버퍼(622)는 화살표(625)에 의해 표현된 바와 같이 IOMMU(616)에 통지한다. IOMMU(616)는 ATS 응답(682) 또는 PRI 응답(686)을 IOMMU(616)에 송신한다. 주변장치(687)는, 각자 숫자(688, 689)에 의해 표현된 바와 같이, 결과적 ATS 응답(682) 및 PRI 응답(686)을 평가한다. 또는, IOMMU(616)는 해결이 없으면 이벤트 로그(620)에 써서, 확정적 페이지 폴트의 결과를 초래할 수 있다.
도 7은 본 발명의 일 실시예를 실시하는 전형적 방법(700)의 예시도이다. 방법(700)에 있어서, 단계(702)는 메모리(402) 내 데이터에 액세스하는 것과 연관된 포인터를 IOMMU(216)를 통해 I/O 디바이스(406)에 패스하는 것을 예시한다. I/O 디바이스는, 그 I/O 디바이스에 로컬인 I/O 디바이스 메모리 내에 데이터를 복사할 필요 없이, IOMMU를 통해 메모리 내 데이터에 액세스한다.
단계(704)는, I/O 디바이스에 의해, 포인터에 기반하여 메모리 내 데이터 상에 동작을 수행하는 것을 예시한다. IOMMU(216)는 IOMMU(216)에 의해 패스된 포인터에 기반하여 I/O 디바이스(406)를 제어할 수 있다. I/O 디바이스(406)는 메모리(402)에 액세스한다. 이러한 동작은 I/O 디바이스(406)의 로컬 메모리(266)에 메모리(402) 내 데이터의 복사 동작(404)을 수행할 필요가 없다. 또한 메모리(402)에 다시 복사될 (410)상의 동작된 데이터의 복사 동작(412)에 대한 필요성도 없다.
맺는말
개요 및 요약 절은 발명자(들)에 의해 고려되는 바와 같이 본 발명의 하나 이상의 그러나 모두는 아닌 전형적 실시예를 제시하며, 그리하여, 본 발명 및 첨부 청구범위를 어떠한 식으로도 한정하려는 의도는 아니다.
본 발명은 특정 기능 및 그 관계의 구현을 예시하는 기능적 구조 블록의 도움으로 위에서 설명되었다. 이들 기능적 구조 블록의 경계는 설명의 편의를 위해 여기서 임의로 정의되었다. 특정 기능 및 그 관계가 적절히 수행되는 한 대체 경계가 정의될 수 있다.
특정 실시예의 상기 설명은 타인이 본 발명의 일반적 개념으로부터 벗어남이 없이 과도한 실험없이 당업자의 지식을 적용함으로써 그러한 특정 실시예의 다양한 응용을 위해 쉽게 수정 및/또는 적응할 수 있도록 그렇게 본 발명의 일반적 본성을 충분히 드러낼 것이다. 그래서, 그러한 적응 및 수정은, 여기서 제시된 가르침 및 가이드에 기반하여, 개시된 실시예의 균등물의 의미 및 범위 내에 있는 것으로 의도된다. 본 명세서의 어법 또는 용어는 그 가르침 및 가이드에 비추어 당업자에 의해 해석되도록 여기에서의 어법 또는 용어는 제한이 아닌 설명의 목적을 위한 것임을 이해해야 한다.
본 발명의 폭 및 범위는 위에서 설명된 전형적 실시예 중 어느 것에 의해서도 한정되어서는 안 되며, 이하의 청구범위 및 그들 균등물에 의해서만 정의되어야 한다.

Claims (12)

  1. 방법으로서,
    포인터를, 메모리 내 데이터에 액세스하는 것과 연관되어, 입/출력 메모리 관리 유닛(IOMMU)을 통해 입/출력(I/O) 디바이스에 패스하는 단계로서, 상기 I/O 디바이스는 상기 데이터를 로컬 I/O 디바이스 메모리에 복사함이 없이 상기 IOMMU를 통해 상기 메모리 내 상기 데이터에 액세스하는 것인, 상기 패스하는 단계; 및
    상기 I/O 디바이스에 의해, 상기 포인터에 기반하여 상기 메모리 내 상기 데이터 상에 동작을 수행하는 단계를 포함하는 방법.
  2. 제1항에 있어서, 상기 IOMMU는 하이퍼바이저 또는 게스트 운영 체제(OS)에 의한 개입 필요성 없이 상기 포인터를 패스하도록 구성되는 것인 방법.
  3. 제1항에 있어서, 상기 포인터는, 상기 포인터를 재구성함이 없이, 상기 I/O 디바이스, 및 가상 머신 내 실행 중 프로세스에 의해 사용가능하도록 구성되는 것인 방법.
  4. 제1항에 있어서, 상기 I/O 디바이스에 의해, 상기 IOMMU와 연관된 네스팅된 페이징 트랜잭션을 사용하여 상기 메모리 내 상기 데이터를 조작하는 단계를 더 포함하는 방법.
  5. 제1항에 있어서, 상기 데이터는 이미지 데이터를 포함하는 것인 방법.
  6. 제1항에 있어서, 상기 메모리 및 상기 I/O 디바이스는 상기 메모리 내 상기 데이터의 게스트 OS에 의한 직접 조작을 위해 제공하도록 동일 게스트 가상 어드레스 공간으로부터 동작하는 것인 방법.
  7. 장치로서,
    포인터를, 메모리 내 데이터에 액세스하는 것과 연관되어, 입/출력(I/O) 디바이스에 패스하도록 구성된 입/출력 메모리 관리 유닛(IOMMU)을 포함하되, 상기 I/O 디바이스는 상기 데이터를 로컬 I/O 디바이스 메모리에 복사함이 없이 상기 IOMMU를 통해 상기 메모리 내 상기 데이터에 액세스하고,
    상기 포인터는 상기 I/O 디바이스가 상기 메모리 내 상기 데이터 상에 동작을 수행 가능하게 하도록 구성되는 것인 장치.
  8. 제7항에 있어서, 상기 IOMMU는 하이퍼바이저 또는 게스트 운영 체제(OS)에 의한 개입 필요성 없이 상기 포인터를 패스하도록 구성되는 것인 장치.
  9. 제7항에 있어서, 상기 포인터는, 상기 포인터를 재구성함이 없이, 상기 I/O 디바이스, 및 가상 머신 내 실행 중 프로세스에 의해 사용가능하도록 구성되는 것인 장치.
  10. 제7항에 있어서, 상기 IOMMU와 연관된 네스팅된 페이징 트랜잭션은 상기 I/O 디바이스가 상기 메모리 내 상기 데이터를 조작 가능하게 하는 것인 장치.
  11. 제7항에 있어서, 상기 메모리 내 상기 데이터는 이미지 데이터를 포함하는 것인 장치.
  12. 제7항에 있어서, 상기 메모리 및 상기 I/O 디바이스는 상기 메모리 내 상기 데이터의 게스트 OS에 의한 직접 조작을 위해 제공하도록 동일 게스트 가상 어드레스 공간으로부터 동작하는 것인 장치.
KR1020147016579A 2011-11-30 2012-11-19 효율적 메모리 및 자원 관리 KR101861297B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/308,211 2011-11-30
US13/308,211 US8719464B2 (en) 2011-11-30 2011-11-30 Efficient memory and resource management
PCT/US2012/065860 WO2013081884A1 (en) 2011-11-30 2012-11-19 Efficient memory and resource management

Publications (2)

Publication Number Publication Date
KR20140102695A true KR20140102695A (ko) 2014-08-22
KR101861297B1 KR101861297B1 (ko) 2018-05-25

Family

ID=47436175

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020147016579A KR101861297B1 (ko) 2011-11-30 2012-11-19 효율적 메모리 및 자원 관리

Country Status (6)

Country Link
US (1) US8719464B2 (ko)
EP (1) EP2786259A1 (ko)
JP (1) JP5870206B2 (ko)
KR (1) KR101861297B1 (ko)
CN (1) CN104040518B (ko)
WO (1) WO2013081884A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020251790A1 (en) * 2019-06-10 2020-12-17 Advanced Micro Devices, Inc. Guest operating system buffer and log access by an input-output memory management unit

Families Citing this family (56)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8307180B2 (en) 2008-02-28 2012-11-06 Nokia Corporation Extended utilization area for a memory device
US8874824B2 (en) 2009-06-04 2014-10-28 Memory Technologies, LLC Apparatus and method to share host system RAM with mass storage memory RAM
US9417998B2 (en) 2012-01-26 2016-08-16 Memory Technologies Llc Apparatus and method to provide cache move with non-volatile mass memory system
US9311226B2 (en) 2012-04-20 2016-04-12 Memory Technologies Llc Managing operational state data of a memory module using host memory in association with state change
US9164804B2 (en) 2012-06-20 2015-10-20 Memory Technologies Llc Virtual memory module
US9319254B2 (en) * 2012-08-03 2016-04-19 Ati Technologies Ulc Methods and systems for processing network messages in an accelerated processing device
US9116820B2 (en) 2012-08-28 2015-08-25 Memory Technologies Llc Dynamic central cache memory
US9479466B1 (en) * 2013-05-23 2016-10-25 Kabam, Inc. System and method for generating virtual space messages based on information in a users contact list
US9734079B2 (en) * 2013-06-28 2017-08-15 Intel Corporation Hybrid exclusive multi-level memory architecture with memory management
US9396113B2 (en) 2013-08-06 2016-07-19 Oracle International Corporation Flexible configuration hardware streaming unit
US9886736B2 (en) * 2014-01-20 2018-02-06 Nvidia Corporation Selectively killing trapped multi-process service clients sharing the same hardware context
US9830289B2 (en) 2014-09-16 2017-11-28 Apple Inc. Methods and apparatus for aggregating packet transfer over a virtual bus interface
US9798377B2 (en) 2014-10-08 2017-10-24 Apple Inc. Methods and apparatus for recovering errors with an inter-processor communication link between independently operable processors
CN105701019A (zh) 2014-11-25 2016-06-22 阿里巴巴集团控股有限公司 一种内存管理方法以及装置
US10042794B2 (en) 2015-06-12 2018-08-07 Apple Inc. Methods and apparatus for synchronizing uplink and downlink transactions on an inter-device communication link
US10055136B2 (en) * 2015-07-29 2018-08-21 Red Hat Israel, Ltd. Maintaining guest input/output tables in swappable memory
US9846592B2 (en) * 2015-12-23 2017-12-19 Intel Corporation Versatile protected input/output device access and isolated servicing for virtual machines
US10085214B2 (en) 2016-01-27 2018-09-25 Apple Inc. Apparatus and methods for wake-limiting with an inter-device communication link
US10572390B2 (en) 2016-02-29 2020-02-25 Apple Inc. Methods and apparatus for loading firmware on demand
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
US10120709B2 (en) 2016-02-29 2018-11-06 Red Hat Israel, Ltd. Guest initiated atomic instructions for shared memory page host copy on write
US10198364B2 (en) 2016-03-31 2019-02-05 Apple Inc. Memory access protection apparatus and methods for memory mapped access between independently operable processors
US10678702B2 (en) 2016-05-27 2020-06-09 Advanced Micro Devices, Inc. Using multiple memory elements in an input-output memory management unit for performing virtual address to physical address translations
US10109099B2 (en) * 2016-09-29 2018-10-23 Intel Corporation Method and apparatus for efficient use of graphics processing resources in a virtualized execution enviornment
US10551902B2 (en) 2016-11-10 2020-02-04 Apple Inc. Methods and apparatus for providing access to peripheral sub-system registers
US10775871B2 (en) 2016-11-10 2020-09-15 Apple Inc. Methods and apparatus for providing individualized power control for peripheral sub-systems
KR101716715B1 (ko) 2016-12-27 2017-03-15 주식회사 티맥스클라우드 가상 머신 환경의 네트워크 입출력 장치 가상화 방법 및 장치
CN106874212A (zh) * 2016-12-30 2017-06-20 郑州云海信息技术有限公司 一种基于ipsan的存储器的通信方法和系统
US11200183B2 (en) * 2017-03-31 2021-12-14 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
US10565126B2 (en) * 2017-07-14 2020-02-18 Arm Limited Method and apparatus for two-layer copy-on-write
US10346226B2 (en) 2017-08-07 2019-07-09 Time Warner Cable Enterprises Llc Methods and apparatus for transmitting time sensitive data over a tunneled bus interface
CN109582599B (zh) * 2017-09-29 2023-12-22 上海宝存信息科技有限公司 数据储存装置以及非挥发式存储器操作方法
US11372787B2 (en) * 2017-12-09 2022-06-28 Intel Corporation Unified address space for multiple links
US10331612B1 (en) 2018-01-09 2019-06-25 Apple Inc. Methods and apparatus for reduced-latency data transmission with an inter-processor communication link between independently operable processors
US10990436B2 (en) * 2018-01-24 2021-04-27 Dell Products L.P. System and method to handle I/O page faults in an I/O memory management unit
US20190227942A1 (en) * 2018-01-24 2019-07-25 Dell Products, Lp System and Method to Handle I/O Page Faults in an I/O Memory Management Unit
US11792307B2 (en) 2018-03-28 2023-10-17 Apple Inc. Methods and apparatus for single entity buffer pool management
US10430352B1 (en) 2018-05-18 2019-10-01 Apple Inc. Methods and apparatus for reduced overhead data transfer with a shared ring buffer
US10585699B2 (en) 2018-07-30 2020-03-10 Apple Inc. Methods and apparatus for verifying completion of groups of data transactions between processors
US10846224B2 (en) 2018-08-24 2020-11-24 Apple Inc. Methods and apparatus for control of a jointly shared memory-mapped region
US10719376B2 (en) 2018-08-24 2020-07-21 Apple Inc. Methods and apparatus for multiplexing data flows via a single data structure
US10838450B2 (en) 2018-09-28 2020-11-17 Apple Inc. Methods and apparatus for synchronization of time between independently operable processors
US10789110B2 (en) 2018-09-28 2020-09-29 Apple Inc. Methods and apparatus for correcting out-of-order data transactions between processors
US11249918B2 (en) * 2018-10-30 2022-02-15 Hewlett Packard Enterprise Development Lp Mapping entry invalidation
US11558348B2 (en) 2019-09-26 2023-01-17 Apple Inc. Methods and apparatus for emerging use case support in user space networking
US11829303B2 (en) 2019-09-26 2023-11-28 Apple Inc. Methods and apparatus for device driver operation in non-kernel space
US11606302B2 (en) 2020-06-12 2023-03-14 Apple Inc. Methods and apparatus for flow-based batching and processing
US11182092B1 (en) 2020-07-14 2021-11-23 Red Hat, Inc. PRI overhead reduction for virtual machine migration
US11775359B2 (en) 2020-09-11 2023-10-03 Apple Inc. Methods and apparatuses for cross-layer processing
US11954540B2 (en) 2020-09-14 2024-04-09 Apple Inc. Methods and apparatus for thread-level execution in non-kernel space
US11799986B2 (en) 2020-09-22 2023-10-24 Apple Inc. Methods and apparatus for thread level execution in non-kernel space
CN112507649B (zh) * 2020-12-23 2024-04-02 珠海一微半导体股份有限公司 一种模拟版图的数模引脚映射到数字版图的方法
CN117063168A (zh) * 2021-03-25 2023-11-14 英特尔公司 用于iommu的pasid粒度资源控制
US11876719B2 (en) 2021-07-26 2024-01-16 Apple Inc. Systems and methods for managing transmission control protocol (TCP) acknowledgements
US11882051B2 (en) 2021-07-26 2024-01-23 Apple Inc. Systems and methods for managing transmission control protocol (TCP) acknowledgements

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6684305B1 (en) * 2001-04-24 2004-01-27 Advanced Micro Devices, Inc. Multiprocessor system implementing virtual memory using a shared memory, and a page replacement method for maintaining paged memory coherence
JP3892829B2 (ja) * 2003-06-27 2007-03-14 株式会社東芝 情報処理システムおよびメモリ管理方法
US7562179B2 (en) * 2004-07-30 2009-07-14 Intel Corporation Maintaining processor resources during architectural events
US7454414B2 (en) * 2005-08-30 2008-11-18 International Business Machines Corporation Automatic data retrieval system based on context-traversal history
US7653803B2 (en) * 2006-01-17 2010-01-26 Globalfoundries Inc. Address translation for input/output (I/O) devices and interrupt remapping for I/O devices in an I/O memory management unit (IOMMU)
US20110016290A1 (en) * 2009-07-14 2011-01-20 Arie Chobotaro Method and Apparatus for Supporting Address Translation in a Multiprocessor Virtual Machine Environment
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
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
US8438360B2 (en) * 2009-11-23 2013-05-07 Symantec Corporation Distributed storage through a volume device architecture
US20110161620A1 (en) * 2009-12-29 2011-06-30 Advanced Micro Devices, Inc. Systems and methods implementing shared page tables for sharing memory resources managed by a main operating system with accelerator devices
US8244978B2 (en) * 2010-02-17 2012-08-14 Advanced Micro Devices, Inc. IOMMU architected TLB support

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020251790A1 (en) * 2019-06-10 2020-12-17 Advanced Micro Devices, Inc. Guest operating system buffer and log access by an input-output memory management unit
CN114080587A (zh) * 2019-06-10 2022-02-22 超威半导体公司 输入-输出存储器管理单元对访客操作系统缓冲区和日志的访问

Also Published As

Publication number Publication date
JP5870206B2 (ja) 2016-02-24
KR101861297B1 (ko) 2018-05-25
WO2013081884A1 (en) 2013-06-06
EP2786259A1 (en) 2014-10-08
JP2015500524A (ja) 2015-01-05
CN104040518B (zh) 2016-11-16
US8719464B2 (en) 2014-05-06
CN104040518A (zh) 2014-09-10
US20130138840A1 (en) 2013-05-30

Similar Documents

Publication Publication Date Title
KR101861297B1 (ko) 효율적 메모리 및 자원 관리
US20130145055A1 (en) Peripheral Memory Management
US20130145051A1 (en) Direct Device Assignment
JP6110946B2 (ja) ゲスト仮想マシン内の仮想入出力メモリ管理ユニット
US9606936B2 (en) Generalized control registers
US20130262736A1 (en) Memory types for caching policies
US20120246381A1 (en) Input Output Memory Management Unit (IOMMU) Two-Layer Addressing
US8578129B2 (en) Infrastructure support for accelerated processing device memory paging without operating system integration
US11907542B2 (en) Virtualized-in-hardware input output memory management
CN109690505B (zh) 用于针对虚拟化输入/输出实施方式的混合层地址映射的设备和方法
AMD et al. Technology (IOMMU) specification
US11550722B2 (en) Method, system, and apparatus for supporting multiple address spaces to facilitate data movement
US20230418762A1 (en) Unified address translation for virtualization of input/output devices
US20220206942A1 (en) Method, system, and apparatus for supporting multiple address spaces to facilitate data movement

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant