(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0019】
以下、本発明の一実施例を添付図面に基づいて説明する。
【0020】
図1は、本発明の実施例を示し、マルチコアプロセッサを有するひとつのハードウェア上にファイル機能とブロック機能を統合したストレージ装置の一例を示すブロック図である。
【0021】
本実施例では、仮想化ソフトウェア上のゲストOS(または仮想マシン)としてファイルサーバOS(以下、ファイルOSとする)を稼働させ、仮想化ソフトウェアと同一のハードウェア上で、ブロック制御マイクロプログラム(ブロック機能)を独立して稼働させ、ファイル機能とブロック機能をそれぞれ提供するストレージ装置の一例について説明する。
【0022】
ハードウェア109は、上述した仮想化支援機能を備えたマルチコアのCPUリソース112と、メモリリソース113と、通信やデータの送受信を行うI/Oリソース114と、を含む。
【0023】
CPUリソース112は、仮想化支援機能を有効(VMX ON)に設定したコアのグループA115と、仮想化支援機能を無効(VMX OFF)に設定したコアのグループB116と、に分類される。仮想化支援機能が有効なグループA115では、仮想化ソフトウェア上のゲストOSとしてファイルサーバOS105(第2のOS)が実行される。一方、仮想化支援機能を無効にしたグループB116では、ブロック制御マイクロプログラム(第1のOS)108が実行される。
【0024】
メモリリソース113は、複数のメモリデバイス117a、l17bを含んで物理アドレス空間を提供する。
【0025】
I/Oリソース114は、ネットワーク(図示省略)を介して計算機(図示省略)と通信を行うNIC118と、SAN(Storage Area Network)を介して計算機(図示省略)とデータの送受信を行うTA(Target Adapter)119と、データやプログラムを格納するストレージデバイス120と、ストレージデバイス120へアクセスするためのHBA(Host Bus Adaptor)120bを含む。ブロック制御マイクロプログラム108がストレージデバイス120への処理要求(コマンド)を発行する際、常にHBA120bを介して行う。
【0026】
なお、NIC118、TA119、HBA120bは、PCI(Peripheral Component Interfaces)仕様に基づくI/Oデバイスを想定している。
【0027】
ハードウェア109のうち予め設定したファイルサーバパーティション101では、仮想化ソフトウェアとしてのVMM(Virtual Machine Manager)106が実行され、VMM106上ではファイルサーバOS105が実行される。ファイルサーバパーティション101には、仮想化支援機能が有効に設定されたグループA115のCPUリソース112が割り当てられる。
【0028】
ハードウェア109では、予め設定したブロックサービスパーティション102でブロック制御マイクロプログラム108が実行される。ブロックサービスパーティション102には、仮想化支援機能が無効に設定されたグループB116のCPUリソース112が割り当てられる。
【0029】
なお、メモリリソース113のうち、メモリデバイス117aをファイルサーバパーティション101に割り当て、メモリデバイス117bをブロックサービスパーティション102に割り当てるようにしても良い。
【0030】
次に、ストレージ装置のソフトウェア構成について説明する。ハードウェア109上で、ブロック制御マイクロプログラム108とVMM106は、システムソフトウェアとして独立して稼働する。
【0031】
ブロック制御マイクロプログラム108は、ハードウェア109を直接制御するために、予め設定されたブロックサービスパーティション102で稼働し、リソース管理テーブル142と、HBA120bを制御する物理HBAドライバ141と、この物理HBAドライバ141が送受信するデータやコマンドを保持するキャッシュ制御部140と、ファイルサーバOS105と直接通信を行うキューサービス138とを含む。
【0032】
リソース管理テーブル142は、後述するように、CPU割り当て管理テーブル401(
図4A)と、メモリ割り当て管理テーブル402(
図4B)と、I/O割り当て管理テーブル403(
図4C)と、を含む。
【0033】
キューサービス138は、後述するように、VMM106からアドレス変換情報を受信し、ファイルサーバOS105のデータバッファ124との間でデータ転送を行うデータバッファR/W135や、要求リングバッファ125や応答リングバッファ126との間で情報の送受信を行うキューエントリR/W136を含む。キューサービス138はキャッシュ制御部140を介して物理HBAドライバ141との間でデータやコマンドの送受信を行う。
【0034】
また、ブロック制御マイクロプログラム10は、ファイルサーバOS105から送られるストレージ制御コマンドをキューサービス138、キャッシュ制御部140及び物理HBAドライバ141で処理し、ファイルサーバOS105を管理するVMM106に対してストレージ制御コマンドの完了通知のための物理割込み134を発行する。
【0035】
VMM106は、予め設定されたファイルサーバパーティション101内で、1以上のゲストOSを稼働させる。本実施例では、VMM106がゲストOSとしてファイルサーバOS105を仮想計算機として稼働させる例を示す。VMM106は、ファイルサーバパーティション101のリソースをファイルサーバOS105に割り当てて、仮想計算機を生成する。
【0036】
VMM106は、ファイルサーバOS105に仮想CPU(図示省略)と、メモリと、仮想HBA127を提供する。なお、図示はしないが、VMM106は、仮想NICもファイルサーバOS105に提供する。仮想CPUとしては、仮想化支援機能がONに設定されたグループA115のCPUリソース112が割り当てられる。ファイルサーバOS105に割り当てられるメモリは、ファイルサーバパーティション101内の所定の記憶領域が割り当てられる。また、仮想HBA127は、PCIコンフィグレジスタ130と、MMIOレジスタ131を含む。
【0037】
VMM106は、ファイルサーバOS105とブロック制御マイクロプログラム108が高速で通信を行うための通信データパスの情報を保持する通信データパス制御テーブル133を保持する。なお、通信データパスは、メモリリソース113上に設定されて、データとコマンドまたは応答(アクセス結果)の送受信を行う通信経路である。
【0038】
また、VMM106は、仮想HBA127の状態と、ファイルサーバOS105とブロック制御マイクロプログラム108の間で送受信される情報の位置を管理するアドレス変換テーブル129をメモリリソース113上に保持する。なお、VMM106は、アドレス変換テーブル129をブロック制御マイクロプログラム108と共有する。
【0039】
VMM106上で稼働するファイルサーバOS105は、仮想HBA127を制御する仮想HBAドライバ123(図中vHBAドライバとする)と、ファイルシステムによってデータの送受信を行うファイルシステムレイヤ121と、を含む。
【0040】
また、ファイルサーバOS105は、図示しない仮想NICドライバを介して、クライアント(図示省略)からのファイルアクセスを受け付けて、ブロック制御マイクロプログラム108に当該ファイルアクセスを要求する。
【0041】
ファイルシステムレイヤ121は、クライアントからアクセス要求のあったデータやブロック制御マイクロプログラム108からのデータを保持するデータバッファ124を含む。
【0042】
仮想HBAドライバ123は、クライアントからアクセス要求のあったデータやコマンドを保持するバッファとして、要求リングバッファ125と、応答リングバッファ126を含む。
【0043】
ここで、VMM106はメモリリソース113上でスーパーバイザ領域205と、ユーザ領域204の双方に所属する。VMM106のうち、仮想HBA127とアドレス変換テーブル129は、ファイルサーバOS105とブロック制御マイクロプログラム108及びVMM106の全てのプログラムからアクセス可能な共有領域であるユーザ領域204に配置される。
【0044】
一方、VMM106の仮想割り込み生成部132と、通信データパス制御テーブル133及びユーザ領域204以外のVMM106の構成要件はスーパーバイザ領域205に配置される。なお、スーパーバイザ領域205は、ハードウェア109に対する制御が可能なブロック制御マイクロプログラム108とVMM106がアクセス可能領域である。
【0045】
そして、仮想HBAドライバ123の要求リングバッファ125と、応答リングバッファ126もブロック制御マイクロプログラム108及びVMM106からアクセス可能な共有領域であるユーザ領域204に配置される。
【0046】
ファイルサーバOS105は、クライアントからの要求(コマンド)と、当該要求に付随する転送データの情報を格納するバッファアドレスリストと、を要求リングバッファ125に書き込む。ブロック制御マイクロプログラム108は、要求リングバッファ125からコマンドを取得して、当該コマンドを実行してストレージデバイス120にアクセスを行う。
【0047】
一方、応答リングバッファ126は、ブロック制御マイクロプログラム108からの処理完了結果を含む応答(レスポンス)を格納する。そして、ファイルサーバOS105が、後述する仮想割り込み128に基づいて、応答リングバッファ126に書き込まれた応答を取得してクライアントへ転送する。
【0048】
なお、ファイルサーバOS10はデータバッファ124、要求リングバッファ125及び応答リングバッファ126に対して行う場合には、後述するゲスト物理アドレス空間内の間接アクセス111でアクセスする。一方、ブロック制御マイクロプログラム108がユーザ領域204へアクセスする際には、後述するように、アドレス変換テーブルで、ゲスト物理アドレス空間をホスト物理アドレス空間に変換して、アクセスを実施する。
【0049】
本実施例では、ファイルサーバOS105とブロック制御マイクロプログラム108の通信は、メモリリソース113上に設定された通信データパス(通信経路)によって高速なアクセスを実現する。具体的には、仮想HBA127のMMIOレジスタ131を、トラップ無しでファイルサーバOS105にアクセスさせ、MMIOレジスタ131への書き込みについては、ブロック制御マイクロプログラム108が直接ポーリングしてデータを取得することにより、高速な通信を実現する。
【0050】
<ソフトウェアの概要>
図2A、
図2Bは、メモリリソース113のアドレス空間を示す。
図2Aは、メモリリソース113のアドレス空間の一例を示すマップである。
図2Bは、メモリリソースのアドレス空間と、プログラム毎のアクセス権限を示す図である。
【0051】
メモリリソース113のうち、ブロック制御マイクロプログラム108とVMM106に割り当てられたアドレスAD#1からアドレスAD#4までの領域は、ホスト物理アドレス空間203で表される。
【0052】
本実施例では、アドレス201=0番地から所定のアドレスAD#1までが、ブロック制御マイクロプログラム108に割り当てられるブロック制御マイクロプログラム固有領域207である。そして、アドレスAD#1〜アドレスAD#4までがVMM106に割り当てられ、VMMのアクセス範囲209となる。このうち、アドレスAD#1〜アドレスAD#2は、VMM106に割り当てられるVMM固有領域208である。
【0053】
また、アドレスAD#2〜アドレスAD#3は、VMM106のゲストOSに割り当てられるユーザ領域204であり、本実施例では、ファイルサーバOS105に割り当てられる。このユーザ領域204は、OS間共有領域206として機能する。そして、アドレスAD#3〜アドレスAD#4の領域は、ブロック制御マイクロプログラム108とVMM106がアクセス可能なスーパーバイザ領域205として設定される。
【0054】
アドレスAD#2〜アドレスAD#4のゲスト物理アドレス空間202は、全てのプログラムがアクセス可能なユーザ領域204と、ブロック制御マイクロプログラム108とVMM106のみがアクセス可能なスーパーバイザ領域205に二分される。
【0055】
アドレスAD#2〜アドレスAD#3のユーザ領域204は、ゲストOSが認識するアドレスであり、ゲスト物理アドレス空間202としてVMM106が提供する。本実施例では、ファイルサーバOS105がゲスト物理アドレス空間202に割り当てられる。このゲスト物理アドレス空間202は、ホスト物理アドレス空間203のアドレスAD#2のオフセットを差し引いたアドレスである。
【0056】
ユーザ領域204には、ファイルサーバOS105がデータバッファ124や仮想HBAドライバ123を保持する使用(Usable)領域212と、VMM106が提供する仮想HBA127やアドレス変換テーブル129を保持する予約領域213と、が含まれる。スーパーバイザ領域205には、VMM106が提供する通信データパス制御テーブル133等が含まれる。なお、通信データパス制御テーブル133のアドレスは、予め設定されたホスト物理アドレス空間203に設定され、ブロック制御マイクロプログラム108にも通信データパス制御テーブル133のアドレスは設定されている。
【0057】
図2Bにおいて、物理アドレスの領域の名称がカラム2111に格納され、本実施例では、ユーザ領域、スーパーバイザ領域、VMM固有領域、ブロック制御マイクロプログラム108がそれぞれのエントリに格納される。カラム2112にはファイルサーバOS105の各領域に対するアクセス可否が「○」=アクセス可、「×」=アクセス不可として設定される。カラム2113にはVMM106の各領域に対するアクセス可否が「○」=アクセス可、「×」=アクセス不可として設定される。また、カラム2114にはブロック制御マイクロプログラム108の各領域に対するアクセス可否が「○」=アクセス可、「×」=アクセス不可として設定される。
【0058】
図2Bのように、ブロック制御マイクロプログラム108は、ホスト物理アドレス空間203の全てに渡ってアクセス可能である。次に、VMM106は、ブロック制御マイクロプログラム固有領域207以外についてアクセス可能である。ファイルサーバOS105のアクセス範囲は、ユーザ領域204のみとなる。このユーザ領域204を介して、ブロック制御マイクロプログラム108とファイルサーバOS105がデータの送受信を直接実施する。
【0059】
本実施例では、まず、ブロック制御マイクロプログラム108がホスト物理アドレス空間203にロードされて、予め設定されたグループB116のCPUリソース112によって実行される。ブロック制御マイクロプログラム108は起動が完了すると、VMM106を起動させ、予め設定されたグループA115のCPUリソース112によってVMM106を起動させる。そして、VMM106は予め設定されたゲストOSとしてファイルサーバOS105を起動させ、ファイルサーバを生成する。
【0060】
後述するように、VMM106は、ホスト物理アドレス空間203のスーパーバイザ領域205に通信データパスの配置アドレスの情報と状態を含む通信データパス制御テーブル133を生成する。そして、VMM106は通信データパス制御テーブル133が使用開始の状態になると、ブロック制御マイクロプログラム108へ通知する。この通知より、ブロック制御マイクロプログラム108は、VMM106がファイルサーバOS105を起動させて、通信が可能になったことを取得する。
【0061】
なお、
図2Aでは、各プログラムに割り当てられるメモリ領域の物理アドレスが連続的な例を示した。各プログラムに割り当てられるメモリ領域の物理アドレスが不連続の場合には、連続するメモリ領域ごとに、ベースアドレス+サイズ+オフセットアドレスで構成される変換情報を設定すればよい。
【0062】
CPUリソース112は、各プログラムに従って動作することによって、所定の機能を実現する機能部として動作する。例えば、CPUリソース112は、ブロック制御マイクロプログラム108を実行することでブロック制御マイクロ部として機能する。他のプログラムについても同様である。さらに、CPUリソース112は、各プログラムが実行する複数の処理のそれぞれを実現する機能部としても動作する。計算機及び計算機システムは、これらの機能部を含む装置及びシステムである。
【0063】
ストレージ装置の各機能を実現するプログラム、テーブル等の情報は、ストレージデバイス120や不揮発性半導体メモリ、ハードディスクドライブ、SSD(Solid State Drive)等の記憶デバイス、または、ICカード、SDカード、DVD等の計算機読み取り可能な非一時的データ記憶媒体に格納することができる。
【0064】
<通信データパスの概要>
図3は、メモリリソース113のユーザ領域204と、スーパーバイザ領域205の詳細を示すブロック図である。
【0065】
図1、
図2Aで示したように、ユーザ領域204には、ファイルシステムレイヤ121のデータバッファ124、仮想HBAドライバ123、PCIコンフィグレジスタ130、MMIOレジスタ131、アドレス変換テーブル129が配置される。
【0066】
仮想HBAドライバ123の要求リングバッファ125と応答リングバッファ126はファイルサーバOS105とブロック制御マイクロプログラム108の通信データパスとして機能する。すなわち、要求リングバッファ125は要求系のキューとして機能し、応答リングバッファ126は応答系のキューとして機能する。
【0067】
要求リングバッファ125は、ストレージデバイス120に対するコマンド(または要求)を格納するSCSI CDB(Command Descriptor Block)304と、コマンドに付随するデータの位置情報(データバッファ124)を示すバッファアドレスリストを格納するSGL(Scatter Gather List)303を含む。
【0068】
ファイルサーバOS105は、クライアント(図示省力)からストレージデバイス120に対する要求(コマンド及びデータ)を受け付けると、要求リングバッファ125のSCSI CDB304に受け付けた要求(コマンド)を格納し、さらにデータを受け付けた場合には、データを格納したデータバッファ124の位置情報に対応するバッファアドレスリストを生成してSGL303に格納する。そして、後述するように、ブロック制御マイクロプログラム108がポーリングにより要求リングバッファ125を読み込んで、ストレージデバイス120に対してコマンドを実行する。
【0069】
応答リングバッファ126には、ストレージデバイス120へのアクセス結果(応答)を格納するstatus305を含む。ブロック制御マイクロプログラム108は、status305に応答(レスポンス)またはデータを格納した位置を書き込む。そして、ファイルサーバOS105は、応答リングバッファ126のstatus305から、ストレージデバイス120の応答を読み込んでクライアントに送信する。
【0070】
ここで、要求リングバッファ125と、応答リングバッファ126の構成を説明する。まず、要求リングバッファ125は、当該要求リングバッファに対して新しい要求を格納する位置を示すポインタとしての要求PI(producer Index)レジスタ310aと、要求リングバッファ125が次に読み出す要求の格納位置を指し示すポインタとしての要求CI(Consumer Index)レジスタ310bを、MMIOレジスタ131aに有する。
【0071】
つまり、要求PIレジスタ310aは、ファイルサーバOS105がクライアントから受け付けた新たな要求を格納する要求リングバッファ125の位置を指し示す。そして、要求CIレジスタ310bは、ブロック制御マイクロプログラム108が次に読み込むべき要求リングバッファ125の位置を指し示す。
【0072】
応答リングバッファ126も要求リングバッファ125と同様に2つのインデックスを有する。応答リングバッファ126は、当該応答リングバッファに対して新しい応答を格納する位置を示すポインタとしての応答PI(producer Index)レジスタ311aと、応答リングバッファ126が次に受け付ける応答の格納位置を指し示すポインタとしての応答CI(Consumer Index)レジスタ311bを、MMIOレジスタ131aに有する。
【0073】
つまり、応答PIレジスタ311aは、ブロック制御マイクロプログラム108が処理した新たな応答を格納する応答リングバッファ126の位置を指し示す。そして、応答CIレジスタ310bは、ファイルサーバOS105が次に読み込むべき応答リングバッファ126の位置を指し示す。
【0074】
ここで、VMM106が提供する仮想HBA127のPCIコンフィグレジスタ130とMMIOレジスタ131の構成について説明する。仮想HBA127のPCIコンフィグレジスタ130は、操作対象のMMIOレジスタ131aを指定するフィールド(BAR0 Addr)301と、割り込み対象のMMIOレジスタ131bを指定するフィールド(BAR1 Addr)302と、を含む。
【0075】
操作対象のMMIOレジスタ131aは、
図3で示すように、要求リングバッファ125のベースアドレスを格納する要求ベースフィールド321aと、応答リングバッファ126のベースアドレスを格納6する応答ベースフィールド321bと、上述した要求リングバッファ125の要求PIレジスタ310a及び要求CIレジスタ310bと、上述した応答リングバッファ126の応答PIレジスタ311a及び応答CIレジスタ311bと、仮想HBA127の状態を格納する仮想HBAstatusフィールド309と、仮想HBA127の使用可比(使用開始)を示す仮想HBAenableフィールド308を含む。
【0076】
割り込み対象のMMIOレジスタ131bは、拡張メッセージシグナル割り込み(MSI−X:Extended Message Signaled Interrupt)テーブル306と、MSI−XのPBA(Pending Bit Array)テーブル307と、を含む。MSI−X及びPBAについてはPCI−Expressの規格に準拠するものである。
【0077】
次に、VMM106が生成するアドレス変換テーブル129は、VMM106とブロック制御マイクロプログラム108の両者がアクセス可能な共有領域としてのユーザ領域204に配置される。VMM106は、
図2Aで示したように、ファイルサーバOS105に割り当てたユーザ領域204と、ブロック制御マイクロプログラム108とVMM106がアクセスするスーパーバイザ領域205について、ファイルサーバOS105から認識されるゲスト物理アドレス空間202と、ブロック制御マイクロプログラム108から認識されるホスト物理アドレス空間203との関連付けを保持するアドレス変換情報を含む。このアドレス変換情報の一例としては、VMM106がユーザ領域204の開始アドレスとして割り当てたアドレスAD#3となる。つまり、ゲスト物理アドレス空間202にアドレスAD#3を加算したアドレスがホスト物理アドレス空間203となる。
【0078】
なお、このアドレス変換情報は、VMM106がゲストOSとしてのファイルサーバOS105を起動するときに、当該ゲストOSに割り当てたメモリリソース113の開始アドレスをアドレス変換テーブル129に書き込む。そして、VMM106は、アドレス変換テーブル129の内容をブロック制御マイクロプログラム108に通知しておく。これにより、ブロック制御マイクロプログラム108は、ファイルサーバOS105が認識するゲスト物理アドレス空間202のアドレスで通信を行うことが可能となる。
【0079】
上記ユーザ領域204のファイルシステムレイヤ121、仮想HBAドライバ123、仮想HBA127のアドレスは、ファイルサーバOS105がゲスト物理アドレス空間202でアクセスする。
【0080】
すなわち、PCIコンフィグレジスタ130のレジスタ(BAR0 Addr)301は、ゲスト物理アドレス空間202でMMIOレジスタ131aの開始アドレスを指定し、レジスタ(BAR1 Addr)302は、ゲスト物理アドレス空間202でMMIOレジスタ131bの開始アドレスを指定する。そして、MMIOレジスタ131についても同様であり、MMIOレジスタ131aは、要求リングバッファ125と応答リングバッファ126のベースアドレス、PI及びCIをゲスト物理アドレス空間202で指定する。
【0081】
これに対して、
図1、
図2Aで示したスーパーバイザ領域205には、ブロック制御マイクロプログラム108とVMM106が使用する通信データパスに関する情報を保持する通信データパス制御テーブル133が配置される。
【0082】
そして、通信データパス制御テーブル133には、ユーザ領域204のリソースにアクセスするためのアドレスが、ホスト物理アドレス空間203で格納される。
【0083】
通信データパス制御テーブル133は、後述するように、仮想HBA127のPOST(Power On Self test)の状態を格納するフィールド312と、ブロック制御マイクロプログラム108が認識した仮想HBA127の状態を格納するフィールド313と、PCIコンフィグレジスタ130を指し示すホスト物理アドレス空間203を格納するフィールド314と、PCIコンフィグレジスタ130のレジスタ(BAR0 Addr)301に対応するMMIOレジスタ131aへのホスト物理アドレス空間203を格納するフィールド315と、PCIコンフィグレジスタ130のレジスタ(BAR1 Addr)302に対応するMMIOレジスタ131bへのホスト物理アドレス空間203を格納するフィールド316と、アドレス変換テーブル129へのホスト物理アドレス空間203を格納するフィールド317から構成される。なお、通信データパス制御テーブル133の詳細については
図4D、
図4Eで詳述する。
【0084】
ストレージ装置は、以上のように構成されて、ファイルサーバOS105とVMM106及びブロック制御マイクロプログラム108がアクセス可能なユーザ領域(共有領域)204に仮想HBAドライバ123を配置する。そして、仮想HBAドライバ123の要求リングバッファ125と応答リングバッファ126を通信データパスとしてファイルサーバOSとブロック制御マイクロプログラム108が高速な通信を行う。
【0085】
<ファイルサーバOSからブロック制御マイクロプログラムへの通信の概要>
次に、ファイルサーバOS105からブロック制御マイクロプログラム108への通信の概要を説明する。
【0086】
ファイルサーバOS105は、クライアントから受け付けた要求(コマンド)を要求リングバッファ125のSCSI CDB304に格納し、要求に関連するデータはデータバッファ124に格納する。そして、ファイルサーバOS105は、データバッファ124上のデータの位置からバッファアドレスリストを生成してSGL303に格納する。
【0087】
この要求を取得するブロック制御マイクロプログラム108は、ポーリングなどにより、通信データパス制御テーブル133でフィールド317のアドレス変換テーブル129のアドレス変換情報と、フィールド315のMMIOレジスタ131aのアドレスを参照し、要求リングバッファ125の要求PIレジスタ310aを取得する。そして、ブロック制御マイクロプログラム108は、要求CIレジスタ310aのSCSI CDB304のコマンドと、当該コマンドに関連する転送データの位置情報を示すバッファアドレスリストをSGL303から取得する。
【0088】
次に、ブロック制御マイクロプログラム108は、アドレス変換テーブル129のアドレス変換情報に基づいて、要求CIレジスタ310bからSGL303のバッファアドレスリストに記載された転送データの位置情報をゲスト物理アドレス空間202で取得し、アドレス変換情報を用いてゲスト物理アドレス空間202をホスト物理アドレス空間203に変換する。そして、ブロック制御マイクロプログラム108は、変換されたホスト物理アドレス空間203を用いて、要求リングバッファ125の転送データの読出しを行う。
【0089】
ブロック制御マイクロプログラム108は、要求リングバッファ125からの読み出しが完了すると、要求CIレジスタ310bの値を更新する。そして、ブロック制御マイクロプログラム108は、要求リングバッファ125から読み出したコマンドとデータに基づいてストレージデバイス120にアクセスする。
【0090】
以上の処理により、ファイルサーバOS105からブロック制御マイクロプログラム108への通信はVMM106を介することなくメモリリソース113上に設定した通信データパスで実現できる。
【0091】
<ブロック制御マイクロプログラム108 → ファイルサーバOS105の概要>
一方、ブロック制御マイクロプログラム108がストレージデバイス120をアクセスした結果を、ファイルサーバOS105に通知する際には、応答リングバッファ126への書き込みに加えて、VMM106へ物理割込み134を通知する。
【0092】
ブロック制御マイクロプログラム108は、ストレージデバイス120にアクセスした結果を応答するため、通信データパス制御テーブル133でフィールド317のアドレス変換テーブル129のアドレス変換情報と、フィールド315のMMIOレジスタ131aのアドレスを参照し、応答リングバッファ126の応答PIレジスタ311aのアドレスを取得する。そして、ブロック制御マイクロプログラム108は、応答PIレジスタ311aのゲスト物理アドレス空間202をアドレス変換情報に基づいてホスト物理アドレス空間203に変換する。そして、ブロック制御マイクロプログラム108は、要求されたコマンドに対する応答を応答PIレジスタ311aに書き込む。
【0093】
次に、ブロック制御マイクロプログラム108は、VMM106に対して物理割込み134を通知し、ファイルサーバOS105へ割込み通知を行うよう要求する。VMM106は物理割込み134を受けると、ファイルサーバOS105の仮想HBA127へ仮想割り込み128を通知する。ファイルサーバOS105は、仮想HBA127からI/O割り込みを受けて、応答リングバッファ126の応答CIレジスタ311bから応答を読み込む。ファイルサーバOS105は、読み込んだ応答をクライアントへ返信する。ファイルサーバOS105は、読み込みが完了したので、応答CIレジスタ311bを更新する。
【0094】
以上の処理によって、ブロック制御マイクロプログラム108からファイルサーバOS105への通信が実現できる。
【0095】
<リソース管理テーブル>
次に、ブロック制御マイクロプログラム108が管理するリソース管理テーブル142について説明する。リソース管理テーブル142は、CPUリソース112を管理するCPU割り当て管理テーブル401と、メモリリソース113を管理するメモリ割り当て管理テーブル402と、I/Oリソース114を管理するI/O割り当て管理テーブル403と、を含む。
【0096】
図4Aは、ブロック制御マイクロプログラム108が管理するCPU割り当て管理テーブル401の一例を示す図である。
【0097】
CPU割り当て管理テーブル401は、CPUリソース112の物理CPUコア番号を格納するエントリ4011と、物理CPUコア番号毎に、仮想化支援機能(VMX)の設定状態を格納するエントリ4012と、物理CPUコア番号毎に、ホストとなるソフトウェアの割当先を格納するエントリ4013と、物理CPUコア番号毎に、割り当て先のゲストソフトウェアの情報を格納するエントリ4014と、を含む。
【0098】
CPU割り当て管理テーブル401の各エントリ4011〜4014は、物理CPUコアの数に応じたフィールドを有する。エントリ4012は、“0”が仮想化支援機能をOFFに設定したことを示し、“1”が仮想化支援機能をONに設定したことを示す。図示の例では、物理CPUコア番号=0〜3が仮想化支援機能をOFFにし、物理CPUコア番号=4〜7が仮想化支援機能をONにした例を示す。
【0099】
エントリ4013は、物理CPUコア番号=0〜3がブロック制御マイクロプログラム108に割り当てられ、物理CPUコア番号=4〜7がVMM106に割り当てられたことを示す。
【0100】
エントリ4014は、物理CPUコア番号=0〜3がゲストのないホストであることを示し、物理CPUコア番号=4〜7はファイルサーバOS105がゲストであることを示す。
【0101】
図4Bは、ブロック制御マイクロプログラム108が管理するメモリ割り当て管理テーブル402の一例を示す図である。
【0102】
メモリ割り当て管理テーブル402は、メモリリソース113の物理アドレス空間に割り当てたソフトウェアを管理する。図示の例では、メモリリソース113の3つの領域に、それぞれソフトウェアを割り当てた例を示し、物理アドレス(物理メモリ範囲)が0〜16GBの領域4021にはブロック制御マイクロプログラム108が割り当てられ、16〜18GBの領域4022にはVMM106が割り当てられ、18〜32GBの領域4023にはファイルサーバOS105が割り当てられた例を示す。
【0103】
図4Cは、ブロック制御マイクロプログラム108が管理するI/O割り当て管理テーブル403の一例を示す図である。
【0104】
I/O割り当て管理テーブルI/O割り当て管理は、I/Oリソース114を構成するI/Oデバイス毎のフィールド4031〜4033と、I/Oデバイスを割り当てたホストとなるソフトウェアのエントリと、I/Oデバイスを割り当てたゲストとなるソフトウェアのエントリと、を含む。
【0105】
フィールド4031は、NIC118がホストとしてVMM106に割り当てられ、ゲストとしてファイルサーバOS105が割り当てられる例を示す。フィールド4032は、TA119がホストとしてブロック制御マイクロプログラム108に割り当てられ、ゲストが存在しない例を示す。フィールド4033は、HBA120bがホストとしてブロック制御マイクロプログラム108に割り当てられ、ゲストが存在しない例を示す。
【0106】
本実施例では、リソース管理テーブル142のテーブルについて、ブロック制御マイクロプログラム108が保持した例を示したが、VMM106に分散して保持するデータ構造としても良い。例えば、CPU割り当て管理テーブル401や、I/O割り当て管理テーブル403のゲストのエントリをVMM106が保持するようにしても良い。
【0107】
<通信データパス制御テーブル133>
図4Dは、VMM106が管理する通信データパス制御テーブル133の一例を示す図の前半部である。
図4Eは、VMM106が管理する通信データパス制御テーブル133の一例を示す図の後半部である。
【0108】
通信データパス制御テーブル133は、テーブル先頭から現在のフィールドまでのバイト数を格納するバイトオフセット1331と、当該フィールドの長さをバイト数で示すサイズ1332と、フィールドの名称を格納するフィールドネーム1333と、当該フィールドの内容を記述する意味1334と、当該エントリを設定するソフトウェアを格納する設定者1335から一つのテーブルが形成される。
【0109】
通信データパス制御テーブル133は、0〜7バイト目まではヘッダ情報511が格納され、
図4Eの56バイト目以降はマルチキューに対応するときに使用されるエントリである。
【0110】
図4Dのバイトオフセット1331=8バイト〜47バイトが、
図3に示したフィールド312〜317に対応する。
【0111】
フィールド312の“vHBA device POST”は、VMM106によって設定され、仮想HBA127の初期化状態を示す。未初期化の場合は“0”に設定され、サービス開始の場合は“1”に設定される。
【0112】
フィールド313の“block micro Acknowledge”は、仮想HBA127のPOSTコードの進行に追従して、ブロック制御マイクロプログラム108側で認識した値を示す。
【0113】
フィールド314の“(i)PCI configuration register location”は、0番目の仮想HBA127のPCI configurationレジスタ130のアドレスを指定する。本アドレスは、VMM106がホスト物理アドレス空間203で設定する。
【0114】
フィールド315の“(ii)BAR0 MMIO register − operational”は、0番目の仮想HBA127のBAR0 MMIOレジスタ131aのアドレスを指定する。本アドレスは、VMM106がホスト物理アドレス空間203で設定する。
【0115】
フィールド316の“(iii)BAR1 MMIO register − MSI−X”は、0番目の仮想HBA127のBAR1 MMIOレジスタ131bのMSI−Xテーブルのアドレスを指定する。本アドレスは、VMM106がホスト物理アドレス空間203で設定する。
【0116】
フィールド317の“(iv)Address Translation Information”は、0番目の仮想HBA127を使用しているVMM106のメモリアドレスの変換情報(ゲスト物理アドレス→ホスト物理アドレス)を保持する構造体のアドレスを指定する。本アドレスは、VMM106がホスト物理アドレス空間203で設定する。
【0117】
<アドレス変換テーブル129>
図4Fは、VMM106が管理するアドレス変換テーブル129の一例を示す図である。アドレス変換テーブル129は、テーブル先頭から現在のフィールドまでのバイト数を格納するバイトオフセット1291と、当該フィールドの長さをバイト数で示すサイズ1292と、フィールドの名称を格納するフィールドネーム1293と、当該フィールドの内容を記述する意味1294と、当該エントリを設定するソフトウェアを格納する設定者1295から一つのテーブルが形成される。
【0118】
アドレス変換テーブル129は、0〜7バイト目まではヘッダ情報611が格納され、40バイト目以降は複数のアドレス変換情報を有する場合のエントリに使用される。
【0119】
図4Fにおいて、フィールド601の“LogicalStartAddress#0”は、VMM106(ファイルサーバOS105)からみたゲスト物理アドレス空間202の先頭を示す。
【0120】
フィールド602の“Size#0”は、VMM106(ファイルサーバOS105)が認識するユーザ領域204のサイズを示す。
【0121】
フィールド603の“PhysicalBase#0”は、本ユーザ領域204の先頭ゲスト物理アドレス(LogicalStartAddress#0)に対応するホスト物理アドレスを示す。
【0122】
ブロック制御マイクロプログラム108は、アドレス変換テーブル129の変換情報を用いてゲスト物理アドレスをホスト物理アドレスへ変換することができる。
【0123】
<PCIコンフィグレジスタ130>
図8Aは、PCIコンフィグレジスタ130の一例を示す図である。PCIコンフィグレジスタ130は、レジスタ先頭から現在のフィールドまでのバイト数を格納するバイトオフセット1301と、当該フィールドの長さをバイト数で示すサイズ1302と、フィールドの名称を格納するフィールドネーム1303と、初期化後の値を格納する初期値1304と、当該フィールドの内容を記述する意味、注釈1305からレジスタが形成される。
【0124】
PCIコンフィグレジスタ130は、10バイト目のBAR0にMMIOレジスタ131aのアドレスが格納され、
図3のフィールド301に相当する。また、PCIコンフィグレジスタ130の18バイト目のBAR1にMMIOレジスタ131bのアドレスが格納され、
図3のフィールド302に相当する。
【0125】
<MMIOレジスタ131a(BAR0)>
図8Bは、MMIOレジスタ131a(BAR0)の一例を示す図である。
【0126】
MMIOレジスタ131aは、レジスタ先頭から現在のフィールドまでのバイト数を格納するオフセット1311と、当該フィールドの長さをバイト数で示すサイズ1312と、フィールドの名称を格納するネーム1313と、RO=リードオンリー、RW=リードアンドライト等を格納する属性1314と、当該フィールドの内容を記述する注釈1315からレジスタが形成される。
【0127】
MMIOレジスタ131aは、0128hバイト目の“Queue enable request”が、
図3に示した仮想HBAenableフィールド308に対応する。012Chバイト目の“Queue status”が、
図3に示した仮想HBAstatusフィールド309に対応する。
【0128】
また、0140hバイト目の“ITQ#0 base addr”が、
図3に示した要求ベースフィールド321aに対応し、要求リングバッファ125のベースアドレスが格納される。
【0129】
また、0148hバイト目の“ITQ#0 length”は、要求リングバッファ125の長さ1601に対応する。
【0130】
また、0150hバイト目の“ITQ#0 PI/CI Value”が、
図3に示した要求PIレジスタ310aと、要求CIレジスタ310bに対応する。
【0131】
また、0160hバイト目の“TIQ#0 base addr”が、
図3に示した応答ベースフィールド321bに対応し、応答リングバッファ126のベースアドレスが格納される。0168hバイト目の“TIQ#0 length”は、応答リングバッファ126の長さ1602に対応する。0170hバイト目の“TIQ#0 PI/CI Value”が、
図3に示した応答PIレジスタ311aと、応答CIレジスタ311bに対応する。
【0132】
<要求リングバッファ125>
図9Aは、要求リングバッファ125のエントリデータフォーマットの一例を示す図である。本仕様は、Information technology - SCSI over PCIe(R) Architecture(SOP)(T10/2239-D Revision 4, )のフォーマットに準拠している。
【0133】
1コマンドは概ね64〜128バイトに収まるため、本実施例では、一例として、リングエントリのサイズを128バイトで制御する。128バイトを超える要求をエンキューする場合は、次のエントリにまたがって格納される。
【0134】
要求リングバッファ125の32バイト目の“CDB”は、
図3に示した、SCSIコマンドを格納するSCSI CDB304である。そして、要求リングバッファ125の32バイト目の“CDB”は、
図3に示した、SCSIコマンドを格納するSCSI CDB304である。そして、65バイト目以降が、バッファアドレスリストを格納するSGL(Scatter Gather List)303である。
【0135】
<応答リングバッファ126>
図9Bは、応答リングバッファ126のエントリデータフォーマットの一例を示す図である。本仕様は、要求リングバッファ125と同様、Information technology - SCSI over PCIe(R) Architecture(SOP)のフォーマットに準拠している。要求リングバッファ125と同じく、本実施例では、一例として、リングエントリのサイズを128バイトで制御する。128バイトを超える要求をエンキューする場合は、次のエントリにまたがって格納される。
【0136】
応答リングバッファ126の12バイト〜19バイトは、
図3に示した、status305である。
【0137】
<SGL303>
図9Cは、SGL(Scatter Gather List)303のデスクリプタデータフォーマットの一例を示す図である。本仕様は、Information technology - PCIe(R) architecture Queuing Interface (PQI)(T10/2240-D Revision 6a )に準拠している。
【0138】
SGL303のデータは、0〜7バイトがアドレス部1802で、8〜11バイトまでがバッファ長1803を構成する。
【0139】
アドレス部1802に、データバッファへのポインタを格納する。本ポインタは、ファイルサーバOS105が認識するゲスト物理アドレス空間202で指定される。
【0140】
図9Aにおいて、SGL303のフィールド中に、本データ構造が複数個格納できる。本データは16バイトエントリであるため、typicalにはbyte offset=64〜127までで4つのSGL303が指定できる。なおSGL数が4を超えた場合、要求リングバッファ125の次のエントリにまたがってSGL303が格納される。
【0141】
<通信データパスの初期化処理>
次に、ブロック制御マイクロプログラム108とVMM106及びファイルサーバOS105で行われる通信データパスの初期化処理について
図5A、
図5Bを参照しながら説明する。
図5Aは、通信データパスの初期化処理の一例を示すタイムチャートである。この処理は、ブロック制御マイクロプログラム108の起動が完了した後に実行される。
【0142】
ステップS701では、ブロック制御マイクロプログラム108がスーパーバイザ領域205の通信データパス制御テーブル133をクリアする。この時点では、まだVMM106が起動していないので、ブロック制御マイクロプログラム108は、通信データパス制御テーブル133が配置される既知のアドレスをクリアしておく。
【0143】
次に、ブロック制御マイクロプログラム108は、VMM106を起動させてからゲストOSとしてファイルサーバOS105を起動させる(S702)この処理は、例えば、ブロック制御マイクロプログラム108が、
図2Aに示したホスト物理アドレス空間203のアドレスAD#1〜AD#3にVMM106及びファイルサーバOS105のブートイメージを読み込んで、
図1に示したグループA115のCPUリソース112を割り当てれば良い。
【0144】
VMM106は起動を開始すると、ファイルサーバOS105のメモリ領域(
図2AのAD#2〜AD#3)を確保し、アドレス変換テーブル129の内容を確定する。また、VMM106はPCIコンフィグレジスタ130及びMMIOレジスタ131を初期化する(S703)。
【0145】
VMM106は、仮想HBA127の提供を開始し、ゲストOSとしてのファイルサーバOS105を起動する(S704)。ファイルサーバOS105は、起動すると仮想HBAドライバ123をロードして仮想HBA127が利用可能となる(S705)。
【0146】
そして、VMM106は、要求リングバッファ125と応答リングバッファ126の領域をユーザ領域204に確保する。VMM106は、要求リングバッファ125と応答リングバッファ126の設定が完了すると、要求ベースフィールド321aと応答ベースフィールド321bにベースアドレスをゲスト物理アドレスで設定する。また、VMM106は、要求リングバッファ125の要求PIレジスタ310a及び要求CIレジスタ310bを設定し、応答リングバッファ126の応答PIレジスタ311a及び応答CIレジスタ311bを設定する。
【0147】
要求リングバッファ125及び応答リングバッファ126の設定が完了すると、仮想HBAenableフィールド308に“1”を設定して利用開始を示し、仮想HBA127を有効化する(S706)。この後、VMM106は、仮想HBAstatusフィールド309に“1”を設定し、仮想HBA127の状態をenableに設定する。
【0148】
以上の設定が完了すると、ファイルサーバOS105がブロック制御マイクロプログラム108を介してストレージデバイス120へのアクセス(SCSI block access)を開始する(S707)。
【0149】
上記の初期化処理において、通信データパス制御テーブル133の初期化は、次のように行われる。
【0150】
ステップS701で、ブロック制御マイクロプログラム108が通信データパス制御テーブル133をクリアする。その後、仮想HBA127のステータスの変化や、初期化の完了により、ブロック制御マイクロプログラム108やVMM106が順次通信データパス制御テーブル133を設定する。
【0151】
まず、ステップS703で、VMM106が、ファイルサーバOS105のメモリ領域(
図2AのAD#2〜AD#3)を確保した後、アドレス変換テーブル129の内容が設定されるので、通信データパス制御テーブル133のフィールド317のアドレス変換テーブル129のアドレスを設定する。
【0152】
VMM106がPCIコンフィグレジスタ130及びMMIOレジスタ131を初期化すると、通信データパス制御テーブル133のフィールド314のPCIコンフィグレジスタ130のアドレスと、フィールド315のMMIOレジスタ131aのアドレス及びフィールド316のMMIOレジスタ131bのアドレスを設定する。
【0153】
通信データパス制御テーブル133のフィールド312の“vHBA device POST”は、ステップS703で仮想HBA127の初期化が完了するので、VMM106によって“1”に設定される。
【0154】
仮想HBA127の初期化が完了したステップS703の後には、ブロック制御マイクロプログラム108が仮想HBA127を認識するので、ブロック制御マイクロプログラム108が通信データパス制御テーブル133のフィールド312を“1”に設定する。以上のように、初期化の進行に応じてVMM106とブロック制御マイクロプログラム108によって通信データパス制御テーブル133が設定される。
【0155】
図5Bは、ストレージ装置の起動からファイルサーバOS105の実行までの処理の概要を示すシーケンス図である。
【0156】
ストレージ装置の停止状態(S801)から電源を投入すると、ブロック制御マイクロプログラム108が通信データパス制御テーブル133をクリアし、初期化する(S802=
図7のステップS701)。
【0157】
次に、ブロック制御マイクロプログラム108は、VMM106を起動させて(
図7のS702)、仮想HBA127の初期化を実施させる(S803)。VMM106が仮想HBA127を完了した段階では、ゲストOSに割り当てられていないため、通信データパス制御テーブル133のフィールド312の仮想HBA127のPOSTの値は0となる。
【0158】
VMM106がゲストOSとしてファイルサーバOS105を稼働させると、VMM106が仮想HBA127をファイルサーバOS105に割り当てる(S804)。この状態では、まだファイルサーバOS105が仮想HBAドライバ123をロードしていないので、仮想HBAstatusフィールド309の値は“0”である。
【0159】
ファイルサーバOS105が仮想HBAドライバ123をロードして、要求リングバッファ125及び応答リングバッファ126の設定が完了すると、仮想HBA127が利用可能となる(S805)。この段階で、仮想HBAstatusフィールド309の値は“1”となる。
【0160】
ファイルサーバOS105がクライアントから要求を受け付けて、要求リングバッファ125にコマンド及びデータを書き込むと、要求PIレジスタ310aが更新されてブロック制御マイクロプログラム108が当該要求を処理する(S806)。処理が完了するとブロック制御マイクロプログラム108は応答リングバッファ126の応答PIレジスタ311aにストレージデバイス120のアクセス結果を書き込んで処理を完了する(S805)。
【0161】
<ファイルサーバOSからブロック制御マイクロプログラムへの通信>
図6Aは、ファイルサーバOS105からブロック制御マイクロプログラム108への通信処理の一例を示すタイムチャートである。
【0162】
ステップS901では、ファイルサーバOS105がクライアントからストレージデバイス120へのアクセス要求として、例えば、NFS(Network File System)要求を受信する。ファイルサーバOS105は、受信した要求のコマンドに対応するデータを格納するためのデータバッファ124を確保する。
【0163】
ファイルサーバOS105は、受信したデータを格納したデータバッファ124を指し示すバッファアドレスリストを生成する。ファイルサーバOS105は、受信したコマンドとデータのバッファアドレスリストを要求リングバッファ125に格納する(S902)。
【0164】
ファイルサーバOS105は、次の要求を受け付ける要求リングバッファ125の位置を更新するため、要求PIレジスタ310aをインクリメントする(S903A)。
【0165】
一方、ブロック制御マイクロプログラム108は、ポーリングなどによって要求リングバッファ125のポインタである要求PIレジスタ310aを監視する(S900)。ステップS903Bでは、ブロック制御マイクロプログラム108が、要求PIレジスタ310aの更新を検出し、要求PIレジスタ310aで指定される要求リングバッファ125からコマンドを読み込む。
【0166】
次に、ブロック制御マイクロプログラム108は、読み込んだコマンドをデコードして、ストレージデバイス120へのアクセスがリードとライトの何れであるかを判定する(S904)。
【0167】
読み込んだコマンドがライトであれば、ブロック制御マイクロプログラム108は、要求PIレジスタ310aが示す要求リングバッファ125のSGL303からバッファアドレスリストを取得する。次に、ブロック制御マイクロプログラム108は、アドレス変換テーブル129を読み込んで、バッファアドレスリストのゲスト物理アドレス空間202を、ホスト物理アドレス空間203へ変換し、データバッファ124の位置を特定する(S905)。
【0168】
ブロック制御マイクロプログラム108は、要求CIレジスタ310bの値をインクリメントして、次に読み込むべき要求リングバッファ125の位置を更新する(S906)。その後、ブロック制御マイクロプログラム108は、取得したコマンド及びバッファアドレスリストのデータでストレージデバイス120へのアクセスを実行する(S907)。
【0169】
以上の処理により、ファイルサーバOS105とブロック制御マイクロプログラム108は、VMM106を介在することなく直接通信を行うことが可能となって、VMM106への切り替えに要するオーバーヘッドを削減し、処理の高速化を推進できるのである。
【0170】
図6Bは、上記
図6Aの処理のうちファイルサーバOS105からブロック制御マイクロプログラム108への処理の一例を示すフローチャートである。
【0171】
ファイルサーバOS105がクライアントからストレージデバイス120へのアクセス要求を受け付けると、処理が開始される(S1002)。アクセス要求としては、例えば、NFS要求を受信する。ファイルサーバOS105は、受信した要求のコマンドに対応するデータを格納するためのデータバッファ124を確保する(S1003)。
【0172】
ファイルサーバOS105は、受信したデータを格納したデータバッファ124を指し示すバッファアドレスリストを生成する。ファイルサーバOS105は、受信したコマンドとデータのバッファアドレスリストを要求リングバッファ125に格納する(S1004)。
【0173】
ファイルサーバOS105は、仮想HBAドライバ123を呼び出して(S1011)、データバッファ124の位置をMMIOレジスタ131aから取得する(S1012)。
【0174】
ファイルサーバOS105は、受信したデータを格納したデータバッファ124の位置からバッファアドレスリストを生成し、要求リングバッファのSGL303に格納する(S1014)。また、ファイルサーバOS105は、ストレージデバイス120に対するコマンドをSCSI CDB(Command Descriptor Block)304に格納する。
【0175】
そして、ファイルサーバOS105は、次の要求を受け付ける要求リングバッファ125の位置を更新するため、要求PIレジスタ310aをインクリメントする(S1015)。
【0176】
ファイルサーバOS105は、上記処理を繰り返して要求リングバッファ125へ受け付けたコマンドとデータを格納する。
【0177】
図6Cは、上記
図6Aの処理のうちブロック制御マイクロプログラムで行われる処理の一例を示すフローチャートである。
【0178】
この処理は、ブロック制御マイクロプログラム108が起動されると実行される(S1101)。ブロック制御マイクロプログラム108は、ポーリングによって要求リングバッファ125のポインタである要求PIレジスタ310aが更新されるまで待機する(S1102)。
【0179】
要求PIレジスタ310aが更新されると、ブロック制御マイクロプログラム108は、要求PIレジスタ310aで指定される要求リングバッファ125からコマンドを読み込む。ブロック制御マイクロプログラム108は、読み込んだコマンドをデコードして、ストレージデバイス120へのアクセスがリードとライトの何れであるかを判定する(S1103)。
【0180】
読み込んだコマンドがライトであれば、ブロック制御マイクロプログラム108は、要求PIレジスタ310aが示す要求リングバッファ125のSGL303からバッファアドレスリストを取得する(S1104)。
【0181】
次に、ブロック制御マイクロプログラム108は、アドレス変換テーブル129を読み込んで、バッファアドレスリストのゲスト物理アドレス空間202を、ホスト物理アドレス空間203へ変換し、データバッファ124の位置を特定する(S1105)。
【0182】
ブロック制御マイクロプログラム108は、要求CIレジスタ310bの値をインクリメントして、次に読み込むべき要求リングバッファ125の位置を更新する(S1106)。その後、ブロック制御マイクロプログラム108は、取得したコマンド及びバッファアドレスリストのデータでストレージデバイス120へのアクセスを実行する(S1107)。アクセスが完了した後は、後述する応答処理へ移行する。
【0183】
図7Aは、ブロック制御マイクロプログラム108からファイルサーバOSへの通信処理の一例を示すタイムチャートである。
【0184】
ブロック制御マイクロプログラム108は、
図6AのステップS907に続いて、ストレージデバイス120のアクセスが完了するまで待機する(S1200)。ストレージデバイス120のアクセスが完了すると、ブロック制御マイクロプログラム108は要求に対する応答(データ)をストレージデバイス120から受信する。以下、ストレージデバイス120に対する要求がリードであった例を示す。
【0185】
ブロック制御マイクロプログラム108は、ストレージデバイス120から読み出したデータを、データバッファ124へ転送する(S1201)。この処理は、ブロック制御マイクロプログラム108がコピー処理またはDMAによって実行する。
【0186】
ブロック制御マイクロプログラム108は、データバッファ124にコピーした位置を応答リングバッファ126のstatus305に書き込んで更新する(S1202)。
【0187】
次に、ステップS1203では、ブロック制御マイクロプログラム108が、応答PIレジスタ311aの値をインクリメントして、次の応答を格納する応答リングバッファ126の位置を更新する。
【0188】
次に、ブロック制御マイクロプログラム108は、物理割込み134を生成し、物理割込み134をVMM106に送信する(S1204)。ここで、物理割込み134はブロック制御マイクロプログラム108を実行するグループB116のCPUリソース112から、グループA115に対するプロセッサ間割り込みIPI(Inter Processor Interrupt)とする。
【0189】
VMM106は、物理割込み134を受信すると、仮想割り込み128を生成してファイルサーバOS105の仮想HBAドライバ123に通知する。
【0190】
仮想HBAドライバ123は、VMM106から仮想割り込み128を受けると、所定の割り込みハンドラを起動して、応答リングバッファ126のstatus305を読み込む。そして、ファイルサーバOS105の仮想HBAドライバ123は、status305に格納されたデータバッファ124の位置からデータを取得する。
【0191】
そして、ファイルサーバOS105は、応答CIレジスタ311bの値をインクリメントして、次の応答を格納する応答リングバッファ126の位置を更新する(S1207)次に、ファイルサーバOS105のファイルシステムレイヤ121は、クライアントに対してストレージデバイス120からの応答を返信する。
【0192】
ブロック制御マイクロプログラム108は、物理割込み134を送信した後は、ポーリングにより応答リングバッファ126の応答CIレジスタ311bが更新されるのを監視する(S1209)。
【0193】
ブロック制御マイクロプログラム108は、応答CIレジスタ311bの更新を検出すると(S1207B)、応答リングバッファ126のstatus305を解放する。
【0194】
上記処理により、ブロック制御マイクロプログラム108からの応答は、応答リングバッファ126と物理割込み134を介してファイルサーバOS105に送信される。
【0195】
図7Bは、上記
図7Aの処理のうちブロック制御マイクロプログラム108で行われる処理の一例を示すフローチャートである。
【0196】
ブロック制御マイクロプログラム108は、
図6CのステップS1108に続いて、ストレージデバイス120のアクセスが完了するまで待機する(S1302)。ストレージデバイス120のアクセスが完了すると、ブロック制御マイクロプログラム108は要求に対する応答(データ)をストレージデバイス120から受信する。上述のように、以下では、ストレージデバイス120に対する要求がリードであった例を示す。
【0197】
ブロック制御マイクロプログラム108は、ストレージデバイス120から読み出したデータを、データバッファ124へ転送する(S1303)。この処理は、ブロック制御マイクロプログラム108がコピー処理またはDMAによって実行する。
【0198】
ブロック制御マイクロプログラム108は、データバッファ124にコピーした位置を応答リングバッファ126のstatus305に書き込んで更新する(S1304)。
【0199】
次に、ステップS1305では、ブロック制御マイクロプログラム108が、応答PIレジスタ311aの値をインクリメントして、次の応答を格納する応答リングバッファ126の位置を更新する(S1305)。
【0200】
次に、ブロック制御マイクロプログラム108は、物理割込み134を生成し、物理割込み134をVMM106に送信する(S1306)。ここで、物理割込み134はブロック制御マイクロプログラム108を実行するグループB116のCPUリソース112から、グループA115に対するプロセッサ間割り込みIPI(Inter Processor Interrupt)とする。
【0201】
ブロック制御マイクロプログラム108は、物理割込み134を送信した後は、ポーリングにより応答リングバッファ126の応答CIレジスタ311bが更新されるのを監視する(S1307)。
【0202】
ブロック制御マイクロプログラム108は、応答CIレジスタ311bの更新を検出すると(S1207B)、応答リングバッファ126のstatus305を解放して処理を終了し、再び
図6CのステップS1101に復帰する。
【0203】
図7Cは、本発明の実施例を示し、上記
図7Aの処理のうちファイルサーバOS105で行われる処理の一例を示すフローチャートである。
【0204】
VMM106は、ブロック制御マイクロプログラム108から物理割込み134を受信すると、仮想割り込み128を生成してファイルサーバOS105の仮想HBAドライバ123に通知する。
【0205】
ファイルサーバOS105は、仮想HBAドライバ123がVMM106から仮想割り込み128を受けると、
図7Cの処理を開始する。
【0206】
仮想割り込み128を受けて、仮想HBAドライバ123は所定の割り込みハンドラを起動し(S1402)、応答リングバッファ126からstatus305を読み込む(S1403)。
【0207】
ファイルサーバOS105は、status305に格納されたデータバッファ124の位置からデータを取得する(S1404)。この処理は、ストレージデバイス120にリードのときの処理で、仮想HBAドライバ123がデータバッファ124の内容をファイルシステムレイヤ121に通知する。
【0208】
ファイルサーバOS105は、応答CIレジスタ311bの値をインクリメントして、次の応答を格納する応答リングバッファ126の位置を更新する(S1405)。
【0209】
ファイルサーバOS105は、ファイルシステムレイヤ121の所定の関数を起動し(S1406)、クライアントに対してストレージデバイス120からの応答を返信する(S1407)。
【0210】
以上の処理により、ファイルサーバOS105は、仮想割り込み128に基づいて、応答リングバッファ126の内容を、クライアントに返信することができる。
【0211】
<補足>
本実施例では、VMM106上のファイルサーバOS105と、VMM106と同一のハードウェア109上で稼働するブロック制御マイクロプログラム108との通信を、メモリリソース113上に設定した通信データパスで行う。
【0212】
メモリリソース113上の通信データパスは、データバッファ124、要求リングバッファ125、応答リングバッファ126、MMIOレジスタ131、アドレス変換テーブル129及び通信データパス制御テーブル133からなり、ファイルサーバOS105からブロック制御マイクロプログラム108への通信ではVMM106を介することなく高速な通信を実現できるのである。
【0213】
なお、上記実施例においては、仮想マシンを生成するソフトウェアとしてVMM106を用いる例を示したが、ハイパーバイザを用いてもよい。
【0214】
また、上記実施例においては、CPUリソース112の仮想化支援機能としてインテル(登録商標)社のVT−zを用いる例を示したが、AMD社のAMD−V等のように仮想化を支援する機能を利用するものであればよい。
【0215】
また、上記実施例においては、CPUリソース112が仮想化支援機能を備えたマルチコアのCPUで構成された例を示したが、複数のCPUコアまたはCPUモジュールを含むヘテロジニアス・マルチコア・プロセッサでプロセッサリソースを構成してもよい。
【0216】
また、上記実施例においては、通信データパスとして要求リングバッファ125と応答リングバッファ126を用いる例を示したが、これに限定されるものではなく、キューなどのバッファで構成してもよい。
【0217】
また、本発明において説明した計算機等の構成、処理部及び処理手段等は、それらの一部又は全部を、専用のハードウェアによって実現してもよい。
【0218】
また、本実施例で例示した種々のソフトウェアは、電磁的、電子的及び光学式等の種々の記録媒体(例えば、非一時的な記憶媒体)に格納可能であり、インターネット等の通信網を通じて、コンピュータにダウンロード可能である。
【0219】
また、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明をわかりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。
【0220】
15.
請求項14に記載のストレージ装置であって、
前記生成された通信経路は、前記ストレージデバイスに対する前記要求の処理結果を含む応答を格納する応答バッファを含み、
前記第1のOSは、
前記取得した要求をストレージデバイスに対して実行し、前記ストレージデバイスからの応答を取得した後に、前記応答を前記応答バッファに格納し、
前記第2のOSは、
前記応答バッファから前記応答を取得することを特徴とするストレージ装置。
【0221】
16.
前記15.に記載のストレージ装置であって、
前記仮想化部は、
前記応答バッファに対して新たな応答を格納する位置を示す応答PI(Producer Index)レジスタと、前記応答バッファから次に読み出す応答を指し示す応答CI(Consumer Index)レジスタと、を前記メモリ上に設定し、前記第1のOSおよび前記第2のOSに対して前記応答PIレジスタと前記応答CIレジスタとを提供し、
前記第1のOSは、
前記応答バッファに前記応答を格納した後に、前記応答PIレジスタを更新し、前記過疎化部に対して割り込みを通知し、
前記仮想化部は、
前記割り込みを受信すると前記第2のOSに対して当該割り込みを通知し、前記第2のOSは、前記応答CIレジスタを参照して前記応答バッファから前記応答を読み出した後、前記応答CIレジスタを更新することを特徴とするストレージ装置。