JP5874879B2 - I/oデバイスの制御方法及び仮想計算機システム - Google Patents

I/oデバイスの制御方法及び仮想計算機システム Download PDF

Info

Publication number
JP5874879B2
JP5874879B2 JP2012257255A JP2012257255A JP5874879B2 JP 5874879 B2 JP5874879 B2 JP 5874879B2 JP 2012257255 A JP2012257255 A JP 2012257255A JP 2012257255 A JP2012257255 A JP 2012257255A JP 5874879 B2 JP5874879 B2 JP 5874879B2
Authority
JP
Japan
Prior art keywords
guest
hypervisor
driver
state
physical
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.)
Expired - Fee Related
Application number
JP2012257255A
Other languages
English (en)
Other versions
JP2014106587A (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.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2012257255A priority Critical patent/JP5874879B2/ja
Priority to US14/083,493 priority patent/US9430266B2/en
Publication of JP2014106587A publication Critical patent/JP2014106587A/ja
Application granted granted Critical
Publication of JP5874879B2 publication Critical patent/JP5874879B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/4555Para-virtualisation, i.e. guest operating system has to be modified
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1438Restarting or rejuvenating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1479Generic software techniques for error detection or fault masking
    • G06F11/1482Generic software techniques for error detection or fault masking by means of middleware or OS functionality
    • G06F11/1484Generic software techniques for error detection or fault masking by means of middleware or OS functionality involving virtual machines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/202Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant
    • G06F11/2023Failover techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45579I/O management, e.g. providing access to device drivers or storage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Hardware Redundancy (AREA)

Description

本発明は共有I/Oデバイスのアクセス制御方式に関する。
ハイパバイザ(Hypervisor)上で第一のゲストOSと第二のゲストOSが稼働し、かつ、ハイパバイザに障害が発生した後でも第一のゲストOSの稼働の継続を可能にする方法として特許文献1に記載の方法が知られている。
上記方法では、(1)第一のゲストOSがハイパバイザ上で稼働する際に使用する物理アドレス(ゲスト絶対アドレス)と、ホスト絶対アドレスが同一になるよう、第一のゲストOSに当該物理アドレス領域を占有的に割り当て、(2)第一のゲストOSがハイパバイザ上で稼働する際に使用するCPU番号と同じCPU番号を持つ物理CPUを第一のゲストOSに占有的に割り当て、(3)第一のゲストOSがハイパバイザ上で稼働する際に使用する割り込みと同じ割り込み番号を持つ物理割り込みを第一のゲストOSに占有的に割り当てる。そして、ハイパバイザに障害が発生した際には、以降、第一のゲストOSはハイパバイザ上ではなく物理ハードウェア上で実行を継続する。ハイパバイザ上でも物理ハードウェア上でも、物理アドレス、CPU番号、割り込み番号が同一であるため、ハイパバイザ障害発生後でも第一のゲストOSの稼働継続が可能になる。
特開平5−12045号公報
しかし、上記従来例では、第一のゲストOSがNICをはじめとするI/Oデバイスに、ハイパバイザ内に実装されたエミュレータを介してアクセスする構成を想定しておらず、そのような構成を取った時に、ハイパバイザに障害が発生した後に第一のゲストOSの稼働継続(特にI/O継続)は保証できない。
SR−IOV仕様に従ったNICをはじめとするI/Oデバイスをハイパバイザと第一のゲストOSと第二のゲストOS間で共有する場合には、ハイパバイザ内のエミュレータがI/Oデバイスの一部の機能をエミュレートし、第一のゲストOSや第二のゲストOSがI/Oデバイスの一部の機能を利用する際には、上記エミュレータを介して当該I/Oデバイスにアクセスする構成をとる。
近年、仮想計算機の普及により、I/Oデバイスを複数の仮想計算機(ゲストOS)で共有する技術が提案され、例えば、SR−IOV(Single Root I/O Virtualization)等が知られている。
上記特許文献1の記載の方法では、上記SR−IOVの仕様に従ったI/Oデバイスをハイパバイザと第一のゲストOSと第二のゲストOSで共有した際に、ハイパバイザに障害が発生した後では、第一のゲストOSのI/Oの継続を実現できない、という課題があった。
本発明は、プロセッサとメモリ及びI/Oデバイスを備えた計算機で、ハイパバイザと第1のゲストOSが前記I/Oデバイスを共有するI/Oデバイスの制御方法であって、前記I/Oデバイスは、物理機能と仮想機能を有し、前記ハイパバイザは、前記物理機能を利用する物理ドライバを有し、前記第1のゲストOSは、前記仮想機能を利用する仮想ドライバを有し、前記方法は、前記ハイパバイザが、前記物理ドライバを介して前記I/Oデバイスの状態を取得する第1のステップと、前記第1のゲストOSが、前記ハイパバイザを監視して、前記ハイパバイザが所定の状態になったか否かを判定する第2のステップと、前記第1のゲストOSが、前記ハイパバイザが所定の状態になったと判定したときには、前記I/Oデバイスを操作するサブ物理ドライバを起動する第3のステップと、前記第1のゲストOSは、前記メモリ上に予め設定したキューを介して送受信を行う第4のステップと、を含む。
本発明により、物理機能(PF)と仮装機能(VF)を有するSR−IOVの仕様に従ったI/Oをハイパバイザと第一のゲストOSと第二のゲストOSで共有した際に、ハイパバイザに障害が発生後でも第一のゲストOSによるI/Oを継続することが可能となる。
本発明の第1の実施例を示し、仮想計算機システムの一例を示すブロック図である。 本発明の第1の実施例を示し、I/Oデバイスの共有に関する仮想計算機システムの機能ブロック図である。 本発明の第1の実施例を示し、物理リンク状態のデータ構造の一例を示す図である。 本発明の第1の実施例を示し、仮想リンク状態のデータ構造の一例を示す図である。 本発明の第1の実施例を示し、送受信キューのデータ構造の一例を示す図である。 本発明の第1の実施例を示し、ハイパバイザ状態格納領域のデータ構造の一例を示す図である。 本発明の第1の実施例を示し、リンク操作部の定期的なポーリングの処理の一例を示すフローチャートである。 本発明の第1の実施例を示し、物理リンク操作要求を受信したときにリンク操作部で行われる処理の一例を示すフローチャートである。 本発明の第1の実施例を示し、送受信部の定期的なポーリングの処理の一例を示すフローチャートである。 本発明の第1の実施例を示し、データを受信したときに送受信部で行われる処理の一例を示すフローチャートである。 本発明の第1の実施例を示し、PFドライバがリンク操作部からの割り込み通知を受信したときに行う処理の一例を示すフローチャートである。 本発明の第1の実施例を示し、PFドライバがVFドライバから仮想リンク操作要求を受信したときに行う処理の一例を示すフローチャートである。 本発明の第1の実施例を示し、PFドライバが定期的なポーリングで行う処理の一例を示すフローチャートである。 本発明の第1の実施例を示し、VFドライバがPFドライバから割り込み通知を受信したときに行う処理の一例を示すフローチャートである。 本発明の第1の実施例を示し、データ送信処理開始を契機にしたVFドライバの処理の一例を示すフローチャートである。 本発明の第1の実施例を示し、VFドライバが定期的なポーリングで行う処理の一例を示すフローチャートである。 本発明の第1の実施例を示し、監視部で行われる処理の一例を示すフローチャートである。 本発明の第1の実施例を示し、フェイルオーバ部で行われる処理の一例を示すフローチャートである。 本発明の第2の実施例を示し、PFドライバがリンク操作部からの割り込み通知を受信したときに行う処理の一例を示すフローチャートである。 本発明の第2の実施例を示し、PFドライバがVFドライバから仮想リンク操作要求を受信したときに行う処理の一例を示すフローチャートである。 本発明の第2の実施例を示し、フェイルオーバ部で行われる処理の一例を示すフローチャートである。
以下、本発明の一実施形態を添付図面に基づいて説明する。
まず、本発明を適用する仮想計算機システムの構成を説明する。図1は、仮想計算機システムの構成の一例を示すブロック図である。物理計算機10は、複数のCPU103−1〜103−nを有し、これらのCPU103−1〜103−nはインターコネクト91を介してチップセット90や主メモリ102に接続される。なお、図中CPU103−1〜103−nの総称をCPU103とする。
チップセット100には、PCIexpress等を介してI/Oデバイスや入出力装置を備えたコンソール230が接続される。I/Oデバイスとしては、LAN(またはネットワーク)180に接続されるNIC(Network Interface Card)101や、SAN(Storage Area Network)202を介してストレージ装置203や等に接続されるHBA(Host Bus Adapter)251などで構成される。
CPU103はインターコネクト91を介して主メモリ102にアクセスする。またCPU103はチップセット90を介してNIC101等のI/Oデバイスにアクセスして所定の処理を行う。同様にNIC101等のI/Oデバイスはチップセット100を介して主メモリ102にアクセスする。
また、チップセット90には、BMC(Baseboard Management Controller)104が接続される。BMC104は、物理計算機10の状態を監視したり電源制御を行う。BMC104は、管理LAN190を介して図示しない管理計算機に接続される。
主メモリ102には、ハイパバイザ(図中Hypervisor)110がロードされ、CPU103によって実行されることで、物理計算機10の計算機資源を複数の仮想計算機11−1,11−2〜11−nへ割り当てることができる。なお、各仮想計算機11−1、11−2〜11−nではそれぞれ第1ゲストOS111−1、第2ゲストOS111−2〜111−n(図2参照)が実行される。なお、以下では、仮想計算機の総称を符号11で表し、ゲストOSの総称を符号111で表す。なお、他の構成要素の符号も同様であり、「−n」で個々を識別し、「−」のない符号で総称を示す。
NIC101は、SR−IOVに準拠し、主メモリ102上に設定された複数の送受信キュー132を有するマルチキューのI/Oデバイスで構成された例を示す。なお、HBA251をマルチキューのI/Oデバイスで構成してもよい。また、物理計算機10は、NIC101やHBA251等のI/Oデバイスを複数備えることができる。
NIC101は、SR−IOVに準拠する物理機能(Physical Function:以下、PFとする)141と、仮想機能(Virtual Function:以下、VFとする)142とを有する。PF141は、1以上のVF142を設定することができる。
ハイパバイザ110は、NIC101のPF141を利用するPFドライバ122を有する。仮想計算機11−1、11−2の第1ゲストOS111−1、第2ゲストOS111−2は、NIC101のVF142を利用するVFドライバ123をそれぞれ有する。ここで、仮想計算機11−1の第1ゲストOS111−1は、後述するように、ハイパバイザ110に障害が発生したときに機能するサブPFドライバ(図中sub PFドライバ)122Aを有する。
そして、ハイパバイザ110は、仮想計算機11−1と11−2にVF142を割り当てて、NIC101を共有する。本実施例では、ハイパバイザ110は、物理計算機10の計算機資源を論理的に分割して論理資資源(または論理区画)とし、論理資源を仮想計算機11に割り当てる仮想化部であればよい。
図2は、仮想計算機システムの要部を示す機能ブロック図である。CPU103では、ハイパバイザ110と、第一ゲストOS111−1と、第二ゲストOS111−2が実行される。これらはNIC101を介してネットワーク180とのI/O(入出力)を行うが、このI/Oの実行に必要なデータ構造を主メモリ102上に配置する。また、主メモリ102には、ハイパバイザ110、第一ゲストOS111−1、第二ゲストOS111−2が管理するNIC101とのリンク状態の格納領域としても使用される。
NIC101には、送受信部121とリンク操作部120が搭載されている。送受信部121は第一ゲストOS111−1、第二ゲストOS111−2のVFドライバ123から直接起動される。NIC101が送受信するデータは、主メモリ上102の送受信キュー(マルチキュー)132を介して送受される。
一方、リンク操作部120はハイパバイザ110のPFドライバ122によって操作(物理リンク操作要求を発行)される。また、NIC101のPF141やVF142からの割り込みもハイパバイザ110のPFドライバ122に通知される。NIC101の物理リンクの状態が主メモリ102上の物理リンク状態130に格納され、PFドライバ122によって管理される。
また、ハイパバイザ110のPFドライバ122は、NIC101で行われるリンク操作をエミュレートする。そして、PFドライバ122は、第一ゲストOS111−1や第二ゲストOS111−2のVFドライバ123との間で、仮想リンク操作要求や割り込み通知を送受信する。そして、第一ゲストOS111−1や第二ゲストOS111−2は、VFドライバ123が認識している接続状態を主メモリ102上の仮想リンク状態131−1、131−2にそれぞれ格納する。
第一ゲストOS111−1は、サブPFドライバ122Aも有する。サブPFドライバ122Aは、BMC104を監視してハイパバイザ110の稼働状態を監視する監視部124と、ハイパバイザ110に障害が発生したときにPFドライバ122の状態をサブPFドライバ122Aに引き継ぐフェイルオーバ(図中failover)部125を保持する。
BMC104にはハイパバイザ状態格納領域133が格納され、PFドライバ122が定期的(所定の周期)に本領域を更新する。なお、BMC104は図示しないプロセッサとメモリを有し、ハイパバイザ状態格納領域133をメモリに格納する。
サブPFドライバ122Aの監視部124は、上記ハイパバイザ状態格納領域133の更新が一定時間を超えて行われていないことを検知することでハイパバイザ110の障害発生を検知する。
監視部124が障害を検知すると、サブPFドライバ122Aはフェイルオーバ部125を起動し、物理リンク状態130を主メモリ102上で再構成し、サブPFドライバ122A用の物理リンク状態130Aを主メモリ102上に生成する。以降、第一ゲストOS111−1のVFドライバ123は、ハイパバイザ110のPFドライバ122に代わって、サブPFドライバ122Aを介して仮想リンク操作要求の発行や、割り込み通知を受信することにより、ハイパバイザ110の障害発生後の第一ゲストOS111−1によるI/Oの継続が可能になる。サブPFドライバ122A用の物理リンク状態130Aは、PFドライバ122の物理リンク状態130と同様に構成される。
なお、第1ゲストOS111−1とハイパバイザ110の接続と、第2ゲストOS111−2とハイパバイザ110の接続は、ハイパバイザ110が提供する仮想ネットワーク(または仮想スイッチ)を用いる。
一方、サブPFドライバ122Aの監視部124と第2ゲストOS111−2のVFドライバ123を接続する緊急リンク150は、主メモリ102上に予め設定された領域を用いて通信を行うもので、ハイパバイザ110が停止したときも使用可能なリンクである。
次に、図3から図6で、主メモリ102上、及びBMC104に格納される各種データ構造を説明する。
図3は、物理リンク状態130及び130Aのデータ構造の一例を示す図である。物理リンク状態130は、各VF142及びPF141がリンクアップしているかリンクダウンしているかを表す状態としてのリンクアップ状態201と、各VF142に設定したリンクアップ時の物理帯域量を表すリンク帯域状態202とを含む。
物理リンク状態130は、後述するように、PFドライバ122によって管理される。まず、リンクアップ状態201は、PF141及びVF142の物理的な接続状態を示す物理状態210と、各仮想計算機11のゲストOS111に通知している各VF142ごとの接続状態を格納する通知状態211の2種類の情報で構成される。図3においては、VF142はVF1〜VFnのn個が生成された状態を示す。また、図中「UP」はLAN180に接続中を示し、「DOWN」はLAN180との接続が遮断されていることを示す。
リンク帯域状態202は、NIC101の物理的な帯域を示す物理状態220と、各仮想計算機11のゲストOS111にそれぞれ通知している各VF142ごとの帯域を格納する通知状態230の情報で構成される。PF141は、ハイパバイザ110自身がPFドライバ122で利用しているので、通知は不要となる。
物理状態220は、各VF142に設定可能な帯域の最大値を示すMAX221と、各VF142に割り当てた帯域である割当222から構成される。また、通知状態230は、各VF142に通知した割当可能な帯域の最大値を示すMAX231と、実際に仮想計算機11へ割り当てられた帯域を示す割当232から構成される。なお、図3において、帯域の単位はbpsを示す。
なお、第二ゲストOS111−1のサブPFドライバ122Aの物理リンク状態130Aも、上記図3と同様に構成される。
図4は、仮想リンク状態131のデータ構造の一例を示す図である。仮想リンク状態131は、各VFドライバ123毎に設定される。仮想リンク状態131は、各ゲストOS111が認識しているVF142のリンクアップ状態を示すリンクアップ状態301と、各ゲストOS111が認識しているリンク帯域を格納するリンク帯域状態302を含む。リンクアップ状態は、図3に示した物理リンク状態130のリンクアップ状態201を構成する通知状態211に対応する。
リンク帯域状態302は、割当可能な帯域の最大値を格納する「MAX値」と、実際に割り当てられた「割当値」を含む。「MAX値」は、図3に示した物理リンク状態130のリンク帯域状態202を構成する通知状態230のMAX231と割当232に対応する。
図5は、送受信キュー132のデータ構造の一例を示す図である。送受信キュー132は、送信キュー401と受信キュー402からなる。
送信キュー401は、イネーブルビット(図中enable bit410)を持ち、NIC101が当該キューを介した送信処理を行うべきか否かを制御する。また、送信キュー401はアドレス420、サイズ421、エラー状態422からなるエントリのリングキューを持つ。それぞれのリングキューには、リードインデックス(図中read index)411とライトインデックス(図中write index)412があり、NIC101及びVFドライバ123のうちエンキュー処理を行う側がライトインデックス412を設定し、デキュー処理を行う側がリードインデックス411を設定することで、キューイングされているデータ(未送信データ)を認識する。
受信キュー402は、イネーブルビット(図中enable bit)430を有し、NIC101が当該キューを介した受信処理を行うべきか否かを制御する。また、受信キュー402はアドレス440、サイズ441、エラー状態442からなるエントリのリングキューを持つ。それぞれのリングキューには、リードインデックス(図中read index)431とライトインデックス(図中write index)432があり、NIC101及びVFドライバ123のうちエンキュー処理を行う側がライトインデックス432を設定し、デキュー処理を行う側がリードインデックス431を設定することで、キューイングされているデータ(未受信データ)を認識する。
図6はハイパバイザ状態格納領域133のデータ構造の一例を示す図である。BMC104の図示しないメモリには、ハイパバイザ状態格納領域133が格納される。
ハイパバイザ状態格納領域133にはカウンタ501が含まれる。ハイパバイザ110のPFドライバ122は、カウンタ501のカウントアップを定期的に行う。これにより、サブPFドライバ122Aの監視部124は、カウンタ501のカウントアップが一定時間以上停止することによりハイパバイザ110に障害が派生したことを検知することが可能になる。
次に、図7から図18で、NIC101、ハイパバイザ110のPFドライバ122、第一ゲストOS111−1または第二ゲストOS111−2のVFドライバ123、第一ゲストOSのサブPFドライバ122Aで行われる処理の一例を示すフローチャートを説明する。
図7及び図8はNIC101のリンク操作部120で行われる処理の一例を示すフローチャートである。NIC101のリンク操作部120は、定期的なポーリング及びPFドライバ122からの物理リンク操作要求の受信を契機に稼働を開始する。
図7は、定期的なポーリングの一例を示すフローチャートである。
図8は、PFドライバ122からの物理リンク操作要求の受信を契機にした処理の一例を示すフローチャートである。
図7は、物理計算機10のタイマイベント等により、リンク操作部120が定期的(所定の周期)に実行するポーリングを示す。ステップ601にて、リンク操作部120は、定期的にPF141、VF142の状態を取得することで物理リンク状態(リンクアップ状態及びリンク帯域状態)のポーリングを行う。ステップ602にて、リンク操作部120は、物理リンク状態の変更を検知したら、ハイパバイザ110のPFドライバ122に割り込みを通知する。本割り込み通知を契機にPFドライバ122は物理リンク操作要求を発行し、物理リンク状態130の更新を行うが、その詳細は図11で説明する。
図8は、PFドライバ122からの物理リンク操作要求を受信したときにリンク操作部120で実行されるフローチャートである。
ステップ701にて、リンク操作部120は、PFドライバ122から物理リンク操作要求(リンクアップ状態/リンク帯域状態の読み出し要求)を受信する。そして、ステップ702にて、リンク操作部120は、新しい物理リンク状態(リンクアップ状態/リンク帯域状態)をPFドライバ122に通知する。
図9及び図10は、NIC101の送受信部121で行われる処理の一例を示すフローチャートである。NIC101の送受信部121は定期的なポーリング、またはデータ受信を契機に処理を開始する。定期的なポーリングを契機にした送受信部121で行われる処理のフローチャートを図9に示す。データの受信を契機にして送受信部121で行われる処理の一例を示すフローチャートを図10に示す。
図9は、送受信部121の定期的なポーリング処理のフローチャートである。ステップ801にて、送受信部121は、送信キュー401のライトインデックス412を定期的(所定の周期)にポーリングする。
そして、ステップ802にて、送受信部121は、送信キュー401のリードインデックス411とライトインデックス412の値が等しいか(キューイングされている未送信データがあるか)否かを判定し、等しければステップ803に進み、等しくなければステップ805に進む。
ステップ803にて、送受信部121は、送信キュー401のイネーブルビット410がonであるか否かを判定し、onであれば(送信処理を継続する必要があれば)直ちにステップ801に復帰する。一方、イネーブルビット410がoffであれば、ステップ804にてイネーブルビット410が再びonになるまで待ち合わせ、再びonになればステップ801に復帰する。
ステップ805では、送受信部121は、リードインデックス411で指定されるエントリのアドレス420及びサイズ421フィールドで指定される主メモリ102上のデータを、NIC101から送信する(未送信データの送信処理の実行)。そして、ステップ806にて、送受信部121は、上記エントリのエラー状態806として正常終了を示す所定値(例えば、「0」)に設定する。次に、送受信部121は、ステップ807にてリードインデックス411のインクリメントを行う。その後、ステップ801に戻る。
図10は、送受信部121のデータ受信を契機にした処理のフローチャートである。ステップ901にて、送受信部121は、データをNIC101で受信する。そしてステップ902にて送受信部121は、受信キュー402のライトインデックス432がインクリメント可能か否か(受信キュー402に空きエントリがあるか否か)を判定する。そして、送受信部121は、空きエントリがあればステップ903に進み、受信データを破棄してステップ901に戻る。
一方、送受信部121は、空きエントリがあればステップ904に進む。ステップ904にて、送受信部121は、イネーブルビット430がonであるか否かを判定し、onであれば(受信処理を継続する必要があれば)ステップ906に進む。一方、イネーブルビット430がoffであれば、ステップ905にてイネーブルビット430が再びonになるまで待ち合わせる。そして、イネーブルビット430が、再びonになればステップ903に進み、受信データの破棄を行う。
ステップ906にて、送受信部121はライトインデックス432で指定されるエントリのアドレス440で指定される主メモリ102の領域(バッファ領域)に受信データをコピーする。さらに、サイズ441を受信データサイズに応じて設定し、エラー状態442として正常終了を示す値(例えば「0」)に設定する。そして、ステップ907にて送受信部121は、受信キュー402のライトインデックス432をインクリメントし、ステップ901に復帰する。
図11から図13はハイパバイザ110のPFドライバ122で行われる処理の一例を示すフローチャートである。ハイパバイザ110のPFドライバ122は、リンク操作部120からの割り込み通知を受信したときや、第一ゲストOS111−1または第二ゲストOS111−2のVFドライバ123からの仮想リンク操作要求を受信(リンクアップ状態/リンク帯域状態の読み出し要求受信)したときに、定期的なポーリングを実行する。
リンク操作部120からの割り込み通知の受信を契機にした処理のフローチャートを図11に示し、VFドライバ123からの仮想リンク操作要求の受信を契機にした処理のフローチャートを図12に示し、定期的なポーリング処理のフローチャートを図13に示す。
図11は、PFドライバ122がNIC101のリンク操作部120からの割り込み通知の受信を契機にした処理のフローチャートを示す図である。
ステップ101にて、PFドライバ122はNIC101のリンク操作部120から割り込み通知を受信する。
ステップ1002にて、PFドライバ122は、NIC101のリンク操作部120に対して、物理リンク操作要求(リンクアップ状態/リンク帯域状態の読み出し要求)を発行する。リンク操作部120は、上記図8に示したフローチャートの処理により、現在のNIC101の物理リンク状態(リンクアップ状態/リンク帯域状態)を通知してくる。PFドライバ122は、ステップ1003にて、リンク操作部120から通知されたリンクアップ状態及びリンク帯域状態を物理リンク状態130のリンクアップ状態201及びリンク帯域状態202の物理状態210、220の各フィールドに格納する。
そしてステップ1004にて、PFドライバ122は、物理リンク状態130のリンクアップ状態201及びリンク帯域状態202のそれぞれについて、物理状態210、220の各フィールドに格納された値と、通知状態211、230の各フィールドに格納された値が一致しているか否かを検査する。そして、PFドライバ122は、リンクアップ状態201とリンク帯域状態202で、不一致が検出されれば、対応する第一ゲストOS111−1もしくは第二ゲストOS111−2のVFドライバ123に割り込み通知を発行する。
図12は、PFドライバ122が、VFドライバ123から仮想リンク操作要求を受信したときに実行する処理の一例を示すフローチャートである。
ステップ1101にて、PFドライバ122は、第一ゲストOS111−1もしくは第二ゲストOS111−2のVFドライバ123から仮想リンク操作要求(リンクアップ状態/リンク帯域状態読み出し要求)を受信する。
そして、ステップ1102にて、PFドライバ122は、物理リンク状態130のリンクアップ状態201及びリンク帯域状態202のそれぞれについて、通知状態211、230が対応するフィールドの値を物理状態210の値に更新する(各ゲストOSへ通知した最新状態の値を保存しておく)。そして、ステップ1103にてPFドライバ122は、上記更新した値を各ゲストOS111のVFドライバ123に通知する。
図11及び図12に示すように、ハイパバイザのPFドライバ122は、第一ゲストOS111−1もしくは第二ゲストOS111−2のVFドライバ123に対して、仮想リンク操作要求/割り込み通知のインタフェースで接続しており、このインタフェースはPFドライバ122とNIC101のリンク操作部120との間のインタフェースと同様である。すなわち、PFドライバ122はリンク操作部120をエミュレートすることで、VFドライバ123が同一NIC101を共有しているにも関わらず、通常のNICと同様の手順でのリンク操作を可能にしている。
図13は、PFドライバ122の定期的(周期的)なポーリング処理のフローチャートを示す図である。ステップ1201にてPFドライバ122は定期的に起動し、BMC104のハイパバイザ状態格納領域133のカウンタ501をインクリメントする。そしてステップ1202にて一定時間スリープする。上記処理を周期的に繰り返すことで、ハイパバイザ110が稼働していれば、周期的にカウンタ501が加算されることになる。
図14から図16は第一ゲストOS111−1もしくは第二ゲストOS111−2のVFドライバ123のフローチャートを示す図である。VFドライバ123は、ハイパバイザ110のPFドライバ122からの割り込み通知、データ送信処理の開始、定期的なポーリングを契機に稼働を開始する。PFドライバ122からの割り込み通知を契機にした処理のフローチャートを図14に、データ送信処理開始を契機にした処理のフローチャートを図15に、定期的なポーリングを契機にした処理のフローチャートを図16に示す。
図14は、VFドライバ123が、PFドライバ122からの割り込み通知を受信したときに実行する処理の一例を示すフローチャートである。
ステップ1301にて、VFドライバ123は、PFドライバ122からの割り込み通知を受信する。そしてステップ1302にて、VFドライバ123は、PFドライバ122に対して仮想リンク操作要求(リンクアップ状態/リンク帯域状態の読み出し要求)を発行する。PFドライバ122は、上記図12に記載した手順に従い、現在のPF141、VF142のリンクアップ状態/リンク帯域状態を通知してくるので、ステップ1303にて、VFドライバ123は、受信した各状態の値を仮想リンク状態131のリンクアップ状態301及びリンク帯域状態302に設定する。
以上の処理により、各ゲストOS111毎の仮想リンク状態131は、当該ゲストOS111に割り当てられたVF142の現在のリンクアップ状態とリンク帯域状態で更新される。
図15は、第二ゲストOS111−2のVFドライバ123が、データ送信の開始を契機にして実行する処理の一例を示すフローチャートである。ステップ1401にて、第二ゲストOS111−2のVFドライバ123は、仮想リンク状態131のリンクアップ状態301フィールドにリンクアップ状態が格納されているか(リンクアップ状態と認識しているか)否かを判定する。そして、リンクアップ状態が格納されていなければステップ1402に進んでVFドライバ123は送信エラーを第二ゲストOS111−2に応答する。
次にステップ1403では、第二ゲストOS111−2のVFドライバ123がキンを介して監視部124から強制停止要求(NIC101の利用停止の通知)を受信したか否か(ハイパバイザ110に障害が発生しているため、第二ゲストOS111−2からのさらなるデータ送信処理開始が抑制されているか否か)を判定する。監視部124から強制停止要求を受信済みであれば、第2ゲストOS111−1のVFドライバ123はステップ1404に進んで送信エラーをゲストOS111−2へ応答する。
次にステップ1405にて、第二ゲストOS111−2のVFドライバ123は、送信キュー401のライトインデックス412がインクリメント可能か否か(送信キュー401に空きエントリがあるか否か)を判定する。空きエントリがなければステップ1406に進んで送信エラーを第二ゲストOS111−2へ応答する。
さらに、ステップ1407にて、第二ゲストOS111−2のVFドライバ123は、送信データを主メモリ102に確保したバッファ領域にコピーし、当該バッファ領域のアドレス及びサイズを、ライトインデックス412で指定されるアドレス420/サイズ421のフィールドに設定する。そしてステップ1408にて、VFドライバ123は、ライトインデックス412をインクリメントする。
なお、第一ゲストOS111−1のVFドライバ123も上記ステップ1401〜1408の処理を送信開始時に実行する。ただし、第一ゲストOS111−1のVFドライバ123は、ハイパバイザ110に障害が発生しても通信を停止しないので、ステップ1403の処理は実行する必要は無い。
図16は、VFドライバ123の定期的(周期的)なポーリング処理のフローチャートを示す図である。ステップ1501にて、VFドライバ123は、受信キュー402のライトインデックス432の値を定期的にポーリングする。
そしてステップ1502にてVFドライバ123は、リードインデックス431とライトインデックス432の値が一致しているか否か(未受信のデータがエンキューされているか否か)を判定する。一致している場合(未受信データがない場合)にはステップ1501に戻るが、リードインデックス431とライトインデックス432の値が一致していない場合(未受信データが存在する場合)にはステップ1503に進む。
ステップ1503にて、VFドライバ123は、ライトインデックス432で指定されるエントリのエラー状態442フィールドが正常終了(例えば、0)であることを判定した後、アドレス440/サイズ441のフィールドで指定される主メモリ102上のバッファ領域のデータを受信する。
そしてステップ1504にて、VFドライバ123は、新たなバッファ領域を確保し、当該バッファ領域のアドレスをアドレス440のフィールドに設定する。さらにステップ1505にてVFドライバ123は、リードインデックス431をインクリメントする。
上記処理により、NIC101が受信して受信キュー402に保持されたデータをVFドライバ123で読み込む(受信)することができる。
図17及び図18は、第一ゲストOS111−1のサブPFドライバ122Aの監視部124及びフェイルオーバ部125で行われる処理の一例を示すフローチャートである。
サブPFドライバ122Aは、監視部124及びフェイルオーバ部125を稼働させる。そして、ハイパバイザ110に障害が発生したときには、図11及び図12に示すPFドライバ122と同様の処理を実行する。
図17は、監視部124で行われる処理の一例を示すフローチャートである。監視部124はBMCを定期的(または周期的)にポーリングする。ステップ1601にて、監視部124は、BMC104のハイパバイザ状態格納領域133のカウンタ501の値を定期的に取得する。そしてステップ1602にて、当該カウンタ501のカウントアップが一定時間以上停止しているか否かを判定する。カウンタ501のカウントアップが一定時間以上停止していなければハイパバイザ110は正常に稼動中であると判定し、ステップ1601に戻る。
一方、カウンタ501のカウントアップが一定時間以上停止していれば、ハイパバイザ110に異常が発生したと判定し、ステップ1603にて第二ゲストOS111−2に強制停止要求を送信した後、ステップ1604にてフェイルオーバ部125を起動する。
ここで、第二ゲストOS111−2への強制停止要求は、ハイパバイザ110に異常が発生したため、第二ゲストOS111−2からのさらなるデータ送信処理開始を抑制するものである。このため、緊急リンク150を介して通知する。なお、ゲストOSが複数ある場合には、緊急リンク150もゲストOSの数に応じて複数設定される。そして、複数のゲストOS111−2〜nへの強制停止要求は、NIC101(I/Oデバイス)の利用停止を含むものである。
図18は、フェイルオーバ部125で行われる処理の一例を示すフローチャートである。フェイルオーバ部は図17のステップ1604での監視部124からの起動を契機に処理を開始する。
フェイルオーバ部125は、実行中のネットワークI/Oが完全に完了するまでの待ち合わせ(ステップ1701〜ステップ1703)と、物理リンク状態130の主メモリ102上での再構成(ステップ1704〜ステップ1706)と、ハイパバイザ110及び第二ゲストOS111−2のソフトリセット(ステップ1707)を行う。
そして、サブPFドライバ122Aが物理リンク状態130Aの再構成を行い、かつ、ハイパバイザ110の障害発生時には第一ゲストOS111−1は仮想リンク操作要求の発行をPFドライバ122に対してではなくサブPFドライバ122Aに対して行うことにより、第一ゲストOS111−1のVFドライバ123は、ハイパバイザ110に障害が発生した後も、仮想リンク操作(リンクアップ状態/リンク帯域状態の読み出し)を行うことができる。送受信処理は図15及び図16に示した通りハイパバイザ110を介さずに行うので、ハイパバイザに障害が発生した後も、第一ゲストOS111−1のVFドライバ123は、NIC101を介したネットワークとのI/Oを継続できる。
また、実行中のネットワークI/Oを完全に完了するまで待ち合わせてからハイパバイザ110及び第二ゲストOS111−2のソフトリセットを行うことで、ハイパバイザ110及び第二ゲストOS111−2の再起動中に、これらが使用するメモリ領域が実行中のネットワークI/Oにより破壊されないことを保証できる。この結果、ハイパバイザ110や第二ゲストOS111−2の再起動後に、ハイパバイザ110や第二ゲストOS111−2の正常な稼働の再開を保証でき、再起動後には図2記載の構成での再稼働を実現できる。
フェイルオーバ部125はステップ1701にてすべての第二ゲストOS111−2用の受信キュー402のイネーブルビット430をoffにする。これにより、新しいデータ受信により主メモリ102の内容が更新されること(図10のステップ906の実行)を防げる。
さらに、ステップ1702にて、フェイルオーバ部125は第二ゲストOS111−2用のすべての送信キュー401及び受信キュー402において、リードインデックス411、431とライトインデックス412、432が同じ値になるまで待ち合わせる。これにより実行中のデータ送信及び受信が完全に停止したことを保証できる。さらにステップ1703にて送信キュー401のイネーブルビット410をオフにする。次にステップ1704にて、NIC101のリンク操作部120に対して物理リンク操作要求(リンクアップ状態/リンク帯域状態の読み出し要求)を発行し、リンクアップ状態/リンク帯域状態を取得する。
そしてステップ1705にて、フェイルオーバ部125は、上記取得した値をサブPFドライバ用の物理リンク状態130Aに存在するリンクアップ状態201/リンク帯域状態202の物理状態210の各フィールドに設定する。
さらに、フェイルオーバ部125は、ステップ1706にて、サブPFドライバ122A用の物理リンク状態130Aの通知状態211、230の再構成を行う。当該フィールドの第一ゲストOS111−1分のデータは第一ゲストOS111−1用の仮想リンク状態131のリンクアップ状態301及びリンク帯域状態302の値をコピーする。
また、それ以外の第二ゲストOS111−2分のリンクアップ状態はリンクダウン状態に設定する。最後にステップ1707にて、ハイパバイザ110及び第二ゲストOS111−2のソフトリセットを行う。
<まとめ>
本発明では、ハイパバイザ110と、第一ゲストOS111−1と第二ゲストOS111−2が主メモリ102及びNIC101を共有する仮想計算機システムで、I/OデバイスとしてのNIC101はSR−IOVに準拠する。
そして、NIC101(I/Oデバイス)のデータの送受信に関しては、第一ゲストOS111−1と第二ゲストOS111−2は、直接、主メモリ102上のNIC101の送受信キューを介して送受信要求を発行する(ハイパバイザ110を介してデータの送受信は行わない)。
しかし、NIC101のリンク状態の取得に関しては、ハイパバイザ110はNIC101が提供するリンク状態を取得するインタフェースをエミュレートし、第一ゲストOS111−1と第二ゲストOS111−2はハイパバイザ110を介してリンク状態の取得要求を発行し、ハイパバイザ110からリンク状態を取得する。
上記エミュレーションのため、ハイパバイザ110は、「現リンク状態」の他に、ゲストOS111毎の「通知済みリンク状態」を主メモリ102上で管理する。「現リンク状態」はハイパバイザ110が、NIC101に対してリンク状態の取得要求を発行し、取得したリンク状態を設定する。
一方、「通知済みリンク状態」は、第一ゲストOS111−1または第二ゲストOS111−2が上記リンク状態の取得インタフェースを介してリンク状態の取得要求を発行した際に、「現リンク状態」の値を第一ゲストOS111−1または第二ゲストOS111−2に通知すると共に、「現リンク状態」と同じ値に同期しておく。
一方、第一ゲストOS111−1または第二ゲストOS111−2は、通知されたリンク状態の値を「認識されたリンク状態」として主メモリ102上に保存する。
この構成でハイパバイザ110に障害が発生した際に、第一ゲストOS111−1がNIC101を介したネットワークI/Oを継続させる。データの送受信については、主メモリ102に予め設定された送受信キュー132を使用するので、ハイパバイザ110を介して送受信を行わないので問題なく継続できる。しかし、第一ゲストOS111−1のVFドライバ123からリンク状態の取得は継続できなくなる。
そのため、本発明では、第一ゲストOS111−1がハイパバイザ110の稼動監視を定期的に行い、監視部124がハイパバイザ110の異常を検知したときには、第一ゲストOS111−1のフェイルオーバ部125が、サブPFドライバ122Aを起動してサブPFドライバ122A用の物理リンク状態130Aを構築する。物理リンク状態130Aは、「現リンク状態」(図3の物理状態)及び「通知済みリンク状態」(図3の通知状態)の再構成を実行する。
「現リンク状態」は第一ゲストOS111−1が、VFドライバ123からサブPFドライバ122Aを介して、直接NIC101に対してリンク状態の取得要求を発行することで取得する。
また、「通知済みリンク状態」は第一ゲストOS111−1が管理している「認識されたリンク状態」のコピーをサブPFドライバ122Aの物理リンク状態130Aに設定する。そして、以降の第一ゲストOS111−1によるリンク状態取得要求の発行は、ハイパバイザ110に対してではなく、自分自身(サブPFドライバ122A)に対して行うことで、リンク状態取得の継続(及びネットワークI/Oの継続)が可能になる。つまり、第一ゲストOS111−1のVFドライバ123は、サブPFドライバ122AからI/Oデバイスの提供を受けて、I/Oデバイスを操作することができ、I/O処理を継続することができる。
さらに、第一ゲストOS111−1のサブPFドライバ122Aは、障害が発生したハイパバイザ110が管理するPFドライバ122の物理リンク状態130を用いずに、第一ゲストOS111−1のサブPFドライバ122Aでは、PFドライバ122のフェイルオーバ部125が物理リンク状態130Aを再構成する。
このとき、継続して稼働する第一ゲストOS111−1は、ハイパバイザ110が提供するPFドライバ122を、自己のサブPFドライバ122Aに切替えるだけであるので、データの移動などは不要であるので、極めて高速に切替えることができる。
ここで、障害が発生したハイパバイザ110の物理リンク状態130は、障害の影響を受けている可能性がある。これにより、本発明では、障害の影響を受けた可能性のある物理リンク状態130を用いずに、第一ゲストOS111−1でI/Oデバイスの入出力を継続するため、安定した稼働を確保できる。
また、本発明では、第一ゲストOS111−1とその他のゲストOS111−2〜nを接続する緊急リンク150を設けることで、ハイパバイザ110に障害が発生しても、第一ゲストOS111−1のVFドライバ123は、他のゲストOS111−2〜nにI/O処理の強制停止を通知することが可能となる。
その後、第一ゲストOS111−1以外のゲストOS111−2〜nと、ハイパバイザ110をソフトウェアリセットすることで再起動し、障害の回復を行うことができる。
また、第一ゲストOS111−1のVFドライバ123のフェイルオーバ部125は、他のゲストOS111−2〜n及びハイパバイザ110に対して、強制停止の指令を送信するが、各ゲストOS111−2〜nでI/Oデバイスの送受信が完了するのを待ち合わせる。これにより、各ゲストOS111−1〜111−nに於けるI/Oトランザクションが全て完了した後に、ゲストOS111とハイパバイザ110をソフトウェアリセットすることで、送受信データに障害を与えるのを防止できる。つまり、物理的なI/OデバイスのI/Oトランザクションが全て完了してから、ゲストOS111とハイパバイザ110をソフトウェアリセットすることになる。
また、本発明では、サブPFドライバ122Aを有する第一ゲストOS111−1が稼働する第1の仮想計算機11−1に、重要な業務を提供するアプリケーションまたはサービスを配置することで、ハイパバイザ110に障害が発生した場合でも、業務を継続する可能となり、冗長性を確保することができる。例えば、第1の仮想計算機11−1で、SANストレージを制御するストレージ制御OSを第一ゲストOS111−1として稼働させ、その他の仮想計算機11−2〜nでは、SANストレージを利用するゲストOS111を稼働させる。この例では、ハイパバイザ110に障害が発生しても、第1の仮想計算機11−1のストレージ制御OSは停止することがないので、冗長性に優れた仮想計算機システムを提供することが可能となる。
実施例1では、フェイルオーバ部125の起動時に、サブPFドライバ122A用の物理リンク状態130の再構成を行った。実施例2では、PFドライバ122がPFドライバ122用の物理リンク状態130を更新するたびに、サブPFドライバ122A用の物理リンク状態130Aも同様に更新する。これにより、上記実施例1に示した再構成が不要になり、フェイルオーバ処理をより迅速に行うことが可能になる。
実施例2は、前記実施例1と同様の構成であり、処理の一部が相違する。実施例1との相違点は、PFドライバ122が割り込み通知を受信したときの処理(図19)と、PFドライバ122が仮想リンク操作要求の受信を契機にした処理(図20)と、フェイルオーバ部125の処理(図21)について、以下これらについて説明する。
図19は、PFドライバ122がNIC101のリンク操作部120からの割り込み通知を受信したときに行われる処理のフローチャートである。このフローチャートは、前記実施例1の図11に記載したフローチャートに対して、ステップ1003の代わりにステップ1803を実行する点である。
ステップ1803では、リンク操作部120から通知されたリンクアップ状態及びリンク帯域状態を、PFドライバ122用の物理リンク状態130のリンクアップ状態201及びリンク帯域状態202の物理状態210、220の各フィールドに格納し、これらの値を第一ゲストOS111−1111−1に通知する。そして第一ゲストOS111−1111−1は、これらの値をサブPFドライバ122A用の物理リンク状態130Aの各フィールドに格納する。
以上の処理により、サブPFドライバ122Aの物理リンク状態130Aは、第一ゲストOS111−1111−1がPFドライバ122から受信したリンクアップ状態及びリンク帯域状態で更新される。したがって、PFドライバ122の物理リンク状態130と、サブPFドライバ122Aの物理リンク状態130Aは、リンク操作部120から通知されたリンクアップ状態及びリンク帯域状態で同期することができる。
図20は、PFドライバ122がVFドライバ123からの仮想リンク操作要求を受信したときに行われる処理のフローチャートである。このフローチャートは、前記実施例1の図12に記載したフローチャートに対して、ステップ1102の代わりにステップ1902を実行する点である。
ステップ1902では、PFドライバ122用の物理リンク状態130のリンクアップ状態201及びリンク帯域状態202のそれぞれについて、通知状態211、230の対応するフィールドの値を物理状態210の値で更新する(各ゲストOSへ通知した最新状態の値を保存しておく)。そして、PFドライバ122は、これらの値を第一ゲストOS111−1111−1に通知する。第一ゲストOS111−1111−1はサブPFドライバ122A用の物理リンク状態130に関して同様の更新を行い、サブPFドライバ122A用の物理リンク状態130のリンクアップ状態201及びリンク帯域状態202をPFドライバ122から受信した値で更新する。
図21は、サブPFドライバ122Aのフェイルオーバ部125で行われる処理のフローチャートである。このフローチャートは、前記実施例1の図18に記載したフローチャートに対して、ステップ1704からステップ1706を実行する代わりにステップ2001を実行する点である。
ステップ2001では、フェイルオーバ部125が、サブPFドライバ122A用の物理リンク状態130Aのリンクアップ状態201の各フィールドについて、第二ゲストOS111−2111−2分(例えば、図中VF2)の通知状態211のフィールドの値をリンクダウンに設定する。なお、リンクダウンに設定する通知状態211のフィールドは、第一ゲストOS111−1111−1以外のVFドライバ123が利用しているVF142である。
サブPFドライバ122A用の物理リンク状態130Aの他フィールドに関しては、図19に示したステップ1803及び図20に示したステップ1902にて上述のように既に設定されているので、フェイルオーバ部125が改めて設定する必要はない。
以上の処理により、実施例2においても、障害が発生したハイパバイザ110の物理リンク状態130を複製することなく、第一ゲストOS111−1111−1ではリンク操作部120からの通知に応じて同期していた物理リンク状態130AをサブPFドライバ122Aが用いる。これにより、ハイパバイザ110に障害が発生した場合でも、第一ゲストOS111−1111−1のVFドライバ123でI/O処理を停止することなく、I/O処理を継続して業務やサービスの提供を継続することが可能となる。
なお、上記各実施例では、I/OデバイスとしてNIC101を用いる例を示したが、SR−IOVに対応したI/Oデバイスであれば良く、例えば、SR−IOVに対応したHBAやCNA(Converged Network Adapter)に適用することができる。
また、前記実施例1、2では、ハイパバイザ110の障害を、BMC104のカウンタ502により検出する例を示したが、ハイパバイザ110のハートビートなど公知または周知の手法を適用することができ、上記に限定されるものではない。また、ハイパバイザ110の障害の監視は、第1ゲストOS111−1のサブPFドライバ122Aの監視部124nが実行する例を示したが、これに限定されるものではなく、監視部124はサブPFドライバ122Aではなく第一ゲストOS111−1で稼働すれば良い。
なお、本発明において説明した計算機等の構成、処理部及び処理手段等は、それらの一部又は全部を、専用のハードウェアによって実現してもよい。
また、本実施例で例示した種々のソフトウェアは、電磁的、電子的及び光学式等の種々の記録媒体(例えば、非一時的な記憶媒体)に格納可能であり、インターネット等の通信網を通じて、コンピュータにダウンロード可能である。
また、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明をわかりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。
101 NIC101
102 主メモリ102
103 CPU
104 BMC
110 ハイパバイザ
111 第一ゲストOS111−1
112 第二ゲストOS111−2
120 リンク操作部
121 送受信部
122 PFドライバ
122A サブPFドライバ
123 VFドライバ
124 監視部
125 フェイルオーバ部
130 物理リンク状態
131 仮想リンク状態
132 送受信キュー
133 ハイパバイザ状態格納領域

Claims (14)

  1. プロセッサとメモリ及びI/Oデバイスを備えた計算機で、ハイパバイザと第1のゲストOSが前記I/Oデバイスを共有するI/Oデバイスの制御方法であって、
    前記I/Oデバイスは、物理機能と仮想機能を有し、前記ハイパバイザは、前記物理機能を利用する物理ドライバを有し、前記第1のゲストOSは、前記仮想機能を利用する仮想ドライバを有し、
    前記方法は、
    前記ハイパバイザが、前記物理ドライバを介して前記I/Oデバイスの状態を取得する第1のステップと、
    前記第1のゲストOSが、前記ハイパバイザを監視して、前記ハイパバイザが所定の状態になったか否かを判定する第2のステップと、
    前記第1のゲストOSが、前記ハイパバイザが所定の状態になったと判定したときには、前記I/Oデバイスを操作するサブ物理ドライバを起動する第3のステップと、
    前記第1のゲストOSは、前記メモリ上に予め設定したキューを介して送受信を行う第4のステップと、
    を含むことを特徴とするI/Oデバイスの制御方法。
  2. 請求項1に記載のI/Oデバイスの制御方法であって、
    前記第2のステップは、
    前記第1のゲストOSが、前記ハイパバイザを監視して、前記ハイパバイザが所定の状態として異常が発生したか否かを判定し、
    前記第3のステップは、
    前記第1のゲストOSが、前記ハイパバイザに異常が発生したと判定したときには、前記I/Oデバイスを操作するサブ物理ドライバを起動することを特徴とするI/Oデバイスの制御方法。
  3. 請求項1に記載のI/Oデバイスの制御方法であって、
    前記第3のステップは、
    前記第1のゲストOSが、前記仮想ドライバから前記サブ物理ドライバを介して前記I/Oデバイスの状態を取得するステップを含み、
    前記仮想ドライバから前記サブ物理ドライバを介して前記I/Oデバイスから取得する状態として、前記物理機能及び仮装機能毎のリンク状態と帯域状態とを含むことを特徴とするI/Oデバイスの制御方法。
  4. 請求項3に記載のI/Oデバイスの制御方法であって、
    前記第3のステップは、
    前記第1のゲストOSが、前記サブ物理ドライバを起動した後に、前記物理機能及び仮装機能毎のリンク状態と帯域状態とを取得することを特徴とするI/Oデバイスの制御方法。
  5. 請求項1に記載のI/Oデバイスの制御方法であって、
    前記第1のステップは、
    前記ハイパバイザが、前記物理ドライバを介して前記I/Oデバイスの状態を取得し、前記取得した状態を、前記第1のゲストOSに通知するステップと、
    前記第1のゲストOSは、前記ハイパバイザから受信した前記状態で前記サブ物理ドライバが利用する状態を更新するステップと、を含み、
    前記第3のステップは、
    前記第1のゲストOSは、前記更新された前記状態で前記サブ物理ドライバを起動することを特徴とするI/Oデバイスの制御方法。
  6. 請求項2に記載のI/Oデバイスの制御方法であって、
    前記I/Oデバイスは、前記ハイパバイザと前記第1のゲストOSに加えて第2のゲストOSで共有され、さらに、前記第1のゲストOSと第2のゲストOSが通信する緊急リンクを有し、
    前記第2のステップは、
    前記第1のゲストOSが、前記ハイパバイザを監視して、前記ハイパバイザが所定の状態として異常が発生したか否かを判定し、
    前記第1のゲストOSが、前記ハイパバイザに異常が発生したと判定したときには、前記第2のゲストOSにI/Oデバイスの利用の停止を前記緊急リンクを介して通知することを特徴とするI/Oデバイスの制御方法。
  7. 請求項6に記載のI/Oデバイスの制御方法であって、
    前記第1のゲストOSが、前記ハイパバイザに異常が発生したと判定したときには、前記第2のゲストOSのI/Oトランザクションが完了した後に、前記第2のゲストOSと前記ハイパバイザをソフトウェアリセットすることを特徴とするI/Oデバイスの制御方法。
  8. プロセッサとメモリ及びI/Oデバイスを備えた計算機で、ハイパバイザと第1のゲストOSが前記I/Oデバイスを共有する仮想計算機システムであって、
    前記I/Oデバイスは、物理機能と仮想機能を有し、
    前記ハイパバイザは、
    前記物理機能を利用する物理ドライバを有し、当該物理ドライバを介して前記I/Oデバイスの状態を取得し、
    前記第1のゲストOSは、
    前記仮想機能を利用する仮想ドライバと、
    前記ハイパバイザを監視して、前記ハイパバイザが所定の状態になったか否かを判定する監視部と、
    前記ハイパバイザが所定の状態になったと判定したときには、前記I/Oデバイスを操作するサブ物理ドライバを起動するフェイルオーバ部と、
    前記メモリ上に予め設定されて送受信を行うキューと、
    を備えたことを特徴とする仮想計算機システム。
  9. 請求項8に記載の仮想計算機システムであって、
    前記監視部は、
    前記所定の状態としてハイパバイザに異常が発生したか否かを判定し、
    前記フェイルオーバ部は、
    前記ハイパバイザに異常が発生したと判定したときには、前記I/Oデバイスを操作するサブ物理ドライバを起動することを特徴とする仮想計算機システム。
  10. 請求項8に記載の仮想計算機システムであって、
    前記フェイルオーバ部は、
    前記仮想ドライバから前記サブ物理ドライバを介して取得する前記I/Oデバイスの状態として、前記物理機能及び仮装機能毎のリンク状態と帯域状態とを含むことを特徴とする仮想計算機システム。
  11. 請求項10に記載の仮想計算機システムであって、
    前記フェイルオーバ部は、
    前記サブ物理ドライバを起動した後に、前記物理機能及び仮装機能毎のリンク状態と帯域状態とを取得することを特徴とする仮想計算機システム。
  12. 請求項8に記載の仮想計算機システムであって、
    前記ハイパバイザは、
    前記物理ドライバを介して前記I/Oデバイスの状態を取得し、前記取得した状態を、前記第1のゲストOSに通知し、
    前記第1のゲストOSは、
    前記ハイパバイザから受信した状態で前記サブ物理ドライバが利用する状態を物理リンク状態として更新し、
    前記フェイルオーバ部は、
    前記更新された前記物理リンク状態で前記サブ物理ドライバを起動することを特徴とする仮想計算機システム。
  13. 請求項9に記載の仮想計算機システムであって、
    前記I/Oデバイスは、前記ハイパバイザと前記第1のゲストOSに加えて第2のゲストOSで共有され、さらに、前記第1のゲストOSと第2のゲストOSが通信する緊急リンクを有し、
    前記監視部は、
    前記ハイパバイザを監視して、前記ハイパバイザが所定の状態として異常が発生したか否かを判定し、
    前記フェイルオーバ部は、
    前記監視部で前記ハイパバイザに異常が発生したと判定したときには、前記第2のゲストOSにI/Oデバイスの利用の停止を前記緊急リンクを介して通知することを特徴とする仮想計算機システム。
  14. 請求項13に記載の仮想計算機システムであって、
    前記フェイルオーバ部が、
    前記ハイパバイザに異常が発生したと判定したときには、前記第2のゲストOSのI/Oトランザクションが完了した後に、前記第2のゲストOSと前記ハイパバイザをソフトウェアリセットすることを特徴とする仮想計算機システム。
JP2012257255A 2012-11-26 2012-11-26 I/oデバイスの制御方法及び仮想計算機システム Expired - Fee Related JP5874879B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2012257255A JP5874879B2 (ja) 2012-11-26 2012-11-26 I/oデバイスの制御方法及び仮想計算機システム
US14/083,493 US9430266B2 (en) 2012-11-26 2013-11-19 Activating a subphysical driver on failure of hypervisor for operating an I/O device shared by hypervisor and guest OS and virtual computer system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012257255A JP5874879B2 (ja) 2012-11-26 2012-11-26 I/oデバイスの制御方法及び仮想計算機システム

Publications (2)

Publication Number Publication Date
JP2014106587A JP2014106587A (ja) 2014-06-09
JP5874879B2 true JP5874879B2 (ja) 2016-03-02

Family

ID=50774499

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012257255A Expired - Fee Related JP5874879B2 (ja) 2012-11-26 2012-11-26 I/oデバイスの制御方法及び仮想計算機システム

Country Status (2)

Country Link
US (1) US9430266B2 (ja)
JP (1) JP5874879B2 (ja)

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10514938B2 (en) 2012-12-18 2019-12-24 Dynavisor, Inc. Making direct calls to a native device driver of a hypervisor using dynamic device driver virtualization
JP2015076643A (ja) * 2013-10-04 2015-04-20 富士通株式会社 制御プログラム、制御装置および制御方法
WO2015081308A2 (en) 2013-11-26 2015-06-04 Dynavisor, Inc. Dynamic i/o virtualization
US9335986B1 (en) * 2013-12-11 2016-05-10 Amazon Technologies, Inc. Hot patching to update program code and/or variables using a separate processor
US10031767B2 (en) * 2014-02-25 2018-07-24 Dynavisor, Inc. Dynamic information virtualization
CN106068501A (zh) * 2014-03-07 2016-11-02 三菱电机株式会社 计算机装置和计算机机构
US9612926B2 (en) * 2014-05-15 2017-04-04 International Business Machines Corporation Host swap hypervisor that provides high availability for a host of virtual machines
US9569242B2 (en) * 2014-07-16 2017-02-14 International Business Machines Corporation Implementing dynamic adjustment of I/O bandwidth for virtual machines using a single root I/O virtualization (SRIOV) adapter
KR102309798B1 (ko) * 2015-04-16 2021-10-06 삼성전자주식회사 Sr-iov 기반 비휘발성 메모리 컨트롤러 및 그 비휘발성 메모리 컨트롤러에 의해 큐에 리소스를 동적 할당하는 방법
CN106656539A (zh) * 2015-11-04 2017-05-10 中兴通讯股份有限公司 一种网口状态检测和同步方法及装置
CN106933753B (zh) 2015-12-31 2020-04-21 华为技术有限公司 智能接口卡的控制方法及装置
US10042720B2 (en) 2016-02-22 2018-08-07 International Business Machines Corporation Live partition mobility with I/O migration
US10002018B2 (en) 2016-02-23 2018-06-19 International Business Machines Corporation Migrating single root I/O virtualization adapter configurations in a computing system
US10042723B2 (en) 2016-02-23 2018-08-07 International Business Machines Corporation Failover of a virtual function exposed by an SR-IOV adapter
US10025584B2 (en) 2016-02-29 2018-07-17 International Business Machines Corporation Firmware management of SR-IOV adapters
US10127068B2 (en) * 2016-06-30 2018-11-13 Amazon Technologies, Inc. Performance variability reduction using an opportunistic hypervisor
US9720862B1 (en) 2016-10-21 2017-08-01 International Business Machines Corporation Migrating interrupts from a source I/O adapter of a computing system to a destination I/O adapter of the computing system
US9760512B1 (en) 2016-10-21 2017-09-12 International Business Machines Corporation Migrating DMA mappings from a source I/O adapter of a source computing system to a destination I/O adapter of a destination computing system
US9715469B1 (en) 2016-10-21 2017-07-25 International Business Machines Corporation Migrating interrupts from a source I/O adapter of a source computing system to a destination I/O adapter of a destination computing system
US9785451B1 (en) 2016-10-21 2017-10-10 International Business Machines Corporation Migrating MMIO from a source I/O adapter of a computing system to a destination I/O adapter of the computing system
US9740647B1 (en) 2016-10-21 2017-08-22 International Business Machines Corporation Migrating DMA mappings from a source I/O adapter of a computing system to a destination I/O adapter of the computing system
US9720863B1 (en) 2016-10-21 2017-08-01 International Business Machines Corporation Migrating MMIO from a source I/O adapter of a source computing system to a destination I/O adapter of a destination computing system
US9785519B1 (en) 2017-02-16 2017-10-10 Red Hat Israel, Ltd. Driver switch for device error recovery for assigned devices
US11055186B2 (en) * 2018-11-27 2021-07-06 Red Hat, Inc. Managing related devices for virtual machines using robust passthrough device enumeration
JP7400587B2 (ja) * 2020-03-30 2023-12-19 横河電機株式会社 通信処理装置、プログラム、及び通信処理方法
US11775329B1 (en) * 2020-12-30 2023-10-03 Virtuozzo International Gmbh System and method for reducing virtual machine live migration downtime
JP2022174784A (ja) 2021-05-12 2022-11-25 日立Astemo株式会社 電子制御装置及び異常判定方法

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5437033A (en) 1990-11-16 1995-07-25 Hitachi, Ltd. System for recovery from a virtual machine monitor failure with a continuous guest dispatched to a nonguest mode
JP3655484B2 (ja) * 1999-03-05 2005-06-02 株式会社日立製作所 論理区画式計算機システム
JP4256693B2 (ja) * 2003-02-18 2009-04-22 株式会社日立製作所 計算機システム、i/oデバイス及びi/oデバイスの仮想共有方法
US7383555B2 (en) * 2004-03-11 2008-06-03 International Business Machines Corporation Apparatus and method for sharing a network I/O adapter between logical partitions
US7546398B2 (en) * 2006-08-01 2009-06-09 International Business Machines Corporation System and method for distributing virtual input/output operations across multiple logical partitions
US8141094B2 (en) * 2007-12-03 2012-03-20 International Business Machines Corporation Distribution of resources for I/O virtualized (IOV) adapters and management of the adapters through an IOV management partition via user selection of compatible virtual functions
US9135044B2 (en) * 2010-10-26 2015-09-15 Avago Technologies General Ip (Singapore) Pte. Ltd. Virtual function boot in multi-root I/O virtualization environments to enable multiple servers to share virtual functions of a storage adapter through a MR-IOV switch
JP5585844B2 (ja) * 2011-03-25 2014-09-10 株式会社日立製作所 仮想計算機の制御方法及び計算機
US9218195B2 (en) * 2011-05-17 2015-12-22 International Business Machines Corporation Vendor-independent resource configuration interface for self-virtualizing input/output device
US9311127B2 (en) * 2011-12-16 2016-04-12 International Business Machines Corporation Managing configuration and system operations of a shared virtualized input/output adapter as virtual peripheral component interconnect root to single function hierarchies
CN104321748B (zh) * 2012-06-29 2018-02-02 英特尔公司 用于捕捉轻量虚拟机管理器中的错误条件的方法、系统和装置

Also Published As

Publication number Publication date
US20140149985A1 (en) 2014-05-29
JP2014106587A (ja) 2014-06-09
US9430266B2 (en) 2016-08-30

Similar Documents

Publication Publication Date Title
JP5874879B2 (ja) I/oデバイスの制御方法及び仮想計算機システム
TWI752066B (zh) 讀寫請求處理方法及裝置
US8645755B2 (en) Enhanced error handling for self-virtualizing input/output device in logically-partitioned data processing system
US9606745B2 (en) Storage system and method for allocating resource
JP4295184B2 (ja) 仮想計算機システム
US8141093B2 (en) Management of an IOV adapter through a virtual intermediary in an IOV management partition
US8359415B2 (en) Multi-root I/O virtualization using separate management facilities of multiple logical partitions
JP5585844B2 (ja) 仮想計算機の制御方法及び計算機
EP2577450B1 (en) Virtual machine migration techniques
JP5332000B2 (ja) 複合型計算機装置、複合型計算機の管理方法及び管理サーバ
US10922135B2 (en) Dynamic multitasking for distributed storage systems by detecting events for triggering a context switch
US8713362B2 (en) Obviation of recovery of data store consistency for application I/O errors
US8788873B2 (en) Server input/output failover device serving highly available virtual devices
US7925817B2 (en) Computer system and method for monitoring an access path
JP2004342109A (ja) 入出力ファブリックにおけるハードウェア・エラーからの自動回復
TW200817920A (en) Method, apparatus, and computer usable program code for migrating virtual adapters from source physical adapters to destination physical adapters
EP2518627B1 (en) Partial fault processing method in computer system
WO2012004902A1 (ja) 計算機システム及び計算機システムの系切替制御方法
US20180341536A1 (en) Distributed input/output virtualization
US9529656B2 (en) Computer recovery method, computer system, and storage medium
US8499112B2 (en) Storage control apparatus
US9110731B1 (en) Hard allocation of resources partitioning
JP2016536697A (ja) コンピュータシステム及びデータを双方向に送受信する方法
KR20190052440A (ko) 가상 머신 프로세서의 원격 처리 장치 및 방법
JP2015201008A (ja) 情報処理装置,情報処理プログラム及び情報処理方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20141107

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150311

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150317

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150512

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: 20151222

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160105

R150 Certificate of patent or registration of utility model

Ref document number: 5874879

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees