JP2018511881A - 仮想マシンシステム - Google Patents

仮想マシンシステム Download PDF

Info

Publication number
JP2018511881A
JP2018511881A JP2017550900A JP2017550900A JP2018511881A JP 2018511881 A JP2018511881 A JP 2018511881A JP 2017550900 A JP2017550900 A JP 2017550900A JP 2017550900 A JP2017550900 A JP 2017550900A JP 2018511881 A JP2018511881 A JP 2018511881A
Authority
JP
Japan
Prior art keywords
page
doorbell
queue
processor
virtual machine
Prior art date
Legal status (The legal status 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 status listed.)
Granted
Application number
JP2017550900A
Other languages
English (en)
Other versions
JP6423547B2 (ja
Inventor
セレブリン,ベンジャミン・シィ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
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 Google LLC filed Critical Google LLC
Publication of JP2018511881A publication Critical patent/JP2018511881A/ja
Application granted granted Critical
Publication of JP6423547B2 publication Critical patent/JP6423547B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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
    • 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/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
    • 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/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/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

コンピュータ記憶媒体上にエンコードされ、仮想マシンによるメモリ要求を処理するためのコンピュータプログラムを含む方法、システムおよび装置。この方法の1つは、装置上で動作している複数の仮想マシンに対する複数のドアベルページを生成するステップと、複数のドアベルページのうち、各仮想マシンからの要求を記憶するキューを特定する各ドアベルページに対するアクセスを複数の仮想マシンの各々に提供するステップと、複数のドアベルページのうち1つの特定のドアベルページから、各キューが対応する各仮想マシンからの要求を記憶している通知を受信するステップと、各キューが対応する各仮想マシンからの要求を記憶している通知を受信することに応答して、各仮想マシンに対応する各キューをプロセッサに処理させるステップとを含む。

Description

本明細書は、仮想マシンシステムによるメモリアクセスに関する。
場合によって、仮想マシン、例えばクラウド仮想マシンは、仮想装置と通信を行うために、制約付きの双方向通信パスを必要とする。例えば、仮想マシンは、ヘッドポインタとテールポインタとを有する循環バッファを使用することができる。ハイパーバイザ、ハイパーバイザのエージェント、または信頼できる物理装置は、ヘッドポインタをポーリングすることによって、仮想マシンが新しい要求をキューに入れる時間を判断し、キューの内容を読み取ることができる。一部のシステムは、複数のプロセッサコアを用いて、キューをポーリングすることができる。
概要
いくつかの実現例において、ハイパーバイザ、例えばハイパーバイザヘルパーは、各キューに対応するドアベルページを用いて、複数の仮想マシンに対応する複数のキューを監視し、潜在的に各仮想マシンに対応する複数のキューを監視することができる。ハイパーバイザは、ドアベルページを用いて、プロセッサの作業を含むエントリをキューに入れたか否か、およびエントリをキューに入れた時間を判断する。ドアベルページが呼び出される時に、ハイパーバイザは、ビットベクトルを更新し、サービスを必要とするキューを示すために、更新後のビットベクトルをプロセッサに提供することができる。ドアベルページが呼び出される時に、ハイパーバイザは、例えば、ドアベルページまたはドアベルページからの値をメモリにコピーすることによって、ハイパーバイザまたはプロセッサによって使用される。ハイパーバイザは、プロセッサに割込みを送信することによって、作業を行っているプロセッサが他の作業を行える時間をそのプロセッサに通知することができる。このハイパーバイザヘルパーは、上述したステップを実行するように構成されたアプリケーションまたはハードウェアであってもよい。
いくつかの実現例において、ヘルパーアプリケーションまたは装置、例えばハイパーバイザまたはハイパーバイザヘルパーアプリケーションまたは装置は、仮想マシンなどのアプリケーションを第1装置から第2装置に移行する間に、メモリアクセスを制御することができる。ヘルパーは、アプリケーションによって使用されるメモリのページを監視し、移行プロセス中にページからのダーティバイトのみを第2装置に移行することができる。
一般的には、本明細書に記載された主題の1つの革新的な態様は、方法として具体化することができる。この方法は、装置上で動作している複数の仮想マシンに対する複数のドアベルページを生成するステップと、複数のドアベルページのうち、各仮想マシンからの要求を記憶するキューを特定する各ドアベルページに対するアクセスを複数の仮想マシンの各々に提供するステップと、複数のドアベルページのうち1つの特定のドアベルページから、各キューが対応する各仮想マシンからの要求を記憶している通知を受信するステップと、各キューが対応する各仮想マシンからの要求を記憶している通知を受信することに応答して、各仮想マシンに対応する各キューをプロセッサに処理させるステップとを含む。この態様の他の実施形態は、各々が方法の動作を実行するように構成されたコンピュータシステム、装置、および1つ以上のコンピュータ記憶装置に記録されたコンピュータプログラムを含む。
一般的には、本明細書に記載された主題の1つの革新的な態様は、方法として具体化することができる。この方法は、第1装置上でアプリケーションの実行を継続させながら、第1装置のメモリに記憶され、第1装置上でアプリケーションの実行に使用されるデータページを第1装置から第2装置にコピーすることによって、第1装置上で実行しているアプリケーションを第1装置から第2装置に移行する移行プロセスを開始するステップと、移行プロセス中に第1装置上でアプリケーションの実行に応答して、第1装置によって、データページのうち、少なくとも1つのデータページ内の1つ以上のバイトを更新するステップと、第1装置上でアプリケーションの実行を停止するステップと、更新されたバイトを第1装置から第2装置にコピーして、第2装置にアプリケーションの実行を継続させるステップとを含む。この態様の他の実施形態は、各々が方法の動作を実行するように構成されたコンピュータシステム、装置、および1つ以上のコンピュータ記憶装置に記録されたコンピュータプログラムを含む。
1つ以上のコンピュータのシステムは、動作するとシステムに特定の動作または行動を実行させるソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせをシステム上にインストールすることによって、特定の動作または行動を行うように構成することができる。1つ以上のコンピュータプログラムは、データ処理装置によって実行されると、データ処理装置に動作を実行させる命令を含むことによって、特定の動作または行動を実行するように構成することができる。
必要に応じて、上記および他の実施形態の各々は、単独でまたは合わせて、以下の特徴のうち1つ以上を含むことができる。この方法は、プロセッサが要求を処理している間に、各仮想マシンの実行を継続するステップを含むことができる。この方法は、各キューが対応する各仮想マシンからの要求を記憶している通知を受信する前に、各キューの更新を受信するステップを含むことができる。
いくつかの実現例において、この方法は、複数のドアベルページの各々について、当該ドアベルページに一意に対応し且つ各ドアベルページによって特定されたキューを一意に特定するエントリを含むアレイを生成するステップと、各キューが対応する各仮想マシンからの要求を記憶している通知を受信したことに応答して、各キューを特定するアレイ内の各エントリを更新するステップとを含む。プロセッサに各仮想マシンに対応する各キューを処理させるステップは、アレイをプロセッサに提供して、プロセッサに各仮想マシンに対応する各キューを処理させるステップを含むことができる。複数のドアベルページの各々について、当該ドアベルページに一意に対応し且つ当該ドアベルページによって特定されたキューを一意に特定するエントリを含むアレイを生成するステップは、複数のドアベルページの各々について、当該ドアベルページに一意に対応し且つ当該ドアベルページによって特定されたキューを一意に特定するエントリを含むビットベクトルを生成することを含むことができる。各キューを特定するアレイ内の各エントリを更新するステップは、各キューを特定する、ビットベクトルにおける各エントリを更新することを含むことができる。対応するキューを特定するアレイ内の各エントリを更新するステップは、対応するキューを特定するビットベクトルの各エントリを更新するステップを含むことができる。アレイをプロセッサに提供して、プロセッサに各仮想マシンに対応する各キューを処理させるステップは、ビットベクトルをプロセッサに提供して、プロセッサに各仮想マシンに対応する各キューを処理させることを含むことができる。アレイをプロセッサに提供して、プロセッサに各仮想マシンに対応する各キューを処理させるステップは、アレイをプロセッサに提供して、プロセッサに複数の仮想マシンに対応する複数のキューを処理させることを含むことができる。
いくつかの実現例において、プロセッサに各仮想マシンに対応する各キューを処理させるステップは、プロセッサに割込みを送信することを含む。複数のドアベルページのうち、各仮想マシンからの要求を記憶するキューを特定する各ドアベルページに対するアクセスを複数の仮想マシンの各々に提供するステップは、複数のドアベルページのうち、各仮想マシンからの要求を記憶するリングバッファを特定する各ドアベルページに対するアクセスを複数の仮想マシンの各々に提供することを含む。複数のドアベルページのうち、各仮想マシンからの要求を記憶するキューを特定する各ドアベルページに対するアクセスを複数の仮想マシンの各々に提供するステップは、複数のドアベルページのうち、各仮想マシンからの要求を記憶するリングバッファを特定する各ドアベルページに対するアクセスを複数の仮想マシンの各々に提供することを含む。
いくつかの実現例において、複数のドアベルページを生成するステップは、複数のドアベルページの各ドアベルページに各アドレスを割り当てることを含み、複数のドアベルページのうち、各仮想マシンからの要求を記憶するキューを特定する各ドアベルページに対するアクセスを複数の仮想マシンの各々に提供するステップは、各仮想マシンに対応する各アドレスを複数の仮想マシンの各々に提供することを含む。複数のドアベルページを生成するステップは、追跡構造を生成し、追跡構造からの各インデックスを複数のドアベルページの各々に割り当てることを含み、複数のドアベルページのうち、各仮想マシンからの要求を記憶するキューを特定する各ドアベルページに対するアクセスを複数の仮想マシンの各々に提供するステップは、各仮想マシンに対応する各インデックスのアドレスを複数の仮想マシンの各々に提供することを含むことができる。複数のドアベルページを生成するステップは、複数のドアベルページの各々について、ページを生成するステップと、複数のドアベルページのうちの各ドアベルページが、対応する各ページに存在する非ゼロオフセットを複数のドアベルページの各々に割り当てるステップとを含むことができる。複数のドアベルページのうち、各仮想マシンからの要求を記憶するキューを特定する各ドアベルページに対するアクセスを複数の仮想マシンの各々に提供するステップは、各ページに対応するアドレスおよび各仮想マシンに対応する非ゼロオフセットを複数の仮想マシンの各々に送信することを含むことができる。
いくつかの実現例において、この方法は、第2複数のドアベルページを生成するステップと、複数のドアベルページのうち、各仮想マシンからの第2要求を記憶する第2キューを特定する各ドアベルページに対するアクセスを複数の仮想マシンのうち少なくとも一部の各々に提供するステップとを含み、第1種類の要求と第2種類の第2要求とは異なる。複数のドアベルページのうち1つの特定のドアベルページから、各キューが対応する各仮想マシンからの要求を記憶している通知を受信するステップは、記複数のドアベルページのうち1つの特定のドアベルページから、要求の種類を特定する通知を受信することを含むことができる。各仮想マシンに対応する各キューをプロセッサに処理させるステップは、要求の種類が第1種類を含むことを判断することと、第1種類の要求を処理するために割り当てられた特定のプロセッサを判断することと、各仮想マシンに対応する各キューを特定のプロセッサに処理させることを含むことができる。この方法は、装置の第1プロセッサ上で複数の仮想マシンを実行するステップを含むことができる。各仮想マシンに対応する各キューを特定のプロセッサに処理させるステップは、異なる第2プロセッサ上で動作しているハイパーバイザにメッセージを提供して、異なる第2プロセッサに各仮想マシンに対応する各キューを処理させることを含むことができる。異なる第2プロセッサ上で動作しているハイパーバイザにメッセージを提供することは、装置とは異なる第2装置上の異なる第2プロセッサ上で動作しているハイパーバイザにメッセージを提供することを含むことができる。
いくつかの実現例において、この方法は、アプリケーションのために、メモリ内のデータページの場所を特定するためのマッピングを作成するステップを含むことができる。移行プロセス中に第1装置上でアプリケーションの実行に応答して、第1装置によって、データページのうち、少なくとも1つのデータページ内の1つ以上のバイトを更新するステップは、少なくとも1つのデータページの各々をヘルパーに割り当てるステップと、少なくとも1つのページの各々に対応して、アプリケーションがヘルパー内の対応ページを特定するためのマッピングを更新するステップと、少なくとも1つのデータページ内の1つ以上のバイトを更新するステップとを含む。第1装置上でアプリケーションの実行は、第1装置上で仮想マシンを実行することを含むことができる。
いくつかの実現例において、この方法は、動作は、少なくとも1つのデータページ内の1つ以上のバイトの更新に応答して、第1装置によって、更新されたバイトを特定するデータを記憶するステップを含む。更新されたバイトのみを第1装置から第2装置にコピーするステップは、更新されたバイトを特定するデータを用いて更新されたバイトを特定することと、更新されたバイトを特定するデータを用いて更新されたバイトを特定することに応答して、更新されたバイトのみを第1装置から第2装置にコピーすることとを含むことができる。この方法は、第1装置によって、データページの少なくとも1つのデータページ内の1つ以上のバイトを受信するステップと、第1装置によって、1つ以上のバイトが移行されているアプリケーションのデータページのものであることを判断するステップとを含むことができる。更新されたバイトを特定するデータを記憶するステップは、1つ以上のバイトが移行されるアプリケーションのデータページのものであることの判断に応答して、更新されたバイトを特定するデータを記憶することを含むことができる。この方法は、アプリケーションから、メモリにアクセスする要求を受信するステップと、メモリにアクセスする要求が書き込み要求であることを判断するステップとを含むことができる。更新されたバイトを特定するデータを記憶するステップは、メモリにアクセスする要求が書き込み要求であることの判断に応答して、更新されたバイトを特定するデータを記憶することを含むことができる。この方法は、アプリケーションのデータページを第1装置のメモリに格納することを含み、第1装置上でアプリケーションを実行するステップを含むことができる。
本明細書に記載された主題は、特定の実施形態に実現することができ、以下の利点のうち1つ以上をもたらすことができる。いくつかの実現例において、ドアベルページを使用しないシステムおよび方法に比べて、以下に説明するシステムおよび方法は、ハイパーバイザまたはヘルパーアプリケーションまたは装置による加速によって、より迅速に例えば1マイクロ秒以内に、より少ないリソースで、またはその両方で、仮想マシンがデータ要求をキューに入れる時間を判断することができる。いくつかの実現例において、以下に説明するシステムおよび方法は、ドアベルページが呼び出されて且つ対応するキュー内の要求が例えば非同期に処理されている時に、仮想マシンを継続的に実行することができる。
いくつかの実現例において、以下に説明するシステムおよび方法は、ビットベクトルをプロセッサに提供することによって、ハイパーバイザ、プロセッサ、またはその両方がサービスを必要とする仮想マシンを迅速に判断することができる。例えば、システムは、ドアベルポーリングエージェントとは異なり、ドアベルページが仮想マシンによって呼び出された時に、より迅速に知ることができ、数千のインスタンス化されたドアベルページを含む時にも応答することができる。いくつかの実現例において、ドアベルページが周辺機器相互接続エクスプレス(PCIe)スペースに存在する場合、装置は、例えば、仮想マシンがソフトウェアによって純粋にエミュレートされた装置のドアベルにアクセスするときに必要とされる、少なくとも3000個の処理サイクルまたは1マイクロ秒を消耗する従来のトラップエミュレートトラップを回避する。いくつかの実現例において、システムは、第1プロセッサ上で動作しており、サービスを必要とするキューを有する仮想マシンに関する通知を、第2プロセッサに提供することによって、第1プロセッサ上で動作している間にキューの処理により仮想マシンからサイクルの盗用を防止し、第1プロセッサのキャッシュに対する汚染を防止し、または第2プロセッサによるキューの処理、例えば、複数の仮想マシンまたはこれらの2つ以上の仮想マシンの組み合わせからの同一種類または類似種類の要求を含むキューの処理を可能にする。
いくつかの実現例において、以下に説明するシステムおよび方法は、メモリページを移行する他のシステムおよび方法に比べて、例えばクラウド環境においてアプリケーションを装置間に移行する時に、ページよりも小さいダーティバイトまたはバイトブロックのみをコピーすることによって、アプリケーションのブラックアウト時間を短縮することができる。
本明細書に記載された主題の1つ以上の実施形態の詳細は、添付の図面および以下の説明に記載されている。主題の他の特徴、態様および利点は、以下の説明、図面および特許請求の範囲から明らかになるであろう。
装置がドアベルページを用いて、仮想マシンのキューがサービスを必要とする時間を判断するための例示的な環境を示すブロック図である。 プロセッサに仮想マシンのキューを処理させるプロセスを示すフローチャートである。 特定のプロセッサにキューを処理させるプロセスを示すフローチャートである。 装置A 402aがアプリケーションを別の装置Bに移行させるための例示的な環境を示すブロック図である。 アプリケーションを第1装置から第2装置に移行させるプロセスを示すフローチャートである。 本明細書に記載のコンピュータで実行される方法に関連して使用することができるコンピュータシステムを示すブロック図である。
詳細な説明
概要
様々な図面において、同様の参照符号は、同様の要素を示す。
装置上で動作しているアプリケーション、例えばハイパーバイザまたはハイパーバイザヘルパーは、多くのドアベルページ、例えば、1024個以上のドアベルページを作成することができる。ドアベルページは、周辺機器相互接続エクスプレス(PCIe)ベースアドレスレジスタ(BAR)スペース内の入出力(IO)またはメモリマップIO(MMIO)のいずれかに存在してもよい。アプリケーションは、ドアベルページを用いて、装置上で動作している仮想マシンの1つ以上のキューがサービスを必要とする時間を判断する。仮想マシンがドアベルページを書き込む時に、アプリケーションは、例えば、割り当てられたドアベルページを設定することによって、保留中のドアベルページリストおよびドアベルページに書き込まれた値をハイパーバイザに通知することができる。通知を受信すると、ハイパーバイザは、保留中のドアベルページリストまたは対応するキューをプロセッサに提供して、キューに格納されたデータ要求をプロセッサに処理させることができる。いくつかの例において、アプリケーションは、装置に設けられたコンポーネント上で動作することができ、ドアベルページに使用されたメモリを含むことができる。
各ドアベルページは、構成可能なセマンティクスを含むことができる。例えば、NIC−100型ドアベルページは、32ビットのリングバッファインデックス、例えば、メモリに格納され、ハイパーバイザに提供されるキューを含むことができる。いくつかの例において、NVMeキューは、対応するキューを処理しなければならず、対応するキュー、例えばリングバッファインデックスが別個のメモリに存在することを示す指示を含むことができる。いくつかの例において、virtio-netキューは、ドアベルページが呼び出された時に、特定のキュー番号と共に書き込まれるIOスペースレジスタを含むことができる。アプリケーション、例えばハイパーバイザヘルパーは、各ドアベルページのセマンティックをハイパーバイザに提供するようにプログラムされてもよい。
いくつかの例において、アプリケーションは、呼び出されたドアベルページを用いて、サービスを必要とする全てのキューを示すビットベクトル集合を生成することができる。アプリケーションがビットベクトルをハイパーバイザに提供することによって、ハイパーバイザまたはプロセッサは、キューに入れられた全てのドアベルページの値を走査する必要なく、サービスを必要とする全てのキューを迅速に特定することができる。
いくつかの実現例において、一部のドアベルページは、アプリケーションまたはハイパーバイザが例えば割込みコントローラと同様に通知遅延を適用することを可能にする設定を含むことができる。例えば、ハイパーバイザが特定のドアベルページが呼び出されたという通知を受け取った後、特定のドアベルページは、対応するキュー内の追加の要求をアプリケーションに知らせないことがある。換言すれば、アプリケーションまたはハイパーバイザが特定のドアベルページを再有効化するまで、すなわち、対応するキューを処理した後、特定のドアベルページは、セルフマスクする。いくつかの例において、特定のドアベルページは、例えば、対応するキューがサービスを必要とする通知をハイパーバイザに提供する頻度を指定する頻度制限設定を含むことができる。
いくつかの実現例において、各ドアベルページは、個別の4KBページを占めてもよく、特定のキュー構造がゼロオフセットをサポートしない場合、必要に応じて非ゼロオフセットをもってそのページ内に存在してもよい。アプリケーションは、例えば、標準的なx86 MMUおよびEPTページングを用いて、4KBページという粒度で、キューから特定された仮想マシンのメモリアクセスを個々のドアベルページにマッピングすることによって、各仮想マシンが自身に割り当てられたドアベルページのみにアクセスするように各仮想マシンを制限することができる。
いくつかの実現例において、ヘルパーアプリケーションは、別のアプリケーションをライブ移行している間に、トラフィックをリダイレクトすることができる。例えば、ヘルパーアプリケーションは、ページミラーリングを行うことによって、バイトまたはマルチバイトレベルで、他のアプリケーションを第1装置から第2装置により細かく移行することができる。例えば、ページを第2装置に移行した後、ページ内の特定のバイトが更新された場合、ヘルパーアプリケーションは、特定のバイトを含む2つのバイトデータブロックを第2装置に移行する。これによって、ページの全体を第2装置に移行する必要はない。
いくつかの実現例において、ハイパーバイザヘルパーまたはヘルパーアプリケーションは、装置上で動作しているアプリケーションである。いくつかの実現例において、ハイパーバイザヘルパーまたはヘルパーアプリケーションは、装置に設けられたハードウェア要素、例えば装置に一体化されたまたは接続されたハードウェア要素である。
キューの処理
図1は、装置102がドアベルページを用いて仮想マシンのキューがサービスを必要する時間を判断するための例示的な環境100を示すブロック図である。装置102は、1つ以上のプロセッサA 104aおよびプロセッサB 104bを含む。一方のプロセッサA 104aは、ハイパーバイザ106を実行し、プロセッサA 104aおよびプロセッサB 104bの一方または両方は、1つ以上の仮想マシン108a〜108cを実行する。
仮想マシン108a〜108cは、データの読み取り要求または書き込み要求のいずれかを発行する場合、対応するキュー110にエントリを入れる。例えば、仮想マシンA 108aは、読み取り要求を第1キューA1に入れることができ、書き込み要求を第2キューA2に入れることができる。いくつかの例において、仮想マシンは、全ての要求を単一のキューに、例えば仮想マシンB 108bに対応するキューB1に入れることができる。キュー110の各々は、リングバッファまたは任意の他の適切な種類のキューであってもよい。
データ要求をキュー110に入れた後、仮想マシン108a〜108cは、例えば対応するドアベルページ112を呼び出すための通知値を対応するドアベルページ112に書き込む。例えば、仮想マシンA108aは、キューA1に読み取り要求を入れると、キューA1に特有なドアベルページA1に通知値を書き込むことができる。いくつかの例において、1つ以上の仮想マシン108a〜108cは、データ要求をキュー110に入れる前に、対応するドアベルページ112に通知値を書き込むことができる。
装置102は、ドアベルページ112に通知値の書き込みに応答して、対応するキューがサービスを必要することをプロセッサA 104a〜プロセッサD 104dに通知する。例えば、装置102は、対応するビットベクトルA 114a〜ビットベクトルD 114bを更新し、更新されたビットベクトルをプロセッサ104a〜104dのうち1つのプロセッサに提供することができる。ビットベクトルA 114aは、キューA1、B1、およびC1に対応する通知ビット値を含むことができる。装置102は、ドアベルページA1、B1またはC1のいずれかに対応する通知を受信すると、ビットベクトルA 114aを更新して、対応するキューがサービスを必要することを示す。例えば、ビットベクトルA 114aの第1位置の値は、キューA1がサービスを必要とするか否かを示し、ビットベクトルA 114aの第2位置の値は、キューB1がサービスを必要とするか否かを示し、第3の位置ビットベクトルAの114aは、キューC1がサービスを必要とするか否かを示す。同様に、ビットベクトルB 114bの各位置の値は、キューA2およびC2に対応する。
いくつかの実現例において、ビットベクトルA 114aの値「1」は、対応するキューがサービスを必要とすることを示し、値「0」は、対応するキューがサービスを必要としないことを示す。他の実現例において、値「0」は、対応するキューがサービスを必要とすることを示し、値「1」は、対応するキューがサービスを必要としないことを示す。
いくつかの実現例において、装置102は、サービスを必要とするキューを有する仮想マシンを実行するプロセッサコアとは異なるプロセッサコア上で動作しているハイパーバイザに割込みを送信する。例えば、プロセッサA 104aが仮想マシンB 108bを実行し、キューB1がサービスを必要とする場合、装置B 102は、キューB1がサービスを必要とすることをプロセッサB 104bまたはプロセッサD 104dに通知することができる。装置102は、異なるプロセッサコア上で動作しているハイパーバイザまたは別のアプリケーションに割込みを送信することによって、キューB1がサービスを必要とすることをハイパーバイザに通知することができる。
いくつかの実現例において、装置102は、装置102に通知したドアベルページからの通知値をバッファすることができる。例えば、装置102は、ビットベクトルをメモリに格納し、オンデマンドまたはランダムで、ビットベクトルからの値、例えばビットベクトルのコピーを、ビットベクトルによって特定されたキューを処理するためのプロセッサにまたはこのビットベクトルを使用しているアプリケーションに提供することができる。いくつかの例において、ハイパーバイザヘルパーがビットベクトルを管理しており、ハイパーバイザ106が、既に処理されており、サービスを必要としないキューに対応するビットベクトルの1つ以上のビットを消去したい場合、ハイパーバイザ106は、消去されるビットを特定するメッセージをハイパーバイザヘルパーに送信することができる。したがって、ハイパーバイザヘルパーは、特定されたビットを消去して、このビットベクトルを最新ものに、すなわち、ビットベクトルのマスタコピーを最新ものに維持することができる。
装置102は、装置に通知したドアベルページ112に対応するビットベクトル114a〜bを対応するキューを処理するプロセッサ104a〜dに提供することができる。例えば、装置102がキューB1を処理する要求に応答してビットベクトルA 114aを更新した場合、装置102は、このビットベクトルA 114aをプロセッサB 104bに提供する。プロセッサB 104bは、ビットベクトルA 114aを用いて、例えばビットベクトル114aの各位置に対応する値を用いて、キューB1がサービスを必要とすること、潜在的にキューA1、キューC1、またはその両方がサービスを必要とすることを判断する。その後、プロセッサB 104bは、ビットベクトルA 114aに特定された、サービスを必要とするキューを処理することができる。例えば、プロセッサB 104bは、キューA1内の第1エントリを利用して、第1エントリによって要求されたデータを決定し、仮想マシンA108aに使用される要求データを取り出す。
各々のドアベルページ112は、1つ以上の設定を含むことができる。例えば、ドアベルページ112は、各ドアベルページを呼び出す時に更新すべきビットベクトル内の所望のビット位置を示すことができる。
いくつかの例において、ドアベルページ112は、通知の統合を実行すべきか否かを示す通知統合設定を含むことができる。例えば、通知統合設定は、イベントが発生したことを示すブール値であってもよい。ブール値が消去されるまで、装置102は、各々のドアベルページに対する更なる通知の発行を禁止すべきである。例えば、装置102は、例えば、ブール値を「真」に設定することによって、対応するキュー内の全てのエントリが処理されるまで更なる通知の発行を禁止することができ、装置102は、ブール値を「偽」に設定することによって、対応するキューに追加されたエントリを通知することができる。
装置102が複数のビットベクトルを含む実現例において、各ドアベルページ112は、ドアベルページに対応する特定のビットベクトルを示すことができる。例えば、装置102は、仮想マシン108a〜108cからの要求を処理するための各プロセッサまたは各プロセッサコアに対応する1つのビットベクトルを含むことができ、各ドアベルページは、ドアベルページを呼び出す時に更新すべきビットベクトルを示すことができる。これによって、サービスを必要とするキューは、対応するプロセッサまたはプロセッサコアに通知される。プロセッサおよびプロセッサコアの一部、例えばプロセッサA104aおよびプロセッサB 104bは、装置102に含まれてもよい。プロセッサおよびプロセッサコアの一部、例えばプロセッサC104cおよびプロセッサD 104dは、1つ以上の他の装置に含まれてもよい。要求を処理するプロセッサまたはプロセッサコアは、要求のデータを格納するメモリを備える特定の装置に含まれてもよい。
いくつかの例において、装置102は、第1ドアベルページA1を介して、仮想マシンA 108aの第1キューA1がサービスを必要とする通知を受信し、ビットベクトルA 114a、例えばビットベクトルのコピーをプロセッサB 104bに提供する。装置102は、第2ドアベルページA2を介して、仮想マシンA 108aの第2キューA2がサービスを必要とする通知を受信すると、通知に応じてビットベクトルを更新した後、ビットベクトルB 114bのコピーを、例えば別の装置に設けられたプロセッサC 104cに提供する。
いくつかの実現例において、各ドアベルページ112は、対応するキュー110がサービスを必要とし、対応するドアベルページが呼び出された場合、装置102が行う行動を示す書き込み設定時挙動を含むことができる。例えば、装置102は、ドアベルページに対応する設定を用いて、対応するキュー内の新規エントリの数、対応するキュー内のエントリの総数、対応するキュー内の非新規エントリ(キューを更新する前、キューに存在したもの)の数、またはこれらの2つ以上の組み合わせを示す値を更新すべきか否かを判断することができる。いくつかの例において、ドアベルページは、対応するキュー内の最後のエントリのインデックスを含むことができる。例えば、ドアベルページは、対応するキューがエントリを有することを示す値を含むことができ、装置102は、値を監視して値の変化時間を判断するが、ドアベルページが呼び出された場合、特定の値が、対応するキューがサービスを必要とすることを判断するものであるか否かを監視しない。
いくつかの実現例において、ハイパーバイザ106、ハイパーバイザヘルパー118アプリケーションまたは装置、または別のアプリケーションまたは装置は、ドアベルページ112に通知値の書き込みに応答してもよく、または上述した他のステップの一部を実行してもよい。例えば、ハイパーバイザヘルパー118は、サービスを必要とするキューを有する仮想マシンを実行するプロセッサコアとは異なるプロセッサコア上で動作しているハイパーバイザに割込みを送信することができる。ハイパーバイザ106、ハイパーバイザヘルパー118、または他のアプリケーションまたは装置は、ドアベルページ112を格納するメモリを含んでもよい。
装置102は、ネットワーク116を介してデータを送受信することができるパーソナルコンピュータ、モバイル通信装置、サーバおよび他の装置を含むことができる。ネットワーク116、例えば、ローカルエリアネットワーク(LAN)、広域ネットワーク(WAN)、インターネットまたはそれらの組み合わせは、装置102と、プロセッサC 104cおよびプロセッサD 104dを含む1つ以上の他の装置とを接続する。
キュー処理プロセスのフローチャートの一例
図2は、プロセッサに仮想マシンのキューを処理させるためのプロセス200を示すフローチャートである。プロセス200は、環境100内の装置102によって使用され得る。装置102は、例えば、ハイパーバイザ、ハイパーバイザヘルパー、別のアプリケーション、別の装置、またはこれらの2つ以上の組み合わせを実行することができる。いくつかの例において、これらのアプリケーションのうち1つは、プロセス200の特定のステップを行うことができ、装置または別のアプリケーションは、プロセス200の他の特定のステップを行うことができる。
第1装置は、複数の仮想マシンを実行する(202)。例えば、第1装置は、複数の仮想マシンを実行するサーバまたは別の装置であってもよい。第1装置は、ハイパーバイザアプリケーションを用いて、複数の仮想マシンのうち1つ以上を実行することができる。
第1装置は、複数のドアベルページを生成する(204)。第1装置は、各々の仮想マシンに対応するドアベルページまたは仮想マシンの各キューに対応するドアベルページを生成することができる。いくつかの例において、第1装置は、仮想マシンによって使用されるキューの数より多くのドアベルページを生成し、新しい仮想マシンの実行または新しいキューの要求に応じて、これらのドアベルページを仮想マシンのキューに動的に関連付ける。例えば、ハイパーバイザヘルパーは、複数のドアベルページを作成することができ、または複数のドアベルページを作成するようにハイパーバイザに要請することができる。
第1装置は、ドアベルページを生成する時に、アドレス、例えばドアベルページのアドレスを各ドアベルページに割り当てることができる。いくつかの実現例において、第1装置は、全てのドアベルページに追跡構造を生成し、追跡構造からの各インデックスをドアベルページの各々に割り当てることができる。いくつかの例において、ハイパーバイザは、アドレスを各ドアベルページに割り当て、そのアドレスをハイパーバイザヘルパーに提供することができる。ハイパーバイザヘルパーは、例えば、ハイパーバイザヘルパー内のトラッキング構造を用いて、ドアベルページを監視することができる。
第1装置は、複数のドアベルページの各々について、当該ドアベルページに一意に対応し且つ当該ドアベルページによって特定されたキューを一意に特定するエントリを含むアレイを生成する(206)。例えば、第1装置、例えばハイパーバイザヘルパーは、複数のビットベクトルを生成する。各ビットベクトルは、キューを処理する各プロセッサに使用される。各ドアベルページは、特定のビットベクトル内の1つのエントリのみに対応し、他のビットベクトル内のエントリに対応しない。ビットベクトルを使用するプロセッサは、その1つのエントリを用いて、対応するキューを判断し、対応するキューを処理することができる。
第1装置は、複数のドアベルページのうち、各仮想マシンからの要求を記憶するキューを特定する各ドアベルページに対するアクセスを複数の仮想マシンの各々に提供する(208)。例えば、第1装置は、各ドアベルページのアドレス、例えば各ドアベルページに対応するインデックスのアドレスを各仮想マシンに提供する。いくつかの例において、ドアベルページは、対応するキューのヘッドノードであってもよく、第1装置は、ヘッドノードのアドレスを各仮想マシンに提供してもよい。いくつかの例において、例えばキューがリングバッファである場合、ドアベルページは、各仮想マシンのために、サービス要求を入れるリングバッファを特定することができる。ハイパーバイザアプリケーションは、ハイパーバイザヘルパーから、各ドアベルページに対応するアドレスを受信し、このアドレスを対応する仮想マシンに提供することができる。
第1装置は、各キューの更新を受信する(210)。例えば、各仮想マシンは、サービス、例えばデータを要請する要求を対応するキューに入れる。
第1装置は、複数のドアベルページのうち1つの特定のドアベルページから、各キューが対応する各仮想マシンからの要求を記憶している通知を受信する(212)。例えば、各仮想マシンは、例えば、ドアベルページの書き込み設定時挙動を用いて、ドアベルページの値を更新する。これに応答して、ドアベルページは、値が変更されたことを第1装置、例えばハイパーバイザヘルパーに通知する。
必要に応じて、第1装置は、各キューを特定するアレイ内の各エントリを更新する(214)。例えば、ハイパーバイザヘルパーは、例えば、ビットベクトル内の各エントリを、対応するキューがサービスを必要とすることを示す特定の値に更新する。各キューがサービスを必要としないことを「0」で示し、各キューがサービスを必要とすることを「1」で示す場合、特定の値は、「1」であってもよい。いくつかの例において、特定の値は、「0」または任意の他の適切な値であってもよい。いくつかの実現例において、ハイパーバイザアプリケーションは、各エントリを更新する。
第1装置は、各仮想マシンに対応する各キューをプロセッサに処理させる(216)。いくつかの例において、第1装置、例えばハイパーバイザヘルパーは、各キューの識別子をプロセッサに提供する。例えば、第1装置、すなわち、ハイパーバイザまたはハイパーバイザヘルパーは、ビットベクトルをプロセッサに提供する。ビットベクトルの受信に応答して、プロセッサは、例えば、ビットベクトルを用いて、ビットベクトルに関連付けられたキューのうち、サービスを必要とするキューを判断し、これらのキューを処理する。いくつかの例において、第1装置は、例えば、プロセッサがキューを処理していない時に、プロセッサに割込みを提供することによって、プロセッサに他の作業の実行を停止させる。いくつかの実現例において、第2装置は、プロセッサを含むことができる。
第1装置は、プロセッサが要求を処理している間に、各仮想マシンの実行を継続させる(218)。例えば、第1装置は、各仮想マシンを実行させ、要求を並列に処理するシングルプロセッサを含むことができる。いくつかの例において、第1プロセッサは、各仮想マシンを実行すると共に、第2装置または第2プロセッサは、要求を処理する。
上述したプロセス200におけるステップの順序は、例示に過ぎず、プロセッサに、異なる順序で仮想マシンのキューを処理させることができる。例えば、第1装置は、先ずドアベルページを生成し、その後、仮想マシンを実行することができる。
いくつかの実現例において、プロセス200は、より多くのステップまたはより少ないステップを含むことができ、一部のステップは、複数のステップに分割することができる。例えば、第1装置は、アレイを生成しなくてもよい。いくつかの例において、第1装置は、ステップ202〜206を行わず、ステップ208〜218を行うことができる。
図3は、特定のプロセッサにキューを処理させるためのプロセス300を示すフローチャートである。例えば、プロセス300は、環境100内の装置102によって使用され得る。装置102は、プロセス300の1つ以上のステップを行うためのハイパーバイザまたはハイパーバイザヘルパーアプリケーション、プロセス300の1つ以上のステップを行うためのハイパーバイザヘルパー装置、またはこれらの2つ以上の組み合わせを実行することができる。
ハイパーバイザは、複数のドアベルページのうち1つの特定のドアベルページから、要求の種類を特定する通知を受信する(302)。例えば、各ドアベルページは、要求の種類を特定する構成設定を含むことができる。要求の種類は、読み取り要求、書き込み要求、特定のメモリからの読み取り要求、特定のメモリへの書き込み要求、または別の種類の要求であってもよい。いくつかの実現例において、ハイパーバイザは、書き込み設定時挙動を用いて、要求の種類を判断することができる。
ハイパーバイザは、要求の種類が第1種類を含むことを判断する(304)。例えば、装置上で動作しているハイパーバイザまたは別のアプリケーションは、複数の異なる種類の要求から、要求の特定の種類、例えば第1種類を判断する。
ハイパーバイザは、第1種類の要求を処理するために割り当てられる特定のプロセッサを決定する(306)。例えば、ハイパーバイザは、第1プロセッサ上で動作することができ、同一装置または別の装置上の第2プロセッサが第1種類の要求を処理すべきであることを判断することができる。
ハイパーバイザは、各仮想マシンに対応する各キューを特定のプロセッサに処理させる(308)。例えば、ハイパーバイザは、サービスを必要とするキューを示すメッセージを特定のプロセッサに提供する。いくつかの例において、ハイパーバイザは、サービスを必要とするキューを示すビットベクトルを特定のプロセッサに提供することができる。
アプリケーションの移行
いくつかの実現例において、アプリケーション、例えば、ハイパーバイザまたはヘルパーアプリケーションまたは装置は、実行中の仮想マシンを1つの装置から別の装置に移行することを容易にすることができる。例えば、アプリケーションは、第1装置上で仮想マシンを実行している間に、サービスを必要とする仮想マシンのキューをプロセッサに通知し、仮想マシンを第1装置から第2装置に移行する時のダーティバイトを監視する。仮想マシンのキューおよびキューの処理プロセスフローは、前の段落に説明されている。以下で説明するように、これらの構造およびプロセスフローに基づいて、アプリケーションを移行するためのヘルパー406を実装することができる。いくつかの例において、実行中の仮想マシンを第1装置から第2装置に移行する時に、アプリケーションは、例えば、仮想マシンに対応するキュー内のエントリに基づいて、メモリに書き込むべきバイトをプロセッサに通知し、書き込まれたバイトを示すデータを記憶することができる。これによって、以前にこれらのバイトを含むページを更新せず第2装置に移行した場合、これらのバイトを含むページではなく、これらのバイトが第2装置に移行される。いくつかの実現例において、異なるアプリケーションは、実行中の仮想マシンを1つの装置から別の装置に移行することを容易にし、サービスを必要とする仮想マシンのキューをプロセッサに通知することができる。
図4は、装置A 402aがアプリケーション404を別の装置B 402bに移行するための例示的な環境400を示すブロック図である。例えば、装置A 402aは、仮想マシンなどのアプリケーション404を実行することができる。装置A 402aは、時間Tで、アプリケーション404を装置B 402bに移行することを決定することができる。装置A 402aは、別の装置から、アプリケーション404を移行すべきであることを示すメッセージを受信することに応答して、決定を行うことができる。装置A 402aは、装置A 402a上で動作しているアプリケーション404または別のアプリケーションの性能に応じて、決定を行うことができる。例えば、アプリケーション404または他のアプリケーションが最小性能要件を下回って実行している場合、装置A 402aは、アプリケーション404を装置B 402bに移行することを決定することができる。
装置A 402aは、アプリケーション404の実行に必要なデータを装置B 402bにコピーする。例えば、装置A 402aは、メモリA 408aにアクセスし、アプリケーション404に使用される1つ以上のページA 410aおよびB 410bのデータをアプリケーションA 408aから装置B 402bにコピーすることができる。装置B 402bは、ページA 410aおよびB 410bのデータを装置B 402bに設けられたメモリB 408bに格納することができる。
装置A 402aは、時間Tで、例えばページマッピングにおいて、メモリA 408a内のページをヘルパー406にマッピングする。ヘルパー406は、アプリケーションまたは装置、例えば装置A 402aに設けられた要素であってもよい。まず、例えばアプリケーション404の実行中に、装置A 402aは、ページA 410aおよびB 410bをアプリケーション404にマッピングする。ページA 410aおよびB 410bを装置B 402bにコピーするときに、またはページA 410aおよびB 410bを装置B 402bにコピーする直前に、装置402aは、ページA 410aおよびB 410bをヘルパー406にマッピングするようにページマッピングを変更する。これによって、移行プロセス中に、ヘルパー406は、ページA 410aおよびB 410b内の粒状ダーティを監視することができる。いくつかの例において、ヘルパー406は、ページマッピングを更新するように、ハイパーバイザに通知する。いくつかの実現例において、ヘルパー406は、ハイパーバイザヘルパーまたはハイパーバイザである。
装置A 402aは、アプリケーション404の実行に必要なデータを装置B 402bにコピーすると共に、アプリケーション404を実行し続ける。アプリケーション404の実行中に、アプリケーション404は、時間Tで、ページA 410aに書き込まれるバイト数を決定する。
装置402aは、時間Tで、アプリケーションに割り当てられるページを示すメモリマッピングを用いて、ページA 410aをヘルパー406にマッピングすることを決定する。例えば、ヘルパー406は、ページA 410aを編集することができるが、アプリケーション404は、ページA 410aを編集することができない。装置402aは、アプリケーション404からバイトを受信し、ページA 410aに書き込まれるためのバイトをヘルパー406に提供する。
ヘルパー406は、時間Tで、これらのバイトをメモリA 408a内のページA 410aに書き込み、時間Tで、ページページA 410aに書き込まれたバイトを示すダーティマッピング412、すなわち、ページのメタデータを更新する。TおよびTのタイミングは、任意の順序であってもよい。例えば、ヘルパー406は、ダーティマッピング412を更新した後、バイトをページA 410aに書き込むことができ、または両方を同時に行うことができ、またはバイトを書き込んだ後、ダーティマッピング412を更新することができる。
いくつかの実現例において、ヘルパー406は、バイトを書き込むために、新しいページ、例えばメモリA 408a内の新しいページを割り当てる。例えば、ヘルパー406は、バッファプールから新しいページを割り当て、この新しいページにバイトを書き込み、記憶することができる。次に、ヘルパー406は、ページマッピングを更新して、ページA 410aを読み取るおよび書き込むためのアクセス要求をページA 410aではなく、新たに割り当てられたページにマッピングする。いくつかの例において、ヘルパー406は、ページマッピングを更新するように、ハイパーバイザに通知する。ヘルパー406による新しいページの割り当てによって、装置A 402aは、例えば新たなバイトの書き込みにより中断されることなく、ページA 410aおよびB 410bを装置A 402aから装置B 402bにコピーし続けることができる。
アプリケーション404が読み取り動作に必要なデータを要求すると、ヘルパー406は、読み取り要求の通知を受信する。ヘルパー406は、ページマッピングを用いて、要求されたデータを決定し、要求されたデータをアプリケーション404に提供する。例えば、ヘルパー406は、既知の定値を返すことができる。例えば、このページは、共有コピーオンライト(Copy-On-Write)ページからの全ゼロ値を含む。装置402aは、書き込みイベントを受信するまで、ページの1つのコピーのみを記憶する。書き込みイベントを受信すると、装置402aは、ページのコピーを作成し、新しいバイトでコピーを更新する、または圧縮データを解凍し、解凍されたデータをアプリケーション404に提供する。読み取り要求の間に、ページA 410aおよびB 410bが更新されていない、すなわち、新しいバイトで書き込まれていない場合に、ヘルパー406は、ページA 410aおよびB 410bのいずれか1つにアクセスすることができる。読み取り要求の間に、例えば、対応するページが更新されたバイトを含む場合に、ヘルパー406は、1つ以上の新たに割り当てられたページにアクセスすることができる。
装置A 402aは、時間Tで、アプリケーション404の実行を停止する。例えば、装置A 402aは、ダーティバイトを除き、アプリケーション404の実行に必要なデータを装置B 402bにコピーすることを完了してから、アプリケーション404の実行を停止する。装置A 402aは、コピーする必要のあるデータの一部を書き込まない場合、例えばそのデータの一部がダーティになった場合、アプリケーション404の実行に必要なデータを装置B 402bに続けてコピーできないと判断したことに応答して、アプリケーション404の実行を停止することができる。
装置A 402aまたはヘルパー406は、時間Tで、アプリケーション404のダーティバイトを装置B 402bにコピーする。対応するページのコピーが既に装置B 402bに提供されたため、ヘルパー406は、例えば、ダーティマッピング412を用いて、更新されたバイトを判断し、これらのバイトを装置B 402bに提供する。
装置B 402bは、ダーティバイトを用いて、メモリB 408b内のページのコピーを更新する。装置B 402bは、時間Tで、アプリケーション404bの実行を開始する。
ダーティバイトを装置B 402bに移行した後、装置A 402aは、メモリA 408aから、アプリケーションA 404aの全てのデータを消去することができる。例えば、装置A 402aは、別のアプリケーションの実行に使用されていないアプリケーション404のデータを判断し、そのデータをメモリA 408aから消去することができる。
装置402aおよび402bは、ネットワークを介してデータを送受信することができるパーソナルコンピュータ、モバイル通信装置、サーバ、および他の装置を含むことができる。ネットワーク、例えば、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、インターネット、またはそれらの組み合わせは、装置402a、装置402bおよび潜在的に他の装置(図示せず)を接続する。
いくつかの実現例において、ヘルパー406は、ダーティマッピング412内の複数のダーティバイトデータブロックを含む。例えば、ヘルパー406は、例えば、アプリケーション404の1つのページに各々書き込まれた2つまたは4つのダーティバイトブロックの粒度を決定し、それに応じてダーティマッピング412を更新することができる。
アプリケーション移行プロセスフローの例
図5は、アプリケーションを第1装置から第2装置に移行するためのプロセス500を示すフローチャートである。例えば、プロセス500は、環境400内の装置A 402aによって使用されることができる。
第1装置は、アプリケーションに必要なデータページを第1装置のメモリに格納することを含み、アプリケーションを実行する(502)。データページは、アプリケーションの命令、アプリケーションの命令を実行するためのデータ、またはその両方を含むことができる。アプリケーションは、仮想マシンであってもよく、または1つの装置から別の装置に移行することができる別の種類のアプリケーションであってもよい。
第1装置は、アプリケーションのために、メモリ内のデータページの場所を特定するためのマッピングを作成する(504)。例えば、第1装置は、アプリケーションに所有されているデータページを示すページマッピングを作成する。
第1装置は、第1装置上でアプリケーションの実行を継続させながら、データページを第1装置から第2装置にコピーすることによって、アプリケーションを第1装置から第2装置に移行するための移行プロセスを開始する(506)。例えば、第1装置は、第1装置をシャットダウンまたは再起動する必要があると判断し、移行プロセスを開始する。
第1装置は、少なくとも1つのデータページの各々をヘルパーに割り当てる(508)。例えば、第1装置は、全てのデータページをヘルパーアプリケーションまたは装置に割り当てる。いくつかの例において、第1装置は、一部のデータページ、例えば、命令のみを含むページではなく、命令を実行できるページをヘルパーに割り当てることができる。いくつかの例において、第1装置は、アプリケーションがページに書き込もうとする時に、ページをヘルパーに動的に割り当てることができる。第1装置は、例えば、ヘルパーがこのページを所有していることを示すように、ページマッピングを更新することによってページをヘルパーに割り当てることができる。
第1装置は、アプリケーションから、メモリにアクセスする要求を受信する(510)。この要求は、読み取り要求であってもよく、書き込み要求であってもよい。第1装置は、要求の種類、すなわち、要求が読み取り要求であるかまたは書き込み要求であるかを判断することができる。
第1装置は、メモリにアクセスする要求が書き込み要求であることを判断する(512)。第1装置は、少なくとも1つのデータページ内の1つ以上のバイトを更新する(514)。例えば、ヘルパーは、アプリケーションからバイトを受信し、メモリ内のバイトを更新する。ヘルパーは、バイトを書き込むページのコピーを作成し、ページコピー、すなわち、新しく割り当てられたページ内のバイトを更新し、このページコピーを使用して、更なる読み取り要求および書き込み要求を処理することができる。
第1装置は、更新されたバイトを特定するデータを記憶する(516)。例えば、ヘルパーは、バイトを更新したことを示すデータを記憶する。データは、バイトを格納する特定のページおよびページ内のバイトの特定位置を特定することができる。例えば、ヘルパーは、ダーティマッピングを更新することによって、バイトが上書きされたことを示すことができる。ダーティマッピングは、個々のバイトまたはバイト群、例えば、64バイトのブロックに適用することができる。単一のページに含まれるバイトの数よりも小さい任意の適切な粒度を使用することができる。
いくつかの実現例において、更新されたバイトを特定するデータは、バイトを上書きするアドレスのリストであってもよい。例えば、ダーティマッピングは、バイトを上書きする時のログであってもよい。このアドレスリストは、バイトを書き込む時間順で排列されたアドレスを含んでもよい。いくつかの例において、このアドレスリストは、数字順で排列されたアドレスを含んでもよい。
いくつかの例において、更新されたバイトを特定するデータは、設定可能な粒度を有するビットベクトルであってもよい。例えば、ビットベクトルの各ビットは、64バイトのメモリを表すことができる。1つのバイトが上書きされると、ビットベクトルの対応するエントリが更新される。ビットベクトルは、例えば、特定のアプリケーションのゲストメモリ内の全てのバイトに対応するエントリを含むことができる。
いくつかの実現例において、第1装置は、拡張ページテーブル(EPT)データ形式に従うシャドウ構造を使用することができる。例えば、第1装置は、ビットベクトル内の各ビットが64バイトのメモリを表すように、EPTリーフノードに4KBを割り当て、メモリ内の次の4KBを、EPTリーフノードによって特定されたメモリ場所に対応するダーティバイトを表すビットベクトルに割り当てることができる。
第1装置は、第1装置上でアプリケーションの実行を停止する(518)。例えば、第1装置は、アプリケーションの実行を停止し、アプリケーションに対する任意の要求を第2装置に転送する。これによって、第2装置上でアプリケーションを実行する時に、第2装置は、これらの要求をアプリケーションに提供することができる。
第1装置は、更新されたバイトを特定するデータを用いて、更新されたバイトを特定する(520)。ヘルパーは、ダーティマッピングを用いて、更新されたバイトを特定することができ、必要に応じて、更新されたバイトを格納するページを特定することができる。
第1装置は、更新されたバイトを第1装置から第2装置にコピーして、第2装置にアプリケーションの実行を継続させる(522)。第1装置は、更新されたバイトのコピーを第2装置に送信することができる。第1装置は、コピープロセスが完了したときに、第2装置がアプリケーションを実行すべきであることを示すメッセージを、第2装置に送信することができる。いくつかの実現例において、第1装置は、更新されたバイトのコピーのみを第2装置に送信する。いくつかの例において、第1装置は、更新されたバイトを特定するデータの粒度、すなわち、ダーティマッピングに応じて、バイトブロック、例えば64バイトブロックのコピーを第2装置に送信する。例えば、ダーティマッピングが特定の64バイトブロックのうち1つの64バイトが上書きされたことを示す場合、第1装置は、特定の64バイトブロックのコピーを第2装置に送信する。
いくつかの実現例において、プロセス500は、追加のステップ、より少ないステップ、またはいくつかのステップを複数のステップに分割することができる。例えば、第1装置は、ステップ502および504を実行することなく、ステップ506〜522を実行することができる。いくつかの例において、第1装置またはヘルパーは、移行プロセス中にアプリケーションから読み取り要求を受け取り、要求されたデータをアプリケーションに提供することができる。
オプション実現例の詳細
いくつかの実現例において、ヘルパーは、PCIe付属の特定用途向け集積回路(ASIC)またはフィールドプログラマブルゲートアレイ(FPGA)に実装されたハードウェアであってもよい。例えば、ヘルパーをPCIe付属装置に実装することによって、既存のシステムの物理ハードウェアに変更を加えることなく、ヘルパーを既存のシステムに使用することができる。
いくつかの実現例において、ヘルパーは、システムオンチップ(SoC)であってもよい。例えば、ヘルパーは、コンピュータプロセッサユニット(CPU)チップSoCであってもよい。CPUチップSoCは、PCIe、コヒーレントオンダイファブリック(coherent on-die fabric)、またはコヒーレントオフチップファブリック(coherent off-chip fabric)、例えば、インテル(登録商標)社のQPI(QuickPath Interconnect)またはARM(登録商標)社のAXI(Advanced eXtensible Interface)バスを介して接続することができる。いくつかの実現例において、ヘルパーは、QPIまたはAXIバスを使用するオフソケットチップに実装されてもよい。
ハードウェアに実装された場合、ヘルパーは、例えば、キャッシュまたはCPUメモリなどのメモリに書き込むことができ、割込みを送信することができる。ヘルパーは、1秒当たり多くのドアベル要求(例えば、1秒当たり5百万個のドアベル要求)に応答することができる。
追加実現例の詳細
本開示に記載された主題および機能的な動作の実施形態は、本開示に開示された構造およびそれらの構造的均等物を含むデジタル電子回路、有形化されたコンピュータソフトウェアまたはファームウェア、コンピュータハードウェア、もしくはそれらの1つ以上の組み合わせにおいて実現することができる。本開示に記載された主題の実施形態は、1つ以上のコンピュータプログラム、すなわち、有形化された非一時的なプログラム担体上にエンコードされ、データ処理装置によって実行されるまたはデータ処理装置の動作を制御するためのコンピュータプログラム命令の1つ以上のモジュールとして実装することができる。これに代えてまたは加えて、プログラム命令は、人為的に生成された伝播信号、例えば、データ処理装置による実行のため、情報を適切な受信機に送信するために符号化することによって生成された機械生成電気信号上にエンコードされてもよい。コンピュータ記憶媒体は、機械可読記憶装置、機械可読記憶基板、ランダムまたはシリアルアクセスメモリ装置、またはそれらの1つ以上の組み合わせであってもよい。
「データ処理装置」という用語は、データ処理ハードウェアを指し、データを処理するためのあらゆる種類の機器、装置およびマシン、例えば、プログラム可能なプロセッサ、コンピュータ、または複数のプロセッサまたはコンピュータを含む。また、この装置は、FPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)などの専用論理回路であってもよく、またはそれらをさらに含んでもよい。この装置は、ハードウェアに加えて、コンピュータプログラムの実行環境を生成するコード、例えばプロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらの1つ以上の組み合わせを構成するコードを含むことができる。
プログラム、ソフトウェア、ソフトウェアアプリケーション、モジュール、ソフトウェアモジュール、スクリプト、またはコードとして呼ばれ得るまたは記述され得るコンピュータプログラムは、コンパイル言語またはインタープリタ言語、宣言型言語または手続き型言語を含む任意のプログラミング言語で記述することができ、スタンドアロンプログラムとしてまたはコンピューティング環境内の使用に適したモジュール、コンポーネント、サブルーチン、オブジェクトまたはその他のユニットとしての任意の形で使用することができる。コンピュータプログラムは、ファイルシステム内のファイルに対応することができるが、必ずしも対応する必要がない。プログラムは、他のプログラムまたはデータ(例えば、マークアップ言語文書に記憶された1つ以上のスクリプト)を保持するファイルの一部、関与しているプログラムに専用の単一ファイル、または複数の同格ファイル(例えば、1つ以上のモジュール、サブプログラムまたはコードの一部を記憶するファイル)に記憶されてもよい。コンピュータプログラムは、1つのコンピュータ上で、または1つのサイトに配置されまたは複数のサイトにわたって分散され、通信ネットワークによって相互接続されている複数のコンピュータ上で動作しているように実装することができる。
本開示に記載のプロセスおよびロジックフローは、入力データを操作して出力を生成することによって機能する1つ以上のコンピュータプログラムを実行する1つ以上のプログラム可能なコンピュータによって実施することができる。また、プロセスおよびロジックフローは、FPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)などの専用論理回路によっても実施することができ、装置は、専用論理回路として実装することもできる。
コンピュータプログラムの実行に適したコンピュータは、例として、汎用マイクロプロセッサまたは専用マイクロプロセッサもしくはその両方、または任意の他の種類の中央処理装置を含む。一般的には、中央処理装置は、読み取り専用メモリまたはランダムアクセスメモリもしくはその両方から、命令およびデータを受信する。コンピュータの必須要素は、コンピュータの必須要素は、命令に従って動作を実行するためのプロセッサ、命令およびデータを記憶するための1つ以上のメモリ装置を含む。一般的には、コンピュータはまた、データを記憶するための1つ以上の大容量記憶装置、例えば磁気ディスク、磁気光ディスクまたは光ディスクを含むおよび/またはこれらの大容量記憶装置とデータを送受信するように動作可能に結合される。しかしながら、コンピュータは、これらの装置を有する必要がない。さらに、コンピュータは、別の装置、例えば携帯電話、携帯情報端末(PDA)、モバイルオーディオまたはビデオプレーヤ、ゲームコンソール、全地球測位システム(GPS)受信機、または携帯型記憶装置(例えば、ユニバーサルシリアルバス(USB)フラッシュドライブ)を含むことができる。
コンピュータプログラム命令およびデータの記憶に適したコンピュータ可読媒体は、例えば、EPROM、EEPROMおよびフラッシュメモリ装置などの半導体メモリ装置、内蔵ハードディスクまたはリムーバブルディスクなどの磁気ディスク、光磁気ディスク、CD−ROMおよびDVD−ROMディスクを含む全ての種類の不揮発性メモリ、媒体およびメモリ装置を含む。プロセッサおよびメモリは、専用論理回路によって補完されてもよく、専用論理回路に組み込まれてもよい。
ユーザとの情報交換を提供するために、本開示に記載された主題の実施形態は、情報をユーザに提示するための表示装置(例えば、CRT(陰極線管)モニタまたはLCD(液晶ディスプレイ)モニタ)、ユーザがコンピュータに入力を提供することができるキーボードおよびポインティング装置(例えば、マウスまたはトラックボール)を備えたコンピュータ上で実装することができる。他の種類の装置を用いて、ユーザとの対話を提供することもできる。例えば、ユーザに提供されるフィードバックは、任意種類の感覚フィードバック、例えば視覚フィードバック、聴覚フィードバックまたは触覚フィードバックであってもよく、ユーザからの入力は、音響入力、音声入力または触覚入力を含む任意の形で受信することができる。さらに、コンピュータは、ユーザによって使用される装置との間でドキュメントを送受信することによって、例えば、ウェブブラウザから受信した要求に応答して、ユーザ装置上のウェブブラウザにウェブページを送信することによって、ユーザと対話することができる。
本開示に記載された主題の実施形態は、例えばデータサーバなどのバックエンドコンポーネント、またはアプリケーションサーバなどのミドルウェア要素、ユーザが本開示に記載された主題の実装と対話することができるグラフィカルユーザインターフェイスまたはウェブブラウザを有するクライアントコンピュータなどのフロントコンポーネント、または1つ以上のバックエンドコンポーネント、ミドルウェア要素またはフロントエンドコンポーネントの組み合わせを含むコンピューティングシステムに実現することができる。システムのコンポーネントは、任意の形式または媒体のデジタルデータ通信、例えば通信ネットワークと相互接続することができる。通信ネットワークの例として、ローカルエリアネットワーク(LAN)、およびワイドエリアネットワーク(WAN)、例えばインターネットが挙げられる。
コンピューティングシステムは、クライアントおよびサーバを含むことができる。クライアントとサーバとは、一般的には互いに遠隔であり、典型的には通信ネットワークを介して相互作用する。クライアントとサーバとは、対応するコンピュータ上で動作しているし、互いにクライアント−サーバ関係を有するコンピュータプログラムである。いくつかの実施形態において、サーバは、例えば、ユーザ装置、すなわち、クライアント装置と情報を交換するユーザにデータを表示し、ユーザから入力を受信するために、データ(例えば、HTMLページ)をユーザ装置に送信する。クライアント装置で生成されたデータ(例えば、ユーザ対話の結果)は、サーバ上でクライアント装置から受信することができる。
このような種類のコンピュータの一例は、図6に示されている。図6は、汎用コンピュータシステム600を示す概略図である。システム600を使用して、一実現例に従って上記に記載されたコンピュータで実行される方法のいずれかに関連して説明した動作を行うことができる。システム600は、プロセッサ610と、メモリ620と、記憶装置630と、入出力装置640を含む。構成要素610、620、630および640の各々は、システムバス650を介して相互接続される。プロセッサ610は、システム600内で実行命令を処理することができる。一実現例において、プロセッサ610は、シングルスレッドプロセッサである。別の実現例において、プロセッサ610は、マルチスレッドプロセッサである。プロセッサ610は、メモリ620または記憶装置630に格納された命令を処理して、入出力装置640上のユーザインターフェイスに図形情報を表示することができる。
メモリ620は、システム600内の情報を記憶する。一実現例において、メモリ620は、コンピュータ可読媒体である。一実現例において、メモリ620は、揮発性メモリユニットである。別の実現例において、メモリ620は、不揮発性メモリユニットである。
記憶装置630は、大容量の記憶をシステム600に提供することができる。一実現例において、記憶装置630は、コンピュータ可読媒体である。様々な異なる実現例において、記憶装置630は、フロッピーディスク(登録商標)装置、ハードディスク装置、光ディスク装置、またはテープ装置であってもよい。
入出力装置640は、入力/出力動作をシステム600に提供する。一実現例において、入出力装置640は、キーボードおよび/またはポインティング装置を含む。別の実現例において、入出力装置640は、ユーザインターフェイスに図形情報を表示させるための表示ユニットを含む。
本開示は、多くの具体的な実施詳細を含むが、これらの詳細は、発明の範囲または請求可能な範囲を限定するものではなく、むしろ特定の発明の特定の実施形態に特有の特徴の説明として考えるべきである。本開示の個別の実施形態に記載された特定の特徴は、単一の実施形態において組み合わせとして実施することもできる。逆に、単一の実施形態に記載されたさまざまな特徴は、複数の実施形態において、別々にまたは任意の適切なサブ組み合わせで実施することもできる。さらに、上記で特徴を特定の組み合わせで作用するものとして説明したが、このような説明にも拘らず、1つ以上の特徴は、説明した組み合わせから削除されてもよく、説明した組み合わせは、部分組み合わせに変形されてもよい。
同様に、動作が特定の順序で図面に示されているが、望ましい結果を達成するために、図示された順序または順番に従ってこれらの動作を実行する必要があるまたは図示された全ての動作を実行する必要があると理解すべきではない。特定の状況において、マルチ作業および並列処理は、有利である可能性がある。例えば、並列処理を用いて、複数の言語検出メソッドを同時に実行することができる。さらに、上述の実施形態におけるさまざまなシステム要素の分離は、全ての実施形態においてそのような分離が必要であると理解すべきではなく、記載されたプログラム要素およびシステムは、一般的に、単一のソフトウェア製品に一体化されまたは複数のソフトウェア製品にパッケージ化することができると理解すべきである。
したがって、主題の特定の実施形態を説明した。他の実施形態は、添付の特許請求の範囲内にある。場合によって、請求項に列挙された動作は、異なる順序で実行され、依然として望ましい結果を達成することができる。さらに、望ましい結果を達成するために、添付の図面に示されるプロセスは、必ずしも示された特定の順序または順番に従う必要がない。特定の実現例において、マルチ作業および並列処理が有利である可能性がある。

