KR20220024023A - 처리 유닛의 가상화된 환경에서 멀티미디어 물리적 기능 공유 - Google Patents
처리 유닛의 가상화된 환경에서 멀티미디어 물리적 기능 공유 Download PDFInfo
- Publication number
- KR20220024023A KR20220024023A KR1020217040812A KR20217040812A KR20220024023A KR 20220024023 A KR20220024023 A KR 20220024023A KR 1020217040812 A KR1020217040812 A KR 1020217040812A KR 20217040812 A KR20217040812 A KR 20217040812A KR 20220024023 A KR20220024023 A KR 20220024023A
- Authority
- KR
- South Korea
- Prior art keywords
- guest
- virtual
- function
- subset
- processing unit
- Prior art date
Links
- 238000012545 processing Methods 0.000 title claims abstract description 98
- 230000003863 physical function Effects 0.000 title description 58
- 230000006870 function Effects 0.000 claims abstract description 302
- 239000000872 buffer Substances 0.000 claims abstract description 63
- 238000000034 method Methods 0.000 claims description 92
- 238000009877 rendering Methods 0.000 claims description 29
- 230000004044 response Effects 0.000 claims description 25
- 230000011664 signaling Effects 0.000 claims description 10
- 238000000638 solvent extraction Methods 0.000 claims description 5
- 230000008569 process Effects 0.000 description 35
- 238000010586 diagram Methods 0.000 description 22
- 238000007726 management method Methods 0.000 description 19
- 238000004891 communication Methods 0.000 description 11
- 238000013519 translation Methods 0.000 description 11
- 230000014616 translation Effects 0.000 description 11
- 230000008901 benefit Effects 0.000 description 9
- 230000000694 effects Effects 0.000 description 9
- 239000008186 active pharmaceutical agent Substances 0.000 description 8
- 230000002093 peripheral effect Effects 0.000 description 7
- 238000006243 chemical reaction Methods 0.000 description 6
- 230000001133 acceleration Effects 0.000 description 5
- 238000012546 transfer Methods 0.000 description 5
- 230000006835 compression Effects 0.000 description 4
- 238000007906 compression Methods 0.000 description 4
- 239000002184 metal Substances 0.000 description 4
- 238000001514 detection method Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000005192 partition Methods 0.000 description 3
- 238000000926 separation method Methods 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 230000009466 transformation Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000012937 correction Methods 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000026676 system process Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 241001522296 Erithacus rubecula Species 0.000 description 1
- 208000035217 Ring chromosome 1 syndrome Diseases 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000002730 additional effect Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000012508 change request Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 239000013256 coordination polymer Substances 0.000 description 1
- 230000009849 deactivation Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 238000013515 script Methods 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000005236 sound signal Effects 0.000 description 1
- 230000001629 suppression Effects 0.000 description 1
- 230000001256 tonic effect Effects 0.000 description 1
- JLGLQAWTXXGVEM-UHFFFAOYSA-N triethylene glycol monomethyl ether Chemical compound COCCOCCOCCO JLGLQAWTXXGVEM-UHFFFAOYSA-N 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30123—Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30138—Extension of register space, e.g. register cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3877—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/4557—Distribution of virtual machine instances; Migration and load balancing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45579—I/O management, e.g. providing access to device drivers or storage
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45583—Memory management, e.g. access or allocation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Controls And Circuits For Display Device (AREA)
- Advance Control (AREA)
- Stored Programmes (AREA)
Abstract
처리 유닛은 레지스터 세트 및 게스트 가상 머신(VM)들과 하이퍼바이저를 실행하도록 구성된 커널 모드 유닛들을 포함한다. 처리 유닛은 또한 물리적 기능을 구현하도록 구성된 고정 기능 하드웨어 블록을 포함한다. 물리적 기능에 대응하는 가상 기능은 게스트 VM들에 노출된다. 레지스터 세트의 서브세트들은 가상 기능과 관련된 정보를 저장하기 위해 할당되고 고정 기능 하드웨어 블록은 서브세트들 중 대응하는 하나에 저장된 정보를 기반으로 게스트들 VM 중 하나에 대한 가상 기능들 중 하나를 실행한다. 각 서브세트는 서브세트와 연관된 가상 기능에 의해 작동되는 프레임들을 저장하기 위한 프레임 버퍼, 가상 기능의 작동 상태를 정의하기 위한 컨텍스트 레지스터들, 가상 기능이 실행을 위해 스케줄링될 준비가 되었음을 알리는 도어벨 레지스터를 포함한다.
Description
기존의 처리 시스템은 오디오, 비디오 및 그래픽 어플리케이션을 구현하는 중앙 처리 장치(CPU)와 그래픽 처리 장치(GPU)를 포함한다. 경우에 따라, CPU와 GPU가 가속 처리 장치(APU)에 통합된다. 멀티미디어 어플리케이션은 프로그램으로 그룹화된 마이크로프로세서 명령어들의 정적 프로그래밍 시퀀스 또는 어플리케이션의 수명 동안 멀티미디어 어플리케이션에 할당되는 리소스 세트가 있는 프로세스(컨테이너)로 표시된다. 예를 들어 Windows® 프로세스는 개인 가상 어드레스 공간, 실행 가능한 프로그램, 다양한 시스템 리소스(예를 들어, 세마포어(semaphore), 동기화 오브젝트 및 프로세스의 스레드에 액세스할 수 있는 파일)를 매핑하고 활용하는 핸들(handle) 세트, 보안 컨텍스트(사용자 식별, 권한, 액세스 속성, 사용자 어카운트 제어 플래그, 세션 등으로 구성됨), 클라이언트 어플리케이션을 고유하게 식별하는 프로세스 식별자, 하나 이상의 실행 스레드들로 구성된다. 운영 체제(OS)도 멀티미디어를 지원하고, 예를 들어 OS는 특정 컨테이너에 캡슐화된 멀티미디어 파일을 열 수 있다. 멀티미디어 컨테이너의 예로는 .mov, .mp4 및 .ts를 포함한다. OS는 오디오 또는 비디오 컨테이너를 찾고, 컨텐츠를 검색하고, CPU 또는 사용 가능한 멀티미디어 가속기의 소프트웨어에서 컨텐츠를 디코딩하고, 컨텐츠를 렌더링하고, 예를 들어 알파 블렌드(alpha blended) 또는 컬러 키 그래픽(color keyed graphic)으로 렌더링된 컨텐츠를 디스플레이에 제시한다. 경우에 따라, CPU는 GPU에 드로우 콜(draw call)을 발행하여 그래픽 처리를 시작한다. 드로우 콜은 CPU에 의해 생성되고 GPU로 전송되어 GPU가 프레임에서 오브젝트(또는 오브젝트의 일부)를 렌더링하도록 지시하는 커맨드이다. 드로우 콜은 오브젝트 또는 그 일부를 렌더링하기 위해 GPU에 의해 사용되는 텍스처, 상태, 셰이더, 렌더링 오브젝트, 버퍼 등을 정의하는 정보를 포함한다. GPU는 오브젝트를 렌더링하여 디스플레이에 제공되는 픽셀 값을 생성하며, 디스플레이는 픽셀 값을 사용하여 렌더링된 오브젝트를 나타내는 이미지를 표시한다.
본 개시는 첨부된 도면을 참조함으로써 당업자에게 더 잘 이해될 수 있고 그 수많은 특징 및 이점이 명백해질 수 있다. 다른 도면에서 동일한 참조 기호를 사용하는 것은 유사하거나 동일한 항목을 나타낸다.
도 1은 일부 실시예에 따른 가상화된 환경에서 물리적 기능의 공유를 구현하는 그래픽 처리 장치(GPU)를 포함하는 처리 시스템의 블록도이다.
도 2는 일부 실시예에 따른 단일 반도체 다이 상에 중앙 처리 장치(CPU)와 GPU를 통합하는 시스템 온 칩(SOC)의 블록도이다.
도 3은 일부 실시예에 따른 GPU 상의 멀티미디어 가상화를 지원하는 하드웨어 아키텍처의 제1 실시예의 블록도이다.
도 4는 일부 실시예에 따른 GPU 상의 멀티미디어 가상화를 지원하는 하드웨어 아키텍처의 제2 실시예의 블록도이다.
도 5는 일부 실시예에 따른 가상화된 OS 생태계에서 멀티미디어 처리를 지원하는 데 사용되는 운영 체제(OS)의 블록도이다.
도 6은 일부 실시예에 따른 가상화 지원을 갖는 OS 아키텍처의 블록도이다.
도 7은 일부 실시예에 따른 압축된 비디오 디코딩, 렌더링 및 프리젠테이션을 위한 멀티미디어 소프트웨어 시스템의 블록도이다.
도 8은 일부 실시예에 따른 물리적 기능에 대한 기본 어드레스 레지스터(BAR)를 식별하는 물리적 기능 구성 공간의 블록도이다.
도 9는 일부 실시예에 따른 가상 기능에 대한 BAR을 식별하는 단일 루트 I/O 가상화(SR-IOV) 헤더의 일부의 블록도이다.
도 10은 일부 실시예에 따른 물리적 기능을 구현하는 호스트 OS 및 물리적 기능과 연관된 가상 기능을 구현하는 게스트 가상 머신(VM)의 수명 주기의 블록도이다.
도 11은 일부 실시예에 따른 멀티미디어 사용자 모드 드라이버 및 커널 모드 드라이버의 블록도이다.
도 12는 일부 실시예에 따른 가상화된 OS 생태계에서 멀티미디어 능력 공유를 지원하는 메시지 시퀀스의 제1 부분이다.
도 13은 일부 실시예에 따른 가상화된 OS 생태계에서 멀티미디어 능력 공유를 지원하는 메시지 시퀀스의 제2 부분이다.
도 1은 일부 실시예에 따른 가상화된 환경에서 물리적 기능의 공유를 구현하는 그래픽 처리 장치(GPU)를 포함하는 처리 시스템의 블록도이다.
도 2는 일부 실시예에 따른 단일 반도체 다이 상에 중앙 처리 장치(CPU)와 GPU를 통합하는 시스템 온 칩(SOC)의 블록도이다.
도 3은 일부 실시예에 따른 GPU 상의 멀티미디어 가상화를 지원하는 하드웨어 아키텍처의 제1 실시예의 블록도이다.
도 4는 일부 실시예에 따른 GPU 상의 멀티미디어 가상화를 지원하는 하드웨어 아키텍처의 제2 실시예의 블록도이다.
도 5는 일부 실시예에 따른 가상화된 OS 생태계에서 멀티미디어 처리를 지원하는 데 사용되는 운영 체제(OS)의 블록도이다.
도 6은 일부 실시예에 따른 가상화 지원을 갖는 OS 아키텍처의 블록도이다.
도 7은 일부 실시예에 따른 압축된 비디오 디코딩, 렌더링 및 프리젠테이션을 위한 멀티미디어 소프트웨어 시스템의 블록도이다.
도 8은 일부 실시예에 따른 물리적 기능에 대한 기본 어드레스 레지스터(BAR)를 식별하는 물리적 기능 구성 공간의 블록도이다.
도 9는 일부 실시예에 따른 가상 기능에 대한 BAR을 식별하는 단일 루트 I/O 가상화(SR-IOV) 헤더의 일부의 블록도이다.
도 10은 일부 실시예에 따른 물리적 기능을 구현하는 호스트 OS 및 물리적 기능과 연관된 가상 기능을 구현하는 게스트 가상 머신(VM)의 수명 주기의 블록도이다.
도 11은 일부 실시예에 따른 멀티미디어 사용자 모드 드라이버 및 커널 모드 드라이버의 블록도이다.
도 12는 일부 실시예에 따른 가상화된 OS 생태계에서 멀티미디어 능력 공유를 지원하는 메시지 시퀀스의 제1 부분이다.
도 13은 일부 실시예에 따른 가상화된 OS 생태계에서 멀티미디어 능력 공유를 지원하는 메시지 시퀀스의 제2 부분이다.
그래픽 처리 장치(GPU)와 같은 처리 유닛은 다수의 가상 머신들이 GPU의 하드웨어 리소스를 사용할 수 있도록 하는 가상화(virtualization)를 지원한다. 각 가상 머신은 GPU의 하드웨어 리소스를 사용하는 별도의 프로세스로 실행된다. 일부 가상 머신들은 가상 머신이 실제 머신을 에뮬레이션(emulation)할 수 있도록 하는 운영 체제를 구현한다. 다른 가상 머신들은 플랫폼 독립적인 환경에서 코드를 실행하도록 설계된다. 하이퍼바이저(hypervisor)는 게스트 머신 또는 게스트라고도 하는 가상 머신들을 생성하고 실행한다. GPU에 구현된 가상 환경은 물리적 머신에 구현된 다른 가상 구성요소들에 가상 기능(virtual functions)을 제공한다. GPU에 구현된 단일 물리적 기능(physical function)은 하나 이상의 가상 기능들을 지원하는 데 사용된다. 물리적 기능은 시간 단위로(on a time-sliced basis) 물리적 머신의 다른 가상 머신들에 가상 기능을 할당한다. 예를 들어, 물리적 기능은 제1 시간 인터벌에서 제1 가상 머신에 제1 가상 기능을 할당하고, 제2, 후속 시간 인터벌에서 제2 가상 머신에 제2 가상 기능을 할당한다. 일부 경우에, GPU의 물리적 기능이 최대 31개의 가상 기능들을 지원하지만 다른 경우에는 더 많거나 더 적은 가상 기능들이 지원된다. 단일 루트 입력/출력 가상화(SR IOV) 사양을 통해 다수의 가상 머신들이, PCIe(peripheral component interconnect express) 버스와 같은, 단일 버스에 대한 GPU 인터페이스를 공유할 수 있다. 구성요소들은 버스를 통해 요청을 전송하여 가상 기능에 액세스한다.
예를 들어 GPU에서 실행되는 가상 머신에 의한 멀티미디어 컨텐츠의 처리는 하드웨어 가속 기능(accelerated functions)을 사용하여 가속화된다. 예를 들어, 하드웨어 가속 멀티미디어 컨텐츠 핸들링은 특정 OS 배포의 일부이거나 독립 소프트웨어 공급업체에 의해 제공되는 어플리케이션을 사용하여 달성할 수 있다. 하드웨어 가속을 사용하기 위해, 멀티미디어 어플리케이션은 오디오, 비디오 또는 멀티미디어 재생을 시작하기 전에 GPU의 하드웨어 가속 멀티미디어 기능을 쿼리(query)한다. 쿼리는 지원되는 코덱(코더-디코더), 최대 비디오 해상도 및 지원되는 최대 소스 레이트와 같은 정보에 대한 요청을 포함한다. 동일한 멀티미디어 어플리케이션의 서로 다른 인스턴스(instance)들을 실행하기 위해 별도의 프로세스들(예를 들어, 별도의 호스트 또는 게스트 가상 머신)이 사용되며 서로 다른 가상 머신들에 의해 실행되는 멀티미디어 어플리케이션의 다수의 인스턴스들은 서로를 인식하지 못한다. 일부 경우에, 사용자 모드 드라이버는 GPU에서 동시에 실행 중인 서로 다른 인스턴스들의 수를 인식하지 못한다. 사용자 모드 드라이버는 일반적으로 오직 하드웨어 기능의 단일 인스턴스(예를 들어, 코덱과 같은)를 열어 가상 머신과 같은 프로세스에 할당할 수 있도록 한다. 결과적으로, 예를 들어 제1 가상 머신에서 GPU 상에서 그래픽 처리를 개시하는 제1 어플리케이션에는 압축된 비디오 비트스트림 디코드를 디코딩하기 위해 고정 기능 하드웨어가 할당된다. 고정 기능 하드웨어는 제1 어플리케이션 실행과 동시에 후속 어플리케이션에 할당을 위해 이용될 수 없으며, 따라서 제2 가상 머신에서 실행되는 제2 어플리케이션은 중앙 처리 장치(CPU)와 같은 범용 어플리케이션 프로세서에서 실행되는 소프트웨어를 사용하여 디코딩(또는 인코딩)된다. 다른 가상 머신에서 실행되는 어플리케이션도 CPU의 리소스(코어 및 스레드)가 완전히 사용될 때까지 CPU에서 실행되는 소프트웨어를 사용하여 디코딩(또는 인코딩)된다. 이 시나리오는 전력 비효율적이며 더 높은 소스 해상도와 더 높은 리프레시 레이트가 필요할 때 종종 처리 시스템 속도를 저하시킨다.
도 1 내지 도 13은 하나의 프로세스를 제외한 모든 프로세스가 CPU에서 실행되는 소프트웨어가 제공하는 하드웨어 가속을 사용하도록 하는 대신 GPU의 고정 기능 하드웨어 블록들이 제공하는 하드웨어 기능을 여러 가상 머신들이 공유하는 것을 허용함으로써 처리 시스템의 전력 소비를 줄이면서, 멀티미디어 어플리케이션의 실행 속도를 향상시키는 기술의 실시예를 개시한다. 하드웨어 가속 기능은 고정 기능 하드웨어 블록에서 제공하는 물리적 기능으로 구현된다. 일부 실시예에서, 물리적 기능은 멀티미디어 데이터 스트림의 인코딩, 멀티미디어 데이터 스트림의 디코딩, 오디오 또는 비디오 데이터의 인코딩/디코딩, 또는 다른 동작을 수행한다. 물리적 기능에 대응하는 복수의 가상 기능은 GPU 상에서 실행되는 게스트 가상 머신(VM)에 노출된다. GPU는 레지스터들의 세트를 포함하고 레지스터들의 서브세트들은 다른 가상 기능들과 관련된 정보를 저장하기 위해 할당된다. 서브세트의 개수, 및 서브세트의 레지스터들의 수는 각 가상 기능이 사용하는 최대 공간의 양에 해당하는 정적 값 또는 각 가상 기능이 사용하는 최소 공간의 양에 해당하는 초기 값으로 설정되고, 이는 이후에 가상 기능의 속성에 따라 동적으로 수정된다. 일부 실시예에서, 레지스터들의 각각의 서브세트는 가상 기능에 의해 작동되는 프레임들을 저장하기 위한 프레임 버퍼, 가상 기능의 작동 상태를 정의하기 위한 컨텍스트 레지스터(context register)들, 예를 들어 GPU의 하나 이상의 컴퓨팅 유닛들을 사용하여 가상 기능이 GPU에 의해 실행되도록 스케줄링될 준비가 되었음을 알리는 도어벨(doorbell)을 포함한다.
하이퍼바이저는 레지스터에 대한 액세스를 한 번에 하나의 게스트 VM에 부여하거나 거부한다. 레지스터에 액세스할 수 있는 게스트 VM은 게스트 VM에 대한 레지스터들의 서브세트의 프레임 버퍼에 저장된 프레임들에 대해 그래픽 렌더링을 수행한다. GPU 상의 고정 기능 하드웨어 블록은 게스트 VM에 대한 레지스터들의 서브세트의 컨텍스트 레지스터들에 저장된 정보를 기반으로 게스트 VM에 대한 가상 기능을 실행하도록 구성된다. 일부 실시예에서, 고정 기능 하드웨어 블록의 구성은 가상 기능을 구현하기 위해 사용되는 멀티미디어 기능의 펌웨어 이미지 및 사용자 모드 드라이버를 설치하는 것을 포함한다. 게스트 VM은 서브세트의 도어벨 레지스터들에 정보를 기록하여 실행을 스케줄링할 준비가 되었음을 알린다. GPU의 스케줄러는 게스트 VM이 스케줄링된 시간에 가상 기능을 실행하도록 스케줄링한다. 일부 실시예에서, 게스트 VM은 게스트 VM과 연관된 우선순위(priority) 및 스케줄링될 준비가 된 다른 게스트 VM과 연관된 다른 우선순위에 기초하여 스케줄링된다. 이전에 실행 중인 게스트 VM에 대해 정의된 컨텍스트에서 예를 들어 현재 게스트 VM에 대한 레지스터들의 서브세트의 컨텍스트 레지스터들에 정의되어 있는 바와 같은 현재 게스트 VM에 대한 컨텍스트로 컨텍스트를 스위칭하기 위해 스케줄링된 시간에 월드 스위치(world switch)가 수행된다. 일부 실시예에서, 월드 스위치는 GPU 상에서 가상 기능을 구현하는데 사용되는 멀티미디어 기능의 펌웨어 이미지 및 사용자 모드 드라이버를 설치하는 것을 포함한다. 월드 스위치가 완료된 후, 현재 게스트 VM은 가상 기능을 실행하여 프레임 버퍼 레지스터들의 프레임들에서 하드웨어 가속 동작을 수행하기 시작한다. 본원에서 논의된 바와 같이, 하드웨어 가속 동작의 예시는 멀티미디어 디코딩, 멀티미디어 인코딩, 비디오 디코딩, 비디오 인코딩, 오디오 디코딩, 오디오 인코딩 등을 포함한다. 스케줄러는 시간 인터벌 동안 게스트 VM을 스케줄링하고 게스트 VM은 시간 인터벌 동안 가상 기능 및 레지스터들의 서브세트에 대한 독점적인 액세스를 갖는다. 시간 인터벌 동안 실행이 완료되는 것에 응답하여, 게스트 VM은 하이퍼바이저에 다른 게스트 VM에 대해 다른 가상 기능이 로딩될 수 있고 게스트 VM에 대한 도어벨이 지워짐(cleared)을 알린다.
도 1은 일부 실시예에 따라 가상화된 환경에서 물리적 기능의 공유를 구현하는 그래픽 처리 장치(GPU)(105)를 포함하는 처리 시스템(100)의 블록도이다. GPU(105)는 명령어들을 동시에 또는 병렬로 독립적으로 실행하는 하나 이상의 GPU 코어들(106) 및 3D 그래픽 또는 비디오 렌더링을 지원하는 하나 이상의 셰이더 시스템들(107)을 포함한다. 예를 들어, 셰이더 시스템(107)은 초당 그래픽 렌더링 프레임 스코어를 높이거나 그래픽 엔진이 장면(scene)을 정확하게 렌더링하지 못한 렌더링된 이미지의 영역을 패칭(patching)함으로써 시각적 표현을 개선하는 데 사용될 수 있다. 메모리 제어기(108)는 렌더링 프로세스 동안 프레임들을 저장하는 프레임 버퍼(109)에 대한 인터페이스를 제공한다. 프레임 버퍼(109)의 일부 실시예는 동적 랜덤 액세스 메모리(DRAM)로서 구현된다. 그러나, 프레임 버퍼(109)는 또한 정적 랜덤 액세스 메모리(SRAM), 비휘발성 RAM 등을 포함하는 다른 유형의 메모리를 사용하여 구현될 수 있다. GPU(105)의 일부 실시예는 인코더 포맷 변환기, 멀티포맷 비디오 코덱, 디스플레이 또는 스크린에 인터페이스를 제공하는 디스플레이 출력 회로, 및 오디오 코프로세서, 오디오 신호를 인코딩/디코딩하기 위한 오디오 코덱 등과 같은 다른 회로를 포함한다.
처리 시스템(100)은 또한 명령어를 실행하기 위한 중앙 처리 장치(CPU)(115)를 포함한다. CPU(115)의 일부 실시예는 명령어들을 동시에 또는 병렬로 독립적으로 실행할 수 있는 다중 프로세서 코어들(120, 121, 122)(본원에서 "CPU 코어들(120-122)"로 총칭함)을 포함한다. 일부 실시예에서, GPU(105)는 버스(125)(PCI-e 버스와 같은) 및 노스브리지(northbridge)(130)를 통해 CPU(115)에 연결된 개별 GPU(dGPU)로서 동작한다. CPU(115)는 또한 CPU(115)와 메모리(140) 사이의 인터페이스를 제공하는 메모리 제어기(108)를 포함한다. 메모리(140)의 일부 실시예는 DRAM, SRAM, 비휘발성 RAM 등으로 구현된다. CPU(115)는 메모리(140)에 저장된 프로그램 코드(145)와 같은 명령어를 실행하고, CPU(115)는 실행된 명령어의 결과와 같은 정보(150)를 메모리(140)에 저장한다. CPU(115)는 또한 GPU(105)에 대한 드로우 콜을 발행함으로써 그래픽 처리를 개시할 수 있다. 드로우 콜은 CPU(115)에 의해 생성되고 GPU(105)가 프레임에서 오브젝트(또는 오브젝트의 일부)를 렌더링하도록 지시하기 위해 GPU(105)에 전송되는 커맨드이다.
사우스브리지(southbridge)(155)는 노스브리지(130)에 연결된다. 사우스브리지(155)는 처리 시스템(100)과 연관된 주변 유닛들에 하나 이상의 인터페이스들(160)을 제공한다. 인터페이스(160)의 일부 실시예는, 범용 직렬 버스(USB) 디바이스, 범용 I/O(GPIO), 하드 디스크 드라이브용 SATA, SPI, I2C 등과 같은 직렬 주변 버스 인터페이스와 같은, 주변 유닛에 대한 인터페이스를 포함한다.
GPU(105)는 어드레스 변환 제어기(GPU MMU ATC)(165)를 갖는 GPU 가상 메모리 관리 유닛을 포함하고 CPU(115)는 CPU MMU ATC(170)를 포함한다. GPU MMU ATC(165) 및 CPU MMU ATC(170)은 가상 메모리 어드레스(VA)를 멀리레벨 변환 로직과 운영 체제 커널 모드 드라이버(KMD)에 의해 유지 관리되는 변환 테이블 세트를 사용함으로써 물리적 메모리 어드레스(PA)로 변환한다. 따라서, 메인 OS 또는 게스트 OS에서 실행되는 어플리케이션 프로세스들은 각각 CPU 동작 및 GPU 렌더링을 위한 그의 고유한 가상 어드레스 공간을 갖는다. 따라서 GPU MMU ATC(165) 및 CPU MMU ATC(170)는 GPU 및 CPU 코어들의 가상화를 지원한다. GPU(105)는 프로세스별 GPU 가상 어드레스를 물리적 어드레스로 변환하는 자체 메모리 관리 유닛(MMU)을 갖는다. 각 프로세스는 고유한 페이지 테이블들을 사용하는 별도의 CPU 및 GPU 가상 어드레스 공간들을 갖는다. 비디오 메모리 관리자는 모든 프로세스들의 GPU 가상 어드레스 공간을 관리하고 할당, 확장, 업데이트, 메모리 페이지의 상주 보장 및 페이지 테이블 해제(freeing)를 감독한다.
GPU(105)의 일부 실시예는 CPU(115)와 어드레스 공간 및 페이지 테이블/페이지 디렉토리를 공유하고 따라서 시스템 가상 메모리 모드(IOMMu)에서 동작할 수 있다. GPU MMU 모델에서, OS 커널의 비디오 메모리 관리자(VidMM)는 GPU 가상 어드레스 매핑을 위해 사용자 모드 드라이버(UMD)에 디바이스 드라이버 인터페이스(DDI) 서비스를 노출하면서 GPU MMU ATC(165) 및 페이지 테이블들을 관리한다. IOMMU 모델에서, GPU(105)와 CPU(115)는 공통 어드레스 공간, 공통 페이지 디렉토리 및 페이지 테이블을 공유한다. 이 모델을 (전체) 시스템 가상 메모리(SVM)라고 한다. APU 하드웨어 지원의 일부 실시예:
·
GPU 메모리 및 CPU 시스템 메모리에 대한 GPU(105) 액세스를 위한 제1 MMU 유닛.
·
CPU 메모리 및 GPU 시스템 메모리에 대한 CPU(115) 액세스를 위한 제2 MMU 유닛.
유사하게, 일부 실시예에서, 개별 GPU HW는 자체 GPU MMU ATC(165)를 갖고 개별 CPU 멀티코어 시스템은 ATC(170)와 함께 자체 CPU MMU를 갖는다. ATC가 있는 MMU 유닛들은 각각의 그리고 모든 가상 머신/게스트 OS에 대해 CPU 및 GPU 액세스를 위한 별도의 페이지 테이블들을 유지 관리하므로 각 게스트 OS에는 고유한 시스템 및 그래픽 메모리 세트가 있다.
처리 시스템(100)의 일부 실시예는 사용자 모드로부터 GPU(105)에 직접 제출되는 디코딩, 인코딩, 컴퓨팅 및/또는 렌더링 작업을 수행하기 위해 데스크탑 윈도우 관리자(DWM)를 구현한다. GPU(105)는 작업의 다양한 사용자 모드 대기열(queue)들을 노출 및 관리하여, GPU 엔진에 제출하기 전에 비디오 메모리 관리자(VidMM)가 모든 커맨드 버퍼를 검사하고 패치할 필요가 없다. 긍정적인 결과로, 패킷 기반 스케줄링은 배치 기반(batch-based)이 될 수 있어(단위 시간에 대기열 시스템을 통해 더 많은 백투백 작업이 제출될 수 있음) 중앙 처리 장치(CPU)가 최소한의 전력을 소비하면서 저전력 수준에서 작동할 수 있다. GPU 및 ATC(165) 및 CPU MMU ATC(170)의 일부 실시예를 구현하는 다른 이점은 가상 메모리 할당들을 분산시키는 능력을 포함하며, 이는 비연속 GPU 또는 CPU 메모리 공간에서 단편화될 수 있다. 또한 CPU 메모리 어드레스 패치가 필요하지 않으며 할당 및 패치 위치 리스트를 통해 GPU 커맨드 버퍼 내부의 메모리 참조를 추적할 필요가 없으며, GPU 엔진에 제출하기 전에 올바른 물리적 메모리 기준으로 해당 버퍼를 패치할 필요가 없다.
GPU(105)는 또한 물리적 기능을 구현하는 하나 이상의 고정 기능 하드웨어 블록들(175)을 포함한다. 일부 실시예에서, 고정 기능 하드웨어 블록(175)에서 구현되는 물리적 기능은 멀티미디어 디코딩, 멀티미디어 인코딩, 비디오 디코딩, 비디오 인코딩, 오디오 디코딩 및 오디오 인코딩과 같은 하드웨어 가속 기능이다. 메모리(140)에 구현되는 가상 환경은 물리적 기능과 게스트 VM들에 노출되는 가상 기능들의 세트를 지원한다. GPU(105)는 커널 모드 유닛들에 의해 수행되는 처리와 연관된 정보를 저장하는 레지스터 세트(명확성을 위해 도 1에는 표시되지 않음)를 더 포함한다. 레지스터 세트의 서브세트들은 가상 기능과 관련된 정보를 저장하기 위해 할당된다. 고정 기능 하드웨어 블록(175)은, 본원에서 상세히 논의되는 바와 같이, 서브세트들 중 대응하는 하나에 저장된 정보에 기초하여 게스트 VM들 중 하나에 대한 가상 기능들 중 하나를 실행한다.
도 2는 일부 실시예에 따른 단일 반도체 다이 상에 CPU 및 GPU를 통합하는 시스템 온 칩(SOC)(200)의 블록도이다. SOC(200)는 본원에서 논의되는 바와 같이 가상화된 환경에서 물리적 기능들의 공유를 구현하는 멀티코어 처리 유닛(205)을 포함한다. 멀티코어 처리 유닛(205)은 명령어들을 동시에 또는 병렬로 독립적으로 실행하는 하나 이상의 CPU 코어들로 형성된 CPU 코어 컴플렉스(208)를 포함한다. 명확성을 위해, 개별 CPU 코어들은 도 2에 표시되지 않았다.
멀티코어 처리 유닛(205)은 또한 멀티미디어 데이터, 비디오 데이터, 오디오 데이터, 및 이들의 조합과 같은 데이터를 인코딩 및 디코딩하기 위한 회로를 포함한다. 일부 실시예에서, 인코딩/디코딩(코덱) 회로는 전용 비디오 감소 명령어 세트 컴퓨팅 프로세서(RISC)에 의해 제어되는 비디오 코덱 넥스트(VCN)(210)를 포함한다. 다른 실시예에서, 코덱 회로는 전용 RISC 프로세서에 의해 제어되는, VCN(210)을 구현하는 데 사용되는 RISC 프로세서와 같거나 다를 수 있는, 고정 하드웨어 IP로서 구현되는 범용 비디오 디코더(UVD)/비디오 압축 엔진(VCE)(215)을 포함하고, VCN(210) 및 UVD/VCE(215)는 인코딩/디코딩 회로의 대안적인 구현이고, 그리고 멀티코어 처리 유닛(205)의 예시된 실시예는 VCN(210)을 사용하여 구현되고 UVD/VCE(215)를 나타내는 점선 박스로 표시된 바와 같이 UVD/VCE(215)를 포함하지 않는다. 펌웨어는 VCN(210) 및 UVD/VCE(215)를 구성하는 데 사용된다. 아래에서 자세히 설명되는 바와 같이 게스트 VM들 사이의 월드 스위치를 용이하게 하기 위해 다른 게스트 VM들과 연결된 다른 펌웨어 구성들은 게스트 VM들과 연관된 레지스터들의 서브세트에 저장된다.
멀티코어 처리 유닛(205)은 또한 멀티코어 처리 유닛(205) 사이의 인터페이스 그리고 주변 디바이스들에 대한 인터페이스를 제공하는데 사용되는 사우스브리지와 같은 브리지(220)를 포함한다. 일부 실시예에서, 브리지(220)는 멀티코어 처리 유닛(205)을 하나 이상의 PCIe 인터페이스들(225), 하나 이상의 범용 직렬 버스(USB) 인터페이스들(230), 및 하나 이상의 SATA(serial AT attachment) 인터페이스들(235)에 연결한다. 슬롯들(240, 241, 242, 243)은 멀티코어 처리 유닛(205)에 대한 정보를 저장하는 DDR(Double Data Rate) 메모리 집적 회로와 같은 메모리 요소들을 부착하기 위해 제공된다.
도 3은 일부 실시예에 따른 GPU 상에서 멀티미디어 가상화를 지원하는 하드웨어 아키텍처(300)의 제1 실시예의 블록도이다. 하드웨어 아키텍처(300)는 명령어들을 동시에 또는 병렬로 실행하기 위한 컴퓨팅 유닛(또는 다른 프로세서)을 포함하는 그래픽 코어(302)를 포함한다. 일부 실시예에서, 그래픽 코어(302)는 가상 메모리 관리를 위한 통합 어드레스 변환 로직을 포함한다. 그래픽 코어(302)는 조정된 CPU/GPU 그래픽 처리를 위해 시스템 메모리의 컨텐츠에 액세스하거나 로컬 메모리를 사용하여 성능 렌더링과 같은 렌더링 동작을 수행하기 위해 플랙서블 데이터 라우팅(flexible data routing)을 사용한다.
하드웨어 아키텍처(300)는 또한 하나 이상의 인터페이스들(304)을 포함한다. 인터페이스(304)의 일부 실시예는 전압 조정기, 핀스트라이프(pinstripe), 플래시 메모리, 임베디드 제어기, 사우스브리지, 팬 제어 등과 같은 플랫폼 구성요소들에 대한 플랫폼 구성요소 인터페이스를 포함한다. 인터페이스(304)의 일부 실시예는 JTAG(Joint Test Action Group) 인터페이스, 경계 스캔 진단(BSD) 스캔 인터페이스, 및 디버그(debug) 인터페이스에 대한 인터페이스를 포함한다. 인터페이스(304)의 일부 실시예는 하나 이상의 외부 디스플레이 패널들에 대한 디스플레이 인터페이스를 포함한다. 하드웨어 아키텍처(300)는 하드웨어 아키텍처(300)에 대한 열적 및 전력 상태를 관리하는 시스템 관리 유닛(306)을 더 포함한다.
상호연결 네트워크(308)는 그래픽 코어(302), 인터페이스(304), 시스템 관리 유닛(306), 및 상호연결 네트워크(308)에 부착된 다른 엔티티들과의 통신을 용이하게 하기 위해 사용된다. 상호연결 네트워크(308)의 일부 실시예는 초기화, 펌웨어 로딩, 런타임 제어 등을 위해 고정 하드웨어의 명령어 메모리 및 로컬 데이터에 대한 액세스 및 레지스터 액세스를 제공하는 시스템 관리 네트워크 또는 확장 가능한 제어 패브릭(scalable control fabric)으로서 구현된다. 상호연결 네트워크(308)는 또한 비디오 압축 엔진(VCE)(312), 범용 비디오 디코더(UVD)(314), 오디오 코프로세서(316), 및 디스플레이 출력(318), 및 직접 메모리 액세스, 하드웨어 세마포어 로직, 디스플레이 제어기 등과 같은, 명확성을 위해 도 3에는 표시되지 않은, 다른 엔티티들에 연결된다.
VCE(312)의 일부 실시예는 로컬 비디오-RISC에서 실행되는 펌웨어를 사용하여 제어되는 압축 비트스트림 비디오 인코더로 구현된다. VCE(312)는 멀티-포맷이 가능하며, 예를 들어 VCE(312)는 H.264, H.265, AV1, 및 다양한 프로파일들 및 레벨들을 사용하는 기타 인코딩 또는 압축 포맷을 인코딩한다. VCE(312)는 제공된 YUV 표면 또는 색 공간 전환(color space conversion)이 있는 RGB 표면으로부터 인코딩한다. 일부 실시예에서, 색 공간 변환 및 비디오 스케일링은 픽셀 셰이더 또는 컴퓨팅 셰이더를 실행하는 GPU 코어에서 실행된다. 일부 실시예에서, 색 공간 전환 및 비디오 스케일링은 고정 기능 하드웨어 비디오 전처리 블록(명확성을 위해 도 3에 도시되지 않음)에서 수행된다.
UVD(314)의 일부 실시예는 로컬 비디오-RISC에서 실행되는 펌웨어로부터 제어되는 압축 비트스트림 비디오 디코더로 구현된다. UVD(314)는 멀티-포맷이 가능하며, 예를 들어 UVD(314)는 레거시(legacy) MPEG-2, MPEG-3 및 VC1 비트스트림과 다양한 프로파일들, 레벨들 및 비트 깊이들에서 최신 H.264, H.265, VP9 및 AV1 포멧들을 디코딩한다.
오디오 코프로세서(316)의 일부 실시예는 로컬 및 글로벌 오디오 캡처 및 렌더링으로 호스트 오디오 오프로드(host audio offload)를 수행한다. 예를 들어, 오디오 코프로세서(316)는 오디오 포맷 전환, 샘플 레이트 전환, 오디오 이퀄라이제이션, 볼륨 제어 및 믹싱을 수행할 수 있다. 오디오 코프로세서(316)는 또한 오디오 화상 회의 및 키워드 감지, 음향 에코 제거, 노이즈 억제, 마이크 빔포밍 등과 같은 음성으로 제어되는 컴퓨터를 위한 알고리즘을 구현할 수 있다.
하드웨어 아키텍처(300)는 개별 고정 기능 하드웨어 블록들을 제어하기 위한 허브(320)를 포함한다. 허브(320)의 일부 실시예는 가상 어드레스에서 물리적 어드레스로의 어드레스 변환을 수행하는 데 사용되는 로컬 GPU 가상 메모리 어드레스 변환 캐시(ATC)(322)를 포함한다. 로컬 GPU 가상 메모리 ATC(322)는 CPU 레지스터 액세스 및 로컬 프레임 버퍼(324) 또는 시스템 메모리에 저장된 버퍼 어레이로의 또는 그로부터의 데이터 전달을 지원한다.
멀티레벨 ATC(326)는 어드레스 변환의 수행을 지원하기 위해 가상 어드레스를 물리적 어드레스로 변환하는 것을 저장한다. 일부 실시예에서, 어드레스 변환은 로컬 프레임 버퍼(324) 및 시스템 메모리(328)에 대한 액세스를 용이하게 하는 데 사용된다.
도 4는 일부 실시예에 따른 GPU 상의 멀티미디어 가상화를 지원하는 하드웨어 아키텍처(400)의 제2 실시예의 블록도이다. 하드웨어 아키텍처(400)는 도 3에 도시된 하드웨어 아키텍처(300)의 제1 실시예와 동일한 요소들 중 일부를 포함한다. 예를 들어, 하드웨어 아키텍처(400)는 그래픽 코어(302), 인터페이스(304), 시스템 관리 유닛(306), 상호연결 네트워크(308), 오디오 코프로세서(316), 디스플레이 출력(318), 및 시스템 메모리(328)를 포함한다. 이들 엔티티들은 도 3에 도시된 하드웨어 아키텍처(300)의 대응하는 엔티티들과 동일하거나 유사한 방식으로 동작한다.
하드웨어 아키텍처(400)의 제2 실시예는 CPU 코어 컴플렉스(405), VCN 엔진(410), 이미지 신호 프로세서(ISP)(415) 및 멀티미디어 허브(420)를 포함함으로써 도 3에 도시된 하드웨어 아키텍처(300)의 제1 실시예와 상이하다.
CPU 코어 컴플렉스(405)의 일부 실시예는 시스템 메모리(328)에 대한 액세스를 갖는 멀티레벨 캐시를 갖는 멀티코어 CPU 시스템으로서 구현된다. CPU 코어 콤플렉스(405)는 또한 초기화, 설정, 상태 서비스, 인터럽트 처리 등을 수행하기 위한 기능 블록들(명확성을 위해 도 4에는 표시되지 않음)을 포함한다.
VCN 엔진(410)의 일부 실시예는 통합 압축 비디오 디코더 및 비디오 인코더를 포함하는 멀티미디어 비디오 서브시스템을 포함한다. VCN 엔진(410)은 우선순위 기반 디코딩 및 인코더 스케줄링을 수행하기 위해 펌웨어를 사용하여 구성되는 비디오 RISC 프로세서로서 구현된다. 펌웨어 스케줄러는 하드웨어 지원 대기열 세트를 사용하여 디코딩 및 인코딩 작업을 커널 모드 드라이버에 제출한다. 예를 들어, VCN 엔진(410)에서 실행되는 펌웨어는 정상 우선순위 큐에서 실행되는 디코딩 큐와 정상, 실시간 및 시간 임계 우선순위 레벨에서 실행되는 인코딩 큐들을 사용한다. VCN 엔진(410)의 다른 부분은 다음을 포함한다:
a.
하드웨어 가속 역 엔트로피, 역 변환, 모션 예측기, 디-블로커(De-blocker) 디코딩 처리 단계 및 설정 및 제어를 위한 레지스터 인터페이스를 위한 고정 하드웨어 IP 블록들이 있는 레거시 MPEG-2, MPEG-4 및 VC-1 디코더.
b.
하드웨어 가속 역 엔트로피, 정수 움직임 추정, 엔트로피 코딩, 역변환 및 보간, 모션 예측 및 보간 및 설정 및 제어를 위한 레지스터 인터페이스로 디블록킹 인코딩 및 디코딩 처리 단계, 고정 하드웨어 IP 블록의 하드웨어 상태 컨텍스트 관리 및 로컬로 연결된 메모리와 압축된 비트 스트림의 전송을 지원하는 메모리 인터페이스가 있는 메모리 데이터 관리자 및 전용 메모리 제어기 인터페이스가 있는 그래픽 메모리 용 고정 하드웨어 IP 블록들을 갖는 H.264, H.265 및 VP9 인코더 및 디코더 서브시스템.
c.
비디오 RISC 프로세서 제어에 따라 고정된 하드웨어 기능으로 구현된 JPEG 디코더 및 JPEG 인코더.
d.
JPEG 디코딩/인코딩, 비디오 코덱 및 비디오 RISC 프로세서용 레지스터 세트.
e.
하드웨어에서 지원하는 기록 전송 및 비디오 RISC 프로세서에서 지원하는 판독 전송이 있는 일련의 순환 버퍼(circular buffer)들이 있는 링 버퍼 제어기. 순환 버퍼는 JPEG 디코딩, 비디오 디코딩, 범용 인코딩(트랜스코딩 사용 케이스에 대해), 실시간 인코딩(화상 회의 사용 케이스에 대해) 및 무선 디스플레이 용 시간 임계 인코딩을 지원한다.
ISP(415)의 일부 실시예는 모바일 산업 프로세서 인터페이스(MIPI) 연합 카메라 인터페이스(CSI-2)와 같은 인터페이스를 통해 센서들로부터 개별 프레임들 또는 비디오 시퀀스들을 캡처한다. 따라서, ISP(415)는 입력 비디오 또는 입력 정지 사진들을 제공한다. ISP(415)는 획득된 YCbCr 표면들에 대해 이미지 획득, 처리 및 스케일링을 수행한다. ISP(415)의 일부 실시예는 다중 카메라를 지원하여 MIPI 인터페이스를 통해 연결된 카메라들을 단일 내부 파이프라인으로 스위칭하여 이미지 처리를 동시에 수행한다. 일부 경우에는, ISP(415)의 기능이 그래픽 컴퓨팅 엔진에 의해 처리되는 RGB 또는 YCbCr 이미지 표면에 대해 바이패스된다. ISP(415)의 일부 실시예는, 디모자이크(de-mosaic), 노이즈 감소, 크기 조정 및 내부 직접 메모리 액세스(DMA) 엔진을 사용하여 획득한 이미지/비디오를 메모리로 또는 그로부터 전달하는 것과 같은, 이미지 처리 기능을 구현한다.
멀티미디어 허브(420)는 USB, SATA, 범용 I/O(GPIO), 실시간 클록, SMBUS 인터페이스, 외부 구성 가능한 플래시 메모리 등에 액세스하기 위한 직렬 I2C 인터페이스와 같은 주변 입력/출력(I/O) 디바이스에 액세스하기 위한 I/O 허브(430)와 같은 인터페이스 및 시스템 메모리(328)에 대한 액세스를 지원한다. 멀티미디어 허브(420)의 일부 실시예는 가상 어드레스에서 물리적 어드레스로의 어드레스 변환을 수행하는 데 사용되는 로컬 GPU 가상 메모리 ATC(425)를 포함한다. 로컬 GPU 가상 메모리 ATC(425)는 CPU 레지스터 액세스 및 로컬 프레임 버퍼 또는 시스템 메모리(322)에 저장된 버퍼 어레이로 또는 그로부터의 데이터 전달을 지원한다.
도 5는 일부 실시예에 따른 가상화된 OS 생태계(ecosystem)에서 멀티미디어 처리를 지원하는 데 사용되는 운영 체제(OS)(500)의 블록도이다. OS(500)는 도 3에 도시된 하드웨어 아키텍처(300)의 제1 실시예 및 도 4에 도시된 하드웨어 아키텍처(400)의 제2 실시예에서 구현된다.
OS(500)는 사용자 모드(505), 커널 모드(510) 및 하이퍼바이저(HV) 컨텍스트에서 커널 모드에 대한 부분(515)으로 구분된다. 사용자 모드 스레드(thread)가 개인 프로세스 어드레스 공간을 실행하고 있다. 사용자 모드 스레드의 예시는 시스템 프로세스(520), 서비스 프로세스(521), 사용자 프로세스(522) 및 환경 서브시스템(523)을 포함한다. 시스템 프로세스(520), 서비스 프로세스(521), 사용자 프로세스(522)는 서브시스템 동적 링크 라이브러리(DLL)(525)와 통신한다. 프로세스가 실행되면, 이는 다양한 상태(시작, 준비, 실행, 대기, 종료 또는 종단)를 거친다. OS 프로세스는 OS(500)를 초기화하고 실행하기 위해 시스템에서 구현되는 기본 작업 유닛을 나타내는 엔티티(entity)로 정의된다. 운영 체제 서비스 프로세스는 프로세서, 메모리, 파일, 입력 및 출력을 포함한 플랫폼 리소스 관리를 담당한다. OS 프로세스는 일반적으로 컴퓨터 시스템의 구현 세부 사항에서 어플리케이션을 보호한다. 운영 체제 서비스 프로세스는 다음과 같이 실행된다:
·
프로세스 및 실행 스레드 생성 및 관리, 프로그램을 실행, 비동기 이벤트 정의 및 통신, 시스템 클록 작업을 정의하고 처리, 보안 기능 구현, 파일과 디렉토리 관리, 주변 장치와의 입력/출력 처리를 제어하는 커널 서비스
·
파일 내용을 비교, 인쇄 및 표시, 파일 편집, 패턴 검색, 표현 평가, 이벤트 및 메시지 기록, 디렉토리 간 파일 이동, 데이터 정렬, 커맨드 스크립트 실행, 프린터 제어 및 환경 정보에 액세스하기 위한 유틸리티 서비스.
·
작업(업무)를 대기열에 넣고 작업 제어 커맨드 및 데이터 명령어 리스트를 기반으로 처리 순서를 관리하는 배치 처리 서비스.
·
파일들 및 디렉터리들의 로컬 및 원격 사본들을 관리를 위한 파일 및 디렉터리 동기화 서비스.
사용자 프로세스는 사용자 정의 프로그램을 운영하고 사용자 코드를 실행한다. OS 환경 또는 통합 어플리케이션 환경은 사용자가 응용 소프트웨어를 운영하는 환경이다. OS 환경은 OS와 어플리케이션 사이에 있으며, 어플리케이션 관리자가 제공하는 사용자 인터페이스와 OS와 어플리케이션 사이의 어플리케이션 관리자에 대한 어플리케이션 프로그래밍 인터페이스(API)로 구성된다. OS 환경 변수(environment variable)는 운영 체제 및 기타 소프트웨어가 컴퓨터 상의 위치, 파일 버전 번호, 파일 또는 디바이스 오브젝트 목록 등과 같은 특정 정보를 결정하는 데 사용하는 동적 값이다. 환경 변수의 두 가지 유형은 사용자 환경 변수(사용자 프로그램 또는 사용자 공급 디바이스 드라이버에 특정한)와 시스템 환경 변수이다. NTDLL.DLL 계층(530)은 Win32 또는 다른 API 서브시스템의 지원 없이 운영되는 운영 체제의 사용자 모드 구성요소에 의해 사용되는 윈도우즈(Windows) 네이티브(Native) API 인터페이스를 내보낸다.
사용자 모드(505)와 커널 모드(510) 사이의 분리는 오류 또는 악의적인 사용자 모드 코드로부터 OS 보호를 제공한다. 커널 모드(510)는 윈도우 및 그래픽 블록(535), 실행 기능(540), 하나 이상의 디바이스 드라이버들(545), 하나 이상의 커널 모드 드라이버들(550), 및 하드웨어 추상화 계층(abstraction layer)(555)을 포함한다. 두 번째 분리 라인은 커널 모드(510)의 커널 모드 드라이버(550)를 커널과 동일한 권한 레벨(privilege level)(레벨 0)로 실행하지만 커널 및 어플리케이션을 모니터링하는 동안 커널로부터 자신을 격리하기 위해 특수 CPU 명령어를 사용하는 OS 하이퍼바이저(560)를 분리한다. 이는 링 -1에서 실행되는 하이퍼바이저라고 한다.
도 6은 일부 실시예에 따른 가상화 지원을 갖는 운영 체제(OS) 아키텍처(600)의 블록도이다. OS 아키텍처(600)는 도 5에 도시된 OS(500)의 일부 실시예에서 구현된다. OS 아키텍처(600)는 NTDLL 계층(610)(도 5와 관련하여 위에서 논의됨)을 포함하는 사용자 모드(605) 및 커널 모드(615)로 분할된다. OS 아키텍처(600)의 일부 실시예는 커널 로컬 프로세스 간 통신 또는 로컬 절차 호출(Procedure Call) 또는 라이트웨이트(Lightweight) 절차 호출(LPC)를 구현하고, 이는 동일한 컴퓨터의 프로세스들 간 라이트웨이트 IPC를 위해 커널에 구현된 내부 프로세스 간 통신(IPC) 설비이다. 일부 경우에, LPC는 사용자 모드 드라이버 프레임워크(UMDF)의 구현을 위한 확장 가능한 고속 통신 메커니즘을 사용하는 비동기 로컬 프로세스 간 통신으로 대체되며, 이의 사용자 모드 부분에는 커널의 UMDF 구성요소와 효율적인 통신 채널이 필요하다.
커널 모드(615)의 프레임워크는 CPU, BIOS/ACPI, 버스, I/O 디바이스, 인터럽트, 타이머, 메모리 캐시 제어 등과 같은 디바이스 하드웨어(625)와 상호 작용하는 하나 이상의 시스템 스레드들(620)을 포함한다. 시스템 서비스 디스패처(630)는 사용자 모드(605)의 NTDLL 계층(610)과 상호작용한다. 프레임워크는 또한 하나 이상의 호출 가능한 인터페이스들(635)을 포함한다.
커널 모드(615)는 캐시들, 모니터들 및 관리자들(640)을 구현하는 기능을 더 포함합니다. 캐시들, 모니터들 및 관리자들(640)의 예는 다음을 포함한다:
·
"INI"(초기화) 파일에 구성 값을 저장하고 영구 레지스트리를 관리하는 커널 구성 관리자.
·
OS 리소스(파일, 디바이스, 스레드, 프로세스, 이벤트, 뮤텍스(mutex), 세마포어, 레지스트리 키, 작업, 섹션, 액세스 토큰 및 기호 링크)의 수명을 관리하는 커널 오브젝트 관리자.
·
프로세스의 모든 스레드들의 실행을 다루는 커널 프로세스 관리자.
·
가상 메모리를 할당하고 해제, 프로세스 간에 메모리 공유, 파일을 메모리에 매핑, 디스크에 가상 페이지를 플러시, 가상 페이지 범위에 대한 정보 검색, 가상 페이지의 보호 수준을 변경, 그리고 가상 페이지를 메모리에 잠금/잠금 해제하는 일련의 시스템 서비스를 제공하는 커널 메모리 관리자. 사용자 모드(605)에서 이러한 서비스의 대부분은 가상 메모리 할당 및 할당 해제, 힙 API, 로컬 및 글로벌 API를 위한 API로, 그리고 파일을 메모리로 매핑하고 프로세스 간에 메모리 핸들을 공유하기 위해 메모리 매핑된 파일을 조작하기 위한 API들로 노출된다.
·
실행 중인 컴퓨터 시스템에 디바이스가 추가되거나 제거될 때를 인식하고 장치 검출 및 열거를 제공하는 커널 플러그 앤 플레이(PnP) 관리자. 그의 수명 주기 동안, PnP 관리자는 시스템의 디바이스들을 추적하는 디바이스 트리(Device Tree)를 유지 관리한다.
·
전원 상태 변경을 지원하는 모든 디바이스들의 전원 상태 변경을 관리하는 커널 전원 관리자. 전원 관리자는 전원 정책 관리에 의존하여 전원 관리를 다루고 전원 이벤트를 조정한 다음 전원 관리 이벤트 기반 절차 호출을 생성한다. 전원 관리자는 전원 상태 변경 요청을 수집하고, 디바이스의 전원 상태를 변경해야 하는 순서를 결정한 다음, 적절한 요청을 전송하여 적절한 드라이버에 변경을 지시한다. 정책 관리자는 시스템의 활동을 모니터링하고 사용자 상태, 어플리케이션 상태 및 디바이스 드라이버 상태를 전원 정책에 통합한다.
·
액세스 제어 목록(ACL)으로 정의된 커널 액세스 제어와 함께 작동하는 디바이스 드라이버의 루틴을 제공하는 커널 보안 참조 모니터. 이는 디바이스 드라이버의 요청이 시스템 보안 정책을 위반하지 않는지 확인한다.
커널 모드(615)는 또한 장치 드라이버에 의해 제공되는 인터페이스들과 어플리케이션들 사이의 통신을 관리하는 커널 I/O 관리자(645)를 포함한다. 운영 체제와 디바이스 드라이버 간의 통신은 운영 체제에서 특정 드라이버로, 한 드라이버에서 다른 드라이버로 전달되는 I/O 요청 패킷(IRP)을 통해 수행된다. 커널 I/O 관리자(645)의 일부 실시예는 파일 시스템 드라이버 및 디바이스 드라이버(650)를 구현한다. 커널 파일 시스템 드라이버는 하나 이상의 파일 시스템들 또는 파일 시스템 체적들에 대한 I/O 동작들(생성, 판독, 기록, 이름 바꾸기(rename) 등)을 필터링하여 파일 시스템의 디폴트 동작을 수정한다. 커널 디바이스 드라이버는 어플리케이션에서 데이터를 수신하고, 데이터를 필터링하고, 이를 디바이스 기능을 지원하는 로우 레벨 드라이버에 전달한다. 커널 모드 드라이버의 일부 실시예는 윈도우즈 드라이버 모델(WDM)을 따른다. 커널 디바이스 드라이버는 하드웨어 디바이스에 대한 소프트웨어 인터페이스를 제공하여, 운영 체제 및 기타 사용자 모드 프로그램이 사용되는 하드웨어에 대한 정확한 세부 정보를 알 필요 없이 하드웨어 기능에 액세스할 수 있도록 한다. 가상 디바이스 드라이버는 가상화 환경에서 하드웨어 디바이스를 에뮬레이션하는 데 사용되는 디바이스 드라이버의 특수한 변형이다. 에뮬레이션 전반에 걸쳐, 가상 장치 드라이버를 사용하면 가상 머신 내에서 실행되는 게스트 운영 체제 및 그의 드라이버가 시간 다중화 세션(multiplexed session)들에서 실제 하드웨어에 액세스할 수 있다. 하드웨어에 액세스하려는 게스트 운영 체제의 시도는 예를 들어 기능 호출(function call)과 같이 호스트 운영 체제의 가상 디바이스 드라이버에 라우팅된다.
커널 모드(615)는 또한 윈도우 관리(생성, 크기 조정, 재배치, 파괴), 제목 표시줄 및 메뉴 표시줄, 메시지 전달, 버튼과 같은 입력 처리 및 표준 제어, 풀다운 메뉴, 편집 상자, 단축키 등을 위한 간단한 사용자 인터페이스를 구축하기 위한 핵심 기능을 제공하는 OS 구성요소(655)를 포함한다. OS 구성요소(655)는 윈도우즈, 메시지 및 메시지 루프에 대한 핸들 세트를 기반으로 하는 그래픽 드라이버 인터페이스(GDI)를 포함한다. OS 구성요소(655)는 또한 그래픽 디바이스 드라이버 인터페이스(DDI)를 구현함으로써 그래픽 출력을 제어하는 그래픽 드라이버 커널 구성요소를 포함한다. 그래픽 드라이버 커널 구성요소는 초기화 및 종료, 부동 소수점 연산, 그래픽 드라이버 기능, 디바이스 종속 비트맵 생성, 선과 곡선을 그리기 위한 그래픽 출력 기능, 그리기 및 채우기, 비트맵 복사, 하프톤, 이미지 색상 관리, 그래픽 DDI 색상 및 팔레트 기능, 그래픽 DDI 폰트 및 텍스트 기능을 지원한다. 그래픽 드라이버는 드라이버를 활성화 및 비활성화하기 위해 진입 포인트(예를 들어, GDI에 의해 호출됨)을 지원한다.
커널 모드(615)는 커널 및 커널 모드 드라이버(660)를 포함한다. 그래픽 커널 드라이버는 하드웨어를 직접 조작하지 않는다. 대신, 그래픽 커널 드라이버는 하드웨어와 인터페이스하기 위해 하드웨어 추상화 계층(HAL)(665)의 기능을 호출한다. HAL(665)은 다양한 하드웨어 플랫폼에 대한 OS 이식성(portability)을 지원한다. HAL(665)의 일부 실시예는 동일한 운영 체제가 서로 다른 프로세서들을 사용하는 서로 다른 플랫폼에서 실행할 수 있게 하는 로딩 가능한 커널 모드 모듈(Hal.dll)로 구현된다. 예시된 프레임워크에서, 하이퍼바이저(670)는 HAL(665)과 디바이스 하드웨어(625) 사이에 구현된다.
도 7은 일부 실시예에 따른 압축 비디오 디코딩, 렌더링 및 프리젠테이션을 위한 멀티미디어 소프트웨어 시스템(700)의 블록도이다. 멀티미디어 소프트웨어 시스템(700)은 도 3에 도시된 하드웨어 아키텍처(300)의 제1 실시예 및 도 4에 도시된 하드웨어 아키텍처(400)의 제2 실시예에서 구현된다. 멀티미디어 소프트웨어 시스템(700)은 사용자 모드(705)와 커널 모드(710)로 구분된다.
멀티미디어 소프트웨어 시스템(700)의 사용자 모드(705)는 어플리케이션 계층(715)을 포함한다. 어플리케이션 계층(715)의 일부 실시예는 메트로 어플리케이션, 모던 어플리케이션, 몰입형(immersive) 어플리케이션, 스토어 어플리케이션 등과 같은 어플리케이션을 실행한다. 어플리케이션 계층(715)은 런타임 계층(720)과 상호작용하며, 이는 아래에서 논의되는 바와 같이 멀티미디어 프로세스를 지원하는 데 사용되는 다른 계층 및 드라이버에 대한 연결을 제공한다.
하드웨어 미디어 파운데이션 변환(MFT)(725)은 사용자 모드(705)에서 구현된다. MFT(725)는 어플리케이션 프로그래머가 사용할 수 있는 선택적인 인터페이스이다. 일부 실시예에서, MFT(725)의 개별 인스턴스가 각각의 디코더 및 인코더에 대해 제공된다. MFT(725)는 미디어 데이터를 처리하기 위한 일반 모델을 제공하고 MFT 표현에서 하나의 입력 및 하나의 출력 스트림을 갖는 디코더 및 인코더에 사용된다. MFT(725)의 일부 실시예는 전체 기반 하드웨어 추상화로 이전에 정의된 어플리케이션 프로그래밍 인터페이스(API)를 기반으로 하는 처리 모델을 구현한다.
사용자 모드(705)에서 구현된 미디어 기반(MF) 계층(730)은 멀티미디어 소프트웨어 시스템(700)을 위한 미디어 소프트웨어 개발 키트(SDK)를 제공하는데 사용된다. MF 계층(730)에 의해 정의된 미디어 SDK는 어플리케이션 프로그래머가 GPU에 구현된 CPU 및 컴퓨팅 셰이더에 액세스할 수 있도록 하는 미디어 어플리케이션 프레임워크이며, 가속기 기능과 같은 미디어 처리를 위한 하드웨어 가속기는 고정 기능 하드웨어 블록에서 제공하는 물리적 기능으로 구현된다. 물리적 기능에 의해 구현되는 가속기 기능의 예시는 멀티미디어 데이터 스트림의 인코딩, 멀티미디어 데이터 스트림의 디코딩, 오디오 또는 비디오 데이터의 인코딩/디코딩, 또는 기타 작업을 포함한다. 일부 실시예에서, 미디어 SDK는 비디오 재생, 비디오 인코딩, 비디오 트랜스코딩, 원격 디스플레이, 무선 디스플레이 등을 구현하는 방법을 예시하는 프로그래밍 샘플을 포함한다.
멀티미디어 사용자 모드 드라이버(MMD)(735)는 MF 계층(730)을 위한 내부, OS 관용(agnostic) API 세트를 제공한다. MMD(735)의 일부 실시예는 멀티미디어 소프트웨어 시스템(700)을 실행하는 처리 시스템을 구현하는 데 사용되는 하드웨어를 추상화하는 C++ 기반 드라이버로 구현된다. MMD(735)는 메모리, 비디오 서비스 또는 다른 속성을 가진 그래픽 표면을 할당하기 위한 구성요소를 포함하는 다이렉트X(DirectX)9 및 다이렉트X11 파이프라인과 같은 하나 이상의 그래픽 파이프라인(DX)(740)과 인터페이스한다. 일부 경우에, MMD(735)는 OS별 구현을 통합하기 때문에 특정 OS 생태계에서 작동한다.
커널 모드(710)는 하드웨어 가속 및 3D 그래픽 파이프라인의 렌더링을 지원하는 커널 모드 드라이버(745)를 포함한다. 3D 그래픽 파이프라인의 일부 실시예는 다른 요소 중에서 입력 어셈블러, 정점 셰이더, 테셀레이터, 지오메트리 셰이더, 래스터라이저, 픽셀 셰이더, 표면, 버퍼 및 텍스처와 같은 렌더링된 메모리 리소스의 출력 병합을 포함한다. 3D 파이프라인의 요소들은 소프트웨어 기반 셰이더 및 고정 기능 하드웨어로 구현된다.
펌웨어 인터페이스(750)는 가속기 기능을 구현하는 데 사용되는 하드웨어(755)를 구성하기 위한 펌웨어를 제공하는 데 사용된다. 하드웨어(755)의 일부 실시예는 펌웨어 인터페이스(750)를 통해 사용자 모드(705)로부터 명령어 및 커맨드를 수신하는 전용 비디오 RISC 프로세서로서 구현된다. 펌웨어는 UVD, VCE 및 VCN, 예를 들어, 도 1에 도시된 고정 기능 하드웨어 블록(165), 도 2에 도시된 VCN(210), 도 2에 도시된 UVD/VCE(215), 도 3에 도시된 VCE(312), 도 3에 도시된 UVD(314), 및 도 4에 도시된 VCN 엔진(410) 중 하나 이상을 구성하는 데 사용된다. 펌웨어 인터페이스(750)를 통해 수신된 커맨드는 비디오 디코딩 및 비디오 인코딩을 위해 하드웨어(755)를 초기화하고 준비하는 데 사용된다. 컨텐츠 정보는 순환 또는 링 버퍼의 시스템을 통해 MMD(735)에서 커널 모드 드라이버(745)로 디코딩 및 또는 인코딩 작업으로 전달된다. 버퍼 및 표면은, 커널 모드 드라이버(745)에서 물리적 어드레스로 변환되는, 그들의 가상 어드레스와 함께 전달된다. 컨텐츠 정보의 예시는 할당된 압축 비트스트림 버퍼, 디코드 표면(디코드 컨텍스트라고 함), 디코드 픽처 버퍼, 디코드 대상 버퍼, 인코드 입력 표면, 인코드 컨텍스트 및 인코드 출력 버퍼를 나타내는 정보를 포함한다.
커널 모드(710)는 또한 3D 드라이버(760) 및 플랫폼 보안 프로세서(PSP)(765)를 포함한다. PSP(765)는 압축된 비트스트림 디코더의 입력 및 출력에서 표면의 암호 해독 및/또는 암호화를 위한 방법 및 암호화 API를 제공하는 커널 모드 구성요소다. PSP(765)는 또한 비디오 인코더 출력에서 암호화 API 및 방법을 제공한다. 예를 들어, PSP(765)는 AMD WiFi 디스플레이 또는 마이크로소프트 미라케스트(Microsoft Miracast) 세션에 대해 사용되는 가상 디스플레이 또는 디스플레이 물리적 출력에서 컨텐츠 보호를 위해 HDCP 1.4 및 2.x 표준을 강제할 수 있다.
가상화는 서비스 요청을 그 물리적 전달(physical delivery)과 분리하는 것이다. 이는 다음을 사용하여 수행될 수 있다:
·
호스트 컴퓨터 하드웨어 계층의 최상위에서 실행되는 하이퍼바이저(또는 VMM)와 게스트 OS 사이의 OS 요청의 이진 변환(binary translation).
·
게스트 OS가 하드웨어에 언더라인(underline)을 위한 모든 요청을 하이퍼바이저와 통신하는 OS 지원 반가상화(paravirtualization), 하이퍼바이저는 메모리 관리, 인터럽트 핸들링 및 시간 관리를 위한 소프트웨어 인터페이스를 제공한다.
·
VMM이 커널 모드 드라이버 아래의 상승된 권한 레벨에서 실행되도록 하는 AMD-v 기술을 갖는 하드웨어 지원 가상화. 최상위 하드웨어 계층에서 실행되는 하이퍼바이저 또는 VMM은 베어 메탈 유형(bare metal type) 1 하이퍼바이저로 알려져 있다. 이는 네이티브(호스트) OS에서 실행되는 경우, 유형 2 하이퍼바이저라고 한다.
가상화는 컴퓨터 클라이언트 및 서버 시스템에서 사용된다. 가상화를 통해 서로 다른 OS들(또는 게스트 VM들)이 원활하고 제어된 방식으로 멀티미디어 하드웨어 리소스(하드웨어 IP)를 공유할 수 있다. 각 OS(또는 게스트 VM)는 동일한 컴퓨터 시스템 내에 다른 OS(또는 게스트 VM)의 존재를 인식하지 못한다. 메인 CPU에 대한 인터럽트 수를 줄이기 위해, 다른 게스트 VM들부로터의 워크로드 공유 및 조정은 멀티미디어 하드웨어 스케줄러에 의해 관리된다. 클라이언트 기반 가상화에서, 호스트 OS는 게스트 VM과 사용자 어플리케이션 간에 GPU와 멀티미디어 하드웨어를 공유한다. 서버 사용 케이스는 가상화를 통한 데스크탑 공유(네트워크 트래픽 감소를 위한 스크린 데이터 H.264 압축), 클라우드 게이밍, 가상 데스크탑 인터페이스(VDI) 및 컴퓨팅 엔진의 공유를 포함한다. 데스크탑 공유는 VCN 비디오 인코더 사용과 밀접한 관련이 있다.
단일 루트 I/O 가상화(SR-IOV)는 PCIe 물리적 기능(PF) 및 하나 이상의 가상 기능(VF)들을 사용함으로써 하드웨어 리소스에 대한 액세스를 세분화할 수 있는 PCI 익스프레스(Express) 사양의 확장이다. 물리적 기능은 네이티브(호스트 OS) 및 그의 드라이버 아래에서 사용된다. 물리적 기능의 일부 실시예는, 대응하는 물리적 기능과 연관되고 가상화된 환경에서 활성화되는, 물리적 기능 및 관련 가상 기능의 구성 및 관리를 위한 SR-IOV 기능을 포함하는 PCI 익스프레스 기능으로 구현된다. 가상 기능을 통해 시스템 메모리, 그래픽 메모리(프레임 버퍼) 및 다양한 디바이스(하드웨어 IP 블록)를 공유할 수 있다. 각 가상 기능은 단일 물리적 기능과 연관된다. GPU는 PCIe 표준에 따라 하나의 물리적 기능을 노출하고 PCIe 노출은 OS 환경 유형에 따라 다르다.
·
네이티브(호스트 OS) 환경에서, 물리적 기능은 네이티브 사용자 모드 및 커널 모드 드라이버에서 사용되며 모든 가상 기능들은 비활성화된다. 모든 GPU 레지스터들은 신뢰할 수 있는 액세스를 통해 물리적 기능에 매핑된다.
·
가상 환경에서, 물리적 기능은 하이퍼바이저(호스트 VM)에 의해 사용되며 GPU는 게스트 VM당 하나의 가상 기능과 같이 PCIe SR-IOV 표준에 따라 특정 수의 가상 기능을 노출한다. 각 가상 기능은 하이퍼바이저에 의해 게스트 VM에 매핑된다. 레지스터의 서브세트만이 각 가상 기능에 매핑된다. 레지스터 액세스는 한 번에 하나의 게스트 VM으로 제한되며, 즉, 활성 게스트 VM으로 제한되며, 이 경우 액세스는 하이퍼바이저에 의해 권한이 부여된다. 하이퍼바이저에 의해 액세스 권한이 부여된 활성 게스트 VM을 "포커스 중(in focus)"이라고 한다. 각 게스트 VM은 프레임 버퍼, 컨텍스트 레지스터 및 VF-PF 동기화에 사용되는 도어벨 개구(doorbell aperture)를 포함하도록 분할된 레지스터 세트의 서브세트에 액세스할 수 있다. 주어진 시간에서, 포커스 중인 하나의 게스트 VM만 프레임 버퍼의 그의 파티션에서 그래픽 렌더링을 수행할 수 있다. 다른 게스트 VM들은 액세스가 거부된다. 각 가상 기능은 자체 시스템 메모리(SM)와 GPU 프레임 버퍼(FB)를 갖는다. 각 게스트 VM은 자체 사용자 모드 드라이버와 펌웨어 이미지를 갖는다(즉, 각 게스트 VM은 임의의 멀티미디어 기능(카메라, 오디오, 비디오 디코딩 및/또는 비디오 인코딩)에 대해 자체 펌웨어 복사본을 운영함). 하드웨어 리소스의 소유권과 제어를 강화하기 위해, 하이퍼바이저는 CPU MMU와 디바이스 IOMMU를 사용한다.
도 8은 일부 실시예에 따른 물리적 기능에 대한 베이스 어드레스 레지스터(BAR)를 식별하는 물리적 기능 구성 공간(800)의 블록도이다. 물리적 기능 구성 공간(800)은 프레임 버퍼 BAR(810), 도어벨 BAR(815), I/O BAR(820) 및 레지스터 BAR(825)을 포함하는 물리적 기능 BAR들의 세트(805)를 포함한다. 구성 공간(800)은 물리적 기능 BAR들을 특정 레지스터들에 매핑한다. 예를 들어, 프레임 버퍼 BAR(810)은 프레임 버퍼 레지스터(830)에 매핑되고, 도어벨 BAR(815)은 도어벨 레지스터(835)에 매핑되며, I/O BAR(820)은 I/O 공간(840)에 매핑되고, 레지스터 BAR(825)은 레지스터 공간(845)에 매핑된다.
도 9는 일부 실시예에 따른 가상 기능에 대한 BAR들을 식별하는 단일 루트 I/O 가상화(SR-IOV) 헤더의 부분(900)의 블록도이다. SR-IOV 헤더의 부분(900)은 처리 시스템에서 실행되는 대응하는 게스트 VM들에 할당에 이용 가능한 가상 기능 BAR들을 식별하는 정보를 보유하는 필드들을 포함한다. 예시된 실시예에서, 부분(900)은 가상 기능 BAR들(901, 902, 903, 904, 905, 906)을 나타내며, 이들은 본원에서 집합적으로 가상 기능 BAR들(901-906)으로 지칭된다. 부분(900)에서 가상 기능 BAR들(901-906)에 의해 표시된 매핑은 레지스터 세트를 서로 다른 게스트 VM들과 연관된 서브세트들로 분할하는 데 사용된다.
예시된 실시예에서, 부분(900)의 정보는 SR-IOV BAR들의 세트(910) 내의 BAR들에 매핑된다. 상기 세트는 프레임 버퍼 BAR(911), 도어벨 BAR(912), I/O BAR(913) 및 레지스터 BAR(914)를 포함하고, 이는 레지스터들의 세트(920)에서 레지스터들의 대응하는 서브세트들을 가리키는 정보를 포함한다. 상기 세트(920)는 프레임 버퍼, 도어벨 및 대응하는 게스트 VM들에 대한 컨텍스트 레지스터들로 사용되는 서브세트들로 분할된다. 예시된 실시예에서, 프레임 버퍼 BAR(911)은 게스트 VM들에 대한 프레임 버퍼들(921, 922)를 유지하기 위한 레지스터들을 포함하는 레지스터들의 서브세트들(개구라고도 함)을 식별하는 정보를 포함한다. 도어벨 BAR(911)은 게스트 VM들에 대한 도어벨들(923, 924)을 유지하기 위한 레지스터들을 포함하는 레지스터들의 서브세트를 식별하는 정보를 포함한다. I/O BAR(913)은 게스트 VM들에 대한 I/O 공간(925, 926)을 유지하기 위한 레지스터들을 포함하는 레지스터들의 서브세트들을 식별하는 정보를 포함한다. 레지스터 BAR(914)은 게스트 VM들에 대한 컨텍스트 레지스터(927, 928)를 유지하기 위한 레지스터들을 포함하는 레지스터들의 서브세트를 식별하는 정보를 포함한다.
프레임 버퍼들(921, 922)를 포함하는 프레임 버퍼 개구에 관하여, 일부 실시예에서 프레임 버퍼의 실제 크기가 VF BAR들(901-906)(또는 도 8에 도시된 PF BAR들(805))을 통해 노출되는 크기보다 크며, 개인 GPU-IOV 기능 구조는 하이퍼바이저가 프레임 버퍼를 분할하기 위해 GPU와 상호 작용하는 통신 채널로 PCI 구성 공간에 도입된다. GPU-IOV 구조를 사용하여, 하이퍼바이저는 서로 다른 크기의 프레임 버퍼들을 각각의 가상 기능들에 할당할 수 있으며, 이를 본원에서 프레임 버퍼 파티셔닝(partitioning)이라고 한다.
GPU 도어벨은 어플리케이션이나 드라이버가 활성 대기열에서 작업을 대기열에 넣었음을 GPU 엔진에 표시하는 메커니즘이다. 도어벨은 CPU 또는 GPU에서 실행되는 소프트웨어에서 발행된다. GPU에서, 예를 들어, CP(커맨드 프로세서), SDMA(시스템 DMA 엔진) 또는 CU(컴퓨팅 장치)에 의해 메모리 기록을 생성할 수 있는 모든 클라이언트들은 도어벨을 발행할 수 있다. 일부 실시예에서, 64비트 도어벨 BAR(912)은 물리적 기능과 연관된 가상 기능에 대한 도어벨 개구의 시작 어드레스를 가리킨다. 도어벨 개구 내에서 커맨드 제출에 사용되는 각 링은 링 버퍼의 내용이 변경되었음을 인터럽트로 신호하기 위한 자체 도어벨 레지스터(923, 924)를 갖는다. 인터럽트는 비디오 CPU(VCPU)에 의해 제공되고 디코딩 또는 인코딩 작업은 링 버퍼에서 제거되고 CPU에 의해 처리되며, 이는 인터럽트에 응답하여 전용 디코딩 또는 인코딩 하드웨어에서 비디오 디코딩 또는 비디오 인코딩 프로세스를 시작한다.
레지스터들은 다음과 같은 네 가지 클래스들로 구분된다:
·
하이퍼바이저 전용 레지스터들은 하이퍼바이저에 의해서만 액세스될 수 있다. 이들은 PCIe 구성 공간에서 GPU-IOV 레지스터의 미러(mirror)이다.
·
PF 전용 레지스터는 물리적 기능에 의해서만 액세스될 수 있다. 가상 기능으로부터의 임의의 판독은 0을 반환하고; 가상 기능으로부터의 임의의 기록은 드랍된다. 디스플레이 제어기 및 메모리 제어기 레지스터는 PF 전용이다.
·
PF 또는 VF 레지스터들은 가상 및 물리적 기능들 모두에 의해 액세스될 수 있지만, 가상 기능 전용 물리적 기능은 가상 기능 또는 물리적 기능이 활성 기능이 되어 GPU를 소유하는 경우에만 이러한 레지스터들에 액세스할 수 있다. 물리적 기능 또는 가상 기능에 대한 레지스터 설정은 해당 기능이 활성 기능일 때만 유효하다. 가상 기능의 물리적 기능이 활성화되면, 이러한 레지스터는 대응하는 드라이버에 의해 액세스될 수 없다.
·
PF 및 VF 복사(Copy) 레지스터들은 물리적 기능과 가상 기능 모두에 의해 액세스될 수 있고; 각 가상 기능 또는 물리적 기능은 고유한 레지스터 복사본들을 갖는다. 다른 기능들의 레지스터 설정들은 동시에 적용될 수 있다. 인터럽트 레지스터, VM 레지스터 및 인덱스/데이터 레지스터는 PF 및 VF 복사 카테고리에 속한다.
도 10은 일부 실시예에 따른 물리적 기능을 구현하는 호스트 OS 및 물리적 기능과 연관된 가상 기능을 구현하는 게스트 VM들의 수명(lifecycle)(1000)의 블록도이다. 일부 실시예에서, 그래픽 드라이버는 다음 엔티티들에 대한 임베디드 펌웨어 이미지를 운반한다:
·
SMU(시스템 관리 유닛)
·
MC(메모리 제어기)
·
ME(마이크로 엔진-카피 그래픽)
·
PFP(프리-페처 파서-CPF)
·
CE(일정한 엔진-CP)
·
컴퓨팅(컴퓨팅 엔진)
·
시스템 DMA(sDMA)
·
RLC_G
·
DMIF(디스플레이 관리 인터페이스)
·
UVD, VCE, VCN 및 PSP/SAMU 보안.
SMU, MC 및 RLC_V에 대한 펌웨어 이미지는 vBIOS POST(Power On Self-Test) 시간에 로딩되는 반면, 다른 펌웨어 이미지는 ASIC 초기화 중 그리고 임의의 관련 펌웨어 엔진이 SR-IOV 가상화에서 사용되기 전에 그래픽 드라이버에 의해 로딩된다.
시스템 BIOS 위상(1005)은 파워 업(power up) 블록(1010) 및 POST 블록(1015)을 포함한다. 파워 업 블록(1010) 동안, GPU는 가상 기능에 대한 BAR 크기를 결정하기 위해 대응하는 퓨즈(fuse) 또는 스트랩(strap)을 판독한다. 예를 들어, GPU는 REG_BAR(32b), FB_BAR(64b), 도어벨(DOORBELL)_BAR(64b) 크기를 판독할 수 있다. 이 경우, 가상 기능에서는 IO_BAR가 지원되지 않는다. POST 블록(1015) 동안, 시스템 BIOS는 GPU의 SR-IOV 기능을 인식하고 GPU와 핸드셰이크(handshake)하여 각 가상 기능에 대한 BAR 크기를 결정한다. 크기 요구 사항을 결정하는 것에 대한 응답으로, 시스템 BIOS는 물리적 기능에 대한 일반 PCI 구성 공간 범위 요구 사항 외에도 가상 기능에 대한 전체 BAR 크기를 수용할 수 있도록 충분한 연속 MMIO(메모리 매핑된 I/O) 공간을 할당한다. 다음으로, 시스템 BIOS는 루트 포트에서 ARI 기능을 활성화하고 물리적 기능을 위해 SR-IOV 캡에서 ARI 가능 계층(Capable Hierarchy) 비트를 활성화한다.
하이퍼바이저, OS 부팅(boot up) 및 드라이버 초기화 단계(1020)는 하이퍼바이저 초기화/시작 블록(1025) 및 호스트 OS 부팅 블록(1030)을 포함한다. 블록(1025)에서, 하이퍼바이저는 호스트 OS를 그의 사용자 인터페이스로 로딩하기 전에 가상화 환경을 초기화하기 시작한다. 호스트 OS(또는 하이퍼바이저의 일부)가 시작되면, 이는 하드웨어 가상화 GPU를 제어하는 GPUV 드라이버에 로딩된다. GPUV 드라이버를 로딩하는 것에 응답하여, GPUV 드라이버는 블록(1030)에서 GPU를 초기화하기 위해 POST VBIOS를 실행한다. VBIOS POST 동안, 드라이버는 PSP FW, SMU FW, RLC_V FW, RLC_G FW, RLC 저장/복원 리스트, SDMA FW, 스케줄러 FW 및 MC FW를 포함한 펌웨어(FW)를 로딩한다. 비디오 BIOS는 PSP가 펌웨어를 복사하고 인증할 수 있도록 프레임 버퍼 단부에서 프레임 버퍼에 자체 공간을 예약한다. VBIOS POST 이후에, GPUV 드라이버는 SR-IOV를 활성화하고 하나 이상의 가상 기능들 및 대응하는 가상 기능 단계들(1035, 1040)의 리소스들을 구성할 수 있다.
제1 가상 기능 단계(1035)에서, 하이퍼바이저는 블록(1045)에서 제1 게스트 VM에 제1 가상 기능을 할당한다. SR-IOV가 활성화되면, 제1 가상 기능에 대한 제1 프레임 버퍼의 위치가 프로그래밍된다. 예를 들어, 레지스터 세트의 제1 서브세트는 제1 가상 기능의 제1 프레임 버퍼에 할당된다. 블록(1050)에서, 제1 게스트 VM이 초기화되고 게스트 그래픽 드라이버가 제1 가상 기능을 초기화한다. 제1 가상 기능은 PCIe 요청에 응답하여 프레임 버퍼 및 기타 활동에 액세스한다. 마지막 단계에서, 제1 게스트 VM에 제1 가상 기능이 패스 스루(pass through) 디바이스로 할당되면, 게스트 VM은 가상 기능을 GPU 디바이스로 인식한다. 그래픽 드라이버들은 GPUV 드라이버와 핸드셰이크하고 가상 기능의 GPU 초기화를 완료한다. 초기화가 완료되면, 블록(1055)에서 제1 게스트 VM이 미리 정의된 데스크톱으로 부팅된다. 이제 최종 사용자는 원격 데스크톱 프로토콜을 통해 제1 게스트 VM에 로그인하고 제1 게스트 VM에서 원하는 작업을 수행할 수 있다.
제2 가상 기능 단계(1040)에서, 하이퍼바이저는 블록(1060)에서 제2 게스트 VM에 제2 가상 기능을 할당하고, 블록(1065)에서 제2 게스트 VM을 초기화하고, 블록(1070)에서 제2 게스트 VM을 부팅한다. 이 포인트에서, GPU에서 동시에 실행되는 다수의 가상 기능들과 대응하는 게스트 VM들이 존재한다. 하이퍼바이저는 GPU에서 실행 중인 VM-VF들에 대한 타임 슬라이스들을 스케줄링한다. 현재 실행 중인 게스트 VM, 즉 GPU 스위치 다음에 실행할 게스트 VM의 선택은 하이퍼바이저 또는 GPU 스케줄링 스위치에 의해 수행된다. 가상 기능이 GPU에서 그의 타임 슬라이스를 얻을 때, 대응하는 게스트 VM은 GPU 리소스를 소유하고 이 게스트 VM 내에서 실행되는 그래픽 드라이버는 마치 GPU를 단독으로 소유하는 것처럼 행동한다. 게스트 VM은 그의 할당된 시간 조각 동안 모든 커맨드 제출 및 레지스터 액세스에 대해 응답한다.
멀티미디어 스케줄러(MMSCH)를 포함하지 않는 처리 유닛에서, 멀티미디어 엔진의 프로그래밍 및 그들의 수명 주기 제어는 메인 x64 또는 x86 CPU에 의해 수행된다. 이러한 모드에서, 비디오 인코딩 및/또는 비디오 디코딩 펌웨어 로딩 및 초기화는 가상 기능 드라이버가 처음 로딩될 때 가상 그에 의해 수행된다. 런타임에서, 로딩된 각 가상 기능 인스턴스는 자체 펌웨어 이미지를 갖고 펌웨어 및 레지스터 컨텍스트 복원, 자체 대기열에서 하나의 작업만의 검색을 수행하고, 전체 프레임을 인코딩하고 컨텍스트 저장을 수행한다. 가상 기능 인스턴스가 유휴 시간(idle time)에 도달하면, 하이퍼바이저에 다음 가상 기능을 로딩할 수 있음을 알린다.
존재하는 경우, MMSCH는 멀티미디어 엔진 관리에서 CPU 역할을 맡고 이를 대신한다. 이는 가상 기능의 초기화 및 설정, 컨텍스트 저장/복원, 도어벨 프로그래밍으로 게스트 VM에서 가상 기능으로 작업 제출을 수행하고 물리적 기능과 가상 기능의 재설정을 수행하고 오류 복구를 처리한다. MMSCH의 일부 실시예는 저전력 VCPU에서 펌웨어로 구현된다. MMSCH 및 MMSCH 초기화에 대한 펌웨어는 펌웨어가 비디오 BIOS(vBIOS)에 포함된 플랫폼 보안 프로세서(PSP)에 의해 수행된다. PSP는 자동 증분 기능이 있는 어드레스(ADDRESS)/데이터(DATA) 레지스터 쌍을 사용하여 MMSCH 펌웨어 이미지를 다운로드하고 그의 구성 레지스터들을 프로그래밍하고 MMSCH 펌웨어 이미지를 재설정에서 해제한다. MMSCH가 실행되면, 하이퍼바이저는 SR-IOV 및 GPU-IOV 기능 프로그래밍을 통해 멀티미디어 가상 기능 설정을 수행한다. 하이퍼바이저는 물리적 기능과 가상 기능에 대한 BAR들을 구성하고, 게스트 VM들에서 멀티미디어 초기화를 수행하며 게스트 VM들이 순차적으로 실행될 수 있도록 한다. 멀티미디어 초기화에는 VCE 및 UVD(또는 VCN) 가상 레지스터와 대응하는 펌웨어를 유지하기 위해 각 게스트 VM에 메모리 할당이 필요하다. 그런 다음 하이퍼바이저는 펌웨어가 로딩되는 개구의 어드레스와 크기를 설정하여 VCE/UVD 또는 VCN 하드웨어에 대한 레지스터를 프로그래밍한다. 하이퍼바이저는 또한 펌웨어 엔진과 대응하는 명령어 및 데이터 캐시에 대한 스택 크기와 어드레스 시작을 정의하는 레지스터를 설정한다. 그런 다음 하이퍼바이저는 로컬 메모리 인터페이스(LMI) 구성 레지스터를 프로그래밍하고 대응하는 VCPU에서 재설정을 제거한다.
MMSCH의 일부 실시예는 다음 활동을 수행한다:
·
PF 및 VF 기능을 위한 멀티미디어 엔진 초기화. 베어 메탈 플랫폼으로, 드라이버는 직접 MMIO 레지스터 판독/기록을 통해 VCE 또는 UVD 엔진을 초기화한다. 가상화에서, MM 엔진 가상화는 한 기능의 작업을 수행하는 동안 다른 기능이 초기화되는 능력이 있다. 이 능력은 초기화 메모리 디스크립터를 MMSCH에 제출함으로써 지원되며, 이는 나중에 제1 커맨드 제출이 발생할 때 VF에 대한 멀티미디어 엔진 초기화를 스케줄링하고 트리거한다.
·
PF 및 VF 기능을 위한 멀티미디어 커맨드 제출. 베어 메탈 플랫폼으로, VCE 및 UVD(또는 VCN)에 대한 커맨드 제출은 VCE_RB_WPTR과 같은 MMIO WPTR 레지스터들을 통해 이루어진다. 가상화에서, 커맨드 제출은 GFX, SDMA 및 컴퓨트(Compute) 커맨드 제출과 같은 도어벨 기록으로 스위칭된다. 링/대기열에 커맨드 패키지를 제출하기 위해, GFX 드라이버는 대응하는 도어벨 위치에 기록한다. 도어벨 위치에 기록할 때, MMSCH는 이 VF 및 링/대기열에 대한 알림을 수신한다. MMSCH는 이러한 정보를 각 기능 및 링/대기열에 대해 내부적으로 저장한다. 이 기능이 활성 기능이 되면, MMSCH는 대응하는 엔진에 링/큐에 대한 누적된 커맨드 패키지들의 처리를 시작하도록 알린다.
·
멀티미디어 월드 스위치는 현재 실행 중인 멀티미디어 VF 인스턴스를 다음 멀티미디어 VF 인스턴스로 스위칭하는 것을 의미한다. 멀티미디어 월드 스위치는 현재 실행 중인 MMSCH 펌웨어 및 UVD/VCE/VCN 펌웨어와 다음에 실행될 멀티미디어 펌웨어 인스턴스 사이의 여러 커맨드 교환으로 수행된다. 커맨드는 MMSCH 및 VCE/UVD/VCN에 있는 간단한 인덱스(INDEX)/데이터(DATA) 공통 레지스터 세트를 통해 교환된다. 일부 실시예에서, 다음 커맨드가 존재한다:
·
gpu_idle(fcn_id)-MM 엔진은 현재 기능에 대한 임의의 커맨드의 처리를 중지하라는 요청을 받는다. MM 엔진이 현재 기능에 대해 작업 중인 경우, MMSCH는 MMSCH가 MM 엔진으로부터 현재 작업 완료를 수신할 때까지 대기하고, 모든 추가 처리를 중지하고 이 기능에 대한 추가 커맨드를 중지한다; 그렇지 않으면 MMSCH는 커맨드 완료를 즉시 반환한다.
·
gpu_save_state(fcn_id)-MMSCH는 현재 기능의 엔진 상태 fcn_id를 컨텍스트 저장 영역에 저장한다.
·
gpu_load_state(fcn_id)-MMSCH는 컨텍스트 SRAM 영역으로부터 엔진 레지스터로 기능의 엔진 상태(fcn-id)를 로딩한다.
·
gpu_run(fcn_id)-MMSCH는 기능(VFID=fcn_id)에 대한 처리 작업(커맨드)을 시작하도록 MM 엔진에 알린다.
·
gpu_context_switch(fcn_id, nxt_fcn_id)-MMSCH는 MM 엔진이 기능 VFID=fcn_id에서 작업 처리를 완료할 때까지 기다리고 nxt_fcn_id 인수로 지정된 다음 기능에서 작업을 처리하도록 스위칭한다.
·
gpu_enable_hw_autoscheduling(active_functions)-이 커맨드는 MMSCH에 레지스터 어레이에 나열된 VM 기능들 사이에 월드 스위치를 수행하도록 알린다. MM 엔진 월드 스위치 동안 리스트 내의 각 기능은 레지스터에 의해 지정된 타임 슬라이스 동안 활성 상태를 유지한다.
·
gpu_init(fcn_id)-이 커맨드는 특정 기능(fcn_id)에 대한 엔진이 초기화될 것임을 MMSCH에 알린다.
·
gpu_disable_hw_autoscheduling (active_functions)-이 커맨드는 나열된 기능에 대한 MM 엔진 월드 스위칭 수행을 중지하도록 MMSCH에 알린다. 이 커맨드를 수신한 후, MMSCH는 현재 활성 기능이 작업(프레임)을 완료할 때까지 기다린 다음 gpu_idle 및 gpu_save_state 커맨드를 실행하고 추가 작업을 위해 현재 활성 기능을 유지한다.
·
gpu_disable_hw_scheduling_and_context_switch-이 커맨드는 MMSCH에 월드 스위치 수행을 중지하도록 요청한다. 이 커맨드를 수신한 후, MMSCH는 현재 활성 기능이 작업을 마칠 때까지 기다린 다음 gpu_context_switch 커맨드를 실행하여 추가 작업을 위해 다음 기능으로 스위칭한다.
·
멀티미디어 페이지 오류 핸들링 베어 메탈에서, UVD 또는 VCE 커맨드 실행에서 페이지 오류가 발생하면, MC/VM은 페이지 오류에 대해 UVD/VCE HW 블록에 알리고 호스트에 인터럽트를 발생시킨다. 그 후 UVD/VCE 및 KMD는 다음을 수행한다:
·
UVD가 페이지 오류 알림을 수신하면, 페이지를 발생시키는 링/대기열과 함께 내부 인터럽트를 통해 UVD 펌웨어에 알린다.
·
UVD 펌웨어는 이 링/대기열에 대한 모든 요청을 드레인(드랍)한다.
·
UVD 펌웨어는 엔진을 재설정하고 VCPU를 재부팅한다.
·
VCPU 재부팅 후, UVD 펌웨어는 자체 링 버퍼에서 새로운 커맨드를 폴링한다.
·
KMD가 페이지 오류 인터럽트를 수신하면, KMD는 멀티미디어 상태 레지스터를 판독하여 페이지 오류가 있는 링/대기열을 찾는다. 페이지 오류 링 정보를 검색한 후, KMD는 결함이 있는 링/대기열의 판독/기록 포인터를 0으로 재설정하고 UVD/VCE/VCN 펌웨어가 페이지 오류 에러가 처리되었음을 표시하여 FW가 제출된 커맨드 처리를 다시 계속/시작할 수 있도록 한다.
·
위의 처리 방식에서, UVD/VCE 펌웨어와 KMD 드라이버 간의 핸드셰이크는 UVD_PF_STATUS 및 VCE_PAGE_FAULT_STATUS 레지스터들을 통해 이루어진다.
·
SR-IOV 가상화에서, 페이지 오류 핸드셰이크 방식은 의존할 다른 PF 및 VF 레지스터가 없기 때문에 메모리 위치 기반이다.
도 11은 일부 실시예에 따른 멀티미디어 사용자 모드 드라이버(1100) 및 커널 모드 드라이버(1105)의 블록도이다. VCE/UVD/VCN 엔진과 같은 하드웨어 가속기는 디코딩 및 인코딩 대역폭이 제한되어 있으므로 하드웨어 가속기가 런타임 동안 활성화된 모든 가상 기능들을 항상 적절하게 제공할 수 있는 것은 아니다. 비디오 GPU와 같은 처리 유닛의 일부 실시예는 대응하는 게스트 VM의 프로파일에 기초하여 VCE/UVD/VCN 인코딩 또는 디코딩 엔진 대역폭을 특정 가상 기능에 배열하거나 할당한다. 게스트 VM의 프로필에 비디오 인코딩 대역폭이 필요하다고 표시되면, GPU는 그래픽 드라이버가 가상 기능 초기화를 시작하기 전에 메일박스(mailbox) 레지스터를 통해 가상 기능으로 전달되는 메시지를 생성한다. 또한, GPU는 가상 기능이 임의의 작업 제출을 시작하기 전에 가상 기능 대역폭 요구 사항을 스케줄러에 알린다. 예를 들어, VCE는 초당 약 2M MB의 최대 대역폭으로 H.264 비디오 인코딩이 가능하다-1MB는 16x16 픽셀과 같다. 최대 대역폭 정보는 최대 표면 폭 및 높이(예를 들어, 4096x2160)와 함께 비디오 BIOS 테이블에 저장된다. 초기화하는 동안, GPU 드라이버는 인코딩 엔진 대역폭 할당을 관리하기 위해 초기 전체 사용 가능한 대역폭으로서 대역폭 정보를 검색한다. GPU의 일부 실시예는 대역폭 정보를 프로파일/파티션으로 전환한다.
예시된 실시예에서, 멀티미디어 사용자 모드 드라이버(1100) 및 커널 모드 드라이버(1105)는 기능 블록에 의해 다층화되고 구조화된다. 동작시, 멀티미디어 사용자 모드 드라이버(1100)는 운영 체제(OS) 생태계(1115)에 대한 인터페이스(1110)를 포함한다. 인터페이스(1110)의 일부 실시예는 상이한 그래픽 파이프라인 호출들에 대한 인터페이스와 같은 소프트웨어 구성요소를 포함한다. 예를 들어, 멀티미디어 사용자 모드 드라이버(1100)는 다양한 크기 및 다양한 색 공간 및 타일링 형식의 표면을 할당할 때 인터페이스(1110)에서 구현된 UDX 및 DXX 인터페이스를 사용한다. 일부 경우에, 멀티미디어 사용자 모드 드라이버(1100)는 또한 인터페이스(1110)에서 구현된 직접 DX9 및 DX11 비디오 DDI 인터페이스 쇼(show)들을 갖는다. 멀티미디어 사용자 모드 드라이버(1100)는 또한 도 7에 도시된 MF 계층(730)과 같은 미디어 파운데이션과의 인터페이스에 사용되는 개인 API 세트를 구현하며, 이는 윈도우즈(Windows), 리눅스(Linux) 및 안드로이드(Android) OS 생태계와 같은 다른 미디어 API들 및 프레임워크들에 대한 상호 작용 인터페이스를 제공한다. 멀티미디어 사용자 모드 드라이버(1100)의 일부 실시예는 외부 구성요소(예를 들어, AMF 및 AMD UI CCC 제어 패널)로부터 대체된 이벤트를 사용한다. 멀티미디어 사용자 모드 드라이버(1100)는 또한 OS가 동기화 오브젝트(플래그, 세마포어, 뮤텍스), 타이머, 네트워킹 소켓 인터페이스, 비디오 보안 등의 독립적인 사용을 허용하는 유틸리티 및 헬퍼 기능들의 세트를 구현한다. 멀티미디어 사용자 모드 드라이버(1100)의 하부 내부 구조의 일부 실시예는 C++로 작성된 코어 베이스 클래스 오브젝트를 중심으로 구성된다. 멀티미디어 코어는 OS 및 하드웨어에 독립적이고 다음을 지원하는 베이스 클래스들의 세트를 구현한다:
·
다수의 코덱들 및 비디오 해상도들을 지원하는 압축 비트스트림 비디오 디코드
·
YUV 또는 RGB 색상 공간의 표면에서 H.264, H.265, VP9 및 AV1 압축 비트스트림으로의 비디오 인코딩
·
수신 또는 생성된 표면의 업스케일링/다운스케일링 및 색 공간 전환을 지원하는 비디오 렌더링. 색역 보정, 디인터레이스, 얼굴 감지, 피부 톤 보정과 같은 다른 비디오 렌더링 기능이 존재하며 AMD 멀티미디어 피처 셀렉터(AFS) 및 능력 관리자(CM)에 의해 자동 활성화되며 그래픽 컴퓨팅 엔진에서 셰이더로 실행된다.
멀티미디어 사용자 모드 드라이버(1100)에 대해 파생된 클래스는 OS에 따라 다르다. 예를 들어, 코어 비스타(Core Vista)(윈도우즈 XP에서 윈도우즈 7을 통해 윈도우즈 10까지 모든 변형을 지원하는 윈도우즈 OS 생태계 용), 코어 리눅스(Core Linux) 및 코어 안드로이드(Core Android)에 대한 멀티미디어 코어 기능이 존재한다. 이러한 코어들은 멀티미디어 소프트웨어 스택을 다른 OS 환경으로 이식할 수 있는 기능을 제공한다. 기본 디바이스를 자동 감지하는 멀티미디어 하드웨어 계층으로 디바이스 이식성이 보장된다. 커널 모드 드라이버(1105)와의 통신은 IOCTL(탈출) 호출에 의해 달성된다.
커널 모드 드라이버(1105)는 모든 커널 관련 장치 특정 호출(DDI 호출과 같은)을 수신하는 OS 커널에 대한 커널 인터페이스(1120)를 포함한다. 커널 인터페이스(1120)는 상이한 기능들을 추상화하는 커널 모드 드라이버(1105)의 적절한 모듈들에 대한 호출들을 디스패치하는 디스패처(dispatcher)를 포함한다. 커널 인터페이스(1120)는 커널의 OS 기반 서비스 호출과의 상호 작용을 제어하는 OS 관리자를 포함한다. 커널 모드 드라이버(1105)는 또한 멀티미디어 디코딩(UVD 엔진 노드), 멀티미디어 인코딩(VCE 엔진 노드), 및 멀티미디어 비디오 코덱 넥스트(APU SOC를 위한 VCN 노드)를 위한 엔진 노드들과 같은 커널 모드 모듈들(1125)을 포함한다. 커널 모드 모듈(1125)은 하드웨어 초기화를 제공하고 하드웨어 제어 링 버퍼의 시스템에 디코딩 또는 인코딩 작업의 제출을 허용한다. 토폴로지 변환 계층(1130)은 서비스들로부터 노드들을 격리하고 커널 모드 드라이버(1105)에서 소프트웨어 모듈(1135)에 대한 인터페이스를 제공한다. 소프트웨어 모듈(1135)의 예는 swUVD, swVCE 및 swVCN을 포함하고, 이는 디코딩 또는 인코딩 작업의 수신 및 처리, 타일링 제어, 전원 게이팅 제어 및 사용자 모드 드라이버에서 수신된 IOCTL 메시지에 응답하기 위해 링 버퍼들에 대한 액세스를 제공하는 하드웨어 특정 모듈들이다. 커널 모드 드라이버(1105)는 또한 커널-HV 모드(1145)에서 하이퍼바이저를 통해 하드웨어 IP(1140)에 대한 액세스를 제공한다.
도 12는 일부 실시예에 따른 가상화된 OS 생태계에서 멀티미디어 능력 공유를 지원하는 메시지 시퀀스(message sequence)의 제1 부분(1200)이다. 메시지 시퀀스는 도 1에 도시된 처리 시스템(100)의 일부 실시예에서 구현된다. 제1 부분(1200)은 비디오 BIOS(VBIOS), 하이퍼바이저(HV), 물리적 기능을 위한 커널 모드 드라이버 토폴로지 변환 계층(TTL-PF), 가상 기능을 위한 멀티미디어 UMD, 가상 기능을 위한 커널 모드 드라이버 TTL(TTL-VF), 및 가상 기능을 위한 커널 모드 드라이버(KMD) 사이에 교환되는 메시지를 나타낸다. 물리적 기능과 가상 기능 간의 통신은 도어벨 신호로 메일박스 메시지 교환 프로토콜을 통해 수행된다. 일부 실시예에서, 메일박스는 공통 레지스터 세트를 통해 동작하는 반면, 도어벨 시그널링은 물리적 기능 또는 가상 기능에서 인터럽트 기반 통지가 발생하도록 한다. 다른 실시예에서, 통신은 도어벨 신호로 로컬 공유 메모리를 통해 달성된다.
VBIOS는 시스템이 SR-IOV 가능 여부를 결정하고, 만약 그렇다면, VBIOS는 프레임 버퍼의 단편화(fragmentation)를 나타내는 정보를 하이퍼바이저에 제공한다(메시지 1202에서). 정보는 UVD/VCE/VCN에 대한 프레임 버퍼 세분화를 나타내는 기능 플래그(feature flag)들을 포함할 수 있다. 물리적 기능과 연관된 가상 기능의 지원되는 각각의 인스턴스는 자동 식별된 디바이스에 고유한 자체 프레임 버퍼에서 레코드를 얻는다(메시지 1204에서). 이 레코드는 1080p60 또는 4K30 또는 4K60 또는 8K24 또는 8K60과 같은 최대 멀티미디어 기능을 나타내며, 이는 주어진 디바이스에서 유지될 수 있는 모든 활동들의 합이다. 일부 실시예에서, 대역폭은 디코딩 또는 인코딩 또는 두 기능 모두를 사용하는 하나의 가상 기능에 의해서만 소진된다. 예를 들어 전체 멀티미디어 기능이 4K60인 경우, 각각 1080p60 디코딩을 수행하는 4개의 가상 기능들 또는 각각 1080p24 디코딩을 수행하는 최대 10개의 가상 기능들 또는 각각 1080p60 디코딩을 수행하는 2개의 가상 기능들과 각각 1080p60 비디오 인코딩을 수행하는 2개의 가상 기능을 지원할 수 있다.
가상 기능에서 실행되는 게스트 OS/VM 상의 어플리케이션이 사용 케이스를 디코딩하거나 인코딩하기 위해 멀티미디어 드라이버를 로딩할 때, 로딩된 멀티미디어 드라이버는 현재 인코딩 또는 디코딩 프로필을 인식하고 KMD 드라이버의 TTL 계층에 요청을 보낸다(메시지 1206에서). 이 요청은 다음 중 하나로 공식화될 수 있다:
1)
소스의 수평 및 수직 크기와 리프레시 레이트를 나타내는 디코딩 또는 인코딩 작업의 현재 해상도(예를 들어, 720p24, 108030 등), 또는
2)
디코딩되어야 하는 인코딩된 프레임 또는 압축된 비트스트림 컨텐츠의 전체 매크로블록들의 수
현재 가상 기능의 TTL-VF는 요청을 수신하고 이를 물리적 기능의 TTL 계층으로 포워딩한다(메시지 1208). TTL-PF는 최대 디코딩 또는 인코딩 대역폭을 인식하고 각 가상 기능의 멀티미디어 활용에 대한 기록을 갖는다.
인코딩 또는 디코딩 기능을 사용할 수 없는 경우, PF TTL은 TTL-VF에 알리고(메시지 1210을 통해), 그런 다음 동일한 가상 기능에서 UMD에 알린다(메시지 1212를 통해). 메시지(1212)에 대한 응답으로, UMD는 가상 기능에서 멀티미디어 드라이버를 로딩하라는 어플리케이션 요청에 실패하고 어플리케이션은 활동(1214)에서 폐쇄된다.
인코딩 또는 디코딩 기능을 사용할 수 있는 경우 PF TTL은 그의 부기(bookkeeping) 기록을 업데이트하고 TTL-VF에 알리고(메시지 1216을 통해), 이는 펌웨어를 다운로드하라는 요청을 KMD에 전송하고(메시지 1218을 통해) UVD/VCE 또는 VCN 멀티미디어 엔진을 열고 구성한다(메시지 1218에서). 그러면 KMD가 실행될 수 있게 되며 가상 기능의 KMD 노드는 제1 작업 제출을 수락할 수 있는 TTL-VF에 알린다(메시지 1220에서). 메시지(1220)에 대한 응답으로, TTL-VF는 가상 기능에 대한 UMD에 구성 프로세스가 완료되었음을 알린다(메시지 1222에서).
도 13은 일부 실시예에 따른 가상화된 OS 생태계에서 멀티미디어 능력 공유를 지원하는 메시지 시퀀스의 제2 부분(1300)이다. 메시지 시퀀스의 제2 부분(1300)은 도 1에 도시된 처리 시스템(100)의 일부 실시예에서 구현되고 도 12에 도시된 제1 부분(1200) 다음에 수행된다. 제2 부분(1300)은 비디오 BIOS(VBIOS), 하이퍼바이저(HV), 물리적 기능을 위한 커널 모드 드라이버 토폴로지 변환 계층(TTL-PF), 가상 기능을 위한 멀티미디어 UMD, 가상 기능을 위한 커널 모드 드라이버 TTL(TTL-VF), 및 가상 기능을 위한 커널 모드 드라이버(KMD) 사이에서 교환되는 메시지를 예시한다.
정상적인 런타임 작동 중에, 선택된 시간 인터벌의 멀티미디어 어플리케이션(예를 들어, UMD)은 인코딩 또는 디코딩 작업 요청을 TTL-VF에 제출하며(메시지(1305)를 통해), 이는 메시지(1310)를 KMD에 전송함으로써 요청된 작업을 제출하고 실행하도록 적절한 노드에 통지한다.
게스트 VM에서 어플리케이션 수명 주기의 마지막 단계에서, 어플리케이션은 TTL-VF에서 멀티미디어 드라이버에 종료 요청을 발행한다. TTL-VF는 메시지(1315)를 통해 요청을 TTL-VF로 포워딩한다. TTL-VF는 클로징 요청을 대응하는 멀티미디어 노드에 발행하고(메시지 1320을 통해), 이는 노드가 폐쇄되었음을 TTL-VF에 통지한다(메시지 1325를 통해). 멀티미디어 노드의 성공적인 비활성화 시, TTL-VF는 TTL-PF에 신호를 보내고(메시지 1330을 통해), 그런 다음 인코딩 또는 디코딩 대역폭을 회수하고 부기 기록을 업데이트합니다(활동 1335에서).
가상 기능에 대해 제출된 하나의 작업이 완료되면, TTL-VF는 가상 기능에서 작업이 실행되었음을 멀티미디어 스케줄러에 알린다. 멀티미디어 스케줄러는 가상 기능을 비활성화한다. 그런 다음 멀티미디어 스케줄러는 다음 활성 가상 기능으로 월드 스위치를 수행한다. 멀티미디어 스케줄러의 일부 실시예는 가상 기능을 활성화하고 서비스하기 위해 라운드 로빈 스케줄러(round robin scheduler)를 사용한다. 멀티미디어 스케줄러의 다른 실시예는 우선순위가 대응하는 가상 기능에 의해 사용되는 대기열의 유형에 기초하여 평가되는 동적 우선순위 기반 스케줄링을 사용한다. 또 다른 실시예에서, 멀티미디어 스케줄러는, 예를 들어, 최소 레이턴시로 스카이프(Skype) 어플리케이션의 인코딩 작업을 위한 시간 중요 대기열, 또는 무선 디스플레이 세션을 위한 인코딩 작업을 위한 실시간 대기열, 비실시간 비디오 트랜스코딩을 위한 범용 인코딩 대기열, 또는 범용 디코딩 대기열과 같은, 우선순위 기반 대기열 시스템을 사용하는 게스트 VM들보다 낮은 해상도(예를 들어, 더 짧은 작업 인터벌)의 작업을 디코딩하거나 인코딩하는 게스트 VM들을 제공하는 레이트 모노토닉 스케줄러를 구현한다.
도 12 및 13에 개시된 메시지 시퀀스의 일부 실시예는 각각의 게스트 OS/VM에 서비스를 제공하는 많은 가상 기능들 사이에서 하나의 멀티미디어 하드웨어 엔진의 공유를 지원한다. 이는 하나의 하드웨어 인스턴스가 많은 가상 클라이언트들에 서비스를 제공하기 위해 공유되지만 각 게스트 OS/VM에 자체 전용 멀티미디어 하드웨어가 있다는 인상을 준다. 가장 단순한 경우, 가상 기능들의 수는 호스트 및 게스트 OS가 하드웨어 가속 비디오 디코딩 또는 하드웨어 가속 비디오 인코딩을 동시에 실행할 수 있도록 하는 두 개이다. 또 다른 실시예에서, 16개만큼 많은 가상 기능들이 지원되지만, 다른 실시예는 더 많거나 더 적은 가상 기능들을 지원한다.
도 12 및 13에 개시된 메시지 시퀀스의 일부 실시예는 다양한 컴퓨터 클라이언트 및 서버 시스템에서 사용된다. 클라이언트 기반 가상화에서, 호스트 OS는 가상 머신(VM)과 사용자 어플리케이션 사이에 GPU 및 멀티미디어 하드웨어 지적 재산(IP) 블록을 공유한다. 서버 사용 케이스는 데스크톱 공유(캡처된 화면 데이터는 네트워크 트래픽 감소를 위해 H.264로 압축됨), 클라우드 게이밍, 가상 데스크톱 인터페이스(VDI) 및 컴퓨팅 엔진 공유를 포함한다.
본 출원은 하기 실시예를 참조하여 추가로 이해될 수 있다:
예시 1: 처리 유닛(processing unit)에 있어서,
하이퍼바이저(hypervisor) 및 게스트 가상 머신(VM)들을 실행하도록 구성된 커널 모드 유닛(kernel mode unit);
물리적 기능(physical function)을 구현하도록 구성된 고정 기능 하드웨어 블록-여기서, 상기 물리적 기능에 대응하는 가상 기능들이 상기 게스트 VM들에 노출 됨-; 및
레지스터 세트(register)를 포함하고, 상기 레지스터 세트의 서브세트들은 상기 가상 기능들과 연관된 정보를 저장하도록 할당되고, 상기 고정 기능 하드웨어 블록은 상기 서브세트들의 대응하는 하나에 저장된 상기 정보에 기초하여 상기 게스트 VM들 중 하나에 대한 상기 가상 기능들 중 하나를 실행하는, 처리 유닛.
예시 2: 예시 1에 있어서, 상기 레지스터 세트는 상기 가상 기능들에 할당된 공간의 최대량에 대응하는 다수의 서브세트들로 분할되는, 처리 유닛.
예시 3: 예시 1에 있어서, 상기 레지스터 세트는 초기에 상기 가상 기능들에 할당된 공간의 최소량에 대응하는 다수의 서브세트들로 분할되고, 상기 서브세트들의 수는 상기 가상 기능들의 속성에 기초하여 후속적으로 수정되는, 처리 유닛.
예시 4: 예시 1 내지 예시 3 중 어느 하나에 있어서, 상기 레지스터 세트의 각각의 서브세트는 상기 서브세트와 연관된 상기 가상 기능에 의해 작동되는 프레임들을 저장하기 위한 프레임 버퍼(frame buffer), 상기 가상 기능의 작동 상태를 정의하기 위한 컨텍스트 레지스터들, 상기 가상 기능들이 실행을 위해 스케줄링될 준비가 되었음을 신호하는 도어벨(doorbell)을 포함하는, 처리 유닛.
예시 5: 예시 4에 있어서,
제1 게스트 VM으로부터의 시그널링에 응답하여 제1 시간 인터벌(interval)로 상기 가상 기능들의 제1 가상 기능을 실행하도록 상기 게스트 VM들 중 상기 제1 게스트 VM을 스케줄링하도록 구성된 스케줄러를 더 포함하는, 처리 유닛.
예시 6: 예시 5에 있어서, 상기 하이퍼바이저는 상기 제1 시간 인터벌 동안 상기 레지스터 세트의 제1 서브세트에 대한 상기 제1 게스트 VM 액세스를 부여하고, 상기 하이퍼바이저는 상기 제1 시간 인터벌 동안 상기 레지스터 세트에 대한 스케줄링되지 않은 게스트 VM들 액세스를 거부하는, 처리 유닛.
예시 7: 예시 6에 있어서, 상기 고정 기능 하드웨어 블록은 상기 레지스터 세트의 상기 제1 서브세트의 제1 컨텍스트 레지스터에 저장된 정보에 기초하여 상기 제1 가상 기능을 실행하도록 구성되는, 처리 유닛.
예시 8: 예시 7에 있어서, 상기 제1 가상 기능을 구현하는데 사용되는 멀티미디어 기능(multimedia functionality)의 펌웨어 이미지 및 사용자 모드 드라이버 중 적어도 하나는 상기 고정 기능 하드웨어 블록에 설치되는, 처리 유닛.
예시 9: 예시 7에 있어서, 상기 제1 게스트 VM은 상기 제1 게스트 VM이 실행을 위해 스케줄링될 준비가 되었음을 상기 스케줄러에 신호하기 위해 정보를 상기 제1 서브세트의 도어벨 레지스터에 기록하는, 처리 유닛.
예시 10: 예시 9에 있어서, 상기 제1 게스트 VM은 상기 게스트 VM과 연관된 우선순위 및 스케줄링될 준비가 된 다른 게스트 VM들과 연관된 다른 우선순위에 기초하여 스케줄링되는, 처리 유닛.
예시 11: 예시 9에 있어서, 상기 제1 게스트 VM은 상기 제1 시간 인터벌 동안 상기 제1 가상 기능을 사용하여 상기 제1 서브세트의 프레임 버퍼에 저장된 프레임들에 대해 그래픽 렌더링(graphics rendering)을 수행하는, 처리 유닛.
예시 12: 예시 11에 있어서, 상기 제1 게스트 VM은 상기 제1 시간 인터벌 동안 실행 완료에 응답하여 상기 하이퍼바이저에 통지하고, 상기 제1 서브세트의 상기 도어벨 레지스터는 상기 제1 시간 간격 동안 실행 완료에 응답하여 클리어되는(cleared), 처리 유닛.
예시 13: 방법에 있어서,
하이퍼바이저에서 그리고 처리 유닛에서 실행되는 제1 게스트 가상 머신(VM)으로부터, 상기 처리 유닛의 고정 기능 하드웨어 블록에 구현된 물리적 기능에 대응하는 제1 가상 기능에 대한 액세스 요청을 수신하는 단계;
상기 하이퍼바이저로부터 그리고 상기 제1 게스트 VM에 대해, 상기 처리 유닛의 레지스터 세트의 제1 서브세트에 대한 액세스를 부여하는 단계-여기서, 상기 제1 서브세트는 상기 제1 가상 기능과 연관된 정보를 저장 함-;
상기 제1 서브세트에 저장된 상기 정보에 기초하여 상기 제1 게스트 VM에 대한 상기 제1 가상 기능을 실행하도록 상기 고정 기능 하드웨어 블록을 구성하는 단계; 및
상기 제1 게스트 VM을 사용하여, 상기 제1 가상 기능을 구현하도록 구성된 상기 고정 기능 하드웨어 블록을 사용하여 상기 제1 서브세트에 저장된 프레임들에 대해 그래픽 렌더링을 수행하는 단계를 포함하는, 방법.
예시 14: 예시 13에 있어서,
상기 레지스터 세트를 상기 가상 기능들에 할당된 공간의 최대량에 대응하는 다수의 서브세트들로 분할하는 단계를 더 포함하는, 방법.
예시 15: 예시 13에 있어서,
상기 레지스터 세트를 상기 가상 기능들에 할당된 공간의 최소량에 대응하는 다수의 서브세트들로 분할하는 단계; 및
상기 서브세트들의 수를 상기 가상 기능들의 속성에 기초하여 수정하는 단계를 더 포함하는, 방법.
예시 16: 예시 13 내지 예시 15 중 어느 하나 있어서, 상기 레지스터 세트의 상기 제1 서브세트는 상기 가상 기능에 의해 작동되는 프레임들을 저장하기 위한 프레임 버퍼, 상기 가상 기능의 작동 상태를 정의하기 위한 컨텍스트 레지스터들, 및 상기 가상 기능이 실행을 위해 스케줄링될 준비가 되었음을 신호하는 도어벨을 포함하는, 방법.
예시 17: 예시 16에 있어서,
제1 게스트 VM으로부터의 시그널링에 응답하여 제1 시간 인터벌에서 상기 제1 가상 기능을 실행하도록 상기 제1 게스트 VM을 스케줄링하는 단계를 더 포함하는, 방법.
예시 18: 예시 17에 있어서,
상기 하이퍼바이저로부터, 상기 제1 시간 인터벌 동안 상기 레지스터 세트의 제1 서브세트에 대한 상기 제1 게스트 VM 액세스를 부여하는 단계를 더 포함하고, 상기 하이퍼바이저는 상기 제1 시간 인터벌 동안 상기 레지스터 세트의 상기 서브세트들에 대한 스케줄링되지 않은 게스트 VM들 액세스를 거부하는, 방법.
예시 19: 예시 18에 있어서, 상기 제1 가상 기능을 구성하는 단계는 상기 고정 기능 하드웨어 블록 상에서 상기 제1 가상 기능을 구현하는데 사용되는 멀티미디어 기능의 펌웨어 이미지 및 사용자 모드 드라이버 중 적어도 하나를 설치하는 단계를 포함하는, 방법.
예시 20: 예시 18에 있어서,
상기 제1 게스트 VM으로부터, 상기 제1 게스트 VM이 실행을 위해 스케줄링될 준비가 되었음을 신호하기 위해 정보를 상기 제1 서브세트의 상기 도어벨 레지스터에 기록하는 단계를 더 포함하는, 방법.
예시 21: 예시 20에 있어서, 상기 제1 게스트 VM을 스케줄링하는 단계는 상기 도어벨 레지스터로부터 상기 정보를 판독하는 것에 응답하여 상기 제1 게스트 VM을 스케줄링하는 단계를 포함하는, 방법.
예시 22: 예시 21에 있어서, 상기 제1 게스트 VM을 스케줄링하는 단계는 상기 제1 게스트 VM과 연관된 우선순위 및 스케줄링될 준비가 된 다른 게스트 VM들과 연관된 다른 우선순위에 기초하여 상기 제1 게스트 VM을 스케줄링하는 단계를 포함하는, 방법.
예시 23: 예시 21에 있어서, 상기 프레임들에 대해 상기 그래픽 렌더링을 수행하는 단계는 상기 제1 시간 인터벌 동안 상기 제1 가상 기능을 사용하여 상기 제1 서브세트의 프레임 버퍼에 저장된 프레임들에 대해 그래픽 렌더링을 수행하는 단계를 포함하는, 방법.
예시 24: 예시 21에 있어서, 상기 제1 게스트 VM은 상기 제1 시간 인터벌 동안 실행 완료에 응답하여 다른 게스트 VM에 대해 다른 가상 기능이 로딩될 수 있음을 상기 하이퍼바이저에 알리고, 상기 제1 서브세트의 상기 도어벨 레지스터는 상기 제1 시간 인터벌 동안 실행 완료에 응답하여 클리어되는, 방법.
예시 25: 방법에 있어서,
처리 유닛에서 실행되는 제1 게스트 가상 머신(VM)을 사용하여, 상기 처리 유닛에서 구현된 레지스터 세트의 제1 서브세트에 저장된 프레임들에 대해 그래픽 렌더링을 수행하는 단계-여기서 상기 그래픽 렌더링은 상기 제1 서브세트에 저장된 제1 컨텍스트 정보에 기초하여 제1 가상 기능을 구현하도록 구성된 고정 기능 하드웨어 블록에 구현된 물리적 기능에 대응하는 상기 제1 가상 기능을 사용하여 수행 됨-;
하이퍼바이저에서, 상기 물리적 기능에 대응하는 제2 가상 기능에 액세스하기 위한 제2 게스트 VM으로부터의 요청을 검출하는 단계; 및
상기 하이퍼바이저에서 그리고 상기 요청에 응답하여, 상기 제2 가상 기능을 실행하도록 상기 고정 기능 하드웨어 블록을 구성하기 위한 월드 스위치(world switch)를 수행하는 단계를 포함하는, 방법.
예시 26: 예시 25에 있어서, 상기 제2 게스트 VM은 상기 제2 게스트 VM이 스케줄링될 준비가 되었음을 나타내기 위해 상기 레지스터 세트의 제2 서브세트의 도어벨 레지스터에 정보를 기록하고, 상기 요청을 검출하는 단계는 상기 도어벨 레지스터로부터 상기 정보를 판독하는 단계를 포함하는, 방법.
예시 27: 예시 26에 있어서,
상기 요청을 검출하는 것에 응답하여 스케줄링된 시간에 시작하는 시간 인터벌 동안 실행을 위해 상기 제2 게스트 VM을 스케줄링하는 단계를 더 포함하는, 방법.
예시 28: 예시 27에 있어서, 상기 시간 인터벌 동안 실행을 위해 상기 제2 게스트 VM을 스케줄링하는 단계는 상기 시간 인터벌 동안 상기 레지스터 세트에 대한 독점적 액세스를 상기 제2 게스트 VM에 부여하는 단계를 포함하는, 방법.
예시 29: 예시 27에 있어서, 상기 월드 스위치를 수행하는 단계는 상기 스케줄링된 시간에 상기 월드 스위치를 수행하는 단계를 포함하는, 방법.
예시 30: 예시 29에 있어서, 상기 월드 스위치를 수행하는 단계는 상기 레지스터 세트의 상기 제2 서브세트에 저장된 제2 컨텍스트 정보에 기초하여 상기 고정 기능 하드웨어 블록을 구성하는 단계를 포함하는, 방법.
예시 31: 예시 30에 있어서, 상기 고정 기능 하드웨어 블록을 구성하는 단계는 상기 제2 가상 기능을 구현하기 위해 사용되는 멀티미디어 기능의 펌웨어 이미지 및 사용자 모드 드라이버 중 적어도 하나를 설치하는 단계를 포함하는, 방법.
예시 32: 예시 30에 있어서, 상기 제2 게스트 VM을 사용하여, 상기 제2 가상 기능을 사용하여 상기 레지스터 세트의 상기 제2 서브세트에 저장된 프레임들에 대해 그래픽 렌더링을 수행하는 단계를 더 포함하는, 방법.
컴퓨터 판독 가능 저장 매체는 컴퓨터 시스템에 명령어 및/또는 데이터를 제공하기 위해 사용 동안 컴퓨터 시스템에 의해 액세스 가능한 임의의 비일시적 저장 매체 또는 비일시적 저장 매체들의 조합을 포함할 수 있다. 그러한 저장 매체는 광학 매체(예를 들어, 콤팩트 디스크(CD), 디지털 다목적 디스크(DVD), 블루레이 디스크), 자기 매체(예를 들어, 플로피 디스크, 자기 테이프 또는 자기 하드 드라이브), 휘발성 메모리(예를 들어, 랜덤 액세스 메모리(RAM) 또는 캐시), 비휘발성 메모리(예를 들어, 판독 전용 메모리(ROM) 또는 플래시 메모리), 또는 MEMS(microelectromechanical systems) 기반 저장 매체를 포함할 수 있지만 이에 제한되지 않는다. 컴퓨터 판독 가능한 저장 매체는 컴퓨팅 시스템에 내장될 수 있고(예를 들어, 시스템 RAM 또는 ROM), 컴퓨팅 시스템에 고정 부착될 수 있고(예를 들어, 자기 하드 드라이브), 컴퓨팅 시스템에 착탈식으로 부착되거나(예를 들어, 광 디스크 또는 범용 직렬 버스(USB) 기반 플래시 메모리) 유선 또는 무선 네트워크(예를 들어, 네트워크 액세스 가능 스토리지(NAS))를 통해 컴퓨터 시스템에 연결될 수 있다.
일부 실시예에서, 위에서 설명된 기술의 특정 양태는 소프트웨어를 실행하는 처리 시스템의 하나 이상의 프로세서들에 의해 구현될 수 있다. 소프트웨어는 비일시적 컴퓨터 판독 가능 저장 매체에 저장되거나 유형적으로 구현되는 하나 이상의 실행 가능한 명령어 세트를 포함한다. 소프트웨어는 하나 이상의 프로세서에 의해 실행될 때 위에서 설명된 기술의 하나 이상의 양태를 수행하도록 하나 이상의 프로세서들을 조작하는 명령어 및 특정 데이터를 포함할 수 있다. 비일시적 컴퓨터 판독 가능 저장 매체는 예를 들어 자기 또는 광 디스크 저장 디바이스, 플래시 메모리와 같은 솔리드 스테이트 저장 디바이스, 캐시, 랜덤 액세스 메모리(RAM) 또는 기타 비휘발성 메모리 디바이스 또는 디바이스들 등을 포함할 수 있다. 비일시적 컴퓨터 판독 가능 저장 매체에 저장된 실행 가능한 명령어는 소스 코드, 어셈블리 언어 코드, 오브젝트 코드, 또는 하나 이상의 프로세서들에 의해 해석되거나 달리 실행 가능한 다른 명령어 형식일 수 있다.
일반 설명에서 위에서 설명된 모든 활동이나 요소가 필요한 것은 아니고, 특정 활동이나 디바이스의 일부가 필요하지 않을 수 있으며, 설명된 것 외에 하나 이상의 추가 활동이 수행되거나 요소가 포함될 수 있다. 또한, 활동이 나열되는 순서가 반드시 수행되는 순서는 아니다. 또한, 구체적인 실시예를 참조하여 개념을 설명하였다. 그러나, 당업자는 하기 청구범위에 기재된 바와 같은 본 개시내용의 범위를 벗어나지 않고 다양한 수정 및 변경이 이루어질 수 있음을 인식한다. 따라서, 명세서 및 도면은 제한적인 의미가 아니라 예시적인 것으로 간주되어야 하며, 이러한 모든 변형은 본 개시의 범위 내에 포함되도록 의도된다.
이점, 다른 장점, 및 문제에 대한 해결책은 특정 실시예와 관련하여 위에서 설명되었다. 그러나 이점, 장점, 문제에 대한 솔루션 및 이점, 장점 또는 솔루션을 발생시키거나 더욱 두드러지게 할 수 있는 모든 피처(들)은 일부 또는 모든 청구항의 중요한, 요구되는 또는 필수 기능으로 해석되어서는 안 된다. 더욱이, 위에 개시된 특정 실시예는 단지 예시적인 것이며, 개시된 주제는 본원의 교시의 이점을 갖는 당업자에게 명백하지만 상이하지만 동등한 방식으로 수정 및 실시될 수 있다. 아래의 청구범위에 기술된 것 외에는 본원에 도시된 구성 또는 설계의 세부사항에 제한을 두지 않는다. 따라서, 위에 개시된 특정 실시예가 변경 또는 수정될 수 있고 이러한 모든 변형이 개시된 주제의 범위 내에서 고려된다는 것이 명백하다. 따라서, 본원에서 추구하는 보호는 아래의 청구범위에 명시된 바와 같다.
Claims (32)
- 처리 유닛(processing unit)에 있어서,
하이퍼바이저(hypervisor) 및 게스트 가상 머신(VM)들을 실행하도록 구성된 커널 모드 유닛(kernel mode unit);
물리적 기능(physical function)을 구현하도록 구성된 고정 기능 하드웨어 블록-여기서, 상기 물리적 기능에 대응하는 가상 기능들이 상기 게스트 VM들에 노출 됨-; 및
레지스터(register) 세트를 포함하고, 상기 레지스터 세트의 서브세트들은 상기 가상 기능들과 연관된 정보를 저장하도록 할당되고, 상기 고정 기능 하드웨어 블록은 상기 서브세트들의 대응하는 하나에 저장된 상기 정보에 기초하여 상기 게스트 VM들 중 하나에 대한 상기 가상 기능들 중 하나를 실행하는, 처리 유닛. - 제1항에 있어서, 상기 레지스터 세트는 상기 가상 기능들에 할당된 공간의 최대량에 대응하는 다수의 서브세트들로 분할되는, 처리 유닛.
- 제1항에 있어서, 상기 레지스터 세트는 초기에 상기 가상 기능들에 할당된 공간의 최소량에 대응하는 다수의 서브세트들로 분할되고, 상기 서브세트들의 수는 상기 가상 기능들의 속성에 기초하여 후속적으로 수정되는, 처리 유닛.
- 제1항 내지 제3항 중 어느 한 항에 있어서, 상기 레지스터 세트의 각각의 서브세트는 상기 서브세트와 연관된 상기 가상 기능에 의해 작동되는 프레임들을 저장하기 위한 프레임 버퍼(frame buffer), 상기 가상 기능의 작동 상태를 정의하기 위한 컨텍스트 레지스터들, 상기 가상 기능들이 실행을 위해 스케줄링될 준비가 되었음을 신호하는 도어벨(doorbell)을 포함하는, 처리 유닛.
- 제4항에 있어서,
제1 게스트 VM으로부터의 시그널링에 응답하여 제1 시간 인터벌(interval)로 상기 가상 기능들의 제1 가상 기능을 실행하도록 상기 게스트 VM들 중 상기 제1 게스트 VM을 스케줄링하도록 구성된 스케줄러를 더 포함하는, 처리 유닛. - 제5항에 있어서, 상기 하이퍼바이저는 상기 제1 시간 인터벌 동안 상기 레지스터 세트의 제1 서브세트에 대한 상기 제1 게스트 VM 액세스를 부여하고, 상기 하이퍼바이저는 상기 제1 시간 인터벌 동안 상기 레지스터 세트에 대한 스케줄링되지 않은 게스트 VM들 액세스를 거부하는, 처리 유닛.
- 제6항에 있어서, 상기 고정 기능 하드웨어 블록은 상기 레지스터 세트의 상기 제1 서브세트의 제1 컨텍스트 레지스터에 저장된 정보에 기초하여 상기 제1 가상 기능을 실행하도록 구성되는, 처리 유닛.
- 제7항에 있어서, 상기 제1 가상 기능을 구현하는데 사용되는 멀티미디어 기능(multimedia functionality)의 펌웨어 이미지 및 사용자 모드 드라이버 중 적어도 하나는 상기 고정 기능 하드웨어 블록에 설치되는, 처리 유닛.
- 제7항에 있어서, 상기 제1 게스트 VM은 상기 제1 게스트 VM이 실행을 위해 스케줄링될 준비가 되었음을 상기 스케줄러에 신호하기 위해 정보를 상기 제1 서브세트의 도어벨 레지스터에 기록하는, 처리 유닛.
- 제9항에 있어서, 상기 제1 게스트 VM은 상기 게스트 VM과 연관된 우선순위 및 스케줄링될 준비가 된 다른 게스트 VM들과 연관된 다른 우선순위에 기초하여 스케줄링되는, 처리 유닛.
- 제9항에 있어서, 상기 제1 게스트 VM은 상기 제1 시간 인터벌 동안 상기 제1 가상 기능을 사용하여 상기 제1 서브세트의 프레임 버퍼에 저장된 프레임들에 대해 그래픽 렌더링(graphics rendering)을 수행하는, 처리 유닛.
- 제11항에 있어서, 상기 제1 게스트 VM은 상기 제1 시간 인터벌 동안 실행 완료에 응답하여 상기 하이퍼바이저에 통지하고, 상기 제1 서브세트의 상기 도어벨 레지스터는 상기 제1 시간 간격 동안 실행 완료에 응답하여 클리어되는(cleared), 처리 유닛.
- 방법에 있어서,
하이퍼바이저에서 그리고 처리 유닛에서 실행되는 제1 게스트 가상 머신(VM)으로부터, 상기 처리 유닛의 고정 기능 하드웨어 블록에 구현된 물리적 기능에 대응하는 제1 가상 기능에 대한 액세스 요청을 수신하는 단계;
상기 하이퍼바이저로부터 그리고 상기 제1 게스트 VM에 대해, 상기 처리 유닛의 레지스터 세트의 제1 서브세트에 대한 액세스를 부여하는 단계-여기서, 상기 제1 서브세트는 상기 제1 가상 기능과 연관된 정보를 저장 함-;
상기 제1 서브세트에 저장된 상기 정보에 기초하여 상기 제1 게스트 VM에 대한 상기 제1 가상 기능을 실행하도록 상기 고정 기능 하드웨어 블록을 구성하는 단계; 및
상기 제1 게스트 VM을 사용하여, 상기 제1 가상 기능을 구현하도록 구성된 상기 고정 기능 하드웨어 블록을 사용하여 상기 제1 서브세트에 저장된 프레임들에 대해 그래픽 렌더링을 수행하는 단계를 포함하는, 방법. - 제13항에 있어서,
상기 레지스터 세트를 상기 가상 기능들에 할당된 공간의 최대량에 대응하는 다수의 서브세트들로 분할하는 단계를 더 포함하는, 방법. - 제13항에 있어서,
상기 레지스터 세트를 상기 가상 기능들에 할당된 공간의 최소량에 대응하는 다수의 서브세트들로 분할하는 단계; 및
상기 서브세트들의 수를 상기 가상 기능들의 속성에 기초하여 수정하는 단계를 더 포함하는, 방법. - 제13항 내지 제15항 중 어느 한 항에 있어서, 상기 레지스터 세트의 상기 제1 서브세트는 상기 가상 기능에 의해 작동되는 프레임들을 저장하기 위한 프레임 버퍼, 상기 가상 기능의 작동 상태를 정의하기 위한 컨텍스트 레지스터들, 및 상기 가상 기능이 실행을 위해 스케줄링될 준비가 되었음을 신호하는 도어벨을 포함하는, 방법.
- 제16항에 있어서,
제1 게스트 VM으로부터의 시그널링에 응답하여 제1 시간 인터벌에서 상기 제1 가상 기능을 실행하도록 상기 제1 게스트 VM을 스케줄링하는 단계를 더 포함하는, 방법. - 제17항에 있어서,
상기 하이퍼바이저로부터, 상기 제1 시간 인터벌 동안 상기 레지스터 세트의 제1 서브세트에 대한 상기 제1 게스트 VM 액세스를 부여하는 단계를 더 포함하고, 상기 하이퍼바이저는 상기 제1 시간 인터벌 동안 상기 레지스터 세트의 상기 서브세트들에 대한 스케줄링되지 않은 게스트 VM들 액세스를 거부하는, 방법. - 제18항에 있어서, 상기 제1 가상 기능을 구성하는 단계는 상기 고정 기능 하드웨어 블록 상에서 상기 제1 가상 기능을 구현하는데 사용되는 멀티미디어 기능의 펌웨어 이미지 및 사용자 모드 드라이버 중 적어도 하나를 설치하는 단계를 포함하는, 방법.
- 제18항에 있어서,
상기 제1 게스트 VM으로부터, 상기 제1 게스트 VM이 실행을 위해 스케줄링될 준비가 되었음을 신호하기 위해 정보를 상기 제1 서브세트의 상기 도어벨 레지스터에 기록하는 단계를 더 포함하는, 방법. - 제20항에 있어서, 상기 제1 게스트 VM을 스케줄링하는 단계는 상기 도어벨 레지스터로부터 상기 정보를 판독하는 것에 응답하여 상기 제1 게스트 VM을 스케줄링하는 단계를 포함하는, 방법.
- 제21항에 있어서, 상기 제1 게스트 VM을 스케줄링하는 단계는 상기 제1 게스트 VM과 연관된 우선순위 및 스케줄링될 준비가 된 다른 게스트 VM들과 연관된 다른 우선순위에 기초하여 상기 제1 게스트 VM을 스케줄링하는 단계를 포함하는, 방법.
- 제21항에 있어서, 상기 프레임들에 대해 상기 그래픽 렌더링을 수행하는 단계는 상기 제1 시간 인터벌 동안 상기 제1 가상 기능을 사용하여 상기 제1 서브세트의 프레임 버퍼에 저장된 프레임들에 대해 그래픽 렌더링을 수행하는 단계를 포함하는, 방법.
- 제21항에 있어서, 상기 제1 게스트 VM은 상기 제1 시간 인터벌 동안 실행 완료에 응답하여 다른 게스트 VM에 대해 다른 가상 기능이 로딩될 수 있음을 상기 하이퍼바이저에 알리고, 상기 제1 서브세트의 상기 도어벨 레지스터는 상기 제1 시간 인터벌 동안 실행 완료에 응답하여 클리어되는, 방법.
- 방법에 있어서,
처리 유닛에서 실행되는 제1 게스트 가상 머신(VM)을 사용하여, 상기 처리 유닛에서 구현된 레지스터 세트의 제1 서브세트에 저장된 프레임들에 대해 그래픽 렌더링을 수행하는 단계-여기서 상기 그래픽 렌더링은 상기 제1 서브세트에 저장된 제1 컨텍스트 정보에 기초하여 제1 가상 기능을 구현하도록 구성된 고정 기능 하드웨어 블록에 구현된 물리적 기능에 대응하는 상기 제1 가상 기능을 사용하여 수행 됨-;
하이퍼바이저에서, 상기 물리적 기능에 대응하는 제2 가상 기능에 액세스하기 위한 제2 게스트 VM으로부터의 요청을 검출하는 단계; 및
상기 하이퍼바이저에서 그리고 상기 요청에 응답하여, 상기 제2 가상 기능을 실행하도록 상기 고정 기능 하드웨어 블록을 구성하기 위한 월드 스위치(world switch)를 수행하는 단계를 포함하는, 방법. - 제25항에 있어서, 상기 제2 게스트 VM은 상기 제2 게스트 VM이 스케줄링될 준비가 되었음을 나타내기 위해 상기 레지스터 세트의 제2 서브세트의 도어벨 레지스터에 정보를 기록하고, 상기 요청을 검출하는 단계는 상기 도어벨 레지스터로부터 상기 정보를 판독하는 단계를 포함하는, 방법.
- 제26항에 있어서,
상기 요청을 검출하는 것에 응답하여 스케줄링된 시간에 시작하는 시간 인터벌 동안 실행을 위해 상기 제2 게스트 VM을 스케줄링하는 단계를 더 포함하는, 방법. - 제27항에 있어서, 상기 시간 인터벌 동안 실행을 위해 상기 제2 게스트 VM을 스케줄링하는 단계는 상기 시간 인터벌 동안 상기 레지스터 세트에 대한 독점적 액세스를 상기 제2 게스트 VM에 부여하는 단계를 포함하는, 방법.
- 제27항에 있어서, 상기 월드 스위치를 수행하는 단계는 상기 스케줄링된 시간에 상기 월드 스위치를 수행하는 단계를 포함하는, 방법.
- 제29항에 있어서, 상기 월드 스위치를 수행하는 단계는 상기 레지스터 세트의 상기 제2 서브세트에 저장된 제2 컨텍스트 정보에 기초하여 상기 고정 기능 하드웨어 블록을 구성하는 단계를 포함하는, 방법.
- 제30항에 있어서, 상기 고정 기능 하드웨어 블록을 구성하는 단계는 상기 제2 가상 기능을 구현하기 위해 사용되는 멀티미디어 기능의 펌웨어 이미지 및 사용자 모드 드라이버 중 적어도 하나를 설치하는 단계를 포함하는, 방법.
- 제30항에 있어서,
상기 제2 게스트 VM을 사용하여, 상기 제2 가상 기능을 사용하여 상기 레지스터 세트의 상기 제2 서브세트에 저장된 프레임들에 대해 그래픽 렌더링을 수행하는 단계를 더 포함하는, 방법.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/453,664 US20200409732A1 (en) | 2019-06-26 | 2019-06-26 | Sharing multimedia physical functions in a virtualized environment on a processing unit |
US16/453,664 | 2019-06-26 | ||
PCT/IB2020/056031 WO2020261180A1 (en) | 2019-06-26 | 2020-06-25 | Sharing multimedia physical functions in a virtualized environment on a processing unit |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20220024023A true KR20220024023A (ko) | 2022-03-03 |
Family
ID=74043034
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020217040812A KR20220024023A (ko) | 2019-06-26 | 2020-06-25 | 처리 유닛의 가상화된 환경에서 멀티미디어 물리적 기능 공유 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20200409732A1 (ko) |
EP (1) | EP3991032A4 (ko) |
JP (1) | JP2022538976A (ko) |
KR (1) | KR20220024023A (ko) |
CN (1) | CN114008588A (ko) |
WO (1) | WO2020261180A1 (ko) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102556413B1 (ko) * | 2022-10-11 | 2023-07-17 | 시큐레터 주식회사 | 세마포어를 이용한 가상화 머신 관리 방법 및 이를 위한 장치 |
WO2024034752A1 (ko) * | 2022-08-09 | 2024-02-15 | 엘지전자 주식회사 | 신호 처리 장치, 및 이를 구비하는 차량용 증강현실 장치 |
WO2024112965A1 (en) * | 2022-11-24 | 2024-05-30 | Molex, Llc | Systems and methods for entering and exiting low power mode for aggregator-disaggregator |
Families Citing this family (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109032978A (zh) * | 2018-05-31 | 2018-12-18 | 郑州云海信息技术有限公司 | 一种基于bmc的文件传输方法、装置、设备及介质 |
US10699269B1 (en) * | 2019-05-24 | 2020-06-30 | Blockstack Pbc | System and method for smart contract publishing |
US20200183729A1 (en) * | 2019-10-31 | 2020-06-11 | Xiuchun Lu | Evolving hypervisor pass-through device to be consistently platform-independent by mediated-device in user space (muse) |
US20210165673A1 (en) * | 2019-12-02 | 2021-06-03 | Microsoft Technology Licensing, Llc | Enabling shared graphics and compute hardware acceleration in a virtual environment |
GB2593730B (en) * | 2020-03-31 | 2022-03-30 | Imagination Tech Ltd | Hypervisor removal |
US20220050702A1 (en) * | 2020-08-17 | 2022-02-17 | Advanced Micro Devices, Inc. | Virtualization for audio capture |
US12039356B2 (en) * | 2021-01-06 | 2024-07-16 | Baidu Usa Llc | Method for virtual machine migration with checkpoint authentication in virtualization environment |
US12086620B2 (en) * | 2021-01-06 | 2024-09-10 | Kunlunxin Technology (Beijing) Company Limited | Method for virtual machine migration with artificial intelligence accelerator status validation in virtualization environment |
CN112764877B (zh) * | 2021-01-06 | 2024-04-26 | 北京中科通量科技有限公司 | 一种用于硬件加速设备与docker内进程通信的方法与系统 |
KR102568906B1 (ko) * | 2021-04-13 | 2023-08-21 | 에스케이하이닉스 주식회사 | PCIe 디바이스 및 그 동작 방법 |
KR102570943B1 (ko) | 2021-04-13 | 2023-08-28 | 에스케이하이닉스 주식회사 | PCIe 디바이스 및 그 동작 방법 |
US11928070B2 (en) | 2021-04-13 | 2024-03-12 | SK Hynix Inc. | PCIe device |
TWI790615B (zh) * | 2021-05-14 | 2023-01-21 | 宏碁股份有限公司 | 虛擬機的裝置直通方法及其伺服器 |
CN115640116B (zh) * | 2021-12-14 | 2024-03-26 | 荣耀终端有限公司 | 业务处理方法和相关装置 |
CN115576645B (zh) * | 2022-09-29 | 2024-03-08 | 中汽创智科技有限公司 | 一种虚拟处理器调度方法、装置、存储介质及电子设备 |
WO2024094311A1 (en) * | 2022-11-04 | 2024-05-10 | Robert Bosch Gmbh | Video data processing arrangement, process for managing video data, computer program and computer program product |
WO2024094312A1 (en) * | 2022-11-04 | 2024-05-10 | Robert Bosch Gmbh | Video data processing arrangement, process for managing video data, computer program and computer program product |
CN115714879B (zh) * | 2022-11-17 | 2024-10-08 | 展讯通信(上海)有限公司 | 数据解码方法、装置、设备及存储介质 |
US20240168785A1 (en) * | 2022-11-22 | 2024-05-23 | Ati Technologies Ulc | Remote desktop composition |
US20240211309A1 (en) * | 2022-12-21 | 2024-06-27 | Ati Technologies Ulc | Multi-level scheduling for improved quality of service |
CN115904634B (zh) * | 2023-01-17 | 2023-08-15 | 北京象帝先计算技术有限公司 | 资源管理方法、系统级芯片、电子组件及电子设备 |
CN116521376B (zh) * | 2023-06-29 | 2023-11-21 | 南京砺算科技有限公司 | 物理显卡的资源调度方法及装置、存储介质、终端 |
CN117196929B (zh) * | 2023-09-25 | 2024-03-08 | 沐曦集成电路(上海)有限公司 | 基于定长数据包的软硬件交互系统 |
CN117176963B (zh) * | 2023-11-02 | 2024-01-23 | 摩尔线程智能科技(北京)有限责任公司 | 一种虚拟化视频编解码系统及方法、电子设备和存储介质 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5812789A (en) * | 1996-08-26 | 1998-09-22 | Stmicroelectronics, Inc. | Video and/or audio decompression and/or compression device that shares a memory interface |
US8837601B2 (en) * | 2010-12-10 | 2014-09-16 | Netflix, Inc. | Parallel video encoding based on complexity analysis |
US8954704B2 (en) * | 2011-08-12 | 2015-02-10 | International Business Machines Corporation | Dynamic network adapter memory resizing and bounding for virtual function translation entry storage |
US10310879B2 (en) * | 2011-10-10 | 2019-06-04 | Nvidia Corporation | Paravirtualized virtual GPU |
US20130174144A1 (en) * | 2011-12-28 | 2013-07-04 | Ati Technologies Ulc | Hardware based virtualization system |
US9298490B2 (en) * | 2012-12-20 | 2016-03-29 | Vmware, Inc. | Managing a data structure for allocating graphics processing unit resources to virtual machines |
US9910689B2 (en) * | 2013-11-26 | 2018-03-06 | Dynavisor, Inc. | Dynamic single root I/O virtualization (SR-IOV) processes system calls request to devices attached to host |
CN106406977B (zh) * | 2016-08-26 | 2019-06-11 | 山东乾云启创信息科技股份有限公司 | 一种gpu虚拟化实现系统及方法 |
CN109690505B (zh) * | 2016-09-26 | 2023-08-08 | 英特尔公司 | 用于针对虚拟化输入/输出实施方式的混合层地址映射的设备和方法 |
US10109099B2 (en) * | 2016-09-29 | 2018-10-23 | Intel Corporation | Method and apparatus for efficient use of graphics processing resources in a virtualized execution enviornment |
CN107977251B (zh) * | 2016-10-21 | 2023-10-27 | 超威半导体(上海)有限公司 | 对在虚拟化系统中的共享寄存器的排他访问 |
US10908939B2 (en) * | 2017-01-31 | 2021-02-02 | Intel Corporation | Efficient fine grained processing of graphics workloads in a virtualized environment |
US10509666B2 (en) | 2017-06-29 | 2019-12-17 | Ati Technologies Ulc | Register partition and protection for virtualized processing device |
-
2019
- 2019-06-26 US US16/453,664 patent/US20200409732A1/en active Pending
-
2020
- 2020-06-25 WO PCT/IB2020/056031 patent/WO2020261180A1/en unknown
- 2020-06-25 EP EP20833653.7A patent/EP3991032A4/en active Pending
- 2020-06-25 KR KR1020217040812A patent/KR20220024023A/ko unknown
- 2020-06-25 JP JP2021573415A patent/JP2022538976A/ja active Pending
- 2020-06-25 CN CN202080043035.7A patent/CN114008588A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024034752A1 (ko) * | 2022-08-09 | 2024-02-15 | 엘지전자 주식회사 | 신호 처리 장치, 및 이를 구비하는 차량용 증강현실 장치 |
WO2024034751A1 (ko) * | 2022-08-09 | 2024-02-15 | 엘지전자 주식회사 | 신호 처리 장치, 및 이를 구비하는 차량용 증강현실 장치 |
KR102556413B1 (ko) * | 2022-10-11 | 2023-07-17 | 시큐레터 주식회사 | 세마포어를 이용한 가상화 머신 관리 방법 및 이를 위한 장치 |
WO2024112965A1 (en) * | 2022-11-24 | 2024-05-30 | Molex, Llc | Systems and methods for entering and exiting low power mode for aggregator-disaggregator |
Also Published As
Publication number | Publication date |
---|---|
WO2020261180A1 (en) | 2020-12-30 |
EP3991032A4 (en) | 2023-07-12 |
US20200409732A1 (en) | 2020-12-31 |
EP3991032A1 (en) | 2022-05-04 |
JP2022538976A (ja) | 2022-09-07 |
CN114008588A (zh) | 2022-02-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20200409732A1 (en) | Sharing multimedia physical functions in a virtualized environment on a processing unit | |
US20240345865A1 (en) | Techniques for virtual machine transfer and resource management | |
US9940263B2 (en) | VM inter-process communication | |
US9600339B2 (en) | Dynamic sharing of unused bandwidth capacity of virtualized input/output adapters | |
EP2622461B1 (en) | Shared memory between child and parent partitions | |
EP3304292B1 (en) | Container access to graphics processing unit resources | |
US7421533B2 (en) | Method to manage memory in a platform with virtual machines | |
US8874802B2 (en) | System and method for reducing communication overhead between network interface controllers and virtual machines | |
US8453148B1 (en) | Method and system for image sequence transfer scheduling and restricting the image sequence generation | |
US9135080B2 (en) | Dynamically assigning a portion of physical computing resource to logical partitions based on characteristics of executing logical partitions | |
US9798565B2 (en) | Data processing system and method having an operating system that communicates with an accelerator independently of a hypervisor | |
US10310879B2 (en) | Paravirtualized virtual GPU | |
JP5608243B2 (ja) | 仮想化環境においてi/o処理を行う方法および装置 | |
WO2017024783A1 (zh) | 一种虚拟化方法、装置和系统 | |
US20120054740A1 (en) | Techniques For Selectively Enabling Or Disabling Virtual Devices In Virtual Environments | |
US10659534B1 (en) | Memory sharing for buffered macro-pipelined data plane processing in multicore embedded systems | |
KR20070100367A (ko) | 하나의 가상 머신에서 다른 가상 머신으로 메모리를동적으로 재할당하기 위한 방법, 장치 및 시스템 | |
JP2006190281A (ja) | グラフィックサブシステムを仮想化するシステムおよび方法 | |
US20190258503A1 (en) | Method for operating virtual machines on a virtualization platform and corresponding virtualization platform | |
CN112352221A (zh) | 用以支持虚拟化环境中的ssd设备驱动器与物理ssd之间的sq/cq对通信的快速传输的共享存储器机制 | |
US20240211291A1 (en) | Budget-based time slice assignment for multiple virtual functions | |
US20170097836A1 (en) | Information processing apparatus | |
Lee | VAR: Vulkan API Remoting for GPU-accelerated Rendering and Computation in Virtual Machines | |
CN115827147A (zh) | 经由领域隔离进行的逻辑资源分区操作 |