図1は、本発明のエンドポイント共有システムのクレーム対応図を示したものである。本発明のエンドポイント共有システム10は、統合エンドポイント側送信手段11と、拡張サーバ決定手段12と、拡張サーバ名挿入手段13と、主サーバ側送信手段14と、1次共有メモリ書込手段15と、2次共有メモリ転送手段16を備えている。ここで、統合エンドポイント側送信手段11は、統合エンドポイントにおける所定のエンドポイントから現用系のサーバとしての主サーバにPCIeパケットを送信する。統合エンドポイントは、コンピュータ用拡張バスアーキテクチャとしてのPCI(Peripheral Component Interconnect)機能を代理する機能部としてのPCIプロシキ(Proxy)機能部と、複数のエンドポイントとから構成されている。拡張サーバ決定手段12は、統合エンドポイント側送信手段11の送信したPCIeパケットに格納されたデータを処理する拡張サーバを決定する。拡張サーバ名挿入手段13は、拡張サーバ決定手段12で決定した拡張サーバのサーバ名を前記したPCIeパケットに挿入する。主サーバ側送信手段14は、拡張サーバ名挿入手段13でサーバ名を挿入したPCIeパケットを前記した主サーバから所定の記憶装置に送信する。1次共有メモリ書込手段15は、主サーバ側送信手段14で送信したPCIeパケットを受信して前記した記憶装置内の1次共有メモリに書き込む。2次共有メモリ転送手段16は、PCIeパケットを、アクティブ系およびスタンバイ系の各サーバのそれぞれに個別に対応して設けられこれらのサーバとの間のデータの個別転送に使用する2次共有メモリのうちの前記した拡張サーバ決定手段12で決定した2次共有メモリに転送する。このPCIeパケットは、1次共有メモリ書込手段15で前記した1次共有メモリに書き込んだパケットである。
図2は、本発明の他のエンドポイント共有システムのクレーム対応図を示したものである。本発明の他のエンドポイント共有システム20は、拡張サーバ側挿入手段21と、2次共有メモリ格納手段22と、PCIeパケット送信手段23を備えている。ここで、拡張サーバ側挿入手段21は、統合エンドポイントにおける特定のエンドポイントに対して任意の主サーバおよび拡張サーバがデータの送信を行うときそのPCIeパケットに前記した特定のエンドポイントを表わす識別情報を挿入する。統合エンドポイントは、コンピュータ用拡張バスアーキテクチャとしてのPCI(Peripheral Component Interconnect)機能を代理する機能部としてのPCIプロシキ(Proxy)機能部と、複数のエンドポイントとから構成されている。2次共有メモリ格納手段22は、PCIeパケットを、それぞれの主サーバおよび拡張サーバに個別に対応して設けられこれらのサーバとの間のデータの個別転送に使用する複数の2次共有メモリのうちの送信元の前記した任意の主サーバおよび拡張サーバに対応する2次共有メモリに格納する。このPCIeパケットは、拡張サーバ側挿入手段21で前記した識別情報を挿入したパケットである。PCIeパケット送信手段23は、2次共有メモリ格納手段22が前記した2次共有メモリのいずれかにPCIeパケットを格納したとき前記した識別情報を読み出してこの識別情報から判別されるエンドポイント宛にPCIeパケットを送信する。
図3は、本発明のデータ転送方法のクレーム対応図を示したものである。本発明のデータ転送方法30は、統合エンドポイント側送信ステップ31と、拡張サーバ決定ステップ32と、拡張サーバ名挿入ステップ33と、主サーバ側送信ステップ34と、1次共有メモリ書込ステップ35と、2次共有メモリ転送ステップ36を備えている。ここで、統合エンドポイント側送信ステップ31では、統合エンドポイントにおける所定のエンドポイントから現用系のサーバとしての主サーバにPCIeパケットを送信する。統合エンドポイントは、コンピュータ用拡張バスアーキテクチャとしてのPCI(Peripheral Component Interconnect)機能を代理する機能部としてのPCIプロシキ(Proxy)機能部と、複数のエンドポイントとから構成されている。拡張サーバ決定ステップ32では、統合エンドポイント側送信ステップ31で送信したPCIeパケットを受信した主サーバがこのPCIeパケットに格納されたデータを処理する拡張サーバを決定する。拡張サーバ名挿入ステップ33では、拡張サーバ決定ステップ32で決定した拡張サーバのサーバ名を前記したPCIeパケットに挿入する。主サーバ側送信ステップ34では、拡張サーバ名挿入ステップ33でサーバ名を挿入したPCIeパケットを前記した主サーバから所定の記憶装置に送信する。1次共有メモリ書込ステップ35では、主サーバ側送信ステップ34で送信したPCIeパケットを受信して前記した記憶装置内の1次共有メモリに書き込む。2次共有メモリ転送ステップ36では、PCIeパケットを、アクティブ系およびスタンバイ系の各サーバのそれぞれに個別に対応して設けられこれらのサーバとの間のデータの個別転送に使用する2次共有メモリのうちの前記した拡張サーバ決定ステップ32で決定した2次共有メモリに転送する。このPCIeパケットは、1次共有メモリ書込ステップ35で前記した1次共有メモリに書き込んだものである。
図4は、本発明のデータ転送方法のクレーム対応図を示したものである。本発明のデータ転送方法40は、拡張サーバ側挿入ステップ41と、2次共有メモリ格納ステップ42と、PCIeパケット送信ステップ43とを備えている。ここで、拡張サーバ側挿入ステップ41では、統合エンドポイントにおける特定のエンドポイントに対してデータの送信を行う任意の主サーバおよび拡張サーバがPCIeパケットに前記した特定のエンドポイントを表わす識別情報を挿入する。統合エンドポイントは、コンピュータ用拡張バスアーキテクチャとしてのPCI(Peripheral Component Interconnect)機能を代理する機能部としてのPCIプロシキ(Proxy)機能部と、複数のエンドポイントとから構成されている。2次共有メモリ格納ステップ42では、拡張サーバ側挿入ステップ41で前記した識別情報を挿入したPCIeパケットを、それぞれの主サーバおよび拡張サーバに個別に対応して設けられこれらのサーバとの間のデータの個別転送に使用する複数の2次共有メモリのうちの自サーバに対応する2次共有メモリに格納する。PCIeパケット送信ステップ43では、2次共有メモリ格納ステップ42で前記した2次共有メモリのいずれかにPCIeパケットが格納されたとき前記した識別情報を読み出してこの識別情報から判別されるエンドポイント宛にPCIeパケットを送信する。
<発明の実施の形態>
次に本発明の実施の形態を説明する。
図5は、本発明の実施の形態によるエンドポイント共有システムを表わしたものである。このエンドポイント共有システム100は、第1および第2の統合エンドポイント1011、1012を備えている。また、エンドポイント共有システム100はACT(active)系サーバ群として第0−0のサーバ(Server#0−0)103と、第0−1のサーバ(Server#0−1)1041、およびSBY(standby)系サーバ群としての第1−0のサーバ(Server#1−0)105と、第1−1のサーバ(Server#1−1)1061を備えている。更にエンドポイント共有システム100は、記憶装置107を備えている。記憶装置107と、第0−0、第0−1、第1−0および第1−1の各サーバ103〜1061は、直接接続される他、LAN(Local Area Network)108を介して接続されている。第1の統合エンドポイント1011と、第0−0のサーバ103および第1−0のサーバ105は直接接続されている。第2の統合エンドポイント1012と、第0−0のサーバ103および第1−0のサーバ105も同様に直接接続されている。
第0−0のサーバ103および第1−0のサーバ105は、本明細書で主サーバと定義するもので、第1の統合エンドポイント1011における第0〜第Nのエンドポイント(EP#0〜EP#N)1110〜111Nへのアクセス機能を持っている。これに対して第0−1のサーバ1041および第1−1のサーバ1061は、本明細書で拡張サーバと定義するもので、第0〜第Nのエンドポイント(EP#0〜EP#N)1110〜111Nへのアクセス機能を持っていない。
本実施の形態ではACT系サーバ群の中に拡張サーバとして1台の第0−1のサーバ1041が配置され、SBY系サーバ群の中に拡張サーバとして1台の第1−1のサーバ1061が配置されている。ACT系サーバ群あるいはSBY系サーバ群に複数台ずつの拡張サーバが配置されるようになっていてもよい。
第0−0、第0−1、第1−0および第1−1の各サーバ103〜1061と第1および第2の統合エンドポイント1011、1012は、それぞれ物理的に分離されている。主サーバとしての第0−0のサーバ103と第1および第2の統合エンドポイント1011、1012の間、および同じく主サーバとしての第1−0のサーバ105と第1および第2の統合エンドポイント1011、1012の間は、PCIeケーブルを用いて接続されている。ここで「PCIe」は、「PCI(Peripheral Component Interconnect)Express」を略して表記したものである。
主サーバとしての第0−0のサーバ103は、第1の統合エンドポイント1011とPCIeケーブルを用いて接続するためのPCIe NICカード(Network Interface Card)(PCIe NIC#001)121を実装している。また、第0−0のサーバ103は、第2の統合エンドポイント1012とPCIeケーブルを用いて接続するためのPCIe NICカード(PCIe NIC#002)122を実装している。更に第0−0のサーバ103は、第1および第2の統合エンドポイント1011、1012とのデータのやり取りを行うインタフェイスとしてPCIe NICカード(PCIe NIC#00E)123と、拡張サーバ間とのデータのやり取りに用いるPCIe NICカード(PCIe NIC#00S)124を有する。
同様に、主サーバとしての第1−0のサーバ105は、第1の統合エンドポイント1011とPCIeケーブルを用いて接続するためのPCIe NICカード(PCIe NIC#101)125を実装している。また、第1−0のサーバ105は、第2の統合エンドポイント1012とPCIeケーブルを用いて接続するためのPCIe NICカード(PCIe NIC#102)126を実装している。更に第1−0のサーバ105は、第1および第2の統合エンドポイント1011、1012とのデータのやり取りを行うインタフェイスとしてPCIe NICカード(PCIe NIC#10E)127と、拡張サーバ間とのデータのやり取りに用いるPCIe NICカード(PCIe NIC#10S)128を有する。
一方、拡張サーバとしての第0−1および第1−1のサーバ1041、1061は記憶装置107と接続するために、1系統のPCIe NICカードを有する。すなわち第0−1のサーバ1041は、サーバ間のデータのやり取りに用いるPCIe NICカード(PCIe NIC#01S)131を有する。第1−1のサーバ1061は、サーバ間のデータのやり取りに用いるPCIe NICカード(PCIe NIC#11S)132を有する。
次に第1および第2の統合エンドポイント1011、1012について説明する。ただし第2の統合エンドポイント1012は第1の統合エンドポイント1011と同一の構成となっているので、その具体的な構成の図示および説明は省略する。
第1の統合エンドポイント1011は、前記した第0〜第Nのエンドポイント(EP#0〜EP#N)1110〜111NとPCIプロシキ(Proxy)機能部141によって構成されている。PCIプロシキ機能部141と第0〜第Nのエンドポイント1110〜111Nの間は、それぞれPCIeバスを用いて接続されている。
PCIプロシキ機能部141は、コンピュータ用拡張バスアーキテクチャとしてのPCI(Peripheral Component Interconnect)機能を代理する機能部である。PCIプロシキ機能部141は、図示しないがCPUと、このCPUが実行する制御プログラムを格納した同じく図示しないROM(Read Only Memory)等の記録媒体を有しており、次の各部を備えている。
(a)第0のポート1510
第0−0のサーバ103とピーシーアイエクスプレスケーブル161を介して接続される。
(b)第1のポート1511
第1−0のサーバ105とピーシーアイエクスプレスケーブル162を介して接続される。
(c)ACT(active)・SBY(standby)選択機能部152
第0−0のサーバ103および第0−1のサーバ1041からなるACT系サーバ群と、第1−0のサーバ105と、第1−1のサーバ1061からなるSBY系サーバ群の一方をACT(現用)系に、他方をSBY(待機)系に選択する。
(d)第0の仮想PCIeコンフィグ(Configuration)レジスタ1540
各エンドポイント111のピーシーアイエクスプレスコンフィグレジスタ情報を格納する。
(e)第1の仮想PCIeコンフィグ(Configuration)レジスタ1541
各エンドポイント111のピーシーアイエクスプレスコンフィグレジスタ情報を格納する。
(f)コンフィグ(Configuration)制御部155
第0の仮想PCIeコンフィグレジスタ1540および第1の仮想PCIeコンフィグレジスタ1541を管理する。
(g)アドレス変換テーブル156
ACT系サーバ群とSBY系サーバ群のメモリ空間の差分情報としてのアドレス空間差分情報を保持する。
(h)アドレス変換部157
ACT系サーバ群とSBY系サーバ群のメモリ空間へのアクセスが同一のアドレスになるように、アドレスを変換する。
(i)アドレス変換・振り分け機能部158
ACT系サーバ群とSBY系サーバ群のうちのACT系のサーバと接続されたポートとの間でピーシーアイエクスプレスパケットを振り分ける。
(j)第0〜第NのPCIeポート(Port)1590〜159N
第0〜第Nのエンドポイント1110〜111Nをそれぞれ対応して接続する。
PCIプロシキ機能部141を更に具体的に説明する。第0のポート1510および第1のポート1511は、ピーシーアイエクスプレスパケットで転送されるACT制御信号を識別する。そして、ACT切替指示がACT系サーバ群もしくはSBY系サーバ群から送付された場合には、ACT・SBY選択機能部152に対してACT・SBY切替指示を出す。ACT・SBY選択機能部152は、アドレス変換・振り分け機能部158に対して、ACT系のサーバがACT系サーバ群もしくはSBY系サーバ群を示す信号を送出する。アドレス変換・振り分け機能部158は、ACT系のサーバと接続されたポートとの接続を維持し、SBY系のポートとのデータを交換しない。
コンフィグ制御部155は、第0〜第Nのエンドポイント1110〜111Nが保持する、ピーシーアイエクスプレスコンフィグレーションレジスタ(図示せず)を制御する機能を有する。また、第0の仮想PCIeコンフィグ(Configuration)レジスタ1540および第1の仮想PCIeコンフィグ(Configuration)レジスタ1541に対して、各エンドポイント111のピーシーアイエクスプレスコンフィグレジスタ情報の内容を反映させる機能を有する。ACT系サーバ群とSBY系サーバ群は、第0の仮想PCIeコンフィグレジスタ1540および第1の仮想PCIeコンフィグレジスタ1541に対して、ピーシーアイエクスプレスコンフィグレーション情報のリード(Read)およびライト(Write)を行う。このため、第0−0のサーバ103、第0−1のサーバ1041、第1−0のサーバ105および第1−1のサーバ1061から各エンドポイント111のピーシーアイエクスプレスコンフィグレジスタレジスタが直接制御されることはない。各エンドポイント111のピーシーアイエクスプレスコンフィグレジスタレジスタは、コンフィグ制御部155を経由してアクセスする。
また、コンフィグ制御部155は、第0の仮想PCIeコンフィグレジスタ1540および第1の仮想PCIeコンフィグレジスタ1541に設定されたピーシーアイエクスプレスコンフィグレーションレジスタ情報から、ACT系サーバ群とSBY系サーバ群が保持しているピーシーアイエクスプレスメモリ空間マップ情報を取得する。そして、第0−0のサーバ103、第0−1のサーバ1041、第1−0のサーバ105および第1−1のサーバ1061がメモリ空間上に各エンドポイント111をどのように配置したかを認識する。差分がある場合には、ACT系サーバ群のメモリ空間に対して、SBY系サーバ群のメモリ空間の差分を計算し、得られた差分情報をアドレス変換テーブル156に転送する。
アドレス変換部157は、アドレス変換テーブル156から送信されるACT系サーバ群とSBY系サーバ群についてのアドレス空間差分情報を取得する。そして、SBY系サーバ群のメモリ空間へのアクセスをACT系サーバ群のメモリ空間へのアクセスと同一のアドレスになるように、アドレス変換処理を実施する。また、SBY系サーバ群と各エンドポイント111の間でのアクセスの際に、ピーシーアイエクスプレスパケットを交換する。
アドレス変換・振り分け機能部158は、各エンドポイント111に対するピーシーアイエクスプレスパケットの振り分けを、ピーシーアイエクスプレスパケットヘッダ内に格納されたアドレス情報を基にして実施する。各エンドポイント111からサーバ方向に流れるパケットは、ACT・SBY選択機能部152から送信されるACT情報を基にして、ACT系サーバ群と接続されたポート方向にのみにパケットを送信する。
次に、記憶装置107について説明する。記憶装置107は、LAN108を介して第0−0のサーバ103、第0−1のサーバ1041、第1−0のサーバ105および第1−1のサーバ1061と接続されている。これにより、記憶装置107に格納されたデータを、第0−0のサーバ103、第0−1のサーバ1041、第1−0のサーバ105および第1−1のサーバ1061が共有可能となる。
本実施の形態の記憶装置107は、DRAM(Dynamic Random Access Memory)、FRAM(FeRAM)等の汎用の半導体メモリを用いる。また、第0−0のサーバ103、第0−1のサーバ1041、第1−0のサーバ105および第1−1のサーバ1061と記憶装置107の間のデータ転送にはPCIeを用いる。これらの部品、データ転送規格は、汎用品および標準化された規格であり、安価に市場に出回っているものを使用可能である。
第0〜第Nのエンドポイント1110〜111Nにアクセス可能なサーバは、第0−0のサーバ103および第1−0のサーバ105のみである。第0−1のサーバ1041および第1−1のサーバ1061がエンドポイント111にアクセスする場合には、対象となるデータを記憶装置107に一旦転送する。そして、第0−0のサーバ103あるいは第1−0のサーバ105のうちの該当するものを経由してエンドポイント111にアクセスを実施する。
<動作説明>
次に、以上のような構成のエンドポイント共有システム100の動作を説明する。
第0−0のサーバ103、第0−1のサーバ1041、第1−0のサーバ105および第1−1のサーバ1061は、図示しないがCPUを搭載している。これらのサーバに搭載されたCPUから第0〜第Nのエンドポイント1110〜111Nに対するピーシーアイエクスプレスアクセスは、大別すると、ピーシーアイエクスプレスコンフィグレーションレジスタ(コンフィグレジスタ)へのアクセスと、実データのアクセスの2種類が存在する。本実施の形態のエンドポイント共有システム100では、ピーシーアイエクスプレスコンフィグレーションレジスタへのアクセスはコンフィグ制御部155が中心となって処理を実行する。また、実データのアクセスは、アドレス変換部157と、アドレス変換・振り分け機能部158が中心となって、これらの処理を実行する。エンドポイント共有システム100では、ピーシーアイエクスプレスコンフィグレーションレジスタへのアクセスを、電源投入時に実行する。ピーシーアイエクスプレスコンフィグレーションレジスタが一旦設定された後は、第0−0のサーバ103、第0−1のサーバ1041、第1−0のサーバ105および第1−1のサーバ1061に切り替えが発生しても設定変更が行われない。
<コンフィグレーション処理>
図6は、サーバの電源投入後のアドレス変換テーブル作成までのコンフィグレーション処理の様子を示したものである。図5と共に説明する。
エンドポイント111へのコンフィグレーションを行うのは、第0−0のサーバ103と第1−0のサーバ105である。汎用サーバでは、その電源投入直後に、ピーシーアイエクスプレスバス配下のエンドポイントを検索し、PCIメモリ空間上にエンドポイントのマッピングを行う。本実施の形態のエンドポイント共有システム100では、第1の統合エンドポイント1011が第0−0のサーバ103(「Server#0−0)と第1−0のサーバ105(Server#1−0)からのピーシーアイエクスプレスコンフィグレジスタへのアクセスに対して、代理で応答する機能を有する。これにより、第0−0のサーバ103あるいは第1−0のサーバ105が第0〜第Nのエンドポイント1110〜111Nをメモリ空間上にマッピングすることを可能にする。
これを具体的に説明する。図6に示すように第0−0のサーバ103と第1−0のサーバ105の電源がある時刻t1にオン(On)になったとする。コンフィグ制御部155は、第1の統合エンドポイント1011に接続された第0〜第Nのエンドポイント1110〜111Nのピーシーアイエクスプレスコンフィグレーション空間を、第0−0のサーバ103あるいは第1−0のサーバ105に代わってリード(Read)する(ステップS201)。図6では、第Xのエンドポイント111Xを「EP#X」(ただし、Xは0〜Nの間の任意の整数。)と簡略化して表記している。以下の図でも同様である。
図6に示した例では、まず時刻t2に第0のエンドポイント1110(「EP#0」)がリードされ、続いて第1のエンドポイント1111(「EP#1」)がリードされる。以下同様にして、第Nのエンドポイント111N(「EP#N」)までリードが実行される。
コンフィグ制御部155は、このステップS201によるリードした結果を、第0および第1の仮想PCIeコンフィグレジスタ1540、1541に反映させる。これにより、第0−0のサーバ103と第1−0のサーバ105が、第0〜第Nのエンドポイント1110〜111Nのピーシーアイエクスプレスコンフィグレーションレジスタの内容を、コンフィグ制御部155経由でリードすることが可能になる。
ところで、時刻t1の電源投入時にACT(active)系サーバ群が現用系に設定されているとする。また、これを基にして第Nのエンドポイント111N(「EP#N」)までのリードが終了した後の時刻t3に第0のポート1510がACTの状態で、第1のポート1511がSBYの状態であるとする。時刻t3以後における第0−0のサーバ103と第1の統合エンドポイント1011の間でのコンフィグレーションデータの処理の様子を、図6ではステップS202として一括して示している。また、図6では、この場合における第1−0のサーバ105と第1の統合エンドポイント1011の間でのコンフィグレーションデータの処理の様子を、ステップS203として一括して示している。
最初に、ACT系の第0−0のサーバ103と第1の統合エンドポイント1011の間で行われるステップS202の処理について説明する。第0−0のサーバ103は、まず第0の仮想PCIeコンフィグレジスタ1540に格納された第0のエンドポイント1110(「EP#0」)の内容をリードし、第0のエンドポイント1110に書き込むコンフィグレーションデータを第0の仮想PCIeコンフィグレジスタ1540にライトする。コンフィグ制御部155は、第0−0のサーバ103から第0の仮想PCIeコンフィグレジスタ1540にデータがライトされると、このコンフィグレーションデータを第0のPCIeポート1590を経由して、第0のエンドポイント1110に対してライトを実施する。この第0のエンドポイント1110のピーシーアイエクスプレスコンフィグレーションレジスタへのライトは、図6で時刻t4に行われている。
同様に、第0−0のサーバ103は、第0の仮想PCIeコンフィグレジスタ1540に格納された第1のエンドポイント1111(「EP#1」)の内容をリードし、第1のエンドポイント1111に書き込むコンフィグレーションデータを第0の仮想PCIeコンフィグレジスタ1540にライトする。コンフィグ制御部155は、第0−0のサーバ103から第0の仮想PCIeコンフィグレジスタ1540にデータがライトされると、このコンフィグレーションデータを第1のPCIeポート1591を経由して、第1のエンドポイント1111に対してライトを実施する。
以下同様にして、第0−0のサーバ103は、第0の仮想PCIeコンフィグレジスタ1540に格納された第2のエンドポイント1112(「EP#2」(図示せず))以降の処理を順に行う。そして、第0の仮想PCIeコンフィグレジスタ1540に格納された第Nのエンドポイント111N(「EP#N」)の内容をリードすると、第Nのエンドポイントに書き込むコンフィグレーションデータを第0の仮想PCIeコンフィグレジスタ1540にライトする。コンフィグ制御部155は、第0−0のサーバ103から第0の仮想PCIeコンフィグレジスタ1540にデータがライトされると、このコンフィグレーションデータを第NのPCIeポート159Nを経由して、第Nのエンドポイント111Nに対してライトを実施する。
次に、SBY系の第1−0のサーバ105と第1の統合エンドポイント1011の間で行われるステップS203の処理について説明する。第1−0のサーバ105は、まず第1の仮想PCIeコンフィグレジスタ1541に格納された第0のエンドポイント1110(「EP#0」)の内容をリードし、第0のエンドポイントに書き込むコンフィグレーションデータを第1の仮想PCIeコンフィグレジスタ1541にライトする。しかしながら、この場合、コンフィグ制御部155は、代理で第0のエンドポイント1110に対してライトを実施することはない。
以下同様にして、第1−0のサーバ105は、第1の仮想PCIeコンフィグレジスタ1540に格納された第1のエンドポイント1111(「EP#1」)以降の処理を順に行う。そして、第1の仮想PCIeコンフィグレジスタ1541に格納された第Nのエンドポイント111N(「EP#N」)の内容をリードすると、第Nのエンドポイントに書き込むコンフィグレーションデータを第1の仮想PCIeコンフィグレジスタ1541にライトする。しかしながら、この場合も、コンフィグ制御部155は、代理で第Nのエンドポイント111Nに対してライトを実施することはない。
以上説明したように、電源投入後は、第0−0のサーバ103が現用系サーバとして固定されている。この状態で、第1の統合エンドポイント1011は、第0−0のサーバ103からのピーシーアイエクスプレスコンフィグレーションに対するリードおよびライト処理のみ、第0〜第Nのエンドポイント1110〜111Nに反映させる(ステップS202)。待機系サーバである第1−0のサーバ105からのアクセスについては、第1の統合エンドポイント1011内部でデータを保持し、第0〜第Nのエンドポイント1110〜111Nへの反映は実施しない(ステップS203)。
ところで、第1−0のサーバ105によるピーシーアイエクスプレスコンフィグレーションレジスタの設定内容は、第0−0のサーバ103によるコンフィグレーションレジスタの設定内容と異なる値に設定される場合がある。このため、コンフィグ制御部155では、第0−0のサーバ103と第1−0のサーバ105の双方のピーシーアイエクスプレスコンフィグレーションレジスタの設定値を保持するようになっている。
一方、コンフィグ制御部155では、電源投入後に得られた各サーバのピーシーアイエクスプレスコンフィグレーションレジスタ情報に含まれるベースアドレス(Base Address)の値を基にして、アドレス変換テーブル156の作成を実施する(ステップS204)。これは、第0〜第Nのエンドポイント1110〜111Nに第0−0のサーバ103あるいは第1−0のサーバ105がアクセスする際に、ベースアドレスが異ならないようにするためである。
図7はベースアドレスの概念を説明するためのものである。第0−0のサーバ103および第1−0のサーバ105は、すでに説明したようにこれらの電源の投入によって第0〜第Nのエンドポイント1110〜111Nを認識する。そして、これら第0〜第Nのエンドポイント1110〜111Nに対してピーシーアイエクスプレスコンフィグレーションレジスタの設定を実施する。コンフィグレーション処理が終了したら、第0−0のサーバ103および第1−0のサーバ105は独立してPCIeメモリ空間170、171を作成する(ステップS221、ステップS222)。
第0−0のサーバ103および第1−0のサーバ105は、すでに説明したように第0〜第Nのエンドポイント1110〜111Nに対して直接アクセスすることができない。そこで、第1の統合エンドポイント1011内の第0および第1の仮想PCIeコンフィグレジスタ1540、1541を用いてコンフィグ制御部155を介することで、第0〜第Nのエンドポイント1110〜111Nへのアクセスを実施する。このため、仮想PCIeコンフィグレジスタ1540、1541の内部には、各エンドポイント111のコンフィグレーションレジスタと同一の構成のレジスタ(「EP#0_config」、「EP#1_config」、……、「EP#N_config」)180、181が存在する。第0−0のサーバ103および第1−0のサーバ105は、仮想PCIeコンフィグレジスタ1540、1541にアクセスを実施する。
コンフィグ制御部155は、第0−0のサーバ103および第1−0のサーバ105のピーシーアイエクスプレスコンフィグレーション空間の情報を取得した後、各エンドポイント1111〜111Nのマッピング情報について、第0−0のサーバ103と第1−0のサーバ105の設定値の差分を算出する。これについては、次の図8のステップS223として説明する。
図8は、ACT系サーバ群と、SBY系サーバ群のメモリ空間を対比したものである。図5および図7と共に説明する。
ACT系サーバ群のPCIeメモリ空間170とSBY系サーバ群のPCIeメモリ空間171を比較する。すると、前記したACT系サーバ群とSBY系サーバ群の設定値の差分の算出結果より、SBY系サーバ群のPCIeメモリ空間171の方が各エンドポイント111のベースアドレスに関して「0x0001_0000」ずつプラスされた値となっていることが分かる。したがって、コンフィグ制御部155は、第1−0のサーバ105が各エンドポイント111をアクセスする状態になったとき、アドレス変換テーブル156で、各エンドポイント111について、ベースアドレスを「0x0001_0000」だけ引いた値を設定すればよい。
図7に再び戻って説明を続ける。アドレス変換部157では、第1−0のサーバ105と第0〜第Nのエンドポイント1110〜111Nの間で通信が行われる際に、ピーシーアイエクスプレスパケットのヘッダ部分に格納されたアドレス情報から、「0x0001_0000」を引いた値に変更する。この変更後のアドレス情報でアクセスすることで、第0〜第Nのエンドポイント1110〜111Nに設定された、ベースアドレスを基にしたアドレス空間と矛盾が生じないアクセスを、第1−0のサーバ105に提供することが可能になる。
なお、図7に示したPCIeコンフィグレーションレジスタ1631〜163N(「EP#0_config」〜「EP#N_config」)は、本来、第0〜第Nのエンドポイント1110〜111Nごとに実装されるレジスタである。したがって、これらのPCIeコンフィグレーションレジスタ1631〜163Nは、本来、ACT系サーバ群とSBY系サーバ群にそれぞれ実装されたCPUから直接制御されるべきである。しかしながら、第1の統合エンドポイント1011を用いた本実施の形態のエンドポイント共有システム100では、コンフィグ制御部155が代理で制御を行う機能を持っている。そこで、ACT系サーバ群とSBY系サーバ群の持つピーシーアイエクスプレスメモリ空間の差分をエンドポイント111に対して隠蔽することで、第0−0のサーバ103と第1−0のサーバ105の双方からアクセスが可能になるようにしている。
<データ転送処理>
ACT系サーバ群と第0〜第Nのエンドポイント1110〜111Nの間のデータ転送のためのアクセス時には、PCIプロシキ機能部141でのアドレス変換処理が発生しない。この場合のデータのリードおよびライトの処理を次に説明する。
図9は、ACT系サーバ群を構成する第0−0のサーバによるデータのリードおよびライトの処理を表わしたものである。図5と共に説明する。
ACT系サーバ群から第0〜第Nのエンドポイント1110〜111Nへのアクセスについては、第0の仮想PCIeコンフィグレジスタ1540に設定されたベースアドレス情報を基にして、該当するエンドポイントが接続されたポートに振り分ける。具体的には、ピーシーアイエクスプレスパケットのヘッダ情報に含まれるアドレス情報を基にして、アドレス変換・振り分け機能部158がアクセス先のエンドポイント111を判断する。そして、該当するエンドポイント111が接続されたポート(第0〜第NのPCIeポート1590〜159N)に対して振分けを実施する。
また、第0〜第Nのエンドポイント1110〜111NからACT系サーバ群あるいはSBY系サーバ群へのデータ転送についても、アドレス変換・振り分け機能部158はこのうちの現用系のサーバに対してデータ転送を実施する。SBY系サーバ群が現用系の場合は、ピーシーアイエクスプレスパケットヘッダ内部のアドレス情報の変更を行わず、SBY系サーバ群へのデータを転送する。
具体例を挙げる。まず、第0−0のサーバ103から第0のポート(「Port#0」)1510を使用して、第1の統合エンドポイント1011のPCIプロシキ機能部(「PCIProxy」)141に対して、ベースアドレス情報を基にして、第0のエンドポイント(「EP#0」)1110に対するデータをライトする(ステップS241)。PCIプロシキ機能部141は、このデータを第0のエンドポイント1110にライトする(ステップS242)。この後、第0のエンドポイント1110からPCIプロシキ機能部141へデータをリードする(ステップS243)。次にPCIプロシキ機能部141からこのリードしたデータが第0−0のサーバ103へ送られる(リードする)(ステップS244)。
この後、第0−0のサーバ103から第0のポート1510を使用して、第1の統合エンドポイント1011のPCIプロシキ機能部141に対して、ベースアドレス情報を基にして、第1のエンドポイント(「EP#1」)1111に対するデータをライトする(ステップS245)。PCIプロシキ機能部141は、このデータを第1のエンドポイント1111にライトする(ステップS246)。この後、第1のエンドポイント1111からPCIプロシキ機能部141へデータをリードする(ステップS247)。次にPCIプロシキ機能部141からこのデータは第0−0のサーバ103へリードする(ステップS248)。以下同様にして第0−0のサーバ103によるデータのリードおよびライトの処理が続行する。
第1−0のサーバ105と第0〜第Nのエンドポイント1110〜111Nの間のデータ転送のためのアクセス時には、PCIプロシキ機能部141でのアドレス変換処理が発生する。この場合のデータのリードおよびライトの処理を次に説明する。
図10は、SBY系サーバ群を構成する第1−0のサーバによるデータのリードおよびライトの処理を表わしたものである。図5と共に説明する。
第1−0のサーバ105から第0〜第Nのエンドポイント1110〜111Nへのアクセスについて、まず第1−0のサーバ105からのデータのライトについて説明する。データのライトに関しては、アドレス変換部157においてピーシーアイエクスプレスパケットヘッダ内部のアドレス情報の変更を行って、アドレス変換・振り分け機能部158へデータを転送する。アドレス変換・振り分け機能部158では、コンフィグ制御部155で管理された情報を基に、第0〜第Nのエンドポイント1110〜111Nのいずれに振り分けを行うかを決定して、データの転送を実施する。
また、第0〜第Nのエンドポイント1110〜111Nから第0−0のサーバ103あるいは第1−0のサーバ105へのデータ転送についても、アドレス変換・振り分け機能部158は現用系サーバに対してのみデータの転送を実施する。第1−0のサーバ105が現用系の場合には、ピーシーアイエクスプレスパケットヘッダ内部のアドレス情報の変更を行って、第1−0のサーバ105へデータを転送する。
具体例を挙げる。まず、第1−0のサーバ105からACTの状態となっている第1のポート(「Port#1」)1511を介して送られたピーシーアイエクスプレスパケット(ステップS261)は、アドレス変換部157でピーシーアイエクスプレスパケットヘッダ内部のアドレス情報の変更を行う(ステップS262)。アドレス変換・振り分け機能部158は、このデータの転送を受け、コンフィグ制御部155で管理された情報を基に、第0のエンドポイント(「EP#0」)1110にこれを転送する(ステップS263)。
第0のエンドポイント1110から送られてくるデータは、アドレス変換・振り分け機能部158によって現用系サーバとしての第1−0のサーバ105に送出するように振り分けられて、アドレス変換部157に転送される(ステップS264)。そして、ピーシーアイエクスプレスパケットヘッダ内部のアドレス情報の変更を行って(ステップS265)、第1−0のサーバ105へ転送される(ステップS266)。第1−0のサーバ105から第1〜第Nのエンドポイント(「EP#1」〜「EP#N」)1111〜111Nに転送されるデータおよび第1〜第Nのエンドポイント1111〜111Nから第1−0のサーバ105に転送されるデータについても、同様である。そこで、ステップS267〜ステップS278の処理についての説明は省略する。
<ACT切替動作>
図11は、ACT系とSBY系の切替動作を示したものである。ここでは、第0−0のサーバ103が現用系で、第1−0のサーバ105が待機系の場合を例として示す。第0−0のサーバ103が待機系で、第1−0のサーバ105が現用系の場合も、動作は同様である。図5と共に説明する。
第0−0のサーバ103と第1−0のサーバ105は、LAN(Local Area Network)108等の何らかの信号伝達手段を用いて、周期的に互いの状態を監視する機能を有する。このような機能は、たとえば第0−0のサーバ103と第1−0のサーバ105にそれぞれ搭載されたCPUが第0−0のサーバ103と第1−0のサーバ105内の記録媒体(図示せず)に格納された制御プログラムを実行することによって実現する。
待機系の第1−0のサーバ105からの応答要求に対して、現用系の第0−0のサーバ103が応答を返さない場合があったとする。この場合、第1−0のサーバ105は第0−0のサーバ103に何らかの異常が発生したことを検出する(ステップS291)。そして、これを基にして系切替動作を開始する(ステップS292)。
この系切替動作で、第1−0のサーバ105は、自身が直接接続している第1の統合エンドポイント1011の待機系となっている第1のポート(「Port#1」)1511に対して、系切替要求をピーシーアイエクスプレスパケットとして送出する(ステップS293)。第1のポート1511では、この系切替要求を受信すると、ACT・SBY選択機能部152に対してACT・SBY切替要求信号を送信する。ACT・SBY選択機能部152は系切替要求を受信すると(ステップS294)、第0のポート(「Port#0」)1310に対してACT・SBY切替要求信号を送信する。
現用系となっている第0のポート1510はACT・SBY切替信号を受信すると(ステップS295)、系切替要求をピーシーアイエクスプレスパケットとして第0−0のサーバ103に送出する(ステップS296)。これにより、第0−0のサーバ103は系の切り替えを認識する(ステップS297)。第0−0のサーバ103は、これに基づき現用系と待機系の切り替えを実施し(ステップS298)、この後、系切替を実施したことをピーシーアイエクスプレスパケットを用いて第0のポート1510に対して通知する(ステップS299)。
この系切替完了通知は、ACT・SBY選択機能部152で受信され、確認される(ステップS300)。ACT・SBY選択機能部152は、これを基に、第1の統合エンドポイント1011の第0のポート1510を待機系に設定し(ステップS301)、第1のポート1511を現用系に設定する(ステップS302)。その後、系の切り替えを実施したことを示す信号は、第1のポート1511から第1−0のサーバ105へピーシーアイエクスプレスパケットを用いて通知される(ステップS303)。第1−0のサーバ105は、この通知を受けると、第1−0のサーバ105が待機系から現用系に切り替わったことを確定させる(ステップS304)。
次に、現用系になっている第0−0のサーバ103に異常が発生して、第1−0のサーバ105からの系切替要求の送出(ステップS293)に対する応答がない場合について説明する。この場合には、第1の統合エンドポイント1011の内部におけるACT・SBY選択機能部152が図示しないタイマを起動させる。そして、第0−0のサーバ103が正常であれば十分応答する規定時間内に、第0−0のサーバ103から応答があるかを判別する。この規定時間内に第0−0のサーバ103からの応答があれば、すでに説明した処理と同一の処理を行えばよい。
これに対して、規定時間内に第0−0のサーバ103からの応答がなかったとする。この場合には、第0−0のサーバ103からの応答をそれ以上待機せずに第1−0のサーバ105は系切替完了通知を実施する。そして、今までSBY系であった第1のポート1511をACT系に切り替えることになる。
本実施の形態のエンドポイント共有システム100では、以上とは別に、定期的な系の切り替えや保守作業を目的として、系の切り替えを開始することも可能である。待機系から現用系に切り替わった第1−0のサーバ105の第1のポート1511は、第0〜第Nのエンドポイント1110〜111Nに対する、実データの通信が可能になる。
なお、第1−0のサーバ105側のピーシーアイエクスプレスコンフィグレーションレジスタは、第1−0のサーバ105の電源投入後に設定済みである。このため、第0〜第Nのエンドポイント1110〜111Nに対する、第1−0のサーバ105のメモリ空間に対応させるための、ピーシーアイエクスプレスコンフィグレーション動作は不要である。したがって、コンフィグレーションレジスタの設定変更前の第0〜第Nのエンドポイント1110〜111Nのリセットや、各ピーシーアイエクスプレスコンフィグレーションレジスタの再設定処理等の処理は不要になる。
このため、系の切替途中では、第0〜第Nのエンドポイント1110〜111Nと第0−0のサーバ103および第1−0のサーバ105の間の通信は実行できない。しかしながら、第1の統合エンドポイント1011内の各エンドポイント111間通信処理(たとえば、第0のエンドポイント1110からPCIプロシキ機能部141を経て第1のエンドポイント1111への通信)では、系切替動作時に通信処理を継続することが可能になる。
<サーバ間データ転送>
図12は、サーバ側のソフトウェア処理の様子を表わしたものである。本実施の形態のエンドポイント共有システム100では、図5でも説明したように、ACT系サーバ群とSBY系サーバ群の2種類のサーバが使用されている。ACT系サーバ群とSBY系サーバ群は、同一の構成となっている。そこで、ACT系サーバ群を中心に、これらのサーバ群で動作するアプリケーションソフトウェアについて説明を行う。
次の表1は、本実施の形態によるACT系サーバ群とSBY系サーバ群で動作するアプリケーションソフトウェアを示したものである。この表1に記載された各アプリケーションソフトウェア同士は、イベントの相互通知が可能なインタフェイスを有しており、イベント発生の検出を行うようになっている。
図12では、ACT系サーバ群とSBY系サーバ群がそれぞれ1つの記憶装置107を分割して使用する形で接続している様子を示している。ここでは、便宜的に、ACT系サーバ群が接続する記憶装置部分を記憶装置1070として表わし、SBY系サーバ群が接続する記憶装置部分を記憶装置1071として表わしている。
それぞれの記憶装置1070、記憶装置1071は、アプリケーションソフトウェアがアクセス可能な領域としてのサーバ・テンポラリ領域と、第1の統合エンドポイント1011とのデータのやり取りに用いる領域としてのエンドポイント通信用領域に分割されている。ここで、記憶装置107は、図5でも説明したように、各サーバ103、105とLAN108を介して接続されている。
記憶装置1070および記憶装置1071の内部には、1次共有メモリ1910、1911の領域と、2次共有メモリ1920、1921の領域が存在している。1次共有メモリ1910、1911の領域には、送信の際にアクセスする出力メモリ(OutputMem)領域1930、1931のうちの対応するものと、受信の際にアクセスする入力メモリ(InputMem)領域1940、1941のうちの対応するものが存在している。
2次共有メモリ1920、1921は、送信側領域と受信側領域に分割され、次のように構成される。まず、送信側領域は、第0−0のサーバ103(主サーバ)上で動作するアプリケーションソフト(APL)(PS#0−5)が、第1の統合エンドポイント1011に対してデータの送信を行う場合にアクセスを行う、出力メモリサーバ(OutputMemServer#0−0)領域1950-0と、第0−1のサーバ1041(拡張サーバ)上で動作するアプリケーションソフト(PS#1−5)が、第1の統合エンドポイント1011に対してデータの送信する際にアクセスを行う、出力メモリサーバ(OutputMemServer#0−1)領域1950-1から構成される。
受信側領域は、第0−0のサーバ103(主サーバ)上で動作するアプリケーションソフト(PS#0−5)が、第1の統合エンドポイント1011からデータの受信を行う場合にアクセスを行う、入力メモリサーバ(InputMemServer#0−0)領域1960-0と、第0−1のサーバ1041(拡張サーバ)上で動作するアプリケーションソフト(PS#1−5)が、第1の統合エンドポイント1011からデータを受信する際にアクセスを行う、入力メモリサーバ(InputMemServer#0−1)領域1960-1から構成される。
SBY系サーバ群を構成する第1−0のサーバ105(主サーバ)と第1−1のサーバ1061(拡張サーバ)がアクセスを行う記憶装置1071の構成は、第0−0のサーバ103と第0−1のサーバ1041がアクセスを行う記憶装置1070の構成と同一である。
ところで、本実施の形態のエンドポイント共有システム100で第1の統合エンドポイント1011あるいは第2の統合エンドポイント1012に物理的に接続されているのは主サーバである第0−0のサーバ103および第1−0のサーバ105である。このため、拡張サーバである第0−1のサーバ1041および第1−1のサーバ1061が第1の統合エンドポイント1011あるいは第2の統合エンドポイント1012にアクセスする場合には、主サーバを介してデータの受け渡しを行う必要がある。
主サーバとのデータ受け渡しに際しては、IP(Internet Protocol)等のプロトコルを用いることが可能である。しかしながらその場合には、拡張サーバおよび主サーバに対してデータの送受信のためのプロトコルの定義が必要とされ、オーバヘッドが大きくなり、高速な送受信の妨げとなるという問題がある。本実施の形態では、記憶装置107をデータ受け渡しのバッファとして用いることで、高速なデータの受け渡しを実現する。これにより、統合エンドポイント1011、1012が接続されていない拡張サーバであっても、高速に主サーバを介してこれら統合エンドポイント1011、1012への高速アクセスを実現している。
サーバ群と第1の統合エンドポイント1011の間でやりとりされるデータは、記憶装置107内部の1次共有メモリ191と、2次共有メモリ192を、以下の関係をもって転送される。
<ACT系サーバ群>
出力メモリサーバ(OutputMemServer#0−0)領域1950-0から出力メモリ(OutputMem#0)領域1930の方向への転送
出力メモリサーバ(OutputMemServer#0−1)領域1950-1から出力メモリ(OutputMem#0)領域1930の方向への転送
入力メモリ(InputMem#0)領域1940から入力メモリサーバ(InputMemServer#0−0)領域1960-0の方向への転送
入力メモリ(InputMem#0)領域1940から入力メモリサーバ(InputMemServer#0−1)領域1960-1の方向への転送
<SBY系サーバ群>
出力メモリサーバ(OutputMemServer#1−0)領域1951-0から出力メモリ(OutputMem#1)領域1931の方向への転送
出力メモリサーバ(OutputMemServer#1−1)領域1951-1から出力メモリ(OutputMem#1)領域1931の方向への転送
入力メモリ(InputMem#1)領域1941から入力メモリサーバ(InputMemServer#1−0)領域1961-0の方向への転送
入力メモリ(InputMem#1)領域1941から入力メモリサーバ(InputMemServer#1−1)領域1961-1の方向への転送
なお、図12には、第0−0のサーバ103に搭載されたCPUとしてのCPU#0−0が各アプリケーションソフトウェアPS#0−0、PS#0−1、PS#0−3、PS#0−4、PS#0−5を実行することが示されている。また、同様に第0−1のサーバ1041に搭載されたCPUとしてのCPU#0−1が各アプリケーションソフトウェアPS#1−3、PS#1−4、PS#1−5を実行することが示されている。
図13は、記憶装置を介して、サーバがエンドポイントに対してアクセスを行う様子を表わしたものである。図5および図12と共に説明する。
<サーバからのデータの送出>
第0−0のサーバ103上で動作するアプリケーションソフトウェアPS#0−5,PS#1−5から第1の統合エンドポイント1011へのデータの取り込みについて説明する。
(a)まず、第0−0のサーバ103(主サーバ)から第1の統合エンドポイント1011へのアクセスについて説明する。
第0−0のサーバ103上で動作するアプリケーションソフトウェアPS#0−5がエンドポイント111に対してデータを送信する場合、アプリケーションソフトウェアPS#0−5は記憶装置107上に確保されている出力メモリサーバ領域1950-0にデータを書き込む(ステップS401)。記憶装置107は、出力メモリサーバ領域1950-0にデータが書き込まれたことを検出すると、出力メモリ領域1930にデータをコピーする。
アプリケーションソフトウェアPS#0−5は出力メモリサーバ領域1950-0にデータを書き込んだことを、アプリケーションソフトウェアPS#0−1に対して通知を行う(ステップS402)。アプリケーションソフトウェアPS#0−1は、他のサーバからエンドポイント111へのデータ送信要求が無いかを確認後、アプリケーションソフトウェアPS#0−2に対して、第0−0のサーバ103からエンドポイント111に対してデータを送信するように、指示を発行する(ステップS403)。
アプリケーションソフトウェアPS#0−2は、エンドポイント111に対するデータ送信の指示を受信すると、このエンドポイント111に対して出力メモリ領域1930からデータの送信を実施する(ステップS404)。このようにして、第0−0のサーバ103から記憶装置107を介して第1の統合エンドポイント1011へデータが送信される。
(b)次に、第0−1のサーバ1041(拡張サーバ)から第1の統合エンドポイント1011へのアクセスについて説明する。
第0−1のサーバ1041上で動作するアプリケーションソフトウェアPS#1−5が第1の統合エンドポイント1011に対してデータを送信する場合、アプリケーションソフトウェアPS#1−5は記憶装置107上に確保されている出力メモリサーバ領域1950-1にデータを書き込む(ステップS410)。記憶装置107は、出力メモリサーバ領域1950-1にデータが書き込まれたことを検出すると、出力メモリ領域1930にデータをコピーする。
アプリケーションソフトウェアPS#1−5は出力メモリサーバ領域1950-1にデータを書き込んだことを、アプリケーションソフトウェアPS#0−1に対して通知を行う必要がある。このため、アプリケーションソフトウェアPS#1−4に対してデータ送信要求指示を発行する(ステップS411)。
アプリケーションソフトウェアPS#1−4はアプリケーションソフトウェアPS#0−4に対して、拡張サーバとしての第0−1のサーバ1041がエンドポイント111に対してデータ転送を要求していることを通知する(ステップS412)。これに基づき、アプリケーションソフトウェアPS#0−4は、第0−1のサーバ1041がエンドポイント111へのデータ転送要求を行っていることを、アプリケーションソフトウェアPS#0−1に対して通知する(ステップS413)。
アプリケーションソフトウェアPS#0−1は、他のサーバからエンドポイント111へのデータ送信の要求が無いかを確認する。そして、アプリケーションソフトウェアPS#0−2に対して、アプリケーションソフトウェアPS#0−1から第1の統合エンドポイント1011に対してデータを送信するように、指示を発行する(ステップS414)。
アプリケーションソフトウェアPS#0−2は第1の統合エンドポイント1011に対してデータ送信の指示を受信すると、エンドポイント111に対して出力メモリ領域1930からデータの送信を実施する(ステップS415)。このようにして第0−1のサーバ1041から記憶装置107を介して第1の統合エンドポイント1011へデータが送信される。
<サーバへのデータの取り込み>
次に第1の統合エンドポイント1011からサーバへのデータ取り込みについて説明する。
図14は、第1の統合エンドポイントからサーバへのデータ取り込みの様子を示したものである。図5および図12と共に説明する。
(a)まず、第1の統合エンドポイント1011から主サーバとしての第0−0のサーバ103へのデータの取り込みについて説明する。
第1の統合エンドポイント1011から第0−0のサーバ103に対して転送するデータが発生したとする。この場合、DMA(Direct Memory Access )により、CPUを介さずに第1の統合エンドポイント1011から、そのデータが主サーバとしての第0−0のサーバ103を経由して入力メモリ(InputMem#0)領域1940に対して転送される(ステップS431)。第1の統合エンドポイント1011から記憶装置107へのデータ転送はアプリケーションソフトウェアPS#0−2が実行する。
アプリケーションソフトウェアPS#0−2は、記憶装置107に対してデータを転送後、アプリケーションソフトウェアPS#0−1に対して、第1の統合エンドポイント1011から記憶装置107に対してデータの転送が発生したことを通知する(ステップS432)。
アプリケーションソフトウェアPS#0−1は、サーバ群を構成するサーバのうちの負荷が軽いサーバで処理を実行するために、各サーバの負荷状況を調査する。負荷状況の調査はアプリケーションソフトウェアPS#0−3で実行する。このため、アプリケーションソフトウェアPS#0−1はアプリケーションソフトウェアPS#0−3に対して負荷調査を指示する(ステップS433)。アプリケーションソフトウェアPS#0−3はサーバ群を構成する第0−1のサーバ1041(拡張サーバ)上で動作するアプリケーションソフトウェアPS#1−3に対して、CPU負荷、メモリ使用量等の負荷状況の報告指示を出す(ステップS434)。第0−1のサーバ1041では、負荷状況調査指示をアプリケーションソフトウェアPS#1−3で受信後、負荷状況をアプリケーションソフトウェアPS#1−3からアプリケーションソフトウェアPS#0−3に報告する(ステップS435)。このとき、アプリケーションソフトウェアPS#0−3とアプリケーションソフトウェアPS#1−3の間の通信はLAN115を用いて行う。
アプリケーションソフトウェアPS#0−3は、アプリケーションソフトウェアPS#1−3の報告結果と第0−0のサーバ103の負荷状況をアプリケーションソフトウェアPS#0−1に通知する(ステップS436)。アプリケーションソフトウェアPS#1−3は第0−0のサーバ103(主サーバ)と第0−1のサーバ1041(拡張サーバ)の負荷状況から、負荷の少ないサーバの方を処理を行うサーバとして決定する。
第0−0のサーバ103が負荷が少ないと判断された場合、処理を実行するアプリケーションソフトとしてのアプリケーションソフトウェアPS#0−5に対して、アプリケーションソフトウェアPS#0−1から処理指示が発行される(ステップS347)。第0−0のサーバ103の負荷が少ないと判断された場合は、ステップS347の処理指示の発行と同時に、アプリケーションソフトウェアPS#0−1から記憶装置107に対して、入力メモリ領域1940に記録されたデータを、入力メモリサーバ領域1960-0に転送する指示を発行する(ステップS438)。このとき、記憶装置107からの指示はLAN115を経由して発行される。
アプリケーションソフトウェアPS#0−5は、入力メモリサーバ領域1960-0からデータを読み出す(ステップS439)。これにより、サーバ上のアプリケーションは処理に必要なデータを第1の統合エンドポイント1011から得ることが可能となる。
(b)次に、第1の統合エンドポイント1011から第0−1のサーバ1041(拡張サーバ)へのデータの取り込みについて説明する。
第1の統合エンドポイント1011からサーバ対して転送されるデータが発生したとする。この場合、DMAにより、CPUを介さずに第1の統合エンドポイント1011から、そのデータが主サーバとしての第0−0のサーバ103を経由して入力メモリ(InputMem#0)領域1940に対して転送される(ステップS441)。第1の統合エンドポイント1011から記憶装置107へのデータ転送はアプリケーションソフトウェアPS#0−2が実行する。
アプリケーションソフトウェアPS#0−2は、記憶装置107に対してデータを転送後、アプリケーションソフトウェアPS#0−1に対して、第1の統合エンドポイント1011から記憶装置107に対してデータの転送が発生したことを通知する(ステップS442)。
アプリケーションソフトウェアPS#0−1は、サーバ群を構成するサーバのうちの負荷が軽いサーバで処理を実行するために、各サーバの負荷状況を調査する。負荷状況の調査はPS#0−3で実行する。このため、アプリケーションソフトウェアPS#0−1はアプリケーションソフトウェアPS#0−3に対して負荷調査を指示する(ステップS443)。アプリケーションソフトウェアPS#0−3はサーバ群を構成する第0−1のサーバ1041(拡張サーバ)上で動作するアプリケーションソフトウェアPS#1−3に対して、CPU負荷、メモリ使用量等の負荷状況の報告指示を出す(ステップS444)。第0−1のサーバ1041では、負荷状況調査指示をアプリケーションソフトウェアPS#1−3で受信後、負荷状況をアプリケーションソフトウェアPS#1−3からアプリケーションソフトウェアPS#0−3に報告する(ステップS445)。このとき、アプリケーションソフトウェアPS#0−3とアプリケーションソフトウェアPS#1−3の間の通信はLAN115を用いて行う。
アプリケーションソフトウェアPS#0−3は、アプリケーションソフトウェアPS#1−3の報告結果と第0−0のサーバ103の負荷状況をアプリケーションソフトウェアPS#0−1に通知する(ステップS446)。アプリケーションソフトウェアPS#1−3は第0−0のサーバ103(主サーバ)と第0−1のサーバ1041(拡張サーバ)の負荷状況から、負荷の少ないサーバの方を処理を行うサーバとして決定する。
ここまでのシーケンスは、第1の統合エンドポイント1011から主サーバである第0−0のサーバ103に対するデータ転送と、同一のシーケンスである。
第0−1のサーバ1041(拡張サーバ)の負荷が少ないと判断されたとする。この場合、アプリケーションソフトウェアPS#0−1からアプリケーションソフトウェアPS#0−4に対して、第0−1のサーバ1041に対する記憶装置107(S#0−1_REC_temp(図示せず))からのデータ読み出し指示が発行される(ステップS447)。このとき記憶装置107から読み出されるデータは、図示しないアプリケーションソフトウェアS#0−1についての一次領域(REC_temp)に格納されている。ステップS447のデータ読み出し指示の発行と同時に、アプリケーションソフトウェアPS#0−1は、記憶装置107に対して、入力メモリ領域1940に記録されたデータを、入力メモリサーバ領域1960-1に転送する指示を発行する(ステップS448)。
アプリケーションソフトウェアPS#0−4では、第0−1のサーバ1041での入力メモリサーバ領域1960-1からのデータ読み出し指示の発行を受けて、アプリケーションソフトウェアPS#1−4に対して、記憶装置107からのデータ読み出し指示を発行する(ステップS449)。アプリケーションソフトウェアPS#1−4は、第0−0のサーバ103からのデータ読み出し指示を受け、アプリケーションソフトウェアPS#1−5に対して、入力メモリサーバ領域1960-1からデータを読み出し指示を発行する(ステップS450)。そして、アプリケーションソフトウェアPS#1−5は入力メモリサーバ領域1960-1から処理に必要なデータを読み出す(ステップS451)。
<記憶装置の構成>
図15は、本実施の形態のエンドポイント共有システムの構成を記憶装置を中心に具体化したものである。記憶装置107は、次の各部から構成されている。
(1)1次共有メモリ191および2次共有メモリ192
1次共有メモリ191および2次共有メモリ192は、図12で説明した。1次共有メモリ191は、主サーバからのデータおよび主サーバへ転送するデータを一時的に蓄えるためのメモリである。2次共有メモリ192は、記憶装置107と各サーバ103、1041、105、1061間のデータ転送のためのメモリ領域である。
(2)第0および第1のエンドポイント間CTL(EP間CTL)部501、502
第0のエンドポイント間CTL部501は、主サーバとしての第0−0のサーバ(Server#0−0)103を経由して第0〜第Nのエンドポイント(EP#0〜EP#N)1110〜111N(図5参照)からのデータをやりとりする。第1のエンドポイント間CTL部502は、主サーバとしての第1−0のサーバ(Server#1−0)105を経由して第0〜第Nのエンドポイント(EP#0〜EP#N)1110〜111Nからのデータをやりとりする。
(3)第0および第1のメモリ間CTL(MEM間CTL)部503、504
1次共有メモリ191と2次共有メモリ192間の制御を行う。
(4)第0−0、第0−1、第1−0、第1−1のサーバ間CTL部505〜508
主サーバあるいは拡張サーバと記憶装置107の間のデータ転送を実施する。
(5)記憶装置CTL部509
記憶装置107の制御を実施する。
このような構成の記憶装置107における第0および第1のエンドポイント間CTL部501、502およびサーバは、PCIeのエンドポイントとして動作し、PCIeケーブルで接続される。PCIeとし動作するためのコンフィグレーション処理は、サーバ側から実行される。PCIeのコンフィグレーション処理は、通常の処理と同等である。
このため、主サーバのCPUからみると、第1の統合エンドポイント1011と記憶装置107がエンドポイントとして接続されているように見える。また、拡張サーバのCPUからは記憶装置107がエンドポイントとして接続されているように見える。
第0のエンドポイント間CTL部501は、主サーバとしての第0−0のサーバ103と接続し、第1のエンドポイント間CTL部502は、同じく主サーバとしての第1−0のサーバ105と接続する。ここで第0−0のサーバ103は、ACT(active)系サーバ群を構成し、第1−0のサーバ105はSBY(standby)系サーバ群を構成している。このうちの現用系となるサーバがデータの送受信の対象となるので、どちらの系が現用系であるかのACT(active)・SBY(standby)系情報の取得が必要となる。
記憶装置CTL部509は、LAN108(図5参照)を介して第0−0、第0−1、第1−0および第1−1の各サーバ103、1041、105、1061と接続するためのLANインタフェイスを有している。このため、記憶装置CTL部509は、LAN108を経由して、サーバ群を構成する各サーバ103〜1061との間で、ACT・SBY系情報を収集する。これにより、記憶装置CTL部509は、現用系となるサーバ群を認識し、待機系となるサーバ群からの記憶装置107へのアクセスを禁止する通知を第0および第1のエンドポイント間CTL部501、502に送出する。
主サーバと記憶装置107の間でデータが転送される場合、第0あるいは第1のエンドポイント間CTL部501、502と1次共有メモリ191の間でデータ転送が発生する。1次共有メモリ191は、送信用としての出力メモリ(OutputMem)領域1930(OutputMem#0)、1931(OutputMem#1)と、受信用としての入力メモリ(InputMem)領域1940(InputMem#0)、1941(InputMem#1)に分割されている。1次共有メモリ191は、記憶装置CTL部509からのACT・SBY系情報を基にして現用系のデータ転送のみ実施する。
第1の統合エンドポイント1011からサーバへデータの転送を実施するものとする。この場合、1次共有メモリ191に格納したPCIeパケットを、第0−0、第0−1、第1−0および第1−1のサーバ103、1041、105、1061のいずれに転送するかを決定する必要がある。転送先のサーバを決定するために主サーバは、各サーバの負荷状況(CPU使用率、メモリ使用量等)を基に判定を行う。判定結果は、LAN108(図5参照)を経由して記憶装置CTL部509に通知される。記憶装置CTL部509は、第0あるいは第1のメモリ間CTL部503、504に対してパケットの転送先の通知を行う。
第0あるいは第1のメモリ間CTL部503、504では、1次共有メモリ191へのデータの書き込みが完了したこと、および記憶装置CTL部509から通知されるパケットの転送先の通知情報を基にして、パケットのヘッダ情報の書き換えを行う。そして、この書き換えたヘッダ情報を基にして、転送先のサーバに対応した2次共有メモリ192に対して、データの転送を実施する。
PCIeパケットに付与されるヘッダ情報については、後に説明を行う。図15に示す例では、転送先が主サーバとしての第0−0のサーバ103あるいは第1−0のサーバ105の場合、入力メモリサーバ(InputMemServer#0−0)領域1960-0(または入力メモリサーバ(InputMemServer#1−0)領域1961-0)にデータを書き込む。また、転送先が拡張サーバとしての第0−1のサーバ103あるいは第1−1のサーバ105の場合、入力メモリサーバ(InputMemServer#0−1)領域1960-1(または入力メモリサーバ(InputMemServer#1−1)領域1961-1)にデータを書き込む。
主サーバあるいは拡張サーバは、第0−0、第0−1、第1−0および第1−1の各サーバに対応した第0−0、第0−1、第1−0、第1−1のサーバ間CTL部505〜508を監視する。そして、データが書き込まれたことを確認した後に、2次共有メモリ192からデータの読み出しを行う。
第0−0、第0−1、第1−0および第1−1の各サーバから第1の統合エンドポイント1011にデータを転送する場合を次に説明する。この場合には、サーバごとに用意されている第0−0、第0−1、第1−0、第1−1のサーバ間CTL部505〜508を介して2次共有メモリ192に対するデータの転送を実施する。第0あるいは第1のメモリ間CTL部503、504は、第1の統合エンドポイント1011へ転送するデータが2次共有メモリ192に書き込まれたかを監視する。
転送するデータが2次共有メモリ192に書き込まれたことが検出されたら、2次共有メモリ192からデータが読み出される。そして、1次共有メモリ191に対するデータの転送が実施される。主サーバは、第0あるいは第1のエンドポイント間CTL部501、502を介して1次共有メモリ191に対するデータが書き込まれたことを認識すると、1次共有メモリ191からデータを読み出して、第1の統合エンドポイント1011へのデータ転送を実施する。
<記憶装置とサーバ間の接続>
図16は、各サーバと記憶装置の接続の状態を一般化して表わしたものである。図5ではACT系サーバ群として第0−0のサーバ(Server#0−0)103に対して拡張サーバとしての1台の第0−1のサーバ(Server#0−1)1041が存在する場合を示した。図16ではACT系サーバ群の拡張サーバとして第0−1のサーバ(Server#0−1)1041〜第0−Nのサーバ(Server#0−N)104Nが存在している。同様に、図5ではSBY系サーバ群として第1−0のサーバ(Server#1−0)105に対して拡張サーバとしての1台の第1−1のサーバ(Server#1−1)1061が存在する場合を示した。図16ではSBY系サーバ群の拡張サーバとして第1−1のサーバ(Server#1−1)1061〜第1−Nのサーバ(Server#1−N)106Nが存在している。数値Nは任意の正の整数である。
このエンドポイント共有システム100Aでは、記憶装置107Aに第0−0、第0−1〜第0−N、第1−0、第1−1〜第1−Nのサーバ間CTL部505、5061〜506N、507、5081〜508Nと、第0および第1のエンドポイント間CTL部501、502が配置されている。ここで、第0−0のサーバ間CTL部505は、主サーバとしての第0−0のサーバ103とPCIeケーブルを用いて1対1で接続されている。同様に第0−1〜第0−Nのサーバ間CTL部5061〜506Nは、拡張サーバとしての第0−1〜第0−Nのサーバ1041〜104Nと、それぞれPCIeケーブルを用いて1対1で接続されている。また、第1−0のサーバ間CTL部507は、主サーバとしての第1−0のサーバ105とPCIeケーブルを用いて1対1で接続されている。同様に第1−1〜第1−Nのサーバ間CTL部5081〜508Nは、拡張サーバとしての第1−1〜第1−Nのサーバ1061〜106Nと、それぞれPCIeケーブルを用いて1対1で接続されている。更に、第0および第1のエンドポイント間CTL部501、502は、主サーバとしての第0−0のサーバ103および第1−0のサーバ105と、それぞれPCIeケーブルを用いて1対1で接続されている。
このため、各サーバ間CTL部505、5061〜506N、507、5081〜508Nと各エンドポイント間CTL部501、502は、PCIeのエンドポイントとして各サーバ103、1041〜104N、105、1061〜106Nから認識される。このため、各サーバ103、1041〜104N、105、1061〜106Nはデータの送受信についてドライバソフトを必要とするが、そのインストールが完了すれば、他のサーバの影響を考慮することなく、記憶装置107Aの制御を行うことが可能になる。各サーバ103、1041〜104N、105、1061〜106Nによる記憶装置107Aの制御は、通常のPCIeエンドポイントの制御と同じである。
更に、各サーバ103、1041〜104N、105、1061〜106Nと記憶装置107Aは、前記した1対1で接続されるための、相互に独立したPCIeメモリ空間に記憶装置をマッピングすることが可能となる。したがって、他のサーバのメモリ空間を考慮する必要がなくなる。
主サーバとしての第0−0のサーバ103と第1−0のサーバ105は、1次共有メモリ191および2次共有メモリ192(図15参照)へのアクセスのために記憶装置107Aに対してPCIeインタフェイスを2系統備える。拡張サーバ1041〜104N、1061〜106Nについては2次共有メモリ192へのアクセスのみが許可される。このため、拡張サーバ1041〜104N、1061〜106Nは記憶装置107Aに対してPCIeインタフェイスを1系統のみ備える。
主サーバとしての第0−0のサーバ103と第1−0のサーバ105は、メモリ空間上に統合エンドポイント1011と記憶装置107Aの2つをエンドポイントとしてマッピングを行う。ただし、第0−0のサーバ103と第1−0のサーバ105のマッピングについての作業は、通常の動作と同一である。
<動作の説明>
図17は、本実施の形態のエンドポイント共有システムにおけるデータの転送処理の様子を表わしたものである。図17では、第1の統合エンドポイント1011、主サーバとしての第0−0のサーバ103、記憶装置107および拡張サーバとしての第0−1のサーバ1041を例にしてデータの転送処理を説明する。既に説明したように第1の統合エンドポイント1011と直接アクセスすることができるのは、この図17に示した中では第0−0のサーバ103のみである。統合エンドポイント1011と第0−1のサーバ1041の間のデータのやり取りは、記憶装置107を介してのデータ転送という形となる。
<統合エンドポイントから主サーバおよび拡張サーバへのデータ転送>
第1の統合エンドポイント1011は、転送データとしてPCIeパケット601を送信する(ステップS701)。PCIeパケット601は、PCIeヘッダとデータ本体としてのPCIeデータから構成されている。主サーバとしての第0−0のサーバ103がこのPCIeパケットを受信する。
第0−0のサーバ103は、第1の統合エンドポイント1011からPCIeパケットを受信すると、ディスクリプタ(descriptor)とデータ領域の間に、サーバ(Server)名、統合エンドポイント(EP)番号およびエンドポイント(EP)番号から構成されるヘッダフィールド602を挿入する。そして、このPCIeパケット601を記憶装置107に転送する(ステップS702)。ここで、「サーバ名」にはこのPCIeパケットをどのサーバ上のアプリケーションで実行するかを示すサーバ名を挿入する。
PCIeパケットを処理するサーバの決定は、主サーバとしての第0−0のサーバ103上で操作するソフトウェアであるPS#0−4とPS#1−4(図10参照)が連携して実行する。ここでソフトウェアPS#0−4は、各サーバの負荷状況(CPU使用率、メモリ使用率等)を基にして、アプリケーションを実行するサーバをたとえば負荷の軽いものに決定する。第0−0のサーバ103は、転送先のサーバ名を決定すると、記憶装置CTL部509(図15)に対して転送先サーバ名を通知する。記憶装置CTL部509では、転送を受けたPCIeパケット601のサーバ名フィールドに、ソフトウェアPS#0−4が決定した情報を基にしてサーバ名を挿入する。
記憶装置107では、転送を受けたPCIeパケット601の統合EP番号およびEP番号フィールドに、このPCIeパケット601の送信元の統合エンドポイント番号と、エンドポイントの番号を挿入する。これにより、拡張サーバとしての第0−1のサーバ1041では、ヘッダフィールド602の統合EP番号およびEP番号フィールドに記載された番号を基にして受信したパケットが、どのような機能を持つエンドポイント111(図5)から送信されてきたパケットであるかを判定することが可能になる。また、所定のデバイスドライバに渡すことで、アプリケーションに対してパケットを渡すことが可能となる。
記憶装置107では、主サーバとしての第0−0のサーバ103から転送されてきたデータが1次共有メモリ191に書き込まれたことを検出する(ステップS703)。そして、PCIeパケット601の転送先が記憶装置CTL部509(図15)から通知されると(ステップS704)、第0のメモリ間CTL部503で転送先サーバ名を記載する。その後、サーバ(Server)名フィールドに記載されたサーバに対応した2次共有メモリ192にPCIeパケット601を転送する(ステップS705)。
拡張サーバとしての第0−1のサーバ1041は、各サーバごとに2次共有メモリ192に自サーバ宛のデータが書き込まれていないか周期的に監視を行う。第0−1のサーバ1041は、データが書き込まれたことを確認すると、2次共有メモリ192からデータの読み出しを実行する(ステップS706)。
<主サーバおよび拡張サーバからエンドポイントへのデータの転送>
拡張サーバとしての第0−1のサーバ1041上のアプリケーションがエンドポイントに対してデータの送信を行うものとする。この場合、エンドポイント送信用のPCIeパケット611が第0−1のサーバ1041上のアプリケーションで作成される。このPCIeパケット611にサーバ名、統合エンドポイント番号およびエンドポイント番号から構成されるヘッダフィールド612を挿入し、2次共有メモリ192に対してデータの書き込みを実行する(ステップS711)。
ここで、ヘッダフィールド612におけるサーバ名には、処理を実行したサーバ名を挿入する。また拡張エンドポイント番号とエンドポイント番号に対しては、データの送信処理が、エンドポイントから受信したデータに対するレスポンスである場合は、受信時と同じ番号を記載する。これにより、最終的にエンドポイントにデータを送信する主サーバとしての第0−0のサーバ103が、どの統合エンドポイントあるいはエンドポイントに対してデータを送信するかの判定が可能になる。
なお、この例ではPCIeパケット611の送出先は第1の統合エンドポイント1011のみである。したがって拡張サーバとしての第0−1のサーバ1041が宛先を判断できないという事態は発生しない。図5に示した第1および第2の統合エンドポイント1011、1012のように複数の統合エンドポイントが存在する場合がある。このような場合には、第0−1のサーバ1041がこれらのいずれを宛先にするかを判断できない場合が想定される。この場合、第0−1のサーバ1041は統合エンドポイント番号に対して「ドントケア(Don't Care)」を付与する。
記憶装置107は、拡張サーバとしての第0−1のサーバ1041あるいは主サーバとしての第0−0のサーバ103から2次共有メモリ192に書き込みが行われたことを検出すると、このデータを1次共有メモリ191に転送する(ステップS712)。
主サーバとしての第0−0のサーバ103は、記憶装置107の1次共有メモリ191にエンドポイントへの送信データが書き込まれていないか周期的に監視を行う。第0−0のサーバ103は、1次共有メモリ191にこの送信データが書き込まれたことを確認すると、この送信データの読み出しを実行する(ステップS713)。
第0−0のサーバ103は、読み込んだPCIeパケット611に挿入されたヘッダフィールド(拡張ヘッダ)612を削除する。そして削除したヘッダフィールド612におけるエンドポイント番号に記載された番号を用いて、どのエンドポイントに対してPCIeパケット611を送信するかを決定する。第0−0のサーバ103は、次に該当するエンドポイントに対応するデバイスドライバを用いて、そのエンドポイント(この場合には第1統合エンドポイント1011)に対してPCIeパケット611の送信を実施する(ステップS714)。
先に説明したようにヘッダフィールド612の統合エンドポイント番号に「ドントケア(Don't Care)」が付与されている場合がある。この場合には主サーバとしての第0−0のサーバ103が送信先の統合エンドポイントを決定する。そして、この決定した統合エンドポイントに対してPCIeパケット611を送信することになる。
以上説明したように本実施の形態のエンドポイント共有システム100によれば、次のような効果がある。
第1の効果として、本実施の形態では複数のCPUが同一のエンドポイントにアクセスできる。エンドポイントについては、PCIeに準拠したデバイスを、そのまま用いることが可能である。
第2の効果として、本実施の形態では、CPUの切り替えを高速に実現することが可能になる。これは、エンドポイントにアクセスできるCPUを切り替える際に、エンドポイントに対するリセットや再設定処理が不要なためである。
第3の効果として、本実施の形態では、CPU側の負荷に応じてサーバを増減設可能な、スケーラビリティの高いシステムを構築することが可能となる。これは、ACT系CPUとSBY系CPUを物理的に分離された複数のCPUで構成可能なためである。
第4の効果として、本実施の形態では、エンドポイント側の負荷に応じて統合エンドポイントを増減設可能な、スケーラビリティの高いシステムを構築することが可能である。これは、物理的に分離された複数のEPをシステムに組み込むためである。
第5の効果として、本実施の形態では、CPU側の負荷(ソフトウェア処理)と、エンドポイント側の負荷(ハードウェア処理)に応じて、負荷の状況に対応した個別に増減設可能なスケーラビリティの高いシステムを構築することが可能である。
第6の効果として、本実施の形態では、メモリを利用したサーバ間データ送受信方法を実現することで、エンドポイントを接続していないサーバから、エンドポイントに対してデータの入出力を可能とするシステムを構築することが可能である。
第7の効果として、本実施の形態では記憶装置に汎用品および標準化された規格の半導体メモリを使用した。これにより、記憶装置およびこれを使用したエンドポイント共有システム100を安価に構成することができる。また、本実施の形態では各サーバと記憶装置107の間をPCIeで接続する。サーバから直接、PCIeのパケットを記憶装置に対して転送することで、ハードディスクへのデータのやり取りの際に発生するSAS(Serial Attached SCSI)、SATA(SerialATA)等のプロトコルを省力することが可能になる。これにより、プロトコルのオーバヘッドを削減し、サーバに搭載されているCPUの処理の負荷を低減することが可能となる。
第8の効果として、本実施の形態では記憶装置をサーバ間のデータの受け渡しに主として使用している。このような用途ではデータ転送の高速化が必要であるが、大容量化は必ずしも必要とされない。このような場合に半導体メモリを使用してハードディスクの使用を避けると、システムの信頼性を向上させることができる。ハードディスクは機械的に駆動する部品が含まれるため、故障が発生する可能性が高く、信頼性の点でネックとなるからである。
第9の効果として、本実施の形態ではPCIeのパケットに統合エンドポイントの番号を組み込むことで、複数の統合エンドポイントに対応して宛先のエンドポイントにデータを転送することが可能になる。また、データの転送の宛先等の情報を記した拡張ヘッダの付与により、エンドポイントに接続されていない拡張サーバがどのような種類のエンドポイントからのデータを受信したかを容易に判別し、所定のアプリケーションに対してデータを渡すことが可能になる。また、送信の際には、どのエンドポイントに対してデータを渡すべきかをエンドポイントに接続するサーバに通知することで、正しくデータを宛先のエンドポイントに送信することが可能になる。
<発明の変形可能性>
先の実施の形態で示したように複数の統合エンドポイントを実装することで、必要とされる処理能力に応じた統合エンドポイントの増減設が可能となり、汎用性の高いシステムを構築することが可能になる。しかしながら、統合エンドポイントを増設するためには、既に説明したように主サーバに対して統合エンドポイントとの接続用のPCIe NICカードを増設する必要がある。しかし、サーバの増設スロット数には制限があるため、システムとして必要とされる統合エンドポイントを増設できない可能性がある。
PCIeでは、データがPCIeパケットとして転送される。このため、他のプロトコルでPCIeパケットをカプセル化することが可能である。
図18は、本発明の第1の変形例におけるエンドポイント共有システムの構成を表わしたものである。この変形例のエンドポイント共有システム100Bで図5と同一部分には同一の符号を付しており、これらの説明を適宜省略する。
この第1の変形例のエンドポイント共有システム100Bでは、第0−0のサーバ103BのPCIe NICカード(PCIe NIC#001)121Bが第1のイーサネット(登録商標)スイッチ801の一端に接続されている。この第1のイーサネット(登録商標)スイッチ801の他端には、第1の統合エンドポイント1011の第0のポート1510Bと第2の統合エンドポイント1012の第0のポート(図示せず)が接続されている。同様に、第1−0のサーバ105BのPCIe NICカード(PCIe NIC#101)125Bが第2のイーサネット(登録商標)スイッチ802の一端に接続されている。この第2のイーサネット(登録商標)スイッチ802の他端には、第1の統合エンドポイント1011の第1のポート1511Bと第2の統合エンドポイント1012の第0のポート(図示せず)が接続されている。
すなわち、第1の変形例のエンドポイント共有システム100Bでは、イーサネット(登録商標)フレームでカプセル化を行う。これにより、イーサネット(登録商標)のMACアドレス(Media Access Control address)をベースにしてサーバ、および複数のエンドポイントの識別を行い、宛先を指定することが可能になる。このためには、主サーバとしての第0−0のサーバ103Bと第1−0のサーバ105Bの双方に、PCIeパケットをイーサネット(登録商標)フレームにカプセル化するためのPCIe NICカード121B、125Bを実装している。また、第1および第2の統合エンドポイント1011、1012側にも、第0のポート1510Bと第1のポート1511BのようにPCIeパケットのイーサネット(登録商標)カプセル化機能を追加している。
各サーバ103B、1041、105B、1061と第1および第2の統合エンドポイント1011、1012の間はイーサネット(登録商標)で接続される。したがって、第0−0および第0−1のサーバ103B、105Bと第1および第2の統合エンドポイント1011、1012の間に第1および第2のイーサネット(登録商標)スイッチ801、802を介在させることで、パケットの宛先を制御することが可能になる。この結果として、第0−0および第0−1のサーバ103B、105Bに実装されているPCIeスロット数に依存することなく、第1および第2の統合エンドポイント1011、1012等の統合エンドポイントの数を増減させることができる。たとえば第0−0のサーバ103Bは1枚のPCIe NICカード(PCIe NIC#001)121Bが第1のイーサネット(登録商標)スイッチ801を介することで、任意の数の統合エンドポイントの第0のポート1510Bと接続可能である。
このように第1の変形例によれば、サーバ群を構成する1台の第0−0のサーバ103B等の主サーバに対して、サーバ1041等の拡張サーバを複数台増設することができる。
図19は、本発明の第2の変形例として、統合エンドポイントと各系の拡張サーバが共にN台となったエンドポイント共有システムを表わしたものである。ここで数値Nは2以上の整数である。図19に示した第2の変形例のエンドポイント共有システム100Cで、図5と同一部分には同一の符号を付しており、これらの説明を適宜省略する。
第2の変形例のエンドポイント共有システム100Cでは、記憶装置107CがLAN115に接続すると共に、ACT系サーバ群901とSBY系サーバ群902と接続している。ここでACT系サーバ群901は1台の主サーバとしての第1の主サーバ911と、第0−1〜第0−Nの拡張サーバ9121〜912Nから構成されている。SBY系サーバ群902は同じく1台の主サーバとしての第2の主サーバ921と、第0−1〜第0−Nの拡張サーバ9221〜922Nから構成されている。
第1の主サーバ911は記憶装置107Cと、エンドポイント(EP)通信用PCIeケーブル931で接続される。また、第1の主サーバ911と第0−1〜第0−Nの拡張サーバ9121〜912Nは、それぞれ個別のサーバ間通信用PCIeケーブル9320〜932Nで記憶装置107Cと接続される。同様に、第2の主サーバ921は記憶装置107Cと、エンドポイント(EP)通信用PCIeケーブル941で接続される。また、第2の主サーバ921と第0−1〜第0−Nの拡張サーバ9221〜922Nは、それぞれ個別のサーバ間通信用PCIeケーブル9420〜942Nで記憶装置107Cと接続される。更に第1の主サーバ911と第2の主サーバ921は、それぞれイーサネット(登録商標)スイッチ801Cを介して第1〜第Nの統合エンドポイント(EP)1011〜101Nと接続されている。
第2の変形例のエンドポイント共有システム100Cは、N台の統合エンドポイント(EP)1011〜101Nと、N台ずつの第0−1〜第0−Nの拡張サーバ9121〜912Nおよび第0−1〜第0−Nの拡張サーバ9221〜922Nから成る。このようにエンドポイント共有システム100Cでは、サーバ群を構成する1台の主サーバ911(主サーバ921)に対して拡張サーバを複数台増設することが可能になっている。しかも、これらACT系サーバ群901とSBY系サーバ群902についてのソフトウェア処理と、第1〜第Nの統合エンドポイント(EP)1011〜101Nについてのハードウェア処理を分離して、個別に必要な数の増減設が可能である。
しかも、第2の変形例ではソフトウェア処理による各サーバ911、912、921、922と、ハードウェア処理による統合エンドポイント101をカプセル化したイーサネット(登録商標)経由で接続している。これにより、イーサネット(登録商標)で接続した各サーバ911、912、921、922と統合EP101を、仮想的に1つのシステムとして構成することが可能になる。また、記憶装置107Cは、主サーバ911、921の間を2系統のPCIeケーブルで接続し、拡張サーバ912、922の間を1系統のPCIeケーブルで接続している。これにより、統合エンドポイント101と各サーバ(主サーバ911、921および拡張サーバ912、922)間のデータ転送を実現することが可能になる。この結果、物理的に分離された、サーバ群901、902、統合エンドポイント群1011〜101Nおよび記憶装置107Cを、仮想的に1つのシステムとして制御することが可能となる。
以上説明した実施の形態の一部または全部は、以下の付記のようにも記載されるが、以下の記載に限定されるものではない。
(付記1)
コンピュータ用拡張バスアーキテクチャとしてのPCI(Peripheral Component Interconnect)機能を代理する機能部としてのPCIプロシキ(Proxy)機能部と、複数のエンドポイントとから構成された統合エンドポイントにおける所定のエンドポイントから現用系のサーバとしての主サーバにPCIeパケットを送信する統合エンドポイント側送信手段と、
この統合エンドポイント側送信手段の送信したPCIeパケットに格納されたデータを処理する拡張サーバを決定する拡張サーバ決定手段と、
この拡張サーバ決定手段で決定した拡張サーバのサーバ名を前記PCIeパケットに挿入する拡張サーバ名挿入手段と、
この拡張サーバ名挿入手段でサーバ名を挿入したPCIeパケットを前記主サーバから所定の記憶装置に送信する主サーバ側送信手段と、
この主サーバ側送信手段で送信したPCIeパケットを受信して前記記憶装置内の1次共有メモリに書き込む1次共有メモリ書込手段と、
この1次共有メモリ書込手段で前記1次共有メモリに書き込んだPCIeパケットを、アクティブ系およびスタンバイ系の各サーバのそれぞれに個別に対応して設けられこれらのサーバとの間のデータの個別転送に使用する2次共有メモリのうちの前記拡張サーバ決定手段で決定した2次共有メモリに転送する2次共有メモリ転送手段
とを具備することを特徴とするエンドポイント共有システム。
(付記2)
コンピュータ用拡張バスアーキテクチャとしてのPCI(Peripheral Component Interconnect)機能を代理する機能部としてのPCIプロシキ(Proxy)機能部と、複数のエンドポイントとから構成された統合エンドポイントにおける特定のエンドポイントに対して任意の主サーバおよび拡張サーバがデータの送信を行うときそのPCIeパケットに前記特定のエンドポイントを表わす識別情報を挿入する拡張サーバ側挿入手段と、
この拡張サーバ側挿入手段で前記識別情報を挿入したPCIeパケットを、それぞれの主サーバおよび拡張サーバに個別に対応して設けられこれらのサーバとの間のデータの個別転送に使用する複数の2次共有メモリのうちの送信元の前記任意の主サーバおよび拡張サーバに対応する2次共有メモリに格納する2次共有メモリ格納手段と、
この2次共有メモリ格納手段が前記2次共有メモリのいずれかにPCIeパケットを格納したとき前記識別情報を読み出してこの識別情報から判別されるエンドポイント宛にPCIeパケットを送信するPCIeパケット送信手段
とを具備することを特徴とするエンドポイント共有システム。
(付記3)
前記主サーバおよび拡張サーバは1組あるいは複数組存在することを特徴とする請求項1または請求項2記載のエンドポイント共有システム。
(付記4)
前記統合エンドポイントは1組あるいは複数組存在することを特徴とする請求項1または請求項2記載のエンドポイント共有システム。
(付記5)
前記拡張サーバ決定手段は、各サーバの負荷状況の軽い拡張サーバを決定することを特徴とする請求項1記載のエンドポイント共有システム。
(付記6)
前記記憶装置は半導体メモリによって構成されることを特徴とする請求項1記載のエンドポイント共有システム。
(付記7)
前記2次共有メモリは半導体メモリによって構成されることを特徴とする請求項2記載のエンドポイント共有システム。
(付記8)
コンピュータ用拡張バスアーキテクチャとしてのPCI(Peripheral Component Interconnect)機能を代理する機能部としてのPCIプロシキ(Proxy)機能部と、複数のエンドポイントとから構成された統合エンドポイントにおける所定のエンドポイントから現用系のサーバとしての主サーバにPCIeパケットを送信する統合エンドポイント側送信ステップと、
この統合エンドポイント側送信ステップで送信したPCIeパケットを受信した主サーバがこのPCIeパケットに格納されたデータを処理する拡張サーバを決定する拡張サーバ決定ステップと、
この拡張サーバ決定ステップで決定した拡張サーバのサーバ名を前記PCIeパケットに挿入する拡張サーバ名挿入ステップと、
この拡張サーバ名挿入ステップでサーバ名を挿入したPCIeパケットを前記主サーバから所定の記憶装置に送信する主サーバ側送信ステップと、
この主サーバ側送信ステップで送信したPCIeパケットを受信して前記記憶装置内の1次共有メモリに書き込む1次共有メモリ書込ステップと、
この1次共有メモリ書込ステップで前記1次共有メモリに書き込んだPCIeパケットを、アクティブ系およびスタンバイ系の各サーバのそれぞれに個別に対応して設けられこれらのサーバとの間のデータの個別転送に使用する2次共有メモリのうちの前記拡張サーバ決定ステップで決定した2次共有メモリに転送する2次共有メモリ転送ステップ
とを具備することを特徴とするデータ転送方法。
(付記9)
コンピュータ用拡張バスアーキテクチャとしてのPCI(Peripheral Component Interconnect)機能を代理する機能部としてのPCIプロシキ(Proxy)機能部と、複数のエンドポイントとから構成された統合エンドポイントにおける特定のエンドポイントに対してデータの送信を行う任意の主サーバおよび拡張サーバがPCIeパケットに前記特定のエンドポイントを表わす識別情報を挿入する拡張サーバ側挿入ステップと、
この拡張サーバ側挿入ステップで前記識別情報を挿入したPCIeパケットを、それぞれの主サーバおよび拡張サーバに個別に対応して設けられこれらのサーバとの間のデータの個別転送に使用する複数の2次共有メモリのうちの自サーバに対応する2次共有メモリに格納する2次共有メモリ格納ステップと、
この2次共有メモリ格納ステップで前記2次共有メモリのいずれかにPCIeパケットが格納されたとき前記識別情報を読み出してこの識別情報から判別されるエンドポイント宛にPCIeパケットを送信するPCIeパケット送信ステップ
とを具備することを特徴とするデータ転送方法。