KR20130142166A - 입력 출력 메모리 관리 유닛(iommu)의 2층 어드레싱 - Google Patents
입력 출력 메모리 관리 유닛(iommu)의 2층 어드레싱 Download PDFInfo
- Publication number
- KR20130142166A KR20130142166A KR1020137016556A KR20137016556A KR20130142166A KR 20130142166 A KR20130142166 A KR 20130142166A KR 1020137016556 A KR1020137016556 A KR 1020137016556A KR 20137016556 A KR20137016556 A KR 20137016556A KR 20130142166 A KR20130142166 A KR 20130142166A
- Authority
- KR
- South Korea
- Prior art keywords
- guest
- page table
- gpa
- gva
- address
- Prior art date
- Legal status (The legal status 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 status listed.)
- Withdrawn
Links
- 238000013519 translation Methods 0.000 claims abstract description 102
- 238000012545 processing Methods 0.000 claims abstract description 60
- 238000000034 method Methods 0.000 claims abstract description 42
- 230000008569 process Effects 0.000 claims description 22
- 238000006243 chemical reaction Methods 0.000 claims description 8
- 230000009466 transformation Effects 0.000 claims description 7
- 238000000844 transformation Methods 0.000 claims description 3
- 230000014616 translation Effects 0.000 description 87
- 239000010410 layer Substances 0.000 description 20
- 238000010586 diagram Methods 0.000 description 18
- 239000013256 coordination polymer Substances 0.000 description 17
- 239000000872 buffer Substances 0.000 description 13
- 230000006870 function Effects 0.000 description 13
- 238000004891 communication Methods 0.000 description 9
- 230000002093 peripheral effect Effects 0.000 description 4
- 241001492240 Grapevine virus A Species 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 2
- 229910052710 silicon Inorganic materials 0.000 description 2
- 239000010703 silicon Substances 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 239000013598 vector Substances 0.000 description 2
- 238000000098 azimuthal photoelectron diffraction Methods 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 239000007853 buffer solution Substances 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000002360 explosive Substances 0.000 description 1
- 230000006658 host protein synthesis Effects 0.000 description 1
- 230000009249 intrinsic sympathomimetic activity Effects 0.000 description 1
- 230000033001 locomotion Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000001404 mediated effect Effects 0.000 description 1
- 230000007334 memory performance Effects 0.000 description 1
- 238000004886 process control Methods 0.000 description 1
- 238000007616 round robin method Methods 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 239000002356 single layer Substances 0.000 description 1
- 239000000243 solution Substances 0.000 description 1
- 230000036962 time dependent Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 238000011144 upstream manufacturing Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/109—Address translation for multiple virtual address spaces, e.g. segmentation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1081—Address translation for peripheral access to main memory, e.g. direct memory access [DMA]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/15—Use in a specific computing environment
- G06F2212/151—Emulated environment, e.g. virtual machine
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/65—Details of virtual memory and virtual address translation
- G06F2212/651—Multi-level translation tables
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
본 발명의 실시예는 I/O 디바이스에 대해 메모리 어드레스 변환의 문맥에서 입력 출력 메모리 관리 유닛(IOMMU) 2층 어드레싱을 위한 방법, 시스템 및 컴퓨터 판독가능한 매체를 제공한다. 일 실시예에서, 방법은 I/O 디바이스와 연관된 어드레스 변환 트랜잭션과 연관된 처리 어드레스 공간 식별자에 따라 게스트 어드레스 변환 테이블을 사용하여 게스트 가상 어드레스(GVA)를 대응하는 게스트 물리적 어드레스(GPA)로 변환하는 단계; 및 상기 어드레스 변환 트랜잭션과 연관된 디바이스 식별자에 따라 시스템 어드레스 변환 테이블을 사용하여 상기 GPA를 대응하는 시스템 물리적 어드레스(SPA)로 변환하는 단계를 포함한다.
Description
본 발명은 일반적으로 컴퓨터 시스템(computer system)에 관한 것이다. 보다 상세하게는, 본 발명은 입력/출력 메모리 관리 유닛에 관한 것이다.
일반적인 연산(computation)에 그래픽 처리 유닛(GPU: graphics processing unit)을 사용하려는 요구가 최근에 단위 전력 및/또는 비용당 GPU의 예시적인 성능으로 인해 훨씬 더 높아지고 있다. GPU의 연산 성능(computational capabilities)은 일반적으로 대응하는 CPU(central processing unit) 플랫폼의 것을 초과하는 율(rate)로 성장하였다. 모바일 컴퓨팅 시장(예를 들어, 노트북, 모바일 스마트폰, 태블릿 등) 및 필요한 지원 서버/기업용 시스템의 폭발적 증가와 연결된 이러한 성장은 원하는 유저 경험의 특정된 품질을 제공하는데 사용되고 있다. 그 결과, 데이터와 병렬로 콘텐츠에 작업부하(workload)를 실행하기 위해 CPU와 GPU를 결합하여 사용하는 것은 볼륨 기술(volume technology)이 되고 있다.
그러나, GPU는 전통적으로 주로 그래픽을 가속시키기 위하여 이용가능한 제약된 프로그래밍 환경에서 동작된다. 이들 제약은 GPU가 CPU만큼 풍부한 프로그래밍 에코시스템을 가지지 않는다는 것에 기인한다. 그리하여, 그 사용은 그래픽 및 비디오 애플리케이션 프로그래밍 인터페이스(API: application programming interface)로 처리하는 것에 이미 익숙해진, 대부분 2차원(2D)과 3차원(3D) 그래픽 및 일부 선도하는 멀티미디어 애플리케이션으로 제한된다.
다수 벤더 지원 OpenCL(등록상표)과 DirectCompute(등록상표), 표준 API 및 지원 툴의 도래로, 전통적인 애플리케이션에서 GPU의 제한은 전통적인 그래픽을 넘어 확장되었다. OpenCL 및 DirectCompute가 유망한 시작이라 하더라도, CPU와 GPU의 조합이 대부분 프로그래밍 작업에 CPU만큼 유동적으로 사용되게 하는 환경 및 에코시스템을 생성하는 것에 많은 장애들이 남아있다.
현존하는 컴퓨팅 시스템은 종종 다수의 처리 디바이스를 포함한다. 예를 들어, 일부 컴퓨팅 시스템은 별개의 칩에 CPU와 GPU를 포함하거나(예를 들어, CPU는 마더보드 상에 위치될 수 있고 GPU는 그래픽 카드 상에 위치될 수 있음) 단일 칩 패키지에 CPU와 GPU를 모두 포함한다. 그러나, 이들 두 배열은 전력 소비를 최소화하면서 (i) 효과적인 스케줄링, (ii) 처리 사이에 서비스 품질(QoS: quality of service) 보장 제공, (iii) 모델 프로그래밍, (iv) 다수의 타깃 인스트럭션 세트 아키텍처(ISA: instruction set architecture)로 컴파일링 및 (v) 별개의 메모리 시스템과 연관된(associated) 상당한 문제를 여전히 포함한다.
예를 들어, 이산 칩 배열은 각 프로세서가 메모리에 액세스하기 위한 칩 대 칩 인터페이스를 시스템과 소프트웨어 아키텍처가 이용할 수 있게 한다. 이들 외부 인터페이스(예를 들어, 칩 대 칩)는 이종 프로세서와 협력하기 위해 메모리 지체와 전력 소비에 부작용을 나타내지만, 별개의 메모리 시스템(즉, 별개의 어드레스 공간)과 드라이버로 관리되는 공유 메모리는 정밀 입도 오프로드(fine grain offload)에 허용가능하지 않는 오버헤드를 생성한다.
GPU는 다른 주변장치(예를 들어, 입력/출력(I/O) 디바이스)와 함께 컴퓨팅 시스템의 시스템 메모리에 저장된 정보에 액세스할 것을 요구할 수 있다. 개선된 성능에서, 컴퓨팅 시스템은 I/O 디바이스에 대한 가상 메모리 성능을 제공할 수 있. 따라서, I/O 디바이스는 가상 어드레스에 기초하여 정보를 요청할 수 있고, 컴퓨팅 시스템은 가상 어드레스를 시스템 메모리에 대응하는 물리적 어드레스로 변환한다. 입력/출력 메모리 관리 유닛(IOMMU: input/output memory management unit)은 I/O 디바이스와 시스템 메모리 사이에 어드레스 변환 서비스를 제공할 수 있다.
컴퓨팅 시스템은 또한 하이퍼바이저(hypervisor)에 의해 관리되는 가상화된 게스트 운영 시스템(OS: operating system)을 포함하는 다수의 가상화된 시스템을 더 제공할 수 있다. I/O 디바이스에 액세스를 제공하기 위하여, 컴퓨팅 시스템은 각 게스트 OS에 대해 I/O 디바이스를 가상화할 수 있다. 즉, 하이퍼바이저는 각 가상화된 게스트 OS에 대해 가상 메모리 어드레스를 물리적 메모리 어드레스로 변환을 조정하는 것에 의해 시스템 메모리를 조작한다. 이 처리는 각 게스트 OS가 I/O 디바이스에 액세스하는 유일한 OS인 것처럼 각 가상화된 시스템이 I/O 디바이스에 액세스할 수 있도록 수행된다.
따라서, 하이퍼바이저는 어드레스 변환에 모든 요청을 수용하는 소프트웨어 루틴을 실행할 때 병목 지점이 될 수 있다. 이들 각 변환은 IOMMU에 액세스하는 것과 연관되므로, 하이퍼바이저의 소프트웨어 기반 동작은 상당한 오버헤드를 나타낸다. 이 오버헤드는 성능을 저하시킬 수 있다.
따라서, 컴퓨팅 시스템에서 게스트 OS에 대해 어드레스 변환을 제공하는 능력이 요구된다.
GPU, 가속 처리 유닛(APU: accelerated processing unit), 및 일반 목적 사용의 그래픽 처리 유닛(GPGPU: general purpose use of the graphics processing unit)이 이 분야에서 일반적으로 사용되는 용어이지만, "가속 처리 디바이스(APD: accelerated processing device)"라는 표현이 더 넓은 표현인 것으로 고려된다. 예를 들어, APD는 종래의 CPU, 종래의 GPU, 소프트웨어 및/또는 이들의 조합에 비해 가속된 방식으로 가속 그래픽 처리 작업, 데이터 병렬 작업, 또는 내포된 데이터 병렬 작업과 연관된 기능(function)과 연산을 수행하는 하드웨어 및/또는 소프트웨어의 임의의 협력하는 집합을 말한다.
본 발명의 실시예는 특정 상황에서 I/O 디바이스에 대한 메모리 어드레스 변환의 문맥에서 IOMMU 2층 어드레싱을 위한 방법, 시스템 및 컴퓨터 판독가능한 매체에 관한 것이다. 예시적인 방법은 I/O 디바이스와 연관된 어드레스 변환 트랜잭션(address translation transaction)과 연관된 처리 어드레스 공간 식별자에 따라 게스트 어드레스 변환 테이블을 사용하여 게스트 가상 어드레스(GVA: guest virtual address)를 대응하는 게스트 물리적 어드레스(GPA)로 변환하는 것을 포함한다. GPA는 어드레스 변환 트랜잭션과 연관된 디바이스 식별자에 따라 시스템 어드레스 변환 테이블을 사용하여 대응하는 시스템 물리적 어드레스(SPA: system physical address)로 변환된다.
본 발명의 추가적인 특징과 이점 및 본 발명의 여러 실시예의 구조와 동작이 첨부 도면을 참조하여 상세히 후술된다. 본 발명은 본 명세서에 설명된 특정 실시예로 제한되는 것은 아니라는 것이 주목된다. 이 실시예는 단지 예시를 위해서만 본 명세서에 제공된 것이다. 추가적인 실시예는 본 명세서에 포함된 개시 내용에 기초하여 관련 기술 분야(들)에서 통상의 지식을 가진 자에게 명백할 것이다.
본 명세서의 일부를 형성하고 본 명세서에 포함된 첨부 도면은 본 발명을 예시하고, 본 상세한 설명과 함께 본 발명의 원리를 설명하고 관련 기술 분야에 통상의 지식을 가진 자라면 본 발명을 제조하고 사용할 수 있게 하는 역할을 한다. 본 발명의 여러 실시예는 동일한 참조 부호가 도면 전체에 걸쳐 동일한 요소를 나타내는데 사용된 도면을 참조하여 후술된다.
도 1a는 본 발명의 실시예에 따른 처리 시스템의 예시적인 블록도;
도 1b는 도 1a에 도시된 가속 처리 디바이스(accelerated processing device)의 예시적인 블록도;
도 2는 본 발명의 실시예에 따라 CPU와 I/O 디바이스를 위한 IOMMU 아키텍처 및 메모리 관리, 및 시스템 메모리 맵핑 구조의 예시적인 블록도;
도 3은 본 발명의 실시예에 따라 가상화된 시스템의 예시적인 블록도;
도 4는 본 발명의 실시예에 따라 IOMMU 및 시스템 메모리와 연관된 데이터 구조의 예시적인 블록도;
도 5는 2층 어드레스 변환과 연관된 데이터 구조의 예시적인 블록도;
도 6a는 본 발명의 실시예에 따라 2층 어드레스 변환 시스템의 예시적인 블록도;
도 6b는 본 발명의 실시예에 따라 GVA-SPA 어드레스 변환 시스템의 예시적인 블록도;
도 7은 본 발명의 실시예에 따라 2층 어드레싱을 도시한 흐름도의 예시적인 블록도.
도 1a는 본 발명의 실시예에 따른 처리 시스템의 예시적인 블록도;
도 1b는 도 1a에 도시된 가속 처리 디바이스(accelerated processing device)의 예시적인 블록도;
도 2는 본 발명의 실시예에 따라 CPU와 I/O 디바이스를 위한 IOMMU 아키텍처 및 메모리 관리, 및 시스템 메모리 맵핑 구조의 예시적인 블록도;
도 3은 본 발명의 실시예에 따라 가상화된 시스템의 예시적인 블록도;
도 4는 본 발명의 실시예에 따라 IOMMU 및 시스템 메모리와 연관된 데이터 구조의 예시적인 블록도;
도 5는 2층 어드레스 변환과 연관된 데이터 구조의 예시적인 블록도;
도 6a는 본 발명의 실시예에 따라 2층 어드레스 변환 시스템의 예시적인 블록도;
도 6b는 본 발명의 실시예에 따라 GVA-SPA 어드레스 변환 시스템의 예시적인 블록도;
도 7은 본 발명의 실시예에 따라 2층 어드레싱을 도시한 흐름도의 예시적인 블록도.
이하 상세한 설명에서 "하나의 실시예", "일 실시예", "예시적인 실시예" 등으로 언급하는 것은 설명된 실시예가 특정 특징, 구조 또는 특성을 포함할 수 있으나 모든 실시예가 이 특정 특징, 구조 또는 특성을 반드시 포함하는 것은 아니라는 것을 나타낸다. 나아가, 이 어구는 반드시 동일한 실시예를 언급하는 것이 아니다. 나아가, 특정 특징, 구조 또는 특성이 일 실시예와 관련하여 설명될 때 이 특징, 구조, 또는 특성이 명시적으로 설명되었건 아니건 간에 다른 실시예에도 영향을 미친다는 것은 이 기술 분야에 통상의 지식을 가진 자의 지식 범위 내인 것으로 제시된다.
"본 발명의 실시예"라는 용어는 본 발명의 모든 실시예가 설명된 특징, 이점 또는 동작 모드를 포함하는 것을 요구하는 것이 아니다. 대안적인 실시예가 본 발명의 범위를 벗어남이 없이 고안될 수 있고, 본 발명의 잘 알려진 요소들은 본 발명의 관련 상세를 흐리게 하지 않기 위하여 상세히 설명되지 않거나 생략될 수 있다. 나아가, 본 명세서에 사용된 용어는 특정 실시예를 단지 설명하기 위한 것일 뿐 본 발명을 제한하려고 의도된 것이 전혀 아니다. 예를 들어, 본 명세서에 사용된 바와 같이, 단수 형태 "하나", "일" 및 "상기"는 문맥이 달리 명확히 지시하지 않는 한, 복수의 형태를 또한 포함하는 것을 의미한다. 또한 "포함한다", "포함하는", "구비한다" 및/또는 "구비하는"이라는 용어가 본 명세서에 사용될 때 이 용어는 언급된 특징, 완전체, 단계, 동작, 요소 및/또는 성분의 존재를 특정하는 것이나, 하나 이상의 다른 특징, 완전체, 단계, 동작, 요소, 성분, 및/또는 이들의 그룹의 존재나 추가를 배제하는 것은 아니다.
도 1a는 2개의 프로세서, 즉 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)를 또한 포함한다. 운영 시스템(108)과 통신 인프라(109)는 아래에서 보다 상세히 설명된다.
시스템(100)은 또한 커널 모드 드라이버(KMD: kernel mode driver)(110), 소프트웨어 스케줄러(SWS: software scheduler)(112), 및 메모리 관리 유닛(memory management unit)(116), 예를 들어, 입력/출력 메모리 관리 유닛(IOMMU: input/output memory management unit)을 포함한다. 시스템(100)의 성분은 하드웨어, 펌웨어, 소프트웨어, 또는 이들의 임의의 조합으로 구현될 수 있다. 이 기술 분야에 통상의 지식을 가진 자라면 시스템(100)이 도 1a에 도시된 실시예에 도시된 것에 더하여 또는 이와 다르게 하나 이상의 소프트웨어, 하드웨어 및 펌웨어를 포함할 수 있다는 것을 인식할 수 있을 것이다.
일례에서, KMD(110)와 같은 드라이버는 일반적으로 하드웨어와 연결된 컴퓨터 버스 또는 통신 서브시스템을 통해 디바이스와 통신한다. 호출 프로그램(calling program)이 드라이버에서 루틴을 호출할 때, 드라이버는 명령을 이 디바이스에 발송한다. 디바이스가 드라이버에 다시 데이터를 송신하면, 드라이버는 원래의 호출 프로그램에서 루틴을 호출할 수 있다. 일례에서, 드라이버는 하드웨어에 종속하고 연산 시스템에 특정된다. 이들 드라이버는 통상 임의의 필요한 비동기 시간 종속 하드웨어 인터페이스에 필요한 인터럽트 핸들링(handling)을 제공한다.
특히 현대 마이크로소프트 윈도우(Microsoft Windows)(등록상표) 플랫폼에 있는 디바이스 드라이버는 커널 모드(kernel-mode)(링 0)이나 유저 모드(링 3)에서 실행할 수 있다. 유저 모드에서 드라이버를 실행하는 주요 이점은 불량하게 기록된 유저 모드 디바이스 드라이버가 커널 메모리를 덮어쓰기하는(overwrite) 것에 의해 시스템과 충돌할 수 없으므로 안정성이 개선된다는 것이다. 한편, 유저/커널 모드 전이(transition)는 통상적으로 상당한 성능 오버헤드를 부과하여 이에 의해 낮은 지체(latency)와 높은 처리량 요구조건에 유저 모드 드라이버를 금지한다. 커널 공간은 시스템 호출의 사용을 통해서만 유저 모듈에 의해 액세스될 수 있다. UNIX 쉘(shell) 또는 다른 GUI 기반 애플리케이션과 같은 최종 유저 프로그램은 유저 공간의 일부이다. 이들 애플리케이션은 커널 지원 기능을 통해 하드웨어와 상호작용한다.
CPU(102)는 제어 프로세서(control processor), 전계 프로그래밍가능한 게이트 어레이(FPGA: field programmable gate array), 애플리케이션 특정 집적 회로(ASIC: application specific integrated circuit), 또는 디지털 신호 프로세서(DSP: digital signal processor) 중 하나 이상(미도시)을 포함할 수 있다. CPU(102)는 예를 들어, 컴퓨팅 시스템(100)의 동작을 제어하는 OS(108), KMD(110), SWS(112), 및 애플리케이션(111)을 포함하는 제어 로직(control logic)을 실행한다. 이 예시적인 실시예에서, CPU(102)는 일 실시예에 따라, 예를 들어 CPU(102)에 걸쳐 이 애플리케이션과 연관된 처리와 APD(104)와 같은 다른 처리 자원을 분배하는 것에 의해 애플리케이션(111)의 실행을 개시하고 제어한다.
특히 APD(104)는 그래픽 동작, 및 예를 들어 특히 병렬 처리에 적합할 수 있는 다른 동작과 같은 선택된 기능을 위한 명령 및 프로그램을 실행한다. 일반적으로, APD(104)는 픽셀 동작, 기하학적 연산과 같은 그래픽 파이프라인 동작을 실행하고 이미지를 디스플레이로 렌더링하는데 종종 사용될 수 있다. 본 발명의 여러 실시예에서, APD(104)는 CPU(102)로부터 수신된 명령(command) 또는 인스트럭션(instruction)에 기초하여 연산(compute) 처리 동작(예를 들어, 비디오 동작, 물리적 시뮬레이션, 연산 유동 역학 등과 같은 예를 들어 그래픽과 관계없는 동작)을 더 실행할 수 있다.
예를 들어, 명령(command)은 일반적으로 인스트럭션 세트 아키텍처(ISA)에서 한정되지 않은 특정 인스트럭션(instruction)으로 고려될 수 있다. 명령은 디스패치 프로세서, 명령 프로세서, 또는 네트워크 제어기와 같은 특별 프로세서에 의해 실행될 수 있다. 한편, 인스트럭션은 예를 들어 컴퓨터 아키텍처 내 프로세서의 단일 동작으로 고려될 수 있다. 일례에서, ISA의 2개의 세트를 사용할 때, 일부 인스트럭션은 x86 프로그램을 실행하는데 사용되고 일부 인스트럭션은 APD 연산 유닛에서 커널을 실행하는데 사용된다.
예시적인 실시예에서, CPU(102)는 APD(104)에 선택된 명령을 전송한다. 이들 선택된 명령은 그래픽 명령과, 병렬 실행을 따르는 다른 명령을 포함할 수 있다. 연산 처리 명령을 더 포함할 수 있는 이 선택된 명령은 CPU(102)와는 실질적으로 독립적으로 실행될 수 있다.
APD(104)는 하나 이상의 SIMD 처리 코어를 포함하나 이로 제한되지 않는 자기 자신의 연산 유닛(미도시)을 포함할 수 있다. 본 명세서에 언급된 바와 같이, SIMD는 파이프라인이거나 프로그래밍 모델이고, 여기서 커널은 자기 자신의 데이터와 공유 프로그램 카운터를 각각 구비하는 다수의 처리 요소에서 동시에 실행된다. 모든 처리 요소는 동일한 인스트럭션 세트를 실행한다. 예측을 사용하면 작업 항목이 각 발송된 명령에 관여하거나 관여하지 않게 된다.
일례에서, 각 APD(104) 연산 유닛은 하나 이상의 스칼라 및/또는 벡터 부동 소수점 유닛(floating-point unit) 및/또는 산술 및 로직 유닛(ALU: arithmetic and logic unit)을 포함할 수 있다. APD 연산 유닛은 또한 역 RMS 유닛(inverse-square root unit) 및 사인/코사인 유닛(sine/cosine unit)과 같은 특수 목적 처리 유닛(미도시)을 더 포함할 수 있다. 일례에서, APD 연산 유닛은 본 명세서에서 집합적으로 셰이더 코어(shader core)(122)라고 지칭된다.
하나 이상의 SIMD를 구비하면 일반적으로 그래픽 처리에 공통인 것과 같은 데이터-병렬 작업을 실행하는데 APD(104)가 이상적으로 적합하게 된다.
픽셀 처리와 같은 일부 그래픽 파이프라인 동작, 및 다른 병렬 연산 동작은 동일한 명령 스트림이나 연산 커널이 입력 데이터 요소의 스트림이나 집합에 수행되는 것을 요구할 수 있다. 동일한 연산 커널의 각 인스턴스화(instantiation)는 이 데이터 요소를 병렬 처리하기 위하여 셰이더 코어(122)에 있는 다수의 연산 유닛에 동시에 실행될 수 있다. 본 명세서에 언급된 바와 같이, 예를 들어, 연산 커널은 프로그램에 선언되고 APD 연산 유닛에서 실행되는 인스트럭션을 포함하는 함수(function)이다. 이 함수는 또한 커널, 셰이더, 셰이더 프로그램 또는 프로그램이라고도 지칭된다.
하나의 예시적인 실시예에서, 각 연산 유닛(예를 들어, SIMD 처리 코어)은 입력 데이터를 처리하도록 특정 작업 항목의 각 인스턴스화를 실행할 수 있다. 작업 항목은 명령에 의해 디바이스에서 호출되는 커널의 병렬 실행의 집합 중 하나이다. 작업 항목은 연산 유닛에서 실행되는 작업 그룹의 일부로서 하나 이상의 처리 요소에 의해 실행될 수 있다.
작업 항목이 전체 ID와 국부 ID에 의해 집합 내에서 다른 실행과 구별된다. 일례에서, SIMD에서 동시에 실행되는 작업 그룹에 있는 작업 항목의 서브세트는 웨이브프론트(wavefront)(136)라고 지칭될 수 있다. 웨이브프론트의 폭은 연산 유닛(예를 들어, SIMD 처리 코어)의 하드웨어의 특성이다. 본 명세서에 언급된 바와 같이, 작업 그룹은 단일 연산 유닛에서 실행되는 관련된 작업 항목의 집합이다. 이 그룹에 있는 작업 항목은 동일한 커널을 실행하고 국부 메모리와 작업 그룹 배리어(barrier)를 공유한다.
예시적인 실시예에서, 작업 그룹으로부터 모든 웨이브프론트는 동일한 SIMD 처리 코어에서 실행된다. 웨이브프론트에 걸친 인스트럭션은 한번에 하나씩 발송되고, 모든 작업 항목이 동일한 제어 흐름을 따를 때, 각 작업 항목은 동일한 프로그램을 실행한다. 웨이브프론트는 또한 워프(warp), 벡터, 또는 쓰레드(thread)라고도 지칭될 수 있다.
실행 마스크 및 작업 항목 예측은 웨이브프론트 내 제어 흐름을 발산하는데 사용되는데, 여기서 각 개별 작업 항목은 커널을 통해 사실상 유니크한 코드 경로를 취할 수 있다. 부분적으로 식재된 웨이브프론트는 작업 항목의 전체 세트가 웨이브프론트 시작 시간에 이용가능하지 않을 때 처리될 수 있다. 예를 들어, 셰이더 코어(122)는 미리 결정된 개수의 웨이브프론트(136)를 동시에 실행할 수 있는데, 여기서 각 웨이브프론트(136)는 다수의 작업 항목을 포함한다.
시스템(100)에서 APD(104)는 그래픽 메모리(130)와 같은 자기 자신의 메모리를 포함한다(메모리(130)는 그래픽 전용 사용으로 제한되지 않는다). 그래픽 메모리(130)는 APD(104)에서 연산 동안 사용하기 위해 국부 메모리를 제공한다. 셰이더 코어(122) 내에서 개별 연산 유닛(미도시)은 자기 자신의 국부 데이터 저장소(미도시)를 구비할 수 있다. 일 실시예에서, APD(104)는 메모리(106)에의 액세스뿐만 아니라 국부 그래픽 메모리(130)에의 액세스를 포함한다. 다른 실시예에서, APD(104)는 APD(104)에 직접 부착되고 메모리(106)와는 별도로 부착된 동적 랜덤 액세스 메모리(DRAM: dynamic random access memory) 또는 다른 그러한 메모리(미도시)에의 액세스를 포함할 수 있다.
도시된 예에서, APD(104)는 하나 또는 "n"개의 명령 프로세서(CP: command processor)(124)를 더 포함한다. CP(124)는 APD(104)에서 처리를 제어한다. CP(124)는 메모리(106)에서 명령 버퍼(125)로부터 실행될 명령을 검색하며 APD(104)에서 이 명령의 실행을 조정한다.
일례에서, CPU(102)는 애플리케이션(111)에 기반한 명령을 적절한 명령 버퍼(125)에 입력한다. 본 명세서에 언급된 바와 같이, 애플리케이션은 CPU와 APU 내 연산 유닛에서 실행되는 프로그램 부분의 조합이다.
복수의 명령 버퍼(125)는 각각의 처리가 APD(104)에서 실행하도록 스케줄링되게 유지될 수 있다.
CP(124)는 하드웨어, 펌웨어, 또는 소프트웨어, 또는 이들의 조합으로 구현될 수 있다. 일 실시예에서, CP(124)는 스케줄링 로직을 포함하는 로직을 구현하는 마이크로코드를 가지는 감소된 인스트럭션 세트 컴퓨터(RISC: reduced instruction set computer) 엔진으로 구현된다.
APD(104)는 하나 또는 "n"개의 디스패치 제어기(DC: dispatch controller)(126)를 더 포함한다. 본 출원에서, 디스패치 라는 용어는 연산 유닛의 세트에서 작업 그룹 세트의 커널의 실행 시작을 개시하는 문맥 상태(context state)를 사용하는 디스패치 제어기에 의해 실행되는 명령을 말한다. DC(126)는 셰이더 코어(122)에서 작업 그룹을 개시하는 로직을 포함한다. 일부 실시예에서, DC(126)는 CP(124)의 일부로서 구현될 수 있다.
시스템(100)은 APD(104)에서 실행하기 위한 실행 리스트(150)로부터 처리를 선택하는 하드웨어 스케줄러(HWS: hardware scheduler)(128)를 더 포함한다. HWS(128)는 라운드 로빈 방법, 우선순위 레벨을 사용하거나 또는 다른 스케줄링 정책에 기초하여 실행 리스트(150)로부터 처리를 선택할 수 있다. 예를 들어, 우선순위 레벨은 동적으로 결정될 수 있다. HWS(128)는 예를 들어 새로운 처리를 추가하고 실행 리스트(150)로부터 현존하는 처리를 삭제하는 것에 의해 실행 리스트(150)를 관리하는 기능(functionality)을 더 포함할 수 있다. HWS(128)의 실행 리스트 관리 로직은 실행 리스트 제어기(RLC: run list controller)라고 종종 지칭된다.
본 발명의 여러 실시예에서, HWS(128)가 RLC(150)로부터 처리의 실행을 개시할 때, CP(124)는 대응하는 명령 버퍼(125)로부터 명령을 검색하고 실행하기 시작한다. 일부 경우에, CP(124)는 CPU(102)로부터 수신된 명령에 대응하는 APD(104)에서 실행될 하나 이상의 명령을 생성할 수 있다. 일 실시예에서, CP(124)는 다른 성분과 함께 APD(104) 및/또는 시스템(100)의 자원의 이용을 개선하거나 최대화하는 방식으로 APD(104)에서 명령의 우선순위 및 스케줄링을 구현한다.
APD(104)는 인터럽트 생성기(146)에 액세스하거나 이를 포함할 수 있다. 인터럽트 생성기(146)는 페이지 폴트(page fault)와 같은 인터럽트 이벤트가 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)에 상주한다. 예를 들어, 커널 모드 드라이버(110)와 소프트웨어 스케줄러(112)를 포함하는 다른 소프트웨어 명령이 또한 시스템(100)의 실행 동안 메모리(106)에 상주할 수 있다.
이 예에서, 메모리(106)는 APD(104)에 명령을 송신하도록 CPU(102)에 의해 사용되는 명령 버퍼(125)를 포함한다. 메모리(106)는 처리 리스트와 처리 정보(예를 들어, 활성 리스트(152)와 처리 제어 블록(154))를 더 포함한다. 이들 리스트 및 정보는 CPU(102)에서 실행되는 스케줄링 소프트웨어에 의해 사용되어 스케줄링 정보를 APD(104) 및/또는 관련된 스케줄링 하드웨어에 전달한다. 메모리(106)에 액세스는 메모리(106)에 연결된 메모리 제어기(140)에 의해 관리될 수 있다. 예를 들어, CPU(102)로부터 또는 다른 디바이스로부터 메모리(106)를 판독하거나 이 메모리에 기록하는 요청은 메모리 제어기(140)에 의해 관리된다.
시스템(100)의 다른 측면을 더 참조하면, IOMMU(116)는 다수 문맥의 메모리 관리 유닛이다.
본 명세서에 사용된 바와 같이 문맥은 커널이 실행되는 환경과, 동기화와 메모리 관리가 한정되는 범위로 고려될 수 있다. 문맥은 디바이스 세트, 이들 디바이스에 액세스가능한 메모리, 대응하는 메모리 특성, 및 메모리 객체에 대한 동작이나 커널(들)의 실행을 스케줄링하는데 사용되는 하나 이상의 명령 큐(command-queue)를 포함한다.
도 1a에 도시된 예를 더 참조하면, IOMMU(116)는 APD(104)를 포함하는 디바이스에 대한 메모리 페이지 액세스를 위한 가상 어드레스-물리적 어드레스의 변환(virtual to physical address translation)을 수행하는 로직을 포함한다. IOMMU(116)는 예를 들어 APD(104)와 같은 디바이스에 의해 페이지 액세스가 페이지 폴트를 초래할 때 인터럽트를 생성하는 로직을 더 포함할 수 있다. IOMMU(116)는 변환 룩어사이드 버퍼(TLB: translation lookaside buffer)(118)를 더 포함하거나 이에 대한 액세스를 구비할 수 있다. TLB(118)는 일례로서 메모리(106)에 있는 데이터에 대해 APD(104)에 의해 이루어진 요청에 대해 논리적(즉, 가상) 메모리 어드레스를 물리적 메모리 어드레스로 변환을 가속시키기 위해 콘텐츠 어드레스 가능한 메모리(CAM: content addressable memory)에 구현될 수 있다.
도시된 예에서, 통신 인프라(109)는 필요에 따라 시스템(100)의 성분을 상호연결한다. 통신 인프라(109)는 주변 성분 상호연결(PCI: peripheral component interconnect) 버스, 확장된 PCI(extended PCI)(PCI-E) 버스, 개선된 마이크로제어기 버스 아키텍처(advanced microcontroller bus architecture)(AMBA) 버스, 개선된 그래픽 포트(advanced graphics port)(AGP), 또는 다른 이러한 통신 인프라 중 하나 이상(미도시)을 포함할 수 있다. 통신 인프라(109)는 이더넷, 또는 유사한 네트워크, 또는 애플리케이션의 데이터 전달율 요구조건(data transfer rate requirement)을 충족하는 임의의 적절한 물리적 통신 인프라를 더 포함할 수 있다. 통신 인프라(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)에서 처리하기 위한 선택된 명령을 끊김없이 송신할 수 있다. 일례에서, KMD(110)는 CPU(102), 또는 CPU(102) 또는 다른 로직에서 실행되는 애플리케이션이 APD(104) 기능을 호출할 수 있게 하는 애플리케이션 프로그램 인터페이스(API: application program interface)를 구현한다. 예를 들어, KMD(110)는 CPU(102)로부터 명령 버퍼(125)로 명령을 인큐잉시키고(enqueue) 이 명령 버퍼로부터 APD(104)는 이 명령을 후속적으로 검색할 수 있다. 추가적으로, KMD(110)는 SWS(112)와 함께 APD(104)에서 실행되는 처리의 스케줄링을 수행할 수 있다. SWS(112)는 예를 들어 APD에서 실행되는 처리의 우선순위 리스트를 유지하는 로직을 포함할 수 있다.
본 발명의 다른 실시예에서, CPU(102)에서 실행되는 애플리케이션은 명령을 인큐잉시킬 때 KMD(110)를 완전히 바이패스(bypass)할 수 있다.
일부 실시예에서, SWS(112)는 APD(104)에서 실행되는 처리의 메모리(106)에 활성 리스트(152)를 유지한다. SWS(112)는 하드웨어에서 HWS(128)에 의해 관리되는 활성 리스트(152)에서 처리의 서브세트를 더 선택한다. APD(104)에서 각 처리를 실행하는데 관련된 정보는 CPU(102)로부터 처리 제어 블록(PCB: process control block)(154)을 통해 APD(104)로 전달된다.
애플리케이션, OS, 및 시스템 소프트웨어를 위한 처리 로직은 궁극적으로 본 명세서에 설명된 본 발명의 측면을 구현하는 하드웨어 디바이스를 생성하도록 마스크작업/포토마스크의 생성을 통해 제조 공정을 구성할 수 있도록 C와 같은 프로그래밍 언어로 및/또는 베릴로그(Verilog), RTL 또는 네트리스트와 같은 하드웨어 설명 언어(hardware description language)로 지정된 명령을 포함할 수 있다.
이 기술 분야에 통상의 지식을 가진 자라면 본 설명을 판독하는 것에 의해 연산 시스템(100)이 도 1a에 도시된 것보다 더 많거나 더 적은 수의 성분을 포함할 수 있다는 것을 이해할 수 있을 것이다. 예를 들어, 연산 시스템(100)은 하나 이상의 입력 인터페이스, 비휘발성 저장매체, 하나 이상의 출력 인터페이스, 네트워크 인터페이스, 및 하나 이상의 디스플레이 또는 디스플레이 인터페이스를 포함할 수 있다.
도 1b는 도 1a에 도시된 APD(104)의 보다 상세한 설명을 보여주는 일 실시예이다. 도 1b에서, CP(124)는 CP 파이프라인(124a, 124b, 124c)을 포함할 수 있다. CP(124)는 도 1a에 도시된 명령 버퍼(125)로부터 입력으로 제공된 명령 리스트를 처리하도록 구성될 수 있다. 도 1b의 예시적인 동작에서, CP 입력 0(124a)은 그래픽 파이프라인(graphics pipeline)(162)으로 명령을 구동하는 일을 담당한다. CP 입력 1 및 2(124b, 124c)는 연산 파이프라인(160)에 명령을 전달한다. 또한, HWS(128)의 동작을 제어하는 제어기 메커니즘(166)이 제공된다.
도 1b에서, 그래픽 파이프라인(162)은 본 명세서에서 정렬된 파이프라인(164)라고 지칭된 블록 세트를 포함할 수 있다. 일례로서, 정렬된 파이프라인(164)은 정점 그룹 변환기(VGT: vertex group translator)(164a), 프리미티브 어셈블러(PA: primitive assembler)(164b), 스캔 변환기(SC: scan converter)(164c), 및 셰이더-엑스포트(shader-export), 렌더-백 유닛(SX/RB: render-back unit)(176)을 포함한다. 정렬된 파이프라인(164) 내 각 블록은 그래픽 파이프라인(162)에서 상이한 그래픽 처리 단계를 나타낼 수 있다. 정렬된 파이프라인(164)은 고정된 함수의 하드웨어 파이프라인일 수 있다. 또한 본 발명의 사상과 범위 내에 있을 수 있는 다른 구현들이 사용될 수 있다.
소량의 데이터만이 그래픽 파이프라인(162)에 입력으로 제공될 수 있지만 이 데이터는 그래픽 파이프라인(162)으로부터 출력으로 제공되는 시간만큼 증폭된다. 그래픽 파이프라인(162)은 CP 파이프라인(124a)으로부터 수신된 작업 항목 그룹 내 범위를 통해 카운트하는 DC(166)를 더 포함한다. DC(166)를 통해 제출된 연산 작업은 그래픽 파이프라인(162)과 반동기적이다.
연산 파이프라인(160)은 셰이더 DC(168, 170)를 포함한다. DC(168, 170) 각각은 CP 파이프라인(124b, 124c)으로부터 수신된 작업 그룹 내 연산 범위를 통해 카운트하도록 구성된다.
도 1b에 도시된 DC(166, 168, 170)는 입력 범위를 수신하고 이 범위를 작업그룹으로 분할하고 이후 작업그룹을 셰이더 코어(122)로 전달한다.
그래픽 파이프라인(162)은 일반적으로 고정된 함수의 파이프라인이므로, 그 상태를 저장하고 복원하는 것은 어렵고, 그 결과 그래픽 파이프라인(162)은 문맥 스위칭하는 것이 어렵다. 그리하여 대부분의 경우에 본 명세서에 설명된 바와 같이 문맥 스위칭은 그래픽 처리 중에서 문맥 스위칭에 관한 것이 아니다. 예외는 문맥 스위칭될 수 있는 셰이더 코어(122)에서 그래픽 작업에 대한 것이다.
그래픽 파이프라인(162)에서 작업의 처리가 완료된 후에 완료된 작업은 렌더 백 유닛(176)을 통해 처리되는데, 이 렌더백 유닛은 깊이와 컬러 계산을 한 후에 최종 결과를 메모리(130)에 기록한다.
셰이더 코어(122)는 그래픽 파이프라인(162)과 연산 파이프라인(160)에 의해 공유될 수 있다. 셰이더 코어(122)는 웨이브프론트를 실행하도록 구성된 일반 프로세서일 수 있다. 일례에서, 연산 파이프라인(160) 내 모든 작업은 셰이더 코어(122) 내에서 처리된다. 셰이더 코어(122)는 프로그래밍가능한 소프트웨어 코어를 실행하고 상태 데이터와 같은 여러 형태의 데이터를 포함한다.
도 2는 도 1a의 컴퓨팅 시스템(100)의 대안적인 실시예인 컴퓨팅 시스템(200)의 예시적인 블록도이다. 컴퓨팅 시스템(200)은 본 발명의 실시예에 따라 시스템 메모리 맵핑 구조와 함께 CPU 및 I/O 디바이스에 대한 IOMMU 아키텍처와 메모리 관리를 포함한다. 그러나, 전술된 컴퓨팅 시스템(100)의 많은 성분들의 상세는 컴퓨팅 시스템(200) 내 유사한 성분에도 적용된다. 그러므로, 유사한 성분에 대한 상세는 컴퓨팅 시스템(200)의 설명에서는 반복되지 않는다.
메모리 맵핑 구조는 버스(278)를 통해 각각 연결된 메모리(206), 메모리 제어기(240), IOMMU(216), 및 참조 부호(250, 252, 254)로 표시된 I/O 디바이스 A, B, C 사이에서 동작하도록 구성될 수 있다. IOMMU(216)는 직접 메모리 액세스(DMA: direct memory access) 가상 어드레스를 시스템 물리적 어드레스로 변환하도록 동작하는 하드웨어 디바이스일 수 있다. IOMMU(216)는 하나 이상의 유니크한 어드레스 공간을 구성하고 이 유니크한 어드레스 공간(들)을 사용하여 디바이스의 DMA 동작이 메모리에 액세스하는 방법을 제어할 수 있다. 도 2는 예를 위하여 하나의 IOMMU만을 도시하며, 본 발명의 실시예는 하나를 초과하는 IOMMU를 포함할 수 있다.
일반적으로, IOMMU는 자기 자신의 개별 버스와 I/O 디바이스(들)에 연결될 수 있다. 도 2에서, 버스(209)는 PCI 버스, AGP 버스, PCI-E 버스(이는 보다 정확히는 점대점 프로토콜이라고 기술되는 것임), 또는 현재 이용가능하거나 미래에 개발된 임의의 다른 유형의 버스를 포함하는 컴퓨터 시스템에 사용되는 임의의 유형의 버스일 수 있다. 버스(209)는 인터럽트 제어기(248), 커널 모드 드라이버(210), SWS(212), 애플리케이션(211), 및 OS(208)를 시스템(200) 내 다른 요소와 더 상호 연결할 수 있다.
I/O 디바이스(C)는 메모리 관리 I/O (MMIO) 맵 및 호스트 데이터 경로(HDP: host data path)(256), 디바이스 처리 복합체(device processing complex)(258), 프라이빗 메모리 관리 유닛(MMU: private memory management unit)(260), 입력 출력 변환 룩어사이드 버퍼(IOTLB: input output translation lookaside buffer)(264), 어드레스 변환 서비스(ATS: address translation service)/페이지 요청 인터페이스(PRI: page request interface) 요청 블록(262), 국부 메모리(268), 국부 메모리 보호 맵(266), 및 다중화기(270, 272, 274, 276, 280)를 포함할 수 있다.
IOMMU(216)의 실시예는 디바이스 테이블 베이스 레지스터(DTBR: device table base register)(241), 명령 버퍼 베이스 레지스터(CBBR: command buffer base register)(238), 이벤트 로그 베이스 레지스터(ELBR: event log base register)(236), 제어 로직(control logic)(249), 및 주변 페이지 요청 레지스터(PPRR: peripheral page request register)(242)를 포함하도록 설정될 수 있다. 나아가, IOMMU(216)는 예를 들어 어드레스 변환을 위해 페이지 테이블을 횡단(traverse)하는 I/O 페이지 테이블 워커(page table walker)(244)를 호출하는 게스트 제어 레지스터 테이블 선택기(246)를 포함할 수 있다. 또한, IOMMU(216)는 페이지 테이블 워크를 수행할 필요 없이 후속 변환을 수행하는데 사용되는 어드레스 변환을 캐싱(caching)하기 위한 하나 이상의 변환 룩어사이드 버퍼(TLB)(218)와 연관될 수 있다. 디바이스 테이블로부터 어드레스는 버스(282)를 통해 IOMMU에 전달될 수 있다.
본 발명의 실시예는 I/O 디바이스에 의해 액세스되는 메모리에 허가 체크 및 어드레스 변환을 제공하는 I/O 페이지 테이블(224)을 사용하는 IOMMU(216)를 제공한다. 또한, 본 발명의 실시예는 일례로서, AMD64 장 포맷(Long format)으로 설계된 I/O 페이지 테이블을 사용할 수 있다. 디바이스 테이블(226)은 I/O 디바이스들이 특정 범위에 할당되도록 한다. I/O 페이지 테이블은 I/O 디바이스의 페이지 테이블에 대한 포인터(pointer)를 포함하도록 더 구성될 수 있다.
메모리(206)는 인터럽트 재맵핑 테이블(IRT: interrupt remapping table)(228), 명령 버퍼(222), 이벤트 로그(event log)(220) 및 가상화된 시스템(300)(아래에서 보다 상세히 설명됨)을 더 포함한다. 메모리(206)는 요소 부호(230)로 표시된 게스트 OS 1과, 요소 부호 232로 표시된 게스트 OS 2를 포함하나 이로 제한되지 않는 하나 이상의 동시에 실행되는 게스트 OS와 함께 하이퍼바이저(234)와 같은 호스트 변환 모듈을 더 포함한다.
나아가, IOMMU(216)와 메모리(206)는 DTBR(241)이 디바이스 테이블(226)의 시작 색인(starting index)을 지시하도록 설정될 수 있다. 나아가, CBBR(238)은 명령 버퍼(222)의 시작 색인을 지시한다. ELBR(236)은 이벤트 로그(220)의 시작 색인을 지시한다. PPRR(242)은 PPSR 테이블(227)의 시작 색인을 지시한다.
IOMMU(216)는 IOMMU(216)와 시스텝 프로세서(들), 예를 들어, CPU(202) 사이에 명령 및 상태 정보를 교환하기 위해 메모리 기반 큐를 사용할 수 있다. CPU(202)는 MMU(214)를 포함할 수 있다.
하나의 예시적인 실시예에서, IOMMU(216)는 (예를 들어, HyperTransport™ 링크 또는 PCI 기반 버스를 사용하여 통신될 수 있는) 다운스트림 디바이스로부터 도달하는 요청을 인터셉트(intercept)하고, 이 요청에 대한 허가 체크 및 어드레스 변환을 수행하고, 변환된 버전을 메모리(206) 공간의 업스트림으로 송신할 수 있다. 다른 요청은 변경 없이 전달될 수 있다.
도 3은 본 발명의 실시예에 따라 도 2에 도시된 가상화된 시스템(300)의 보다 상세한 예시적인 블록도이다. 시스템(300)은 I/O 디바이스/애플리케이션/프로세스(I/O 디바이스(304)) 및 랜덤 액세스 메모리(RAM)(306)를 포함한다.
예를 들어, I/O 디바이스(304)는 그래픽 처리 디바이스를 포함할 수 있다. I/O 디바이스(304)는 IOMMU에 의해 제공되는 2층 어드레스 변환을 통해 가상화된 시스템(300)의 메모리(306)와 상호작용한다.
게스트 가상 어드레스(GVA)는 어드레스 변환을 위해 가상화된 시스템(300)의 I/O 디바이스(304)에 의해 제공된다. 따라서, GVA는 게스트 가상 어드레스 공간(308)과 연관된다. IOMMU는 GVA를 게스트 물리적 어드레스 공간(312)과 연관된 게스트 물리적 어드레스(GPA)로 변환하는 제 1 변환 층, IOMMU게스트 변환(310)을 제공한다. IOMMU 게스트 변환(310)은 가상화된 시스템(300)에서 동작되는 게스트 OS에 의해 관리될 수 있다.
IOMMU는 GPA를 시스템 물리적 어드레스 공간(316)과 연관된 시스템 물리적 어드레스(SPA)로 변환하는 제 2 변환 층, IOMMU 내포된 변환(nested translation)(314)을 더 제공한다. IOMMU 내포된 변환(314)은 가상화된 시스템(300)에서 동작되는 하이퍼바이저에 의해 관리될 수 있다. SPA는 메모리(306) 내 정보에 액세스하는데 사용될 수 있다.
따라서, IOMMU는 GVA-대-GPA 변환 및 GPA-대-SPA 변환을 달성하는데 2층 어드레싱을 제공한다. IOMMU는 주변 및 가상화된 게스트 OS를 수반하는 변환을 포함하는 2층 어드레스 변환에 대해 개선된 성능을 가지는 하드웨어 솔루션을 제공한다.
도 4는 본 발명의 실시예에 따라 IOMMU(216)와 메모리(206)와 연관된 데이터 구조의 예시적인 블록도(400)이다. 전술된 바와 같이, IOMMU(216)는 디바이스 테이블 베이스 레지스터(241)를 포함하는 여러 레지스터를 포함한다. 디바이스 테이블 베이스 레지스터(241)는 도 2의 디바이스 테이블(226) 내에 위치된 디바이스 테이블(404)의 루트(root)에 대한 포인터를 포함한다. 디바이스 테이블(404)은 디바이스 테이블 엔트리(DTE: device table entry)(408)를 포함한다. 각 DTE(408)는 메모리(206)에서 I/O 페이지 테이블(224)에 대한 데이터 구조의 루트에 대한 포인터를 포함한다.
DTE(408)는 시스템 어드레스 변환 테이블 구조(412)의 루트를 지시하는 시스템 포인터(411)와, 게스트 제어 레지스터 테이블(415)/게스트 어드레스 변환 테이블 구조(414)의 루트를 지시하는 게스트 포인터(413)를 포함할 수 있다. 따라서, IOMMU(216)는 2층 어드레스 변환을 수행하는 시스템/게스트 어드레스 변환 테이블 구조(412, 414)에 액세스할 수 있다. GVA-대-GPA 변환을 수행하기 위해 IOMMU(216)는 게스트 포인터(413)를 사용하여 I/O 페이지 테이블(224)에 액세스할 수 있다. GPA-대-SPA 변환을 수행하기 위해, IOMMU(216)는 시스템 포인터(411)를 사용하여 I/O 페이지 테이블(224)에 액세스한다.
따라서, IOMMU(216)는 2층 어드레스 변환을 동시에 및/또는 독립적으로 수행할 수 있다. IOMMU(216)는 또한 시스템 어드레스 변환 테이블 구조(420)의 루트를 지시하는 시스템 포인터(419)를 포함하는 DTE(418)를 사용하여 단일층 변환을 더 수행할 수 있다. 게스트 어드레스 변환 테이블 구조(414)로부터 엔트리는 GPA의 포맷일 수 있다. 각 GPA 엔트리는 시스템 어드레스 변환 테이블 구조(412)를 통해 캐스케이드된/내포된 작업(cascaded/nested walk)을 사용하여 변환될 수 있다.
도 5는 도 2의 예시적인 실시예에 따라 2층 어드레스 변환과 연관된 데이터 구조의 예시적인 블록도(500)이다. I/O 디바이스 C(254)(도 2 참조)는 디바이스 식별자(522)와 연관된다. 디바이스 식별자(522)는 I/O 디바이스를 식별하는데 사용될 수 있다. 예를 들어, 디바이스 식별자(522)는 PCI-E 인터페이스에 사용되는 버스, 디바이스, 함수(BDF: bus, device, function) 목적지일 수 있다. I/O 디바이스 C(254)는 어드레스 변환 트랜잭션(524)(예를 들어, PCI-SIG 사양에 따라 어드레스 변환 서비스(ATS)를 사용하여 I/O 디바이스 C(254)로부터의 요청)을 발송한다. 어드레스 변환 트랜잭션(524)은 I/O 디바이스 C(254)가 변환될 필요가 있는 GVA(526)를 포함할 수 있다. 어드레스 변환 트랜잭션(524)은 디바이스 식별자(522)와 처리 어드레스 공간 식별자(428)를 더 포함할 수 있다. 처리 어드레스 공간 식별자(528)는 게스트 가상 기계(guest virtual machine)(VM) 내 애플리케이션 어드레스 공간을 식별하는데 사용될 수 있고, 공유 국부 메모리에 상주하는 동시 문맥을 분리하기 위해 I/O 디바이스 C(254)에서 사용될 수 있다. 또, 디바이스 식별자(522)와 처리 어드레스 공간 식별자(528)는 애플리케이션 어드레스 공간을 유니크하게 식별할 수 있다.
어드레스 변환 트랜잭션(524)은 IOMMU(216)에 의해 수신된다. IOMMU(216)는 디바이스 테이블(404)의 루트를 지시하는 루트 포인터를 포함하는 디바이스 테이블 베이스 레지스터(241)에 기초하여 디바이스 테이블(404)에 액세스한다.
디바이스 테이블(404)은 DTE(408)에 액세스하기 위해 어드레스 변환 트랜잭션(524)으로부터 디바이스 식별자(522)를 사용하여 색인된다. DTE(408)는 게스트 포인터(513)와 시스템 포인터(511)를 포함한다. 시스템 포인터(511)는 시스템 어드레스 변환 테이블 구조(412)를 작업하는데 사용된다. 게스트 포인터(513)는 게스트 제어 레지스터 테이블(415)의 루트에 액세스하는데 사용된다. 게스트 제어 레지스터 테이블(415)은 어드레스 변환 트랜잭션(524)에 대응하는 게스트 어드레스 변환 테이블 구조(414)를 지시하는 게스트 제어 레지스터 테이블 엔트리(517)에 액세스하는데 어드레스 변환 트랜잭션(524)으로부터 처리 어드레스 공간 식별자(528)를 사용하여 색인된다. 게스트 어드레스 변환 테이블 구조(414)는 어드레스 변환 트랜잭션(524)으로부터 GVA(526)를 사용하여 작업된다.
도 6a는 도 2의 예시적인 실시예에 따라 2층 어드레스 변환 시스템(600A)의 예시적인 블록도이다. 시스템(600A)은 도 4에 도시된 게스트 어드레스 변환 테이블 구조(414)와 시스템 어드레스 변환 테이블 구조(412)를 포함한다. 4-레벨 페이지 테이블 구조가 예시되며 4Kbyte 물리적 페이지(631)에 액세스하는데 사용된다. 실시예는 더 많거나 더 작은 수의 레벨(예를 들어, 2Mbyte 물리적 페이지를 참조하는 3-레벨 페이지 테이블 구조; 1Gbyte 물리적 페이지를 참조하는 2-레벨 페이지 테이블 구조; 등)을 사용하여 페이지 테이블 구조를 제공할 수 있다. GVA(526)는 어드레스 변환 트랜잭션(예를 들어, ATS에 대한 요청)을 발송하는 I/O 디바이스에 의해 제공될 수 있고, GVA(526)는 궁극적으로 데이터 바이트(630)에 액세스하는 것과 연관된 SPA로 변환된다. 게스트 제어 레지스터 테이블 엔트리(517)는 어드레스 변환 트랜잭션에 의해서도 제공되는 디바이스 식별자와 처리 어드레스 공간 식별자를 사용하여 디바이스 테이블 및 게스트 제어 레지스터 테이블(도 5를 참조하여 전술된)을 작업하는 것에 의해 획득될 수 있다.
게스트 제어 레지스터 테이블 엔트리(517)는 페이지-맵 레벨-4(PML4) 테이블 어드레스(632)를 포함한다. PML4 테이블 어드레스(632)는 루트 페이지 테이블 포인터(634)에 대응하지만, PML4 테이블 어드레스(632)는 GPA의 포맷이다. 시스템(600A)은 PML4 테이블 어드레스(632)를 GPA 포맷으로부터 SPA 포맷으로 변환하는 내포된 작업(636)을 수행한다. SPA는 레벨-4 페이지 테이블(638)의 루트의 시스템 물리적 어드레스에 대응한다. 따라서, 예를 들어 루트 페이지 테이블 포인터(634)와 연관된 굵은 흑색 라인은 내포된 작업(636)을 사용하여 획득된 SPA를 나타낼 수 있다. 레벨-4 페이지 테이블(638)은 루트 페이지 테이블 포인터(634)를 사용하여 식별되고, 레벨-4 페이지 테이블(638)의 엔트리는 페이지-맵 레벨-4(PML4) 오프셋(637)을 사용하여 색인된다. PML4 오프셋(637)은 변환될 GVA(526)의 비트(39 내지 47)와 연관된다. 따라서, PML4 엔트리(PML4E)(639)는 루트 페이지 테이블 포인터(634), 레벨-4 페이지 테이블(638), 및 PML4 오프셋(637)을 사용하여 위치된다. PML4E(639)는 GPA이므로, 시스템(600A)은 이를 내포된 작업(636)을 사용하여 SPA로 변환한다.
내포된 작업(636)은 게스트 어드레스 변환 테이블 구조(414)로부터 각 GPA에 대해 GPA-대-SPA 변환을 수행하는 시스템 어드레스 변환 테이블 구조(412)를 사용하여 구현될 수 있다. 예를 들어, GPA(640)는 게스트 어드레스 변환 테이블 구조(414)에서 루트 페이지 테이블 포인터(641)에 대해 대응하는 SPA를 획득하도록 변환하기 위해 PML4E(639)로 로딩될 수 있다. GPA(640)는 시스템 어드레스 변환 테이블 구조(412)의 여러 테이블을 색인하는데 사용된 오프셋을 포함한다.
내포된 작업(636)은 페이지-맵 레벨-4(PML4) 테이블(644)의 루트를 찾기 위해 PML4E(639)와 연관된 내포된 제어 레지스터(642)를 사용한다. PML4 오프셋(646)(GPA(640)의 비트(39 내지 47))은 PML4 테이블(644)로 색인하고 엔트리 nPML4E(648)를 획득하는데 사용된다. nPML4E(648)는 페이지 디렉토리 포인터(PDP: page directory pointer) 테이블(650)의 루트를 지시하고, PDP 오프셋(652)(GPA(640)의 비트(30 내지 38))은 PDP 테이블(650)로 색인하고 엔트리 nPDPE(654)를 획득하는데 사용된다. nPDPE(654)는 페이지 디렉토리(PD) 테이블(656)의 루트를 지시하고, PD 오프셋(658)(GPA(640)의 비트(21 내지 29))은 PD 테이블(656)로 색인하고 엔트리 nPDE(660)를 획득하는데 사용된다. nPDE(660)는 페이지 테이블(662)의 루트를 지시하고, PT 오프셋(664)(GPA(640)의 비트(12 내지 20))은 페이지 테이블(662)로 색인하고 엔트리 nPTE(666)를 획득하는데 사용된다. nPTE(666)는 게스트 4KB 메모리 페이지(668)의 루트를 지시하고, 물리적 페이지 오프셋(670)(GPA(640)의 비트(0 내지 11))은 게스트 4KB 메모리 페이지(668)로 색인하고 엔트리 gPML4E(672)를 획득하는데 사용된다. gPML4E(672)는, GPA PML4E(639)에 대응하고 게스트 어드레스 변환 테이블 구조(414)에서 레벨-3 페이지 테이블(674)을 찾기 위해 루트 페이지 테이블 포인터(641)에 대해 사용되는 SPA 값이다.
레벨-3 페이지 테이블(674)은 PDPE(676)(GPA 포맷)를 획득하기 위해 페이지-디렉토리-포인터(PDP) 오프셋(675)을 사용하여 색인된다. 내포된 작업(636)은 GPA PDPE(676)를 루트 페이지 테이블 포인터(677)에 대응하는 SPA 값으로 변환하는데 사용된다. 루트 페이지 테이블 포인터(677)는 레벨-2 페이지 테이블(678)을 찾는데 사용되고, 이 테이블은 PDE(680)(GPA 포맷)를 획득하기 위해 페이지-디렉토리 오프셋(679)(GVA(526)의 비트(21 내지 29))을 사용하여 색인된다. 내포된 작업(636)은 GPA PDE(680)를 루트 페이지 테이블 포인터(681)에 대응하는 SPA 값으로 변환하는데 사용된다. 루트 페이지 테이블 포인터(681)는 레벨-1 페이지 테이블(682)을 찾기 위해 사용되고, 이 테이블은 PTE(684)(GPA 포맷)를 획득하기 위해 페이지-테이블 오프셋(683)(GVA(526)의 비트(12 내지 20))을 사용하여 색인된다. 내포된 작업(636)은 GPA PTE(684)를 루트 페이지 테이블 포인터(685)에 대응하는 SPA 값으로 변환하는데 사용된다. 루트 페이지 테이블 포인터(685)는 4Kbyte 물리적 페이지(631)를 찾는데 사용되고, 이 페이지는 데이터 바이트(630)를 획득하는데 물리적 페이지 오프셋(686)(GVA(526)의 비트(0 내지 11))를 사용하여 색인된다.
따라서, 시스템(600A)은 2층 GVA-GPA 어드레스 변환 및 GPA-SPA 어드레스 변환을 수행하는 페이지 테이블 작업의 내포된 캐스케이드(nested cascade)를 사용한다. 2층의 내포된 어드레스 변환이 도시되어 있으나, 추가적인 층이 유사한 내포된/재귀 호출(nested/recursive call)을 사용하여 구현될 수 있다. 시스템 어드레스 변환 테이블 구조(412) 및 게스트 어드레스 변환 테이블 구조(414)와 연관된 변환은 하드웨어로 구현될 수 있다. 하나의 하드웨어 세트가 2개의 변환 세트에 사용될 수 있으나, 별개의 하드웨어가 게스트/시스템 변환 세트 각각에 제공될 수 있다.
도 6b는 본 발명의 실시예에 따라 GVA-SPA 어드레스 변환 시스템(600B)의 예시적인 블록도이다. 도 6b는 GVA-SPA 어드레스 변환을 달성하는데 도 5 및 도 6a의 시스템/게스트 어드레스 변환 테이블 구조(412/414)의 다수의 호출(invocation)을 사용하는 내포된 변환 시퀀스를 나타낸다. 시스템(600A)에 대응하는 시스템(600B) 내 요소는 동일하거나 유사한 참조 부호를 사용하여 지시되고, 문자 "b"를 포함한다(예를 들어, 414와 614b; 526과 626b; 637과 637b; 등등). 시스템(600B)은 게스트 페이지 테이블(614b)과 내포된 페이지 테이블(612b)을 사용하여 내포된 페이지 테이블 작업을 나타낸다. 게스트 페이지 테이블(614b)은 (시스템(600A)의 게스트 어드레스 변환 테이블 구조(414)에서 페이지 테이블 레벨에 대응하는) GL4(638b), GL3(674b), GL2(678b), GL1(682b), 및 GPA(631b)를 포함한다.
게스트 페이지 테이블(614b)은 (시스템(600A)의 시스템 어드레스 변환 테이블 구조(412)에서 페이지 테이블 레벨에 대응하는) nL4(644b), nL3(650b), nL2(656b), nL1(662b), 및 G(668b)를 더 포함한다. GVA로부터 SPA로의 변환은 I/O 디바이스로부터 어드레스 변환 트랜잭션에 의해 제공되는 GVA(626b)를 사용하여 시스템(600B)의 좌상부에서 시작한다. 게스트 제어 레지스터 포인터(634b)는 GL4(638b)의 루트를 찾는데 사용되고, GVA[47:39](637b)는 GL4(638b)로 색인하고 GPA(639b)를 획득하는데 사용된다. 제 1 내포된 룩업(nL4 1)이 수행되어 제 2 내포된 룩업(nL3 2)을 지시하는 SPA(648b)를 획득하고, 이 제 2 내포된 룩업이 수행되어 제 3 내포된 룩업(nL2 3)을 지시하는 SPA(654b)를 획득하고, 이 제 3 내포된 룩업이 수행되어 제 4 내포된 룩업(nL1 4)을 지시하는 SPA(660b)를 획득하고, 이 제 4 내포된 룩업(nL1 4)이 수행되어 GL4 5(672b)를 지시하는 SPA(666b)를 획득하고, 이 GL4 5가 GL3(674b)의 루트를 지시하는 루트 페이지 테이블 포인터(641b)를 획득하는데 사용된다.
GVA(38:30)(675b)에 대응하는 GVA(626b)로부터 그 다음 비트 세트는 루트 페이지 테이블 포인터(641b)로부터 오프셋으로 사용되어, GL3(674b)로 색인하고 궁극적으로 루트 페이지 테이블 포인터(677b)를 생성하는 그 다음 내포된 캐스케이드(nL4 6 내지 nL1 9)에 대한 포인터를 획득한다. GVA(29:21)(679b)에 대응하는 GVA(626b)로부터 그 다음 비트 세트는 루트 페이지 테이블 포인터(677b)로부터 오프셋으로 사용되어, GL2(678b)로 색인하고 궁극적으로 루트 페이지 테이블 포인터(681b)를 생성하는 그 다음 내포된 캐스케이드(nL4 11 내지 nL1 14)에 대한 포인터를 획득한다. GVA(20:12)(683b)에 대응하는 GVA(626b)로부터 그 다음 비트 세트는 루트 페이지 테이블 포인터(681b)로부터 오프셋으로 사용되어, GL1(682b)로 색인하고 궁극적으로 루트 페이지 테이블 포인터(685n)를 생성하는 그 다음 내포된 캐스케이드(nL4 16 내지 nL1 19)에 대한 포인터를 획득한다.
GVA(11:0)(686b)에 대응하는 GVA(626b)로부터 마지막 비트 세트는 루트 페이지 테이블 포인터(685b)로부터 오프셋으로 사용되어, GPA(631b)로 색인하고 궁극적으로 원하는 SPA(690b)를 생성하는 그 다음 내포된 캐스케이드(nL4 21 내지 nL1 24)에 대한 포인터를 획득한다.
SPA(690b)는 GVA-SPA 어드레스 변환을 위해 I/O 디바이스 트랜잭션/요청에 의해 제공되는 GVA(626b)에 대응한다. SPA(690b)는 도 6a 및 도 6b에 도시된 바와 같이 페이지 테이블을 작업하는 것에 의해 획득될 수 있다. 추가적으로, SPA(690b)은 변환 룩어사이드 버퍼(TLB) 엔트리 값(692b)으로 캐싱될 수 있다. 따라서, GVA(526/626b)를 변환하는 차후의 요청은 TLB 엔트리 값(692b)에 액세스하여 GVA(526/626b)에 대응하는 SPA(690b)를 신속히 생성하는 것에 의해 수행되어 페이지 테이블에 작업할 필요성을 회피할 수 있게 한다. TLB 엔트리 값(692b)은 IOMMU와 연관되거나 및/또는 IOMMU에 병합된 IOTLB에 저장될 수 있고, 또한 IOMMU로부터 원격에 있는 TLB에 저장될 수 있다.
도 7은 본 발명의 실시예에 따라 2층 어드레싱을 도시한 흐름도(700)의 예시적인 블록도이다. 단계(710)에서, GVA는 트랜잭션을 위해 GPA로 변환된다. 트랜잭션은 예를 들어, PCI-SIG PASID TLP Prefix ECN 사양에 따라 PCIe 버스에 대해 표준화된 포맷을 구비할 수 있는 트랜잭션 층 패킷(TLP: transaction layer packet) 프리픽스를 포함할 수 있다. IOMMU는 처리 어드레스 공간 식별자가 TLP 프리픽스에 운반되는 것을 식별할 수 있고 이에 처리 어드레스 공간 식별자는 GVA-대-GPA 변환에 게스트 테이블을 선택하는데 사용될 수 있다.
단계(720)에서, GPA는 시스템 물리적 어드레스(SPA)로 변환된다. 변환 테이블은 트랜잭션에 의해 운반되는 디바이스 식별자에 따라 선택될 수 있다. 예를 들어, PCIe 트랜잭션이 TLP 프리픽스를 구비하지 않을 때, 시스템은 패킷이 GPA를 포함하는 것으로 결정할 수 있다. 따라서, 발신하는 디바이스 식별자는 GPA-대-SPA 변환 테이블을 선택하는데 사용될 수 있다.
IOMMU는 TLP 프리픽스에 대해 패킷을 검사하고 적절히 거동할 수 있다. PCIe 트랜잭션이 유효 처리 어드레스 공간 식별자를 포함하는 경우, 패킷은 GVA를 포함한다. 처리 어드레스 공간 식별자는 GVA-대-GPA 변환 테이블을 선택하는데 사용되고, 디바이스 식별자(예를 들어, PCI-E 버스에서 BDF)가 GPA-SPA 테이블을 선택하는데 사용된다. IOMMU는 유효 처리 어드레스 공간 식별자를 검출하지 못하면, 패킷은 GPA를 포함하는 것으로 가정되고, 디바이스 식별자는 GPA-대-SPA 변환 테이블을 선택하는데 사용된다. 따라서, 트랜잭션에 유효 처리 어드레스 공간 식별자의 존재 또는 부재는 1층(GPA-SPA) 또는 2층(GVA-GPA, GPA-SPS) 어드레스 변환이 요청되는지 여부에 따라 IOMMU에 의해 식별될 수 있다.
결론
발명의 내용란과 요약서란은 본 발명자(들)에 의해 고려된 본 발명의 하나 이상의, 그러나 전부는 아닌, 예시적인 실시예를 제시하며 그리하여 임의의 방식으로 본 발명과 첨부된 청구범위를 제한하려고 의도된 것이 아니다.
본 발명은 특정 기능과 관계의 구현을 예시하는 기능 블록을 사용하여 전술되었다. 이들 기능 블록의 경계는 설명의 편의를 위해 본 명세서에서 임의적으로 한정되었다. 다른 경계가 특정된 기능과 관계가 적절히 수행되는 한 한정될 수 있다.
특정 실시예의 전술한 설명은 본 발명의 일반적인 개념을 벗어남이 없이 다른 사람이 이 기술 분야에 통상의 지식을 적용함으로써 과도한 실험을 요구함이 없이 특정 실시예로 여러 애플리케이션을 용이하게 변형하거나 및/또는 적응할 수 있을 만큼 충분히 상세히 본 발명의 일반적인 특징을 제시한다. 그리하여 이러한 적응과 변형은 본 명세서에 제시된 개시 내용과 가이드에 기초하여 개시된 실시예의 의미와 균등 범위 내에 있는 것으로 의도된다. 본 명세서에 있는 어구 또는 용어는 설명을 위한 것일 뿐 제한하기 위한 것이 아니어서 본 명세서의 용어나 어구는 개시 내용과 가이드에 비춰 이 기술 분야에 통상의 지식을 가진 자에 의해 해석되어야 하는 것으로 이해된다.
본 발명의 폭과 범위는 전술한 예시적인 실시예들 중 어느 하나로 제한되어서는 안 되며 이하의 특허청구범위와 그 균등물에 따라서만 한정되어야 한다.
Claims (18)
- 방법으로서,
I/O 디바이스와 연관된(associated) 어드레스 변환 트랜잭션(address translation transaction)과 연관된 처리 어드레스 공간 식별자를 사용하여 게스트 가상 어드레스(GVA: guest virtual address)를 대응하는 게스트 물리적 어드레스(GPA)로 변환하는 단계; 및
상기 어드레스 변환 트랜잭션과 연관된 디바이스 식별자에 따라 시스템 어드레스 변환 테이블을 사용하여 상기 GPA를 대응하는 시스템 물리적 어드레스(SPA: system physical address)로 변환하는 단계를 포함하는 방법. - 제1항에 있어서,
각 GVA-대-GPA 변환에 대해 복수의 GPA-대-SPA 변환을 캐스케이딩(cascading)하는 단계를 더 포함하는 방법. - 제1항에 있어서,
주어진 레벨의 게스트 페이지 테이블에 대해서, 상기 GVA는 그 다음 레벨에 있는 게스트 페이지 테이블의 루트(root)를 지시하는 게스트 루트 페이지 테이블 포인터와 연관된 게스트 페이지 테이블 엔트리에 액세스하도록 상기 게스트 페이지 테이블을 색인하도록 동작가능한 것인 방법. - 제3항에 있어서,
GPA-대-SPA 변환을 사용하여 상기 게스트 페이지 테이블 엔트리를 상기 게스트 루트 페이지 테이블 포인터로 변환하는 단계를 더 포함하는 것인 방법. - 제4항에 있어서,
주어진 레벨의 내포된 페이지 테이블(nested page table)에 대해서, 상기 GPA는 그 다음 레벨에 있는 내포된 페이지 테이블의 루트를 지시하는 내포된 루트 페이지 테이블 포인터와 연관된 내포된 페이지 테이블 엔트리에 액세스하도록 상기 내포된 페이지 테이블을 색인하도록 동작가능한 것인 방법. - 제5항에 있어서,
상기 내포된 페이지 테이블 엔트리는 SPA인 것인 방법. - 제1항에 있어서,
상기 GVA를 변환하는 단계는 디바이스 테이블 엔트리의 게스트 포인터에 액세스하는 단계를 더 포함하고,
상기 GPA를 변환하는 단계는 상기 디바이스 테이블 엔트리의 시스템 포인트에 액세스하는 단계를 더 포함하는 것인 방법. - 제1항에 있어서,
상기 GVA를 변환하는 단계는 게스트 운영 시스템(OS: operating system)에 의해 관리가능하고,
상기 GPA를 변환하는 단계는 하이퍼바이저(hypervisor)에 의해 관리가능한 것인 방법. - 시스템으로서,
I/O 디바이스와 연관된 어드레스 변환 트랜잭션과 연관된 처리 어드레스 공간 식별자를 사용하여 게스트 가상 어드레스(GVA)를 대응하는 게스트 물리적 어드레스(GPA)로 변환하도록 동작가능한 입력/출력 메모리 관리 유닛(IOMMU: input/output memory management unit)을 포함하되,
상기 IOMMU는 상기 어드레스 변환 트랜잭션과 연관된 디바이스 식별자에 따라 시스템 어드레스 변환 테이블을 사용하여 상기 GPA를 대응하는 시스템 물리적 어드레스(SPA)로 변환하도록 더 동작가능한 것인 시스템. - 제9항에 있어서,
각 GVA-대-GPA 변환에 대해 복수의 GPA-대-SPA 변환을 캐스케이딩하도록 동작가능한 모듈을 더 포함하는 시스템. - 제9항에 있어서,
주어진 레벨의 게스트 페이지 테이블에 대해서, 상기 GVA는 그 다음 레벨에 있는 게스트 페이지 테이블의 루트를 지시하는 게스트 루트 페이지 테이블 포인터와 연관된 게스트 페이지 테이블 엔트리에 액세스하도록 상기 게스트 페이지 테이블을 색인하도록 동작가능한 것인 시스템. - 제11항에 있어서,
상기 게스트 페이지 테이블 엔트리를 GPA-대-SPA 변환을 사용하여 상기 게스트 루트 페이지 테이블 포인터로 변환하도록 동작가능한 모듈을 더 포함하는 것인 시스템. - 제12항에 있어서,
주어진 레벨의 내포된 페이지 테이블에 대해서, 상기 GPA는 그 다음 레벨에 있는 내포된 페이지 테이블의 루트를 지시하는 내포된 루트 페이지 테이블 포인터와 연관된 내포된 페이지 테이블 엔트리에 액세스하도록 상기 내포된 페이지 테이블을 색인하도록 동작가능한 것인 시스템. - 제13항에 있어서,
상기 내포된 페이지 테이블 엔트리는 SPA인 것인 시스템. - 제9항에 있어서,
상기 IOMMU는 디바이스 테이블 엔트리의 게스트 포인터에 액세스함으로써 상기 GVA를 변환하도록 더 동작가능하고,
상기 IOMMU는 상기 디바이스 테이블 엔트리의 시스템 포인터에 액세스함으로써 상기 GPA를 변환하도록 더 동작가능한 것인 시스템. - 제9항에 있어서,
게스트 운영 시스템(OS)이 상기 GVA 변환을 관리하고,
하이퍼바이저가 상기 GPA 변환을 관리하는 것인 시스템. - 명령을 저장한 컴퓨터 판독가능한 매체로서, 상기 명령은, 실행될 때,
I/O 디바이스와 연관된 어드레스 변환 트랜잭션과 연관된 처리 어드레스 공간 식별자에 기초하여 게스트 가상 어드레스(GVA)를 대응하는 게스트 물리적 어드레스(GPA)로 변환하는 단계; 및
상기 어드레스 변환 트랜잭션과 연관된 디바이스 식별자에 기초하여 상기 GPA를 대응하는 시스템 물리적 어드레스(SPA)로 변환하는 단계를 포함하는 방법을 수행하는 것인 컴퓨터 판독가능한 매체. - 제17항에 있어서,
게스트 운영 시스템(OS)이 상기 GVA 변환을 관리하고,
하이퍼바이저가 상기 GPA 변환을 관리하는 것인 컴퓨터 판독가능한 매체.
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US42306210P | 2010-12-14 | 2010-12-14 | |
US61/423,062 | 2010-12-14 | ||
US13/309,750 | 2011-12-02 | ||
US13/309,750 US20120246381A1 (en) | 2010-12-14 | 2011-12-02 | Input Output Memory Management Unit (IOMMU) Two-Layer Addressing |
PCT/US2011/064854 WO2012082864A1 (en) | 2010-12-14 | 2011-12-14 | Input output memory management unit (iommu) two-layer addressing |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20130142166A true KR20130142166A (ko) | 2013-12-27 |
Family
ID=45496270
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020137016556A Withdrawn KR20130142166A (ko) | 2010-12-14 | 2011-12-14 | 입력 출력 메모리 관리 유닛(iommu)의 2층 어드레싱 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20120246381A1 (ko) |
EP (1) | EP2652626A1 (ko) |
JP (1) | JP2013546104A (ko) |
KR (1) | KR20130142166A (ko) |
CN (1) | CN103270502A (ko) |
WO (1) | WO2012082864A1 (ko) |
Families Citing this family (33)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20120127108A (ko) * | 2011-05-13 | 2012-11-21 | 삼성전자주식회사 | 메모리 시스템 |
US8578129B2 (en) * | 2011-12-14 | 2013-11-05 | Advanced Micro Devices, Inc. | Infrastructure support for accelerated processing device memory paging without operating system integration |
US9319254B2 (en) * | 2012-08-03 | 2016-04-19 | Ati Technologies Ulc | Methods and systems for processing network messages in an accelerated processing device |
US9424199B2 (en) * | 2012-08-29 | 2016-08-23 | Advanced Micro Devices, Inc. | Virtual input/output memory management unit within a guest virtual machine |
US9015400B2 (en) * | 2013-03-05 | 2015-04-21 | Qualcomm Incorporated | Methods and systems for reducing the amount of time and computing resources that are required to perform a hardware table walk (HWTW) |
US10114758B2 (en) * | 2013-09-13 | 2018-10-30 | Nvidia Corporation | Techniques for supporting for demand paging |
US8719374B1 (en) | 2013-09-19 | 2014-05-06 | Farelogix, Inc. | Accessing large data stores over a communications network |
US9639476B2 (en) * | 2013-09-26 | 2017-05-02 | Cavium, Inc. | Merged TLB structure for multiple sequential address translations |
US9239804B2 (en) * | 2013-10-03 | 2016-01-19 | Advanced Micro Devices, Inc. | Back-off mechanism for a peripheral page request log |
US10642501B1 (en) * | 2014-01-10 | 2020-05-05 | MIPS Tech, LLC | Hardware virtualized input output memory management unit |
US11073986B2 (en) | 2014-01-30 | 2021-07-27 | Hewlett Packard Enterprise Development Lp | Memory data versioning |
US9436395B2 (en) | 2014-03-14 | 2016-09-06 | Advanced Micro Devices, Inc. | Mechanisms to save user/kernel copy for cross device communications |
GB2536200B (en) * | 2015-03-02 | 2021-08-18 | Advanced Risc Mach Ltd | Memory management |
EP3314366A4 (en) * | 2015-06-24 | 2019-02-20 | INTEL Corporation | Systems and methods for isolating input / output computer resources |
US10102116B2 (en) | 2015-09-11 | 2018-10-16 | Red Hat Israel, Ltd. | Multi-level page data structure |
US10310974B2 (en) | 2015-09-25 | 2019-06-04 | Intel Corporation | Systems and methods for input/output computing resource control |
US10509729B2 (en) | 2016-01-13 | 2019-12-17 | Intel Corporation | Address translation for scalable virtualization of input/output devices |
US10013199B2 (en) | 2016-11-15 | 2018-07-03 | Red Hat Israel, Ltd. | Translation bypass by host IOMMU for systems with virtual IOMMU |
US10228981B2 (en) | 2017-05-02 | 2019-03-12 | Intel Corporation | High-performance input-output devices supporting scalable virtualization |
US11119939B2 (en) * | 2017-08-21 | 2021-09-14 | Alibaba Group Holding Limited | Methods and systems for memory management of kernel and user spaces |
US11372787B2 (en) * | 2017-12-09 | 2022-06-28 | Intel Corporation | Unified address space for multiple links |
US10437736B2 (en) | 2017-12-22 | 2019-10-08 | Advanced Micro Devices, Inc. | Single instruction multiple data page table walk scheduling at input output memory management unit |
US11144473B2 (en) * | 2018-06-13 | 2021-10-12 | Advanced Micro Devices, Inc. | Quality of service for input/output memory management unit |
US10796472B2 (en) * | 2018-06-30 | 2020-10-06 | Intel Corporation | Method and apparatus for simultaneously executing multiple contexts on a graphics engine |
US20190114195A1 (en) | 2018-08-22 | 2019-04-18 | Intel Corporation | Virtual device composition in a scalable input/output (i/o) virtualization (s-iov) architecture |
WO2020124519A1 (en) * | 2018-12-21 | 2020-06-25 | Intel Corporation | Process address space identifier virtualization using hardware paging hint |
US11494211B2 (en) * | 2019-04-22 | 2022-11-08 | Advanced Micro Devices, Inc. | Domain identifier and device identifier translation by an input-output memory management unit |
JP7537135B2 (ja) * | 2020-06-15 | 2024-08-21 | 富士通株式会社 | 半導体装置 |
US11748135B2 (en) | 2020-07-30 | 2023-09-05 | Red Hat, Inc. | Utilizing virtual input/output memory management units (IOMMU) for tracking encryption status of memory pages |
WO2022133716A1 (en) * | 2020-12-22 | 2022-06-30 | Intel Corporation | Processor circuitry to execute an input-output translate virtual address instruction |
US11726693B2 (en) * | 2020-12-29 | 2023-08-15 | Ati Technologies Ulc | Migrating pages of memory accessible by input-output devices |
US11853199B2 (en) * | 2021-01-21 | 2023-12-26 | Texas Instruments Incorporated | Multi-peripheral and/or multi-function export |
US20230042934A1 (en) * | 2021-07-27 | 2023-02-09 | Intel Corporation | Method and apparatus for high-performance page-fault handling for multi-tenant scalable accelerators |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS59117620A (ja) * | 1982-12-24 | 1984-07-07 | Hitachi Ltd | 計算機システム |
CN85101171B (zh) * | 1985-04-01 | 1988-08-17 | 株式会社日立制作所 | 虚拟机系统及其计算机系统的i/o执行方法 |
US8843727B2 (en) * | 2004-09-30 | 2014-09-23 | Intel Corporation | Performance enhancement of address translation using translation tables covering large address spaces |
US7363463B2 (en) * | 2005-05-13 | 2008-04-22 | Microsoft Corporation | Method and system for caching address translations from multiple address spaces in virtual machines |
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) |
US7426627B2 (en) * | 2006-03-10 | 2008-09-16 | Microsoft Corporation | Selective address translation for a resource such as a hardware device |
US8078827B2 (en) * | 2007-07-05 | 2011-12-13 | International Business Machines Corporation | Method and apparatus for caching of page translations for virtual machines |
US8352670B2 (en) * | 2008-01-22 | 2013-01-08 | Globalfoundries Inc. | Execute-only memory and mechanism enabling execution from execute-only memory for minivisor |
US7908457B2 (en) * | 2008-05-05 | 2011-03-15 | International Business Machines Corporation | Retaining an association between a virtual address based buffer and a user space application that owns the buffer |
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 |
US8271450B2 (en) * | 2009-10-01 | 2012-09-18 | Vmware, Inc. | Monitoring a data structure in a virtual machine and determining if memory pages containing the data structure are swapped into or out of guest physical memory |
-
2011
- 2011-12-02 US US13/309,750 patent/US20120246381A1/en not_active Abandoned
- 2011-12-14 EP EP11809002.6A patent/EP2652626A1/en not_active Withdrawn
- 2011-12-14 JP JP2013544735A patent/JP2013546104A/ja active Pending
- 2011-12-14 WO PCT/US2011/064854 patent/WO2012082864A1/en active Application Filing
- 2011-12-14 KR KR1020137016556A patent/KR20130142166A/ko not_active Withdrawn
- 2011-12-14 CN CN2011800601811A patent/CN103270502A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
EP2652626A1 (en) | 2013-10-23 |
CN103270502A (zh) | 2013-08-28 |
US20120246381A1 (en) | 2012-09-27 |
JP2013546104A (ja) | 2013-12-26 |
WO2012082864A1 (en) | 2012-06-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR20130142166A (ko) | 입력 출력 메모리 관리 유닛(iommu)의 2층 어드레싱 | |
US9606936B2 (en) | Generalized control registers | |
US8719464B2 (en) | Efficient memory and resource management | |
US8578129B2 (en) | Infrastructure support for accelerated processing device memory paging without operating system integration | |
US20130145055A1 (en) | Peripheral Memory Management | |
US11741019B2 (en) | Memory pools in a memory model for a unified computing system | |
US12326818B2 (en) | Unified address translation for virtualization of input/output devices | |
US20130145051A1 (en) | Direct Device Assignment | |
US9239793B2 (en) | Mechanism for using a GPU controller for preloading caches | |
US9009419B2 (en) | Shared memory space in a unified memory model | |
US20130141446A1 (en) | Method and Apparatus for Servicing Page Fault Exceptions | |
US20130262814A1 (en) | Mapping Memory Instructions into a Shared Memory Address Place | |
US20130155079A1 (en) | Saving and Restoring Shader Context State | |
US12360918B2 (en) | Memory pools in a memory model for a unified computing system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PA0105 | International application |
Patent event date: 20130625 Patent event code: PA01051R01D Comment text: International Patent Application |
|
PG1501 | Laying open of application | ||
PC1203 | Withdrawal of no request for examination | ||
WITN | Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid |