KR20170038873A - 가상화 컴퓨팅 환경내 직접 메모리 액세스 요청들 라우팅 - Google Patents

가상화 컴퓨팅 환경내 직접 메모리 액세스 요청들 라우팅 Download PDF

Info

Publication number
KR20170038873A
KR20170038873A KR1020177005584A KR20177005584A KR20170038873A KR 20170038873 A KR20170038873 A KR 20170038873A KR 1020177005584 A KR1020177005584 A KR 1020177005584A KR 20177005584 A KR20177005584 A KR 20177005584A KR 20170038873 A KR20170038873 A KR 20170038873A
Authority
KR
South Korea
Prior art keywords
address
value
virtual address
virtual
memory
Prior art date
Application number
KR1020177005584A
Other languages
English (en)
Other versions
KR101973732B1 (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 KR20170038873A publication Critical patent/KR20170038873A/ko
Application granted granted Critical
Publication of KR101973732B1 publication Critical patent/KR101973732B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • 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/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/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • 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
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/25Using a specific main memory architecture
    • G06F2212/253Centralized memory
    • G06F2212/2532Centralized memory comprising a plurality of modules
    • 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
    • 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/657Virtual address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/68Details of translation look-aside buffer [TLB]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Bus Control (AREA)
  • Storage Device Security (AREA)

Abstract

디바이스는 가상 어드레스를 식별하는 직접 메모리 액세스 요청을 수신할 수 있다. 디바이스는 가상 어드레스가 가상 어드레스들의 특정 범위내에 있는지 여부를 결정할 수 있다. 디바이스는 가상 어드레스 값이 가상 어드레스들의 특정 범위내에 포함된 지의 결정에 기초하여 제 1 동작 또는 제 2 동작을 선택적으로 수행할 수 있다. 제 1 동작은 가상 어드레스가 가상 어드레스들의 특정 범위내에 있지 않을 때 가상 어드레스를 메모리 디바이스와 관련된 물리적 어드레스로 변환하기 위해 제 1 어드레스 변환 알고리즘이 수행되게 하는 것을 포함할 수 있다. 제 2 동작은 가상 어드레스가 가상 어드레스들의 특정 범위내에 있을 때 가상 어드레스를 물리적 어드레스로 변환하기 위해 제 2 어드레스 변환 알고리즘이 수행되게 하는 것을 포함할 수 있다. 제 2 어드레스 변환 알고리즘은 제 1 어드레스 변환 알고리즘과 상이할 수 있다.

Description

가상화 컴퓨팅 환경내 직접 메모리 액세스 요청들 라우팅{ROUTING DIRECT MEMORY ACCESS REQUESTS IN A VIRTUALIZED COMPUTING ENVIRONMENT}
본 발명은 가상화 컴퓨팅 환경내에서 직접 메모리 액세스 요청들 라우팅하는 것에 관한 것이다.
입력/출력 메모리 관리 유닛 (IOMMU : input/output memory management unit)은 직접 메모리 액세스 (DMA : direct memory access)-가능 디바이스 (예를 들어, 그래픽스 카드, 네트워크 카드, 사운드 카드, 등)와 주 메모리 사이의 통신을 제공할 수 있다. IOMMU는 DMA-가능 디바이스로부터 수신된 직접 메모리 액세스 요청내 식별된 가상 메모리 어드레스를 주 메모리의 물리적 어드레스로 변환할 수 있다. IOMMU는 메모리 액세스가 중앙 프로세싱 유닛 (CPU)을 통하여 라우팅되지 않고 DMA-가능 디바이스에 제공될 수 있도록 구성될 수 있다. 예를 들어, IOMMU는 DMA-가능 디바이스로부터, 가상 메모리 어드레스를 식별하는 메모리 액세스 요청을 수신할 수 있고, 가상 메모리 어드레스를 물리적 메모리 어드레스로 매핑하는 페이지 테이블내 가상 메모리 어드레스를 룩 업(look up)할 수 있다. 그런 다음 물리적 메모리 어드레스에 저장된 정보는 DMA-가능 디바이스로부터 판독되거나 또는 DMA-가능 디바이스에 기록될 수 있다.
일부 가능한 실시예들에 따라, 방법은 디바이스에 의해, 가상 어드레스를 식별하는 직접 메모리 액세스 요청을 수신하는 단계를 포함할 수 있다. 상기 방법은 상기 디바이스에 의해, 상기 가상 어드레스가 가상 어드레스들의 특정 범위내에 있는지 여부를 결정하는 단계를 포함할 수 있다. 상기 방법은 상기 디바이스에 의해, 상기 가상 어드레스가 상기 가상 어드레스들의 특정 범위내에 있는지 여부의 결정에 기초하여 제 1 동작 또는 제 2 동작을 선택적으로 수행하는 단계를 포함할 수 있다. 상기 제 1 동작은 상기 가상 어드레스가 상기 가상 어드레스들의 특정 범위내에 있지 않을 때 상기 가상 어드레스를 메모리 디바이스와 관련된 물리적 어드레스로 변환하기 위해 제 1 어드레스 변환 알고리즘이 수행되게 하는 것을 포함할 수 있다. 상기 제 2 동작은 상기 가상 어드레스가 상기 가상 어드레스들의 특정 범위내에 있을 때 상기 가상 어드레스를 상기 메모리 디바이스와 관련된 상기 물리적 어드레스로 변환하기 위해 제 2 어드레스 변환 알고리즘이 수행되게 하는 것을 포함할 수 있다. 상기 제 2 어드레스 변환 알고리즘은 상기 제 1 어드레스 변환 알고리즘과 상이할 수 있다.
일부 가능한 실시예들에 따라, 디바이스는 제어기를 포함할 수 있고 상기 제어기는 가상 어드레스 값을 식별하는 메모리 액세스 요청을 주변 디바이스로부터 수신할 수 있다. 상기 제어기는 상기 제어기에 의해 액세스 가능한 메모리에 저장된 정보에 기초하여, 상기 가상 어드레스 값이 가상 어드레스들 값들의 특정 범위에 포함되는지 여부를 결정할 수 있다. 상기 제어기는 상기 가상 어드레스 값이 상기 가상 어드레스들의 특정 범위 값들내에 포함된지 여부의 결정에 기초하여 제 1 동작 또는 제 2 동작을 선택적으로 수행할 수 있다. 상기 제어기는 상기 가상 어드레스 값이 가상 어드레스 값들의 특정 범위내 포함되지 않을 때 상기 제 1 동작을 수행할 수 있다. 상기 제 1 동작은 상기 가상 어드레스 값을 메모리 디바이스내 메모리 위치를 식별하는 물리적 어드레스 값으로 변환하기 위해 제 1 어드레스 변환 알고리즘이 수행되게 하는 것을 포함할 수 있다. 상기 제어기는 상기 가상 어드레스 값이 가상 어드레스 값들의 특정 범위내 포함될 때 상기 제 2 동작을 수행할 수 있다. 상기 제 2 동작은 상기 가상 어드레스 값을 상기 물리적 어드레스 값으로 변환하기 위해 제 2 어드레스 변환 알고리즘이 수행되게 하는 것을 포함할 수 있다. 상기 제 2 어드레스 변환 알고리즘은 상기 제 1 어드레스 변환 알고리즘과 상이할 수 있다.
일부 가능한 실시예들에 따라, 시스템은 가상 어드레스 값을 식별하는 메모리 액세스 요청을 수신할 수 있다. 상기 시스템은 상기 가상 어드레스 값이 가상 어드레스들 값들의 특정 범위내 포함되는지 여부를 결정할 수 있다. 상기 시스템은 상기 가상 어드레스 값이 가상 어드레스 값들의 특정 범위에 포함되는지 여부의 결정에 기초하여 상기 가상 어드레스 값을 메모리 디바이스와 관련된 물리적 어드레스 값으로 변환하기 위해 제 1 어드레스 변환 알고리즘 또는 제 2 어드레스 변환 알고리즘을 선택적으로 수행할 수 있다. 상기 시스템은 상기 가상 어드레스 값이 가상 어드레스 값들의 특정 범위내 포함되지 않을 때 상기 제 1어드레스 변환 알고리즘을 수행할 수 있다. 상기 시스템은 상기 가상 어드레스 값이 가상 어드레스 값들의 특정 범위내 포함될 때 상기 제 2 어드레스 변환 알고리즘을 수행할 수 있다. 상기 제 2 어드레스 변환 알고리즘은 상기 제 1 어드레스 변환 알고리즘과 상이할 수 있다. 상기 시스템은 상기 제 1 어드레스 변환 알고리즘 또는 상기 제 2 어드레스 변환 알고리즘의 선택적 수행에 기초하여 상기 메모리 디바이스쪽으로 상기 물리적 어드레스 값을 식별하는 정보 및 상기 메모리 액세스 요청을 라우팅할 수 있다.
도 1 은 본 출원에 설명된 예시 실시예의 개요의 다이어그램이다;
도 2 는 본 출원에 설명된 실시예들이 구현될 수 있는 예시 시스템의 다이어그램이다;
도 3 은 가상화 컴퓨팅 환경내 직접 메모리 액세스 요청들을 라우팅할 때 사용되는 메모리 레지스터들을 할당하기 위한 예시 프로세스의 플로우 차트이다;
도면들 4a 및 4b는 도 3에 도시된 예시 프로세스에 관련한 대표적 실시예의 다이어그램들이다;
도 5 는 가상화 컴퓨팅 환경내 직접 메모리 액세스 요청들을 라우팅하기 위한 예시 프로세스의 플로우 차트이다;
도면들 6a-6e는 도 5에 도시된 예시 프로세스에 관련한 대표적 실시예의 다이어그램들이다; 및
도면들 7a 및 7b는 도 5에 도시된 예시 프로세스에 관련한 다른 대표적 실시예의 다이어그램들이다.
대표적 실시예들의 이하의 상세한 설명은 첨부한 도면들을 참조한다. 상이한 도면들내 동일한 도면 번호들은 동일 또는 유사한 엘리먼트들을 식별할 수 있다.
직접 메모리 어드레스 (DMA) 성능을 갖는 주변 디바이스는 메모리 액세스 요청들을 입력/출력 메모리 관리 유닛 (IOMMU)에 제공함으로써 가상화 컴퓨팅 환경 내에서 동작할 수 있다. IOMMU는 메모리 액세스 요청내 식별된 가상 어드레스를 주 메모리의 블럭과 관련된 물리적 어드레스로 변환할 수 있다. 이런 식으로, IOMMU는 가상화 컴퓨팅 환경 내에서 동작하는 주변 디바이스와 주 메모리 사이의 통신을 제공할 수 있다. 그러나, 어드레스 변환 알고리즘을 수행하기 위해 IOMMU에 의해 요구되는 컴퓨팅 파워의 양, 뿐만 아니라 다양한 다른 IOMMU 프로세스들을 수행하기 위해 요구되는 컴퓨팅 파워의 양 때문에 IOMMU를 통한 메모리 액세스 요청들 라우팅은 느리고 및/또는 비용이 많이 들 수 있다.
메모리 액세스 요청들의 라우팅 속도를 올리기 위해서, 어떤 요청들은 IOMMU 프로세싱으로부터 배제될 수 있다. 예를 들어, 디스플레이 디바이스의 픽셀들을 리프레시(refresh)하기 위해 사용되는 프레임 버퍼와 관련된 어드레스를 식별하는 요청들은 IOMMU 프로세싱으로부터 배제될 수 있다. 그러나, 이런 배제(exclusion)은 보안 이슈들을 올리고, 가상화 컴퓨팅 환경 내 주변 디바이스를 동작시키기 위해 필요한 메모리 어드레스 변환을 제공하지 않을 수 있다. 본 출원에 설명된 실시예들은 만약 어떤 상태들이 만족되면 주 메모리로 빠른 루트(route)를 통하여 메모리 액세스 요청들을 라우팅하고, 만약 상태들이 만족되지 않으면 주 메모리로 느린 루트를 통하여 메모리 액세스 요청들을 라우팅하기 위한 메커니즘을 제공한다. 양쪽의 루트들은 메모리 어드레스 변환을 제공하고, 따라서 주변 디바이스가 가상화 컴퓨팅 환경 내에서 동작하는 것을 허용하면서 주변 디바이스의 성능을 개선시킨다.
도 1 은 본 출원에 설명된 예시 실시예의 개요(100)의 다이어그램이다. 도 1 에 도시된 바와 같이, DMA-가능 디바이스 (예를 들어, 주변 디바이스)는 라우팅 제어기로 가상 어드레스를 식별하는 DMA 요청을 제공할 수 있다. 라우팅 제어기는 요청을 프로세스하기 위해 IOMMU를 사용하는 제 1 루트를 통하여, 또는 요청을 프로세스하기 위해 IOMMU를 사용하지 않는 제 2 루트를 통하여 DMA 요청이 라우팅될지 여부를 결정하는 라우팅 결정(routing decision)을 하는 디바이스를 포함할 수 있다. 라우팅 제어기는 하나 이상의 상태들이 만족되는지 여부를 결정하기 위해 요청을 분석할 수 있다. 예를 들어, 라우팅 제어기는 제 2 루트를 통한 라우팅이 인에이블(enable)되는지 여부, 가상 어드레스가 제 2 루트를 통하여 라우팅되는 가상 어드레스들의 범위내 인지 여부, 요청된 액세스 (예를 들어, 판독 액세스, 기록 액세스, 등)의 유형이 허용되는지 여부, 또는 유사한 것을 결정할 수 있다. 라우팅 제어기는 이 분석을 수행하기 위해 할당된 레지스터들의 세트를 사용할 수 있다.
추가로 도 1 에 도시된 바와 같이, 만약 상태들이 만족되지 않으면, 라우팅 제어기는 제 1 루트를 통하여 DMA 요청을 라우팅할 수 있다. 제 1 루트는 IOMMU를 포함할 수 있고, 및/또는 가상 어드레스를 주 메모리와 관련된 물리적 어드레스로 변환하기 위한 제 1 어드레스 변환 알고리즘을 이용하여 메모리 액세스 요청 프로세싱을 포함할 수 있다. 어드레스 변환을 수행한 후에, IOMMU는 주 메모리로의 라우팅을 위해 메모리 제어기로 물리적 어드레스를 식별하는 정보를 포함하는 직접 메모리 액세스 요청을 라우팅할 수 있다.
반면에, 만약 상태들이 만족되면, 라우팅 제어기는 제 2 루트를 통하여 DMA 요청을 라우팅할 수 있다. 제 2 루트는 IOMMU를 포함하지 않을 수 있고, 및/또는 제 1 어드레스 변환 알고리즘과 다른 (및 보다 더 빠른) 제 2 어드레스 변환 알고리즘을 이용하여 메모리 액세스 요청을 프로세싱하는 것을 포함할 수 있다. 이 경우에서, 라우팅 제어기는 가상 어드레스로부터 물리적 어드레스를 결정하기 위해 할당된 레지스터들의 세트를 사용할 수 있고 물리적 어드레스를 이용하여 주 메모리로 라우팅하기 위해 메모리 제어기로 DMA 요청을 라우팅할 수 있다.
제 2 어드레스 변환 알고리즘은 제 1 어드레스 변환 알고리즘보다 덜 복잡할 수 있고 그리고 제 1 어드레스 변환 알고리즘보다 더 빠르게 수행될 수 있다. 추가적으로, 또는 대안적으로, 제 2 루트는 제 1 루트상에서 IOMMU에 의해 수행되는 일부 프로세싱을 배제할 수 있다. 따라서, 제 2 루트는 제 1 루트보다 빠르게 주 메모리로 DMA 요청을 제공할 수 있다. 이런 식으로, 라우팅 제어기는 가상화 컴퓨팅 환경내 DMA-가능 디바이스들 동작을 위한 증가된 성능을 제공할 수 있고 동시에 또한 DMA 요청들을 분석함으로써 증강된 보안을 제공할 수 있다.
도 2 는 본 출원에 설명된 실시예들이 구현될 수 있는 예시 시스템(200)의 다이어그램이다. 도 2 에 도시된 바와 같이, 시스템 (200)은 하나 이상의 주변 디바이스들 (210-1) 내지 (210-N) (N = 1) (이하에서 총괄하여 "주변 디바이스들 (210)"로서 지칭되고 및 개별적으로 "주변 디바이스 (210)"로서 지칭됨), 라우팅 제어기 (220), IOMMU (230), 메모리 제어기 (240), 및 주 메모리 (250)를 포함할 수 있다. 시스템 (200)의 디바이스들은 유선 연결들, 무선 연결들, 등을 통하여 연결할 수 있다.
주변 디바이스(peripheral device) (210)는 중앙 프로세싱 유닛에 독립적으로 직접 메모리 액세스를 통하여 주 메모리 (250)을 액세스하는 것이 가능한 하나 이상의 디바이스들을 포함할 수 있다. 예를 들어, 주변 디바이스 (210)는 DMA-가능 디바이스, 예컨대 그래픽스 프로세싱 유닛 (GPU), 가속 프로세싱 유닛 (APU), 네트워크 인터페이스 카드, 사운드 카드, 디스크 드라이브, 마더보드, 또는 유사한 것을 포함할 수 있다. 일부 실시예들에서, 주변 디바이스 (210)는 다른 컴퓨팅 디바이스의 주 메모리(250)로 원격 DMA 액세스를 갖는 컴퓨팅 디바이스이다. 다른 예로서, 주변 디바이스 (210)는 다른 프로세서 코어의 주 메모리 (250)로 DMA 액세스를 갖는 프로세서 코어를 포함할 수 있다. 주변 디바이스 (210)는 DMA 요청 (예를 들어, 입력 및/또는 명령에 기반하여)을 생성할 수 있고, 라우팅 제어기 (220)에 DMA 요청을 제공할 수 있다.
라우팅 제어기 (220)는 DMA 요청을 수신, 프로세싱, 라우팅, 및/또는 제공하는 것이 가능한 하나 이상의 디바이스들을 포함할 수 있다. 예를 들어, 라우팅 제어기 (220)는 주변 디바이스 (210)로부터 DMA 요청을 수신할 수 있고, 제 1 루트 또는 제 2 루트를 통하여 메모리 제어기 (240) 및/또는 주 메모리 (250)로 DMA 요청을 라우팅할 지 여부를 결정하기 위해 DMA 요청을 분석할 수 있다. 도시된 바와 같이, 제 1 루트는 IOMMU (230)를 포함할 수 있고, 제 2 루트는 IOMMU (230)를 포함하지 않을 수 있다. 추가적으로, 또는 대안적으로, 제 1 루트는 제 2 루트보다 더 많은 DMA 요청의 프로세싱을 포함할 수 있다. 따라서, 제 1 루트는 제 2 루트보다 더 느린 루트일 수 있다. 라우팅 제어기 (220)는 DMA 요청의 분석에 기초하여 IOMMU (230)로 또는 메모리 제어기 (240)로 DMA 요청을 제공할 수 있다. 일부 실시예들에서, 라우팅 제어기 (220)는 DMA 요청내에 포함된 가상 어드레스로부터 물리적 어드레스를 결정한다. 추가적으로, 또는 대안적으로, 라우팅 제어기 (220)는 물리적 어드레스를 결정하기 위해 다른 디바이스로 DMA 요청을 제공할 수 있다. 라우팅 제어기는 주변 디바이스 (210)에 외부에 있는 것으로 도시되었지만, 일부 실시예들에서, 라우팅 제어기 (220)는 주변 디바이스 (210)내에 통합된다. 추가적으로, 또는 대안적으로, 시스템 (200)은 각각의 제어 라우팅이 하나 이상의 주변 디바이스들 (210)과 관련된 다수의 라우팅 제어기들 (220)을 포함할 수 있다.
IOMMU (230)는 DMA 요청을 수신, 프로세싱, 및/또는 제공하는 것이 가능한 하나 이상의 디바이스들을 포함할 수 있다. 예를 들어, IOMMU (230)는 라우팅 제어기 (220)로부터 DMA 요청을 수신할 수 있고, 메모리 제어기 (240) 및/또는 주 메모리 (250)로 DMA 요청을 제공하기 전에 DMA 요청을 프로세스할 수 있다. IOMMU (230)는 예를 들어, 가상 어드레스를 물리적 어드레스로 변환함으로써, DMA 요청내에 요청된 액세스 및/또는 액세스 유형이 허용된지 등을 확인함으로써 DMA 요청을 프로세스할 수 있다. 일부 실시예들에서, IOMMU (230)는 DMA 요청이 제 2 루트를 통하여 라우팅될 때 라우팅 제어기 (220) 및/또는 다른 디바이스에 의해 사용되는 제 2 알고리즘과 상이한 제 1 루트를 통하여 (예를 들어, 어드레스 변환을 수행하기 위해) 라우팅되는 DMA 요청들을 프로세스하기 위해 제 1 알고리즘을 사용한다. 일부 실시예들에서, IOMMU (230)는 주변기기 컴포넌트 상호연결 (PCI : peripheral component interconnect) 버스, PCI 익스프레스 버스, 등을 통하여 주변 디바이스 (210)에 전자적으로 결합된다.
메모리 제어기 (240)는 주 메모리 (250)로부터 및 주 메모리로 가는 정보의 흐름을 관리하는 것이 가능하고, 및/또는 주 메모리 (250)로부터 판독 및/또는 주 메모리에 기록하는 것이 가능한 하나 이상의 디바이스들을 포함할 수 있다. 예를 들어, 메모리 제어기 (240)는 주변 디바이스 (210)로부터 제 1 루트를 통하여 IOMMU (230)로부터 메모리 액세스 요청을 수신할 수 있거나, 또는 주변 디바이스 (210)로부터 제 2 루트를 통하여 라우팅 제어기 (220)로부터 메모리 액세스 요청을 수신할 수 있다. 메모리 액세스 요청은 물리적 어드레스와 관련하여 수행될 동작(예를 들어, 판독 동작, 기록 동작, 등)을 식별할 수 있고, 및/또는 물리적 어드레스로부터 판독될 및/또는 물리적 어드레스에 기록될 정보 (예를 들어, 데이터, 명령, 등)를 식별할 수 있는 주 메모리(250)의 물리적 어드레스(physical address)를 식별할 수 있다. 메모리 제어기 (240)는 메모리 액세스 요청에 기초하여 주 메모리 (250)로부터 정보를 판독하거나 또는 주 메모리에 정보를 기록할 수 있다.
주 메모리 (250)는 정보를 저장하는 하나 이상의 디바이스들을 포함할 수 있다. 예를 들어, 주 메모리 (250)는 랜덤 액세스 메모리 (RAM), 판독 전용 메모리 (ROM), 등을 포함할 수 있다. 주 메모리 (250)는 물리적 메모리 어드레스에 의해 식별된 정보를 저장할 수 있다.
시스템 (200)은 본 출원에 설명된 하나 이상의 프로세스들을 수행할 수 있다. 시스템 (200)은 컴퓨터 판독가능 매체, 예컨대 주 메모리 (250)에 의해 저장된 프로세서 실행 명령들 (예를 들어, 소프트웨어 명령들)에 응답하여 이들 프로세스들을 수행할 수 있다. 컴퓨터 판독가능 매체는 비-일시적 메모리 디바이스로서 본 출원에 정의된다. 메모리 디바이스는 단일 물리적 스토리지 디바이스내 메모리 스페이스 또는 다수의 물리적 스토리지 디바이스들에 걸쳐 분산된 메모리 스페이스(memory space)를 포함한다.
도 2 에 도시된 디바이스들의 수는 일 예로서 제공된다. 실제로, 시스템 (200)은 포함할 수 있다 도 2 에 도시된 것에 추가 디바이스들, 더 적은 디바이스들, 상이한 디바이스들, 또는 상이하게 배열된 디바이스들을 포함할 수 있다. 추가적으로, 시스템 (200)의 하나 이상의 디바이스들은 시스템 (200)의 다른 하나 이상의 디바이스들에 의해 수행되는 것으로 설명된 하나 이상의 기능들을 수행할 수 있다.
도 3 은 가상화 컴퓨팅 환경내 직접 메모리 액세스 요청들을 라우팅할 때 사용되는 메모리 레지스터들을 할당하기 위한 예시 프로세스(300)의 플로우 차트이다. 일부 실시예들에서, 하나 이상의 도 3의 프로세스 블럭들은 라우팅 제어기 (220)에 의해 수행된다. 일부 실시예들에서, 하나 이상의 도 3의 프로세스 블럭들은 주변 디바이스 (210), IOMMU (230), 메모리 제어기 (240), 및/또는 주 메모리 (250)와 같은 라우팅 제어기 (220)와 별개이거나 또는 라우팅 제어기를 포함하는 다른 디바이스 또는 디바이스들의 그룹에 의해 수행된다.
도 3 에 도시된 바와 같이, 프로세스 (300)는 메모리 액세스 요청들과 관련된 라우팅 결정들을 하기 위해 사용될 가상 어드레스들의 범위를 정의하는 베이스 어드레스 레지스터(base address register) 및 길이 레지스터(length register)를 할당하는 단계를 포함할 수 있다(블럭 (310)). 예를 들어, 라우팅 제어기 (220)는 베이스 어드레스 레지스터 및 길이 레지스터를 할당할 수 있다. 베이스 어드레스 레지스터는 가상 어드레스들의 범위와 관련된 베이스 어드레스(예를 들어, 가상 어드레스들의 범위의 일단(one end)을 식별하는 베이스 가상 어드레스)를 식별하는 정보를 저장할 수 있고, 길이 레지스터는 범위의 길이 (예를 들어, 범위내에 포함된 가상 어드레스들의 양)를 식별하는 정보를 저장할 수 있다. 함께, 베이스 어드레스 및 어드레스들의 양은 메모리 액세스 요청들과 관련된 라우팅 결정들을 하기 위해 라우팅 제어기 (220)에 의해 사용될 가상 어드레스들의 범위를 정의할 수 있다.
일 예로서 (간단한 어드레스 값들을 이용하여), 베이스 어드레스 레지스터가 1,001의 베이스 어드레스를 식별하는 것으로 가정한다. 더구나, 길이 레지스터가 500 가상 어드레스들의 양을 식별하는 것으로 가정한다. 이들 두개의 값들에 기초하여, 라우팅 제어기 (220)는 1,001로부터 1,500까지를 포괄하는 500 가상 어드레스들의 범위를 결정할 수 있다. 라우팅 제어기 (220)가 이 범위내에 해당하지 않는 가상 어드레스를 식별하는 메모리 액세스 요청을 수신한 경우, 그러면 라우팅 제어기 (220)는 IOMMU (230)를 포함하는 제 1 루트를 통하여 메모리 액세스 요청을 라우팅할 수 있다. 반면에, 라우팅 제어기 (220)가 이 범위내에 해당하는 가상 어드레스를 식별하는 메모리 액세스 요청을 수신한 경우, 그러면 라우팅 제어기 (220)는 IOMMU (230)를 포함하지 않는 제 2 루트를 통하여 메모리 액세스 요청을 라우팅할 수 있다.
일부 실시예들에서, 가상 어드레스들의 범위는 주 메모리 (250)내에 저장된 프레임 버퍼를 나타내는 물리적 어드레스들의 범위에 매핑한다. 프레임 버퍼는 디스플레이 디바이스상에 제공될 픽셀들에 대한 색상 값들을 저장할 수 있고, 주기적으로 픽셀들을 리프레시하기 위해 주변 디바이스 (210) (예를 들어, GPU)에 의해 액세스될 수 있다 (예를 들어, 픽셀에 대한 색상 값을 획득함으로써 그리고 값을 디스플레이 디바이스에 제공함으로써, 디스플레이 디바이스는 색상 값에 기초하여 픽셀을 디스플레이 할 수 있다).
추가로 도 3 에 도시된 바와 같이, 프로세스 (300)는 가상 어드레스를 물리적 어드레스로 변환 하기 위해 사용되는 재배치 레지스터(relocation register)를 할당하는 단계를 포함할 수 있다(블럭 (320)). 예를 들어, 라우팅 제어기 (220)가 재배치 레지스터를 할당할 수 있다. 재배치 레지스터는 재배치 값을 식별하는 정보를 저장할 수 있다. 재배치 값은 메모리 액세스 요청내에 식별된 가상 어드레스를 주 메모리(250)와 관련된 물리적 어드레스로 변환하기 위해 라우팅 제어기 (220)에 의해 사용될 수 있다.
일부 실시예들에서, 라우팅 제어기 (220)는 베이스 어드레스 값, 길이 값, 및/또는 재배치 값을 변경할 수 있다. 예를 들어, 라우팅 제어기 (220)는 가상 어드레스들의 범위 및/또는 범위의 일부가 에러 (예를 들어, 메모리 에러)와 관련된 것의 표시를 수신할 수 있다. 이 경우에서, 라우팅 제어기 (230)는 베이스 어드레스 및/또는 길이 (예를 들어, 만약 에러가 가상 메모리와 관련되면)를 변경할 수 있다. 추가적으로, 또는 대안적으로, 라우팅 제어기 (230)는 재배치 값 (예를 들어, 만약 에러가 물리적 메모리와 관련되면)를 변경할 수 있다. 라우팅 제어기 (220)는 다른 디바이스 (예를 들어, 주변 디바이스 (210), IOMMU (230), 등)에 변화를 통지할 수 있다.
베이스 어드레스 레지스터, 길이 레지스터, 및 재배치 레지스터를 포함하는 레지스터들의 세트(예를들어, 트리플릿(triplet))는 메모리 액세스 요청들과 관련된 라우팅 결정들을 수행하는데 라우팅 제어기 (220)를 보조하기 위해 함께 동작할 수 있다. 일부 실시예들에서, 라우팅 제어기 (220)는 다수의 레지스터들의 세트들을 할당한다 (예를 들어, 레지스터들의 제로 세트들, 레지스터들의 네개의 세트들, 레지스터들의 여덟개의 세트들, 등.). 이 경우에서, 다수의 세트들의 전체 그룹이 인에이블되거나 또는 디스에이블(disable)될 수 있어서(예를 들어, IOMMU (230)와 관련된 라우팅 제어 필드를 이용하여) 라우팅 결정들을 인에이블 또는 디스에이블할 수 있다 (예를 들어, 특정 주변 디바이스 (210)에 대하여, 일련의 주변 디바이스들 (210)에 대하여, 모든 주변 디바이스들 (210)에 대하여, 등.).
추가적으로, 또는 대안적으로, 특정 레지스터들의 세트가 블럭 (330)과 관련하여 본 출원에 설명된 인에이블 필드(enable field)을 이용하여 인에이블되거나 또는 디스에이블될 수 있어서, 라우팅 결정들 (예를 들어, 하나 이상의 주변 디바이스들 (210)에 대하여)을 수행할 때 특정 레지스터들의 세트의 사용을 인에이블하거나 또는 디스에이블할 수 있다. 추가적으로, 또는 대안적으로, 라우팅 제어기 (220)는 블럭 (340)과 관련하여 본 출원에 설명된 액세스 제어 필드를 이용하여 특정한 레지스터들의 세트 및/또는 특정한 셋의 주변 디바이스들 (210)에 대한 액세스 제어를 설정할 수 있다.
라우팅 제어기 (220)는 베이스 어드레스 레지스터, 길이 레지스터와 재배치 레지스터 (예를 들어, 일련의 레지스터들) 사이의 관계(relationship)의 표시를 저장할 수 있다. 예를 들어, 라우팅 제어기 (220)는 인접한 메모리 어드레스들에서 (예를 들어, 메모리-매핑 입력/출력 (MMIO : memory-mapped input/output) 어드레스 페이지내) 레지스터들의 세트내 각각의 레지스터를 저장할 수 있다.
추가로 도 3 에 도시된 바와 같이, 프로세스 (300)는 상이한 루트들을 통한 메모리 액세스 요청들의 라우팅 인에이비블 또는 디스에이블하기 위한 인에이블 필드(enable field)를 할당하는 단계를 포함할 수 있다 (블럭 (330)). 예를 들어, 라우팅 제어기 (220)가 인에이블 필드를 할당할 수 있다. 일부 실시예들에서, 인에이블 필드는 재배치 레지스터내 포함된다. 라우팅 제어기 (220)는 메모리 액세스 요청에 대한 라우팅 결정을 수행할 지 여부 (예를 들어, 다수의 루트들 중 하나의 루트를 선택하기 위해), 또는 메모리 액세스 요청들을 단일 루트를 통하여 포워딩할지 여부를 결정하기 위해 인에이블 필드를 사용할 수 있다. 예를 들어, 인에이블 필드가 라우팅이 디스에이블된 것을 표시하는 경우, 그러면 라우팅 제어기 (220)는 IOMMU (230)를 포함하는 제 1 루트를 통하여 메모리 액세스 요청을 포워딩할 수 있다. 반면에, 인에이블 필드가 라우팅이 인에이블된 것을 표시하는 경우, 그러면 라우팅 제어기 (220)는 메모리 액세스 요청을 제 1 루트 통하여 또는 IOMMU (230)를 포함하지 않는 제 2 루트를 통하여 라우팅할지 여부를 결정하기 위해 메모리 액세스 요청을 분석할 수 있다.
일부 실시예들에서, 라우팅 제어기 (220)는 다수의 주변 디바이스들 (210)에 대한 라우팅을 제어한다. 이 경우에서, 라우팅 제어기 (220)는 어느 주변 디바이스들 (210)이 라우팅 결정들과 관련되는지를 표시하는 일련의 인에이블 필드들을 할당할 수 있다. 예를 들어, 라우팅 제어기 (220)는 주변 디바이스들 (210)의 제 1 세트로부터 수신된 메모리 액세스 요청들에 대한 라우팅 결정들을 행할 수 있고, 그리고 주변 디바이스들 (210)의 제 2 세트로부터 수신된 메모리 액세스 요청들에 대한 라우팅 결정들을 행하지 않을 수 있다 (예를 들어, 주변 디바이스들 (210)의 제 2 세트로부터 수신된 요청들을 IOMMU (230)로 포워딩할 수 있다). 라우팅 제어기 (220)는 인에이블 필드들의 세트내 저장된 정보에 기초하여 특정 주변 디바이스 (210)로부터 수신된 메모리 액세스 요청에 대한 라우팅 결정들을 수행할 지 여부를 결정할 수 있다.
추가로 도 3 에 도시된 바와 같이, 프로세스 (300)는 요청된 액세스 유형을 허용하거나 또는 거부하기 위한 액세스 제어 필드를 할당하는 단계를 포함할 수 있다 (블럭 (340)). 예를 들어, 라우팅 제어기 (220)가 액세스 제어 필드를 할당할 수 있다. 일부 실시예들에서, 액세스 제어 필드는 재배치 레지스터내 포함된다. 라우팅 제어기 (220)는 메모리 액세스 요청에 의해 식별된 요청된 액세스 유형 (예를 들어, 판독 액세스, 기록 액세스, 액세스 없음, 등.)을 허용할지 또는 거부할지 여부를 결정하기 위해 액세스 제어 필드를 사용할 수 있다.
일부 실시예들에서, 라우팅 제어기 (220)는 다수의 주변 디바이스들 (210)에 대한 라우팅을 제어한다. 이 경우에서, 라우팅 제어기 (220)는 일련의 주변 디바이스들 (210)과 관련된 요청된 액세스 유형을 허용할지 또는 거부할지를 표시하는 일련의 액세스 제어 필드들을 할당할 수 있다. 예를 들어, 라우팅 제어기 (220)는 제 1 액세스 유형 (예를 들어, 판독 액세스)을 주변 디바이스들 (210)의 제 1 세트로부터 수신된 메모리 액세스 요청들에 적용할 수 있고, 제 2 액세스 유형 (예를 들어, 판독/기록 액세스)을 주변 디바이스들 (210)의 제 2 세트로부터 수신된 메모리 액세스 요청들에 적용할 수 있다. 라우팅 제어기 (220)는 액세스 제어 필드들의 세트내 저장된 정보에 기초하여 특정 주변 디바이스 (210)로부터 수신된 메모리 액세스 요청에 적용될 액세스 유형을 결정할 수 있다.
추가로 도 3 에 도시된 바와 같이, 프로세스 (300)는 할당된 레지스터들을 확인하는 단계를 포함할 수 있다 (블럭 (350)). 예를 들어, 라우팅 제어기 (220)는 베이스 어드레스 레지스터, 길이 레지스터, 및/또는 재배치 레지스터를 확인할 수 있다. 일부 실시예들에서, 라우팅 제어기 (220)는 제 1 루트를 통하여 라우팅될 때 (예를 들어, 어드레스 변환을 수행하기 위해 IOMMU (230)를 포함하고 및/또는 페이지 테이블을 활용하는) 및 제 2 루트를 통하여 라우팅될 때 (예를 들어, 어드레스 변환을 수행하기 위해 IOMMU (230)를 포함하지 않고 및/또는 메모리 재배치 알고리즘을 활용하는) 특정 가상 어드레스가 동일한 물리적 어드레스로 변환하는 것을 보장함으로써 할당된 레지스터들을 확인한다.
일부 실시예들에서, 라우팅 제어기 (220)는 가상 어드레스들의 다수의 범위들을 설정하기 위해 프로세스 (300)를 반복한다. 상이한 범위들은 상이한 베이스 어드레스 값들, 상이한 길이 값들, 상이한 재배치 값들, 등과 관련될 수 있다. 일부 실시예들에서, 라우팅 제어기 (220)는 상이한 범위들에 대하여 동일한 재배치 값 (예를 들어, 동일한 재배치 레지스터에 저장된)을 사용한다. 추가적으로, 또는 대안적으로, 라우팅 제어기 (220)는 상이한 범위들에 대하여 동일한 인에이블 필드 및/또는 액세스 제어 필드를 사용할 수 있거나, 또는 상이한 범위들에 대하여 상이한 인에이블 필드 및/또는 액세스 제어 필드를 사용할 수 있다. 이런 식으로, 라우팅 제어기 (220)는 메모리 액세스 요청들 (예를 들어, 가상화 컴퓨팅 환경내 그래픽스 프로세싱과 관련된 메모리 액세스 요청들)의 더 빠른 라우팅을 위해 물리적 메모리의 비연접(non-contiguous) 범위들을 설정할 수 있다.
라우팅 제어기 (220)가 가상 어드레스들의 다수의 범위들을 할당할 때, 라우팅 제어기 (220)는 레지스터들에 의해 식별된 가상 어드레스들의 다수의 범위들이 중첩하지 않을 것을 보장함으로써 할당된 레지스터들을 확인할 수 있다. 예를 들어, 라우팅 제어기 (220)는 다수의 베이스 어드레스 레지스터들 및 다수의 개별 길이 레지스터들을 이용하여 가상 어드레스들의 다수의 범위들을 정의할 수 있다. 라우팅 제어기 (220)는 특정 가상 어드레스가 하나보다 많은 범위에 포함되는지 여부를 결정함으로써 다수의 범위들이 중첩하지 않는 것을 보장할 수 있다. 만약 라우팅 제어기 (220)가 다수의 범위들이 중첩하는 것을 결정하면, 그러면 라우팅 제어기 (220)는 에러 통지를 제공할 수 있고 및/또는 범위들이 중첩하지 않도록 하나 이상의 레지스터들을 재할당할 수 있다.
비록 도 3 은 프로세스 (300)의 예시 블럭들을 도시하지만, 일부 실시예들에서, 프로세스 (300)는 도 3에 도시된 것들 보다 추가의 블럭들, 더 적은 블럭들, 상이한 블럭들, 또는 상이하게 배열된 블럭들을 포함한다. 추가적으로, 또는 대안적으로, 두개 이상의 프로세스 (300)의 블럭들이 병렬로 수행될 수 있다.
도면들 4a 및 4b는 도 3 에 도시된 예시 프로세스(300)에 관련한 대표적 실시예(400)의 다이어그램들이다. 도면들 4a 및 4b는 가상화 컴퓨팅 환경내 직접 메모리 액세스 요청들을 라우팅할 때 사용되는 메모리 레지스터들을 할당하는 예제를 도시한다.
도 4a에 도시된 바와 같이, 라우팅 제어기 (220)가 베이스 어드레스 레지스터 (405)를 할당한다고 가정한다. 도시된 바와 같이, 베이스 어드레스 레지스터 (405)는 64-비트 레지스터 (예를 들어, 비트들 0 내지 63를 갖는)를 포함한다고 가정한다. 더구나, 비트들 0 내지 11 및 52 내지 63는 리저브드(reserved)이다고 가정한다. 일부 실시예들에서, 리저브드 비트들은 디버깅(debugging) 목적을 위해 사용된다. 마지막으로, 비트들 12 내지 51 (예를 들어, 총 40 비트들)은 200의 값을 갖는 베이스 어드레스를 식별하기 위해 사용된다고 가정한다.
추가로 도 4a에 도시된 바와 같이, 라우팅 제어기 (220)가 길이 레지스터 (410)를 할당한다고 가정한다. 도시된 바와 같이, 길이 레지스터 (410)는 64-비트 레지스터 (예를 들어, 비트들 0 내지 63를 갖는)를 포함한다고 가정한다. 더구나, 비트들 0 내지 11 및 52 내지 63는 리저브드이다라고 가정한다. 마지막으로, 비트들 12 내지 51 (예를 들어, 총 40 비트들)은 500의 값을 갖는 길이를 식별하기 위해 사용된다고 가정한다.
추가로 도 4a에 도시된 바와 같이, 베이스 어드레스 레지스터 (405) 및 길이 레지스터 (410)내 저장된 값들은 IOMMU (230)를 포함하지 않는 루트를 통하여 라우팅될 가상 어드레스 스페이스 (415)내 가상 어드레스들의 범위를 정의하는 것으로 가정한다. 도면 번호 (420)에 의해 도시된 바와 같이, 베이스 어드레스는 200의 가상 어드레스로 시작하는 가상 어드레스들의 범위의 시작을 식별한다. 도면 번호 (425)에 의해 도시된 바와 같이, 길이는 얼마나 많은 가상 어드레스들이 범위내에 포함되는지를 식별한다. 이 경우에서, 500 가상 어드레스들은 도면 번호 (430)에 의해 도시된 바와 같이 200으로부터 699까지 가상 어드레스 범위에 포함된다.
일부 실시예들에서, 가상 어드레스 스페이스 (415)는 주 메모리 (250)내 저장되는 프레임 버퍼에 대응하는 가상 어드레스들의 범위를 나타낸다. 프레임 버퍼는 디스플레이 디바이스상에 픽셀들에 대한 색상 값들을 저장할 수 있고, 주기적으로 픽셀들을 리프레시하기 위해 GPU에 의해 액세스될 수 있다. IOMMU (230)를 포함하지 않는 더 빠른 루트를 통하여 프레임 버퍼와 관련된 메모리 액세스 요청들을 라우팅함으로써, 라우팅 제어기 (220)는 디스플레이 리프레시가 메모리 액세스 요청들이 IOMMU (230)를 포함하는 느린 루트를 통하여 라우팅되는 경우보다 더 빠르게 수행되는 것을 보장할 수 있다.
도 4b에 도시된 바와 같이, 라우팅 제어기 (220)가 재배치 레지스터 (435)를 할당한다고 가정한다. 도시된 바와 같이, 재배치 레지스터 (435)는 64-비트 레지스터 (예를 들어, 비트들 0 내지 63를 갖는)를 포함한다고 가정한다. 더구나, 비트들 2 내지 11 및 52 내지 63는 리저브드이다라고 가정한다. 도면 번호 (440)에 의해 도시된 바와 같이, 비트들 12 내지 51 (예를 들어, 총 40 비트들)은 400의 값을 갖는 재배치 값을 식별하기 위해 사용된다고 가정한다. 도면 번호 (445)에 의해 도시된 바와 같이, 비트 0는 라우팅 제어기 (220)가 메모리 액세스 요청들에 대하여 라우팅 결정을 수행할지 여부를 표시하는 인에이블 비트(enable bit)로서 사용되는 것으로 가정한다. 도면 번호 (450)에 의해 도시된 바와 같이, 비트 1은 메모리 액세스 요청들 (예를 들어, 판독 액세스, 기록 액세스, 판독 및 기록 액세스, 등.)에 대하여 허용된 액세스의 유형을 식별하는 액세스 제어 비트로서 사용되는 것으로 가정한다.
상기에서 나타낸 바와 같이, 도면들 4a 및 4b는 단지 일 예로서 제공된다. 다른 예들이 가능하고 도면들 4a 및 4b에 관해서 설명되었던 것과 다를 수 있다.
도 5 는 가상화 컴퓨팅 환경내 직접 메모리 액세스 요청들을 라우팅하기 위한 예시 프로세스(500)의 플로우 차트이다. 일부 실시예들에서, 하나 이상의 도 5의 프로세스 블럭들은 라우팅 제어기 (220)에 의해 수행된다. 일부 실시예들에서, 하나 이상의 도 5의 프로세스 블럭들은 주변 디바이스 (210), IOMMU (230), 메모리 제어기 (240), 및/또는 주 메모리 (250)와 같은 라우팅 제어기 (220)와 별개이거나 또는 라우팅 제어기를 포함하는 다른 디바이스 또는 디바이스들의 그룹에 의해 수행된다.
도 5 에 도시된 바와 같이, 프로세스 (500)는 가상 어드레스를 식별하는 메모리 액세스 요청을 주변 디바이스로부터 수신하는 단계를 포함할 수 있다(블럭 (510)). 예를 들어, 라우팅 제어기 (220)가 메모리 액세스 요청을 주변 디바이스 (210)로부터 수신할 수 있다. 메모리 액세스 요청은 일부 실시예들에서 직접 메모리 액세스 요청을 포함한다. 추가적으로, 또는 대안적으로, 메모리 액세스 요청은 주변 디바이스 (210)와 관련된 게스트(guest) 물리적 어드레스와 같은 가상 어드레스를 식별할 수 있다.
일부 실시예들에서, 메모리 액세스 요청은 메모리 액세스 요청과 관련된 액세스 유형을 식별한다. 예를 들어, 메모리 액세스 요청은 주 메모리 (250)로부터 정보를 판독하는 요청, 주 메모리(250)에 정보를 기록하는 요청, 등을 포함할 수 있다. 추가적으로, 또는 대안적으로, 메모리 액세스 요청은 주 메모리(250)로부터 판독될 및/또는 주 메모리에 기록될 정보를 식별할 수 있다.
도 5 에 추가로 도시된 바와 같이, 프로세스 (500)는 라우팅이 인에이블된지 여부를 결정하는 단계를 포함할 수 있다(블럭 (520)). 예를 들어, 라우팅 제어기 (220)가 인에이블 비트 (예를 들어, 재배치 레지스터내 포함된)를 판독함으로써 라우팅이 인에이블된지 여부를 결정할 수 있다. 인에이블 비트의 값은 라우팅이 인에이블된지 (예를 들어, 인에이블 비트가 제 1 값, 예컨대 일을 포함할 때) 또는 디스에이블된지 (예를 들어, 인에이블 비트가 제 2 값, 예컨대 제로를 포함할 때) 여부의 표시를 제공할 수 있다.
만약 라우팅이 인에이블되지 않으면 (블럭 (520)-아니오(NO))이면, 그러면 프로세스 (500)는 제 1 루트를 통하여 주 메모리로 메모리 액세스 요청을 라우팅하는 단계를 포함할 수 있다 (블럭 (530)). 예를 들어, 만약 라우팅 제어기 (220)가 라우팅이 인에이블되지 않다고 결정하면 (예를 들어, 만약 인에이블 비트가 라우팅이 인에이블되지 않을 것을 표시하면), 그러면 라우팅 제어기 (220)는 제 1 루트를 통하여 메모리 제어기 (240)로 및/또는 주 메모리 (250)로 메모리 액세스 요청을 라우팅할 수 있다.
일부 실시예들에서, 메모리 제어기 (240) 및/또는 주 메모리 (250)로의 제 1 루트는 IOMMU (230)를 포함하고, 메모리 제어기 (240) 및/또는 주 메모리 (250)로의 제 2 루트는 IOMMU (230)를 포함하지 않는다. 추가적으로, 또는 대안적으로, 제 1 루트는 제 2 루트보다 더 많은 메모리 액세스 요청의 프로세싱(예를 들어, IOMMU (230)에 의해)을 포함할 수 있다. 추가적으로, 또는 대안적으로, 제 1 루트는 제 2 루트에 비하여 메모리 제어기 (240) 및/또는 주 메모리 (250)로의 더 높은 레이턴시 (예를 들어, 더 높은 평균 레이턴시(latency))를 가질 수 있다.
추가적으로, 또는 대안적으로, 제 1 루트를 통하여 라우팅된 메모리 액세스 요청은제 2 루트를 통하여 라우팅된 메모리 액세스 요청과 관련하여 사용되는 알고리즘과 다른 알고리즘을 통하여 어드레스 변환을 경험할 수 있다. 예를 들어, 제 1 루트상에서 어드레스 변환은 가상 어드레스를 물리적 어드레스로 변환하기 위해 하나 이상의 페이지 테이블들을 활용할 수 있다. 일부 실시예들에서, 제 1 루트는 어드레스 변환을 수행하기 위해 다수의 페이지 테이블(page table)들을 활용한다. 반대로, 제 2 루트상에서 어드레스 변환은 임의의 페이지 테이블들을 활용하지 않을 수 있다. 오히려, 제 2 루트상에서 어드레스 변환은 다른 값 (예를 들어, 가상 어드레스 값, 가상 어드레스 값 및 베이스 어드레스 값에 기초하여 결정된 오프셋 값, 등)에 값을 더하거나 다른 값으로부터 값을 차감함으로써 물리적 어드레스를 결정하는 메모리 재배치 알고리즘(memory relocation algorithm)을 활용할 수 있다. 이런 식으로, 제 2 루트상에서의 어드레스 변환은 제 1 루트상에서의 어드레스 변환보다 더 빠를 수 있다 (예를 들어, 메모리 재배치가 페이지 테이블들을 이용하는 것보다 더 빠를 수 있기 때문에).
만약 라우팅이 인에이블되면(블럭 (520)-예(YES)), 그러면 프로세스 (500)는 가상 어드레스 및 베이스 어드레스를 비교함으로써 오프셋 값을 계산하는 단계를 포함할 수 있다(블럭 (540)). 예를 들어, 만약 라우팅 제어기 (220)가 라우팅이 인에이블된다고 결정하면 (예를 들어, 만약 인에이블 비트가 라우팅이 인에이블되는 것을 표시하면), 그러면 라우팅 제어기 (220)는 메모리 액세스 요청내 식별된 가상 어드레스 및 베이스 어드레스를 비교함으로써 오프셋 값을 계산할 수 있다.
일부 실시예들에서, 라우팅 제어기 (220)는 가상 어드레스와 베이스 어드레스 사이의 차이로서 오프셋 값을 계산한다. 예를 들어, 라우팅 제어기 (220)는 오프셋 값을 계산하기 위해 가상 어드레스 (예를 들어, 가상 어드레스를 나타내는 값)로부터 베이스 어드레스 (예를 들어, 베이스 어드레스를 나타내는 값)을 차감할 수 있다. 일 예로서, 1,000 의 베이스 어드레스 값 및 1,300의 가상 어드레스 값을 가정하면, 라우팅 제어기 (220)는 300 (1,300 - 1,000 = 300)의 오프셋 값을 계산할 수 있다.
도 5 에 추가로 도시된 바와 같이, 프로세스 (500)는 가상 어드레스가 라우팅 메모리 액세스 요청들과 관련된 가상 어드레스의 범위내에 있는지 여부를 결정하는 단계를 포함할 수 있다 (블럭 (550)). 예를 들어, 라우팅 제어기 (220)가 도 3와 관련하여 본 출원에서 설명된 것처럼 가상 어드레스가 결정된 범위내에 있는지 여부를 결정할 수 있다. 일부 실시예들에서, 라우팅 제어기 (220)는 오프셋 값에 기초하여 가상 어드레스가 범위내에 있는지 여부를 결정한다. 예를 들어, 라우팅 제어기 (220)는 가상 어드레스가 범위내에 있는지 여부를 결정하기 위해 오프셋 값을 제 1 임계값 (예를 들어, 제로)에 및/또는 제 2 임계 값 (예를 들어, 길이 레지스터내 식별된 길이 값)에 비교할 수 있다.
라우팅 제어기 (220)가 일부 실시예들에서 메모리 액세스 요청에 적용할 일련의 할당된 레지스터들을 결정한다. 예를 들어, 다수의 레지스터들의 세트들이 할당될 수 있고 및 라우팅 제어기 (220)는 메모리 액세스 요청에 적용할 일련의 레지스터들을 선택할 수 있다. 추가적으로, 또는 대안적으로, 라우팅 제어기 (220)는 메모리 액세스 요청내 식별된 가상 어드레스가 특정 레지스터들의 세트와 관련된 가상 어드레스들의 범위내 있는 것으로 결정될 때까지 하나 초과의 레지스터들의 세트를 메모리 액세스 요청에 적용할 수 있다. 이 경우에서, 라우팅 제어기 (220)는 특정 레지스터들의 세트를 메모리 액세스 요청에 적용할 수 있다. 만약 가상 어드레스가 임의의 범위들내에 없으면, 라우팅 제어기 (220)는 메모리 액세스 요청을 제 1 루트를 통하여 라우팅할 수 있다.
일부 실시예들에서, 가상 어드레스들의 제 1 범위가 가상 어드레스들의 제 2 범위와 중첩한다. 이 경우에서, 라우팅 제어기 (220)는 범위들 중 하나를 선택할 수 있고, 선택된 범위와 관련된 일련의 레지스터들을 메모리 액세스 요청에 적용할 수 있다.
만약 가상 어드레스가 범위내에 있지 않으면 (블럭 (550)-아니오(NO))이면, 그러면 프로세스 (500)는 제 1 루트를 통하여 주 메모리로 메모리 액세스 요청을 라우팅하는 단계를 포함할 수 있다 (블럭 (530)). 예를 들어, 만약 라우팅 제어기 (220)가 가상 어드레스가 범위내에 있지 않다고 결정하면, 그러면 라우팅 제어기 (220)는 블럭(530)과 관련하여 본 출원에 설명된 것 처럼 제 1 루트를 통하여 메모리 제어기 (240)로 및/또는 주 메모리 (250)로 메모리 액세스 요청을 라우팅할 수 있다.
일부 실시예들에서, 라우팅 제어기 (220)는 오프셋 값이 제 1 임계값 또는 제 2 임계값을 만족할 때 가상 어드레스가 범위내에 있지 않다고 결정한다. 제 1 임계값은 제로와 같을 수 있고, 제 2 임계값은 길이 값에 대응할 수 있다. 예를 들어, 라우팅 제어기 (220)는 오프셋 값이 제로보다 작을 때 가상 어드레스가 범위내에 있지 않다고 결정할 수 있다. 예를 들어, 라우팅 제어기 (220)가 900의 가상 어드레스를 식별하는 메모리 액세스 요청을 수신한다고 가정한다. 더구나, 베이스 어드레스 값이 1,000이라고 가정한다. 이 예에서, 오프셋 값은 -100 (900 - 1,000 = -100)과 같다. -100이 제로보다 작기 때문에, 이 오프셋 값은 900의 가상 어드레스가 범위 밖에 있는 것을 나타낸다 (예를 들어, 범위가 1,000에서 시작하기 때문에).
추가적으로, 또는 대안적으로, 라우팅 제어기 (220)는 오프셋 값이 길이 값보다 더 크거나 또는 같을 때 가상 어드레스가 범위내에 있지 않다고 결정할 수 있다. 예를 들어, 오프셋 값이 300과 같다고 가정하고, 길이 값이 200과 같다고 가정한다. 오프셋 값이 길이 값보다 더 크기 때문에, 라우팅 제어기 (220)는 가상 어드레스가 범위내에 있지 않다고 결정하고, 메모리 액세스 요청을 제 1 루트를 통하여 라우팅한다. 이 예에서, 1,000의 베이스 어드레스 값은 범위에 대하여 1,000의 시작 어드레스를 식별하고, 200의 길이 값은 범위에 대하여 1,199의 종료 값을 식별한다 (예를 들어, 1,000과 1,199사이를 포괄하는 200 값들이 있다). 300 (1,300 - 1,000)의 오프셋 값이 생성되는 1,300의 가상 어드레스는 이 범위의 외측에 있다. 유사하게, 길이 값과 같은 200의 오프셋 값을 생성하는 1,200의 가상 어드레스는 외측 범위에 있을 것이다.
따라서, 라우팅 제어기 (220)는 오프셋 값이 제로보다 작을 때 오프셋 값이 길이 값보다 더 크거나 같을 때 가상 어드레스가 범위내에 있지 않다고 결정할 수 있다. 가상 어드레스가 범위내에 있는지 여부를 결정하기 위해 오프셋 값을 이용함으로써, 라우팅 제어기 (220)는 가상 어드레스를 범위의 종료 값(ending value)에 직접 비교하는 것에 비하여 가상 어드레스가 범위내에 있는지 여부를 결정하기 위해 요구되는 컴퓨팅 자원들의 양을 줄일 수 있다.
만약 가상 어드레스가 범위내에 있다면 (블럭 (550)-예(YES))이면, 그러면 프로세스 (500)는 요청된 액세스 유형이 허용된지 여부를 결정하는 단계를 포함할 수 있다 (블럭 (560)). 예를 들어, 만약 라우팅 제어기 (220)가 가상 어드레스가 범위내에 있는 것을 결정하면, 그러면 라우팅 제어기 (220)는 메모리 액세스 요청내 식별된 액세스 유형이 허용된지 여부를 결정할 수 있다.
일부 실시예들에서, 라우팅 제어기 (220)는 오프셋 값이 제 1 임계값 및 제 2 임계값을 만족할 때 가상 어드레스가 범위내에 있다고 결정한다. 제 1 임계값은 제로와 같을 수 있고, 제 2 임계값은 길이 값에 대응할 수 있다. 예를 들어, 라우팅 제어기 (220)는 오프셋 값이 제로보다 더 크거나 또는 같고 오프셋 값이 길이 값보다 작을 때 가상 어드레스가 범위내에 있다고 결정할 수 있다. 예를 들어, 라우팅 제어기 (220)가 1,300의 가상 어드레스를 식별하는 메모리 액세스 요청을 수신한다고 가정한다. 더구나, 베이스 어드레스 값이 1,000이라고 가정한다. 이 예에서, 오프셋 값은 300 (1,300 - 1,000 = 300)과 같다. 300이 제로보다 크기 때문에, 이 오프셋 값은 1,300의 가상 어드레스가 범위내에 있는 것을 나타낸다 (예를 들어, 길이 값에 의존하여).
계속 오프셋 값이 300과 같은 상기 예에서, 길이 값이 500과 같다고 가정한다. 오프셋 값이 길이 값보다 작기 때문에, 라우팅 제어기 (220)는 가상 어드레스가 범위내에 있다고 결정한다. 이 예에서, 1,000의 베이스 어드레스 값은 범위에 대하여 1,000의 시작 어드레스(starting address)를 식별하고, 500의 길이 값은 범위에 대하여 1,499의 종료 값을 식별한다 (예를 들어, 1,000과 1,499사이를 포괄하는 500 값들이 있다). 300 (1,300 - 1,000)의 오프셋 값이 생성되는 1,300의 가상 어드레스는 이 범위내에 있다.
라우팅 제어기 (220)는 일부 실시예들에서 액세스 제어 비트 (예를 들어, 재배치 레지스터내에 포함된)를 판독함으로써 요청된 액세스 유형이 허용된지 여부를 결정한다. 액세스 제어 비트의 값은 액세스의 특정 유형이 (예를 들어, 판독 액세스, 기록 액세스, 등.) 허용된지 또는 거부된지 여부의 표시를 제공할 수 있다.
만약 요청된 액세스 유형이 허용되지 않으면 (블럭 (560)-아니오(NO))이면, 그러면 프로세스 (500)는 제 1 루트를 통하여 주 메모리로 메모리 액세스 요청을 라우팅하는 단계를 포함할 수 있다 (블럭 (530)). 예를 들어, 만약 라우팅 제어기 (220)가 요청된 액세스 유형이 허용되지 않는다고 결정하면(예를 들어, 판독 액세스 제어 비트에 기초하여), 그러면 라우팅 제어기 (220)는 블럭(530)과 관련하여 본 출원에 설명된 것 처럼 제 1 루트를 통하여 메모리 제어기 (240)로 및/또는 주 메모리 (250)로 메모리 액세스 요청을 라우팅할 수 있다. 추가적으로, 또는 대안적으로, 라우팅 제어기 (220)는 요청된 액세스 유형이 허용되지 않을 때 에러의 표시를 제공할 수 있다.
일 예로서, 특정 가상 어드레스를 식별하는 메모리 액세스 요청이 주 메모리 (250)에 기록하는 요청을 포함한다고 가정한다. 더구나, 액세스 제어 비트가 특정 가상 어드레스, 또는 특정 가상 어드레스와 관련된 물리적 어드레스는 판독 전용(read-only)인 것을 나타낸다고 가정한다. 이 경우에서, 라우팅 제어기 (220)는 제 1 루트를 통하여 주 메모리 (250)를 향하여 (예를 들어, IOMMU (230)를 포함하는) 메모리 액세스 요청을 라우팅한다. IOMMU (230)는 액세스를 거부할 수 있고, 에러를 제공할 수 있다, 등.
만약 요청된 액세스 유형이 허용된다면 (블럭 (560)-예(YES)), 그러면 프로세스 (500)는 오프셋 값 및 재배치 값을 결합함으로써 가상 어드레스에 대응하는 물리적 어드레스를 결정하는 단계를 포함할 수 있다 (블럭 (570)). 예를 들어, 만약 라우팅 제어기 (220)가 요청된 액세스 유형이 허용된다고 결정하면 (예를 들어, 판독 액세스 제어 비트에 기초하여), 그러면 라우팅 제어기 (220)는 가상 어드레스에 대응하는 물리적 어드레스를 결정하기 위해 재배치 레지스터내 식별되는 재배치 값 및 오프셋 값을 결합할 수 있다.
일 예로서, 메모리 액세스 요청은 판독 요청을 포함할 수 있고, 액세스 제어 비트는 판독 요청들이 허용된 것을 나타낼 수 있다. 추가적으로, 또는 대안적으로, 메모리 액세스 요청은 기록 요청을 포함할 수 있고, 액세스 제어 비트는 기록 요청들이 허용된 것을 나타낼 수 있다. 이들 경우들에서, 라우팅 제어기 (220)는 재배치 레지스터내 식별된 가상 어드레스 및 재배치 값에 기초하여 가상 어드레스에 대응하는 물리적 어드레스를 계산할 수 있다.
일부 실시예들에서, 라우팅 제어기 (220)는 오프셋 값과 재배치 값을 결합함으로써(예를들어, 더함으로써, 차감함으로써, 등) 물리적 어드레스를 결정한다. 예를 들어, 라우팅 제어기 (220)가 본 출원에 어딘가에서 설명된 것 처럼 결정된 300의 오프셋 값을 가진 것으로 가정한다. 더구나, 라우팅 제어기 (220)가 재배치 레지스터내 400의 재배치 값을 식별한다고 가정한다. 라우팅 제어기 (220)는 700 (300 + 400 = 700)의 물리적 어드레스 값을 결정하기 위해 이들 값들을 더할 수 있다.
도 5 에 추가로 도시된 바와 같이, 프로세스 (500)는 제 2 루트를 통하여 주 메모리로 물리적 어드레스를 포함하는 메모리 액세스 요청을 라우팅하는 단계를 포함할 수 있다 (블럭 (580)). 예를 들어, 라우팅 제어기 (220)는 주 메모리(250)와 관련된 결정된 물리적 어드레스 쪽으로 메모리 액세스 요청을 라우팅할 수 있다. 일부 실시예들에서, 라우팅 제어기 (220)는 제 2 루트를 통하여 주 메모리 (250)로 메모리 액세스 요청을 라우팅한다.
본 출원에 어딘가에서 설명된 바와 같이, 메모리 제어기 (240) 및/또는 주 메모리 (250)로의 제 2 루트는 IOMMU (230)를 포함하지 않을 수 있다. 추가적으로, 또는 대안적으로, 제 2 루트는 제 1 루트보다 메모리 액세스 요청의 더 적은 프로세싱을 필요로 할 수 있다. 추가적으로, 또는 대안적으로, 제 2 루트는 제 1 루트에 비하여 메모리 제어기 (240) 및/또는 주 메모리 (250)로의 더 낮은 레이턴시 (예를 들어, 더 낮은 평균 레이턴시(latency))를 가질 수 있다. 추가적으로, 또는 대안적으로, 제 2 루트를 통하여 라우팅된 메모리 액세스 요청은 제 1 루트를 통하여 라우팅된 메모리 액세스 요청과 관련하여 사용되는 알고리즘과 다른 알고리즘을 통하여 어드레스 변환을 경험할 수 있다. 추가적으로, 또는 대안적으로, 제 2 루트는 제 1 루트에 비하여 성능을 증가시키기 위해 하나 이상의 예측 알고리즘(predication algorithm)들 (예를 들어, 버퍼링, 룩-어헤드(look-ahead), 등)을 사용할 수 있다. 추가적으로, 또는 대안적으로, 제 1 루트는 메모리 액세스 요청에 기초하여 수행될 일련의 동작들을 일으킬 수 있고, 제 2 루트는 메모리 액세스 요청에 기초하여 수행될 세트의 동작들의 서브셋(subset)을 일으킬 수 있다.
메모리 액세스 요청을 주 메모리 (250)로 라우팅하는 것은 정보가 메모리 액세스 요청내 식별되는 가상 어드레스에 대응하는 물리적 어드레스에 기록되고 및/또는 물리적 어드레스로부터 판독되도록 할 수 있다. 일부 실시예들에서, 라우팅 제어기 (220) 및/또는 메모리 제어기 (240)는 다수의 주변 디바이스들 (210) 및/또는 주변 디바이스 (210)와 중앙 프로세싱 유닛 사이에 캐시 일관성(coherency)을 제공한다. 예를 들어, 메모리 제어기 (240)는 제 1 디바이스의 캐시 제어기에, 제 2 디바이스가 주 메모리 (250)의 특정 물리적 어드레스에 기록하였다는 표시를 제공할 수 있다. 캐시 제어기는 캐시 일관성을 보장하기 위해 제 1 디바이스와 관련된 캐시를 변경할 수 있다. 예를 들어, 캐시 제어기는 특정 물리적 어드레스와 관련된 캐시 기록 동작을 무효인(invalid)인 것으로 마킹(mark)할 수 있고, 또는 특정 물리적 어드레스와 관련된 캐시 판독 동작을 플러싱(flush)할 수 있다.
이런 식으로, 라우팅 제어기 (220)는 특정 메모리 자원, 예컨대 프레임 버퍼와 관련된 메모리 액세스 요청들 속도를 올리는 방법을 제공할 수 있다. 추가적으로, 라우팅 제어기 (220)는 주변 디바이스, 예컨대 그래픽스 프로세싱 유닛이 가상화 컴퓨팅 환경내에서 동작하는 것을 허용할 수 있고 동시에 비-가상화 컴퓨팅 환경의 레벨 근처의 레벨에서 수행한다.
비록 도 5는 프로세스 (500)의 예시 블럭들을 도시하지만, 일부 실시예들에서, 프로세스 (500)는 도 5에 도시된 것들 보다 추가의 블럭들, 더 적은 블럭들, 상이한 블럭들, 또는 상이하게 배열된 블럭들을 포함한다. 추가적으로, 또는 대안적으로, 두개 이상의 프로세스 (500)의 블럭들이 병렬로 수행될 수 있다.
도면들 6a-6e는 도 5에 도시된 예시 프로세스(500)에 관련한 대표적 실시예(600)의 다이어그램들이다. 도면들 6a-6e는 IOMMU (230)를 포함하는 제 1 경로를 통하여 메모리 액세스 요청을 라우팅하는 다양한 라우팅 결정들의 예시를 도시한다.
도 6a에, 그리고 도면 번호 (605)에 의해 도시된 바와 같이, GPU (210)가 메모리 액세스 요청을 라우팅 제어기 (220)에 제공한다고 가정한다. 도시된 바와 같이, 메모리 액세스 요청은 100의 가상 어드레스를 식별하고, 기록의 액세스 유형을 식별하고, 100의 가상 어드레스에 대응하는 물리적 메모리 어드레스에 기록될 일부 정보를 식별한다고 가정한다. 라우팅 제어기 (220)가 요청을 수신하고 재배치 레지스터 (435)내 저장된 인에이블 비트의 값을 결정한다고 가정한다. 도면 번호 (610)에 의해 도시된 바와 같이, 인에이블 비트가 라우팅 주 메모리 (250)로의 제 2 루트를 통한 (예를 들어, IOMMU (230)를 포함하지 않는 루트) 메모리 액세스 요청 라우팅이 디스에이블된 것을 표시하는 제로의 값을 저장한다고 가정한다. 따라서, 도면 번호 (615)에 의해 도시된 바와 같이, 라우팅 제어기 (220)는 IOMMU (230)를 포함하는 제 1 루트를 통하여 메모리 제어기 (240) 쪽으로 메모리 액세스를 라우팅한다.
도 6b의 목적을 위해서, 라우팅 제어기 (220)가 GPU (210)로부터 동일한 메모리 액세스 요청을 수신한다고 가정한다. 이 경우에서, 그러나, 라우팅 제어기 (220)가 제 2 루트를 통한 라우팅이 인에이블된 것을 결정한 것으로 가정한다(예를 들어, 인에이블 비트가 일의 값을 저장한다고 결정한다). 도면 번호 (620)에 의해 도시된 바와 같이, 라우팅 제어기 (220)가 베이스 어드레스 레지스터 (405)내 저장된 200의 베이스 어드레스 값을 결정한다고 가정한다. 도면 번호 (625)에 의해 도시된 바와 같이, 라우팅 제어기 (220)는 -100 (100 - 200 = -100)의 오프셋 값을 생성하기 위해서 100의 가상 어드레스의 값으로부터 200의 베이스 어드레스 값을 차감한다. 도면 번호 (630)에 의해 도시된 바와 같이, 라우팅 제어기 (220)가 오프셋 값이 제로보다 작은 것을 결정하고, 따라서 100의 가상 어드레스는 제 2 루트를 통한 라우팅과 관련된 가상 어드레스의 범위 외측에 있다. 따라서, 도면 번호 (635)에 의해 도시된 바와 같이, 라우팅 제어기 (220)는 IOMMU (230)를 포함하는 제 1 루트를 통하여 메모리 제어기 (240) 쪽으로 메모리 액세스를 라우팅한다.
도 6c에, 그리고 도면 번호 (640)에 의해 도시된 바와 같이, GPU (210)가 상이한 메모리 액세스 요청을 라우팅 제어기 (220)에 제공한다고 가정한다. 도시된 바와 같이, 메모리 액세스 요청은 800의 가상 어드레스를 식별하고, 기록의 액세스 유형을 식별하고, 800의 가상 어드레스에 대응하는 물리적 메모리 어드레스에 기록될 일부 정보를 식별한다고 가정한다. 도 6c의 목적을 위해서, 제 2 경로를 통한 라우팅이 인에이블되고 그리고 베이스 어드레스 값이 200 (예를 들어, 도 6b에 도시된 바와 같이)과 같다고 가정한다.
도면 번호 (645)에 의해 도시된 바와 같이, 라우팅 제어기 (220)는 600 (800 - 200 = 600)의 오프셋 값을 생성하기 위해서 800의 가상 어드레스 값으로부터 200의 베이스 어드레스 값을 차감한다. 오프셋 값이 제로보다 크기 때문에, 라우팅 제어기 (220)는 오프셋 값을 길이 레지스터 (410)내 저장된 길이 값에 비교할 것을 결정한다. 도면 번호 (650)에 의해 도시된 바와 같이, 라우팅 제어기 (220)가 길이 어드레스 레지스터 (410)내 저장된 500의 길이 값을 결정한다고 가정한다. 도면 번호 (655)에 의해 도시된 바와 같이, 라우팅 제어기 (220)가 오프셋 값을 길이 값에 비교하고, 오프셋 값이 길이 값보다 더 큰 것을 결정하고, 따라서 800의 가상 어드레스가 제 2 경로를 통하여 라우팅될 가상 어드레스들의 범위내에 있지 않다는 것을 결정한다. 결과적으로, 도면 번호 (660)에 의해 도시된 바와 같이, 라우팅 제어기 (220)는 IOMMU (230)를 포함하는 제 1 루트를 통하여 메모리 제어기 (240) 쪽으로 메모리 액세스를 라우팅한다.
도 6d에, 그리고 도면 번호 (665)에 의해 도시된 바와 같이, GPU (210)가 상이한 메모리 액세스 요청을 라우팅 제어기 (220)에 제공한다고 가정한다. 도시된 바와 같이, 메모리 액세스 요청은 600의 가상 어드레스를 식별하고, 기록의 액세스 유형을 식별하고, 600의 가상 어드레스에 대응하는 물리적 메모리 어드레스에 기록될 일부 정보를 식별한다고 가정한다. 도 6d의 목적을 위해서, 제 2 경로를 통한 라우팅이 인에이블되고 그리고 베이스 어드레스 값이 200과 같고 그리고 길이 값이 500과 같다고 가정한다.
도면 번호 (670)에 의해 도시된 바와 같이, 라우팅 제어기 (220)는 400 (600 - 200 = 400)의 오프셋 값을 계산하기 위해서 600의 가상 어드레스 값으로부터 200의 베이스 어드레스 값을 차감한다. 도면 번호 (675)에 의해 도시된 바와 같이, 라우팅 제어기 (220)가 400의 오프셋 값이 500의 길이 값보다 작다고 결정한다. 이 결정에 기초하여, 라우팅 제어기 (220)는 600의 가상 어드레스가 제 2 루트를 통한 라우팅과 관련된 가상 어드레스들의 범위내에 있다고 결정한다.
도 6e가 도 6d에 도시된 예제에 이어지고, 라우팅 제어기 (220)에 의해 수신된 메모리 액세스 요청내 식별된 600의 가상 어드레스가 제 2 루트를 통한 라우팅과 관련된 가상 어드레스들의 범위내 있다고 가정한다. 도 6e에 및 도면 번호 (680)에 의해 도시된 바와 같이, 라우팅 제어기 (220)가 재배치 레지스터 (435)내 저장된 액세스 제어 비트가 판독 전용 액세스 제어가 인에이블된 것을 표시하는 1의 값을 저장한다고 결정한 것으로 가정한다. 메모리 액세스 요청이 기록 동작을 식별한다고 가정한다. 결과적으로, 도면 번호 (685)에 의해 도시된 바와 같이, 라우팅 제어기 (220)는 IOMMU (230)를 포함하는 제 1 루트를 통하여 메모리 제어기 (240) 쪽으로 메모리 액세스를 라우팅한다. 그러나, 만약 메모리 액세스 요청이 판독 동작을 식별하였다면, 그렇다면 라우팅 제어기 (220)는 600의 가상 어드레스에 대응하는 물리적 어드레스를 결정하였을 것이고, 제 2 루트를 통하여 메모리 제어기 (240)로 (예를 들어, IOMMU (230)를 포함하지 않는 루트) 메모리 액세스 요청을 라우팅 하였을 것이다.
상기에서 나타낸바와 같이, 도면들 6a-6e는 단지 일 예로서 제공된다. 다른 예들이 가능하고 도면들 6a - 6b에 관해서 설명되었던 것과 다를 수 있다.
도면들 7a 및 7b는 도 5에 도시된 예시 프로세스(500)에 관련한 다른 대표적 실시예(700)의 다이어그램들이다. 도면들 7a 및 7b는 IOMMU (230)를 포함하지 않는 제 2 경로를 통하여 메모리 액세스 요청을 라우팅하는 라우팅 결정의 예제를 도시한다.
도 7a에, 그리고 도면 번호 (705)에 의해 도시된 바와 같이, GPU (210)가 메모리 액세스 요청을 라우팅 제어기 (220)에 제공한다고 가정한다. 도시된 바와 같이, 메모리 액세스 요청은 699의 가상 어드레스를 식별하고, 기록의 액세스 유형을 식별하고, 699의 가상 어드레스에 대응하는 물리적 메모리 어드레스에 기록될 일부 정보를 식별한다고 가정한다. 도면 번호 (710)에 의해 도시된 바와 같이, 제 2 루트를 통한 라우팅이 인에이블되고, 기록 액세스가 또한 인에이블된 것을 가정한다. 도면 번호 (715)에 의해 도시된 바와 같이, 라우팅 제어기 (220)는 499 (699 - 200 = 499)의 오프셋 값을 계산하기 위해서 699의 가상 어드레스 값으로부터 200의 베이스 어드레스 값을 차감한다. 도면 번호 (720)에 의해 도시된 바와 같이, 라우팅 제어기 (220)가 499의 오프셋 값이 제로보다 더 크고, 500의 길이 값보다 작다고 결정한다. 이 결정에 기초하여, 라우팅 제어기 (220)는 699의 가상 어드레스가 제 2 루트를 통한 라우팅과 관련된 가상 어드레스들의 범위내에 있다고 결정한다.
도 7b 및 도면 번호 (725)에 의해 도시된 바와 같이, 라우팅 제어기 (220)가 재배치 레지스터 (435)내 저장된 400의 재배치 값을 결정한다고 가정한다. 도면 번호 (730)에 의해 도시된 바와 같이, 라우팅 제어기 (220)는 899 (499 + 400 = 899)의 물리적 어드레스 값을 생성하기 위해 499의 오프셋 값에 400의 재배치 값을 더한다. 도면 번호 (735)에 의해 도시된 바와 같이, 라우팅 제어기 (220)는 IOMMU (230)를 포함하지 않는 제 2 루트를 통하여 메모리 제어기 (240) 쪽으로 899의 물리적 어드레스를 식별하는 정보를 포함하는 메모리 액세스 요청을 라우팅한다.
상기에서 나타낸바와 같이, 도면들 7a 및 7b는 단지 일 예로서 제공된다. 다른 예들이 가능하고 도면들 7a 및 7b에 관해서 설명되었던 것과 다를 수 있다.
상기의 개시는 예시 및 설명을 제공하지만 그러나 실시예들을 개시된 정확한 형태에 제한하거나 또는 망라된 것으로 의도되지 않는다. 수정예들 및 변형예들이 상기의 개시를 고려하여 가능하거나 또는 실시예들의 실행으로부터 획득될 수 있다.
본 출원에서 사용되는, 디바이스 또는 컴포넌트는 하드웨어, 펌웨어, 또는 하드웨어 및 소프트웨어의 조합으로 광범위하게 이해되도록 의도된다.
일부 실시예들은 임계값들과 관련하여 본 출원에서 설명된다. 본 출원에서 사용되는, 임계값을 만족하는 것은 값이 임계값보다 더 크고, 임계값보다 더 많고, 임계값보다 더 높고, 임계값보다 더 크거나 또는 같고, 임계값 미만이고, 임계값보다 더 작고, 임계값보다 낮고, 임계값보다 작거나 또는 같고, 임계값과 같은 등을 나타낸다.
본 출원에 설명된 시스템들 및/또는 방법들은 도면들에 예시된 실시예들에 소프트웨어, 펌웨어, 및 하드웨어의 많은 상이한 형태들로 구현될 수 있다것이 명확할 것이다. 이들 시스템들 및 방법들을 구현하기 위해 사용되는 실제 소프트웨어 코드 또는 특화된 제어 하드웨어는 실시예들에 한정되지 않는다. 따라서, 시스템들 및 방법들의 동작 및 행위는 특정 소프트웨어 코드의 언급없이 설명되었다 - 소프트웨어 및 하드웨어는 본 출원에 설명에 기초하여 시스템들 및 방법들을 구현하도록 디자인될 수 있다는 것이 이해될 것이다.
설사 특징들의 특정 조합들이 청구항들에 나열되고 및/또는 명세서에 개시되었지만, 이들 조합들은 가능한 실시예들의 개시를 제한하는 것으로 의도되지 않는다. 사실은, 많은 이들 특징들은 청구항에 구체적으로 나열되지 않고 및/또는 명세서에 개시되지 않은 방식으로 결합될 수 있다. 비록 아래에 열거된 각각의 종속 청구항은 단지 하나의 청구항에만 직접 종속하지만, 가능한 실시예들의 개시는 청구항 세트내 모든 다른 청구항과 조합하는 각각의 종속 청구항을 포함한다.
본 출원에 사용되는 어떠한 엘리먼트, 동작 또는 명령도 명백하게 그렇게 설명되지 않는한 중요하거나 또는 본질적인 것으로 해석되지 않아야 한다. 또한, 본 출원에서 사용되는, 관사들 "a" 및 "an"는 하나 이상의 아이템들을 포함하는 것으로 의도되고, "하나 이상의"와 호환하여 사용될 수 있다. 유사하게, "세트(set)"는 하나 이상의 아이템들을 포함하는 것으로 의도되고, "하나 이상의"와 호환하여 사용될 수 있다. 단지 하나의 아이템만이 의도되는 경우, 용어 "하나(one)" 또는 유사한 언어가 사용된다. 또한, 본 출원에서 사용되는, 용어 "갖는(having)"는 확장 가능 용어인 것으로 의도된다. 더구나, 어구 "에 기초하여(based on)"는 명백하게 다른 식으로 언급되지 않으면 "적어도 부분적으로, ~에 기초하여"를 의미하는 것으로 의도된다.

Claims (20)

  1. 방법에 있어서,
    디바이스에 의해, 가상 어드레스를 식별하는 직접 메모리 액세스 요청을 수신하는 단계;
    상기 디바이스에 의해, 상기 가상 어드레스가 가상 어드레스들의 특정 범위내에 있는지 여부를 결정하는 단계; 및
    상기 디바이스에 의해, 상기 가상 어드레스가 상기 가상 어드레스들의 특정 범위내에 있는지 여부의 결정에 기초하여 제 1 동작 또는 제 2 동작을 선택적으로 수행하는 단계를 포함하되,
    상기 제 1 동작은:
    상기 가상 어드레스가 상기 가상 어드레스들의 특정 범위내에 있지 않을 때 상기 가상 어드레스를 메모리 디바이스와 관련된 물리적 어드레스로 변환하기 위해 제 1 어드레스 변환 알고리즘이 수행되게 하는 것을 포함하고, 및
    상기 제 2 동작은:
    상기 가상 어드레스가 상기 가상 어드레스들의 특정 범위내에 있을 때 상기 가상 어드레스를 메모리 디바이스와 관련된 물리적 어드레스로 변환하기 위해 제 2 어드레스 변환 알고리즘이 수행되게 하는 것을 포함하고,
    상기 제 2 어드레스 변환 알고리즘은 상기 제 1 어드레스 변환 알고리즘과 상이한, 방법.
  2. 청구항 1에 있어서, 상기 제 1 어드레스 변환 알고리즘은 상기 가상 어드레스를 상기 물리적 어드레스로 변환하기 위해 페이지 테이블(page table)을 활용하는 알고리즘을 포함하고; 및
    상기 제 2 어드레스 변환 알고리즘은 상기 가상 어드레스에 기초하여 계산된 오프셋 값(offset value) 및 재배치 값(relocation value)을 결합함으로써 상기 물리적 어드레스를 계산하는 메모리 재배치 알고리즘을 포함하는, 방법.
  3. 청구항 1에 있어서,
    상기 디바이스에 의해 액세스 가능한 메모리에 저장된 베이스 어드레스(base address)를 결정하는 단계;
    상기 베이스 어드레스 및 상기 가상 어드레스를 이용하여 오프셋 값을 계산하는 단계를 더 포함하되; 및
    상기 가상 어드레스가 상기 가상 어드레스들의 특정 범위내에 있는지 여부의 결정은 :
    상기 가상 어드레스가 상기 오프셋 값에 기초하여 상기 가상 어드레스들의 특정 범위내에 있는지 여부를 결정하는 단계를 더 포함하는, 방법.
  4. 청구항 3에 있어서, 상기 오프셋 값을 계산하는 단계는 :
    상기 베이스 어드레스와 상기 가상 어드레스 간의 차이를 결정함으로써 상기 오프셋 값을 계산하는 단계를 더 포함하되; 및
    상기 가상 어드레스가 상기 가상 어드레스들의 특정 범위내에 있는지 여부의 결정은 :
    상기 오프셋 값을 임계값에 비교하는 단계; 및
    상기 오프셋 값과 상기 임계값의 비교에 기초하여 상기 가상 어드레스가 상기 가상 어드레스들의 특정 범위내에 있는지 여부를 결정하는 단계를 더 포함하는, 방법.
  5. 청구항 4에 있어서, 상기 임계값은 제 1 임계값이고; 및
    상기 가상 어드레스가 상기 가상 어드레스들의 특정 범위내에 있는지 여부의 결정은 :
    상기 오프셋 값을 제 2 임계값에 비교하는 단계로서,
    상기 제 2 임계값은 상기 제 1 임계값과 상이하고; 및
    상기 오프셋 값과 상기 제 1 임계값의 비교 및 추가로 상기 오프셋 값과 상기 제 2 임계값의 비교에 기초하여 상기 가상 어드레스가 상기 가상 어드레스들의 특정 범위내에 있는지 여부를 결정하는 단계를 더 포함하는, 방법.
  6. 청구항 3에 있어서, 상기 가상 어드레스를 상기 물리적 어드레스로 변환하기 위해 상기 제 2 어드레스 변환 알고리즘이 수행되게 하는 것은:
    상기 디바이스에 의해 액세스 가능한 메모리에 저장된 재배치 값(relocation value)을 결정하는 단계; 및
    상기 오프셋 값 및 상기 재배치 값을 결합함으로써 상기 물리적 어드레스를 계산하는 단계를 더 포함하는, 방법.
  7. 청구항 1에 있어서, 상기 제 2 어드레스 변환 알고리즘이 상기 가상 어드레스를 상기 물리적 어드레스로 변환하는 것은 상기 제 1 어드레스 변환 알고리즘이 상기 가상 어드레스를 상기 물리적 어드레스로 변환하는 것 보다 더 빠른, 방법.
  8. 디바이스에 있어서,
    제어기로서:
    주변 디바이스(peripheral device)로부터, 가상 어드레스 값을 식별하는 메모리 액세스 요청을 수신하고;
    상기 제어기에 의해 액세스 가능한 메모리에 저장된 정보에 기초하여, 상기 가상 어드레스 값이 가상 어드레스들 값들의 특정 범위에 포함되는지 여부를 결정하고; 및
    상기 가상 어드레스 값이 상기 가상 어드레스들의 특정 범위 값들내에 포함된지 여부의 결정에 기초하여 제 1 동작 또는 제 2 동작을 선택적으로 수행하는, 상기 제어기를 포함하되,
    상기 제 1 동작은 상기 가상 어드레스 값이 상기 가상 어드레스 값들의 특정 범위내 포함되지 않을 때 수행되고, 상기 제 1 동작은:
    상기 가상 어드레스 값을 메모리 디바이스내 메모리 위치를 식별하는 물리적 어드레스 값으로 변환하기 위해 제 1 어드레스 변환 알고리즘이 수행되게 하는 것을 포함하고, 및
    상기 제 2 동작은 상기 가상 어드레스 값이 상기 가상 어드레스 값들의 특정 범위내 포함된 때 수행되고, 상기 제 2 동작은:
    상기 가상 어드레스 값을 상기 물리적 어드레스 값으로 변환하기 위해 제 2 어드레스 변환 알고리즘이 수행되게 하는 것을 포함하고,
    상기 제 2 어드레스 변환 알고리즘은 상기 제 1 어드레스 변환 알고리즘과 상이한, 디바이스.
  9. 청구항 8에 있어서, 상기 제 1 동작을 선택적으로 수행할 때 상기 제어기는 추가로 :
    입력/출력 메모리 관리 유닛 (IOMMU)을 포함하는 제 1 루트를 통하여 상기 메모리 액세스 요청을 라우팅하고; 및
    상기 제 2 동작을 선택적으로 수행할 때 상기 제어기는 추가로:
    상기 IOMMU를 포함하지 않는 제 2 루트를 통하여 상기 메모리 액세스 요청을 라우팅하는, 디바이스.
  10. 청구항 8에 있어서, 상기 제 1 동작을 선택적으로 수행할 때 상기 제어기는 추가로:
    제 2 루트에 비하여 상기 메모리 디바이스에 대한 더 높은 평균 레이턴시(latency)를 갖는 제 1 루트를 통하여 상기 메모리 액세스 요청을 라우팅하고; 및
    상기 제 2 동작을 선택적으로 수행할 때 상기 제어기는 추가로:
    상기 제 1 루트에 비하여 상기 메모리 디바이스에 대한 더 낮은 평균 레이턴시를 갖는 상기 제 2 루트를 통하여 상기 메모리 액세스 요청을 라우팅하는, 디바이스.
  11. 청구항 8에 있어서, 상기 가상 어드레스 값이 상기 가상 어드레스들의 특정 범위 값들내에 포함되는지 여부를 결정할 때 상기 제어기는 추가로,
    상기 제어기에 의해 액세스 가능한 메모리에 저장된 베이스 어드레스 값(base address value)를 결정하고;
    상기 베이스 어드레스 값과 상기 가상 어드레스 값 간의 차이에 기초하여 오프셋 값을 계산하고; 및
    상기 오프셋 값이 임계값을 만족하지 않는다고 결정하고; 및
    상기 제 1 동작을 선택적으로 수행할 때 상기 제어기는 추가로:
    상기 오프셋 값이 상기 임계값을 만족하지 않는다는 결정에 기초하여 상기 1 동작을 선택적으로 수행하는, 디바이스.
  12. 청구항 11에 있어서, 상기 오프셋 값을 계산할 때 상기 제어기는 추가로:
    상기 가상 어드레스 값으로부터 상기 베이스 어드레스 값을 차감함으로써 상기 오프셋 값을 계산하고;
    상기 오프셋 값이 상기 임계값을 만족하지 않는다고 결정할 때 상기 제어기는 추가로 :
    상기 오프셋 값이 제로보다 작다고 결정하고; 및
    상기 제 1 동작을 선택적으로 수행할 때 상기 제어기는 추가로:
    상기 오프셋 값이 제로보다 작다는 결정에 기초하여 상기 1 동작을 선택적으로 수행하는, 디바이스.
  13. 청구항 11에 있어서, 상기 오프셋 값을 계산할 때 상기 제어기는 추가로:
    상기 가상 어드레스 값으로부터 상기 베이스 어드레스 값을 차감함으로써 상기 오프셋 값을 계산하고;
    상기 오프셋 값이 상기 임계값을 만족하지 않는다고 결정할 때 상기 제어기는 추가로 :
    상기 가상 어드레스 값들의 특정 범위에 포함되는 가상 어드레스 값들의 양을 나타내는, 상기 제어기에 의해 액세스 가능한 상기 메모리에 저장된 길이 값을 결정하고; 및
    상기 오프셋 값이 상기 길이 값보다 더 크거나 같다고 결정하고; 및
    상기 제 1 동작을 선택적으로 수행할 때 상기 제어기는 추가로:
    상기 오프셋 값이 상기 길이 값보다 더 크거나 같다는 결정에 기초하여 상기 1 동작을 선택적으로 수행하는, 디바이스.
  14. 청구항 8에 있어서, 상기 가상 어드레스 값이 상기 가상 어드레스들의 특정 범위 값들내에 포함되는지 여부를 결정할 때 상기 제어기는 추가로,
    상기 제어기에 의해 액세스 가능한 메모리에 저장된 베이스 어드레스 값(base address value)를 결정하고;
    상기 베이스 어드레스 값과 상기 가상 어드레스 값 간의 차이에 기초하여 오프셋 값을 계산하고; 및
    상기 오프셋 값이 제 1 임계값을 만족한다고 결정하고; 및
    상기 오프셋 값이 상기 제 1 임계값과 상이한 제 2 임계값을 만족한다고 결정하고; 및
    상기 제 2 동작을 선택적으로 수행할 때 상기 제어기는 추가로:
    상기 오프셋 값이 상기 제 1 임계값 및 상기 제 2 임계값을 만족한다는 결정에 기초하여 상기 2 동작을 선택적으로 수행하는, 디바이스.
  15. 시스템에 있어서,
    하나 이상의 디바이스들로서:
    가상 어드레스 값을 식별하는 메모리 액세스 요청을 수신하고;
    상기 가상 어드레스 값이 가상 어드레스들 값들의 특정 범위에 포함되는지 여부를 결정하고; 및
    상기 가상 어드레스 값이 가상 어드레스 값들의 특정 범위에 포함되는지 여부의 결정에 기초하여 상기 가상 어드레스 값을 메모리 디바이스와 관련된 물리적 어드레스 값으로 변환하기 위해 제 1 어드레스 변환 알고리즘 또는 제 2 어드레스 변환 알고리즘을 선택적으로 수행하는, 상기 하나이상의 디바이스들을 포함하되,
    상기 제 1 어드레스 변환 알고리즘은 상기 가상 어드레스 값이 가상 어드레스 값들의 특정 범위내 포함되지 않을 때 수행되고,
    상기 제 2 어드레스 변환 알고리즘은 상기 가상 어드레스 값이 가상 어드레스 값들의 특정 범위에 포함될 때 수행되고,
    상기 제 2 어드레스 변환 알고리즘은 상기 제 1 어드레스 변환 알고리즘과 상이하고; 및
    상기 제 1 어드레스 변환 알고리즘 또는 상기 제 2 어드레스 변환 알고리즘의 선택적 수행에 기초하여 상기 메모리 디바이스쪽으로 상기 물리적 어드레스 값을 식별하는 정보 및 상기 메모리 액세스 요청을 라우팅하는, 시스템.
  16. 청구항 15에 있어서, 상기 하나 이상의 디바이스들은 추가로:
    상기 가상 어드레스 값이 상기 가상 어드레스들의 특정 범위내에 포함된지의 결정에 기초하여 제 1 동작 또는 제 2 동작을 선택적으로 수행하고,
    상기 제 1 동작은:
    상기 가상 어드레스 값이 상기 가상 어드레스 값들의 특정 범위에 포함되지 않을 때 상기 제 1 어드레스 변환 알고리즘을 수행하는 입력/출력 메모리 관리 유닛 (IOMMU)을 포함하는 제 1 루트를 통하여 상기 메모리 액세스 요청을 라우팅하는 것을 포함하고, 및
    상기 제 2 동작은:
    상기 가상 어드레스 값이 상기 가상 어드레스 값들의 특정 범위내 포함될 때 상기 IOMMU를 포함하지 않는 제 2 루트를 통하여 상기 메모리 액세스 요청을 라우팅하는 것을 포함하는, 시스템.
  17. 청구항 15에 있어서, 상기 하나 이상의 디바이스들은 추가로:
    상기 메모리 액세스 요청내 식별된 요청된 액세스 유형을 결정하고,
    상기 요청된 액세스 유형은 :
    판독 액세스, 또는
    기록 액세스; 중 적어도 하나를 포함하고,
    허용된 액세스 유형인지를 결정하고; 및
    상기 제 1 어드레스 변환 알고리즘 또는 상기 제 2 어드레스 변환 알고리즘을 선택적으로 수행할 때, 상기 하나 이상의 디바이스들은 추가로 :
    상기 요청된 액세스 유형이 허용되지 않은 것을 상기 허용된 액세스 유형이 표시할 때 상기 제 1 어드레스 변환 알고리즘을 선택적으로 수행하거나, 또는
    상기 요청된 액세스 유형이 허용된 것을 상기 허용된 액세스 유형이 표시할 때 상기 제 2 어드레스 변환 알고리즘을 선택적으로 수행하는, 시스템.
  18. 청구항 15에 있어서, 상기 제 1 어드레스 변환 알고리즘을 선택적으로 수행할 때, 상기 하나 이상의 디바이스들은 추가로 :
    페이지 테이블을 이용하여 상기 가상 어드레스 값을 상기 물리적 어드레스 값으로 변환하고; 및
    상기 제 2 어드레스 변환 알고리즘을 선택적으로 수행할 때, 상기 하나 이상의 디바이스들은 추가로 :
    상기 가상 어드레스 값에 기초하여 계산된 오프셋 값(offset value) 및 재배치 값(relocation value)을 결합함으로써 상기 물리적 어드레스 값을 계산하는 메모리 재배치 알고리즘을 이용하여 상기 가상 어드레스 값을 상기 물리적 어드레스 값으로 변환하는, 시스템.
  19. 청구항 15에 있어서, 상기 가상 어드레스 값들의 특정 범위는 복수개의 가상 어드레스 값들의 범위들 중 하나이고; 및
    상기 하나 이상의 디바이스들은 추가로:
    상기 복수개의 가상 어드레스 값들의 범위들로부터 상기 가상 어드레스 값들의 특정 범위를 선택하는, 시스템.
  20. 청구항 15에 있어서, 상기 제 2 어드레스 변환 알고리즘이 상기 가상 어드레스 값을 상기 물리적 어드레스 값로 변환하는 것은 상기 제 1 어드레스 변환 알고리즘이 상기 가상 어드레스 값을 상기 물리적 어드레스 값으로 변환하는 것 보다 더 빠른, 시스템.
KR1020177005584A 2014-08-27 2015-08-25 가상화 컴퓨팅 환경내 직접 메모리 액세스 요청들 라우팅 KR101973732B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/469,928 US20160062911A1 (en) 2014-08-27 2014-08-27 Routing direct memory access requests in a virtualized computing environment
US14/469,928 2014-08-27
PCT/US2015/046687 WO2016033039A2 (en) 2014-08-27 2015-08-25 Routing direct memory access requests in a virtualized computing environment

Publications (2)

Publication Number Publication Date
KR20170038873A true KR20170038873A (ko) 2017-04-07
KR101973732B1 KR101973732B1 (ko) 2019-04-29

Family

ID=55400808

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177005584A KR101973732B1 (ko) 2014-08-27 2015-08-25 가상화 컴퓨팅 환경내 직접 메모리 액세스 요청들 라우팅

Country Status (6)

Country Link
US (2) US20160062911A1 (ko)
EP (1) EP3186713B1 (ko)
JP (2) JP2017529606A (ko)
KR (1) KR101973732B1 (ko)
CN (1) CN106796562B (ko)
WO (1) WO2016033039A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200135718A (ko) * 2019-05-24 2020-12-03 베이징 바이두 넷컴 사이언스 앤 테크놀로지 코., 엘티디. 액세스 요청을 관리하기 위한 방법, 장치, 기기 및 저장 매체

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160062911A1 (en) * 2014-08-27 2016-03-03 Advanced Micro Devices, Inc. Routing direct memory access requests in a virtualized computing environment
US10078601B2 (en) * 2014-11-14 2018-09-18 Cavium, Inc. Approach for interfacing a pipeline with two or more interfaces in a processor
US9934117B2 (en) * 2015-03-24 2018-04-03 Honeywell International Inc. Apparatus and method for fault detection to ensure device independence on a bus
US11321267B2 (en) 2016-09-30 2022-05-03 Hewlett-Packard Development Company, L.P. Safe peripheral device communications
US10402355B2 (en) 2017-02-08 2019-09-03 Texas Instruments Incorporated Apparatus and mechanism to bypass PCIe address translation by using alternative routing
US10198202B2 (en) * 2017-02-24 2019-02-05 Red Hat, Inc. Safe userspace device access for network function virtualization using an IOMMU to map supervisor memory to a reserved range of application virtual addresses
US20180285262A1 (en) * 2017-03-31 2018-10-04 Intel Corporation Techniques for shared virtual memory access protection
KR102540964B1 (ko) 2018-02-12 2023-06-07 삼성전자주식회사 입출력 장치의 활용도 및 성능을 조절하는 메모리 컨트롤러, 애플리케이션 프로세서 및 메모리 컨트롤러의 동작
US11768967B2 (en) * 2018-03-15 2023-09-26 Hewlett-Packard Development Company, L.P. Address verification for direct memory access requests
US11853179B1 (en) * 2018-12-28 2023-12-26 Teledyne Lecroy, Inc. Detection of a DMA (direct memory access) memory address violation when testing PCIE devices
US10936507B2 (en) 2019-03-28 2021-03-02 Intel Corporation System, apparatus and method for application specific address mapping
US11386028B2 (en) * 2019-03-29 2022-07-12 Teledyne Lecroy, Inc. Method to test direct memory access (DMA) address capabilities at high address values
US11003588B2 (en) * 2019-08-22 2021-05-11 Advanced Micro Devices, Inc. Networked input/output memory management unit
CN112527698B (zh) * 2020-12-04 2024-03-22 联想(北京)有限公司 一种处理方法、装置及设备
US20230205705A1 (en) * 2021-12-23 2023-06-29 Advanced Micro Devices, Inc. Approach for providing indirect addressing in memory modules

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63245743A (ja) * 1987-04-01 1988-10-12 Fuji Electric Co Ltd メモリアクセス方式
JPH1125033A (ja) * 1997-06-30 1999-01-29 Nec Corp バスブリッジ
US20070283123A1 (en) * 2006-06-05 2007-12-06 Sun Microsystems, Inc. Function-based virtual-to-physical address translation
US20140208064A1 (en) * 2013-01-24 2014-07-24 Wisconsin Alumni Research Foundation Virtual Memory Management System with Reduced Latency

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5961581A (en) * 1996-06-27 1999-10-05 Advanced Micro Devices, Inc. Method and circuit for detecting address limit violations in a microprocessor-based computer
US6282625B1 (en) * 1997-06-25 2001-08-28 Micron Electronics, Inc. GART and PTES defined by configuration registers
US6658521B1 (en) * 2000-12-22 2003-12-02 International Business Machines Corporation Method and apparatus for address translation on PCI bus over infiniband network
GB0123415D0 (en) * 2001-09-28 2001-11-21 Memquest Ltd Method of writing data to non-volatile memory
US6889308B1 (en) * 2002-01-18 2005-05-03 Advanced Micro Devices, Inc. Method and apparatus for protecting page translations
WO2004099992A2 (en) * 2003-04-30 2004-11-18 Silicon Graphics, Inc. System and method for performing address translation in a computer system
US20070233727A1 (en) * 2003-08-05 2007-10-04 Gideon Guy Multiple Virtual Devices
US20050091383A1 (en) * 2003-10-14 2005-04-28 International Business Machines Corporation Efficient zero copy transfer of messages between nodes in a data processing system
US7552319B2 (en) * 2004-06-30 2009-06-23 Intel Corporation Methods and apparatus to manage memory access
US7370174B2 (en) * 2005-01-05 2008-05-06 Intel Corporation Method, system, and program for addressing pages of memory by an I/O device
US7543131B2 (en) 2005-08-12 2009-06-02 Advanced Micro Devices, Inc. Controlling an I/O MMU
US7650471B2 (en) * 2006-01-06 2010-01-19 Hewlett-Packard Development Company, L.P. Head of queue cache for communication interfaces
US7721068B2 (en) * 2006-06-12 2010-05-18 Oracle America, Inc. Relocation of active DMA pages
US8095773B2 (en) * 2008-02-26 2012-01-10 International Business Machines Corporation Dynamic address translation with translation exception qualifier
US8954959B2 (en) * 2010-09-16 2015-02-10 Red Hat Israel, Ltd. Memory overcommit by using an emulated IOMMU in a computer system without a host IOMMU
WO2012059951A1 (ja) 2010-11-01 2012-05-10 トヨタ自動車株式会社 蓄電装置
JP2013069139A (ja) * 2011-09-22 2013-04-18 Fujitsu Ltd 演算処理装置及び演算処理装置の制御方法
US20130275699A1 (en) * 2012-03-23 2013-10-17 Hicamp Systems, Inc. Special memory access path with segment-offset addressing
US9384153B2 (en) * 2012-08-31 2016-07-05 Freescale Semiconductor, Inc. Virtualized local storage
WO2015114644A1 (en) * 2014-01-30 2015-08-06 Hewlett-Packard Development Company, L.P. Persistent pointers for programs running on nvram based computers
US20150281126A1 (en) * 2014-03-31 2015-10-01 Plx Technology, Inc. METHODS AND APPARATUS FOR A HIGH PERFORMANCE MESSAGING ENGINE INTEGRATED WITHIN A PCIe SWITCH
US20160062911A1 (en) * 2014-08-27 2016-03-03 Advanced Micro Devices, Inc. Routing direct memory access requests in a virtualized computing environment

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63245743A (ja) * 1987-04-01 1988-10-12 Fuji Electric Co Ltd メモリアクセス方式
JPH1125033A (ja) * 1997-06-30 1999-01-29 Nec Corp バスブリッジ
US20070283123A1 (en) * 2006-06-05 2007-12-06 Sun Microsystems, Inc. Function-based virtual-to-physical address translation
US20140208064A1 (en) * 2013-01-24 2014-07-24 Wisconsin Alumni Research Foundation Virtual Memory Management System with Reduced Latency

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200135718A (ko) * 2019-05-24 2020-12-03 베이징 바이두 넷컴 사이언스 앤 테크놀로지 코., 엘티디. 액세스 요청을 관리하기 위한 방법, 장치, 기기 및 저장 매체

Also Published As

Publication number Publication date
US20160062911A1 (en) 2016-03-03
CN106796562B (zh) 2020-03-17
KR101973732B1 (ko) 2019-04-29
US10162765B2 (en) 2018-12-25
JP6701284B2 (ja) 2020-05-27
WO2016033039A3 (en) 2016-05-06
WO2016033039A2 (en) 2016-03-03
EP3186713A4 (en) 2018-03-28
CN106796562A (zh) 2017-05-31
EP3186713B1 (en) 2020-02-12
EP3186713A2 (en) 2017-07-05
JP2017529606A (ja) 2017-10-05
US20170220485A1 (en) 2017-08-03
JP2018198088A (ja) 2018-12-13

Similar Documents

Publication Publication Date Title
KR101973732B1 (ko) 가상화 컴퓨팅 환경내 직접 메모리 액세스 요청들 라우팅
KR102161448B1 (ko) 멀티 채널 메모리를 포함하는 시스템 및 그 동작 방법
US10025504B2 (en) Information processing method, information processing apparatus and non-transitory computer readable medium
US20060179177A1 (en) Method, apparatus, and computer program product for migrating data pages by disabling selected DMA operations in a physical I/O adapter
US10248418B2 (en) Cleared memory indicator
CN109977037B (zh) 一种dma数据传输方法及系统
CN104461735B (zh) 一种虚拟化场景下分配cpu资源的方法和装置
US10241926B2 (en) Migrating buffer for direct memory access in a computer system
KR101724590B1 (ko) 멀티 프로세서 시스템에서의 메모리 보호 장치 및 방법
US9875132B2 (en) Input output memory management unit based zero copy virtual machine to virtual machine communication
US10310759B2 (en) Use efficiency of platform memory resources through firmware managed I/O translation table paging
KR20140006143A (ko) 공유된 캐쉬들을 제공하는 방법 및 장치
WO2016149935A1 (en) Computing methods and apparatuses with graphics and system memory conflict check
US10248354B2 (en) Hypervisor enabling secure communication between virtual machines by managing exchanging access to read buffer and write buffer with a queuing buffer
US8606999B2 (en) Cache partitioning
US10481951B2 (en) Multi-queue device assignment for application groups
US12086447B2 (en) Systems and methods for reducing instruction code memory footprint for multiple processes executed at a coprocessor
US9971860B2 (en) Allocating plurality of RAMs to FPGA block RAM
US11714753B2 (en) Methods and nodes for handling memory
US9678887B2 (en) Flexible I/O DMA address allocation in virtualized systems
US20120324164A1 (en) Programmable Memory Address

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant