KR102202258B1 - 가상 머신을 위한 그래픽처리장치의 할당 - Google Patents

가상 머신을 위한 그래픽처리장치의 할당 Download PDF

Info

Publication number
KR102202258B1
KR102202258B1 KR1020197009001A KR20197009001A KR102202258B1 KR 102202258 B1 KR102202258 B1 KR 102202258B1 KR 1020197009001 A KR1020197009001 A KR 1020197009001A KR 20197009001 A KR20197009001 A KR 20197009001A KR 102202258 B1 KR102202258 B1 KR 102202258B1
Authority
KR
South Korea
Prior art keywords
gpu
host
allocation
processing unit
managing
Prior art date
Application number
KR1020197009001A
Other languages
English (en)
Other versions
KR20190044097A (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 KR20190044097A publication Critical patent/KR20190044097A/ko
Application granted granted Critical
Publication of KR102202258B1 publication Critical patent/KR102202258B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5083Techniques for rebalancing the load in a distributed system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5083Techniques for rebalancing the load in a distributed system
    • G06F9/5088Techniques for rebalancing the load in a distributed system involving task migration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/4557Distribution of virtual machine instances; Migration and load balancing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45575Starting, stopping, suspending or resuming virtual machine instances
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45579I/O management, e.g. providing access to device drivers or storage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4411Configuring for operating with peripheral devices; Loading of device drivers

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

본 개시는 가상 머신(VM)을 위한 그래픽처리장치(GPU) 할당을 관리하기 위한 시스템, 방법, 및 컴퓨터 판독가능 매체를 제공한다. 제1 GPU와 연관된 제1 GPU 드라이버가 VM의 운영체제(OS)로부터 오프로딩된다. 그런 다음, 제1 GPU가 VM으로부터 할당 해제된다. 제2 GPU가 VM에 할당되고, 제2 GPU와 연관된 제2 GPU 드라이버가 VM의 OS에 로딩된다. 제2 GPU 내부에서 제1 GPU로부터의 GPU 콘텍스트를 복원하기 위해, 제1 GPU로부터의 GPU 명령 로그가 제2 GPU에 재생된다.

Description

가상 머신을 위한 그래픽처리장치의 할당
본 개시는 일반적으로 가상 머신 관리에 관한 것으로, 더 구체적으로는 가상 머신에 그래픽처리장치를 할당하기 위한 기술에 관한 것이다.
가상화(Virtualization)는 호스트 컴퓨팅 시스템에서 가상 머신(virtual machine, VM)이라고 하는 하나 이상의 격리된 사용자 공간 인스턴스(user-space instance)를 실행하기 위한 기술이다. 특정한 호스트 컴퓨팅 시스템이 주어진 시간에 복수의 VM을 실행할 수 있다. 각각의 VM은 컴퓨팅 자원(VM에 할당된 하드웨어 상에서 특정 운영체제(OS)를 실행하기 위해 프로세서 사이클과 메모리 등을 포함하는 컴퓨팅 자원)의 각각의 양을 할당 받고, 특정 소프트웨어 세트를 실행하도록 구성된다.
사용 중, 호스트 컴퓨팅 시스템은 VM 사용자에게 투명하며, VM은 적절한 개수의 애플리케이션을 실행하는 데 사용될 수 있다. 경우에 따라, VM은 그래픽처리장치(graphics processing unit, GPU)에 대한 접근하는 이점을 얻을 수 있는 하나 이상의 그래픽 집약적(graphically-intensive)이거나 또는 특히 병렬화된 애플리케이션을 실행할 수 있다. 독립형 컴퓨터(즉, VM이 아닌 컴퓨터)는 다양한 하드웨어 컴포넌트와 직접 인터페이스할 수 있지만, 일반적으로 VM에는 가상화된 하드웨어 또는 인터페이스, 예를 들어 하이퍼 바이저가 제공되며, VM의 OS는 하이퍼 바이저를 통해 특정 하드웨어 엘리먼트에 액세스할 수 있다.
하이퍼바이저를 통해 VM에 GPU 액세스를 제공하는 VM 기술은, 마이그레이션의 경우 하이퍼바이저가 원래의 GPU로 향하는 통신을 다른 GPU로 리디렉션할 수 있으므로 유연하다. 하지만, VM용 하이퍼 바이저 기반의 GPU 액세스는 일반적으로 심각한 성능 제한을 초래한다. GPU 패스스루(GPU passthrough)라고 불리는 대안적인 기술은, 하이퍼바이저 또는 다른 인터페이스를 우회하여 VM에 하나 이상의 GPU 자원을 할당하며, VM OS 내부에서 GPU용 드라이버를 실행한다. 하지만, GPU 패스스루는 예를 들어 한 호스트에서 다른 호스트로 VM을 마이그레이션하는 것과 관련하여 훨씬 유연성이 떨어진다.
이와 같이, 인터페이스되는 GPU 액세스의 유연성과 GPU 패스스루의 성능 양쪽으로 GPU 자원에 대한 액세스가 VM에 제공될 필요가 있다.
본 개시는 가상 머신(virtual machine, VM)을 위한 그래픽처리장치(graphics processing unit, GPU) 할당을 관리하기 위한 시스템, 방법, 및 컴퓨터 판독가능 매체를 제공한다. 제1 GPU와 연관된 제1 GPU 드라이버가 VM의 운영체제(operating system, OS)로부터 오프로딩된다. 그런 다음, 제1 GPU가 VM으로부터 할당 해제된다. 제2 GPU가 VM에 할당되고, 제2 GPU와 연관된 제2 GPU 드라이버가 VM의 OS에 로딩된다. 제2 GPU 내부에서 제1 GPU로부터의 GPU 콘텍스트를 복원하기 위해, 제1 GPU로부터의 GPU 명령 로그가 제2 GPU에 다시 재생된다.
넓은 양태에 따라, 가상 머신(VM)을 위한 그래픽처리장치(GPU) 할당을 관리하기 위한 방법이 제공된다. 상기 방법은, VM의 운영체제(OS)로부터, 제1 GPU와 연관된 제1 그래픽처리장치(GPU) 드라이버를 오프로딩하는 단계; VM으로부터 제1 GPU를 할당 해제하는 단계; 제2 GPU를 VM에 할당하는 단계; 제2 GPU와 연관된 제2 GPU 드라이버를 VM의 OS에 로딩하는 단계; 및 제2 GPU 내부에서 제1 GPU로부터의 GPU 콘텍스트를 복원하기 위해 제1 GPU로부터 제2 GPU에 GPU 명령 로그를 재생하는 단계를 포함한다.
일부 실시예에서, 상기 방법은 섀도 라이브러리로 적어도 하나의 GPU API 명령을 로깅하여 제1 GPU에 대한 GPU 명령 로그를 기록하는 단계를 더 포함한다.
일부 실시예에서, 상기 섀도 라이브러리로 적어도 하나의 GPU API 명령을 로깅하는 것은, 사용자 모드 드라이버를 통해 적어도 하나의 GPU API 명령을 로깅하는 것을 포함한다.
일부 실시예에서, 상기 섀도 라이브러리로 적어도 하나의 GPU API 명령을 로깅하는 것은, 커널 모드 드라이버를 통해 적어도 하나의 GPU API 명령을 로깅하는 것을 포함한다.
일부 실시예에서, 상기 방법은 제1 호스트에서 제2 호스트로 VM을 마이그레이션하는 단계를 더 포함한다.
일부 실시예에서, 제1 GPU는 제1 호스트와 연관되고, 제2 GPU는 제2 호스트와 연관된다.
일부 실시예에서, 제1 GPU와 제2 GPU는 공통 호스트와 연관된다.
일부 실시예에서, 제1 GPU와 제2 GPU 중 적어도 하나는 VM의 호스트의 외부에 있는 GPU 뱅크와 연관된다.
일부 실시예에서, 상기 제2 GPU에 대한 GPU 명령 로그를 재생하는 것은, 미래의 프레임에 영향을 주기 위해 사전에 결정된 적어도 하나의 GPU 명령을 재생하는 것을 포함한다.
일부 실시예에서, 제1 GPU와 제2 GPU 중 적어도 하나는 가상화된 GPU이다.
다른 광범위한 양태에 따르면, VM을 위한 GPU 할당을 관리하기 위한 시스템이 제공된다. 상기 시스템은 처리 유닛, 및 상기 처리 유닛에 통신하도록 연결되고 컴퓨터 판독가능 프로그램 명령을 포함하는 비일시적 메모리를 포함한다. 상기 프로그램 명령은 처리 유닛에 의해 실행 가능하며, 상기 프로그램 명령은 VM의 운영체제(OS)로부터 제1 GPU와 연관된 제1 그래픽처리장치(GPU) 드라이버를 오프로딩하고; VM으로부터 제1 GPU를 할당 해제하며; 제2 GPU를 VM에 할당하고; 제2 GPU와 연관된 제2 GPU 드라이버를 VM의 OS에 로딩하며; 제2 GPU 내부에서 제1 GPU로부터의 GPU 콘텍스트를 복원하기 위해 제1 GPU로부터 제2 GPU에 GPU 명령 로그를 재생한다.
일부 실시예에서, 상기 컴퓨터 판독가능 프로그램 명령은 추가적으로, 상기 처리 유닛에 의해 실행 가능하며, 상기 처리 유닛은 섀도 라이브러리로 적어도 하나의 GPU API 명령을 로깅하여 제1 GPU로부터의 GPU 명령 로그를 기록한다.
일부 실시예에서, 상기 섀도 라이브러리로 적어도 하나의 GPU API 명령을 로깅하는 것은, 사용자 모드 드라이버를 통해 적어도 하나의 GPU API 명령을 로깅하는 것을 포함한다.
일부 실시예에서, 상기 섀도 라이브러리로 적어도 하나의 GPU API 명령을 로깅하는 것은, 커널 모드 드라이버를 통해 적어도 하나의 GPU API 명령을 로깅하는 것을 포함한다.
일부 실시예에서, 상기 컴퓨터 판독가능 프로그램 명령은, 제1 호스트에서 제2 호스트로 VM을 마이그레이션하기 위해 상기 처리 유닛에 의해 추가로 실행 가능하다.
일부 실시예에서, 제1 GPU는 제1 호스트와 연관되고, 제2 GPU는 제2 호스트와 연관된다.
일부 실시예에서, 제1 GPU와 제2 GPU는 공통 호스트와 연관된다.
일부 실시예에서, 제1 GPU와 제2 GPU 중 적어도 하나는 VM의 호스트의 외부에 있는 GPU 뱅크와 연관된다.
일부 실시예에서, 상기 제2 GPU에 대한 GPU 명령 로그를 재생하는 것은, 미래의 프레임에 영향을 주기 위해 사전에 결정된 적어도 하나의 GPU 명령을 재생하는 것을 포함한다.
일부 실시예에서, 제1 GPU와 제2 GPU 중 적어도 하나는 가상화된 GPU이다.
본 명세서에 설명된 상기 시스템, 장치, 및 방법의 특징은 다양한 조합으로 사용될 수 있으며, 또한 다양한 조합으로 상기 시스템과 상기 컴퓨터 판독가능 저장 매체에 사용될 수 있다.
본 명세서에 설명된 실시예의 다른 특징과 이점은 첨부 도면과 함께 다음의 상세한 설명으로부터 명백해질 것이다.
도 1은 예시적인 VM 관리 시스템의 블록도이다.
도 2는 도 1의 예시적인 호스트 머신의 블록도이다.
도 3은 도 1의 VM 관리 시스템의 실시예의 블록도이다.
도 4는 일 실시예에 따른 VM을 위한 GPU 할당을 관리하기 위한 방법의 흐름도이다.
도 5a 내지 도 5e는 도 3의 VM 관리 시스템의 다양한 실시예의 블록도이다.
도 6은 VM 관리 시스템을 구현하기 위한 예시적인 컴퓨터 시스템의 블록도이다.
도 7은 도 4의 VM을 위한 GPU 할당을 관리하기 위한 방법을 구현하기 위한 예시적인 시스템의 블록도이다.
첨부 도면 전체에 걸쳐서, 동일한 특징은 동일한 도면 부호에 의해 식별된다는 것을 알 수 있을 것이다.
그래픽 처리 장치(graphics processing unit, GPU)는 그래픽 집약적 컴퓨터 애플리케이션과 컴퓨팅 분야, 예컨대 암호화와 같은 높은 수준의 병렬 처리가 필요한 분야에서 점점 더 많이 사용되고 있다. 즉, 사무실이나 실험실과 같은 다수의 환경에서, 사용자에게 할당된 하드웨어를 갖는 대신 사용자는 가상화된 사용자 공간 인스턴스(virtualized user-space instance) 또는 가상 머신(virtual machine, VM)를 통해 컴퓨터 자원에 액세스한다. VM과 GPU 자원의 이동성에 대한 유연성을 유지하면서 VM 사용자를 위한 고성능 GPU 자원에 대한 액세스를 제공하기 위해, VM을 위한 GPU 할당을 관리하기 위한 방법이 제안되어 있다. 상기 방법을 이용하면 GPU-패스스루 가상화 설정(GPU-passthrough virtualization setting)에서 VM을 동적으로 마이그레이션하고 GPU 리소스를 동적으로 재할당할 수 있다.
도 1을 참조하면, 일반화된 VM 관리 시스템(100)이 도시되어 있다. VM 관리 시스템(100)은 시스템 컨트롤러(102)를 가지고 있으며, 클러스터라고 하는 하나 이상의 호스트 머신(110, 120, 130)을 포함한다. 각각의 호스트(110, 120, 130)는 각각의 호스트 컨트롤러(112, 122, 132)를 가지고 있으며, 호스트 컨트롤러(112, 122, 132)를 통해 시스템 컨트롤러(102)에 통신하도록 연결된다. 도 1은 3개의 호스트(110, 120, 130)의 클러스터를 도시하고 있지만, 클러스터는 임의의 개수의 호스트 머신을 포함할 수 있다. VM 관리 시스템(100)은 사무실과 실험실 등을 포함한 다양한 설정에서 사용되어 다양한 사용자에게 컴퓨팅 자원을 제공할 수 있다.
도 2를 참조하면, 호스트(110)는 하나 이상의 VM(210, 220, 230)을 지원할 수 있으며, 각각의 VM은 각각의 VM 컨트롤러(212, 222, 232)를 가지고 있다. VM 컨트롤러는 호스트 컨트롤러(112)를 가진 각각의 VM에 대한 통신 인터페이스를 제공한다. 물리적 하드웨어와 가상화된 하드웨어를 포함하는 임의의 적합한 컴퓨터 자원이 VM(210, 220, 230)에 제공될 수 있으며, VM(210, 220, 230)은 하나 이상의 애플리케이션을 실행하기 위해 하나 이상의 사용자에 의해 사용될 수 있다. 일부 실시예에서, VM(210, 220, 230)은 사용자에게 할당된 워크스테이션을 통해 사용자에 의해 액세스되고, 워크스테이션이 사용자로부터, 예컨대 키보드, 마우스, 마이크, 게임패드(gamepad) 등으로부터 입력을 수신하고, 사용자에게 출력, 예컨대 하나 이상의 스크린을 통해 이미지, 하나 이상의 스피커를 통해 사운드, 및 게임패드나 조이스틱 등을 통해 힘 피드백이나 진동을 제공하도록 구성된다. 예를 들어, VM(210, 220, 230)은 복수의 그래픽 엘리멘트를 렌더링하고, 각각의 사용자에게 제공하기 위해 복수의 프레임을 형성한다. 다른 예에서, VM(210, 220, 230)은 다양한 범용 계산을 수행한다. 또 다른 예에서, VM(210, 220, 230)은 그래픽 엘리먼트의 렌더링과 범용 계산을 수행하도록 구성된다.
VM 관리 시스템(300)은 시스템 콘트롤러(302)와 2개의 호스트(310, 320)를 포함한다. 제1 호스트(310)는 GPU(316)를 관리하는 호스트 컨트롤러(312)를 가지고 있다. 제1 호스트(310)는 GPU(316)가 할당된 VM(314)을 또한 호스팅한다. 유사하게, 제2 호스트(320)는 2개의 GPU(326, 328)를 관리하는 호스트 컨트롤러(322)를 가지고 있다. 제2 호스트(310)는 GPU(328)가 할당된 VM(324)을 또한 호스팅한다. VM(314, 324)은 하나 이상의 애플리케이션을 실행할 수 있고, 일부 실시예에서, GPU(316, 328)의 자원을 사용하는 하나 이상의 그래픽 집약적인 애플리케이션을 실행한다. 도 3은 2개의 호스트(310, 320) 각각이 하나의 VM(314, 324)을 가지고 있고, 제1 호스트가 하나의 GPU(316)를 가지고 있으며, 제2 호스트가 2개의 GPU(326, 328)를 가지고 있는 것으로 도시하고 있지만, VM 관리 시스템은 임의의 개수의 호스트를 포함할 수 있고, 각각의 호스트가 임의의 개수의 VM을 호스팅할 수 있으며, 임의의 수의 GPU를 가지고 있을 수 있다.
특정한 상황 하에서, GPU(316, 328)를 VM(314, 324)에 할당하는 것과 관련하여, 예컨대 VM(314)이 다른 호스트에 마이그레이션되어야 하거나 또는 VM(324)이 추가적인 GPU 자원을 필요로 하면, VM 관리 시스템(300)이 하나 이상의 관리 작업을 수행할 필요가 있을 수 있다. 관리 작업은 VM(314) 상에서 실행되는 모든 애플리케이션에 투명하게, 즉 애플리케이션을 종료시키지 않으면서 그리고 애플리케이션이 GPU 자원의 변화를 감지하지 못하게 수행될 수 있다. 이를 위해, 그리고 도 4를 참조하면, VM을 위한 GPU 할당을 관리하기 위한 방법(400)이 제공된다. VM은 제1 호스트에 의해 호스팅되고, 제1 GPU가 할당된다. 예를 들어, VM이 호스트(310)에 호스팅되고 또한 GPU(316)를 할당받는 VM(314)일 수 있다. GPU(316)를 사용하기 위해, VM(314)은 OS를 실행하고, OS에 로딩되는 GPU(316)에 대한 드라이버를 가지고 있다. VM을 위한 GPU 할당을 관리하기 위한 방법(400)은 실행중인 애플리케이션에 투명한 방식으로 VM 관리 작업을 수행하는 데 사용될 수 있다
단계 402에서, 제1 GPU에 대한 GPU 명령 로그가 기록된다. GPU 명령 로그는 연속적으로 기록될 수 있거나, 또는 예를 들어 트리거 또는 신호에 응답하여 제시간에(punctually) 기록될 수 있다. 일부 실시예에서, 상기 신호는 제1 호스트 및/또는 제1 GPU에 대해 유지보수가 수행될 필요가 있다는 것을 나타낸다. 일부 다른 실시예에서, 상기 신호는 호스트의 통합이 수행되고 있다는 것, 그리고 특정 호스트가 셧다운되고 있거나 또는 저전력 상태로 전환되고 있다는 것을 나타낸다. 또 다른 실시예에서, 상기 신호는 VM이 추가적인 그래픽 처리 성능 또는 더 적은 그래픽 처리 성능을 필요로 한다는 것, 또는 VM이 마이그레이션되고 있다는 것을 나타낸다. 또 다른 실시예에서, 상기 트리거 또는 신호는 제1 GPU에 대해 GPU 명령 로그가 기록되게 할 수 있다.
GPU 명령 로그는, VM의 OS에서 제1 GPU로 송신되는 하나 이상의 GPU 애플리케이션 프로그래밍 인터페이스(application programming interface, API) 명령을 기록하는 데 사용된다. GPU 명령 로그는 제1 GPU의 컨텍스트를 유지하기에 적합한 어떠한 개수의 GPU API 명령도 기록할 수 있다. GPU API는 DirectX®, 또는 OpenGL®, 또는 그래픽이나 다른 시각 정보를 처리하기 위한 어떤 다른 적합한 GPU API일 수 있다. 대안적으로, 또는 추가적으로, GPU API는 Cuda®, 또는 OpenCL®, 또는 범용 GPU(general purpose GPU, GPGPU) 계산을 위한 다른 적합한 GPU API일 수 있다. GPU API 커맨드는, 예를 들어 이하에서 더 상세하게 설명하는 쉐도우 라이브러리(shadow library)를 통해 기록될 수 있다. GPU 명령 로그는 기록되어 로컬에 저장될 수 있거나, 또는 원격에 저장될 수 있다. 일부 실시예에서, GPU 명령 로그는 모든 GPU API 명령을 저장한다. 다른 실시예에서, GPU 명령 로그는 하나 이상의 미래의 프레임의 렌더링 및/또는 하나 이상의 미래의 계산에 영향을 주기 위해 사전에 결정된 GPU API 명령만을 저장한다.
단계 404에서, 제1 GPU와 연관된 제1 GPU 드라이버가 VM의 OS로부터 오프로딩된다. 예를 들어, 제1 GPU 드라이버의 오프로딩이 VM의 OS에 의해 수행된다. 제1 GPU 드라이버를 오프로딩함으로써, OS와 VM이 더 이상 명령을 제1 GPU에 송신할 수 없다. 일부 실시예에서, VM의 VM 컨트롤러로부터 또는 임의의 다른 적절한 소스로부터 수신될 수 있는 트리거 또는 신호에 응답하여 제1 GPU 드라이버의 오프로딩이 수행된다.
단계 406에서, 제1 GPU가 VM으로부터 할당 해제된다. 예를 들어, 제1 GPU의 할당 해제는 VM이 호스팅된 제1 호스트의 호스트 컨트롤러에 의해 수행된다. 일단 할당 해제되면, 제1 GPU가 다른 적합한 VM에 할당될 수 있으며, 더 이상 VM과는 연관되지 않는다. 일부 실시예에서, 제1 GPU는 VM의 호스트의 외부에, 예컨대 하나 이상의 호스트에 액세스할 수 있는 GPU 뱅크 안에 있으며, 제1 호스트의 외부에 있는 엔티티, 예컨대 시스템 컨트롤러에 의해 할당 해제가 수행될 수 있다.
선택적으로, 단계 408에서, VM이 제1 호스트에서 제2 호스트로 마이그레이션된다. 도 3을 계속 참조하면, 예를 들어 제2 호스트가 호스트(320)이다. 따라서, 일부 실시예에서, 제1 호스트와 제2 호스트가 공통 클러스터의 일부이며, 공통 시스템 컨트롤러에 의해 관리된다. 대안적으로, 제1 호스트와 제2 호스트가 서로 다른 클러스터의 일부이다. 마이그레이션이 임의의 적합한 방식으로 그리고 임의의 적합한 엔티티에 의해, 예컨대 제1 호스트와 제2 호스트의 호스트 컨트롤러 및/또는 제1 호스트와 제2 호스트의 시스템 컨트롤러(들)에 의해 수행될 수 있다.
단계 410에서, 제2 GPU가 VM에 할당되고, 단계 412에서 제2 GPU와 연관된 제2 GPU 드라이버가 VM의 OS에 로딩된다. 할당 단계와 로딩 단계가 임의의 적절한 방식으로 수행될 수 있다. 일부 실시예에서, 제1 GPU와 제2 GPU가 서로 다른 벤더의 GPU일 수 있다. 다른 실시예에서, 제1 GPU와 제2 GPU가 동일한 벤더의 GPU일 수 있다. 추가적으로, 이상에서 설명한 바와 같이, 제1 GPU와 제2 GPU가 실제 하드웨어 GPU일 수 있거나, 또는 가상화될 수 있다.
단계 414에서, 제1 GPU에서 제2 GPU로 GPU 콘텍스트를 복원하기 위해 제1 GPU로부터의 GPU 명령 로그가 제2 GPU에 재생된다. 제1 GPU에 존재하였던 모든 정보가 제2 GPU에 제공될 수 있도록, GPU 명령 로그가 VM의 OS에 의해 재생되어, 기록된 GPU API 명령을 복제한다.
따라서, 제2 GPU에는 제1 GPU에 존재하였던 전체 그래픽 콘텍스트가 제공됨으로써, VM에 새로 할당되더라도 제2 GPU로 하여금 VM에 대한 GPU 처리를 실질적으로 원활하게 제공할 수 있다. 이와 같이, VM을 위한 GPU 할당을 관리하는 방법(400)은 VM상에서 실행되는 임의의 애플리케이션에 투명한 방식으로 VM에 대한 GPU 할당을 관리할 수 있게 한다. 다시 말해, VM을 위한 GPU 할당을 관리하는 방법(400)이 실행되기 위해서 애플리케이션을 종료시킬 필요가 없다. 일부 실시예에서, VM을 위한 GPU 할당을 관리하는 방법(400)은 2개의 후속 비주얼 프레임을 렌더링하는 중간에 실질적으로 수행된다. 이전 프레임이 제1 GPU에 의해 렌더링되고, 일단 렌더링되면 단계 404 내지 단계 414가 수행되어, 후속 프레임이 단계 414에서 복원된 GPU 컨텍스트를 사용하여 제2 GPU에 의해 렌더링된다. 몇몇 다른 실시예에서, VM을 위한 GPU 할당을 관리하는 방법(400)은 범용 계산, 예를 들어 2개의 서브루틴 또는 서브루틴의 세트를 실행하는 중간의 적합한 시간에 실질적으로 수행된다.
도 3과 도 5a를 참조하면, VM을 위한 GPU 할당을 관리하는 방법(400)의 제1 실시예에서, 해당 VM은 호스트(320)에 호스팅되는 VM(324)이다. 도 3에 따르면, VM(324)이 초기에 GPU(328)에 할당된다. VM을 위한 GPU 할당을 관리하는 방법(400)을 따라, GPU(328)에 대한 드라이버가 VM(324)의 OS로부터 오프로딩되고, GPU(328)가 VM(324)으로부터 할당 해제된다. 그런 다음, 화살표(510)로 표시된 바와 같이, VM(324)이 GPU(326)에 할당되고, GPU(326)에 대한 드라이버가 VM(324)의 OS에 로딩된다. 그런 다음, GPU 명령 로그가 GPU(326)를 위해 다시 재생되어 GPU(328)에서 GPU(326)로 GPU 콘텍스트를 복원함으로써, VM(324)으로 하여금 실질적으로 끊김 없이 GPU(328)에서 GPU(326)로 교체될 수 있게 한다. 예를 들어, VM을 위한 GPU 할당을 관리하는 방법(400)의 이 특정한 구현은, VM(324)이 상이한 레벨의 GPU 자원을 요구한다는 지시 이후에 수행된다. 대안적으로, 이 특정한 구현은 GPU(328)에 대해 유지보수가 수행되어야 한다는 지시 이후에 수행된다.
도 3과 도 5b를 참조하면, VM을 위한 GPU 할당을 관리하기 위한 방법(400)의 제2 실시예에서, 해당 VM이 호스트(310)에 호스팅된 VM(314)이다. 도 3에 따르면, VM(314)이 초기에 GPU(316)에 할당된다. VM을 위한 GPU 할당을 관리하는 방법(400)에 따라, GPU(316)에 대한 드라이버가 VM(314)의 OS로부터 오프로딩되고, GPU(316)가 VM(314)으로부터 할당 해제된다. 그런 다음, 화살표(520)로 표시된 바와 같이, VM(314)이 호스트(320)에 마이그레이션되고, GPU(326)가 할당되며, GPU(326)에 대한 드라이버가 VM(314)의 OS에 로딩된다. 그런 다음, GPU 명령 로그가 GPU(326)를 위해 다시 재생되어 GPU(316)에서 GPU(326)로 GPU 콘텍스트를 복원함으로써, VM(314)으로 하여금 실질적으로 끊김 없이 GPU(316)에서 GPU(326)로 교체될 수 있게 한다. 예를 들어, 도 5b의 구현은 유지 보수가 호스트(310) 상에서 수행되어야 한다는 지시를 따라, 또는 호스트(310)의 VM이 호스트(320)에 통합되고 있다는 지시를 따라 수행됨으로써, 예를 들어 운영 비용을 줄인다.
도 3과 도 5c를 참조하면, VM을 위한 GPU 할당을 관리하기 위한 방법(400)의 제3 실시예에서, 해당 VM이 호스트(310)에 호스팅된 VM(314)이다. 도 3에 따르면, VM(314)이 초기에 GPU(316)에 할당된다. VM을 위한 GPU 할당을 관리하기 위한 방법(400)에 따라, GPU(316)에 대한 드라이버가 VM(314)의 OS로부터 오프로딩되고, GPU(316)가 VM(314)으로부터 할당 해제된다. 그런 다음, GPU 뱅크(530) 내의 GPU(5341)가 VM(314)에 할당되고, GPU(5341)에 대한 드라이버가 VM(314)의 OS에 로딩된다. 그런 다음, GPU 명령 로그가 GPU(5341)를 위해 재생되어 GPU(316)에서 GPU(5341)로 GPU 콘텍스트를 복원함으로써, VM(314)으로 하여금 실질적으로 끊김 없이 GPU(316)에서 GPU(5341)로 교체될 수 있게 한다. GPU 뱅크는 호스트(310)와 동일한 클러스터에 위치할 수 있거나, 또는 호스트(310)의 외부에 위치할 수 있다.
도 5d를 참조하면, 제4 실시예에서, VM을 위한 GPU 할당을 관리하기 위한 방법(400)이 도 5c의 VM(314)에 적용되어 화살표(540)로 표시된 바와 같이 GPU(5341)를 GPU(5342)로 교체한다. 예를 들어, GPU(5341, 5342)가 상이한 레벨의 GPU 자원을 제공하고 또한 GPU(5342)가 VM(314)의 요구사항과 더 잘 매칭되는 경우에 이렇게 수행될 수 있다. 따라서, GPU(5341)에 대한 드라이버가 VM(314)의 OS로부터 오프로딩될 수 있고, GPU(5341)가 VM(314)으로부터 할당 해제될 수 있다. 그런 다음, GPU(5342)가 VM(314)에 할당되고, 관련 드라이버가 VM(314)의 OS에 로딩된다. 그런 다음, GPU(5342)를 위해 GPU 명령 로그가 재생되어 GPU(5341)에서 GPU(5342)로 GPU 콘텍스트를 복원함으로써, VM(314)으로 하여금 실질적으로 끊김 없이 GPU(5341)에서 GPU(5342)로 교체될 수 있게 한다.
VM을 위한 GPU 할당을 관리하기 위한 방법(400)의 다른 응용이 고려된다. 예를 들어, 도 5c에 도시된 실시예가 또한 반대로 수행될 수 있거나, 또는 VM이 제1 GPU 뱅크 내의 GPU로부터 제2 GPU 뱅크 내의 GPU로 교체될 수 있다. 경우에 따라, GPU가 복수의 호스트 간에 공유되고, 호스트 간에 공유되는 임의의 호스트로부터의 하나 이상의 VM에 할당될 수 있다..
도 6을 참조하면, VM을 위한 GPU 할당을 관리하기 위한 방법(400)은 처리 유닛(612)과 그 내부에 컴퓨터 실행가능 명령(616)를 저장하는 메모리(614)를 포함하는 컴퓨팅 디바이스(610)에 의해 구현될 수 있다. 처리 유닛(612)은 임의의 적합한 장치를 포함할 수 있으며, 상기 장치는, 컴퓨터 실행가능 명령(616)이 컴퓨팅 장치(610) 또는 다른 프로그램 가능한 장치에 의해 실행되는 경우 본 명세서에서 설명된 방법에 지정된 기능/동작/단계를 실행할 수 있도록, 일련의 단계가 수행되게 하여 VM을 위한 GPU 할당을 관리하기 위한 방법(400)을 구현한다. 예를 들어, 처리 유닛(612)은, 임의의 유형의 범용 마이크로프로세서 또는 마이크로컨트롤러, 디지털 신호 처리(digital signal processing, DSP) 프로세서, 중앙처리장치(CPU), 집적 회로, 필드 프로그래머블 게이트 어레이(field programmable gate array, FPGA), 재구성 가능한 프로세서(reconfigurable processor), 다른 적합하게 프로그래밍된 또는 프로그램 가능한 논리 회로, 또는 이들의 임의의 조합을 포함할 수 있다.
메모리(614)는 임의의 적합한 알려진 저장 매체 또는 다른 기계 판독 가능 저장 매체를 포함할 수 있다. 메모리(614)는 전자, 자기, 광학, 전자기, 적외선, 또는 반도체 시스템이나 장치 또는 디바이스에 제한되지 않는 컴퓨터 판독가능 비일시적 저장 매체, 또는 이들의 적합한 조합을 포함할 수 있다. 메모리(614)는 장치의 내부 또는 외부에 위치하는 임의의 유형의 컴퓨터 메모리, 예컨대 랜덤 액세스 메모리(RAM), 읽기 전용 메모리(ROM), 씨디롬(CDROM), 전기광학 메모리(electro-optical memory), 자기광학 메모리(magneto-optical memory), 소거 가능 피롬(programmable ROM, EPROM), 및 전기적 소거 가능한 피롬(electrically-erasable PROM, EEPROM), 또는 강유전체 RAM(Ferroelectric RAM, FRAM) 등의 적절한 조합을 포함할 수 있다. 메모리는 처리 유닛에 의해 실행가능한 기계 판독가능 명령어를 검색 가능하도록 저장하기에 적합한 임의의 저장 수단(예를 들어, 디바이스)을 포함할 수 있다.
일부 실시예에서, 컴퓨팅 장치(610)는 하나 이상의 네트워크를 통해 직접 및 간접으로 연결되는 것을 포함하여 다양한 방식으로 다른 컴퓨팅 장치와 통신할 수 있다. 상기 네트워크는 데이터를 전송할 수 있다. 네트워크는 유선 연결, 무선 연결, 또는 이들의 조합을 포함할 수 있다. 네트워크는 서로 다른 네트워크 통신 기술, 표준, 및 프로토콜, 예컨대 이동통신 글로벌 시스템(Global System for Mobile Communications), 코드분할 다중접속(Code Division Multiple Access, CDMA), 무선 가입자 회선, 와이맥스(WiMAX), 와이파이, 블루투스, 및 롱 텀 에볼루션(LTE) 등을 포함할 수 있다. 네트워크는 서로 다른 물리적 매체, 예컨대 동축 케이블, 광섬유(fiber optics), 및 트랜시버 스테이션(transceiver station) 등을 포함할 수 있다. 네트워크 유형의 예는 인터넷, 이더넷, 일반 전화 서비스(plain old telephone service, POTS) 회선, 공중 교환 전화망(public switched telephone network, PSTN), 종합정보통신 네트워크(integrated services digital network, ISDN), 디지털 가입자 회선(digital subscriber line, DSL), 및 이들의 임의의 조합을 포함한다. 상기 네트워크는 근거리 통신 네트워크 및/또는 광역 통신 네트워크를 포함할 수 있다.
도 7을 참조하면, 호스트(310) 상에 호스팅된 예시적인 VM(700)이 도시되어 있다. VM(700)은 호스트 콘트롤러(312) 및 GPU(316)와 인터페이스하도록 구성된 VM 콘트롤러(702)를 가지고 있다. 일부 실시예에서, VM 컨트롤러(702)는 VM의 OS(700)를 구현한다. VM(700)은 GPU 드라이버(706)에 하나 이상의 GPU API 명령을 전송할 수 있는 하나 이상의 애플리케이션(7081, 7082)을 실행할 수 있다. GPU API 명령은 섀도 라이브러리(shadow library)(704)를 통해 송신될 수 있고, 섀도 라이브러리(704)는 하나 이상의 GPU API 명령을 GPU 로그(740)에 로깅할 수 있다.
VM 컨트롤러(702)는 호스트 컨트롤러(312)와 인터페이스하도록 구성된다. 호스트 컨트롤러(312)는, 예를 들어 VM(700)을 마이그레이션하거나 또는 VM(700)에 다른 GPU를 할당하기 위해, GPU 관리 작업이 구현되어야 한다는 것을 나타내는 하나 이상의 신호를 VM 콘트롤러(702)에 송신할 수 있다. 선택적으로, 또는 추가적으로, VM 컨트롤러(702)는 VM(700)의 마이그레이션을 요청하거나 VM(700)에 대한 상이한 레벨의 GPU 자원을 요청하는 하나 이상의 신호를 호스트 콘트롤러(312)에 송신할 수 있다. 일부 실시예에서, 하나 이상의 GPU 관리 작업과 관련련 신호를 수신하거나 및/또는 송신할 때, VM 콘트롤러(702)는 단계 402에 따라 준비시 GPU API 명령의 로깅을 시작하도록 섀도 라이브러리(704)에 지시한다. 다른 실시예에서, 섀도 라이브러리(704)는 실질적으로 연속적인 방식으로 GPU API 커맨드를 로깅하고, VM 컨트롤러는 GPU API 명령의 로깅을 시작하도록 섀도 라이브러리에 지시할 필요가 없다.
VM 컨트롤러(702)는 또한, 예를 들어 VM(700)의 OS로 하여금 GPU 드라이버(706)를 오프로딩하게 함으로써, 단계 404에 따라 GPU 드라이버(706)를 오프로딩하도록 구성된다. 일부 실시예에서, VM 컨트롤러(702)는 GPU 드라이버(706)가 성공적으로 오프로딩되었는지 여부를 나타내기 위해 호스트 컨트롤러(312)에 신호를 전송한다. VM 콘트롤러(702)가 GPU 드라이버(706)를 오프로딩하지 못하면, VM 콘트롤러(702)는, GPU 드라이버가 성공적으로 오프로딩될 때까지 호스트 콘트롤러(312)가 VM을 위한 GPU 할당을 관리하는 방법(400)의 다른 단계를 진행하지 못하도록 요청할 수 있다.
호스트 컨트롤러(312)가 단계 406에 따라 VM(700)로부터 GPU(316)를 할당 해제하도록 구성된다. 일부 실시예에서, 호스트 컨트롤러(312)는 호스트(310)에서 제2 호스트로, 예를 들어 도 3의 호스트(320)로 VM(700)의 선택적인 마이그레이션의 일부 또는 전부를 중재하거나 도움을 준다. VM(700)의 마이그레이션은 또한 단계 408에 따라 시스템 컨트롤러, 예를 들어 도 3의 시스템 컨트롤러(302)에 의해 중재되거나 및/또는 수행될 수 있다.
단계 410에 따라, 호스트 컨트롤러(312)(또는 단계 408이 수행되는 경우, 다른 호스트 내의 등가물)는 제2 GPU, 예를 들어 GPU(318)를 VM(700)에 할당하도록 구성되고, VM 컨트롤러(702)는 단계 412에 따라 제2 GPU에 대한 드라이버를 VM(700)의 OS에 로딩하도록 구성된다. 할당 단계와 로딩 단계는 임의의 적절한 방식으로, 예를 들어 단계 406과 단계 404에서 수행되는 할당 해제와 오프로딩 과정의 대칭(mirror)으로서 각각 수행될 수 있다.
섀도 라이브러리(704)는 애플리케이션(7081, 7082)에 의해 송신된 GPU API 명령을 인터셉트하고, GPU API 명령을 GPU 드라이버(706)에 재전송하도록 구성된다. 따라서, 섀도 라이브러리(704)는 애플리케이션(7081, 7082) 및 GPU 드라이버(706)에 실질적으로 투명하지만, GPU 드라이버(706)에 송신된 실질적으로 모든 GPU API 명령을 수신한다. 이는 섀도 라이브러리(704)로 하여금 단계 402에 따라 GPU 로그(740)에 GPU API 커맨드를 로깅할 수 있도록 하며, 이는 단계 414에 따라 GPU 교체가 수행된 후에 GPU 컨텍스트를 복원하는 데 사용될 수 있다. 일부 실시예에서, GPU 드라이버(706)는 애플리케이션에 대한 그래픽 API를 제공하기 위한 적어도 하나의 네이티브 라이브러리(native library), 예컨대 OpenGL® 공유 라이브러리와 OpenCL® 공유 라이브러리를 포함한다. 섀도 라이브러리(704)는 "dlopen" 기능 또는 다른 유사한 기능을 통해 네이티브 라이브러리를 동적으로 로딩하고 GPU API의 핸들을 획득한 다음, 인터셉트된 GPU API 커맨드를 GPU 하드웨어에 포워딩할 수 있다. 또한, 일부 실시예에서, "mydlopen"이라는 새로운 함수가 섀도 라이브러리(704)를 위해 생성될 수 있고, "mydlopen" 함수의 주소는 "dlopen" 함수의 GOT(global offset table) 엔트리에 포함된다. 따라서, 섀도 라이브러리(704)는 dlopen 함수를 호출하고, 생성된 "mydlopen" 함수를 이용하여 로딩된 라이브러리의 핸들을 기록할 수 있다.
섀도 라이브러리(704)는 VM(700)의 OS의 보안 설정에 따라, 사용자 모드 드라이버 또는 커널 모드 드라이버를 통해 GPU API 명령을 인터셉트할 수 있다. 섀도 라이브러리(704)는 복수의 섀도 라이브러리, 예를 들어 VM(700)의 OS와 호환 가능한 각각의 GPU 라이브러리에 대한 하나의 섀도 라이브러리일 수 있으며, 각각의 섀도 라이브러리(704)는 각각의 GPU 로그(740)를 가지고 있다. 예를 들어, DirectX 라이브러리와 OpenGL 라이브러리 모두에 대한 GPU API 명령을 출력하는 애플리케이션(7081, 7082)을 실행할 수 있는 VM(700)은 2개의 섀도 라이브러리(704)를 가지고 있다. 다른 예에서, OpenCL 라이브러리와 Cuda 라이브러리 모두에 대한 GPU API 명령을 출력하는 애플리케이션(7081, 7082)을 실행할 수 있는 VM(700)은 2개의 섀도 라이브러리(704)를 가지고 있다. VM(700)은 또한 섀도 라이브러리(704)의 임의의 적절한 조합을 포함할 수 있다.
일부 실시예에서, 쉐도우 라이브러리(704)는 애플리케이션(7081, 7082)에 의해 제공된 모든 GPU API 명령을 실질적으로 연속적으로 기록한다. 일부 다른 실시예에서, 섀도 라이브러리(704)는 모든 GPU API 명령을 로깅하지만, 예를 들어 VM 제어기(702)로부터 명령을 수신한 후에만 모든 GPU API 명령을 로깅한다. 또 다른 실시예에서, 섀도 라이브러리는 실질적으로 연속적으로 또는 명령에 응답하여 미래의 프레임에 영향을 주기 위해 결정된 GPU API 명령만을 기록한다. 미래의 프레임에 영향을 주기 위해 결정되는 GPU API 명령은, 예를 들어 룩업 테이블에 기초하여 미래의 프레임에 영향을 주기 위해 사전에 알려진 GPU API 명령일 수 있거나, 또는 섀도 라이브러리(704)가 임의의 적절한 수단을 사용하여 이 결정 자체를 수행할 수 있다.
GPU 할당을 관리하기 위한 시스템 및/또는 본 명세서에서 설명된 VM을 위한 GPU 할당을 관리하기 위한 방법(400)은, 컴퓨터 시스템, 예컨대 컴퓨팅 장치(610)와 통신하거나 또는 컴퓨팅 장치(610)의 동작을 돕기 위해 하이 레벨의 절차적 또는 객체 지향 프로그래밍 또는 스크립팅 언어, 또는 이들의 조합으로 구현될 수 있다. 대안적으로, GPU 할당을 관리하기 위한 시스템 및/또는 VM을 위한 GPU 할당을 관리하기 위한 방법(400)은 어셈블리 언어 또는 기계어로 구현될 수 있다. 상기 언어는 컴파일된 언어 또는 해석된 언어일 수 있다. GPU 할당을 관리하기 위한 시스템 및/또는 VM을 위한 GPU 할당을 관리하기 위한 방법(400)을 구현하기 위한 프로그램 코드는 저장 매체, 또는 장치, 예컨대 ROM, 자기 디스크, 광 디스크, 플래시 드라이브, 또는 임의의 다른 적합한 저장 매체나 디바이스에 저장될 수 있다. 저장 매체 또는 장치가 본 명세서에 설명된 절차를 수행하기 위해 컴퓨터에 의해 판독되는 경우, 프로그램 코드는 컴퓨터를 구성하고 동작시키기 위한 범용 또는 특수 목적의 프로그램 가능 컴퓨터에 의해 판독가능할 수 있다. GPU 할당을 관리하는 시스템 및/또는 VM을 위한 GPU 할당을 관리하기 위한 방법(400)의 실시예는 또한 컴퓨터 프로그램이 저장되는 컴퓨터 판독가능 비일시적 저장 매체에 의해 구현되는 것으로 고려될 수 있다. 컴퓨터 프로그램은, 컴퓨터 또는 더 구체적으로 컴퓨터의 적어도 하나의 처리 유닛으로 하여금 특정한 그리고 사전 정의된 방식으로 동작하여 본 명세서에서 설명된 기능을 수행하게 하는 컴퓨터 판독가능 명령을 포함할 수 있다.
컴퓨터 실행가능 명령은 하나 이상의 컴퓨터 또는 다른 장치에 의해 실행되는 프로그램 모듈을 포함하는 다수의 형태일 수 있다. 일반적으로, 프로그램 모듈은 특정 작업을 수행하거나 또는 특정 추상적 데이터 유형을 구현하는 루틴, 프로그램, 객체, 컴포넌트, 및 데이터 구조 등을 포함한다. 통상적으로, 프로그램 모듈의 기능은 다양한 실시예에 요구되는 바와 같이 결합되어 있거나 또는 분산되어 있을 수 있다.
본 명세서에서 개시된 GPU 할당을 관리하기 위한 시스템의 다양한 양태는 단독으로, 또는 조합하여, 또는 이전에 설명한 실시예에서 구체적으로 논의되지 않은 다양한 배치로 사용될 수 있으며, 따라서 이전의 설명에서 제시되거나 또는 도면에 도시된 세부사항 및 컴포넌트의 배치에 적용함에 있어서 제한되지 않는다. 예를 들어, 하나의 실시예에서 설명된 양태가 다른 실시예에서 설명된 양태와 임의의 방식으로 결합될 수 있다. 특정한 실시예가 도시되고 설명되었지만, 본 발명의 범위를 벗어나지 않고도 변경과 수정이 이루어질 수 있다는 것이 당업자에게 명백할 것이다. 하기 청구항의 범위는 실시예에 기재된 바람직한 실시예에 의해 제한되어서는 안 되며, 설명 전체와 일치하는 가장 넓고 합리적인 해석으로 제공되어야 한다.

Claims (23)

  1. 가상 머신(virtual machine, VM) 관리 시스템에 의해 수행되는 VM을 위한 그래픽처리장치(graphics processing unit, GPU) 할당을 관리하기 위한 방법으로서,
    상기 VM의 섀도 라이브러리(shadow library)로 적어도 하나의 GPU API 명령을 로깅하여 제1 GPU에 대한 GPU 명령 로그를 기록하는 단계;
    상기 VM의 운영체제(operating system, OS)로부터, 상기 제1 GPU와 연관된 제1 GPU 드라이버를 오프로딩(offload)하는 단계;
    VM으로부터 상기 제1 GPU를 할당 해제하는 단계;
    제1 호스트에서 제2 호스트로 상기 VM을 마이그레이션하는 단계;
    제2 GPU를 상기 VM에 할당하는 단계 - 상기 제1 GPU는 상기 제1 호스트와 연관되고, 상기 제2 GPU는 상기 제2 호스트와 연관됨 -;
    상기 제2 GPU와 연관된 제2 GPU 드라이버를 상기 VM의 OS에 로딩하는 단계; 및
    상기 제2 GPU의 내부에서 상기 제1 GPU로부터의 GPU 콘텍스트를 복원하기 위해 상기 제1 GPU로부터 상기 제2 GPU에 GPU 명령 로그를 재생하는 단계
    를 포함하는 가상 머신(VM)을 위한 그래픽처리장치(GPU) 할당을 관리하기 위한 방법.
  2. 제1항에 있어서,
    상기 섀도 라이브러리로 적어도 하나의 GPU API 명령을 로깅하는 것은,
    사용자 모드 드라이버를 통해 적어도 하나의 GPU API 명령을 로깅하는 것
    을 포함하는, 가상 머신(VM)을 위한 그래픽처리장치(GPU) 할당을 관리하기 위한 방법.
  3. 제1항에 있어서,
    상기 섀도 라이브러리로 적어도 하나의 GPU API 명령을 로깅하는 것은,
    커널 모드 드라이버를 통해 적어도 하나의 GPU API 명령을 로깅하는 것
    을 포함하는, 가상 머신(VM)을 위한 그래픽처리장치(GPU) 할당을 관리하기 위한 방법.
  4. 제1항에 있어서,
    제1 GPU와 제2 GPU는 공통 호스트와 연관되는, 가상 머신(VM)을 위한 그래픽처리장치(GPU) 할당을 관리하기 위한 방법.
  5. 제1항에 있어서,
    제1 GPU와 제2 GPU 중 적어도 하나는 VM의 호스트의 외부에 있는 GPU 뱅크와 연관되는, 가상 머신(VM)을 위한 그래픽처리장치(GPU) 할당을 관리하기 위한 방법.
  6. 제1항에 있어서,
    상기 제2 GPU에 대한 GPU 명령 로그를 재생하는 것은,
    룩업테이블에 기초하여 사전에 결정된 적어도 하나의 GPU 명령을 재생하는 것
    을 포함하는, 가상 머신(VM)을 위한 그래픽처리장치(GPU) 할당을 관리하기 위한 방법.
  7. 제1항에 있어서,
    제1 GPU와 제2 GPU 중 적어도 하나는 가상화된 GPU인, 가상 머신(VM)을 위한 그래픽처리장치(GPU) 할당을 관리하기 위한 방법.
  8. 가상 머신(virtual machine, VM)을 위한 그래픽처리장치(graphics processing unit, GPU) 할당을 관리하기 위한 시스템으로서,
    처리 유닛; 및
    상기 처리 유닛에 통신하도록 연결되고, 상기 처리 유닛에 의해 실행 가능한 컴퓨터 판독가능 프로그램 명령을 포함하는 비일시적 메모리
    를 포함하고,
    상기 컴퓨터 판독가능 프로그램 명령은:
    섀도 라이브러리(shadow library)로 적어도 하나의 GPU API 명령을 로깅하여 제1 GPU에 대한 GPU 명령 로그를 기록하고;
    상기 VM의 운영체제(operating system, OS)로부터, 상기 제1 GPU와 연관된 제1 GPU 드라이버를 오프로딩하고;
    상기 VM으로부터 상기 제1 GPU를 할당 해제하며;
    제1 호스트에서 제2 호스트로 상기 VM을 마이그레이션하고;
    제2 GPU를 상기 VM에 할당하고 - 상기 제1 GPU는 상기 제1 호스트와 연관되고, 상기 제2 GPU는 상기 제2 호스트와 연관됨 -;
    상기 제2 GPU와 연관된 제2 GPU 드라이버를 상기 VM의 OS에 로딩하며;
    상기 제2 GPU의 내부에서 상기 제1 GPU로부터의 GPU 콘텍스트를 복원하기 위해 상기 제1 GPU로부터 상기 제2 GPU에 GPU 명령 로그를 재생하는, 가상 머신(VM)을 위한 그래픽처리장치(GPU) 할당을 관리하기 위한 시스템.
  9. 제8항에 있어서,
    상기 섀도 라이브러리로 적어도 하나의 GPU API 명령을 로깅하는 것은,
    사용자 모드 드라이버를 통해 적어도 하나의 GPU API 명령을 로깅하는 것
    을 포함하는, 가상 머신(VM)을 위한 그래픽처리장치(GPU) 할당을 관리하기 위한 시스템.
  10. 제8항에 있어서,
    상기 섀도 라이브러리로 적어도 하나의 GPU API 명령을 로깅하는 것은,
    커널 모드 드라이버를 통해 적어도 하나의 GPU API 명령을 로깅하는 것
    을 포함하는, 가상 머신(VM)을 위한 그래픽처리장치(GPU) 할당을 관리하기 위한 시스템.
  11. 제8항에 있어서,
    제1 GPU와 제2 GPU는 공통 호스트와 연관되는, 가상 머신(VM)을 위한 그래픽처리장치(GPU) 할당을 관리하기 위한 시스템.
  12. 제8항에 있어서,
    제1 GPU와 제2 GPU 중 적어도 하나는 VM의 호스트의 외부에 있는 GPU 뱅크와 연관되는, 가상 머신(VM)을 위한 그래픽처리장치(GPU) 할당을 관리하기 위한 시스템.
  13. 제8항에 있어서,
    상기 제2 GPU에 대한 GPU 명령 로그를 재생하는 것은,
    룩업테이블에 기초하여 사전에 결정된 적어도 하나의 GPU 명령을 재생하는 것
    을 포함하는, 가상 머신(VM)을 위한 그래픽처리장치(GPU) 할당을 관리하기 위한 시스템.
  14. 제8항에 있어서,
    제1 GPU와 제2 GPU 중 적어도 하나는 가상화된 GPU인, 가상 머신(VM)을 위한 그래픽처리장치(GPU) 할당을 관리하기 위한 시스템.
  15. 컴퓨터 프로그램이 저장되어 있는 컴퓨터 판독가능 비일시적 저장 매체로서,
    상기 컴퓨터 프로그램은 컴퓨터 판독가능 명령을 포함하고, 상기 컴퓨터 판독가능 명령은 컴퓨터로 하여금:
    섀도 라이브러리(shadow library)로 적어도 하나의 GPU API 명령을 로깅하여 제1 GPU에 대한 GPU 명령 로그를 기록하고;
    VM의 운영체제(OS)로부터, 상기 제1 GPU와 연관된 제1 GPU 드라이버를 오프로딩하고;
    상기 VM으로부터 상기 제1 GPU를 할당 해제하며;
    제1 호스트에서 제2 호스트로 상기 VM을 마이그레이션하고;
    제2 GPU를 상기 VM에 할당하고 - 상기 제1 GPU는 상기 제1 호스트와 연관되고, 상기 제2 GPU는 상기 제2 호스트와 연관됨 -;
    상기 제2 GPU와 연관된 제2 GPU 드라이버를 상기 VM의 OS에 로딩하며;
    상기 제2 GPU의 내부에서 상기 제1 GPU로부터의 GPU 콘텍스트를 복원하기 위해 상기 제1 GPU로부터 상기 제2 GPU에 GPU 명령 로그를 재생하게 하는, 컴퓨터 판독가능 비일시적 저장 매체.
  16. 제15항에 있어서,
    상기 섀도 라이브러리로 적어도 하나의 GPU API 명령을 로깅하는 것은,
    사용자 모드 드라이버를 통해 또는 커널 모드 드라이버를 통해 적어도 하나의 GPU API 명령을 로깅하는 것
    을 포함하는, 컴퓨터 판독가능 비일시적 저장 매체.
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
  21. 삭제
  22. 삭제
  23. 삭제
KR1020197009001A 2016-09-05 2016-09-05 가상 머신을 위한 그래픽처리장치의 할당 KR102202258B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2016/098137 WO2018040112A1 (en) 2016-09-05 2016-09-05 Allocation of graphics processing units for virtual machines

Publications (2)

Publication Number Publication Date
KR20190044097A KR20190044097A (ko) 2019-04-29
KR102202258B1 true KR102202258B1 (ko) 2021-01-13

Family

ID=61299659

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197009001A KR102202258B1 (ko) 2016-09-05 2016-09-05 가상 머신을 위한 그래픽처리장치의 할당

Country Status (5)

Country Link
US (1) US11321111B2 (ko)
EP (1) EP3497562B1 (ko)
KR (1) KR102202258B1 (ko)
CN (1) CN109690482A (ko)
WO (1) WO2018040112A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024034750A1 (ko) * 2022-08-09 2024-02-15 엘지전자 주식회사 신호 처리 장치, 및 이를 구비하는 차량용 증강현실 장치

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10261847B2 (en) * 2016-04-08 2019-04-16 Bitfusion.io, Inc. System and method for coordinating use of multiple coprocessors
CN107295573B (zh) * 2017-07-12 2019-08-02 网宿科技股份有限公司 一种业务应用流量的引导方法和系统
GB2565770B (en) * 2017-08-15 2019-09-18 Advanced Risc Mach Ltd Data processing systems
US11720408B2 (en) * 2018-05-08 2023-08-08 Vmware, Inc. Method and system for assigning a virtual machine in virtual GPU enabled systems
CN111736943A (zh) * 2019-03-25 2020-10-02 阿里巴巴集团控股有限公司 虚拟机的迁移方法和系统
KR102275529B1 (ko) * 2019-12-23 2021-07-09 주식회사 텔레칩스 멀티-마스터를 지원하는 그래픽 처리 장치를 공유하는 시스템 온 칩 및 그래픽 처리 장치의 동작 방법
CN112230931B (zh) * 2020-10-22 2021-11-02 上海壁仞智能科技有限公司 适用于图形处理器的二次卸载的编译方法、装置和介质
US11604752B2 (en) 2021-01-29 2023-03-14 Arm Limited System for cross-routed communication between functional units of multiple processing units
WO2023037330A1 (en) * 2021-09-13 2023-03-16 Hyperplane Ltd. Techniques for clearing the internal state of a library

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110084973A1 (en) * 2009-10-08 2011-04-14 Tariq Masood Saving, Transferring and Recreating GPU Context Information Across Heterogeneous GPUs During Hot Migration of a Virtual Machine
US20130290781A1 (en) 2008-10-28 2013-10-31 Vmware, Inc. Low overhead fault tolerance through hybrid checkpointing and replay
JP2014500535A (ja) * 2010-09-30 2014-01-09 マイクロソフト コーポレーション Gpu利用可能仮想マシンの負荷分散技法
KR101401523B1 (ko) 2013-02-08 2014-06-03 한국과학기술정보연구원 복수의 가상 머신들 간 조립 공유 gpu 스케줄링 방법 및 장치
US20160247248A1 (en) 2015-02-25 2016-08-25 Microsoft Technology Licensing, Llc Migration of graphics processing unit (gpu) states

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7979869B2 (en) * 2007-09-28 2011-07-12 Oracle America, Inc. Method and system for performing I/O operations using a hypervisor
US7743389B2 (en) * 2007-11-06 2010-06-22 Vmware, Inc. Selecting between pass-through and emulation in a virtual machine environment
US20110102443A1 (en) * 2009-11-04 2011-05-05 Microsoft Corporation Virtualized GPU in a Virtual Machine Environment
US20120092351A1 (en) * 2010-10-19 2012-04-19 Apple Inc. Facilitating atomic switching of graphics-processing units
US8533713B2 (en) * 2011-03-29 2013-09-10 Intel Corporation Efficent migration of virtual functions to enable high availability and resource rebalance
US8966477B2 (en) * 2011-04-18 2015-02-24 Intel Corporation Combined virtual graphics device
US20130055254A1 (en) * 2011-08-31 2013-02-28 Nokia Corporation Methods and apparatuses for providing a virtual machine with dynamic assignment of a physical hardware resource
US9135189B2 (en) 2011-09-07 2015-09-15 Microsoft Technology Licensing, Llc Delivering GPU resources across machine boundaries
US10310879B2 (en) 2011-10-10 2019-06-04 Nvidia Corporation Paravirtualized virtual GPU
CN102521012B (zh) * 2011-11-24 2014-08-27 华中科技大学 基于虚拟机的gpu集群管理系统
US9514507B2 (en) * 2011-11-29 2016-12-06 Citrix Systems, Inc. Methods and systems for maintaining state in a virtual machine when disconnected from graphics hardware
US9298490B2 (en) * 2012-12-20 2016-03-29 Vmware, Inc. Managing a data structure for allocating graphics processing unit resources to virtual machines
US9658873B2 (en) * 2013-08-21 2017-05-23 Red Hat Israel, Ltd. Switching between devices having a common host backend in a virtualized environment
US9098323B2 (en) * 2013-09-05 2015-08-04 Nvidia Corporation Simultaneous utilization of a first graphics processing unit (GPU) and a second GPU of a computing platform through a virtual machine (VM) in a shared mode and a dedicated mode respectively
CN105830026B (zh) 2013-11-27 2020-09-15 英特尔公司 用于调度来自虚拟机的图形处理单元工作负荷的装置和方法
WO2015100681A1 (zh) 2013-12-31 2015-07-09 华为技术有限公司 Gpu虚拟化的实现方法及相关装置和系统
JP6472881B2 (ja) * 2014-11-12 2019-02-20 インテル コーポレイション グラフィックス仮想化を用いたホストコンピュータからの/ホストコンピュータへの仮想マシンのライブマイグレーション
US20170004808A1 (en) * 2015-07-02 2017-01-05 Nvidia Corporation Method and system for capturing a frame buffer of a virtual machine in a gpu pass-through environment
CN105242957A (zh) 2015-09-28 2016-01-13 广州云晫信息科技有限公司 一种云计算系统调配gpu资源到虚拟机的方法及系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130290781A1 (en) 2008-10-28 2013-10-31 Vmware, Inc. Low overhead fault tolerance through hybrid checkpointing and replay
US20110084973A1 (en) * 2009-10-08 2011-04-14 Tariq Masood Saving, Transferring and Recreating GPU Context Information Across Heterogeneous GPUs During Hot Migration of a Virtual Machine
JP2014500535A (ja) * 2010-09-30 2014-01-09 マイクロソフト コーポレーション Gpu利用可能仮想マシンの負荷分散技法
KR101401523B1 (ko) 2013-02-08 2014-06-03 한국과학기술정보연구원 복수의 가상 머신들 간 조립 공유 gpu 스케줄링 방법 및 장치
US20160247248A1 (en) 2015-02-25 2016-08-25 Microsoft Technology Licensing, Llc Migration of graphics processing unit (gpu) states

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024034750A1 (ko) * 2022-08-09 2024-02-15 엘지전자 주식회사 신호 처리 장치, 및 이를 구비하는 차량용 증강현실 장치
WO2024034752A1 (ko) * 2022-08-09 2024-02-15 엘지전자 주식회사 신호 처리 장치, 및 이를 구비하는 차량용 증강현실 장치
WO2024034751A1 (ko) * 2022-08-09 2024-02-15 엘지전자 주식회사 신호 처리 장치, 및 이를 구비하는 차량용 증강현실 장치

Also Published As

Publication number Publication date
US20190213032A1 (en) 2019-07-11
EP3497562A1 (en) 2019-06-19
WO2018040112A1 (en) 2018-03-08
EP3497562B1 (en) 2023-12-13
US11321111B2 (en) 2022-05-03
CN109690482A (zh) 2019-04-26
KR20190044097A (ko) 2019-04-29
EP3497562A4 (en) 2019-07-24

Similar Documents

Publication Publication Date Title
KR102202258B1 (ko) 가상 머신을 위한 그래픽처리장치의 할당
US20240078130A1 (en) Multi-hypervisor virtual machines that run on multiple co-located hypervisors
US20210232469A1 (en) Dynamic allocation of compute resources at a recovery site
US10120705B2 (en) Method for implementing GPU virtualization and related apparatus, and system
US10025503B2 (en) Autonomous dynamic optimization of platform resources
JP6074038B2 (ja) 共用記憶域上にある仮想ディスクのトランスペアレントなホスト側キャッシング
US10963171B2 (en) Compressibility instrumented dynamic volume provisioning
US9804873B2 (en) Guest management of devices assigned to a virtual machine
US20160162316A1 (en) Offloading and parallelizing translation table operations
US9946567B2 (en) Policy based virtual resource allocation and allocation adjustment
US20130057560A1 (en) Delivering GPU Resources Across Machine Boundaries
US20160266938A1 (en) Load balancing function deploying method and apparatus
US11099895B2 (en) Estimating and managing resource provisioning speed based on provisioning instruction
US9880884B2 (en) Resource allocation/de-allocation and activation/deactivation
CN106815067B (zh) 带i/o虚拟化的虚拟机在线迁移方法、装置
KR20220035933A (ko) 크로스 프레임 실시간 업데이트들의 성능 향상
US9727374B2 (en) Temporary virtual machine migration for improved software application warmup
US11487572B1 (en) Migration of cloud-based software application
US20150186180A1 (en) Systems and methods for affinity dispatching based on network input/output requests
US20210149700A1 (en) High performance attachable writeable volumes in vdi desktops
KR20190143248A (ko) 컨테이너 기반 가상화 환경에서 gpu 메모리 자원 관리 및 스케줄링 방법 및 시스템
US11429412B2 (en) Guest protection from application code execution in kernel mode
US20210326150A1 (en) Integrated network boot operating system installation leveraging hyperconverged storage
CN108334401B (zh) 实现逻辑卷动态分配并支持虚拟机动态迁移的系统及方法
WO2015147890A1 (en) Method and system for maintaining aspect ratio on pointing devices

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