KR101668399B1 - 프로세서 코어들의 하이퍼바이저 격리 - Google Patents

프로세서 코어들의 하이퍼바이저 격리 Download PDF

Info

Publication number
KR101668399B1
KR101668399B1 KR1020127019346A KR20127019346A KR101668399B1 KR 101668399 B1 KR101668399 B1 KR 101668399B1 KR 1020127019346 A KR1020127019346 A KR 1020127019346A KR 20127019346 A KR20127019346 A KR 20127019346A KR 101668399 B1 KR101668399 B1 KR 101668399B1
Authority
KR
South Korea
Prior art keywords
cores
operating system
subset
core
application
Prior art date
Application number
KR1020127019346A
Other languages
English (en)
Other versions
KR20120111734A (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 KR20120111734A publication Critical patent/KR20120111734A/ko
Application granted granted Critical
Publication of KR101668399B1 publication Critical patent/KR101668399B1/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/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/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4406Loading of 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/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/45545Guest-host, i.e. hypervisor is an application program itself, e.g. VirtualBox
    • 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/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
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/509Offload

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)
  • Hardware Redundancy (AREA)
  • Debugging And Monitoring (AREA)

Abstract

프로세서 코어들을 사용하기 위한 기술이 제공되며, 이 기술은, 오퍼레이팅 시스템과는 독립된 사용을 위해, 프로세서 코어들을 고립시키는 것을 포함한다. 본 발명의 적어도 하나의 실시예로서, 방법이 제공되는바, 이 방법은 컴퓨터 시스템의 복수의 코어들 중의 하나 이상의 코어들을 포함하는 제1의 코어 서브세트 상에서 오퍼레이팅 시스템을 실행하는 단계를 포함한다. 오퍼레이팅 시스템은 가상 머신 모니터의 제어 하에서 게스트로서 실행된다. 이 방법은 복수의 코어들 중의 하나 이상의 코어들을 포함하는 제2의 코어 서브세트 상에서 애플리케이션을 위한 작업을 실행하는 단계를 포함한다. 제1의 코어 서브세트와 제2의 코어 서브세트는 상호 배타적이고, 제2의 코어 서브세트는 오퍼레이팅 시스템에 대해 가시적이지 않다. 적어도 하나의 실시예에서, 본 발명의 방법은 오퍼레이팅 시스템으로부터 제2의 코어 서브세트를 고립시키는 단계를 포함한다.

Description