Claims (29)

  1. コンピュータで実行される方法であって、
    装置上で動作している複数の仮想マシンに対する複数のドアベルページを生成するステップと、
    前記複数のドアベルページのうち、各仮想マシンからの要求を記憶するキューを特定する各ドアベルページに対するアクセスを前記複数の仮想マシンの各々に提供するステップと、
    前記複数のドアベルページのうち1つの特定のドアベルページから、各キューが対応する各仮想マシンからの要求を記憶している通知を受信するステップと、
    各キューが対応する各仮想マシンからの要求を記憶している通知を受信することに応答して、各仮想マシンに対応する各キューをプロセッサに処理させるステップとを含む、方法。
  2. 前記プロセッサが前記要求を処理している間に、各仮想マシンの実行を継続するステップを含む、請求項1に記載の方法。
  3. 各キューが対応する各仮想マシンからの要求を記憶している通知を受信する前に、各キューの更新を受信するステップを含む、請求項1に記載の方法。
  4. 前記複数のドアベルページの各々について、当該ドアベルページに一意に対応し且つ当該ドアベルページによって特定されたキューを一意に特定するエントリを含むアレイを生成するステップと、
    各キューが対応する各仮想マシンからの要求を記憶している通知を受信したことに応答して、各キューを特定する前記アレイ内の各エントリを更新するステップとを含み、
    各仮想マシンに対応する各キューを前記プロセッサに処理させるステップは、前記アレイを前記プロセッサに提供して、前記プロセッサに各仮想マシンに対応する各キューを処理させるステップを含む、請求項1に記載の方法。
  5. 前記複数のドアベルページの各々について、当該ドアベルページに一意に対応し且つ当該ドアベルページによって特定されたキューを一意に特定するエントリを含むアレイを生成するステップは、前記複数のドアベルページの各々について、当該ドアベルページに一意に対応し且つ当該ドアベルページによって特定されたキューを一意に特定するエントリを含むビットベクトルを生成することを含み、
    各キューを特定する前記アレイ内の各エントリを更新するステップは、前記各キューを特定する、前記ビットベクトルにおける各エントリを更新するステップを含み、
    前記アレイを前記プロセッサに提供して、前記プロセッサに各仮想マシンに対応する各キューを処理させるステップは、前記ビットベクトルを前記プロセッサに提供して、前記プロセッサに各仮想マシンに対応する各キューを処理させることを含む、請求項4に記載の方法。
  6. 前記アレイを前記プロセッサに提供して、前記プロセッサに各仮想マシンに対応する各キューを処理させるステップは、前記アレイを前記プロセッサに提供して、前記プロセッサに前記複数の仮想マシンに対応する複数のキューを処理させることを含む、請求項4に記載の方法。
  7. 各仮想マシンに対応する各キューを前記プロセッサに処理させるステップは、前記プロセッサに割込みを送信することを含む、請求項1に記載の方法。
  8. 前記複数のドアベルページのうち、各仮想マシンからの要求を記憶するキューを特定する各ドアベルページに対するアクセスを前記複数の仮想マシンの各々に提供するステップは、前記複数のドアベルページのうち、各キューのヘッドノードを含む各ドアベルページに対するアクセスを前記複数の仮想マシンの各々に提供することを含む、請求項1に記載の方法。
  9. 前記複数のドアベルページのうち、各仮想マシンからの要求を記憶するキューを特定する各ドアベルページに対するアクセスを前記複数の仮想マシンの各々に提供するステップは、前記複数のドアベルページのうち、各仮想マシンからの要求を記憶するリングバッファを特定する各ドアベルページに対するアクセスを前記複数の仮想マシンの各々に提供することを含む、請求項1に記載の方法。
  10. 前記複数のドアベルページを生成するステップは、前記複数のドアベルページの各ドアベルページに各アドレスを割り当てることを含み、
    前記複数のドアベルページのうち、各仮想マシンからの要求を記憶するキューを特定する各ドアベルページに対するアクセスを前記複数の仮想マシンの各々に提供するステップは、前記各仮想マシンに対応する各アドレスを前記複数の仮想マシンの各々に提供することを含む、請求項1に記載の方法。
  11. 前記複数のドアベルページを生成するステップは、追跡構造を生成し、前記追跡構造からの各インデックスを前記複数のドアベルページの各々に割り当てることを含み、
    前記複数のドアベルページのうち、各仮想マシンからの要求を記憶するキューを特定する各ドアベルページに対するアクセスを前記複数の仮想マシンの各々に提供するステップは、前記各仮想マシンに対応する各インデックスのアドレスを前記複数の仮想マシンの各々に提供することを含む、請求項1に記載の方法。
  12. 前記複数のドアベルページを生成するステップは、
    前記複数のドアベルページの各々について、ページを生成することと、
    前記複数のドアベルページのうちの各ドアベルページが、対応する各ページに存在する非ゼロオフセットを前記複数のドアベルページの各々に割り当てることとを含み、
    前記複数のドアベルページのうち、各仮想マシンからの要求を記憶するキューを特定する各ドアベルページに対するアクセスを前記複数の仮想マシンの各々に提供するステップは、各ページに対応するアドレスおよび各仮想マシンに対応する非ゼロオフセットを前記複数の仮想マシンの各々に送信することを含む、請求項1に記載の方法。
  13. 第2複数のドアベルページを生成するステップと、
    前記複数のドアベルページのうち、各仮想マシンからの第2要求を記憶する第2キューを特定する各ドアベルページに対するアクセスを前記複数の仮想マシンのうち少なくとも一部の各々に提供するステップとを含み、第1種類の前記要求は、第2種類の前記第2要求とは異なり、
    前記複数のドアベルページのうち1つの特定のドアベルページから、各キューが対応する各仮想マシンからの要求を記憶している通知を受信するステップは、前記複数のドアベルページのうち1つの特定のドアベルページから、要求の種類を特定する通知を受信することを含み、
    各仮想マシンに対応する各キューを前記プロセッサに処理させるステップは、
    前記要求の種類が前記第1種類を含むことを判断することと、
    前記第1種類の要求を処理するために割り当てられる特定のプロセッサを決定することと、
    各仮想マシンに対応する各キューを前記特定のプロセッサに処理させることを含む、請求項1に記載の方法。
  14. 前記装置の第1プロセッサ上で前記複数の仮想マシンを実行するステップを含み、
    各仮想マシンに対応する各キューを前記特定のプロセッサに処理させるステップは、異なる第2プロセッサ上で動作しているハイパーバイザにメッセージを提供して、各仮想マシンに対応する各キューを前記異なる第2プロセッサに処理させることを含む、請求項13に記載の方法。
  15. 前記異なる第2プロセッサ上で動作しているハイパーバイザに前記メッセージを提供することは、前記装置とは異なる第2装置上の前記異なる第2プロセッサ上で動作している前記ハイパーバイザに前記メッセージを提供することを含む、請求項14に記載の方法。
  16. データ処理装置によって実行可能な命令を格納する非一時的なコンピュータ可読記憶媒体であって、これらの命令は、前記データ処理装置によって実行されると、前記データ処理装置に、
    第1装置上でアプリケーションの実行を継続させながら、前記第1装置のメモリに記憶され、前記第1装置上で前記アプリケーションの実行に使用されるデータページを前記第1装置から第2装置にコピーすることによって、前記第1装置上で実行している前記アプリケーションを前記第1装置から前記第2装置に移行する移行プロセスを開始する動作と、
    前記移行プロセス中に前記第1装置上で前記アプリケーションの実行に応答して、前記第1装置によって、前記データページのうち、少なくとも1つのデータページ内の1つ以上のバイトを更新する動作と、
    前記第1装置上で前記アプリケーションの実行を停止する動作と、
    前記更新されたバイトを前記第1装置から前記第2装置にコピーして、前記第2装置に前記アプリケーションの実行を継続させる動作とを含む動作を実行させる、コンピュータ可読記憶媒体。
  17. 前記動作は、前記アプリケーションのために、前記メモリ内の前記データページの場所を特定するためのマッピングを作成する動作を含み、
    前記移行プロセス中に前記第1装置上で前記アプリケーションの実行に応答して、前記第1装置によって、前記データページのうち、少なくとも1つのデータページ内の1つ以上のバイトを更新する動作は、
    前記少なくとも1つのデータページの各々をヘルパーに割り当てる動作と、
    前記少なくとも1つのページの各々に対応して、前記アプリケーションが前記ヘルパー内の対応ページを特定するためのマッピングを更新する動作と、
    前記少なくとも1つのデータページ内の1つ以上のバイトを更新する動作とを含む、請求項16に記載のコンピュータ可読記憶媒体。
  18. 前記動作は、前記少なくとも1つのデータページ内の前記1つ以上のバイトの更新に応答して、前記第1装置によって、前記更新されたバイトを特定するデータを記憶する動作を含み、
    前記更新されたバイトを前記第1装置から前記第2装置にコピーする動作は、
    前記更新されたバイトを特定する前記データを用いて前記更新されたバイトを特定する動作と、
    前記更新されたバイトを特定する前記データを用いて前記更新されたバイトを特定することに応答して、前記更新されたバイトを前記第1装置から前記第2装置にコピーする動作とを含む、請求項16に記載のコンピュータ可読記憶媒体。
  19. 前記動作は、
    前記第1装置によって、前記データページの前記少なくとも1つのデータページ内の前記1つ以上のバイトを受信する動作と、
    前記第1装置によって、前記1つ以上のバイトが移行されている前記アプリケーションのデータページのものであることを判断する動作とを含み、
    前記更新されたバイトを特定する前記データを記憶する動作は、前記1つ以上のバイトが移行される前記アプリケーションのデータページのものであることの判断に応答して、前記更新されたバイトを特定する前記データを記憶する動作を含む、請求項18に記載のコンピュータ可読記憶媒体。
  20. 前記動作は、
    前記アプリケーションから、メモリにアクセスする要求を受信する動作と、
    前記メモリにアクセスする要求が書き込み要求であることを判断する動作とを含み、
    前記更新されたバイトを特定する前記データを記憶する動作は、前記メモリにアクセスする要求が書き込み要求であることの判断に応答して、前記更新されたバイトを特定する前記データを記憶する動作を含む、請求項18に記載のコンピュータ可読記憶媒体。
  21. 前記動作は、アプリケーションのデータページを第1装置のメモリに格納することを含み、第1装置上でアプリケーションを実行する動作を含む、請求項16に記載のコンピュータ可読記憶媒体。
  22. 前記第1装置上で前記アプリケーションの実行は、前記第1装置上で仮想マシンを実行することを含む、請求項21に記載のコンピュータ可読記憶媒体。
  23. 前記更新されたバイトを前記第1装置から前記第2装置にコピーして、前記第2装置に前記アプリケーションの実行を継続させる動作は、前記更新されたバイトのみを前記第1装置から前記第2装置にコピーして、前記第2装置に前記アプリケーションの実行を継続させることを含む、請求項16に記載のコンピュータ可読記憶媒体。
  24. システムであって、
    メモリと、
    データ処理装置と、
    前記データ処理装置とデータ通信し、前記データ処理装置によって実行可能な命令を格納する非一時的なコンピュータ可読記憶媒体とを備え、これらの命令は、前記データ処理装置によって実行されると、前記データ処理装置に、
    前記システム上で動作している複数の仮想マシンのために、前記メモリに複数のドアベルページを記憶する動作と、
    前記複数のドアベルページのうち、各仮想マシンからの要求を記憶するキューを特定する各ドアベルページに対するアクセスを前記複数の仮想マシンの各々に提供する動作と、
    前記複数のドアベルページのうち1つの特定のドアベルページから、各キューが対応する各仮想マシンからの要求を記憶している通知を受信する動作と、
    各キューが対応する各仮想マシンからの要求を記憶している通知を受信することに応答して、各仮想マシンに対応する各キューをプロセッサに処理させる動作とを含む動作を実行させる、システム。
  25. 前記データ処理装置は、前記プロセッサを含む、請求項24に記載のシステム。
  26. 前記プロセッサは、前記データ処理装置とは異なり、
    前記動作は、前記データ処理装置上で前記複数の仮想マシンを実行する動作を含み、
    各仮想マシンに対応する各キューを前記プロセッサに処理させる動作は、前記プロセッサ上で動作しているハイパーバイザにメッセージを提供して、前記プロセッサに各仮想マシンに対応する各キューを処理させることを含む、請求項24に記載のシステム。
  27. 前記システムは、
    前記データ処理装置を含む第1装置と、
    前記プロセッサを含む第2装置とを備え、
    前記プロセッサ上で動作しているハイパーバイザにメッセージを提供することは、前記メッセージを前記第1装置と異なる前記第2装置に含まれた前記プロセッサ上で動作しているハイパーバイザに提供することを含む、請求項26に記載のシステム。
  28. システムであって、
    第1装置を備え、
    前記第1装置は、
    メモリと、
    データ処理装置と、
    前記データ処理装置とデータ通信し、前記データ処理装置によって実行可能な命令を格納する非一時的なコンピュータ可読記憶媒体とを備え、これらの命令は、前記データ処理装置によって実行されると、前記データ処理装置に、
    第1装置上でアプリケーションの実行を継続させながら、前記第1装置のメモリに記憶され、前記第1装置上で前記アプリケーションの実行に使用されるデータページを前記第1装置から第2装置にコピーすることによって、前記第1装置上で実行している前記アプリケーションを前記第1装置から前記第2装置に移行する移行プロセスを開始する動作と、
    前記移行プロセス中に前記第1装置上で前記アプリケーションの実行に応答して、前記データページのうち、少なくとも1つのデータページ内の1つ以上のバイトを更新する動作と、
    前記第1装置上で前記アプリケーションの実行を停止する動作と、
    前記更新されたバイトを前記第1装置から前記第2装置にコピーして、前記第2装置に前記アプリケーションの実行を継続させる動作とを含む動作を実行させる、システム。
  29. 前記第2装置を含む、請求項28に記載のシステム。
