特許第6625735号(P6625735)IP Force 特許公報掲載プロジェクト 2015.5.11 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社日立製作所の特許一覧
特許6625735計算機システム及び不揮発性メモリの冗長化方法
<>
  • 特許6625735-計算機システム及び不揮発性メモリの冗長化方法 図000002
  • 特許6625735-計算機システム及び不揮発性メモリの冗長化方法 図000003
  • 特許6625735-計算機システム及び不揮発性メモリの冗長化方法 図000004
  • 特許6625735-計算機システム及び不揮発性メモリの冗長化方法 図000005
  • 特許6625735-計算機システム及び不揮発性メモリの冗長化方法 図000006
  • 特許6625735-計算機システム及び不揮発性メモリの冗長化方法 図000007
  • 特許6625735-計算機システム及び不揮発性メモリの冗長化方法 図000008
  • 特許6625735-計算機システム及び不揮発性メモリの冗長化方法 図000009
  • 特許6625735-計算機システム及び不揮発性メモリの冗長化方法 図000010
  • 特許6625735-計算機システム及び不揮発性メモリの冗長化方法 図000011
  • 特許6625735-計算機システム及び不揮発性メモリの冗長化方法 図000012
  • 特許6625735-計算機システム及び不揮発性メモリの冗長化方法 図000013
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6625735
(24)【登録日】2019年12月6日
(45)【発行日】2019年12月25日
(54)【発明の名称】計算機システム及び不揮発性メモリの冗長化方法
(51)【国際特許分類】
   G06F 11/20 20060101AFI20191216BHJP
   G06F 16/178 20190101ALI20191216BHJP
【FI】
   G06F11/20 617
   G06F11/20 656
   G06F16/178
【請求項の数】10
【全頁数】17
(21)【出願番号】特願2018-512671(P2018-512671)
(86)(22)【出願日】2016年4月19日
(86)【国際出願番号】JP2016062319
(87)【国際公開番号】WO2017183096
(87)【国際公開日】20171026
【審査請求日】2018年8月1日
(73)【特許権者】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110001678
【氏名又は名称】特許業務法人藤央特許事務所
(72)【発明者】
【氏名】高田 正法
【審査官】 三坂 敏夫
(56)【参考文献】
【文献】 特開平07−253856(JP,A)
【文献】 国際公開第2008/105098(WO,A1)
【文献】 国際公開第2015/162717(WO,A1)
【文献】 特開2012−053796(JP,A)
【文献】 特開2010−257426(JP,A)
【文献】 特開平07−146820(JP,A)
【文献】 米国特許出願公開第2015/0227318(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/16 −11/20
G06F 16/178
(57)【特許請求の範囲】
【請求項1】
第1のプロセッサと第1の不揮発性メモリを備えた第1の計算機と、
第2のプロセッサと第2の不揮発性メモリを備えて前記第1の計算機に接続された第2の計算機と、を有する計算機システムであって、
前記第1の計算機は、前記第1のプロセッサからデータの書き込み命令を受信すると、前記データを前記第1の不揮発性メモリへの書き込みと、前記データを前記第2の計算機への書き込みに変換する冗長化ハードウェアを有し、
前記第1の計算機と前記第2の計算機は、ネットワークを介して接続され、
前記冗長化ハードウェアは、
バッファを有し、前記第1のプロセッサからデータの書き込み命令を受信すると、前記データを前記第1の不揮発性メモリ及び前記バッファへそれぞれ書き込み、前記第1のプロセッサからコミット命令を受信すると、前記バッファに書き込まれたデータを前記第2の計算機へ書き込み、前記第1のプロセッサからコミット命令を受信すると、前記ネットワークの利用率を算出し、前記利用率が所定の閾値以下であれば、前記バッファに書き込まれたデータを前記第2の計算機へ書き込むことを特徴とする計算機システム。
【請求項2】
請求項1に記載の計算機システムであって、
前記冗長化ハードウェアは、
前記第1のプロセッサからコミット命令を受信すると、前記第2の計算機へコミットを要求し、前記第2の計算機からコミットの完了通知を受信してから前記第1のプロセッサへ完了を応答することを特徴とする計算機システム。
【請求項3】
請求項1に記載の計算機システムであって、
前記第1のプロセッサは、
複数のプロセッサコアを有し、
前記バッファは、
前記プロセッサコアに対応する複製のテーブルを有し、
前記冗長化ハードウェアは、
前記第1のプロセッサからデータの書き込み命令を受信すると、前記プロセッサコアに対応する前記バッファのテーブルに前記データを書き込んで、前記第1のプロセッサからコミット命令を受信すると、前記プロセッサコアに対応する前記バッファのテーブルから前記データを前記第2の計算機へ送信することを特徴とする計算機システム。
【請求項4】
請求項1に記載の計算機システムであって、
前記冗長化ハードウェアは、
前記第1のプロセッサからコミット命令を受信すると、前回のコミット命令からの経過時間を算出し、前記利用率が所定の閾値以下で、かつ、前記経過時間が所定時間を経過していれば、前記バッファに書き込まれたデータを前記第2の計算機へ書き込むことを特徴とする計算機システム。
【請求項5】
請求項1に記載の計算機システムであって、
前記第2の計算機は、
前記第1の計算機から前記データの書き込みを受け付けると、前記データを受信した応答を前記第1の計算機へ送信した後に、前記データを前記第2の不揮発性メモリへ書き込むことを特徴とする計算機システム。
【請求項6】
第1のプロセッサと第1の不揮発性メモリを備えた第1の計算機と、第2のプロセッサと第2の不揮発性メモリを備えて前記第1の計算機に接続された第2の計算機で、不揮発性メモリへの書き込みを制御する不揮発性メモリの冗長化方法であって、
前記第1のプロセッサがデータの書き込み命令を発行する第1のステップと、
前記第1の不揮発性メモリに接続された冗長化ハードウェアが、前記第1のプロセッサからデータの書き込み命令を受信する第2のステップと、
前記冗長化ハードウェアが、前記受信したデータの書き込み命令を、前記データを前記第1の不揮発性メモリへの書き込みと、前記データを前記第2の計算機への書き込みに変換する第3のステップと、
前記冗長化ハードウェアが、前記データを前記第1の不揮発性メモリへ書き込む第4のステップと、
前記冗長化ハードウェアが、前記データを前記第2の計算機へ書き込む第5のステップと、
を含み、
前記第1の計算機と前記第2の計算機は、ネットワークを介して接続され、
前記第5のステップは、
前記第1のプロセッサからデータの書き込み命令を受信すると、前記データを前記冗長化ハードウェアのバッファへ書き込むステップと、
前記第1のプロセッサからコミット命令を受信すると、前記バッファに書き込まれたデータを前記第2の計算機へ書き込むステップと、
前記第1のプロセッサからコミット命令を受信すると、前記ネットワークの利用率を算出し、前記利用率が所定の閾値以下であれば、前記バッファに書き込まれたデータを前記第2の計算機へ書き込むステップと、
を含むことを特徴とする不揮発性メモリの冗長化方法。
【請求項7】
請求項6に記載の不揮発性メモリの冗長化方法であって、
前記第5のステップは、
前記第1のプロセッサからコミット命令を受信すると、前記第2の計算機へコミットを要求するステップと、
前記第2の計算機からコミットの完了通知を受信してから前記第1のプロセッサへ完了を応答するステップと、
を含むことを特徴とする不揮発性メモリの冗長化方法。
【請求項8】
請求項6に記載の不揮発性メモリの冗長化方法であって、
前記第1のプロセッサは、
複数のプロセッサコアを有し、
前記バッファは、
前記プロセッサコアに対応する複製のテーブルを有し、
前記第5のステップは、
前記第1のプロセッサからデータの書き込み命令を受信すると、前記プロセッサコアに対応する前記バッファのテーブルに前記データを書き込むステップと、
前記第1のプロセッサからコミット命令を受信すると、前記プロセッサコアに対応する前記バッファのテーブルから前記データを前記第2の計算機へ送信するステップと、
を含むことを特徴とする不揮発性メモリの冗長化方法。
【請求項9】
請求項6に記載の不揮発性メモリの冗長化方法であって、
前記第1のプロセッサからコミット命令を受信すると、前回のコミット命令からの経過時間を算出し、前記利用率が所定の閾値以下で、かつ、前記経過時間が所定時間を経過していれば、前記バッファに書き込まれたデータを前記第2の計算機へ書き込むことを特徴とする不揮発性メモリの冗長化方法。
【請求項10】
請求項6に記載の不揮発性メモリの冗長化方法であって、
前記第2の計算機が、前記第1の計算機から前記データの書き込みを受け付ける第6のステップと、
前記第2の計算機が、前記データを受信した応答を前記第1の計算機へ送信した後に、前記データを前記第2の不揮発性メモリへ書き込む第7のステップと、
をさらに含むことを特徴とする不揮発性メモリの冗長化方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、不揮発性メモリを有する計算機に関する。
【背景技術】
【0002】
近年、フラッシュメモリやMRAM(Magnetoresistive Random Access Memory)等といった大容量不揮発メモリの普及が進んでいる。これにより、コンピュータシステムにおいても、DRAM(Dynamic Random Access Memory)に代わりこれらのメモリを使う動きが進んでいる。
【0003】
ストレージシステムにおいては、元々DRAMをキャッシュメモリに使うことにより、HDD等へのアクセスを削減し、性能を向上させる仕組みが広く適用されていた。その上で、特許文献1のように、不揮発メモリを併用する例が知られている。また、ハードウェアの障害に対応させるため、特許文献2に開示されるように、2つのハードウェアコンポーネントを用意し、両者でデータを複製する方式が知られている。
【0004】
サーバシステムにおいては、DRAMのような揮発メモリに代わり不揮発メモリを利用するためのソフトウェアインタフェースとして、非特許文献1に開示されるように、通常のDRAMと同様に書き込みを行い、不揮発化を保証したいタイミングでコミット処理を行うハード−ソフトウェアインタフェースが提案されている。このインタフェースに従うハードウェア及びソフトウェアを用いることで、電源遮断などの障害においてもデータの不揮発性を保証することができる。
【0005】
また、非特許文献1では、DRAMと同等のソフトウェアインタフェースで不揮発性メモリを扱う技術が開示されている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】国際公開第2015/097751号公報
【特許文献2】特開2014−167818号公報
【非特許文献】
【0007】
【非特許文献1】NVM Programming Model (NPM) Version 1, SNIA TechnicalPosition, Dec. 21, 2014
【発明の概要】
【発明が解決しようとする課題】
【0008】
ソフトウェアから見てDRAMとほぼ同じ使い方で、不揮発化、かつ障害にも耐えられるメモリを実現できれば、より手軽に高信頼かつ高性能なソフトウェア及びコンピュータシステムを実現できるようになるはずである。
【0009】
しかし、特許文献1や特許文献2では、ストレージのキャッシュメモリに用途を限定し、データの冗長化や不揮発化を行う技術が記載されているものの、ソフトウェアが特別なハードウェア操作を行うことを前提としている。
【0010】
このため、上記従来例ではソフトウェアで特別な操作が必要な上、当該操作によりソフトウェア処理が増えることから、性能が低下するという課題があった。また、上記非特許文献1では、DRAMと同等のソフトウェアインタフェースで不揮発性メモリを扱うことが開示されているが、不揮発かつ冗長化を行うメモリの実現方法については開示されていない。
【0011】
これらの課題を踏まえ、本発明では、不揮発かつ冗長性を有して、DRAMと同等のソフトウェアインタフェースで不揮発性メモリを扱う技術を実現する。
【課題を解決するための手段】
【0012】
第1のプロセッサと第1の不揮発性メモリを備えた第1の計算機と、第2のプロセッサと第2の不揮発性メモリを備えて前記第1の計算機に接続された第2の計算機と、を有する計算機システムであって、前記第1の計算機は、前記第1のプロセッサからデータの書き込み命令を受信すると、前記データを前記第1の不揮発性メモリへの書き込みと、前記データを前記第2の計算機への書き込みに変換する冗長化ハードウェアを有し、前記第1の計算機と前記第2の計算機は、ネットワークを介して接続され、前記冗長化ハードウェアは、バッファを有し、前記第1のプロセッサからデータの書き込み命令を受信すると、前記データを前記第1の不揮発性メモリ及び前記バッファへそれぞれ書き込み、前記第1のプロセッサからコミット命令を受信すると、前記バッファに書き込まれたデータを前記第2の計算機へ書き込み、前記第1のプロセッサからコミット命令を受信すると、前記ネットワークの利用率を算出し、前記利用率が所定の閾値以下であれば、前記バッファに書き込まれたデータを前記第2の計算機へ書き込む。
【発明の効果】
【0013】
本発明により、不揮発かつ冗長性を有して、DRAMと同等のソフトウェアインタフェースを実現することができる。この結果、不揮発性メモリの可用性が必要で、かつ性能も必要なソフトウェアの記述が容易になって、より多くの用途でこれらの可用性を活用したアプリケーションが実現出来るようになる。
【図面の簡単な説明】
【0014】
図1】本発明の第1の実施例を示し、計算機システムの一例を示すブロック図である。
図2】本発明の第1の実施例を示し、プロセッサコアから不揮発性メモリへの書き込みの一例を示す説明図である。
図3】本発明の第1の実施例を示し、プロセッサコアで実行されるソフトウェアの一例を示すフローチャートである。
図4】本発明の第1の実施例を示し、プロセッサコアとFPGAのメモリ空間の一例を示すマップである。
図5】本発明の第1の実施例を示し、書き込みバッファの構成の一例を示す図である。
図6】本発明の第1の実施例を示し、送信パケットの一例を示す図である。
図7】本発明の第1の実施例を示し、アクセス受付部で行われる処理の一例を示すフローチャートである。
図8】本発明の第1の実施例を示し、書き込み発行部で行われる処理の一例を示すフローチャートである。
図9】本発明の第1の実施例を示し、二重化受付部で行われる処理の一例を示すフローチャートである。
図10】本発明の第2の実施例を示し、定期コミット処理の一例を示すフローチャートである。
図11】本発明の第3の実施例を示し、二重化受付部で行われる処理の一例を示すフローチャートである。
図12】本発明の第3の実施例を示し、コミット処理の一例を示すフローチャートである。
【発明を実施するための形態】
【0015】
以下、添付図面を参照して本発明の実施形態について説明する。ただし、本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。また、各図において共通の構成については同一の参照番号が付されている。
【実施例1】
【0016】
第一の実施例は、ソフトウェアがDRAMと同様のメモリ操作を行うことによりデータの冗長化を実現する冗長化ハードウェア及びそれを用いたコンピュータシステムである。
【0017】
図1は、本発明が適用されるコンピュータシステムの一例を示すブロック図である。コンピュータシステムは、2台以上のコンピュータ1a、1b、及び両者を接続するためのネットワーク20で構成される。図示の例ではコンピュータが2台、かつ、両者間は直結されているが、3台以上であっても良い。
【0018】
コンピュータ1aは、プロセッサ12aと、不揮発メモリ14aと、及び、冗長化機能2aが搭載されたFPGA11aと、ネットワークインタフェース16aで構成されており、これらの構成要素が互いに接続されている。図示の例ではプロセッサ12aにFPGA11aが接続されているが、論理的に各構成要素が互いにアクセス可能になっていれば、図示以外の接続関係でも良いし、また、例えばプロセッサ12aの中にFPGA11aが内蔵されているような形でも良い。また、FPGA11aの代わりにASICのような専用の冗長化ハードウェアを用いても良い。
【0019】
プロセッサ12aは、複数のプロセッサコア15a−0〜15a−n(図中コア0〜コアn)で構成されており、このプロセッサコア15a上でソフトウェア13aが実行される。また、FPGA11aには、冗長化機能2aがハードウェアとして搭載される、また、FPGA11aには、不揮発性メモリ14aを制御するメモリコントローラ16aが搭載される。
【0020】
コンピュータ1bは、コンピュータ1aと同様の構成であり、コンピュータ1aの各構成要素の符号の添え字“a”を“b”とした符号で示す。なお、コンピュータ1a、1bの各構成要素の総称は、添え字“a”、“b”または“−”のない符号で示す。
【0021】
本実施例1でコンピュータ1aの不揮発性メモリ14aを冗長化するために必要な冗長化機能2aの構成について以下に説明する。尚、本実施例では、プロセッサコア15aが、コンピュータ1aの不揮発メモリ14aに加えてコンピュータ1bの不揮発メモリ14bにもデータを格納することで冗長化する例を示している。
【0022】
冗長化機能2は、アクセス受付部3と、書き込み発行部4と、二重化受付部5と、書き込みバッファ6で構成される。冗長化を実施するソフトウェア13aは、同じコンピュータ1aの冗長化機能2aのうち、アクセス受付部3aと、書き込みバッファ6aと、書き込み発行部4aを使用し、外部のコンピュータ1bの冗長化機能2bでは二重化受付部5bを使用する。
【0023】
なお、コンピュータ1bのソフトウェア13bが冗長化を実施する際には、同じコンピュータ1bの冗長化機能2bのうち、アクセス受付部3bと、書き込みバッファ6bと、書き込み発行部4bを使用し、外部のコンピュータ1aの冗長化機能2aでは二重化受付部5aを使用する。
【0024】
アクセス受付部3は、プロセッサコア15からの書き込み命令、読み出し命令、コミット命令を受け付けて、各命令毎に所定の処理を行う。書き込みバッファ6は、プロセッサコア15からの書き込みデータを一時的に格納するためのバッファである。書き込み発行部4は、書き込みバッファ6のデータを効率良く他のコンピュータ1に送信し、送信したデータが他のコンピュータ1に到着しているかを検出する。二重化受付部5は、他のコンピュータ1の書き込み発行部4によって送信されたデータを、受信して不揮発メモリ14に書き込み、前述の到着の検知に対して応答する。
【0025】
図4は、プロセッサコア15とFPGA11のメモリ空間の一例を示すマップである。
【0026】
プロセッサコア15から見たメモリ空間141上には、FPGA11がマッピングされており、例えば、アドレス0000_0000H〜7FFF_FFFFがプロセッサコア15aのメモリ空間141とする。
【0027】
FPGA11は、プロセッサコア15のメモリ空間141に加えて、不揮発性メモリ14のアドレス空間としてNVM空間142が割り当てられており、例えば、アドレス8000_0000H〜FFFF_FFFFがFPGA11のNVM空間142として設定されている。
【0028】
本実施例1では、プロセッサコア15から不揮発性メモリ14への直接のアクセスを禁止する例を示すが、これに限定されるものではない。例えば、プロセッサコア15のアクセス空間が、メモリ空間141にNVM空間142を加えてのアクセスを許容する構成であってもよい。
【0029】
FPGA11は、プロセッサコア15からメモリ空間141へのアクセス要求を受け付けると、メモリ空間141のアドレスをNVM空間142へのアクセスに変換して、要求されたメモリアクセスを実施する。本実施例1では、FPGA11にメモリ空間141とNVM空間142のアドレスを変換するマップやオフセットなどの変換情報が予め設定されている。
【0030】
図2は、本実施例において、コンピュータ1aのプロセッサコア15aからの書き込み命令で2箇所のコンピュータ1a、1bの不揮発メモリ14a、14bにデータが書き込まれる仕組みを示したものである。
【0031】
プロセッサコア15aは、FPGA11aのメモリ空間141に対してメモリ書き込みを行う。書き込み要求を受けたFPGA11aのアクセス受付部3aは、同一コンピュータ1aの不揮発メモリ14aに書き込みを行ってから、コンピュータ1bのFPGA11bに対しても書き込み命令とデータを送信する。
【0032】
本実施例1では、冗長化ハードウェアとしてのFPGA11aでは、アクセス受付部3aがプロセッサコア15aからの書き込み要求を受け付けると、まず、不揮発性メモリ14aと書き込みバッファ6aにデータを書き込む。次に、FPGA11aのアクセス受付部3aは、プロセッサコア15aからコミット要求を受け付けると、書き込み発行部4aに書き込みバッファ6a内のデータをコンピュータ1bへ送信させる。
【0033】
コンピュータ1bのFPGA11bの二重化受付部5bは、外部のコンピュータ1aから受信したデータと書き込み命令に基づいて、不揮発性メモリ14bへ受信したデータを書き込む。FPGA11bの二重化受付部5bは、データの書き込みが完了すると、コンピュータ1aに対して、完了を通知する。
【0034】
FPGA11aの書き込み発行部4aは、書き込み先のコンピュータ1bからのコミットの完了通知を受信すると、コミット要求を発行したプロセッサコア15aに対してコミットの完了通知を送信する。
【0035】
なお、プロセッサコア15a−0〜15a−nは、FPGA11aに対して要求を発行する際に、要求を記載したメッセージにプロセッサコア15aの識別子を付加しておく。これにより、FPGA11aは応答等を送信するプロセッサコア15a−0〜15a−nを特定することが可能となる。
【0036】
また、FPGA11aの書き込み発行部4aは、自コンピュータ1aのメモリコントローラ16aに対してコミット要求を送信してもよい。この場合、メモリコントローラ16aは、変更前のデータを保持していた場合、コミット要求を受け付けると、当該変更前のデータを不揮発性メモリ14aから消去してコミットの完了をFPGA11aの書き込み発行部4aに通知する。
【0037】
FPGA11aの書き込み発行部4aは、同一のコンピュータ1aのメモリコントローラ16aからのコミットの完了通知と、外部のコンピュータ1bからのコミットの完了通知の双方を受信してから、コミットの完了通知を送信元のプロセッサコア15aに送信し、コミット要求を完了する。
【0038】
図3は、本実施例において、プロセッサコア15で実行されるソフトウェア13の処理の一例を示したものである。
【0039】
ソフトウェア13は、主記憶としての不揮発性メモリ14へロードされてからプロセッサコア15によって実行され、所定の処理または計算を行い(S130)、処理または計算を行った結果を不揮発性メモリ14に書き込む(S131)。プロセッサコア15はこの書き込みの際に、FPGA11の冗長化機能2を用いる。
【0040】
プロセッサコア15は書き込みを行った後に、データが揮発しないことを保証させるため、コミット処理を行う(S132)。ソフトウェア13は、上記の処理により書き込み要求の後に、コミット要求の発行を繰り返す。
【0041】
本実施例1では、ソフトウェア13が、書き込み要求の後にコミット要求を発行する例を示すが、これに限定されるものではない。ソフトウェア13は、書き込み要求のみでコミット要求を発行しなくてもよい。この場合、FPGA11aは、書き込み要求で、不揮発性メモリ14aと、外部のコンピュータ1bへの書き込みを実施する。
【0042】
図5は、書き込みバッファ6の構成及び内容の一例を示した図である。書き込みバッファ6は、書き込み元のプロセッサコア15a−0〜15a−n毎にテーブル50−0〜50−nを有し、テーブル50の各エントリに、プロセッサコア15からの書き込みが行われる。テーブル50のエントリは、書き込み先のアドレス51と、書き込み長52(バイト長)及びデータ53で構成される。
【0043】
前述のコミット処理の際には、既に書き込みバッファ6へ書き込んだ内容を全て掃き出す必要があるが、掃き出す対象は、コミット要求を行ったプロセッサコア15からの書き込みのみである。そこで、プロセッサコア15a−0〜15a−n毎にテーブル50−0〜50−nを分割することで、掃き出しに要する時間を削減する。
【0044】
図6は、書き込み発行部4と二重化受付部5の間、即ちネットワーク20上で送受信されるデータの一例を示した図である。データは、書き込みバッファ6の各エントリを連結したものと同じであり、アドレス81と、書き込み長82と、書き込みデータ83と及び、次のデータとの境界を示す情報84で構成される。
【0045】
図7は、本実施例1における、アクセス受付部3で行われる処理の一例を示すフローチャートである。本処理は、プロセッサコア15からのアクセスがあった場合に開始される。
【0046】
本処理では、まず、アクセス受付部3は、プロセッサコア15から受け付けたアクセスの種別を判定する(S301)。Write(書き込み要求)であった場合には、アクセス受付部3は、プロセッサコア15が指定したアドレスを変換して、変換後のNVM空間142のアドレスに対応する不揮発メモリ14へ書き込みを行う(S302)。
【0047】
そして、アクセス受付部3は、プロセッサコア15に対応する書き込みバッファ6のテーブル50にエントリを追加してアドレス、データ長、データの内容を書き込んでから(S303)、処理を終了する。
【0048】
一方、ステップS301において、アクセスの種別がReadであった場合、アクセス受付部3は、メモリコントローラ16に対してReadを発行し、指定されたアドレスに対応するデータを不揮発性メモリ14から読み込む(S304)。そして、アクセス受付部3は、読み込んだデータをプロセッサコア15に応答して(S305)、処理を終了する。
【0049】
ステップS301において、アクセスの種別がコミットであった場合、アクセス受付部3は、まず、書き込みバッファ6が空であるか否かを判定する(S306)。アクセス受付部3は、コミットを要求したプロセッサコア15a−0〜15a−nに対応するテーブル50−0〜50−nのエントリが空であればステップS311へ進み、空でなければステップS307へ進む。
【0050】
テーブル50が空でない場合、アクセス受付部3は、コミットを要求したプロセッサコア15に対応する書き込みバッファ6のテーブル50の内容を全て掃き出す(S307)。ここで掃き出すとは、書き込みバッファ6のテーブル50に格納されている内容(エントリ)を全て冗長化先のコンピュータ1bに送信するよう、書き込み発行部4にデータの書き込みを命令することである。
【0051】
この処理によって、書き込みバッファ6のテーブル50に保持されていたデータは、外部のコンピュータ1bの不揮発性メモリ14bへ書き込まれて、データの冗長性が確保される。
【0052】
命令を受け付けた書き込み発行部4は、メモリコントローラ16に対して、コミット処理を行い(S308)、他のコンピュータ1bの二重化受付部5に対してもコミット処理を行う(S309)。
【0053】
メモリコントローラ16は、コミットの要求を受け付けると、不揮発性メモリ14に保持していた変更前のデータを消去して、書き込み発行部4へコミットの完了を通知する。コンピュータ1bの二重化受付部5bは、コミット命令を受信すると、応答を返信してコミットの完了を通知する。
【0054】
書き込み発行部4は、メモリコントローラ16と外部のコンピュータ1bからのコミットの完了通知を待ち(S310)、双方のコミットの完了通知が到着するとステップS311へ進む。
【0055】
書き込み発行部4は、要求元のプロセッサコア15に対して、コミットの完了を応答し(S311)、処理を終了する。一方、上記ステップS306の判定において書き込みバッファ6のテーブル50が空の場合は、アクセス受付部3がコミットの完了をコミットの要求元のプロセッサコア15へ応答して、処理を終了する(S311)。
【0056】
上記処理により、プロセッサコア15で実行されるソフトウェア13は、不揮発メモリ14に対して行う場合と同様に、アクセス受付部3に対する読み書き、コミット処理を行うだけで、データの二重化までを行えるようになる。
【0057】
図8は、本実施例1における、書き込み発行部4の処理の一例を示すフローチャートである。本処理は、所定の周期(1μsec〜100μsec)などで定期的に実行されるか、図7のステップS307で実行される。
【0058】
本処理では、まず、書き込み発行部4が、書き込みバッファ6のテーブル50内に残っているデータの量(サイズ)と、ネットワーク20の利用率を算出し、バッファ掃き出し命令を受信済みであるかを判定し、書き込みバッファ6の掃き出し処理を行うべきか否かを判定する(S600)。
【0059】
ここで、書き込み発行部4は、ネットワーク20の利用率として、例えば、ネットワークインタフェース16aの単位時間当たりのデータの送受信量と、ネットワーク20の理論的な転送速度の比を利用率として算出する。書き込み発行部4は、算出した利用率が所定の閾値Th1以下であれば、ネットワーク20の利用率が低いと判定する。
【0060】
書き込みバッファ6のテーブル50内のデータ量が少ない場合、ネットワーク20に送信する場合のデータサイズが小さくなって利用効率が悪い。このため、書き込み発行部4は、テーブル50内のデータ量が閾値Th2未満の場合には、データを送信せずに書き込みバッファ6のテーブル50にデータを溜め込む。
【0061】
また、ネットワーク20の利用率が低い場合(利用率≦閾値Th1)、少量のデータを送信してネットワーク20の利用効率を下げてもネットワーク20への影響が小さいことから、書き込み発行部4は、早期にデータを送信することにより、コミット処理時の送信量を減らせる効果があることから、積極的に送信を行う。
【0062】
以上を実現するため、例えば、書き込み発行部4は、テーブル50のデータ量が閾値Th2以上の場合にデータの掃き出し処理を実施するためステップS601以降の送信処理に進む。また、書き込み発行部4は、書き込みバッファ6のテーブル50のデータ量が閾値Th2以下であっても、ネットワーク20の利用率が閾値Th1以下の場合には送信を行う。一方、書き込み発行部4は、プロセッサコア15からバッファ掃き出しの命令を受信している場合には、無条件でステップS601に進む。なお、書き込み発行部4は、掃き出しを行わないと判断した場合には、そのまま処理を終了する。
【0063】
書き込み発行部4は、書き込みバッファ6のテーブル50のデータ量が閾値Th2以上、またはネットワーク20の利用率が閾値Th1以下、あるいは、バッファ掃き出しの命令を受信した場合にテーブル50のデータを外部のコンピュータ1bに書き込む。
【0064】
次に、書き込み発行部4は、掃き出し処理の対象となったテーブル50の内容を基に送信パケットを生成する(S601)。そして、書き込み発行部4は、生成したパケットを冗長化先の二重化受付部5に送信して書き込みを要求する(S602)。書き込み発行部4は、送信が完了した書き込みバッファ6のテーブル50の内容を消去し(S603)、処理を終了する。
【0065】
上記処理により、書き込み発行部4は、ネットワーク20の負荷が過大になるのを抑えつつ、効率良く二重化処理を行うことができる。
【0066】
図9は、本実施例における、二重化受付部5で行われる処理の一例を示すフローチャートである。本処理は、二重化元のコンピュータ1aからデータを受け取った場合に呼び出される。
【0067】
本処理では、まず、二重化受付部5は受信したパケットの種別を判定する(S700)。Writeであった場合、二重化受付部5は受信したパケットを展開して、アドレス81と、データ長82から書き込むデータ83を取得する(S701)。
【0068】
そして、二重化受付部5は取得したデータ83とアドレス81に従い、不揮発性メモリ14bへの書き込みを行い(S702)、処理を終了する。
【0069】
一方、上記ステップS700の判定において、パケットの種別がコミットであった場合、二重化受付部5はコミットの完了通知を生成し、応答として返信する(S703)。その後、二重化受付部5は同一コンピュータ1b内の不揮発メモリ14bに対し、コミット処理を行う(S704)。このコミット処理は、例えば、二重化受付部5bがメモリコントローラ16bに対してコミットを要求すると、不揮発性メモリ14bに保持されていた変更までのデータが消去される。
【0070】
以上のように本実施例によれば、プロセッサコア15aがメモリへの書き込み要求を発行すると、FPGA11aはプロセッサコア15aと同じコンピュータ1aの不揮発性メモリ14aへデータを書き込むのに加え、外部のコンピュータ1bの不揮発性メモリ14bにもデータを書き込むことで、冗長性を確保できる。すなわち、FPGA11aはプロセッサコア15からの書き込み命令を、同一のコンピュータ1aの不揮発性メモリ14への書き込み命令と、他のコンピュータ1bへの書き込み(送信)命令に変換する。
【0071】
また、FPGA11aが外部のコンピュータ1bに書き込むタイミングは、プロセッサコア15aからの書き込み要求の後にコミット要求を受け付けた後に書き込みを実施させることで、値が確定したデータの冗長性を確保することができる。
【0072】
また、FPGA11aは、コミット要求を受け付けると、メモリコントローラ16aに対してコミット要求を発行してコミットの完了通知を待機するのに加え、外部のコンピュータ1bにもコミット要求を発行してコミットの完了通知を待機する。そして、FPGA11aは、メモリコントローラ16a及び外部のコンピュータ1bからコミットの完了通知を受信してから、プロセッサコア15aへコミットの完了通知を応答することで、冗長性を保証することができる。
【0073】
また、FPGA11の書き込み発行部4は、ネットワーク20の利用率が閾値Th1以下、または、書き込みバッファ6のテーブル50のデータ量が閾値Th2以上、あるいは、バッファ掃き出しの命令を受信した場合にテーブル50のデータを外部のコンピュータ1bに書き込むので、ネットワーク20の利用効率を向上させることができる。
【0074】
本実施例1により、不揮発かつ障害にも耐えられて、DRAMと同等のソフトウェアインタフェースで、不揮発性メモリ14a、14bによる冗長化を実現することができる。この結果、不揮発性メモリ14の可用性が必要かつ性能も必要なソフトウェアの記述が容易になり、より多くの用途でこれらの可用性を活用したアプリケーションが実現出来るようになる。
【0075】
なお、コンピュータ1a、1bがブレードサーバなどで構成される場合は、ネットワーク20としてバックプレーンを用いることができる。また、上記実施例では、冗長化ハードウェアとしてのFPGA11がプロセッサ12に接続された例を示したが、プロセッサ12が冗長化ハードウェアを内包する構成であってもよい。
【実施例2】
【0076】
本実施例2は、前記実施例1に示した書き込み発行部4が定期的にコミット処理を行うことによってコンピュータ1の性能向上を目指したものである。以下、実施例1との差分について説明する。
【0077】
図10は、本実施例2における、書き込み発行部4で行われる定期コミット処理61の処理を示したフローチャートである。本処理は、1μsec〜100μsecなど所定の周期で定期的に実行される。
【0078】
本処理では、ネットワーク20の利用率と、前回のコミット命令を受信した時刻からの経過時間を判定する(S610)。前記実施例1と同様にネットワーク20の利用率が閾値Th1を超えて高い場合、あるいは、ネットワーク20の利用率が閾値Th1以下でも、前回のコミット処理からの時間が所定時間Th3を経過していない場合は、書き込み発行部4は、定期コミット処理61を禁止して処理を終了する。
【0079】
一方、書き込み発行部4は、ネットワーク20の利用率が閾値Th1以下で、かつ、前回のコミット処理からの経過時間が所定時間Th3を経過(時間Th3以上)した場合、書き込み発行部4は、定期コミット処理61を開始する(S611〜S614)。これらのステップS611〜S614は、実施例1に示した図7のS306〜S310と同様である。そして、本実施例2では、図7の処理にステップS615の処理を加えて、最終コミット実施時刻を更新して、処理を終了する。
【0080】
これにより、書き込み発行部4が、定期的に書き込みバッファ6を掃き出すことができ、プロセッサコア15からのコミット要求の受信時に処理する書き込みバッファ6のデータ量を減らすことができる。この結果、プロセッサコア15からのコミット処理から完了応答までの時間を短縮することができ、プロセッサコア15の処理時間が短縮でき、処理性能を向上させることが可能となる。
【実施例3】
【0081】
本実施例3は、実施例1に対し、コンピュータ1a、1b間でデータ受信毎に応答を行うことで、コミット処理による処理時間の増大を低減するものである。以下、実施例1との差分について説明する。
【0082】
図11は、本実施例3における、二重化受付部5の処理を示したフローチャートである。本処理は、図9に示す実施例1のフローチャートにステップS711を追加したもので、その他の構成は前記実施例1と同様である。
【0083】
本実施例3では、パケット種別がWriteの場合、二重化受付部5は、まず、パケットを受信した旨を送信元に対して返送する(S711)点が、実施例1と異なる。その後、前記実施例1と同様に、二重化受付部5は、受信したパケットを展開し、不揮発性メモリ14への書き込み処理を実行する。
【0084】
本実施例3では、二重化受付部5が、書き込み要求のパケットを受信すると、コミット要求を待たずに応答を返信することができる。
【0085】
図12は、本実施例3における、アクセス受付部3のコミット要求の受信時の処理を示すフローチャートである。この処理は、前記実施例1の図7のS306以降に対応する。
【0086】
本処理では、まず、アクセス受付部3が書き込みバッファ6の該当テーブル50内に未送信エントリがあるか否かを判定する(S630)。プロセッサコア15に該当するテーブル50内に未送信エントリがある場合、アクセス受付部3はバッファ掃き出しを行い(S631)、次に、掃き出したデータに対応するパケットについて、外部のコンピュータ1bから応答を待つ(S632)。アクセス受付部3は応答を受信してからコミットの完了を応答して(S633)、処理を終了する。
【0087】
一方、上記ステップS630の判定において、未送信エントリが無い場合、アクセス受付部3は最終送信パケットに対する応答が外部のコンピュータ1bから到着するのを待ち(S633)、到着した後にコミットの完了を応答する(S634)。
【0088】
上記処理により、プロセッサコア15が実際にデータを送ったタイミングからコミットを行うまでの時間差による処理の遅延を削減することができる。この結果、プロセッサコア15からのコミット処理からFPGA11による完了応答までの時間を低減でき、プロセッサ12の処理時間を短縮して、性能向上を図ることができる。
【0089】
<まとめ>
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に記載したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加、削除、又は置換のいずれもが、単独で、又は組み合わせても適用可能である。
【0090】
また、上記の各構成、機能、処理部、及び処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、及び機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード、DVD等の記録媒体に置くことができる。
【0091】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12