프로세서 코어들의 하이퍼바이저 격리{HYPERVISOR ISOLATION OF PROCESSOR CORES}
본 발명은 컴퓨터 시스템들에 관한 것으로, 더욱 구체적으로, 멀티-코어 컴퓨터 시스템(multi-core computer system)들에 관한 것이다.
일반적으로, 컴퓨팅 시스템(computing system) 내에 포함된 중앙 처리 유닛(Central Processing Unit, CPU) 코어들(즉, 프로세서 코어들) 및/또는 프로세서들의 수는 급속하게 증가하고 있다. 도 1을 참조하면, 예시적인 컴퓨팅 시스템(100)은 다수의 프로세스들(102)을 포함하고 있으며, 프로세스들(102) 각각은 하나 이상의 프로세서 코어들(예를 들어, 프로세서 코어들(104))을 포함한다. 프로세서들(102)은 하나 이상의 허브 집적 회로(hub integrated circuit)들(예를 들어, 메모리 제어기 허브 및 I/O 제어기 허브), 버스(예를 들어, PCI 버스, ISA 버스, 및 SMBus), 다른 적당한 통신 인터페이스들, 또는 이들의 조합들에 의해, 다른 프로세서들(102), 메모리(106), 디바이스들(108), 및 저장장치(110)에 결합된다. 오퍼레이팅 시스템(operating system)(예를 들어, 마이크로소프트 윈도우즈(Microsoft Windows), 리눅스(Linux), 및 유닉스(UNIX))은 하드웨어와 사용자(즉, 컴퓨팅 애플리케이션들, 예를 들어, 애플리케이션들(114)) 간의 인터페이스를 제공한다. 오퍼레이팅 시스템(112)의 실행은 복수의 코어들(104)에 걸쳐 배분될 수 있다.
컴퓨팅 시스템이 다수의 프로세서 코어들을 포함하지만, 전형적인 컴퓨팅 시스템은 모든 프로세서 코어들을 사용하지 못할 수 있거나, 혹은 모든 프로세서 코어들을 효율적으로 사용하지 못할 수 있다. 예를 들어, 오퍼레이팅 시스템은 단지 제한된 수의 CPU 코어들에만 액세스하여 이들을 제어할 수 있고, 이때 컴퓨팅 시스템 내의 다른 코어들은 아이들(idle) 상태에 있게 된다.
이에 따라, 프로세서 코어들을 사용하기 위한 기술이 제공되며, 이 기술은, 오퍼레이팅 시스템과는 독립된 사용을 위해, 프로세서 코어들을 고립시키는 것을 포함한다. 본 발명의 적어도 하나의 실시예로서, 방법이 제공되는바, 이 방법은 컴퓨터 시스템의 복수의 코어들 중의 하나 이상의 코어들을 포함하는 제1의 코어 서브세트(subset) 상에서 오퍼레이팅 시스템을 실행하는 단계를 포함한다. 오퍼레이팅 시스템은 가상 머신 모니터(virtual machine monitor)의 제어 하에서 게스트로서 실행된다. 이 방법은 복수의 코어들 중의 하나 이상의 코어들을 포함하는 제2의 코어 서브세트 상에서 애플리케이션을 위한 작업을 실행하는 단계를 포함한다. 제1의 코어 서브세트와 제2의 코어 서브세트는 상호 배타적(exclusive)이고, 제2의 코어 서브세트는 오퍼레이팅 시스템에 대해 가시적(visible)이지 않다. 적어도 하나의 실시예에서, 본 방법은 오퍼레이팅 시스템으로부터 제2의 코어 서브세트를 고립시키는 단계를 포함한다. 본 방법의 적어도 하나의 실시예에서, 제2의 코어 서브세트를 고립시키는 단계는 공유된 시스템 메모리의 일부분을 제2의 코어 세트에 제공하는 단계를 포함한다. 본 방법의 적어도 하나의 실시예에서, 애플리케이션은, 오퍼레이팅 시스템의 외부에 있는 그리고 오퍼레이팅 시스템으로부터 독립된, 제2의 코어 서브세트 상에서 실행된다. 본 방법의 적어도 하나의 실시예에서, 애플리케이션은 오퍼레이팅 시스템 상에서 실행되고 있고, 제2의 코어 서브세트의 코어들은 컴퓨팅 가속기(computing accelerator)들로서 구성된다. 본 방법의 적어도 하나의 실시예에서, 애플리케이션은 가상 머신 모니터를 통해 제2의 코어 서브세트에 간접적으로 액세스한다. 적어도 하나의 실시예에서, 본 방법은 이용가능한 컴퓨팅 가속기들에 관한 정보를 오퍼레이팅 시스템 상에서 실행되는 드라이버에 제공하는 단계를 더 포함한다. 적어도 하나의 실시예에서, 본 방법은 컴퓨팅 가속기들 중의 타겟 가속기(target accelerator)에 의해 완료되어야 할 작업을 스케줄링하는 단계를 더 포함한다. 본 방법의 적어도 하나의 실시예에서, 상기 실행하는 단계는, 컴퓨팅 가속기들에 의해 애플리케이션을 위하여 완료되어야 할 작업을 요청하는 단계, 완료된 작업을 오퍼레이팅 시스템에게 표시하는 단계, 그리고 작업 항목(work item)에 의해 생성되는 페이지 오류(page fault)들을 처리하는 단계를 포함한다. 적어도 하나의 실시예에서, 본 방법은 오퍼레이팅 시스템에 의해 제공되는 애플리케이션 프로그램 인터페이스에, 제2의 코어 세트에 의해, 액세스하는 단계를 더 포함한다. 본 방법의 적어도 하나의 실시예에서, 애플리케이션 프로그램 인터페이스는 오퍼레이팅 시스템 메모리 할당 루틴(operating system memory allocation routine)과 예외 처리 루틴(exception handling routine) 중 하나이다.
본 발명의 적어도 하나의 실시예에서, 장치가 제공되며, 이 장치는 복수의 코어들과, 그리고 복수의 코어들에 의해 액세스가능한 하나 이상의 매체에 인코딩되는 오퍼레이팅 시스템 소프트웨어를 포함한다. 본 장치는, 복수의 코어들에 의해 액세스가능한 하나 이상의 매체에 인코딩되며 복수의 코어들 중의 하나 이상의 코어 상에서 실행가능한 하이퍼바이저 소프트웨어(hypervisor software)를 포함한다. 하이퍼바이저 소프트웨어는 복수의 코어들 중의 하나 이상의 코어들을 포함하는 제1의 코어 세트 상에서 오퍼레이팅 시스템 소프트웨어의 게스트로서의 실행을 제어하도록 실행가능하고, 그리고 복수의 코어들 중의 하나 이상의 코어들을 포함하는 제2의 코어 세트 상에서 애플리케이션의 적어도 일부 작업을 실행하도록 실행가능하다. 제2의 코어 세트는 오퍼레이팅 시스템에 대해 가시적이지 않다. 본 장치의 적어도 하나의 실시예에서, 하이퍼바이저 소프트웨어는, 오퍼레이팅 시스템으로부터 제2의 코어 세트를 격리시키기 위해 복수의 코어들 상에서 실행가능한 코드를 포함하고, 제1의 코어 세트와 제2의 코어 세트는 상호 배타적이다. 적어도 하나의 실시예에서, 본 장치는 복수의 코어들에 의해 공유되는 공유된 시스템 메모리를 더 포함한다. 적어도 하나의 실시예에서, 본 장치는, 제1의 코어 세트에 의해 액세스가능한 하나 이상의 매체에 인코딩되는 가속된 컴퓨팅 드라이버(accelerated computing driver)를 더 포함하고, 여기서 가속된 컴퓨팅 드라이버는 애플리케이션의 작업을 제2의 코어 세트에 스케줄링하도록 구성된다. 적어도 하나의 실시예에서, 본 장치는 애플리케이션과 제2의 코어 세트 간의 통신을 위한 적어도 하나의 큐(queue)를 더 포함한다. 본 장치의 적어도 하나의 실시예에서, 적어도 하나의 큐는 가속된 컴퓨팅 드라이버로부터 하이퍼바이저로의 통신을 위해 구성된 명령 큐(command queue), 하이퍼바이저로부터 가속된 컴퓨팅 드라이버로의 통신을 위해 구성된 응답 큐(response queue), 하이퍼바이저로부터 가속된 컴퓨팅 드라이버로의 통신을 위해 구성된 오류 큐(fault queue), 그리고 가속 중인 컴퓨팅 애플리케이션 프로그램 인터페이스로부터 하이퍼바이저로의 통신을 위해 구성된 작업 큐(work queue)를 포함한다. 적어도 하나의 실시예에서, 본 장치는, 제1의 코어 세트에 의해 액세스가능한 하나 이상의 매체에 인코딩되는 가속된 컴퓨팅 애플리케이션 프로그램 인터페이스(accelerated computing application program interface)를 더 포함한다. 적어도 하나의 실시예에서, 본 장치는, 복수의 코어들에 의해 액세스가능한 하나 이상의 매체에 인코딩되는 애플리케이션 소프트웨어를 더 포함하고, 여기서 하이퍼바이저 소프트웨어는, 제1의 코어 세트 상에서의 오퍼레이팅 시스템의 실행과는 독립적으로, 제2의 코어 세트 상에서 하이퍼바이저의 제어 하에 애플리케이션 소프트웨어를 실행하기 위해 복수의 코어들 상에서 실행가능한 코드를 포함한다. 적어도 하나의 실시예에서, 본 장치는, 오퍼레이팅 시스템 상에서 실행가능한 복수의 코어들에 의해 액세스가능한 하나 이상의 매체에 인코딩되는 애플리케이션 소프트웨어를 더 포함하고, 여기서 하이퍼바이저 소프트웨어는 제2의 코어 세트를 컴퓨팅 가속기들로서 구성하도록 실행가능한 코드, 그리고 제2의 코어 세트 상에서 애플리케이션 소프트웨어를 위한 작업을 실행하기 위한 코드를 포함한다.
본 발명의 적어도 하나의 실시예에서, 컴퓨터 프로그램 제품이 제공되며, 이 컴퓨터 프로그램 제품은, 가상 머신 모니터로서 실행가능하거나 가상 머신 모니터와 결합되어 실행가능한 하나 이상의 기능 시퀀스(functional sequence)들을 포함하며, 하나 이상의 기능 시퀀스들은, 복수의 코어들 중의 하나 이상의 코어들을 포함하는 제1의 코어 세트 상에서 가상 머신 모니터의 제어 하에 오퍼레이팅 시스템 시퀀스를 게스트로서 실행하도록 구성된다. 본 컴퓨터 프로그램 제품은, 복수의 코어들 중의 하나 이상의 코어들을 포함하는 제2의 코어 세트 상에서 애플리케이션의 적어도 일부 작업을 실행하는 하나 이상의 기능 시퀀스들을 포함한다. 제2의 코어 세트는 오퍼레이팅 시스템에 대해 가시적이지 않다. 본 컴퓨터 프로그램 제품의 적어도 하나의 실시예에서, 하나 이상의 기능 시퀀스들은 제1의 코어 세트 상에서의 오퍼레이팅 시스템의 실행과는 독립적으로, 제2의 코어 세트 상에서 가상 머신 모니터의 제어 하에 애플리케이션 시퀀스를 실행하도록 구성된다. 본 컴퓨터 프로그램 제품의 적어도 하나의 실시예에서, 하나 이상의 기능 시퀀스들은, 오퍼레이팅 시스템 코드로부터 제2의 코어 세트를 고립시키도록 구성되고, 그리고 제2의 코어 세트 상에서의 애플리케이션 코드 작업의 실행을 위해 제2의 코어 세트를 컴퓨팅 가속기들로서 구성하도록 구성된다. 본 컴퓨터 프로그램 제품의 적어도 하나의 실시예에서, 본 컴퓨터 프로그램 제품은 디스크, 테이프, 또는 다른 자기 저장 매체, 광 저장 매체, 혹은 전자 저장 매체의 세트로부터 선택된 적어도 하나의 컴퓨터 판독가능 매체에 인코딩된다.
첨부되는 도면들을 참조함으로써, 본 발명이 더 잘 이해될 수 있고, 본 발명의 여러 가지 목적, 특징 및 장점이 당업자들에게 명백해질 수 있다.
도 1은 예시적인 멀티-코어 컴퓨팅 시스템의 기능 블럭도를 예시한다.
도 2는 예시적인 가상화 시스템의 기능 블럭도를 예시한다.
도 3은 본 발명의 적어도 하나의 실시예에 따른 예시적인 가상화 시스템의 기능 블럭도를 예시한다.
도 4는 본 발명의 적어도 하나의 실시예에 따른, 고립된 프로세서 코어들이 디팩토 가속기(de facto accelerator)들로서 구성된, 도 3의 가상화 시스템 상에서 실행되는 예시적인 가상 머신 모니터의 기능 블럭도를 예시한다.
도 5는 본 발명의 적어도 하나의 실시예에 따른, 고립된 프로세서 코어들이 디팩토 가속기들로서 구성된, 도 3의 가상화 시스템에서의 예시적인 정보 및 제어 흐름들을 예시한다.
도 6은 본 발명의 적어도 하나의 실시예에 따른, 고립된 프로세서 코어들이 디팩토 가속기들로서 구성된, 도 3의 가상화 시스템에서의 작업 단위 처리 흐름에 대한 예시적인 정보 및 제어 흐름들을 예시한다.
도 7은 본 발명의 적어도 하나의 실시예에 따른, 고립된 프로세서 코어들이 디팩토 가속기들로서 구성된, 도 3의 가상화 시스템에서의 작업 단위 페이지 오류 처리에 대한 예시적인 정보 및 제어 흐름들을 예시한다.
도 8은 본 발명의 적어도 하나의 실시예에 따른, 고립된 프로세서 코어들이 디팩토 가속기들로서 구성된, 도 3의 가상화 시스템에서의 작업 단위 명령 완료에 대한 예시적인 정보 및 제어 흐름들을 예시한다.
도 9는 본 발명의 적어도 하나의 실시예에 따른, 인스턴트-온 애플리케이션(instant-on application) 사용을 위해 구성된, 도 3의 가상화 시스템에서의 정보 및 제어 흐름들을 예시한다.
상이한 도면들에서의 동일한 참조 기호들의 사용은 유사하거나 동일한 항목들을 나타낸다.
도 2를 참조하면, 컴퓨팅 시스템의 가상화는, 컴퓨팅 시스템의 물리적 특징(즉, 컴퓨팅 시스템 상에서 실행되는 소프트웨어)을 사용자로부터 숨기기 위해 이용되고, 대신, 컴퓨팅 시스템의 가상화는 추상의 모방된 컴퓨팅 시스템(abstract emulated computing system)(즉, 가상 머신(Virtual Machine, VM))을 사용자에게 제공한다. 컴퓨팅 시스템(100)의 물리적 하드웨어 자원(physical hardware resource)들은, 하나 이상의 대응하는 격리된, 명백히 독립적인, 가상 머신들(예를 들어, VM(204))로서, 하나 이상의 게스트(guest)들(예를 들어, 게스트들(206))에게 노출된다. 예를 들어, 가상 머신은, 가상 머신 모니터(Virtual Machine Monitor, VMM)(즉, 하이퍼바이저, 예를 들어, VMM(202))가 가상 머신에 할당하는 컴퓨팅 시스템(100)의 물리적 자원들에 의해 구현되는 하나 이상의 가상 자원들(예를 들어, VCPU, VMEMORY, 및 VDEVICES)을 포함할 수 있다.
본 명세서에서 지칭되는 바와 같은, "가상 머신 모니터(VMM)" 또는 "하이퍼바이저"는 가상화 능력을 제공하는 소프트웨어이다. VMM은 게스트 소프트웨어와 물리적 자원들 간의 인터페이스를 제공한다. 전형적으로, VMM은 완전한 컴퓨터 시스템(즉, 메모리, 중앙 처리 유닛(CPU), 및 모든 주변 디바이스들)에 대한 전체 제어의 외관(appearance)을 각각의 게스트에게 제공한다. 유형 1(즉, 네이티브(native)) VMM은, 물리적 자원들 상에서 실행되며 하나 이상의 게스트들을 위해 가상화를 제공하는 자립형 소프트웨어 프로그램(standalone software program)이다. 게스트 오퍼레이팅 시스템은 VMM 상부의 임의 레벨 상에서 실행된다. 유형 2(즉, 호스트(host)된) VMM은, 오퍼레이팅 시스템에 통합되거나 오퍼레이팅 시스템 상에서 실행되고, 그리고 오퍼레이팅 시스템 구성요소들은 물리적 자원들 상에서 직접 실행되며 VMM에 의해 가상화되지 않는다. VMM은 개별적인 소프트웨어 계층(software layer)으로 간주되고, 게스트 오퍼레이팅 시스템은 하드웨어 상부의 제 3 소프트웨어 레벨 상에서 실행될 수 있다. 다음의 설명이 예시적인 유형 1 VMM을 나타내지만, 본 명세서에서 설명되는 기술(technique)들은 유형 2 VMM에서 구현될 수도 있다.
도 2를 다시 참조하면, VM(204)이 가상 머신(204)의 가상 자원들에 대한 전체 제어를 갖는 동안, VMM(202)은 물리적 자원들에 대한 제어를 유지한다. 게스트 시스템, 예를 들어, 오퍼레이팅 시스템(예를 들어, 윈도우즈, 리눅스, 및 유닉스)의 인스턴스(instance)는 대응하는 가상 머신 상에서 실행되고, 다른 가상 머신들 상에서 실행되는 다른 게스트 시스템들과 물리적 자원들을 공유한다. 따라서, 다수의 오퍼레이팅 시스템들(예를 들어, 동일한 오퍼레이팅 시스템의 다수의 인스턴스들 또는 상이한 오퍼레이팅 시스템들의 인스턴스들)이 동일한 컴퓨팅 시스템 상에서 공존하지만, 서로 격리되어 있다.
VMM(202)은 물리적 자원들 내의 일부 또는 모든 프로세서 코어들에 의해 실행된다. 개별적인 게스트는 물리적 자원들 내에 포함된 프로세서 코어들의 세트(set)에 의해 실행된다. 프로세서들은 VMM(202)의 실행과 하나 이상의 게스트들(206)의 실행 간의 스위츠(switch)를 행한다. 본 명세서에서 지칭되는 바와 같이, "월드 스위치(world switch)"는 게스트의 실행과 VMM의 실행 간의 스위치다. 일반적으로, 월드 스위치는 VMMCALL 지시에 의해, 또는 다른 적당한 기술들에 의해, 예를 들어, 인터럽트 메커니즘(interrupt mechanism)들이나 이하에서 설명되는 제어 블럭에 의해 정의되는 미리 결정된 지시들에 의해, 시작될 수 있다. 특정 월드 스위치가 특정 기술을 이용하여 시작되는 것으로 본 명세서에서 설명될 수 있지만, 다른 적당한 기술들이 이용될 수 있다. 월드 스위치 동안, 현재의 프로세서 코어 환경(예를 들어, 게스트 또는 VMM)은 자신의 상태 정보를 저장하고, 프로세서 코어 실행이 스위치되는 타겟 코어 환경(예를 들어, VMM 또는 게스트)을 위해 상태 정보를 복구한다. 예를 들어, VMM이 실행을 위해 스케줄링된 게스트를 실행할 때, VMM은 월드 스위치를 실행한다. 이와 유사하게, VMM이 물리적 자원들에 대한 제어를 수행할 때(예를 들어, 게스트가 주변 디바이스에 액세스를 시도할 때, 또는 메모리의 새로운 페이지가 게스트에 할당될 때, 또는 VMM이 또 다른 게스트를 스케줄링할 시간일 때 등), 게스트 실행으로부터 VMM 실행으로의 월드 스위치가 행해진다.
가상화 기술들은 (펌웨어를 포함하는) 소프트웨어만을 이용하여 구현될 수 있거나 소프트웨어와 하드웨어의 조합에 의해 구현될 수 있다. 예를 들어, 일부 프로세서들은 가상화 하드웨어를 포함하고, 이 가상화 하드웨어는 VMM 코드를 단순화시키며 전체 가상화에 대한 시스템 성능을 향상시킨다(예를 들어, AMD-V와 인텔(Intel) VT-x에 의해 제공되는 가상화를 위한 하드웨어 확장들). 본 명세서에서 설명되는 바와 같이, 소프트웨어는 디스크, 테이프, 또는 다른 자기 저장 매체, 광 저장 매체, 또는 전자 저장 매체의 세트로부터 선택되는 적어도 하나의 컴퓨터 판독가능 매체에 인코딩될 수 있다.
가상화 기술들은, 컴퓨팅 시스템의 하나 이상의 프로세서 코어들을, VMM의 제어 하에서 컴퓨터 시스템의 하나 이상의 다른 처리 코어들 상에서 게스트로서 실행되는 오퍼레이팅 시스템으로부터 격리하거나 고립시키기 위해 이용될 수 있다. 가상화 시스템의 적어도 하나의 실시예에서, 고립된 코어들은 디팩토 가속기(de facto accelerator)들로서 구성될 수 있다. 즉, 고립된 코어들은, 오퍼레이팅 시스템 환경 내에서부터 시작되는 작업을 완료하기 위해, VMM에 의해 이용된다. 호스트 코어들 및 고립된 코어들은 공유된 메모리 환경 내에 상주하지만, 고립된 코어들은 오페레이팅 시스템에 의해 직접적으로 관리되지 않는다. VMM은 고립된 코어들과 호스트 코어들 간의 통신을 위한 운반체(vehicle)로서 구성된다. 예시적인 VMM은 공유된 메모리 공간 내에서 구현되는 큐-기반 아키텍처(queue-based architecture)를 이용하여 작업 요청들, 페이지 오류들, 및 완료 정보를 전파하기 위한 메모리-기반 솔루션(memory-based solution)을 구현한다. 연산 작업(computational work)은 게스트 오퍼레이팅 시스템의 범위 내에서 시작될 수 있다. 그 다음으로, VMM은 고립된 코어들과 오퍼레이팅 시스템 간의 작업을 조정한다. 따라서, VMM은 일반적인 연산 가속을 구현하기 위해 이용될 수 있다. 고립된 코어들과 VMM은 인스턴트-온 애플리케이션 방식을 구현하기 위해 이용될 수 있다. 또한, VMM은, 고립된 코어들을 네트워크 디바이스 가속기들로서 구성하기 위해 이용될 수 있다.
게스트 오퍼레이팅 시스템에 의해 이용되는 코어들(즉, 호스트 코어들)의 수는 선택가능할 수 있다. 예를 들어, 호스트 코어들의 수는 특정한 게스트 오퍼레이팅 시스템이 사용할 수 있는 코어들의 최대의 수일 수 있다. 그러나, 가상화 시스템의 적어도 하나의 실시예에서, 게스트 오퍼레이팅 시스템에 의해 이용되는 코어들의 수는 이러한 것에만 한정되지 않는바, 시스템은 오퍼레이팅 시스템을 위한 미리 결정된 수의 코어들로 구성될 수 있고, 여기서 상기 미리 결정된 수는 코어들의 최대의 수보다 작다.
도 3을 참조하면, 예시적인 컴퓨팅 시스템(400)은 VMM(402)을 포함한다. VMM(402)은 결합해제된 아키텍처를 모방하는바, 즉, VMM(402)은 애플리케이션들 또는 애플리케이션 태스크(task)들을 실행하기 위해 코어들을 고립시킨다. 적어도 하나의 실시예에서, VMM(402)은 코어들(404)로부터 코어들(406)을 고립시킨다. 적어도 하나의 실시예에서, VMM(402)은 호스트 코어들(404) 및 고립된 코어들(406)에게 개별 가상 메모리 공간들을 할당한다. 적어도 하나의 실시예에서, VMM(402)은 호스트 코어들(404) 및 고립된 코어들(406)에게 공유된 가상 메모리 공간을 할당한다. 공유된 가상 메모리 공간을 구현하기 위한 기술들은, 미국 특허 출원 번호 제12/648,550호(발명의 명칭: "SYSTEMS AND METHODS IMPLEMENTING NON-SHARED PAGE TABLES FOR SHARING MEMORY RESOURCES MANAGED BY A MAIN OPERATING SYSTEM WITH ACCELERATOR DEVICES", 발명자: Patryk Kaminski, Thomas Woller, Keith Lowery, 및 Erich Boleyn, 출원일: 2010년 12월 29일), 그리고 미국 특허 출원 번호 제12/648,556호(발명의 명칭: "SYSTEMS AND METHODS IMPLEMENTING SHARED PAGE TABLES FOR SHARING MEMORY RESOURCES MANAGED BY A MAIN OPERATING SYSTEM WITH ACCELERATOR DEVICES", 발명자: Patryk Kaminski, Thomas Woller, Keith Lowery, 및 Erich Boleyn, 출원일: 2009년 12월 29일)에서 설명된다.
적어도 하나의 실시예에서, VMM(402)은, 호스트 코어들(404) 상에서의 게스트의 실행을 위한 상태 및 제어 정보와, 고립된 코어들(406) 상에서의 작업 단위의 실행을 위한 상태 및 제어 정보의 세트를 포함하는 제어 블럭들의 세트를 유지한다. 적어도 하나의 실시예에서, 이 제어 블럭들은 가상 머신 제어 블럭들(Virtual Machine Control Block, VMCB)로서 알려져 있다. 각각의 게스트 및 디팩토 가속기는 대응하는 제어 블럭과 연관될 수 있다. 예시적인 제어 블럭들은 메모리 내에 그리고/또는 호스트 하드웨어의 저장장치 내에 저장될 수 있고, 그리고 대응하는 게스트 또는 디팩토 가속기를 위한 상태 및 제어 정보, 및/또는 VMM을 위한 상태 및 제어 정보를 포함할 수 있다. 예를 들어, 제어 블럭은 게스트가 마지막으로 탈출한 지점에서의 코어 상태에 대응하는 상태 정보를 포함한다. 예시적인 제어 블럭들은 특정한 지시들에 의해 액세스될 수 있고, 정보는 미리 결정된 데이터 구조들의 특정한 필드(field)들 내에 저장될 수 있다.
컴퓨팅 시스템(400)의 적어도 하나의 실시예에서, VMM(402)은 디팩토 가속기로서 이용하기 위한 적어도 하나의 코어(예를 들어, 고립된 코어들(406))를 격리하도록 구성된다. 오퍼레이팅 시스템(408)(예를 들어, 마이크로소프트 윈도우즈)은 호스트 코어들(404)(예를 들어, x86 코어들) 상에서 게스트로서 실행되고, 애플리케이션(414)은 오퍼레이팅 시스템(408) 상에서 실행된다. 오퍼레이팅 시스템(408) 상에서 실행되는 커널 모드 드라이버(kernel mode driver)(410)는 디팩토 가속기들에 대한 사용자 애플리케이션(414)의 간접적인 액세스를 제공하기 위해 VMM(402)과 정보를 교환한다. 게스트 오퍼레이팅 시스템은 커널 모드 드라이버(410)를 이용하여, 예를 들어, 호출(call)을 이용하여, 고립된 코어들(406)을 사용할 수 있다. VMM(402)과 게스트 오퍼레이팅 시스템(408) 간의 통신 및 VMM(402)과 디팩토 가속기들 간의 통신은 공유된 가상 메모리 내의 큐(queue)들(예를 들어, 작업 큐(work queue)(424), 명령 큐(command queue)(418), 오류 큐(fault queue)(422), 및 응답 큐(response queue)(420))을 이용하여 달성된다.
스케줄러(scheduler)(416)는 스레드 풀(thread pool)을 포함하고, 이 스레드 풀에 걸쳐 작업 항목(work item)들이, 이용가능한 분리된 코어들(406)에 분배된다. 스케줄러(416)의 적어도 하나의 실시예에서, 작업 단위들은 라운드-로빈 스케줄링(round-robin scheduling)을 이용하여, 이용가능한 분리된 코어들에 할당되지만, 다른 적당한 스케줄링 알고리즘들(예를 들어, 동적 우선순위 스케줄링, 등)이 스케줄러(416)의 다른 실시예들에서 이용될 수 있다. 컴퓨팅 시스템(400)의 적어도 하나의 실시예에서, 스케줄러(416)는 사용자-모드 스케줄러이고, 이것은 스케줄링이 오퍼레이팅 시스템으로부터 분리되어 수행되도록 한다. 그러나, 컴퓨팅 시스템(400)의 적어도 하나의 실시예에서, 스케줄러(416)는 커널-모드 스케줄러이고, 이것은 오퍼레이팅 시스템의 커널-레벨 부분들의 수정을 필요로 한다. 컴퓨팅 시스템(400)의 적어도 하나의 실시예에서, 스케줄러(416)의 기능의 적어도 일부는 VMM(402)에 의해 수행되고, 그리고/또는 스케줄러(416)의 기능의 적어도 일부는 커널 모드 드라이버(410)에 의해 수행된다. VMM(402)은, 관련된 토폴로지(topology) 및 아키텍처 정보를, 커널 모드 드라이버(410)에게 가시적인 정보 또는 제어 구조 내에 유지한다. VMM(402)은 적어도, 이용가능한 디팩토 가속기들에 대한 정보를 커널 모드 드라이버(410)에 제공한다.
컴퓨팅 시스템(400)의 적어도 하나의 실시예에서, 오류 큐(422), 명령 큐(418), 응답 큐(420) 및 작업 큐(424)는 공유된 가상 메모리 공간에서 구현된다. 이러한 큐들 전부는 오퍼레이팅 시스템 액세스(예를 들어, 커널 모드 액세스)를 필요로 한다. 컴퓨팅 시스템(400)의 적어도 하나의 실시예에서, 큐들은 생성 애플리케이션(creating application)의 프로세스 컨텍스트(process context)의 외부로부터 액세스 가능해야 한다. 따라서, 오퍼레이팅 시스템(408)은 메모리 변환을 제공해야 한다. 작업 큐만이 사용자-모드 액세스를 필요로 한다. 적어도 하나의 실시예에서, 큐들(418, 420, 422 및 424)은 비-고정(non-locking) 구현예들을 이용하고, 단일 판독기(reader) 및 단일 기록기(writer)를 위해 구성된다. 가상 머신 모니터(402)는 오류 큐(422) 및 응답 큐(420)에 인큐(enqueue)를 행한다. 커널 모드 드라이버(410)는 오류 큐(422) 및 응답 큐(420)로부터 디큐(dequeue)를 행한다. 커널 모드 드라이버(410)는 명령 큐(418)에 인큐를 행하고, VMM(402)은 명령 큐(418)로부터 디큐를 행한다. 애플리케이션(414)은 작업 큐(424)에 인큐를 행한다. VMM(402) 및/또는 커널 모드 드라이버(410)를 이용하여 구현될 수 있는 스케줄러(416)는 작업 큐(424)로부터 디큐를 행한다.
컴퓨팅 시스템(400)의 적어도 하나의 실시예에서, 애플리케이션(414)은 큐잉 인터페이스(queueing interface)들을 초기화(initialize)하기 위해 큐잉 애플리케이션 프로그래밍 인터페이스(Application Programming Interface, API)(412)를 호출한다. 큐잉 API(412)는 커널 모드 드라이버(410)를 인스턴스화(instantiate) 하고 그리고 문서화된 입력/출력 제어(ioctl) 호출들을 행하여 큐들을 할당한다. 앞서 설명된 바에 따라, 커널 모드 드라이버(410)는, ioctl 명령을 수신하고, 그리고 적절한 엔티티(entity)들(예를 들어, VMM(402) 및 커널 모드 드라이버(410))에 의해 판독 또는 기록될 수 있는 큐들을 할당한다. 커널 모드 드라이버(410)는 작업 큐(424)를 어드레스 공간과 연관시키는 내부 작업 테이블(internal work table)을 생성한다. 또한, 커널 모드 드라이버(410)는 페이지 테이블(page table)을 생성하고, 디팩토 가속기들을 위한 스택(stack)들을 할당한다. 커널 모드 드라이버(410)는 커널 모드 스레드를 생성하고, 또한, 애플리케이션(414)에 의한 이용을 위해 작업 큐(424)에 대한 포인터(pointer)를 반환한다.
컴퓨팅 시스템(400)의 적어도 하나의 실시예에서는, 큐들을 처리하기 위해 폴링 기술(polling technique)들이 이용된다. 컴퓨팅 시스템(400)의 적어도 하나의 실시예에서는, 폴링 기술들을 이용하는 것이 아니라, VMM(402)과 게스트 오퍼레이팅 시스템(408) 간의 통신 및 VMM(402)과 (디팩토 가속기들로서 구성되는) 고립된 코어들(406) 간의 통신이 도어벨 기술(doorbell technique)들을 이용하여 달성된다. 일반적으로, 큐에 대한 임의의 기록기(예를 들어, 커널 모드 드라이버(410), 큐잉 API(412), 또는 VMM(402))는 이용가능한 큐 항목들을 수신자(recipient)(예를 들어, 커널 모드 드라이버(410) 또는 VMM(402))에게 통지하기 위해 도어벨(doorbell)을 울릴 것이다. 컴퓨팅 시스템의 적어도 하나의 실시예에서, VMM(402)은 특정 큐를 위한 도어벨로서 작용하는 VMM 호출을 지원한다. 어느 큐가 새로운 엔트리(entry)를 포함하고 있는지를 나타내는 정보, 및/또는 다른 적당한 정보가 VMM 호출의 파라미터들 내에 포함된다. 또한, VMM(402)은 소프트웨어 인터럽트(software interrupt)를 발행함으로써 커널 모드 드라이버(410)의 도어벨을 울린다. 상이한 도어벨 수신자들 간의 구별을 위해 상이한 소프트웨어 인터럽트들이 이용될 수 있다.
예를 들어, 애플리케이션(414)은 큐잉 API(412)를 통해 작업 큐(424)에 엔트리를 밀어넣을 수 있고, 커널 모드 드라이버(410)는 작업 큐가 새로운 엔트리를 가지고 있음을 나타내기 위해, 예를 들어, VMMCALL을 실행함으로써, VMM(402)을 위한 도어벨을 울린다. VMMCALL 지시는 게스트 오퍼레이팅 시스템(408)으로부터 VMM(402)으로 제어를 전달한다. 이와 유사하게, 커널 모드 드라이버(410)가 명령 큐(418)에 명령을 밀어넣을 때, 커널 모드 드라이버(410)는 명령 큐가 새로운 엔트리를 가지고 있음을 나타내기 위해 VMM(402)을 위한 도어벨을 (예를 들어, VMMCALL을 실행함으로써) 울린다. 또 다른 예에서, 디팩토 가속기로서 구성되는 고립된 코어(406) 상에서 작업 단위가 완료되었을 때, VMM(402)은 오류 큐(422)에 엔트리를 밀어넣을 수 있고, 오류 큐 인터럽트를 로컬 어드밴스드 프로그램가능 인터럽트 제어기(Advanced Programmable Interrupt Controller, APIC)를 통해 호스트 코어(404)에 송신할 수 있다. VMM(402)은 소프트웨어 인터럽트들을 이용하여 커널 모드 드라이버(410)의 도어벨을 울릴 수 있다. 이용되는 특정한 인터럽트 번호가 구성 블럭 내의 필드에 저장되고 커널 모드 드라이버(410)에 의해 유지된다.
애플리케이션(414)은 작업 큐(424)를 생성하고, 작업 큐 테이블에서의 엔트리 포인트(entry point)에 대해 커널 모드 드라이버(410)에 등록한다. 애플리케이션(414)은 작업 항목들을 작업 큐(424)에 추가하기 위해 큐잉 API(412)를 이용한다. 큐잉 API(412)는 스케줄러(416)의 도어벨을 울린다. 스케줄링 로직이 커널 모드 드라이버(410) 내에 상주하는 실시예들에서, 커널 모드 드라이버(410)는 작업 큐(424)를 판독할 것이다. 따라서, VMM(402)에 대한 호출들은 VMM(402)에 의해 어느 코어가 타겟으로 되어야 하는지에 대한 표시자(indicator)를 명시적으로 포함할 것이다. 도어벨에 응답하여, 스케줄러(416)는 디팩토 가속기가 이용가능한 것인지를 결정한다. 디팩토 가속기가 이용가능하지 않을 경우, 스케줄러(416)는 작업 큐(424)가 비어있지 않음을 표시하기 위해 상태를 업데이트한다. 디팩토 가속기가 이용가능한 경우, 스케줄러(416)는 작업 큐(424)를 판독한다. 스케줄러(416)는 이용가능한 디팩토 가속기를 선택하고, VMM(402)에 대한 스케줄링 호출을 행한다.
컴퓨팅 시스템(400)의 적어도 하나의 실시예에서, 스케줄러(416)가 VMM(402)으로부터 개별적일 때, 스케줄러(416)는 명령 큐(418)에 명령을 기록할 수 있고, VMM(402)의 도어벨을 울릴 수 있다. 그 다음으로, VMM(402)은 실행 컨텍스트를 설정하고, 디팩토 가속기로서 구성되는 타겟 고립된 코어(406)를 초기화한다. VMM(402)은 응답 큐(420)에 기록을 행하고, 스케줄러(416)는 고립된 코어들(406)의 상태에 대한 가시성(visibility)(예를 들어, 이용가능성(availability))을 유지하기 위해 응답 큐(420)를 처리한다. 스케줄러(416)가 작업 큐(424)로부터 작업 항목을 디큐할 때, 스케줄러(416)는 디팩토 가속기들로서 구성되는 고립된 코어(406)의 이용가능한 디팩토 가속기들의 리스트를 참고하고, 타겟 고립된 코어(406)를 선택한다. 그 다음으로, 스케줄러(416)는 작업 항목 및 타겟 고립된 코어(406)를 표시하는 명령 큐 엔트리를 생성 및 인큐한다. 그 다음으로, 스케줄러(416)는 VMM(402)의 도어벨을 울린다. 스케줄러(416)로 하여금 자원 이용가능성의 정확한 전망을 유지하도록 하기 위해, 스케줄러(416)에는 작업 항목 완료가 통지되어야 한다. 컴퓨팅 시스템(400)의 적어도 하나의 실시예에서는, 시스템 스택이 조작되어, 작업 항목으로부터의 반환은 작업 항목 완료를 VMM(402)에게 통지하기 위해 VMM 호출을 행한다.
도 3, 도 4 및 도 5를 참조하면, 시스템 리셋(reset)시, VMM(402)이 시스템(400)의 코어들(예를 들어, 호스트 코어들(404) 및 고립된 코어들(406)) 상에서 부팅(booting)된다(502). 적어도 하나의 실시예에서, VMM(402)은 기본 입출력 시스템(Basic Input Output System, BIOS)과는 별도로, 메모리로부터 (예를 들어, 하드 드라이브 상에서) 부팅된다. 그 다음으로, 가상 머신 모니터(402)는 오퍼레이팅 시스템 코어들(404) 상에서 오퍼레이팅 시스템(408)을 게스트로서 부팅하고, 코어들(402)로부터 코어들(406)을 고립시킨다(504). 예를 들어, 오퍼레이팅 시스템(408)을 부팅할 때, VMM(402)은 실행이 행해지게 되는 코어들의 수를 오퍼레이팅 시스템(408)에게 통지한다. 그러면, 오퍼레이팅 시스템(408)은 고립된 코어들(406)에 대한 액세스를 시도하지 않을 것이다. 오퍼레이팅 시스템 코어들(404)로부터 코어들(406)을 고립시키기 위한 다른 기술들은 BIOS 테이블들을 수정하는 것을 포함하고, 이에 따라, 오퍼레이팅 시스템(408)은 코어들의 총 개수보다 작은 특정 개수의 코어들만 알게 되고, 이 경우 가상 머신 모니터(402)는 양쪽 코어 세트들에 대한 환경들을 제어한다. 이러한 BIOS 테이블들은 판독전용 메모리로부터 자동으로 로딩될 수 있거나, 혹은 VMM(402)에 의해 패치인(patch in)될 수 있다. 오퍼레이팅 시스템으로부터 코어들을 고립시키기 위한 또 다른 기술에서, VMM(402)은 다수의 오퍼레이팅 시스템 코어들을 구성하기 위해 오퍼레이팅 시스템 명령들을 가로챈다.
코어들이 고립되고 오퍼레이팅 시스템이 부팅된 후, 오퍼레이팅 시스템(408)은 가속된 컴퓨팅 커널 모드 디바이스 드라이버(410)를 로딩한다(508). 애플리케이션(414)은 오퍼레이팅 시스템(408) 상에서 실행된다(510). 애플리케이션(414)은 작업 단위들을 생성하고, 그 다음으로, 이 작업 단위들은 고립된 코어들(406) 상에서 실행되도록 스케줄된다(512). 완료시, VMM(402)은 완료된 작업을 오퍼레이팅 시스템(408)에게 통지한다(514).
도 3, 도 4, 및 도 6을 참조하면, 작업 단위 시작 처리(work unit initiation process)가 더욱 구체적으로 설명된다. 컴퓨팅 시스템(400)의 적어도 하나의 실시예에서, 커널 모드 드라이버(410)는 내부 작업 테이블을 생성하고, 이 내부 작업 테이블은 작업 큐 테이블 엔트리들을 추가하기 위해 이용될 수 있다(602). 애플리케이션(414)은 작업 큐를 생성하고, 작업 큐 테이블에서의 엔트리에 대해 커널 모드 드라이버(410)에 등록한다(604). 실행 동안, 애플리케이션(414)은 작업 큐 엔트리를 작업 큐(424)에 밀어넣는다(606). 커널 모드 드라이버(410)는, 앞서 설명된 바와 같이, 도어벨(예를 들어, VMMCALL)을 이용하거나 다른 적당한 통지 기술을 이용하여, 작업 큐(424)가 새로운 엔트리를 가지고 있음을 VMM(402)에게 통지한다(608). 가상 메모리 모니터(402)는 호스트 코어들(404) 상에서 도어벨을 처리하고, INIT 프로세서간 인터럽트(Inter-Processor Interrupt, IPI)를 특정한 고립된 코어(406)에 송신한다. 가상 머신 모니터(402)는 특정한 고립된 코어(406) 상의 VMM(402)으로의 탈출을 처리한다(610). 특정한 고립된 코어(406)가 아이들(idle)인 경우(즉, 작업 단위를 이미 처리하고 있지 않은 경우), VMM(402)은 작업 큐(424)로부터 다음 작업 단위 엔트리를 끌어당기고(612), VMCB를 수정하고, 그리고 작업 단위를 처리하기 위한 코드의 실행을 시작한다(614). 그렇지 않은 경우, 특정한 고립된 코어는 이전에 착수된 작업 단위를 계속 실행한다. 컴퓨팅 시스템(400)의 적어도 하나의 실시예에서, 특정한 고립된 코어(406)가 이미 작업 단위를 실행하고 있는 경우, VMM(402)은 그 특정한 고립된 코어(406)를 VMM(402)으로의 탈출에 의해 중단하지 않을 것이다.
작업 단위를 처리하는 동안, 디팩토 가속기로서 구성되는 고립된 코어(406)는 페이지 오류(page fault)를 경험할 수 있다(즉, 고립된 코어(406)가, 어드레스 공간 내에 맵핑되지만 물리적 메모리로 로딩되지 않는 페이지에 액세스하는 경우). 도 3, 도 4 및 도 7을 참조하면, 컴퓨팅 시스템(400)의 적어도 하나의 실시예에서, 고립된 코어(406)가 경험하는 그러한 페이지 오류들은 VMM(402)에 의해 인식되고, 월드 스위치가 VMM(402)에게 발생한다(702). 가상 머신 모니터(402)는 고립된 코어로부터 페이지 오류 정보를 획득하고, 커널-레벨 페이지 오류 엔트리를 생성하는바, VMM(402)은 생성된 엔트리를 사용자 오류 큐(user fault queue)(422)에 밀어넣는다(704). 가상 머신 모니터(402)는 로컬 APIC를 통해 호스트 코어들(404) 중의 하나의 호스트 코어에 오류 큐 인터럽트(fault queue interrupt)를 발행한다(706). 커널 모드 드라이버(410) 인터럽트 핸들러(interrupt handler)는 인터럽트를 처리하고, 오류 큐에 의해 연기된 프로시저 호출(procedure call)을 실행하고, 시스템 오류 큐(428)에서 오류를 판독한다. 커널 모드 드라이버(410)는 사용자 프로세스와 연관된 페이지 테이블들을 업데이트하고(710), 디팩토 가속기로서 구성되는 고립된 코어(406)에 의한 실행을 재개하기 위한 명령(예를 들어, 타겟 코어를 위한 필드를 포함하는 CMD_RESUME)을 생성한다(712). 커널 모드 드라이버(410)는 그 명령을 명령 큐(418)에 밀어넣고(712), 명령 큐(418)가 새로운 엔트리를 가지고 있음을 표시하는 VMM(402)의 도어벨(예를 들어, VMMCALL)을 울린다(714). 가상 머신 모니터(402)는 호스트 코어(404) 상에서 VMMCALL을 처리하고, 프로세서간 인터럽트(즉, INIT IPI)를 고립된 코어(406)에 발행하는바, 고립된 코어(406)는 명령 큐(418)를 처리하는 큐 핸들러(412)(즉, 디팩토 가속기 코어 0)를 포함한다. 프로세서간 인터럽트에 응답하여, 디팩토 가속기 코어 0은 명령 큐(418)를 판독하고 명령(예를 들어, CMD_RESUME)을 처리하여(716), 예를 들어, 프로세서간 인터럽트를 적절한 고립된 코어(406)에 송신함으로써 작업 단위의 처리를 재개한다(718). 그 다음으로, 가상 머신 모니터(402)는 VMEXIT를 처리하고(예를 들어, 월드 스위치를 수행하고), 고립된 코어(406)는 작업 단위의 처리를 재개한다(720).
도 3, 도 4 및 도 8을 참조하면, 컴퓨팅 시스템(400)의 적어도 하나의 실시예에서, 작업 단위가 처리되었고 고립된 코어(406)가 작업 단위에 대한 마지막 지시를 실행하면, 고립된 코어(406)는 작업 단위가 실행을 완료하였음을 표시하는 하나 이상의 지시들을 포함하는 루틴(예를 들어, VMMCALL)을 실행한다(802). 따라서, 고립된 코어(406)는 VMM(402)의 실행으로 복귀하고, VMM(402)은 작업 단위 완료의 표시자를 처리한다(804). 컴퓨팅 시스템(400)의 적어도 하나의 실시예에서, VMM(402)은 자신이 작업 단위 완료의 통지를 발행하도록 구성되어 있는지를 결정한다(808). VMM이 통지를 발행하도록 구성되어 있지 않은 경우, VMM(402)은 다음 작업 단위를 처리하도록 진행할 것이다(810). 대안적으로, VMM은 완료 지시를 발행할 것이다. 적어도 하나의 실시예에서, VMM(402)은 작업 단위 완료 엔트리를 시스템 오류 큐(428)에 밀어넣고, VMM(402)은 오류 큐 인터럽트를 (예를 들어, 로컬 APIC를 통해) 오퍼레이팅 시스템 코어(404)에 송신한다(812).
커널 모드 드라이버(410)는 오류 큐 인터럽트를 처리하고, 시스템 오류 큐로부터 엔트리를 판독한다. 커널 모드 드라이버(410)는 오류 엔트리와 연관된 사용자 프로세스 컨텍스트를 위치시키고, 오류 엔트리를 프로세스 컨텍스트를 위한 특정한 사용자 오류 큐(422)에 밀어넣는다(814). 커널 모드 드라이버(410)에서의 사용자 작업 스레드 핸들러(user work thread handler)는 사용자 오류 큐(422)로부터 오류 엔트리를 끌어당기고, 작업 단위를 완료한다(818).
도 9를 참조하면, 컴퓨팅 시스템(400)의 적어도 하나의 실시예에서, 고립된 코어들(406)은 디팩토 가속기들로서가 아니라, 인스턴트-온 애플리케이션 사용을 위해 구성된다. 시스템 리셋시, VMM(402)은 시스템(400)의 코어들(예를 들어, 호스트 코어들(404) 및 고립된 코어들(406)) 상에서 부팅된다(902). 예를 들어, VMM(402)은 BIOS 내에 상주할 수 있고, 코어들(402)로부터 코어들(406)을 자동으로 고립시킨다(904). 가상 머신 모니터(402)는 파일 시스템에 액세스하도록 구성되고, 고립된 코어들(406) 중의 하나 이상의 코어 상에서 사용자 애플리케이션을 실행한다(906). 한편, VMM(402)은 호스트 코어들(404) 상에서 오퍼레이팅 시스템(408)을 게스트로서 부팅한다(906). 가상 머신 모니터(402)는, 고립된 코어들(406) 상에서 초기에 실행될 애플리케이션을 포함하는 매체에 액세스하기 위해 하나 이상의 드라이버들 또는 기본 입출력 시스템(즉, BIOS 인터페이스) 기능들을 포함한다.
VMM(402)이 일반적으로 가상 머신 모니터로서 설명되지만, 적어도 하나의 실시예에서, VMM(402)은 본 명세서에서 설명되는 기능 및 약간의 다른 가상화 기능들을 제공하도록 구성되는 가상 머신 모니터의 최소한의 구현예이다. 또 다른 실시예에서, 본 명세서에서 설명되는 VMM(402)의 기능은 다른 전형적인 가상 머신 기능들을 제공하는 범용 가상 머신 모니터에 통합된다. 컴퓨팅 시스템(400)의 적어도 하나의 실시예에서, 가상 머신 모니터들은 내포될 수 있는바, 예를 들어, 오퍼레이팅 시스템(408)은, 본 명세서에서 설명된 기능을 따르는, VMM(402)에 의해 제어되는 VMM 머신 모니터이다. 컴퓨팅 시스템(400)의 적어도 하나의 실시예에서, 코어들을 고립시키기 위한 가상화 기술들의 이용은 오퍼레이팅 시스템에 대한 수정을 전혀 필요로 하지 않는다.
본 명세서에서 기재되는 본 발명의 설명은 예시적이며, 다음의 특허 청구항들에 기재된 바와 같은 본 발명의 범위를 한정하도록 의도된 것이 아니다. 예를 들어, VMM의 제어 하에서 게스트 오퍼레이팅 시스템 상의 애플리케이션 실행을 위해, 고립된 코어들이 디팩토 가속기들로서 구성되는 실시예로 본 발명이 설명되었지만, 당업자는 본 명세서의 가르침이 인스턴트-온 애플리케이션들, 네트워크 디바이스 가속, 및 범용 연산 가속을 위해 사용될 수 있음을 알 것이다. 예를 들어, VMM(402)은 네트워크 라우터 디바이스로 하여금 고립된 코어들(406)을 이용하여 패킷 검사 기능들을 가속시키도록 조정할 수 있다. 또한, 본 발명이 컴퓨팅 시스템에서 일반적으로 설명되었지만, 본 명세서에서 설명되는 가르침의 실시예들은 서버들, 데스크톱 시스템들(예를 들어, 개인용 컴퓨터들), 내장된 애플리케이션들(예를 들어, 이동 통신 디바이스들) 및 다른 적당한 애플리케이션들 내에 포함될 수 있다. 본 명세서에서 기술된 실시예들의 변형들 및 수정들이, 다음의 청구항들에서 기술되는 바와 같은 본 발명의 범위 및 사상으로부터 벗어남이 없이, 본 명세서에서 기술된 설명에 기초하여 행해질 수 있다.

