KR101922533B1 - 가상 머신 시스템들 - Google Patents

가상 머신 시스템들 Download PDF

Info

Publication number
KR101922533B1
KR101922533B1 KR1020177028202A KR20177028202A KR101922533B1 KR 101922533 B1 KR101922533 B1 KR 101922533B1 KR 1020177028202 A KR1020177028202 A KR 1020177028202A KR 20177028202 A KR20177028202 A KR 20177028202A KR 101922533 B1 KR101922533 B1 KR 101922533B1
Authority
KR
South Korea
Prior art keywords
door bell
pages
virtual machine
processor
queue
Prior art date
Application number
KR1020177028202A
Other languages
English (en)
Other versions
KR20170122826A (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
Priority claimed from US14/688,258 external-priority patent/US9747122B2/en
Application filed by 구글 엘엘씨 filed Critical 구글 엘엘씨
Publication of KR20170122826A publication Critical patent/KR20170122826A/ko
Application granted granted Critical
Publication of KR101922533B1 publication Critical patent/KR101922533B1/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
    • 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
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0647Migration mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/065Replication mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • 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/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
    • G06F9/4856Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration
    • G06F9/4862Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration the task being a mobile agent, i.e. specifically designed to migrate
    • G06F9/4868Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration the task being a mobile agent, i.e. specifically designed to migrate with creation or replication
    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • 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
    • G06F9/546Message passing systems or structures, e.g. 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/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/45583Memory management, e.g. access or allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/548Queue

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Multimedia (AREA)
  • Computer Security & Cryptography (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Advance Control (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

가상 머신에 의한 메모리 요청들을 위한, 컴퓨터 저장 매체들 상에서 인코딩되는 컴퓨터 프로그램들을 포함하는 방법들, 시스템들 및 장치. 방법들 중 하나는, 디바이스 상에서 실행되는 복수의 가상 머신들에 대한 복수의 도어벨 페이지들을 생성하는 단계, 각각의 가상 머신으로부터의 요청들을 저장하는 큐를 식별하는 복수의 도어벨 페이지들의 각각의 도어벨 페이지로의 액세스를 복수의 가상 머신들 각각에 제공하는 단계; 복수의 도어벨 페이지들 중 특정한 하나로부터, 각각의 큐가 각각의 가상 머신으로부터의 요청을 가진다는 통지를 수신하는 단계, 및 각각의 큐가 각각의 가상 머신으로부터의 요청을 가진다는 통지를 수신하는 것에 대한 응답으로, 프로세서로 하여금 각각의 가상 머신에 대한 각각의 큐를 프로세싱하게 야기하는 단계를 포함한다.

Description

가상 머신 시스템들
[0001] 본 명세서는 가상 머신 시스템들에 의한 메모리 액세스에 관한 것이다.
[0002] 가상 머신들, 예컨대, 클라우드 가상 머신들은 때때로, 자신들의 가상 디바이스들로의 제약된 양방향 통신 경로를 요구한다. 예컨대, 가상 머신은 헤드 및 테일 포인터들을 가지는 원형 버퍼를 사용할 수 있다. 하이퍼바이저(hypervisor), 하이퍼바이저의 에이전트, 또는 신뢰성 있는 물리적 디바이스는, 가상 머신이 언제 새로운 요청들을 인큐잉(enqueue)하였는지를 결정하기 위해 헤드 포인터를 폴링할 수 있으며, 큐의 컨텐츠들을 판독할 수 있다. 일부 시스템들은 몇몇 프로세서 코어들을 사용하여 큐들을 폴링할 수 있다.
[0003] 일부 구현들에서, 하이퍼바이저, 예컨대, 하이퍼바이저 헬퍼(hypervisor helper)는, 각각의 큐에 대한 도어벨 페이지(doorbell page)를 사용하여, 다수의 가상 머신들에 대한 다수의 큐들, 및 잠재적으로, 각각의 가상 머신에 대한 다수의 큐들을 모니터링할 수 있다. 하이퍼바이저는 도어벨 페이지들을 사용하여 프로세서에 대한 작업을 포함하는 큐들 내에 엔트리들이 존재하는지 여부 및 이 큐들 내에 엔트리들이 언제 존재하는지를 결정한다. 하이퍼바이저는 도어벨 페이지가 링잉(ring)될 때 비트 벡터를 업데이트하고, 어떤 큐들이 서비스를 필요로 하는지를 표시하기 위해 비트 벡터를 프로세서에 제공할 수 있다. 도어벨 페이지가 링잉될 때, 하이퍼바이저는, 예컨대, 하이퍼바이저 또는 프로세서들에 의한 사용을 위한 도어벨 페이지 또는 값을 도어벨 페이지로부터 메모리로 복사할 수 있다. 하이퍼바이저는 프로세서가 다른 작업을 수행 중일 수 있을 때 작업을 프로세서에게 통지하기 위해 인터럽트(interrupt)를 프로세서에 전송할 수 있다. 하이퍼바이저 헬퍼는 위에서 설명된 단계들을 수행하도록 구성된 애플리케이션 또는 하드웨어일 수 있다.
[0004] 일부 구현들에서, 헬퍼 애플리케이션 또는 디바이스, 예컨대, 하이퍼바이저 또는 하이퍼바이저 헬퍼 애플리케이션 또는 디바이스는 제 1 디바이스로부터 제 2 디바이스로의 애플리케이션, 예컨대, 가상 머신의 마이그레이션(migration) 동안 메모리 액세스를 제어할 수 있다. 헬퍼는 애플리케이션에 의해 사용되는 메모리의 페이지들을 모니터링하고, 페이지들로부터의 단지 더티(dirty) 바이트들만이 마이그레이션 프로세스 동안 제 2 디바이스에 전달되게 야기할 수 있다.
[0005] 일반적으로, 본 명세서에서 설명되는 청구 대상의 하나의 혁신적 양상은, 디바이스 상에서 실행되는 복수의 가상 머신들에 대한 복수의 도어벨 페이지들을 생성하는 액션, 각각의 가상 머신으로부터의 요청들을 저장하는 큐를 식별하는 복수의 도어벨 페이지들의 각각의 도어벨 페이지로의 액세스를 복수의 가상 머신들 각각에 제공하는 액션; 복수의 도어벨 페이지들 중 특정한 하나로부터, 각각의 큐가 각각의 가상 머신으로부터의 요청을 가진다는 통지를 수신하는 액션, 및 각각의 큐가 각각의 가상 머신으로부터의 요청을 가진다는 통지를 수신하는 것에 대한 응답으로, 프로세서로 하여금 각각의 가상 머신에 대한 각각의 큐를 프로세싱하게 야기하는 액션들을 포함하는 방법들로 구현될 수 있다. 이 양상의 다른 실시예들은, 대응하는 컴퓨터 시스템들, 장치, 또는 하나 또는 그 초과의 컴퓨터 저장 디바이스들 상에 기록되는 컴퓨터 프로그램들을 포함하고, 이들 각각은 방법들의 액션들을 수행하도록 구성된다.
[0006] 일반적으로, 본 명세서에서 설명되는 청구 대상의 하나의 혁신적 양상은, 제 1 디바이스 상에서 애플리케이션을 계속 실행하면서, 제 1 디바이스의 메모리 내에 저장되고 제 1 디바이스 상에서의 애플리케이션의 실행을 위해 사용되는 데이터의 페이지들을 제 1 디바이스로부터 제 2 디바이스로 복사함으로써 제 1 디바이스 상에서 실행되는 애플리케이션을 제 1 디바이스로부터 제 2 디바이스로 이동시키기 위한 마이그레이션 프로세스를 개시하는 액션, 마이그레이션 프로세스 동안 제 1 디바이스 상에서 애플리케이션을 실행하는 것에 대한 응답으로, 제 1 디바이스가, 데이터의 페이지들 중 적어도 하나의 데이터의 페이지에서 하나 또는 그 초과의 바이트들을 업데이트하는 액션, 제 1 디바이스 상에서의 애플리케이션의 실행을 중단하는 액션; 및 제 2 디바이스로 하여금 애플리케이션의 실행을 계속하게 야기하기 위해, 업데이트된 바이트들을 제 1 디바이스로부터 제 2 디바이스로 복사하는 액션을 포함하는 방법들로 구현될 수 있다. 이 양상의 다른 실시예들은, 대응하는 컴퓨터 시스템들, 장치, 또는 하나 또는 그 초과의 컴퓨터 저장 디바이스들 상에 기록되는 컴퓨터 프로그램들을 포함하고, 이들 각각은 방법들의 액션들을 수행하도록 구성된다.
[0007] 하나 또는 그 초과의 컴퓨터들의 시스템은, 동작 중에 시스템으로 하여금 액션들을 수행하게 야기하는 소프트웨어, 펌웨어, 하드웨어 또는 이들의 조합이, 시스템 상에 인스톨되게 하는 것에 의해 특정 동작들 또는 액션들을 수행하도록 구성될 수 있다. 하나 또는 그 초과의 컴퓨터 프로그램들은, 데이터 프로세싱 장치에 의해 실행될 때, 장치로 하여금 액션들을 수행하게 하는 명령들을 포함함에 의해 특정 동작들 또는 액션들을 수행하도록 구성될 수 있다.
[0008] 위의 그리고 다른 실시예들은 각각, 단독으로 또는 조합하여, 다음의 특징들 중 하나 또는 그 초과의 특징을 선택적으로 포함할 수 있다. 방법은, 프로세서가 요청을 프로세싱하는 동안 각각의 가상 머신을 계속 실행하는 단계를 포함할 수 있다. 방법은, 각각의 큐가 각각의 가상 머신으로부터의 요청을 가진다는 통지를 수신하기 이전에, 각각의 큐에 대한 업데이트를 수신하는 단계를 포함할 수 있다.
[0009] 일부 구현들에서, 방법은, 복수의 도어벨 페이지들 각각에 대해, 도어벨 페이지에 고유하게 대응하고 도어벨 페이지에 의해 식별된 큐를 고유하게 식별하는 각각의 엔트리를 포함하는 어레이를 생성하는 단계, 및 각각의 큐가 각각의 가상 머신으로부터의 요청을 가진다는 통지를 수신하는 것에 대한 응답으로, 각각의 큐를 식별하는, 어레이에서의 각각의 엔트리를 업데이트하는 단계를 포함한다. 프로세서로 하여금 각각의 가상 머신에 대한 각각의 큐를 프로세싱하게 야기하는 단계는, 프로세서로 하여금 각각의 가상 머신에 대한 각각의 큐를 프로세싱하게 야기하기 위해 어레이를 프로세서에 제공하는 단계를 포함할 수 있다. 복수의 도어벨 페이지들 각각에 대해, 도어벨 페이지에 고유하게 대응하고 도어벨 페이지에 의해 식별된 큐를 고유하게 식별하는 각각의 엔트리를 포함하는 어레이를 생성하는 단계는, 복수의 도어벨 페이지들 각각에 대해, 도어벨 페이지에 고유하게 대응하고 도어벨 페이지에 의해 식별된 큐를 고유하게 식별하는 각각의 엔트리를 포함하는 비트 벡터를 생성하는 단계를 포함할 수 있다. 각각의 큐를 식별하는, 어레이에서의 각각의 엔트리를 업데이트하는 단계는, 각각의 큐를 식별하는, 비트 벡터에서의 각각의 엔트리를 업데이트하는 단계를 포함할 수 있다. 프로세서로 하여금 각각의 가상 머신에 대한 각각의 큐를 프로세싱하게 야기하기 위해 어레이를 프로세서에 제공하는 단계는, 프로세서로 하여금 각각의 가상 머신에 대한 각각의 큐를 프로세싱하게 야기하기 위해 비트 벡터를 프로세서에 제공하는 단계를 포함할 수 있다. 프로세서로 하여금 각각의 가상 머신에 대한 각각의 큐를 프로세싱하게 야기하기 위해 어레이를 프로세서에 제공하는 단계는, 프로세서로 하여금 복수의 가상 머신들에 대한 다수의 큐들을 프로세싱하게 야기하기 위해 어레이를 프로세서에 제공하는 단계를 포함할 수 있다.
[0010] 일부 구현들에서, 프로세서로 하여금 각각의 가상 머신에 대한 각각의 큐를 프로세싱하게 야기하는 단계는, 인터럽트를 프로세서에 전송하는 단계를 포함한다. 각각의 가상 머신으로부터의 요청들을 저장하는 큐를 식별하는 복수의 도어벨 페이지들의 각각의 도어벨 페이지로의 액세스를 복수의 가상 머신들 각각에 제공하는 단계는, 각각의 큐의 헤드 노드를 포함하는 복수의 도어벨 페이지들의 각각의 도어벨 페이지로의 액세스를 복수의 가상 머신들 각각에 제공하는 단계를 포함할 수 있다. 각각의 가상 머신으로부터의 요청들을 저장하는 큐를 식별하는 복수의 도어벨 페이지들의 각각의 도어벨 페이지로의 액세스를 복수의 가상 머신들 각각에 제공하는 단계는, 각각의 가상 머신으로부터의 요청들을 저장하는 링 버퍼를 식별하는 복수의 도어벨 페이지들의 각각의 도어벨 페이지로의 액세스를 복수의 가상 머신들 각각에 제공하는 단계를 포함할 수 있다.
[0011] 일부 구현들에서, 복수의 도어벨 페이지들을 생성하는 단계는, 각각의 어드레스를 복수의 도어벨 페이지들 각각에 할당하는 단계를 포함하고, 각각의 가상 머신으로부터의 요청들을 저장하는 큐를 식별하는 복수의 도어벨 페이지들의 각각의 도어벨 페이지로의 액세스를 복수의 가상 머신들 각각에 제공하는 단계는, 각각의 가상 머신으로의 각각의 어드레스를 복수의 가상 머신들 각각에 제공하는 단계를 포함한다. 복수의 도어벨 페이지들을 생성하는 단계는, 트래킹 구조를 생성하는 단계, 및 트래킹 구조로부터 각각의 인덱스를 복수의 도어벨 페이지들 각각에 할당하는 단계를 포함할 수 있고, 각각의 가상 머신으로부터의 요청들을 저장하는 큐를 식별하는 복수의 도어벨 페이지들의 각각의 도어벨 페이지로의 액세스를 복수의 가상 머신들 각각에 제공하는 단계는, 각각의 가상 머신으로의 각각의 인덱스에 대한 어드레스를 복수의 가상 머신들 각각에 제공하는 단계를 포함할 수 있다. 복수의 도어벨 페이지들을 생성하는 단계는, 복수의 도어벨 페이지들 각각에 대한 페이지를 생성하는 단계, 및 복수의 도어벨 페이지들 각각에 대해, 복수의 도어벨 페이지들의 각각의 도어벨 페이지가 각각의 페이지 내에 상주하는 넌-제로(non-zero) 오프셋을 할당하는 단계를 포함할 수 있다. 각각의 가상 머신으로부터의 요청들을 저장하는 큐를 식별하는 복수의 도어벨 페이지들의 각각의 도어벨 페이지로의 액세스를 복수의 가상 머신들 각각에 제공하는 단계는, 각각의 가상 머신으로의 각각의 페이지에 대한 어드레스 및 넌-제로 오프셋을 복수의 가상 머신들 각각에 제공하는 단계를 포함할 수 있다.
[0012] 일부 구현들에서, 방법은, 제 2 복수의 도어벨 페이지들을 생성하는 단계, 및 각각의 가상 머신으로부터의 제 2 요청들을 저장하는 제 2 큐를 식별하는 제 2 복수의 도어벨 페이지들의 각각의 도어벨 페이지로의 액세스를 복수의 가상 머신들 중 적어도 일부의 가상 머신들 각각에 제공하는 단계를 포함하고, 제 1 타입의 요청들은 제 2 타입의 제 2 요청들과 상이하다. 복수의 도어벨 페이지들 중 특정한 하나로부터, 각각의 큐가 각각의 가상 머신으로부터의 요청을 가진다는 통지를 수신하는 단계는, 복수의 도어벨 페이지들 중 특정한 하나로부터, 요청의 타입을 식별하는 통지를 수신하는 단계를 포함할 수 있다. 프로세서로 하여금 각각의 가상 머신에 대한 각각의 큐를 프로세싱하게 야기하는 단계는, 요청의 타입이 제 1 타입을 포함함을 결정하는 단계, 제 1 타입의 서비스 요청들에 할당되는 특정 프로세서를 결정하는 단계, 및 특정 프로세서로 하여금 각각의 가상 머신에 대한 각각의 큐를 프로세싱하게 야기하는 단계를 포함할 수 있다. 방법은, 디바이스의 제 1 프로세서 상에서 복수의 가상 머신들을 실행하는 단계를 포함할 수 있다. 특정 프로세서로 하여금 각각의 가상 머신에 대한 각각의 큐를 프로세싱하게 야기하는 단계는, 제 2 상이한 프로세서로 하여금 각각의 가상 머신에 대한 각각의 큐를 프로세싱하게 야기하도록 제 2 상이한 프로세서 상에서 실행되는 하이퍼바이저에 메시지를 제공하는 단계를 포함할 수 있다. 제 2 상이한 프로세서 상에서 실행되는 하이퍼바이저에 메시지를 제공하는 단계는, 디바이스와 상이한 제 2 디바이스 상의 제 2 상이한 프로세서 상에서 실행되는 하이퍼바이저에 메시지를 제공하는 단계를 포함할 수 있다.
[0013] 일부 구현들에서, 방법은, 데이터의 페이지들의 메모리 내의 위치들을 식별하는 애플리케이션에 대한 맵핑을 생성하는 단계를 포함할 수 있다. 마이그레이션 프로세스 동안 제 1 디바이스 상에서 애플리케이션을 실행하는 것에 대한 응답으로, 제 1 디바이스가, 데이터의 페이지들 중 적어도 하나의 데이터의 페이지에서 하나 또는 그 초과의 바이트들을 업데이트하는 단계는, 데이터의 페이지들 중 적어도 하나의 데이터의 페이지 각각을 헬퍼에 할당하는 단계, 페이지들 중 적어도 하나의 페이지 각각에 대해, 헬퍼 내의 대응하는 페이지를 식별하기 위해 애플리케이션에 대한 맵핑을 업데이트하는 단계, 및 데이터의 페이지들 중 적어도 하나의 데이터의 페이지에서 하나 또는 그 초과의 바이트들을 업데이트하는 단계를 포함할 수 있다. 애플리케이션을 제 1 디바이스 상에서 실행하는 단계는, 제 1 디바이스 상에서 가상 머신을 실행하는 단계를 포함할 수 있다.
[0014] 일부 구현들에서, 방법은, 데이터의 페이지들 중 적어도 하나의 데이터의 페이지에서 하나 또는 그 초과의 바이트들을 업데이트하는 것에 대한 응답으로, 제 1 디바이스가 업데이트된 바이트들을 식별하는 데이터를 저장하는 단계를 포함한다. 단지 업데이트된 바이트들만을 제 1 디바이스로부터 제 2 디바이스로 복사하는 단계는, 업데이트된 바이트들을 식별하는 데이터를 사용하여, 업데이트된 바이트들을 식별하는 단계, 및 업데이트된 바이트들을 식별하는 데이터를 사용하여, 업데이트된 바이트들을 식별하는 것에 대한 응답으로, 단지 업데이트된 바이트들만을 제 1 디바이스로부터 제 2 디바이스로 복사하는 단계를 포함할 수 있다. 방법은, 제 1 디바이스가, 데이터의 페이지들 중 적어도 하나의 데이터의 페이지에서 하나 또는 그 초과의 바이트들을 수신하는 단계, 및 제 1 디바이스가, 하나 또는 그 초과의 바이트들이, 마이그레이션되고 있는 애플리케이션에 대한 데이터의 페이지들에 대한 것임을 결정하는 단계를 포함할 수 있다. 업데이트된 바이트들을 식별하는 데이터를 저장하는 단계는, 하나 또는 그 초과의 바이트들이 마이그레이션되고 있는 애플리케이션에 대한 데이터의 페이지들에 대한 것임을 결정하는 것에 대한 응답으로, 업데이트된 바이트들을 식별하는 데이터를 저장하는 단계를 포함할 수 있다. 방법은, 애플리케이션으로부터 메모리로의 액세스에 대한 요청을 수신하는 단계, 및 메모리로의 액세스에 대한 요청이 기록 요청임을 결정하는 단계를 포함할 수 있다. 업데이트된 바이트들을 식별하는 데이터를 저장하는 단계는, 메모리로의 액세스에 대한 요청이 기록 요청임을 결정하는 것에 대한 응답으로 업데이트된 바이트들을 식별하는 데이터를 저장하는 단계를 포함할 수 있다. 방법은, 애플리케이션에 대한 데이터의 페이지들을 제 1 디바이스의 메모리 내에 저장하는 것을 비롯하여 애플리케이션을 제 1 디바이스 상에서 실행하는 단계를 포함할 수 있다.
[0015] 본 명세서에서 설명되는 청구 대상은 특정 실시예들로 구현될 수 있으며, 다음의 이점들 중 하나 또는 그 초과의 이점을 초래할 수 있다. 일부 구현들에서, 아래에서 설명되는 시스템들 및 방법들은, 하이퍼바이저 또는 헬퍼 애플리케이션 또는 디바이스로 인한 가속을 이용하는 도어벨 페이지들을 사용하지 않는 시스템들 및 방법들보다, 가상 머신이 언제, 큐에 데이터 요청을 보다 신속하게, 예컨대, 1 마이크로초 내에 배치하는지, 보다 적은 자원들을 사용하는지, 또는 둘 다를 수행하는지를 결정할 수 있다. 일부 구현들에서, 아래에서 설명되는 시스템들 및 방법들은, 도어벨 페이지가 링잉되고 대응하는 큐 내의 요청들이, 예컨대, 비동기적으로 프로세싱될 때 가상 머신을 계속 실행할 수 있다.
[0016] 일부 구현들에서, 아래에서 설명되는 시스템들 및 방법들은, 하이퍼바이저, 프로세서, 또는 둘 다가, 어떤 가상 머신들이 서비스를 필요로 하는지를 신속하게 결정하게 허용하기 위해 비트 벡터를 프로세서에 제공할 수 있다. 예컨대, 시스템은, 도어벨 폴링 에이전트와는 달리, 가상 머신에 의해 도어벨 페이지가 언제 링잉되었는지를 보다 신속하게 알 수 있어서, 시스템이 수 천 개의 인스턴스화된(instantiated) 도어벨 페이지들을 포함할 때 시스템이 응답하게 허용할 수 있다. 일부 구현들에서, 도어벨 페이지들이 PCIe(peripheral component Interconnect Express) 공간에 상주할 때, 디바이스는, 순전히 소프트웨어-에뮬레이트된(software-emulated) 디바이스 도어벨들로의 가상 머신 액세스에 의해 요구될 수 있는 기존의(traditional) 트랩 및 에뮬레이트 트랩(emulate trap)들 ― 예컨대, 이들은 적어도 3000 프로세서 사이클들 또는 1 마이크로초를 소비할 수 있음 ― 을 회피한다. 일부 구현들에서, 시스템은, 큐의 서비싱(servicing)이 제 1 프로세서 상에서의 실행 동안 가상 머신으로부터 사이클들을 도용(steal)하는 것을 방지하기 위해, 제 1 프로세서의 캐시의 오염(pollution)을 방지하기 위해, 제 2 프로세서가 다수의 가상 머신들로부터의, 예컨대, 동일한 또는 유사한 타입들의 요청들에 대해, 큐들을 프로세싱하게 허용하기 위해, 또는 이들 중 두 개 또는 그 초과의 것들의 임의의 조합을 위해 제 2 프로세서에 서비스를 필요로 하는 큐를 가지는 제 1 프로세서 상에서 실행되는 가상 머신에 대한 통지를 제공할 수 있다.
[0017] 일부 구현들에서, 아래에서 설명되는 시스템들 및 방법들은, 메모리의 페이지들을 전달하는 다른 시스템들 및 방법들에 비해, 예컨대, 클라우드 환경에서, 애플리케이션에 대한 블랙아웃 시간을 감소시키기 위해 디바이스들 사이에서 애플리케이션을 전달할 때, 예컨대, 페이지보다 작은 더티 바이트들만 또는 바이트 블록들만을 복사할 수 있다.
[0018] 본 명세서의 청구 대상의 하나 또는 그 초과의 실시예들의 세부사항들은 첨부한 도면들 및 아래의 설명에서 기술된다. 청구 대상의 다른 특징들, 양상들 및 이점들은 상세한 설명, 도면들 및 청구항들로부터 명백해질 것이다.
[0019] 도 1은 디바이스가 도어벨 페이지들을 사용하여 가상 머신들에 대한 큐들이 언제 서비스를 필요로 하는지를 결정하는 예시적 환경의 블록 다이어그램이다.
[0020] 도 2는 프로세서로 하여금 가상 머신에 대한 큐를 프로세싱하게 야기하기 위한 프로세스의 흐름 다이어그램이다.
[0021] 도 3은 특정 프로세서로 하여금 큐를 프로세싱하게 야기하기 위한 프로세스의 흐름 다이어그램이다.
[0022] 도 4는 디바이스 A(402a)가 애플리케이션을 다른 디바이스 B로 마이그레이션하는 예시적 환경의 블록 다이어그램이다.
[0023] 도 5는 애플리케이션을 제 1 디바이스로부터 제 2 디바이스로 전달하기 위한 프로세스의 흐름 다이어그램이다.
[0024] 도 6은 본원에서 설명되는 컴퓨터-구현 방법들과 관련하여 사용될 수 있는 컴퓨팅 시스템의 블록 다이어그램이다.
[0025] 다양한 도면들에서의 동일한 참조 번호들 및 표기들은 동일한 엘리먼트들을 표시한다.
개요
[0026] 디바이스 상에서 실행되는 애플리케이션, 예컨대, 하이퍼바이저 또는 하이퍼바이저 헬퍼는 많은 수, 예컨대, 1024개 또는 그 초과의 도어벨 페이지들을 생성할 수 있다. 도어벨 페이지들은 IO(input/output) 또는 MMIO(memory-mapped IO)인 PCIe(peripheral component interconnect express) BAR(base address register) 공간 내에 있을 수 있다. 애플리케이션은 도어벨 페이지들을 사용하여, 디바이스 상에서 실행되는 가상 머신들의 하나 또는 그 초과의 큐들이 언제 서비스를 필요로 하는지를 결정한다. 애플리케이션은, 임의의 도어벨 페이지가 가상 머신에 의해 기록될 때, 계류 중인(pending) 도어벨 페이지들의 리스트(및 예컨대, 도어벨 페이지들에 기록된 값들)를 하이퍼바이저에게 통지하도록, 할당된 도어벨 페이지들을 구성할 수 있다. 통지를 수신하면, 하이퍼바이저는, 프로세서로 하여금 큐들 내에 저장된 데이터 요청들을 서비스하게 야기하기 위해, 계류 중인 도어벨들의 리스트 또는 대응하는 큐들을 프로세서에 제공할 수 있다. 일부 예들에서, 애플리케이션은 디바이스 내에 포함되는 컴포넌트 상에서 실행될 수 있으며, 도어벨 페이지들에 사용되는 메모리를 포함할 수 있다.
[0027] 도어벨 페이지들 각각은 구성가능한 의미(semantics)를 가질 수 있다. 예컨대, NIC-100 스타일 도어벨 페이지는 32-비트 링 버퍼 인덱스를 포함할 수 있는데, 예컨대, 메모리 내에 저장되고 하이퍼바이저에 제공되는 큐를 포함할 수 있다. 일부 예들에서, NVMe 큐는, 대응하는 큐가 서비스되어야 하고 대응하는 큐, 예컨대, 링 버퍼 인덱스가 별개의 메모리 내에 상주한다는 표시를 포함할 수 있다. 일부 예들에서, virtio-net 큐는 도어벨 페이지가 링잉될 때 관심있는 큐 번호로 기록되는 IO-공간 레지스터를 포함할 수 있다. 애플리케이션, 예컨대, 하이퍼바이저 헬퍼는 도어벨 페이지의 각각의 의미를 하이퍼바이저에 제공하도록 프로그래밍될 수 있다.
[0028] 일부 예들에서, 애플리케이션은 서비스를 요구하는 모든 큐들을 표시하기 위해 링잉되었던 도어벨 페이지들을 사용하여 비트 벡터 어그리게이트(aggregate)를 생성할 수 있다. 애플리케이션은, 하이퍼바이저 또는 프로세서가 모든 큐 도어벨 값들을 스캔할 필요없이 서비스를 요구하는 모든 큐들을 신속하게 식별하게 허용하기 위해, 비트 벡터를 하이퍼바이저에 제공할 수 있다.
[0029] 일부 구현들에서, 도어벨 페이지들 중 일부는 애플리케이션(또는 예컨대, 하이퍼바이저)이 예컨대, 인터럽트 제어기들과 동일한 방식으로, 통지 지연을 적용하게 허용하는 세팅들을 포함할 수 있다. 예컨대, 특정 도어벨 페이지가 링잉되었다는 통지를 하이퍼바이저가 수신한 이후에, 특정 도어벨 페이지는 대응하는 큐에서 추가적 요청들에 대해 애플리케이션에 경보하지 않을 수 있는데, 예컨대, 특정 도어벨 페이지는, 예컨대, 대응하는 큐가 서비스된 이후에, 애플리케이션 또는 하이퍼바이저가 특정 도어벨을 리-인에이블링(re-enable)할 때까지 셀프-마스킹(self-mask)할 수 있다. 일부 예들에서, 특정 도어벨 페이지는, 예컨대, 대응하는 큐가 서비스를 필요로 함을 하이퍼바이저가 통지받아야 하는 주파수를 특정하는 레이트-제한 세팅들을 포함할 수 있다.
[0030] 일부 구현들에서, 도어벨 페이지들 각각은 별개의 4KB 페이지를 점유할 수 있으며, 선택적으로, 예컨대, 특정 큐 구조가 제로-오프셋을 지원하지 않을 때, 그 페이지 내의 넌제로(nonzero) 오프셋에 상주한다. 애플리케이션은, 각각의 가상 머신이 단지 자기 자신의 할당된 도어벨 페이지들에만 액세스하도록 제한하기 위해, 4KB 페이지 입도(granularity)로, 예컨대, 표준 x86 MMU 및 EPT 페이징을 사용하여, 예컨대, 큐들 내에서 식별된 가상 머신 메모리 액세스들을 개별 도어벨 페이지들에 맵핑할 수 있다.
[0031] 일부 구현들에서, 헬퍼 애플리케이션은 다른 애플리케이션의 실시간 마이그레이션 동안 트래픽을 재지향(redirect)할 수 있다. 예컨대, 헬퍼 애플리케이션은 제 1 디바이스로부터 제 2 디바이스로, 예컨대, 바이트 또는 멀티-바이트 레벨에서, 다른 애플리케이션의 보다 입상의(granular) 마이그레이션을 허용하기 위해 페이지 미러링을 수행할 수 있다. 예컨대, 페이지에서의 특정 바이트가 업데이트될 때 제 2 디바이스로의 페이지의 전달 이후에, 헬퍼 애플리케이션은, 전체 페이지가 제 2 디바이스에 전달될 필요가 없도록, 제 2 디바이스로의, 특정 바이트를 포함하는 2 바이트 데이터 블록들의 전달을 허용할 수 있다.
[0032] 일부 구현들에서, 하이퍼바이저 헬퍼 또는 헬퍼 애플리케이션은 디바이스 상에서 실행되는 애플리케이션이다. 일부 구현들에서, 하이퍼바이저 헬퍼 또는 헬퍼 애플리케이션은, 예컨대, 디바이스와 통합된 또는 디바이스에 연결된 디바이스 내에 포함되는 하드웨어 컴포넌트들이다.
서비싱
[0033] 도 1은 디바이스(102)가 도어벨 페이지들을 사용하여 가상 머신들에 대한 큐들이 언제 서비스를 필요로 하는지를 결정하는 예시적 환경(100)의 블록 다이어그램이다. 디바이스(102)는 하나 또는 그 초과의 프로세서들 A-B(104a-b)를 포함한다. 프로세서들 A(104a) 중 하나는 하이퍼바이저(106)를 실행하고, 프로세서들 A-B(104a-b) 중 하나 또는 둘 다는 하나 또는 그 초과의 가상 머신들(108a-c)을 실행한다.
[0034] 가상 머신들(108a-c)이, 판독 또는 기록 요청인, 데이터에 대한 요청을 가질 때, 가상 머신들(108a-c)은 대응하는 큐(110) 내에 엔트리를 배치한다. 예컨대, 가상 머신 A(108a)는 제 1 큐(A1) 내에 판독 요청들을 배치할 수 있으며, 제 2 큐(A2) 내에 기록 요청들을 배치할 수 있다. 일부 예들에서, 가상 머신은 단일 큐, 이를테면, 가상 머신 B(108b)에 대한 큐(B1) 내에 모든 요청들을 배치할 수 있다. 큐들(110) 각각은 링 버퍼 또는 임의의 다른 적절한 타입의 큐일 수 있다.
[0035] 큐(110) 내에 데이터 요청을 배치한 이후에, 가상 머신들(108a-c)은 대응하는 도어벨 페이지(112)에 통지 값을 기록하는데, 예컨대, 대응하는 도어벨 페이지(112)를 링잉(ring)한다. 예컨대, 가상 머신 A(108a)가 큐(A1) 내에 판독 요청을 배치할 때, 가상 머신 A(108a)는 큐(A1)에 특정적인 통지 값을 도어벨 페이지(A1)에 기록할 수 있다. 일부 예들에서, 가상 머신들(108a-c) 중 하나 또는 그 초과의 가상 머신들은 큐(110)에 데이터 요청을 배치하기 이전에, 대응하는 도어벨 페이지(112)에 통지 값을 기록할 수 있다.
[0036] 디바이스(102)는 대응하는 큐가 서비스를 필요로 함을 프로세서 A-D(104a-d)에 통지함으로써 도어벨 페이지(112)로의 통지 값의 기록에 응답한다. 예컨대, 디바이스(102)는 대응하는 비트 벡터 A-D(114a-b)를 업데이트하고, 업데이트된 비트 벡터를 프로세서들(104a-d) 중 하나에 제공할 수 있다. 비트 벡터 A(114a)는 큐들(A1, B1, 및 C1)에 대한 통지 비트 값들을 포함할 수 있다. 디바이스(102)가 도어벨 페이지들(A1, B1, 또는 C1) 중 임의의 것에 대한 통지를 수신할 때, 디바이스(102)는 대응하는 큐가 서비스를 필요로 함을 표시하기 위해 비트 벡터 A(114a)를 업데이트한다. 예컨대, 비트 벡터 A(114a)의 제 1 위치의 값은 큐(A1)가 서비스를 필요로 하는지 여부를 표시하고, 비트 벡터 A(114a)의 제 2 위치의 값은 큐(B1)가 서비스를 필요로 하는지 여부를 표시하며, 비트 벡터 A(114a)의 제 3 위치의 값은 큐(C1)가 서비스를 필요로 하는지 여부를 표시한다. 유사하게, 비트 벡터 B(114b) 내의 위치들의 값들은 큐들(A2 및 C2)에 대응한다.
[0037] 일부 구현들에서, 비트 벡터 A(114a)의 "1"의 값은 대응하는 큐가 서비스를 필요로 함을 표시하고, "0"의 값은 대응하는 큐가 서비스를 필요로 하지 않음을 표시한다. 다른 구현들에서, "0"의 값은 대응하는 큐가 서비스를 필요로 함을 표시하고, "1"의 값은 대응하는 큐가 서비스를 필요로 하지 않음을 표시한다.
[0038] 일부 구현들에서, 디바이스(102)는 서비스를 필요로 하는 큐를 가지는 가상 머신을 실행하는 프로세서 코어와 상이한 프로세서 코어 상에서 실행되는 하이퍼바이저에 인터럽트를 전송한다. 예컨대, 프로세서 A(104a)가 가상 머신 B(108b)를 실행하고 큐(B1)가 서비스를 필요로 할 때, 디바이스(102)는 큐(B1)가 서비스를 필요로 함을 프로세서 B(104b) 또는 프로세서 D(104d)에 통지할 수 있다. 디바이스(102)는 서비스를 필요로 함을 큐(B1)의 하이퍼바이저에 통지하기 위해 인터럽트를 상이한 프로세서 코어 상에서 실행되는 하이퍼바이저 또는 다른 애플리케이션에 전송할 수 있다.
[0039] 일부 구현들에서, 디바이스(102)는 디바이스(102)에 통지되었던 도어벨 페이지로부터의 통지 값을 버퍼링할 수 있다. 예컨대, 디바이스(102)는 비트 벡터를 메모리 내에 저장하고, 온디멘드 방식으로(on demand) 또는 지연되게(lazily), 비트 벡터로부터의 값들, 예컨대, 비트 벡터의 복사본을 비트 벡터에 의해 식별된 큐들을 서비스하는 프로세서에, 또는 비트 벡터를 사용하고 있는 애플리케이션에 제공할 수 있다. 일부 예들에서, 하이퍼바이저 헬퍼가 비트 벡터를 관리하고 하이퍼바이저(106)가 서비스되었고 더 이상 서비스를 필요로 하지 않는 큐들에 대한 비트 벡터 내의 하나 또는 그 초과의 비트들을 클리어하기를 원할 때, 하이퍼바이저(106)는 클리어할 비트들을 식별하는 메시지를 하이퍼바이저 헬퍼에 전송할 수 있다. 그 다음, 하이퍼바이저 헬퍼는 식별된 비트들을 클리어하여, 비트 벡터를 최신으로, 예컨대, 비트 벡터의 마스터 복사본을 최신으로 유지할 수 있다.
[0040] 디바이스(102)는, 디바이스에 통지되었던 도어벨 페이지(112)에 대한 비트 벡터(114a-b)를, 대응하는 큐들을 서비스할 프로세서(104a-d)에 제공할 수 있다. 예컨대, 큐(B1)에 대한 서비스에 대한 요청에 대한 응답으로 디바이스(102)가 비트 벡터 A(114a)를 업데이트할 때, 디바이스(102)는 비트 벡터 A(114a)를 프로세서 B(104b)에 제공한다. 프로세서 B(104b)는 비트 벡터 A(114a)를 사용하여, 큐(B1)가 서비스를 필요로 하는 것, 및 잠재적으로, 큐(A1), 큐(C1) 또는 이 둘 다가 또한, 예컨대, 비트 벡터(114a)의 대응하는 위치들의 값들을 사용하여 서비스를 필요로 하는 것을 결정한다. 그 다음, 프로세서 B(104b)는 서비스가 필요할 때 비트 벡터 A(114a) 내에 식별된 큐들을 서비스할 수 있다. 예컨대, 프로세서 B(104b)는 큐(A1) 내의 제 1 엔트리에 액세스하고, 제 1 엔트리에 의해 요청되는 데이터를 결정하고, 가상 머신 A(108a)에 의한 사용을 위해 요청된 데이터를 리트리브할 것이다.
[0041] 도어벨 페이지들(112) 각각은 하나 또는 그 초과의 세팅들을 포함할 수 있다. 예컨대, 도어벨 페이지들(112)은, 각각의 도어벨 페이지가 링잉될 때 업데이트되어야 하는 대응하는 비트 벡터 내의 원하는 비트 포지션을 표시할 수 있다.
[0042] 일부 예들에서, 도어벨 페이지들(112)은 통지 공백 통합(coalescing)이 수행되어야 하는지 여부를 표시하는 통지 공백 통합 세팅을 포함할 수 있다. 예컨대, 통지 공백 통합 세팅은, 이벤트가 발생하였다는 것 및 Boolean 값이 클리어되기까지 디바이스(102)가 각각의 도어벨 페이지에 대한 추가적 통지들을 포스팅하는 것을 억제해야 한다는 것을 나타내는 Boolean 값일 수 있다. 예컨대, 디바이스(102)는, 대응하는 큐 내의 모든 엔트리들이 서비스되었을 때까지, 예컨대, Boolean 값을 "참"으로 세팅함으로써, 추가적 통지들을 포스팅하는 것을 억제할 수 있고, 그 다음, 예컨대, Boolean 값을 "거짓"으로 세팅하여서 대응하는 큐에 추가된 추가적 엔트리들이 디바이스(102)에 통지되도록 한다.
[0043] 디바이스(102)가 다수의 비트 벡터들을 포함하는 구현들에서, 도어벨 페이지들(112) 각각은 도어벨 페이지에 대한 특정 비트 벡터를 표시할 수 있다. 예컨대, 디바이스(102)는 가상 머신들(108a-c)로부터의 요청들을 서비스할 각각의 프로세서 또는 프로세서 코어에 대한 하나의 비트 벡터를 포함할 수 있고, 도어벨 페이지들 각각은, 서비스를 필요로 하는 대응하는 큐에 대해 정확한 프로세서 또는 프로세서 코어에 통지되도록 도어벨 페이지가 링잉될 때 비트 벡터들 중 어떤 비트 벡터가 업데이트되어야 하는지를 표시할 수 있다. 프로세서들 및 프로세서 코어들 중 일부가 디바이스(102), 예컨대, 프로세서들 A-B(104a-b) 상에 포함될 수 있다. 프로세서들 및 프로세서 코어들 중 일부는 하나 또는 그 초과의 다른 디바이스들, 예컨대, 프로세서 C-D(104c-d) 상에 포함될 수 있다. 요청을 서비스하는 프로세서 또는 프로세서 코어는 요청을 위한 데이터를 포함하는 메모리를 가지는 특정 디바이스 상에 포함될 수 있다.
[0044] 일부 예들에서, 디바이스(102)는 가상 머신 A(108a)에 대한 제 1 큐(A1)가 서비스를 필요로 한다는 통지를 제 1 도어벨 페이지(A1)를 통해 수신하고, 비트 벡터 A(114a), 예컨대, 비트 벡터의 복사본을 프로세서 B(104b)에 제공할 수 있다. 디바이스가, 가상 머신 A(108a)에 대한 제 2 큐(A2)가 서비스를 필요로 한다는 통지를 제 2 도어벨 페이지(A2)를 통해 수신할 때, 디바이스(102)는 통지에 대한 응답으로 비트 벡터를 업데이트한 이후에, 비트 벡터 B(114b)의 복사본을, 예컨대, 다른 디바이스 내에 포함되는 프로세서 C(104c)에 제공할 수 있다.
[0045] 일부 구현들에서, 도어벨 페이지들(112) 각각은, 대응하는 큐(110)가 서비스를 필요로 하고 대응하는 도어벨 페이지가 링잉될 때, 디바이스(102)가 수행할 액션을 표시하는 기록 세팅에 대한 거동(behavior)을 포함할 수 있다. 예컨대, 디바이스(102)는 도어벨 페이지에 대한 세팅들을 사용하여, 디바이스(102)가 대응하는 큐 내의 새로운 엔트리들의 수, 대응하는 큐 내의 엔트리들의 총 수, (큐에 대한 가장 최신 업데이트 이전에 큐 내에 있었던) 대응하는 큐 내의 새롭지 않은 엔트리들의 수, 또는 이들 중 두 개 또는 그 초과의 것들의 조합을 표시하는 값을 업데이트해야 함을 결정할 수 있다. 일부 예들에서, 도어벨 페이지는 대응하는 큐 내의 마지막 엔트리의 인덱스를 포함할 수 있다. 예컨대, 도어벨 페이지는 대응하는 큐가 엔트리를 가짐을 표시하는 값을 포함할 수 있고, 디바이스(102)는 값을 모니터링하여 값이 언제 변경되는지를 결정하며, 어떤 특정 값이, 도어벨 페이지가 링잉되었고 대응하는 큐가 서비스를 필요로 함을 결정하는지 상관하지 않는다.
[0046] 일부 구현들에서, 하이퍼바이저(106), 하이퍼바이저 헬퍼(118) 애플리케이션 또는 디바이스, 또는 다른 애플리케이션 또는 디바이스는 도어벨 페이지들(112)에 대한 통지 값의 기록에 응답하거나 또는 위에서 설명된 다른 단계들 중 일부를 수행할 수 있다. 예컨대, 하이퍼바이저 헬퍼(118)는 서비스를 필요로 하는 큐를 가지는 가상 머신을 실행하는 프로세서 코어와 상이한 프로세서 코어 상에서 실행되는 하이퍼바이저에 인터럽트를 전송할 수 있다. 하이퍼바이저(106), 하이퍼바이저 헬퍼(118), 또는 다른 애플리케이션 또는 디바이스는 도어벨 페이지들(112)을 포함하는 메모리를 소유할 수 있다.
[0047] 디바이스(102)는 개인용 컴퓨터, 모바일 통신 디바이스, 서버, 및 네트워크(116) 상에서 데이터를 전송 및 수신할 수 있는 다른 디바이스들을 포함할 수 있다. LAN(local area network), WAN(wide area network), 인터넷, 또는 이들의 조합과 같은 네트워크(116)는 디바이스(102)와, 프로세서들 C-D(104c-d)를 포함하는 하나 또는 그 초과의 다른 디바이스들을 연결시킨다.
예시적 큐 서비싱 프로세스 흐름
[0048] 도 2는 프로세서로 하여금 가상 머신에 대한 큐를 프로세싱하게 야기하기 위한 프로세스(200)의 흐름 다이어그램이다. 예컨대, 프로세스(200)는, 예컨대, 하이퍼바이저, 하이퍼바이저 헬퍼, 다른 애플리케이션, 다른 디바이스, 또는 이들 중 두 개 또는 그 초과의 것들의 조합을 실행하여, 환경(100)으로부터의 디바이스(102)에 의해 사용될 수 있다. 일부 예들에서, 애플리케이션들 중 하나는 프로세스(200)의 특정 단계들을 수행할 수 있고, 디바이스 또는 다른 애플리케이션은 프로세스(200)의 다른 특정 단계들을 수행할 수 있다.
[0049] 제 1 디바이스는 다수의 가상 머신들을 실행한다(202). 예컨대, 제 1 디바이스는 다수의 가상 머신들을 실행하는 서버 또는 다른 디바이스일 수 있다. 제 1 디바이스는 하이퍼바이저 애플리케이션을 사용하여 다수의 가상 머신들 중 하나 또는 그 초과의 가상 머신을 실행할 수 있다.
[0050] 제 1 디바이스는 다수의 도어벨 페이지들을 생성한다(204). 제 1 디바이스는 가상 머신들 각각에 대한 또는 가상 머신들의 각각의 큐에 대한 도어벨 페이지를 생성할 수 있다. 일부 예들에서, 제 1 디바이스는 가상 머신들에 의해 사용되는 큐들의 수보다 많은 도어벨 페이지들을 생성하며, 새로운 가상 머신의 실행 또는 새로운 큐에 대한 요청 시 도어벨 페이지들을 가상 머신 큐들에 동적으로 연관시킨다. 예컨대, 하이퍼바이저 헬퍼는 다수의 도어벨 페이지들을 생성하거나 또는 하이퍼바이저로부터 다수의 도어벨 페이지들의 생성을 요청할 수 있다.
[0051] 제 1 디바이스는 도어벨 페이지들, 예컨대, 도어벨 페이지의 어드레스를 생성할 때, 어드레스를 도어벨 페이지들 각각에 할당할 수 있다. 일부 구현들에서, 제 1 디바이스는 모든 도어벨 페이지들에 대한 트래킹 구조를 생성하고, 트래킹 구조로부터 각각의 인덱스를 도어벨 페이지들 각각으로 할당할 수 있다. 일부 예들에서, 하이퍼바이저는 어드레스들을 도어벨 페이지들 각각에 할당하고, 어드레스들을 하이퍼바이저 헬퍼에 제공할 수 있다. 하이퍼바이저 헬퍼는, 예컨대, 하이퍼바이저 헬퍼에서의, 트래킹 구조를 사용하여 도어벨 페이지들을 모니터링할 수 있다.
[0052] 제 1 디바이스는 선택적으로, 복수의 도어벨 페이지들 각각에 대해, 도어벨 페이지에 고유하게 대응하고 도어벨 페이지에 의해 식별된 큐를 고유하게 식별하는 각각의 엔트리를 포함하는 어레이를 생성한다(206). 예컨대, 제 1 디바이스, 예컨대, 하이퍼바이저 헬퍼는, 큐들을 서비스할 각 프로세서마다 하나씩, 다수의 비트 벡터들을 생성한다. 도어벨 페이지들 각각은 특정 비트 벡터 내의 단지 하나의 엔트리와 대응하며, 다른 비트 벡터들 중 임의의 비트 벡터 내의 엔트리와는 대응하지 않는다. 비트 벡터를 사용하는 프로세서는 그 하나의 엔트리를 사용하여 대응하는 큐를 결정하고 그 대응하는 큐를 서비스할 수 있다.
[0053] 제 1 디바이스는 각각의 가상 머신으로부터의 요청들을 저장하는 큐를 식별하는 복수의 도어벨 페이지들의 각각의 도어벨 페이지로의 액세스를 복수의 가상 머신들 각각에 제공한다(208). 예컨대, 제 1 디바이스는 각각의 도어벨 페이지에 대한 어드레스, 예컨대, 각각의 도어벨 페이지에 대한 각각의 인덱스의 어드레스를 각각의 가상 머신에 제공한다. 일부 예들에서, 도어벨 페이지는 대응하는 큐의 헤드 노드일 수 있고, 제 1 디바이스는 헤드 노드의 어드레스를 각각의 가상 머신에 제공할 수 있다. 일부 예들에서, 도어벨 페이지는, 예컨대, 큐가 링 버퍼일 때, 서비스에 대한 요청들을 배치할 각각의 가상 머신에 대한 링 버퍼를 식별할 수 있다. 하이퍼바이저 애플리케이션은 하이퍼바이저 헬퍼로부터 각각의 도어벨 페이지에 대한 어드레스를 수신하여 어드레스를 각각의 가상 머신에 제공할 수 있다.
[0054] 제 1 디바이스는 각각의 큐에 대한 업데이트를 수신한다(210). 예컨대, 각각의 가상 머신은 각각의 큐 내에, 서비스, 예컨대, 데이터에 대한 요청을 배치한다.
[0055] 제 1 디바이스는 복수의 도어벨 페이지들 중 특정한 하나로부터, 각각의 큐가 각각의 가상 머신으로부터의 요청을 가진다는 통지를 수신한다(212). 예컨대, 각각의 가상 머신은, 예컨대, 도어벨 페이지에 대한 기록 세팅에 대한 거동을 사용하여, 도어벨 페이지의 값을 업데이트한다. 이에 대한 응답으로, 도어벨 페이지는 값이 변경되었음을 제 1 디바이스, 예컨대, 하이퍼바이저 헬퍼에 통지한다.
[0056] 제 1 디바이스는 선택적으로, 각각의 큐를 식별하는, 어레이에서의 각각의 엔트리를 업데이트한다(214). 예컨대, 하이퍼바이저 헬퍼는, 예컨대, 비트 벡터 내의 각각의 엔트리를 각각의 큐가 서비스를 필요로 함을 표시하는 특정 값으로 업데이트한다. "0"이 각각의 큐가 서비스를 필요로 하지 않음을 표시하고 "1"이 각각의 값이 서비스를 필요로 함을 표시할 때, 특정 값은 "1"일 수 있다. 일부 예들에서, 특정 값은 "0" 또는 임의의 다른 적절한 값일 수 있다. 일부 구현들에서, 하이퍼바이저 애플리케이션은 각각의 엔트리를 업데이트한다.
[0057] 제 1 디바이스는 프로세서로 하여금 각각의 가상 머신에 대한 각각의 큐를 프로세싱하게 야기한다(216). 일부 예들에서, 제 1 디바이스, 예컨대, 하이퍼바이저 헬퍼는 각각의 큐에 대한 식별자를 프로세서에 제공한다. 예컨대, 제 1 디바이스, 예컨대, 하이퍼바이저 또는 하이퍼바이저 헬퍼는 비트 벡터를 프로세서에 제공한다. 비트 벡터를 수신하는 것에 대한 응답으로, 프로세서는 비트 벡터를 사용하여 어떤 큐들이, 예컨대, 비트 벡터와 연관된 큐들의 서비스를 필요로 하는지를 결정하고 그 큐들을 서비스한다. 일부 예들에서, 제 1 디바이스는, 이를테면, 프로세서가 큐를 서비스하고 있지 않을 때, 예컨대, 프로세서로 하여금 다른 작업을 수행하는 것을 중단하게 야기하기 위해 인터럽트를 프로세서에 제공한다. 일부 구현들에서, 제 2 디바이스는 프로세서를 포함할 수 있다.
[0058] 제 1 디바이스는 프로세서가 요청을 프로세싱하는 동안 각각의 가상 머신을 계속 실행한다(218). 예컨대, 제 1 디바이스는 각각의 가상 머신을 실행하고 요청을 병렬로 서비스하는 단일 프로세서를 포함할 수 있다. 일부 예들에서, 제 2 디바이스 또는 제 2 프로세서가 요청을 동시에 서비스하는 동안 제 1 프로세서는 각각의 가상 머신을 실행한다.
[0059] 위에서 설명된 프로세스(200)의 단계들의 순서는 단지 예시일뿐이며, 프로세서로 하여금 가상 머신에 대한 큐를 프로세싱하게 야기하는 것이 상이한 순서들로 수행될 수 있다. 예컨대, 제 1 디바이스는 도어벨 페이지들을 생성하고, 그 다음, 가상 머신들을 실행할 수 있다.
[0060] 일부 구현들에서, 프로세스(200)가 추가적 단계들, 보다 적은 단계들을 포함할 수 있거나, 또는 단계들 중 일부가 다수의 단계들로 분할될 수 있다. 예컨대, 제 1 디바이스는 어레이를 생성하지 않을 수 있다. 일부 예들에서, 제 1 디바이스는 단계들(202 내지 206)이 아니라 단계들(208 내지 218)을 수행할 수 있다.
[0061] 도 3은 특정 프로세서로 하여금 큐를 프로세싱하게 야기하기 위한 프로세스(300)의 흐름 다이어그램이다. 예컨대, 프로세스(300)는 환경(100)으로부터의 디바이스(102)에 의해 사용될 수 있다. 디바이스(102)는 프로세스(300)의 단계들 중 하나 또는 그 초과의 단계에 대한 하이퍼바이저 또는 하이퍼바이저 헬퍼 애플리케이션을 실행할 수 있거나, 프로세스(300)의 단계들 중 하나 또는 그 초과의 단계를 수행하는 하이퍼바이저 헬퍼 디바이스를 포함할 수 있거나, 또는 이들 중 두 개 또는 그 초과의 것들의 조합일 수 있다.
[0062] 하이퍼바이저는 복수의 도어벨 페이지들 중 특정한 하나로부터, 요청의 타입을 식별하는 통지를 수신한다(302). 예컨대, 도어벨 페이지들 각각은 요청의 타입을 식별하는 구성 세팅을 포함할 수 있다. 타입은 판독 요청, 기록 요청, 특정 메모리로부터의 판독 요청, 특정 메모리에의 기록 요청, 또는 다른 타입의 요청일 수 있다. 일부 구현들에서, 하이퍼바이저는 기록 세팅에 대한 거동을 사용하여 요청의 타입을 결정할 수 있다.
[0063] 하이퍼바이저는 요청의 타입이 제 1 타입을 포함함을 결정한다(304). 예컨대, 하이퍼바이저 또는 디바이스 상에서 실행되는 다른 애플리케이션은 다수의 상이한 타입들의 요청들로부터, 특정 타입의 요청, 예컨대, 제 1 타입을 결정한다.
[0064] 하이퍼바이저는 제 1 타입의 서비스 요청들에 할당되는 특정 프로세서를 결정한다(306). 예컨대, 하이퍼바이저는 제 1 프로세서 상에서 실행될 수 있으며, 동일한 디바이스 또는 다른 디바이스 상의 제 2 프로세서가 제 1 타입의 요청들을 서비스해야 함을 결정할 수 있다.
[0065] 하이퍼바이저는 특정 프로세서로 하여금 각각의 가상 머신에 대한 각각의 큐를 프로세싱하게 야기한다(308). 예컨대, 하이퍼바이저는 각각의 큐가 서비스를 필요로 함을 표시하는 메시지를 특정 프로세서에 제공한다. 일부 예들에서, 하이퍼바이저는 각각의 큐가 서비스를 필요로 함을 표시하는 비트 벡터를 특정 프로세서에 제공할 수 있다.
애플리케이션 마이그레이션
[0066] 일부 구현들에서, 애플리케이션, 예컨대, 하이퍼바이저 또는 헬퍼 애플리케이션 또는 디바이스는 하나의 디바이스로부터 다른 디바이스로의 가상 머신의 실행의 전달을 가능하게 할 수 있다. 예컨대, 애플리케이션은 제 1 디바이스 상에서의 가상 머신의 실행 동안 가상 머신의 어떤 큐들이 서비스를 필요로 하는지를 프로세서에 통지하고, 제 1 디바이스로부터 제 2 디바이스로의 가상 머신의 마이그레이션 동안 바이트 오손(byte dirtiness)을 모니터링할 수 있다. 가상 머신들의 큐들 및 큐 서비싱 프로세스 흐름이 이전 단락들에서 설명되었다. 이 구조들 및 이들의 프로세스 흐름에 기초하여, 애플리케이션 마이그레이션을 위한 헬퍼(406)는 다음의 내용에서 설명되는 바와 같이 구현될 수 있다. 일부 예들에서, 제 1 디바이스로부터 제 2 디바이스로의 가상 머신의 실행의 전달 동안, 애플리케이션은 예컨대, 가상 머신에 대한 큐 내의 엔트리에 기초하여 메모리에 기록될 바이트들을 프로세서에 통지하고, 예컨대, 그 바이트들을 포함하는 페이지가 제 2 디바이스에 사전에 전달되었지만 바이트들로 업데이트되지 않을 때, 그 바이트들을 포함하는 페이지가 아닌 그 바이트들이 제 2 디바이스에 전달되도록 기록된 바이트들을 표시하는 데이터를 저장할 수 있다. 일부 구현들에서, 상이한 애플리케이션들은 하나의 디바이스로부터 다른 디바이스로의 가상 머신의 실행의 전달을 가능하게 하며, 서비스를 필요로 하는 가상 머신의 큐들을 프로세서에 통지한다.
[0067] 도 4는 디바이스 A(402a)가 애플리케이션(404)을 다른 디바이스 B(402b)로 마이그레이션하는 예시적 환경(400)의 블록 다이어그램이다. 예컨대, 디바이스 A(402a)는 가상 머신과 같은 애플리케이션(404)을 실행할 수 있다. 시간 TA에서, 디바이스 A(402a)는 애플리케이션(404)을 디바이스 B(402b)에 전달하기로 결정할 수 있다. 디바이스 A(402a)는 애플리케이션(404)이 전달되어야 함을 표시하는 다른 디바이스로부터의 메시지의 수신에 대한 응답으로 결정을 수행할 수 있다. 디바이스 A(402a)는 애플리케이션(404) 또는 디바이스 A(402a) 상에서 실행되는 다른 애플리케이션의 성능에 대한 응답으로 결정을 수행할 수 있다. 예컨대, 애플리케이션(404) 또는 다른 애플리케이션이 최소 성능 요건들로 아래에서 수행될 때, 디바이스 A(402a)는 애플리케이션(404)을 디바이스 B(402b)에 전달하기로 결정할 수 있다.
[0068] 디바이스 A(402a)는 애플리케이션(404)의 실행을 위한 데이터를 디바이스 B(402b)로 복사한다. 예컨대, 디바이스 A(402a)는 메모리 A(408a)에 액세스하고, 메모리 A(408a)로부터 디바이스 B(402b)로 애플리케이션(404)에 대한 데이터의 하나 또는 그 초과의 페이지들 A-B(410a-b)의 복사본들을 제공할 수 있다. 디바이스 B(402b)는 데이터의 페이지들 A-B(410a-b)를 디바이스 B(402b) 내에 포함되는 메모리 B(408b) 내에 저장할 수 있다.
[0069] 디바이스 A(402a)는, 시간 TB에서, 예컨대, 페이지 맵핑에서, 메모리 A(408a) 내의 페이지들을 헬퍼(406)에 맵핑한다. 헬퍼(406)는 애플리케이션 또는 디바이스, 예컨대, 디바이스 A(402a) 내에 포함되는 컴포넌트일 수 있다. 예컨대, 애플리케이션(404)의 실행 동안 초기에, 디바이스 A(402a)는 페이지들 A-B(410a-b)를 애플리케이션(404)에 맵핑한다. 페이지들 A-B(410a-b)를 디바이스 B(402b)로 복사할 때, 또는 페이지들 A-B(410a-b)을 디바이스 B(402b)로 복사하기 직전에, 디바이스(402a)는, 헬퍼(406)가 마이그레이션 프로세스 동안 페이지들 A-B(410a-b)에서 입상의 오손을 모니터링하게 허용하기 위해 페이지들 A-B(410a-b)이 헬퍼(406)에 맵핑하도록 페이지 맵핑을 변경한다. 일부 예들에서, 헬퍼(406)는 페이지 맵핑을 업데이트하기 위해 하이퍼바이저에 통지한다. 일부 구현들에서, 헬퍼(406)는 하이퍼바이저 헬퍼 또는 하이퍼바이저이다.
[0070] 디바이스 A(402a)가 애플리케이션(404)의 실행을 위한 데이터를 디바이스 B(402b)로 복사하는 동안, 디바이스 A(402a)는 애플리케이션(404)을 계속 실행한다. 애플리케이션(404)의 실행 동안, 시간 TC에서, 애플리케이션(404)은 페이지 A(410a)에 기록할 바이트들을 결정한다.
[0071] 시간 TD에서, 디바이스(402a)는, 어떤 페이지들이 어떤 애플리케이션들에 할당되는지를 표시하는 메모리 맵핑을 사용하여, 페이지 A(410a)가 헬퍼(406)에 맵핑됨을, 예컨대, 헬퍼(406)가 페이지 A(410a)를 편집할 수 있고 애플리케이션(404)이 페이지 A(410a)를 편집할 수 없음을 결정한다. 디바이스(402a)는 애플리케이션(404)으로부터 바이트들을 수신하며, 페이지 A(410a)에 기록할 바이트들을 헬퍼(406)에 제공한다.
[0072] 헬퍼(406)는, 시간 TE에서, 바이트들을 메모리 A(408a) 내의 페이지 A(410a)에 기록하며, 시간 TF에서, 페이지 A(410a)에 기록된 바이트들을 표시하는 더티 맵핑(412), 예컨대, 페이지들에 대한 메타데이터를 업데이트한다. TE 및 TF의 타이밍은 임의의 순서일 수 있다. 예컨대, 헬퍼(406)는 더티 맵핑(412)을 업데이트할 수 있으며, 그 다음, 바이트들을 페이지 A(410a)에 기록하거나, 이 둘 다의 액션들을 동시에 수행하거나 또는 바이트들을 기록하고 그 다음 더티 맵핑(412)을 업데이트할 수 있다.
[0073] 일부 구현들에서, 헬퍼(406)는 기록될 바이트들에 대한 새로운 페이지, 예컨대, 메모리 A(408a)에 새로운 페이지를 배정한다. 예컨대, 헬퍼(406)는 버퍼 풀로부터 새로운 페이지를 배정할 수 있으며, 바이트들에 대한 기록들을 새로운 페이지에 저장한다. 그 다음, 헬퍼(406)는 페이지 A(410a) 대신에 새롭게 배정된 페이지로의, 페이지 A(410a)에 대한 판독 및 기록 액세스 요청들을 위한 페이지들의 맵핑을 업데이트한다. 일부 예들에서, 헬퍼(406)는 페이지 맵핑을 업데이트하기 위해 하이퍼바이저에 통지한다. 헬퍼(406)는, 예컨대, 새롭게 기록된 바이트들로 인한 인터럽션없이, 디바이스 A(402a)가 페이지들 A-B(410a-b)을 디바이스 A(402a)로부터 디바이스 B(402b)로 계속 복사하게 허용하기 위해 새로운 페이지를 배정할 수 있다.
[0074] 애플리케이션(404)이 판독 동작을 위한 데이터를 요청할 때, 헬퍼(406)는 판독 요청의 통지를 수신한다. 헬퍼(406)는 페이지 맵핑을 사용하여 요청된 데이터를 결정하며, 요청된 데이터를 애플리케이션(404)에 제공한다. 예컨대, 헬퍼(406)는 알려진 상수 값을 리턴할 수 있고, 예컨대, 이 페이지는 공유된 복사-온-기록 페이지로부터의 모든 제로 값들을 포함하고, 예컨대, 디바이스(402a)는, 디바이스 (402a)가 페이지의 복사를 수행하고 복사본을 새로운 바이트들로 업데이트하거나 또는 압축된 데이터를 압축해제하고 압축해제된 데이터를 애플리케이션(404)에 제공하는 기록 이벤트를 디바이스(402a)가 수신할 때까지, 단지 하나의 페이지의 복사본을 저장할 수 있다. 판독 요청 동안, 헬퍼(406)는 페이지들 A-B(410a-b)이 임의의 업데이트들, 예컨대, 새롭게 기록된 바이트들을 가지지 않을 때 그 페이지들 중 하나에 액세스할 수 있다. 판독 요청 동안, 예컨대, 대응하는 페이지들이, 업데이트된 바이트들을 가질 때, 헬퍼(406)는 하나 또는 그 초과의 새롭게 배정된 페이지들에 액세스할 수 있다.
[0075] 디바이스 A(402a)는, 시간 TG에서, 애플리케이션(404)의 실행을 중단한다. 예컨대, 디바이스 A(402a)는, 더티 바이트들을 제외하고 애플리케이션(404)의 실행을 위한 데이터를 디바이스 B(402b)로 복사하는 것을 완료할 수 있으며, 그 다음, 애플리케이션(404)의 실행을 중단할 수 있다. 디바이스 A(402a)는, 여전히 복사될 필요가 있는 데이터의 일부가 기록되지 않고, 예컨대, 더티 상태가 되지 않고, 디바이스 A(402a)가 애플리케이션(404)의 실행을 위한 데이터를 디바이스 B(402b)로 계속 복사할 수 없음을 결정하는 것에 대한 응답으로, 애플리케이션(404)의 실행을 중단할 수 있다.
[0076] 디바이스 A(402a) 또는 헬퍼(406)는, 시간 TH에서, 애플리케이션(404)에 대한 더티 바이트들을 디바이스 B(402b)로 복사한다. 예컨대, 헬퍼(406)는 더티 맵핑(412)을 사용하여 대응하는 페이지들의 복사본들이 디바이스 B(402b)에 제공된 이후에 어떤 바이트들이 업데이트되었는지를 결정하며, 그 바이트들을 디바이스 B(402b)에 제공한다.
[0077] 디바이스 B(402b)는 더티 바이트들을 사용하여 메모리 B(408b) 내의 페이지들의 복사본들을 업데이트한다. 시간 TI에서, 디바이스 B(402b)는 애플리케이션(404b)의 실행을 개시한다.
[0078] 더티 바이트들을 디바이스 B(402b)에 전달한 이후에, 디바이스 A(402a)는 메모리 A(408a)로부터 애플리케이션(404)에 대한 모든 데이터를 제거할 수 있다. 예컨대, 디바이스 A(402a)는 애플리케이션(404)에 대한 어떤 데이터가 다른 애플리케이션의 실행을 위해 사용되지 않는지를 결정하고, 메모리 A(408a)로부터 그 데이터를 제거할 수 있다.
[0079] 디바이스들(402a-b)은 개인용 컴퓨터들, 모바일 통신 디바이스들, 서버들, 및 네트워크 상에서 데이터를 전송 및 수신할 수 있는 다른 디바이스들을 포함할 수 있다. LAN(local area network), WAN(wide area network), 인터넷, 또는 이들의 조합과 같은 네트워크는 디바이스들(402a-b), 및 잠재적으로 다른 디바이스들(도시되지 않음)을 연결시킨다.
[0080] 일부 구현들에서, 헬퍼(406)는 더티 맵핑(412)에서 더티 멀티-바이트 데이터 블록들의 리스트를 포함한다. 예컨대, 헬퍼(406)는 애플리케이션(404)에 대한 페이지들 중 하나에 대한 각각의 기록의 입도, 예컨대, 2 또는 4 바이트 데이터 블록들을 결정하고, 그에 따라 더티 맵핑(412)을 업데이트할 수 있다.
예시적 애플리케이션 마이그레이션 프로세스 흐름
[0081] 도 5는 애플리케이션을 제 1 디바이스로부터 제 2 디바이스로 전달하기 위한 프로세스(500)의 흐름 다이어그램이다. 예컨대, 프로세스(500)는 환경(400)으로부터의 디바이스 A(402a)에 의해 사용될 수 있다.
[0082] 제 1 디바이스는 애플리케이션에 대한 데이터의 페이지들을 제 1 디바이스의 메모리 내에 저장하는 것을 포함하는 애플리케이션을 실행한다(502). 데이터의 페이지들은 애플리케이션에 대한 명령들, 애플리케이션에 대한 명령들에 의해 동작되는 데이터, 또는 둘 다를 포함할 수 있다. 애플리케이션은 하나의 디바이스로부터 다른 디바이스로 마이그레이션될 수 있는 가상 머신 또는 다른 타입의 애플리케이션일 수 있다.
[0083] 제 1 디바이스는 데이터의 페이지들의 메모리 내의 위치들을 식별하는 애플리케이션에 대한 맵핑을 생성한다(504). 예컨대, 제 1 디바이스는 애플리케이션에 의해 소유되는 그 데이터의 페이지들을 표시하는 페이지 맵핑을 생성한다.
[0084] 제 1 디바이스는, 제 1 디바이스 상에서 애플리케이션을 계속 실행하면서 데이터의 페이지들을 제 1 디바이스로부터 제 2 디바이스로 복사함으로써 애플리케이션을 제 1 디바이스로부터 제 2 디바이스로 이동시키기 위한 마이그레이션 프로세스를 개시한다(506). 예컨대, 제 1 디바이스는 제 1 디바이스가 셧다운되거나 또는 재시작되어야 함을 결정하며, 마이그레이션 프로세스를 개시한다.
[0085] 제 1 디바이스는 데이터의 페이지들 중 적어도 하나의 데이터의 페이지 각각을 헬퍼에 할당한다(508). 예컨대, 제 1 디바이스는 모든 데이터의 페이지들을 헬퍼 애플리케이션 또는 디바이스에 할당한다. 일부 예들에서, 제 1 디바이스는, 데이터의 페이지들 중 일부, 예컨대, 단지 명령들만을 포함하는 페이지들이 아닌 동작될 수 있는 데이터에 대한 페이지들을 헬퍼에 할당할 수 있다. 일부 예들에서, 제 1 디바이스는, 애플리케이션이 페이지들에 기록하려고 시도할 때 페이지들을 헬퍼에 동적으로 할당할 수 있다. 제 1 디바이스는, 예컨대, 헬퍼가 페이지들을 소유함을 표시하기 위해, 페이지 맵핑을 업데이트함으로써 페이지들을 헬퍼에 할당할 수 있다.
[0086] 제 1 디바이스는 애플리케이션으로부터 메모리로의 액세스에 대한 요청을 수신한다(510). 요청은 판독 요청 또는 기록 요청일 수 있다. 제 1 디바이스는 요청의 타입, 예컨대, 요청이 판독 요청인지 아니면 기록 요청인지를 결정할 수 있다.
[0087] 제 1 디바이스는 메모리로의 액세스에 대한 요청이 기록 요청임을 결정한다(512). 제 1 디바이스는 데이터의 페이지들 중 적어도 하나의 데이터의 페이지에서 하나 또는 그 초과의 바이트들을 업데이트한다(514). 예컨대, 헬퍼는 애플리케이션으로부터 바이트들을 수신하며, 메모리 내의 바이트들을 업데이트한다. 헬퍼는 바이트들이 기록되어야 하는 페이지의 복사를 수행할 수 있고, 페이지의 복사본의 바이트들, 예컨대, 새롭게 배정된 페이지를 업데이트할 수 있으며, 그 페이지에 대한 추가적 판독 및 기록 요청들을 위한 페이지의 복사본을 사용한다.
[0088] 제 1 디바이스는 업데이트된 바이트들을 식별하는 데이터를 저장한다(516). 예컨대, 헬퍼는 바이트들이 업데이트되었음을 표시하는 데이터를 저장한다. 데이터는 바이트들이 저장되는 특정 페이지 및 바이트들의 페이지 내의 특정 위치들을 식별할 수 있다. 예컨대, 헬퍼는 바이트들이 겹쳐쓰기되었음(overwritten)을 표시하기 위해 더티 맵핑을 업데이트할 수 있다. 더티 맵핑은 개별 바이트들 또는 바이트들의 그룹들, 예컨대, 64 바이트들의 블록에 대한 것일 수 있다. 단일 페이지 내에 포함되는 바이트들의 양보다 작은 임의의 적절한 입도가 사용될 수 있다.
[0089] 일부 구현들에서, 업데이트된 바이트들을 식별하는 데이터는 겹쳐쓰기된 바이트들에 대한 어드레스들의 리스트일 수 있다. 예컨대, 더티 맵핑은 겹쳐쓰기된 바이트들의 로그일 수 있다. 리스트는 바이트들이 기록된 시간의 순서로 어드레스들을 포함할 수 있다. 일부 예들에서, 리스트는 어드레스들의 번호 순일 수 있다.
[0090] 일부 예들에서, 업데이트된 바이트들을 식별하는 데이터는 구성가능한 입도를 가지는 비트 벡터일 수 있다. 예컨대, 비트 벡터 내의 각각의 비트는 64 바이트의 메모리를 표현할 수 있으며, 대응하는 바이트들 중 하나가 겹쳐쓰기될 때, 비트 벡터 내의 엔트리가 업데이트된다. 비트 벡터는, 예컨대, 특정 애플리케이션에 대해, 게스트 메모리(guest memory) 내의 모든 바이트들에 대한 엔트리들을 포함할 수 있다.
[0091] 일부 구현들에서, 제 1 디바이스는 EPT(extended page table) 데이터 레이아웃을 따르는 섀도우(shadow) 구조를 사용할 수 있다. 예컨대, 제 1 디바이스는 예컨대, 비트 벡터 내의 각각의 비트가 메모리의 64 바이트들을 표현하도록, EPT 리프 노드에 의해 식별된 메모리 위치들에 대한 더티 바이트들을 표현하는 비트 벡터에 대한 메모리에서 EPT 리프 노드에 대한 4KB 및 다음 인접한 4KB를 배정할 수 있다.
[0092] 제 1 디바이스는 제 1 디바이스 상에서의 애플리케이션의 실행을 중단한다(518). 예컨대, 제 1 디바이스는 애플리케이션의 실행을 중단하며, 예컨대, 애플리케이션이 제 2 디바이스 상에서 실행될 때 제 2 디바이스가 요청들을 애플리케이션에 제공할 수 있도록 애플리케이션에 대한 임의의 요청들을 제 2 디바이스로 포워딩한다.
[0093] 제 1 디바이스는 업데이트된 바이트들을 식별하는 데이터를 사용하여, 업데이트된 바이트들을 식별한다(520). 헬퍼는 더티 맵핑을 사용하여, 업데이트된 바이트들, 및 선택적으로, 업데이트된 바이트들을 저장하는 페이지들을 식별할 수 있다.
[0094] 제 1 디바이스는 제 2 디바이스로 하여금 애플리케이션의 실행을 계속하게 야기하기 위해, 업데이트된 바이트들을 제 1 디바이스로부터 제 2 디바이스로 복사한다(522). 제 1 디바이스는 업데이트된 바이트들의 복사본들을 제 2 디바이스에 전송할 수 있다. 제 1 디바이스는, 복사 프로세스의 완료 시, 제 2 디바이스가 애플리케이션을 실행해야 함을 표시하는 메시지를 제 2 디바이스에 전송할 수 있다. 일부 구현들에서, 제 1 디바이스는 단지 업데이트된 바이트들만의 복사본들을 제 2 디바이스에 전송한다. 일부 예들에서, 제 1 디바이스는, 업데이트된 바이트들을 식별하는 데이터의 입도, 예컨대, 더티 맵핑에 따라, 바이트들의 블록의 복사본, 예컨대, 64 바이트 블록을 제 2 디바이스에 전송한다. 예컨대, 더티 맵핑이, 64 바이트들 중 하나가 64 바이트들의 특정 블록에서 겹쳐쓰기되었음을 표시할 때, 제 1 디바이스는 64 바이트들의 특정 블록의 복사본을 제 2 디바이스에 전송한다.
[0095] 일부 구현들에서, 프로세스(500)가 추가적 단계들, 보다 적은 단계들을 포함할 수 있거나, 또는 단계들 중 일부가 다수의 단계들로 분할될 수 있다. 예컨대, 제 1 디바이스는 단계들(502 및 504)을 수행하지 않고 단계들(506 내지 522)을 수행할 수 있다. 일부 예들에서, 제 1 디바이스 또는 헬퍼는 마이그레이션 프로세스 동안 애플리케이션으로부터 판독 요청을 수신하고, 요청된 데이터를 애플리케이션에 제공할 수 있다.
선택적 구현 세부사항들
[0096] 일부 구현들에서, 헬퍼는 PCIe-부착 ASIC(application specific integrated circuit) 또는 FPGA(field programmable gate array)로 구현되는 하드웨어일 수 있다. 예컨대, PCIe-부착 디바이스에서의 헬퍼의 구현은 기존 시스템들이 시스템의 물리적 하드웨어에 대한 변경들을 요구하지 않고 헬퍼를 사용하게 허용할 수 있다.
[0097] 일부 구현들에서, 헬퍼는 SoC(system on a chip)일 수 있다. 예컨대, 헬퍼는 CPU(computer processor unit)-칩 SoC 기능일 수 있다. CPU-칩 SoC 기능은 PCIe, 코히런트 온-다이 패브릭(coherent on-die fabric), 또는 코히런트 오프-칩 패브릭(coherent off-chip fabric), 예컨대, Intel® QPI(QuickPath Interconnect) 또는 ARM® AXI(Advanced eXtensible Interface) 버스를 통해 부착될 수 있다. 일부 구현들에서, 헬퍼는 QPI 또는 AXI 버스를 사용하여 오프 소켓 칩으로 구현될 수 있다.
[0098] 하드웨어로 구현될 때, 헬퍼는 메모리, 예컨대, 캐시 또는 CPU 메모리에 기록할 수 있으며, 인터럽트들을 전송할 수 있다. 헬퍼는 초당 많은 수의 도어벨 요청들, 예컨대, 초당 5 백만 개의 도어벨 요청들에 응답할 수 있다.
추가적 구현 세부사항들
[0099] 본 명세서에서 설명되는 청구 대상 및 기능적 동작들의 실시예들은, 본 명세서에서 개시되는 구조들 및 이들의 구조적 등가물들을 포함하여, 디지털 전자 회로로, 유형적으로-구현된 컴퓨터 소프트웨어 또는 펌웨어로, 컴퓨터 하드웨어로, 또는 이들 중 하나 또는 그 초과의 것의 조합들로 구현될 수 있다. 본 명세서에서 설명되는 청구 대상의 실시예들은 하나 또는 그 초과의 컴퓨터 프로그램들, 즉, 데이터 프로세싱 장치에 의한 실행을 위해 또는 데이터 프로세싱 장치의 동작을 제어하기 위해 유형의 비-일시적 프로그램 캐리어 상에서 인코딩되는 컴퓨터 프로그램 명령들의 하나 또는 그 초과의 모듈들로서 구현될 수 있다. 대안적으로 또는 추가적으로, 프로그램 명령들은 데이터 프로세싱 장치에 의한 실행을 위한 적합한 수신기 장치로의 송신을 위해 정보를 인코딩하기 위해 생성되는 인위적으로 생성된 전파된 신호, 예컨대, 머신-발생 전기, 광학 또는 전자기 신호 상에서 인코딩될 수 있다. 컴퓨터 저장 매체는 컴퓨터 판독가능한 저장 디바이스, 머신 판독가능한 저장 기판, 랜덤 또는 시리얼 액세스 메모리 디바이스 또는 이들 중 하나 또는 그 초과의 것의 조합일 수 있다.
[0100] "데이터 프로세싱 장치"라는 용어는, 데이터 프로세싱 하드웨어를 지칭하며, 예로서 프로그램가능한 프로세서, 컴퓨터, 또는 다수의 프로세서들 또는 컴퓨터들을 포함하는, 데이터를 프로세싱하기 위한 모든 종류들의 장치, 디바이스들 및 머신들을 포함한다. 장치는 또한 특수 목적 로직 회로, 예컨대, FPGA(field programmable gate array) 또는 ASIC(application-specific integrated circuit)일 수 있거나 또는 이들을 추가로 포함할 수 있다. 장치는 선택적으로, 하드웨어에 추가하여, 컴퓨터 프로그램들에 대한 실행 환경을 생성하는 코드, 예컨대, 프로세서 펌웨어, 프로토콜 스택, 데이터베이스 관리 시스템, 운영 시스템, 또는 이들 중 하나 또는 그 초과의 것의 조합을 구성하는 코드를 포함할 수 있다.
[0101] 프로그램, 소프트웨어, 소프트웨어 애플리케이션, 모듈, 소프트웨어 모듈, 스크립트 또는 코드로 또한 지칭되거나 또는 이들로서 설명될 수 있는 컴퓨터 프로그램은 컴파일링되는 또는 해석되는 언어들, 또는 선언형 또는 절차형 언어들을 포함하는 임의의 형태의 프로그래밍 언어로 기록될 수 있고, 이는 독립형 프로그램으로서 또는 모듈, 컴포넌트, 서브루틴, 또는 컴퓨팅 환경에 사용하기에 적합한 다른 유닛으로서의 형태를 포함하는 임의의 형태로 전개될 수 있다. 컴퓨터 프로그램은 파일 시스템에서의 파일에 대응할 수 있지만, 반드시 그러한 것은 아니다. 프로그램은 다른 프로그램들 또는 데이터, 예컨대, 마크업 언어 문서에 저장된 하나 또는 그 초과의 스크립트들을 보유하는 파일의 일부분 내에, 해당 프로그램에 전용되는 단일 파일 내에, 또는 다수의 조정된 파일들, 예컨대, 하나 또는 그 초과의 모듈들, 서브-프로그램들 또는 코드의 부분들을 저장하는 파일들 내에 저장될 수 있다. 컴퓨터 프로그램은 하나의 컴퓨터 상에서, 또는 하나의 사이트에 로케이팅되거나 또는 다수의 사이트들에 걸쳐 분산되고 통신 네트워크에 의해 상호연결되는 다수의 컴퓨터들 상에서 실행되도록 전개될 수 있다.
[0102] 본 명세서에서 설명되는 프로세스들 및 로직 흐름들은 입력 데이터에 대해 동작하여 출력을 생성함으로써 기능들을 수행하기 위해 하나 또는 그 초과의 컴퓨터 프로그램들을 실행하는 하나 또는 그 초과의 프로그램가능한 컴퓨터들에 의해 수행될 수 있다. 프로세스들 및 로직 흐름들은 또한, 특수 목적 로직 회로, 예컨대, FPGA(field programmable gate array) 또는 ASIC(application-specific integrated circuit)에 의해 수행될 수 있고, 장치는 또한, 이들로서 구현될 수 있다.
[0103] 컴퓨터 프로그램의 실행에 적합한 컴퓨터들은, 예로서, 범용 또는 특수 목적 마이크로프로세서들 또는 둘 다, 또는 임의의 다른 종류의 중앙 프로세싱 유닛을 포함한다. 일반적으로, 중앙 프로세싱 유닛은 판독-전용 메모리 또는 랜덤 액세스 메모리 또는 둘 다로부터 명령들 및 데이터를 수신할 것이다. 컴퓨터의 필수 엘리먼트들은 명령들을 수행하거나 또는 실행하기 위한 중앙 프로세싱 유닛, 및 명령들 및 데이터를 저장하기 위한 하나 또는 그 초과의 메모리 디바이스들이다. 일반적으로, 컴퓨터는 또한, 데이터를 저장하기 위한 하나 또는 그 초과의 대용량 저장 디바이스, 예컨대, 자기적, 마그네토-광 디스크들 또는 광 디스크들을 포함하거나, 또는 이들로부터 데이터를 수신하거나 또는 이들에 데이터를 전달하거나 또는 둘 다를 수행하도록 동작적으로 커플링될 것이다. 그러나, 컴퓨터는 이러한 디바이스들을 가질 필요가 없다. 더욱이, 컴퓨터는 다른 디바이스, 몇 가지만 말하자면, 예컨대, 모바일 전화, PDA(personal digital assistant), 모바일 오디오 또는 비디오 플레이어, 게임 콘솔, GPS(Global Positioning System) 수신기 또는 휴대용 저장 디바이스, 예컨대, USB(universal serial bus) 플래시 드라이브 내에 임베딩될 수 있다.
[0104] 컴퓨터 프로그램 명령들 및 데이터를 저장하기에 적합한 컴퓨터 판독가능한 매체들은 예로서 반도체 메모리 디바이스들, 예컨대, EPROM, EEPROM, 및 플래시 메모리 디바이스들; 자기 디스크들, 예컨대, 내부 하드 디스크들 또는 탈착가능한(removable) 디스크들; 마그네토-광 디스크들; 및 CD-ROM 및 DVD-ROM 디스크들을 포함하는 모든 형태들의 비-휘발성 메모리, 매체들 및 메모리 디바이스들을 포함한다. 프로세서 및 메모리는 특수 목적 로직 회로에 의해 보충되거나 또는 이에 포함될 수 있다.
[0105] 사용자와의 상호작용을 제공하기 위해, 본 명세서에서 설명되는 청구 대상의 실시예들은 정보를 사용자에게 디스플레이하기 위한 디스플레이 디바이스, 예컨대, CRT(cathode ray tube) 또는 LCD(liquid crystal display) 모니터, 및 사용자가 입력을 컴퓨터에 제공할 수 있게 하는 키보드 및 포인팅 디바이스, 예컨대, 마우스 또는 트랙볼을 가지는 컴퓨터 상에서 구현될 수 있다. 다른 종류들의 디바이스들이 사용자와의 상호작용을 제공하기 위해 또한 사용될 수 있고; 예컨대, 사용자에게 제공되는 피드백은 임의의 형태의 감각 피드백, 예컨대, 시각적 피드백, 청각적 피드백 또는 촉각적 피드백일 수 있고; 사용자로부터의 입력은 어쿠스틱(acoustic), 음성 또는 촉각적 입력을 포함하는 임의의 형태로 수신될 수 있다. 또한, 컴퓨터는 문서들을 사용자에 의해 사용되는 디바이스에 전송하고 사용자에 의해 사용되는 디바이스로부터 문서들을 수신함으로써, 예컨대, 웹 브라우저로부터 수신된 요청들에 대한 응답으로 웹 페이지들을 사용자의 디바이스 상의 웹 브라우저에 전송함으로써, 사용자와 상호작용할 수 있다.
[0106] 본 명세서에서 설명되는 청구 대상의 실시예들은 백-엔드 컴포넌트를, 예컨대, 데이터 서버로서 포함하거나, 또는 미들웨어 컴포넌트, 예컨대, 애플리케이션 서버를 포함하거나, 또는 프론트-엔드 컴포넌트, 예컨대, 사용자가 본 명세서에서 설명되는 청구 대상의 구현과 상호작용할 수 있게 하는 웹 브라우저 또는 그래픽 사용자 인터페이스를 가지는 클라이언트 컴퓨터를 포함하는 컴퓨팅 시스템, 또는 하나 또는 그 초과의 이러한 백-엔드, 미들웨어 또는 프론트-엔드 컴포넌트들의 임의의 조합으로 구현될 수 있다. 시스템의 컴포넌트들은 임의의 형태 또는 매체의 디지털 데이터 통신, 예컨대, 통신 네트워크에 의해 상호연결될 수 있다. 통신 네트워크들의 예들은 LAN(local area network) 및 WAN(wide area network), 예컨대, 인터넷을 포함한다.
[0107] 컴퓨팅 시스템은 클라이언트들 및 서버들을 포함할 수 있다. 클라이언트 및 서버는 일반적으로 서로 멀리 떨어져 있으며, 전형적으로 통신 네트워크를 통해 상호작용한다. 클라이언트와 서버의 관계는, 각각의 컴퓨터들 상에서 실행되고 서로에 대해 클라이언트-서버 관계를 가지는 컴퓨터 프로그램들에 의해 발생한다. 일부 실시예들에서, 서버는, 예컨대, 데이터를 사용자 디바이스로 디스플레이하고 사용자 디바이스와 상호작용하는 사용자로부터 사용자 입력을 수신할 목적으로, 데이터, 예컨대, HTML 페이지를, 클라이언트로서 역할을 하는 사용자 디바이스에 송신한다. 사용자 디바이스에서 생성된 데이터, 예컨대, 사용자 상호작용의 결과는 서버에서 사용자 디바이스로부터 수신될 수 있다.
[0108] 하나의 이러한 타입의 컴퓨터의 예는 도 6에 도시되며, 도 6은 일반적 컴퓨터 시스템(600)의 개략적 다이어그램을 도시한다. 시스템(600)은, 하나의 구현에 따라, 사전에 설명된 컴퓨터-구현 방법들 중 임의의 컴퓨터-구현 방법과 연관하여 설명되는 동작들을 위해 사용될 수 있다. 시스템(600)은 프로세서(610), 메모리(620), 저장 디바이스(630) 및 입력/출력 디바이스(640)를 포함한다. 컴포넌트들(610, 620, 630 및 640) 각각은 시스템 버스(650)를 사용하여 상호연결된다. 프로세서(610)는 시스템(600) 내에서의 실행을 위해 명령들을 프로세싱할 수 있다. 하나의 구현에서, 프로세서(610)는 단일-스레딩되는(threaded) 프로세서이다. 다른 구현에서, 프로세서(610)는 다중-스레딩되는 프로세서이다. 프로세서(610)는 입력/출력 디바이스(640) 상의 사용자 인터페이스에 대한 그래픽 정보를 디스플레이하기 위해 메모리(620) 내에 또는 저장 디바이스(630) 상에 저장된 명령들을 프로세싱할 수 있다.
[0109] 메모리(620)는 시스템(600) 내에 정보를 저장한다. 하나의 구현에서, 메모리(620)는 컴퓨터 판독가능한 매체이다. 하나의 구현에서, 메모리(620)는 휘발성 메모리 유닛이다. 다른 구현에서, 메모리(620)는 비-휘발성 메모리 유닛이다.
[0110] 저장 디바이스(630)는 시스템(600)에 대한 대용량 저장을 제공할 수 있다. 하나의 구현에서, 저장 디바이스(630)는 컴퓨터 판독가능한 매체이다. 다양한 상이한 구현들에서, 저장 디바이스(630)는 플로피 디스크 디바이스, 하드 디스크 디바이스, 광학 디스크 디바이스, 또는 테이프 디바이스일 수 있다.
[0111] 입력/출력 디바이스(640)는 시스템(600)에 대한 입력/출력 동작들을 제공한다. 하나의 구현에서, 입력/출력 디바이스(640)는 키보드 및/또는 포인팅 디바이스를 포함한다. 다른 구현에서, 입력/출력 디바이스(640)는 그래픽 사용자 인터페이스들을 디스플레이하기 위한 디스플레이 유닛을 포함한다.
[0112] 본 명세서는 많은 특정 구현 세부사항들을 포함하지만, 이들은 청구될 수 있는 것의 범위에 대한 제한들이 아니라, 오히려, 특정 실시예들에 특정적일 수 있는 특징들의 설명들로서 해석되어야 한다. 별개의 실시예들의 맥락에서 본 명세서에서 설명되는 특정 특징들은 또한 단일 실시예에서 조합으로 구현될 수 있다. 반대로, 단일 실시예의 맥락에서 설명되는 다양한 특징들은 또한, 다수의 실시예들에서 개별적으로 또는 임의의 적합한 서브조합으로 구현될 수 있다. 더욱이, 특징들은 특정 조합들로 작동하는 것으로서 위에서 설명될 수 있고, 심지어 이와 같이 초기에 청구될 수 있지만, 청구되는 조합으로부터의 하나 또는 그 초과의 특징들은 일부 경우들에서 조합으로부터 삭제될 수 있고, 청구되는 조합은 서브조합 또는 서브조합의 변형에 관련될 수 있다.
[0113] 유사하게, 동작들은 특정 순서로 도면들에 도시되어 있지만, 이것은 바람직한 결과들을 달성하기 위해, 도시되는 특정 순서로 또는 순차적 순서로 이러한 동작들이 수행되거나, 또는 모든 예시되는 동작들이 수행되는 것을 요구하는 것으로서 이해되어야 하는 것은 아니다. 특정 상황들에서는, 멀티태스킹 및 병렬 프로세싱이 유리할 수 있다. 더욱이, 위에서 설명된 실시예들에서의 다양한 시스템 모듈들 및 컴포넌트들의 분리는 모든 실시예들에서 이러한 분리를 요구하는 것으로서 이해되어야 하는 것은 아니고, 설명되는 프로그램 컴포넌트들 및 시스템들은 일반적으로 단일 소프트웨어 제품에서 함께 통합될 수 있거나 또는 다수의 소프트웨어 제품들로 패키징될 수 있다는 것이 이해되어야 한다.
[0114] 청구 대상의 특정 실시예들이 설명되었다. 다른 실시예들은 다음의 청구항들의 범위 내에 있다. 예컨대, 청구항들에서 인용되는 액션들은 상이한 순서로 수행될 수 있으며, 여전히 바람직한 결과들을 달성할 수 있다. 하나의 예로서, 첨부한 도면들에 도시되는 프로세스들은 바람직한 결과들을 달성하기 위해, 도시되는 특정 순서, 또는 순차적 순서를 반드시 요구하지는 않는다. 일부 경우들에서, 멀티태스킹 및 병렬 프로세싱이 유리할 수 있다.

Claims (29)

  1. 컴퓨터로 구현되는 방법으로서,
    각각의 어드레스를 복수의 도어벨 페이지(doorbell page)들 각각에 할당함으로써 디바이스 상에서 실행되는 복수의 가상 머신들에 대한 상기 복수의 도어벨 페이지들을 생성하는 단계;
    상기 복수의 가상 머신들 각각에 각각의 가상 머신에 대한 각각의 어드레스를 제공함으로써 상기 각각의 가상 머신으로부터의 요청들을 저장하는 링 버퍼를 식별하는 상기 복수의 도어벨 페이지들의 각각의 도어벨 페이지로의 액세스를 상기 복수의 가상 머신들 각각에 제공하는 단계;
    상기 복수의 도어벨 페이지들 중 특정한 하나로부터, 각각의 링 버퍼가 상기 각각의 가상 머신으로부터의 요청을 가진다는 통지를 수신하는 단계; 및
    상기 각각의 링 버퍼가 상기 각각의 가상 머신으로부터의 요청을 가진다는 통지를 수신하는 것에 대한 응답으로, 프로세서로 하여금 상기 각각의 가상 머신에 대한 상기 각각의 링 버퍼를 프로세싱하게 야기하는 단계를 포함하는,
    컴퓨터로 구현되는 방법.
  2. 제 1 항에 있어서,
    상기 프로세서가 상기 요청을 프로세싱하는 동안 상기 각각의 가상 머신을 계속 실행하는 단계를 포함하는,
    컴퓨터로 구현되는 방법.
  3. 제 1 항에 있어서,
    상기 각각의 링 버퍼가 상기 각각의 가상 머신으로부터의 요청을 가진다는 통지를 수신하기 이전에, 상기 각각의 링 버퍼에 대한 업데이트를 수신하는 단계를 포함하는,
    컴퓨터로 구현되는 방법.
  4. 삭제
  5. 컴퓨터로 구현되는 방법으로서,
    디바이스 상에서 실행되는 복수의 가상 머신들에 대한 복수의 도어벨 페이지들을 생성하는 단계;
    상기 복수의 도어벨 페이지들 각각에 대해, 상기 도어벨 페이지에 고유하게 대응하고, 그리고 상기 도어벨 페이지에 의해 식별되며 각각의 가상 머신으로부터의 요청들을 저장하는 큐를 고유하게 식별하는 각각의 엔트리를 포함하는 비트 벡터를 생성하는 단계;
    상기 각각의 가상 머신으로부터의 요청들을 저장하는 큐를 식별하는 상기 복수의 도어벨 페이지들의 각각의 도어벨 페이지로의 액세스를 상기 복수의 가상 머신들 각각에 제공하는 단계;
    상기 복수의 도어벨 페이지들 중 특정한 하나로부터, 각각의 큐가 상기 각각의 가상 머신으로부터의 요청을 가진다는 통지를 수신하는 단계;
    상기 각각의 큐가 상기 각각의 가상 머신으로부터의 요청을 가진다는 통지를 수신하는 것에 대한 응답으로, 상기 각각의 큐를 식별하는, 상기 비트 벡터에서의 각각의 엔트리를 업데이트하는 단계; 및
    상기 각각의 큐를 식별하는, 상기 비트 벡터에서의 각각의 엔트리를 업데이트하는 것에 대한 응답으로, 프로세서로 하여금 상기 각각의 가상 머신에 대한 상기 각각의 큐를 프로세싱하게 야기하기 위해 상기 프로세서에게 상기 비트 벡터를 제공함으로써 상기 프로세서로 하여금 상기 각각의 가상 머신에 대한 상기 각각의 큐를 프로세싱하게 야기하는 단계
    를 포함하는,
    컴퓨터로 구현되는 방법.
  6. 제 5 항에 있어서,
    상기 프로세서로 하여금 상기 각각의 가상 머신에 대한 상기 각각의 큐를 프로세싱하게 야기하기 위해 상기 프로세서에게 상기 비트 벡터를 제공하는 것은, 상기 프로세서로 하여금 상기 복수의 가상 머신들에 대한 다수의 큐들을 프로세싱하게 야기하기 위해 상기 비트 벡터를 상기 프로세서에 제공하는 것을 포함하는,
    컴퓨터로 구현되는 방법.
  7. 제 1 항에 있어서,
    상기 프로세서로 하여금 상기 각각의 가상 머신에 대한 상기 각각의 링 버퍼를 프로세싱하게 야기하는 단계는 인터럽트를 상기 프로세서에 전송하는 단계를 포함하는,
    컴퓨터로 구현되는 방법.
  8. 삭제
  9. 삭제
  10. 삭제
  11. 제 1 항에 있어서,
    상기 복수의 도어벨 페이지들을 생성하는 단계는 트래킹 구조를 생성하는 단계, 및 상기 트래킹 구조로부터 각각의 인덱스를 상기 복수의 도어벨 페이지들 각각으로 할당하는 단계를 포함하고,
    상기 각각의 가상 머신으로부터의 요청들을 저장하는 링 버퍼를 식별하는 상기 복수의 도어벨 페이지들의 각각의 도어벨 페이지로의 액세스를 상기 복수의 가상 머신들 각각에 제공하는 단계는 상기 각각의 가상 머신으로의 상기 각각의 인덱스에 대한 어드레스를 상기 복수의 가상 머신들 각각에 제공하는 단계를 포함하는,
    컴퓨터로 구현되는 방법.
  12. 제 1 항에 있어서,
    상기 복수의 도어벨 페이지들을 생성하는 단계는,
    상기 복수의 도어벨 페이지들 각각에 대한 페이지를 생성하는 단계; 및
    상기 복수의 도어벨 페이지들 각각에 대해, 상기 복수의 도어벨 페이지들의 각각의 도어벨 페이지가 상기 각각의 페이지 내에 상주하는 넌-제로(non-zero) 오프셋을 할당하는 단계를 포함하고,
    상기 각각의 가상 머신으로부터의 요청들을 저장하는 링 버퍼를 식별하는 상기 복수의 도어벨 페이지들의 각각의 도어벨 페이지로의 액세스를 상기 복수의 가상 머신들 각각에 제공하는 단계는 상기 각각의 가상 머신으로의 상기 각각의 페이지에 대한 어드레스 및 상기 넌-제로 오프셋을 상기 복수의 가상 머신들 각각에 제공하는 단계를 포함하는,
    컴퓨터로 구현되는 방법.
  13. 컴퓨터로 구현되는 방법으로서,
    디바이스 상에서 실행되는 복수의 가상 머신들에 대한 제 1 복수의 도어벨 페이지들을 생성하는 단계;
    각각의 가상 머신으로부터의 제 1 요청들을 저장하는 제 1 큐를 식별하는 상기 제 1 복수의 도어벨 페이지들의 각각의 도어벨 페이지로의 액세스를 상기 복수의 가상 머신들 각각에 제공하는 단계 ― 상기 제 1 요청들 각각은 제 1 타입을 가짐 ―;
    제 2 복수의 도어벨 페이지들을 생성하는 단계;
    상기 각각의 가상 머신으로부터의 제 2 요청들을 저장하는 제 2 큐를 식별하는 상기 제 2 복수의 도어벨 페이지들의 각각의 도어벨 페이지로의 액세스를 상기 복수의 가상 머신들 중 적어도 일부의 가상 머신들 각각에 제공하는 단계 ― 상기 제 1 요청들의 제 1 타입은 상기 제 2 요청들의 제 2 타입과 상이함 ―;
    상기 복수의 도어벨 페이지들 중 특정한 하나로부터, 요청의 타입을 식별하며, 각각의 큐가 상기 각각의 가상 머신으로부터의 요청을 가진다는 통지를 수신하는 단계; 및
    상기 각각의 큐가 상기 각각의 가상 머신으로부터의 요청을 가진다는 통지를 수신하는 것에 대한 응답으로,
    상기 요청의 타입이 상기 제 1 타입을 포함한다고 결정하는 단계;
    상기 제 1 타입의 서비스 요청들에 할당되는 특정한 프로세서를 결정하는 단계; 및
    상기 특정한 프로세서로 하여금 상기 각각의 가상 머신에 대한 상기 각각의 큐를 프로세싱하게 야기하는 단계를 포함하는,
    컴퓨터로 구현되는 방법.
  14. 제 13 항에 있어서,
    상기 디바이스의 제 1 프로세서 상에서 상기 복수의 가상 머신들을 실행하는 단계를 포함하고,
    상기 특정한 프로세서로 하여금 상기 각각의 가상 머신에 대한 상기 각각의 큐를 프로세싱하게 야기하는 단계는 제 2 상이한 프로세서로 하여금 상기 각각의 가상 머신에 대한 상기 각각의 큐를 프로세싱하게 야기하도록 상기 제 2 상이한 프로세서 상에서 실행되는 하이퍼바이저(hypervisor)에 메시지를 제공하는 단계를 포함하는,
    컴퓨터로 구현되는 방법.
  15. 제 14 항에 있어서,
    상기 제 2 상이한 프로세서 상에서 실행되는 상기 하이퍼바이저에 상기 메시지를 제공하는 단계는, 상기 디바이스와 상이한 제 2 디바이스 상의 상기 제 2 상이한 프로세서 상에서 실행되는 상기 하이퍼바이저에 상기 메시지를 제공하는 단계를 포함하는,
    컴퓨터로 구현되는 방법.
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
  20. 시스템으로서,
    메모리;
    데이터 프로세싱 장치; 및
    상기 데이터 프로세싱 장치와 데이터 통신하고, 명령들을 저장하는 비-일시적 컴퓨터 판독가능한 저장 매체를 포함하고, 상기 명령들은, 상기 데이터 프로세싱 장치에 의해 실행가능하고, 실행 시, 상기 데이터 프로세싱 장치로 하여금,
    각각의 어드레스를 복수의 도어벨 페이지들 각각에 할당함으로써 상기 시스템 상에서 실행되는 복수의 가상 머신들에 대해 상기 메모리 내에 상기 복수의 도어벨 페이지들을 저장하는 것;
    상기 복수의 가상 머신들 각각에 각각의 가상 머신에 대한 각각의 어드레스를 제공함으로써 상기 각각의 가상 머신으로부터의 요청들을 저장하는 링 버퍼를 식별하는 상기 복수의 도어벨 페이지들의 각각의 도어벨 페이지로의 액세스를 상기 복수의 가상 머신들 각각에 제공하는 것;
    상기 복수의 도어벨 페이지들 중 특정한 하나로부터, 각각의 링 버퍼가 상기 각각의 가상 머신으로부터의 요청을 가진다는 통지를 수신하는 것; 및
    상기 각각의 링 버퍼가 상기 각각의 가상 머신으로부터의 요청을 가진다는 통지를 수신하는 것에 대한 응답으로, 프로세서로 하여금 상기 각각의 가상 머신에 대한 상기 각각의 링 버퍼를 프로세싱하게 야기하는 것
    을 포함하는 동작들을 수행하게 야기하는
    시스템.
  21. 제 20 항에 있어서,
    상기 데이터 프로세싱 장치는 상기 각각의 가상 머신에 대한 상기 각각의 링 버퍼를 프로세싱하는 상기 프로세서를 포함하는,
    시스템.
  22. 제 20 항에 있어서,
    상기 데이터 프로세싱 장치와 상이한 상기 프로세서를 포함하고,
    상기 동작들은,
    상기 데이터 프로세싱 장치 상에서 상기 복수의 가상 머신들을 실행하는 것을 포함하고,
    상기 프로세서로 하여금 상기 각각의 가상 머신에 대한 상기 각각의 링 버퍼를 프로세싱하게 야기하는 것은 상기 프로세서로 하여금 상기 각각의 가상 머신에 대한 상기 각각의 링 버퍼를 프로세싱하게 야기하도록 상기 프로세서 상에서 실행되는 하이퍼바이저에 메시지를 제공하는 것을 포함하는,
    시스템.
  23. 제 22 항에 있어서,
    상기 데이터 프로세싱 장치를 포함하는 제 1 디바이스; 및
    상기 프로세서를 포함하는 제 2 디바이스를 포함하고,
    상기 프로세서 상에서 실행되는 상기 하이퍼바이저에 상기 메시지를 제공하는 것은 상기 제 1 디바이스와 상이한 상기 제 2 디바이스 상의 상기 프로세서 상에서 실행되는 상기 하이퍼바이저에 상기 메시지를 제공하는 것을 포함하는,
    시스템.
  24. 데이터 프로세싱 장치에 의해 실행가능한 명령들을 저장하는 비-일시적 컴퓨터 판독가능한 저장 매체로서,
    상기 명령들은 실행 시, 상기 데이터 프로세싱 장치로 하여금,
    각각의 어드레스를 복수의 도어벨 페이지들 각각에 할당함으로써 디바이스 상에서 실행되는 복수의 가상 머신들에 대한 상기 복수의 도어벨 페이지들을 생성하는 것;
    상기 복수의 가상 머신들 각각에 각각의 가상 머신에 대한 각각의 어드레스를 제공함으로써 상기 각각의 가상 머신으로부터의 요청들을 저장하는 링 버퍼를 식별하는 상기 복수의 도어벨 페이지들의 각각의 도어벨 페이지로의 액세스를 상기 복수의 가상 머신들 각각에 제공하는 것;
    상기 복수의 도어벨 페이지들 중 특정한 하나로부터, 각각의 링 버퍼가 상기 각각의 가상 머신으로부터의 요청을 가진다는 통지를 수신하는 것; 및
    상기 각각의 링 버퍼가 상기 각각의 가상 머신으로부터의 요청을 가진다는 통지를 수신하는 것에 대한 응답으로, 프로세서로 하여금 상기 각각의 가상 머신에 대한 상기 각각의 링 버퍼를 프로세싱하게 야기하는 것을 포함하는 동작들을 수행하게 야기하는,
    비-일시적 컴퓨터 판독가능한 저장 매체.
  25. 제 5 항에 있어서,
    상기 프로세서가 상기 요청을 프로세싱하는 동안 상기 각각의 가상 머신을 계속 실행하는 단계를 포함하는,
    컴퓨터로 구현되는 방법.
  26. 제 5 항에 있어서,
    상기 각각의 큐가 상기 각각의 가상 머신으로부터의 요청을 가진다는 통지를 수신하기 이전에, 상기 각각의 큐에 대한 업데이트를 수신하는 단계를 포함하는,
    컴퓨터로 구현되는 방법.
  27. 제 20 항에 있어서,
    상기 메모리 내에 상기 복수의 도어벨 페이지들을 저장하는 것은:
    상기 복수의 도어벨 페이지들 각각에 대한 페이지를 생성하는 것; 및
    상기 복수의 도어벨 페이지들 각각에 대해, 상기 복수의 도어벨 페이지들의 각각의 도어벨 페이지가 상기 각각의 페이지 내에 상주하는 넌-제로 오프셋을 할당하는 것을 포함하고,
    상기 각각의 가상 머신으로부터의 요청들을 저장하는 링 버퍼를 식별하는 상기 복수의 도어벨 페이지들의 각각의 도어벨 페이지로의 액세스를 상기 복수의 가상 머신들 각각에 제공하는 것은 상기 각각의 가상 머신으로의 상기 각각의 페이지에 대한 어드레스 및 상기 넌-제로 오프셋을 상기 복수의 가상 머신들 각각에 제공하는 것을 포함하는,
    시스템.
  28. 삭제
  29. 삭제
KR1020177028202A 2015-04-16 2016-03-31 가상 머신 시스템들 KR101922533B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US14/688,258 US9747122B2 (en) 2015-04-16 2015-04-16 Virtual machine systems
US14/688,258 2015-04-16
US14/724,259 US9639395B2 (en) 2015-04-16 2015-05-28 Byte application migration
US14/724,259 2015-05-28
PCT/US2016/025303 WO2016167980A2 (en) 2015-04-16 2016-03-31 Virtual machine systems

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020187019606A Division KR102011478B1 (ko) 2015-04-16 2016-03-31 가상 머신 시스템들

Publications (2)

Publication Number Publication Date
KR20170122826A KR20170122826A (ko) 2017-11-06
KR101922533B1 true KR101922533B1 (ko) 2019-02-20

Family

ID=55750492

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020177028202A KR101922533B1 (ko) 2015-04-16 2016-03-31 가상 머신 시스템들
KR1020187019606A KR102011478B1 (ko) 2015-04-16 2016-03-31 가상 머신 시스템들

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020187019606A KR102011478B1 (ko) 2015-04-16 2016-03-31 가상 머신 시스템들

Country Status (9)

Country Link
US (1) US9639395B2 (ko)
EP (2) EP3779695A1 (ko)
JP (2) JP6423547B2 (ko)
KR (2) KR101922533B1 (ko)
CN (2) CN107430522B (ko)
DE (2) DE202016107376U1 (ko)
GB (1) GB2553050A (ko)
HK (2) HK1243792B (ko)
WO (1) WO2016167980A2 (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8019732B2 (en) * 2008-08-08 2011-09-13 Amazon Technologies, Inc. Managing access of multiple executing programs to non-local block data storage
US10838852B2 (en) 2015-04-17 2020-11-17 Samsung Electronics Co., Ltd. System and method to extend NVME queues to user space
US11036533B2 (en) 2015-04-17 2021-06-15 Samsung Electronics Co., Ltd. Mechanism to dynamically allocate physical storage device resources in virtualized environments
US10228969B1 (en) * 2015-06-25 2019-03-12 Amazon Technologies, Inc. Optimistic locking in virtual machine instance migration
US10970110B1 (en) 2015-06-25 2021-04-06 Amazon Technologies, Inc. Managed orchestration of virtual machine instance migration
US10043010B1 (en) * 2015-12-31 2018-08-07 Cybereason Migration of sandbox processes for malware prevention
US10545800B2 (en) * 2017-05-31 2020-01-28 Ati Technologies Ulc Direct doorbell ring in virtualized processing device
US10860475B1 (en) * 2017-11-17 2020-12-08 Pure Storage, Inc. Hybrid flash translation layer
KR102107374B1 (ko) * 2018-08-27 2020-05-07 주식회사 두두아이티 가상화 기반 훈련 콘텐츠 제공 시스템
KR20220118004A (ko) * 2021-02-18 2022-08-25 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작 방법
US11922026B2 (en) 2022-02-16 2024-03-05 T-Mobile Usa, Inc. Preventing data loss in a filesystem by creating duplicates of data in parallel, such as charging data in a wireless telecommunications network

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020165899A1 (en) 2001-04-11 2002-11-07 Michael Kagan Multiple queue pair access with single doorbell
US20050144422A1 (en) 2003-12-30 2005-06-30 Mcalpine Gary L. Virtual to physical address translation
US20140181323A1 (en) 2012-12-20 2014-06-26 Oracle International Corporation Doorbell backpressure avoidance mechanism on a host channel adapter

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5918248A (en) * 1996-12-30 1999-06-29 Northern Telecom Limited Shared memory control algorithm for mutual exclusion and rollback
US7257811B2 (en) * 2004-05-11 2007-08-14 International Business Machines Corporation System, method and program to migrate a virtual machine
US8694990B2 (en) * 2007-08-27 2014-04-08 International Business Machines Corporation Utilizing system configuration information to determine a data migration order
CN101609419B (zh) * 2009-06-29 2012-05-30 北京航空航天大学 虚拟机持续在线迁移的数据备份方法及装置
US8478725B2 (en) * 2009-09-14 2013-07-02 Vmware, Inc. Method and system for performing live migration of persistent data of a virtual machine
US8356149B2 (en) * 2009-10-30 2013-01-15 Hewlett-Packard Development Company, L.P. Memory migration
US8327060B2 (en) * 2009-11-30 2012-12-04 Red Hat Israel, Ltd. Mechanism for live migration of virtual machines with memory optimizations
US8468288B2 (en) * 2009-12-10 2013-06-18 International Business Machines Corporation Method for efficient guest operating system (OS) migration over a network
US9058183B2 (en) * 2009-12-29 2015-06-16 Advanced Micro Devices, Inc. Hypervisor isolation of processor cores to enable computing accelerator cores
US9032398B2 (en) 2010-07-12 2015-05-12 Vmware, Inc. Online classification of memory pages based on activity level represented by one or more bits
US20120229481A1 (en) * 2010-12-13 2012-09-13 Ati Technologies Ulc Accessibility of graphics processing compute resources
US8832029B2 (en) * 2011-02-16 2014-09-09 Microsoft Corporation Incremental virtual machine backup supporting migration
US8813083B2 (en) * 2011-07-01 2014-08-19 Intel Corporation Method and system for safe enqueuing of events
US9274825B2 (en) * 2011-08-16 2016-03-01 Microsoft Technology Licensing, Llc Virtualization gateway between virtualized and non-virtualized networks
US20130174144A1 (en) 2011-12-28 2013-07-04 Ati Technologies Ulc Hardware based virtualization system
BR112014017543A2 (pt) 2012-01-17 2017-06-27 Intel Corp técnicas de validação de comando para o acesso a um dispositivo de armazenamento por um cliente remoto
US10474369B2 (en) * 2012-02-06 2019-11-12 Vmware, Inc. Mapping guest pages to disk blocks to improve virtual machine management processes
US9454487B2 (en) * 2012-08-27 2016-09-27 Vmware, Inc. Transparent host-side caching of virtual disks located on shared storage
GB2506177A (en) * 2012-09-25 2014-03-26 Ibm Method of migrating an operating system executing an application
US10223026B2 (en) * 2013-09-30 2019-03-05 Vmware, Inc. Consistent and efficient mirroring of nonvolatile memory state in virtualized environments where dirty bit of page table entries in non-volatile memory are not cleared until pages in non-volatile memory are remotely mirrored
EP3127300B1 (en) * 2014-05-12 2019-09-04 Google LLC Managing nic-encrypted flows for migrating guests or tasks

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020165899A1 (en) 2001-04-11 2002-11-07 Michael Kagan Multiple queue pair access with single doorbell
US20050144422A1 (en) 2003-12-30 2005-06-30 Mcalpine Gary L. Virtual to physical address translation
US20140181323A1 (en) 2012-12-20 2014-06-26 Oracle International Corporation Doorbell backpressure avoidance mechanism on a host channel adapter

Also Published As

Publication number Publication date
HK1243792B (zh) 2019-11-01
JP6391878B1 (ja) 2018-09-19
KR20170122826A (ko) 2017-11-06
DE202016107376U1 (de) 2017-01-24
KR20180081847A (ko) 2018-07-17
KR102011478B1 (ko) 2019-10-21
CN108268331B (zh) 2019-05-31
HK1251315B (zh) 2020-06-26
US20160306658A1 (en) 2016-10-20
WO2016167980A3 (en) 2016-11-17
CN107430522A (zh) 2017-12-01
DE112016001730T5 (de) 2017-12-28
GB201715307D0 (en) 2017-11-08
GB2553050A (en) 2018-02-21
JP2018170033A (ja) 2018-11-01
CN107430522B (zh) 2018-09-21
EP3779695A1 (en) 2021-02-17
US9639395B2 (en) 2017-05-02
WO2016167980A2 (en) 2016-10-20
JP6423547B2 (ja) 2018-11-14
CN108268331A (zh) 2018-07-10
JP2018511881A (ja) 2018-04-26
EP3283960A2 (en) 2018-02-21

Similar Documents

Publication Publication Date Title
KR101922533B1 (ko) 가상 머신 시스템들
US9747122B2 (en) Virtual machine systems
US11797434B2 (en) Managing storage devices
US10496613B2 (en) Method for processing input/output request, host, server, and virtual machine
US8850158B2 (en) Apparatus for processing remote page fault and method thereof
TW201732607A (zh) 用於輸入/輸出裝置之可縮放虛擬化的位址轉譯
US11188365B2 (en) Memory overcommit by speculative fault
US10983833B2 (en) Virtualized and synchronous access to hardware accelerators
US10310759B2 (en) Use efficiency of platform memory resources through firmware managed I/O translation table paging
US11341044B2 (en) Reclaiming storage resources
US20140325163A1 (en) Cross-Partition Shared Memory Attach for Data Processing Environment
US9697047B2 (en) Cooperation of hoarding memory allocators in a multi-process system
CN114207596A (zh) 将中断从输入-输出存储器管理单元提供到访客操作系统
US11940917B2 (en) System and method for network interface controller based distributed cache
TW202344971A (zh) 使用整合記憶體池化及直接交換快取的系統及方法
Ahn et al. A study on user-level remote memory extension system

Legal Events

Date Code Title Description
A201 Request for examination
A107 Divisional application of patent
E701 Decision to grant or registration of patent right
GRNT Written decision to grant