JP2017550900A 2015-04-16 2016-03-31 仮想マシンシステム Active JP6423547B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US14/688,258 2015-04-16
US14/688,258 US9747122B2 (en) 2015-04-16 2015-04-16 Virtual machine systems
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
JP2018120857A Division JP6391878B1 (ja) 2015-04-16 2018-06-26 仮想マシンシステム

Publications (2)

Publication Number Publication Date
JP2018511881A true JP2018511881A (ja) 2018-04-26
JP6423547B2 JP6423547B2 (ja) 2018-11-14

Family

ID=55750492

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2017550900A Active JP6423547B2 (ja) 2015-04-16 2016-03-31 仮想マシンシステム
JP2018120857A Active JP6391878B1 (ja) 2015-04-16 2018-06-26 仮想マシンシステム

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2018120857A Active JP6391878B1 (ja) 2015-04-16 2018-06-26 仮想マシンシステム

Country Status (9)

Country Link
US (1) US9639395B2 (ja)
EP (2) EP3779695A1 (ja)
JP (2) JP6423547B2 (ja)
KR (2) KR101922533B1 (ja)
CN (2) CN108268331B (ja)
DE (2) DE112016001730T5 (ja)
GB (1) GB2553050A (ja)
HK (2) HK1243792B (ja)
WO (1) WO2016167980A2 (ja)

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
US11036533B2 (en) * 2015-04-17 2021-06-15 Samsung Electronics Co., Ltd. Mechanism to dynamically allocate physical storage device resources in virtualized environments
US10838852B2 (en) 2015-04-17 2020-11-17 Samsung Electronics Co., Ltd. System and method to extend NVME queues to user space
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 (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130007751A1 (en) * 2011-07-01 2013-01-03 Farrell Robert L Method and system for safe enqueuing of events
JP2013516021A (ja) * 2009-12-29 2013-05-09 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド プロセッサコアのハイパーバイザ離隔
US20130198312A1 (en) * 2012-01-17 2013-08-01 Eliezer Tamir Techniques for Remote Client Access to a Storage Medium Coupled with a Server
US20140181323A1 (en) * 2012-12-20 2014-06-26 Oracle International Corporation Doorbell backpressure avoidance mechanism on a host channel adapter

Family Cites Families (20)

* 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
US7543290B2 (en) 2001-04-11 2009-06-02 Mellanox Technologies Ltd. Multiple queue pair access with single doorbell
US20050144422A1 (en) 2003-12-30 2005-06-30 Mcalpine Gary L. Virtual to physical address translation
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
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
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
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
DK3127300T3 (da) * 2014-05-12 2019-10-07 Google Llc Håndtering af nic-krypterede flows til at migrere gæster eller opgaver

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013516021A (ja) * 2009-12-29 2013-05-09 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド プロセッサコアのハイパーバイザ離隔
US20130007751A1 (en) * 2011-07-01 2013-01-03 Farrell Robert L Method and system for safe enqueuing of events
US20130198312A1 (en) * 2012-01-17 2013-08-01 Eliezer Tamir Techniques for Remote Client Access to a Storage Medium Coupled with a Server
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
JP2018170033A (ja) 2018-11-01
WO2016167980A2 (en) 2016-10-20
HK1251315B (zh) 2020-06-26
US20160306658A1 (en) 2016-10-20
KR20180081847A (ko) 2018-07-17
HK1243792B (zh) 2019-11-01
JP6423547B2 (ja) 2018-11-14
CN108268331B (zh) 2019-05-31
US9639395B2 (en) 2017-05-02
EP3283960A2 (en) 2018-02-21
GB201715307D0 (en) 2017-11-08
GB2553050A (en) 2018-02-21
CN108268331A (zh) 2018-07-10
CN107430522B (zh) 2018-09-21
KR101922533B1 (ko) 2019-02-20
JP6391878B1 (ja) 2018-09-19
KR20170122826A (ko) 2017-11-06
KR102011478B1 (ko) 2019-10-21
DE202016107376U1 (de) 2017-01-24
EP3779695A1 (en) 2021-02-17
DE112016001730T5 (de) 2017-12-28
WO2016167980A3 (en) 2016-11-17
CN107430522A (zh) 2017-12-01

Similar Documents

Publication Publication Date Title
JP6391878B1 (ja) 仮想マシンシステム
US9747122B2 (en) Virtual machine systems
EP3637269B1 (en) Managing storage devices
EP2879053B1 (en) Virtual machine memory data migration method, related apparatus, and cluster system
US11836091B2 (en) Secure memory access in a virtualized computing environment
US20150154042A1 (en) Computer system and control method for virtual machine
US9575796B2 (en) Virtual device timeout by memory offlining
US20140325163A1 (en) Cross-Partition Shared Memory Attach for Data Processing Environment
US11188369B2 (en) Interrupt virtualization
US20170277632A1 (en) Virtual computer system control method and virtual computer system
US9697047B2 (en) Cooperation of hoarding memory allocators in a multi-process system
US10210007B2 (en) Parallel mapping of client partition memory to multiple physical adapters
JP2016173741A (ja) 情報処理装置、情報処理方法、及び、プログラム
US11513983B2 (en) Interrupt migration
US9652296B1 (en) Efficient chained post-copy virtual machine migration
US20220197569A1 (en) Determining a size of virtual disks

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180116

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180116

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20180116

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20180313

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180417

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180626

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20180925

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20181018

R150 Certificate of patent or registration of utility model

Ref document number: 6423547

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250