Claims (21)

  1. 프로세서 코어들을 사용하기 위한 방법으로서, 상기 방법은,
    복수의 코어(core)들을 포함하는 컴퓨터 시스템(computer system) 상에서 가상 머신 모니터(virtual machine monitor)를 실행하는 단계와;
    상기 복수의 코어들 중 하나 이상의 코어들을 제1의 코어 서브세트(subset)로서 선택하는 단계와;
    상기 제1의 코어 서브세트 상에서 오퍼레이팅 시스템(operating system)을 실행하는 단계와, 여기서 상기 오퍼레이팅 시스템은 상기 가상 머신 모니터의 제어 하에서 게스트(guest)로서 실행되고, 그리고 상기 오퍼레이팅 시스템을 사용하여 애플리케이션(application)이 실행되며;
    상기 복수의 코어들 중의 코어들로 된 제2의 코어 서브세트를 하나 이상의 컴퓨팅 가속기(computing accelerator)들로서 상기 오퍼레이팅 시스템으로부터 고립(sequestering)시키는 단계와, 여기서 상기 제1의 코어 서브세트와 상기 제2의 코어 서브세트는 상호 배타적(mutually exclusive)이며, 상기 가상 머신 모니터는 상기 제1의 코어 서브세트 및 상기 제2의 코어 서브세트에 대한 인터페이스(interface)를 제공하고;
    상기 제2의 코어 서브세트에 의해 완료되어야 할 상기 애플리케이션에 대한 작업을 스케줄링(scheduling)하는 단계와;
    상기 제1의 코어 서브세트의 코어에 의해 일어난 프로세서간 인터럽트(inter-processor interrupt)에 응답하여 상기 제2의 코어 서브세트의 코어가 상기 가상 머신 모니터로 탈출(exit)하도록 하는 단계와; 그리고
    상기 제2의 코어 서브세트 상에서 상기 애플리케이션에 대한 상기 작업을 실행하는 단계를 포함하여 구성되며,
    상기 제2의 코어 서브세트는 상기 오퍼레이팅 시스템에 대해 가시적(visible)이지 않으며, 상기 애플리케이션은 상기 가상 머신 모니터를 사용하여 상기 제2의 코어 서브세트에 간접적으로 액세스(indirectly accessing)하는 것을 특징으로 하는 프로세서 코어들을 사용하기 위한 방법.
  2. 제1항에 있어서,
    상기 고립시키는 단계는 공유된 시스템 메모리(shared system memory)의 일부분을 상기 제2의 코어 서브세트에 제공(dedicating)하는 것을 포함하는 것을 특징으로 하는 프로세서 코어들을 사용하기 위한 방법.
  3. 제1항에 있어서,
    이용가능한 컴퓨팅 가속기들에 관한 정보를 상기 오퍼레이팅 시스템 상에서 실행되는 드라이버(driver)에 제공하는 단계를 더 포함하는 것을 특징으로 하는 프로세서 코어들을 사용하기 위한 방법.
  4. 제1항에 있어서,
    상기 하나 이상의 컴퓨팅 가속기들 중의 타겟 가속기(target accelerator)에 의해 완료되어야 할 작업을 스케줄링하는 단계를 더 포함하는 것을 특징으로 하는 프로세서 코어들을 사용하기 위한 방법.
  5. 제1항에 있어서,
    상기 실행하는 단계는,
    상기 컴퓨팅 가속기들에 의해 상기 애플리케이션을 위하여 완료되어야 할 작업을 요청하는 것과;
    상기 오퍼레이팅 시스템에게 완료된 작업을 표시하는 것과; 그리고
    작업 항목(work item)에 의해 생성된 페이지 오류(page fault)들을 처리(handling)하는 것을 포함하는 것을 특징으로 하는 프로세서 코어들을 사용하기 위한 방법.
  6. 제1항에 있어서,
    상기 오퍼레이팅 시스템에 의해 제공되는 애플리케이션 프로그램 인터페이스에, 상기 제2의 코어 서브세트에 의해, 액세스하는 단계를 더 포함하는 것을 특징으로 하는 프로세서 코어들을 사용하기 위한 방법.
  7. 제6항에 있어서,
    상기 애플리케이션 프로그램 인터페이스는 오퍼레이팅 시스템 메모리 할당 루틴(operating system memory allocation routine)과 예외 처리 루틴(exception handling routine) 중 하나인 것을 특징으로 하는 프로세서 코어들을 사용하기 위한 방법.
  8. 제1항에 있어서,
    상기 가상 머신 모니터는 상기 제1의 코어 서브세트 및 상기 제2의 코어 서브세트 상에서 실행되는 것을 특징으로 하는 프로세서 코어들을 사용하기 위한 방법.
  9. 제1항에 있어서,
    상기 제1의 코어 서브세트는 상기 오퍼레이팅 시스템이 사용할 수 있는 코어들의 최대의 수보다 더 적은 수의 코어를 포함하는 것을 특징으로 하는 프로세서 코어들을 사용하기 위한 방법.
  10. 제1항에 있어서,
    상기 고립시키는 단계는 상기 제2의 코어 세트를 고립시키기 위해 BIOS(Basic Input Output System) 테이블(table)들을 수정(modifying)하는 것을 포함하는 것을 특징으로 하는 프로세서 코어들을 사용하기 위한 방법.
  11. 제1항에 있어서,
    상기 선택하는 단계는 임의 개수의 코어들을 상기 제1의 코어 서브세트에 구성하기 위해 오퍼레이팅 시스템 명령(operating system command)을 가로채는(intercepting) 것을 포함하는 것을 특징으로 하는 프로세서 코어들을 사용하기 위한 방법.
  12. 프로세서 코어들을 사용하는 장치로서, 상기 장치는,
    복수의 코어들과;
    상기 복수의 코어들에 의해 액세스가능한 하나 이상의 매체에 인코딩(encoding)되는 오퍼레이팅 시스템 소프트웨어와;
    상기 복수의 코어들에 의해 액세스가능한 하나 이상의 매체에 인코딩되는 애플리케이션 소프트웨어와;
    상기 복수의 코어들에 의해 액세스가능한 하나 이상의 매체에 인코딩되며 상기 복수의 코어들 중의 하나 이상의 코어 상에서 실행가능한 하이퍼바이저 소프트웨어(hypervisor software)와; 그리고
    컴퓨팅 드라이버(computing driver)를 포함하여 구성되며,
    상기 하이퍼바이저 소프트웨어는 상기 복수의 코어들로부터 제1의 코어 세트 및 제2의 코어 세트를 선택하도록 실행가능하고, 그리고 상기 제1의 코어 세트 상에서 게스트로서의 상기 오퍼레이팅 시스템 소프트웨어의 실행을 제어하도록 실행가능하며, 상기 오퍼레이팅 시스템 소프트웨어는 상기 애플리케이션 소프트웨어를 실행하도록 되어 있고,
    상기 애플리케이션 소프트웨어의 적어도 일부 작업은 상기 제2의 코어 세트 상에서 실행되고,
    상기 제2의 코어 세트는 상기 오퍼레이팅 시스템에 대해 가시적이지 않으며, 상기 제1의 코어 세트와 상기 제2의 코어 세트는 상호 배타적이고,
    상기 하이퍼바이저 소프트웨어는 상기 제1의 코어 세트 및 상기 제2의 코어 세트에 대한 인터페이스를 제공하고, 그리고 상기 제1의 코어 세트의 코어에 의해 일어난 프로세서간 인터럽트에 응답하여 상기 제2의 코어 세트의 코어가 상기 하이퍼바이저로 탈출하도록 실행가능하며,
    상기 컴퓨팅 드라이버는 상기 제1의 코어 세트에 의해 액세스가능한 하나 이상의 매체에 인코딩되며, 상기 컴퓨팅 드라이버는 상기 오퍼레이팅 시스템 상에서 실행되고, 그리고 상기 제2의 코어 세트에 대한 상기 애플리케이션의 작업을 스케줄링하기 위해 상기 하이퍼바이저와 상호작용하는 것을 특징으로 하는 프로세서 코어들을 사용하는 장치.
  13. 제12항에 있어서,
    상기 하이퍼바이저 소프트웨어는, 상기 오퍼레이팅 시스템으로부터 상기 제2의 코어 세트를 격리시키기 위해 상기 복수의 코어들 상에서 실행가능한 코드(code)를 포함하는 것을 특징으로 하는 프로세서 코어들을 사용하는 장치.
  14. 제12항에 있어서,
    상기 복수의 코어들에 의해 공유되는 공유된 시스템 메모리를 더 포함하는 것을 특징으로 하는 프로세서 코어들을 사용하는 장치.
  15. 제12항에 있어서,
    상기 애플리케이션 소프트웨어 및 상기 컴퓨팅 드라이버는 상기 애플리케이션과 상기 제2의 코어 세트 간의 통신을 위한 적어도 하나의 큐(queue)를 생성하도록 되어 있는 것을 특징으로 하는 프로세서 코어들을 사용하는 장치.
  16. 제15항에 있어서,
    상기 적어도 하나의 큐는,
    컴퓨팅 드라이버로부터 상기 하이퍼바이저로의 통신을 위해 구성된 명령 큐(command queue)와;
    상기 하이퍼바이저로부터 상기 컴퓨팅 드라이버로의 통신을 위해 구성된 응답 큐(response queue)와;
    상기 하이퍼바이저로부터 상기 컴퓨팅 드라이버로의 통신을 위해 구성된 오류 큐(fault queue)와; 그리고
    컴퓨팅 애플리케이션 프로그램 인터페이스로부터 상기 하이퍼바이저로의 통신을 위해 구성된 작업 큐(work queue)를 포함하는 것을 특징으로 하는 프로세서 코어들을 사용하는 장치.
  17. 제12항에 있어서,
    상기 제1의 코어 세트에 의해 액세스가능한 하나 이상의 매체에 인코딩되는 컴퓨팅 애플리케이션 프로그램 인터페이스를 더 포함하는 것을 특징으로 하는 프로세서 코어들을 사용하는 장치.
  18. 제12항에 있어서,
    상기 오퍼레이팅 시스템 상에서 실행가능한 상기 복수의 코어들에 의해서 액세스가능한 하나 이상의 매체에 인코딩되는 애플리케이션 소프트웨어를 더 포함하고,
    상기 하이퍼바이저 소프트웨어는 상기 제2의 코어 세트를 컴퓨팅 가속기들로서 구성하도록 실행가능한 코드, 그리고 제2의 코어 세트 상에서 상기 애플리케이션 소프트웨어를 위한 작업을 실행하기 위한 코드를 포함하는 것을 특징으로 하는 프로세서 코어들을 사용하는 장치.
  19. 비일시적 컴퓨터 판독가능 저장 매체로서,
    상기 비일시적 컴퓨터 판독가능 저장 매체에는 컴퓨터 프로그램이 수록되어 있고, 상기 컴퓨터 프로그램은,
    가상 머신 모니터로서 실행가능하거나 상기 가상 머신 모니터와 결합되어 실행가능한 하나 이상의 기능 시퀀스(functional sequence)들을 저장하도록 되어 있고;
    컴퓨터 시스템의 복수의 코어들 중 하나 이상의 코어들을 제1의 코어 세트로서 선택하도록 되어 있고;
    상기 제1의 코어 세트 상에서 상기 가상 머신 모니터의 제어 하에 오퍼레이팅 시스템 시퀀스를 게스트로서 실행하도록 되어 있고;
    상기 복수의 코어들 중의 코어들로 된 제2의 코어 세트를 하나 이상의 컴퓨팅 가속기들로서 고립시키도록 되어 있고, 여기서 상기 제1의 코어 세트와 상기 제2의 코어 세트는 상호 배타적이며;
    상기 오퍼레이팅 시스템 상에서 애플리케이션 시퀀스를 실행하도록 되어 있고;
    상기 제2의 코어 세트에 대한 상기 애플리케이션 시퀀스의 적어도 일부 작업을 스케줄링하도록 되어 있고;
    상기 제2의 코어 세트 상에서 상기 애플리케이션 시퀀스의 상기 적어도 일부 작업을 실행하도록 되어 있고, 여기서 상기 제2의 코어 세트는 상기 오퍼레이팅 시스템에 대해 가시적이지 않으며;
    상기 제1의 코어 세트의 코어에 의해 일어난 프로세서간 인터럽트에 응답하여 상기 제2의 코어 세트의 코어가 상기 가상 머신 모니터로 탈출하도록 되어 있고,
    상기 가상 머신 모니터는 상기 제1의 코어 세트 및 상기 제2의 코어 세트에 대한 인터페이스를 제공하도록 되어 있는 것을 특징으로 하는 비일시적 컴퓨터 판독가능 저장 매체.
  20. 제19항에 있어서,
    상기 하나 이상의 기능 시퀀스들은 상기 제2의 코어 세트 상에서 애플리케이션 코드 작업을 실행하기 위해 상기 제2의 코어 세트를 컴퓨팅 가속기들로서 구성하는 것을 특징으로 하는 비일시적 컴퓨터 판독가능 저장 매체.
  21. 제19항에 있어서,
    상기 컴퓨터 프로그램은 디스크(disk), 테이프(tape), 또는 다른 비일시적 저장 매체의 세트로부터 선택되는 적어도 하나의 컴퓨터 판독가능 매체에 인코딩되는 것을 특징으로 하는 비일시적 컴퓨터 판독가능 저장 매체.
KR1020127019346A 2009-12-29 2010-12-14 프로세서 코어들의 하이퍼바이저 격리 KR101668399B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/648,592 2009-12-29
US12/648,592 US9058183B2 (en) 2009-12-29 2009-12-29 Hypervisor isolation of processor cores to enable computing accelerator cores
PCT/US2010/060193 WO2011090596A2 (en) 2009-12-29 2010-12-14 Hypervisor isolation of processor cores

Publications (2)

Publication Number Publication Date
KR20120111734A KR20120111734A (ko) 2012-10-10
KR101668399B1 true KR101668399B1 (ko) 2016-10-21

Family

ID=44189079

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020127019346A KR101668399B1 (ko) 2009-12-29 2010-12-14 프로세서 코어들의 하이퍼바이저 격리

Country Status (6)

Country Link
US (1) US9058183B2 (ko)
EP (1) EP2519877B1 (ko)
JP (1) JP2013516021A (ko)
KR (1) KR101668399B1 (ko)
CN (1) CN102713847B (ko)
WO (1) WO2011090596A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20180116971A (ko) 2017-04-18 2018-10-26 한국전자통신연구원 하이퍼바이저 기반의 가상 머신 격리 장치 및 방법

Families Citing this family (57)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8484653B2 (en) * 2010-07-28 2013-07-09 Red Hat Israel, Ltd. Mechanism for delayed hardware upgrades in virtualization systems
US8418177B2 (en) * 2010-10-01 2013-04-09 Microsoft Corporation Virtual machine and/or multi-level scheduling support on systems with asymmetric processor cores
US9529615B2 (en) * 2010-11-24 2016-12-27 International Business Machines Corporation Virtual device emulation via hypervisor shared memory
US9645823B2 (en) 2011-03-03 2017-05-09 Hewlett-Packard Development Company, L.P. Hardware controller to choose selected hardware entity and to execute instructions in relation to selected hardware entity
US9189283B2 (en) * 2011-03-03 2015-11-17 Hewlett-Packard Development Company, L.P. Task launching on hardware resource for client
US8966625B1 (en) 2011-05-24 2015-02-24 Palo Alto Networks, Inc. Identification of malware sites using unknown URL sites and newly registered DNS addresses
US8555388B1 (en) 2011-05-24 2013-10-08 Palo Alto Networks, Inc. Heuristic botnet detection
US9898316B1 (en) * 2011-09-30 2018-02-20 EMC IP Holding Company LLC Extended fractional symmetric multi-processing capabilities to guest operating systems
CN104106047B (zh) * 2011-12-28 2017-10-13 英特尔公司 用于在操作系统启动后引导类型1虚拟机监视器的系统、方法以及计算机程序产品
US8789047B2 (en) 2012-01-26 2014-07-22 Empire Technology Development Llc Allowing world switches between virtual machines via hypervisor world switch security setting
US20150039873A1 (en) * 2012-04-30 2015-02-05 Gregg B. Lesartre Processor providing multiple system images
US9298504B1 (en) * 2012-06-11 2016-03-29 Amazon Technologies, Inc. Systems, devices, and techniques for preempting and reassigning tasks within a multiprocessor system
US9104870B1 (en) 2012-09-28 2015-08-11 Palo Alto Networks, Inc. Detecting malware
US9215239B1 (en) 2012-09-28 2015-12-15 Palo Alto Networks, Inc. Malware detection based on traffic analysis
US9448829B2 (en) 2012-12-28 2016-09-20 Intel Corporation Hetergeneous processor apparatus and method
US9361416B2 (en) * 2013-01-30 2016-06-07 Empire Technology Development Llc Dynamic reconfiguration of programmable hardware
US9390462B2 (en) 2013-03-15 2016-07-12 Intel Corporation Memory mapping for a graphics processing unit
JP6040101B2 (ja) * 2013-05-31 2016-12-07 株式会社日立製作所 ストレージ装置の制御方法、ストレージ装置及び情報処理装置
CN105393218B (zh) * 2013-06-25 2019-03-01 英派尔科技开发有限公司 用来重构可编程电路的方法、设备以及系统
US9613210B1 (en) 2013-07-30 2017-04-04 Palo Alto Networks, Inc. Evaluating malware in a virtual machine using dynamic patching
US10019575B1 (en) 2013-07-30 2018-07-10 Palo Alto Networks, Inc. Evaluating malware in a virtual machine using copy-on-write
US9811665B1 (en) 2013-07-30 2017-11-07 Palo Alto Networks, Inc. Static and dynamic security analysis of apps for mobile devices
WO2015030717A1 (en) * 2013-08-27 2015-03-05 Empire Technology Development Llc Consolidating operations associated with a plurality of host devices
CN104714843B (zh) * 2013-12-17 2018-06-15 华为技术有限公司 多内核操作系统实例支持多处理器的方法及装置
US10514942B2 (en) 2014-02-24 2019-12-24 Red Hat Israel, Ltd. Using linker scripts for loading system configuration tables
US9766916B2 (en) * 2014-05-05 2017-09-19 International Business Machines Corporation Implementing coherent accelerator function isolation for virtualization
KR101595064B1 (ko) * 2014-06-20 2016-02-18 고려대학교 산학협력단 트러스트 존 가상환경에서의 장치 공유 시스템 및 그 방법
US9489516B1 (en) 2014-07-14 2016-11-08 Palo Alto Networks, Inc. Detection of malware using an instrumented virtual machine environment
US20160019555A1 (en) * 2014-07-15 2016-01-21 Boles Thomas Automated system for rating employee screening practices and corporate management
US9542554B1 (en) 2014-12-18 2017-01-10 Palo Alto Networks, Inc. Deduplicating malware
US9805193B1 (en) * 2014-12-18 2017-10-31 Palo Alto Networks, Inc. Collecting algorithmically generated domains
US9639395B2 (en) 2015-04-16 2017-05-02 Google Inc. Byte application migration
KR102309798B1 (ko) * 2015-04-16 2021-10-06 삼성전자주식회사 Sr-iov 기반 비휘발성 메모리 컨트롤러 및 그 비휘발성 메모리 컨트롤러에 의해 큐에 리소스를 동적 할당하는 방법
US9747122B2 (en) 2015-04-16 2017-08-29 Google Inc. Virtual machine systems
US9996357B2 (en) 2015-10-30 2018-06-12 International Business Machines Corporation Resolving page faults out of context for shared contexts
US10846117B1 (en) * 2015-12-10 2020-11-24 Fireeye, Inc. Technique for establishing secure communication between host and guest processes of a virtualization architecture
US10108446B1 (en) 2015-12-11 2018-10-23 Fireeye, Inc. Late load technique for deploying a virtualization layer underneath a running operating system
US10437623B2 (en) * 2015-12-24 2019-10-08 Intel IP Corporation Fast switching between virtual machines without interrupt virtualization for high-performance, secure trusted-execution environment
CN105700826A (zh) 2015-12-31 2016-06-22 华为技术有限公司 虚拟化方法和装置
GB2549773B (en) * 2016-04-28 2018-05-16 Metaswitch Networks Ltd Configuring host devices
CN108228333A (zh) * 2016-12-14 2018-06-29 中国航空工业集团公司西安航空计算技术研究所 一种多核系统的核间资源隔离方法
US10437616B2 (en) * 2016-12-31 2019-10-08 Intel Corporation Method, apparatus, system for optimized work submission to an accelerator work queue
US10416897B2 (en) 2017-03-27 2019-09-17 SK Hynix Inc. Memory system with latency distribution optimization and an operating method thereof
EP3693853B1 (en) * 2017-11-15 2022-02-23 Huawei Technologies Co., Ltd. Method and device for scheduling acceleration resources, and acceleration system
GB2571922B (en) * 2018-03-05 2020-03-25 Advanced Risc Mach Ltd External exception handling
EP3776194A4 (en) 2018-04-11 2022-06-01 Cornell University METHOD AND SYSTEM FOR IMPROVING THE PERFORMANCE AND ISOLATION OF A SOFTWARE CONTAINER
CN108664273A (zh) * 2018-05-09 2018-10-16 歌尔股份有限公司 一种解决多个软件访问硬件资源冲突的方法及设备
US10956573B2 (en) 2018-06-29 2021-03-23 Palo Alto Networks, Inc. Dynamic analysis techniques for applications
US11010474B2 (en) 2018-06-29 2021-05-18 Palo Alto Networks, Inc. Dynamic analysis techniques for applications
CN112740180B (zh) * 2018-08-03 2024-06-25 辉达公司 适用于人工智能辅助的汽车应用的虚拟机存储器的安全访问
WO2020155005A1 (en) * 2019-01-31 2020-08-06 Intel Corporation Shared memory mechanism to support fast transport of sq/cq pair communication between ssd device driver in virtualization environment and physical ssd
US20220365729A1 (en) * 2019-01-31 2022-11-17 Intel Corporation Shared memory mechanism to support fast transport of sq/cq pair communication between ssd device driver in virtualization environment and physical ssd
US11196765B2 (en) 2019-09-13 2021-12-07 Palo Alto Networks, Inc. Simulating user interactions for malware analysis
US11755785B2 (en) 2020-08-03 2023-09-12 Nxp Usa, Inc. System and method of limiting access of processors to hardware resources
US11500668B2 (en) 2020-10-15 2022-11-15 Red Hat, Inc. Page fault support for virtual machine network accelerators
CN112181626A (zh) * 2020-10-16 2021-01-05 华东计算技术研究所(中国电子科技集团公司第三十二研究所) 脱离Android操作系统调度CPU的系统、方法及介质
US20230033583A1 (en) * 2021-07-30 2023-02-02 Advanced Micro Devices, Inc. Primary input-output queue serving host and guest operating systems concurrently

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030229794A1 (en) 2002-06-07 2003-12-11 Sutton James A. System and method for protection against untrusted system management code by redirecting a system management interrupt and creating a virtual machine container
US20060150183A1 (en) 2004-12-30 2006-07-06 Chinya Gautham N Mechanism to emulate user-level multithreading on an OS-sequestered sequencer
US20080271014A1 (en) 2007-04-26 2008-10-30 Serebrin Benjamin C Lightweight World Switch
US20090007104A1 (en) 2007-06-29 2009-01-01 Zimmer Vincent J Partitioned scheme for trusted platform module support

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7484091B2 (en) * 2004-04-29 2009-01-27 International Business Machines Corporation Method and system for providing a trusted platform module in a hypervisor environment
US8914618B2 (en) * 2005-12-29 2014-12-16 Intel Corporation Instruction set architecture-based inter-sequencer communications with a heterogeneous resource
US8713574B2 (en) * 2006-06-05 2014-04-29 International Business Machines Corporation Soft co-processors to provide a software service function off-load architecture in a multi-core processing environment
US8510859B2 (en) 2006-09-26 2013-08-13 Intel Corporation Methods and arrangements to launch trusted, co-existing environments
US7809895B2 (en) * 2007-03-09 2010-10-05 Oracle America, Inc. Low overhead access to shared on-chip hardware accelerator with memory-based interfaces
US8032897B2 (en) * 2007-07-31 2011-10-04 Globalfoundries Inc. Placing virtual machine monitor (VMM) code in guest context to speed memory mapped input/output virtualization
US8763115B2 (en) * 2007-08-08 2014-06-24 Vmware, Inc. Impeding progress of malicious guest software
JP4775744B2 (ja) * 2007-10-19 2011-09-21 インテル・コーポレーション 信頼できる共存環境をラウンチする方法およびプログラム
US20090187726A1 (en) * 2008-01-22 2009-07-23 Serebrin Benjamin C Alternate Address Space to Permit Virtual Machine Monitor Access to Guest Virtual Address Space
US8819707B2 (en) * 2009-06-18 2014-08-26 Citrix Systems, Inc. Methods and systems for importing a device driver into a guest computing environment
US8910153B2 (en) * 2009-07-13 2014-12-09 Hewlett-Packard Development Company, L. P. Managing virtualized accelerators using admission control, load balancing and scheduling

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030229794A1 (en) 2002-06-07 2003-12-11 Sutton James A. System and method for protection against untrusted system management code by redirecting a system management interrupt and creating a virtual machine container
US20060150183A1 (en) 2004-12-30 2006-07-06 Chinya Gautham N Mechanism to emulate user-level multithreading on an OS-sequestered sequencer
US20080271014A1 (en) 2007-04-26 2008-10-30 Serebrin Benjamin C Lightweight World Switch
US20090007104A1 (en) 2007-06-29 2009-01-01 Zimmer Vincent J Partitioned scheme for trusted platform module support

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20180116971A (ko) 2017-04-18 2018-10-26 한국전자통신연구원 하이퍼바이저 기반의 가상 머신 격리 장치 및 방법
US10534653B2 (en) 2017-04-18 2020-01-14 Electronics And Telecommunications Research Institute Hypervisor-based virtual machine isolation apparatus and method

Also Published As

Publication number Publication date
CN102713847A (zh) 2012-10-03
WO2011090596A3 (en) 2011-10-20
JP2013516021A (ja) 2013-05-09
US9058183B2 (en) 2015-06-16
CN102713847B (zh) 2016-03-16
KR20120111734A (ko) 2012-10-10
WO2011090596A2 (en) 2011-07-28
EP2519877A2 (en) 2012-11-07
EP2519877B1 (en) 2020-04-08
US20110161955A1 (en) 2011-06-30

Similar Documents

Publication Publication Date Title
KR101668399B1 (ko) 프로세서 코어들의 하이퍼바이저 격리
Suzuki et al. {GPUvm}: Why Not Virtualizing {GPUs} at the Hypervisor?
EP3039540B1 (en) Virtual machine monitor configured to support latency sensitive virtual machines
TWI722071B (zh) 虛擬機器之間的中斷
JP5042848B2 (ja) 仮想マシン・モニタの構成部分を特権化解除するためのシステム及び方法
AU2008302393B2 (en) Reducing the latency of virtual interrupt delivery in virtual machines
US8706941B2 (en) Interrupt virtualization
US9304794B2 (en) Virtual machine control method and virtual machine system using prefetch information
JP2018190454A (ja) 動的仮想マシンサイジング
US8612659B1 (en) Hardware interrupt arbitration in virtualized computer systems
NO340567B1 (no) Hierarkisk virtualisering med en flernivå virtualiseringsmekanisme
US10620963B2 (en) Providing fallback drivers for IO devices in a computing system
EP3602290B1 (en) Cooperative virtual processor scheduling
JP2023538093A (ja) コンピュータデバイス、例外処理方法および割り込み処理方法
US11726807B2 (en) Safe execution of virtual machine callbacks in a hypervisor
US10678909B2 (en) Securely supporting a global view of system memory in a multi-processor system
Mitake et al. Light-weighted virtualization layer for multicore processor-based embedded systems
GB2454817A (en) Interrupt handling in a logically partitioned system by changing the interrupt status values in an array for only one partition at a time.

Legal Events

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