(57)【要約】  第１のプロセッサと第１の不揮発性メモリを備えた第１の計算機と、第２のプロセッサと第２の不揮発性メモリを備えて前記第１の計算機に接続された第２の計算機と、を有する計算機システムであって、前記第１の計算機は、前記第１のプロセッサからデータの書き込み命令を受信すると、前記データを前記第１の不揮発性メモリへ書き込み、前記データを前記第２の計算機への書き込み命令に変換する冗長化ハードウェアを有する。
2017183096.tif 000002
【特許請求の範囲】
【請求項１】
第１のプロセッサと第１の不揮発性メモリを備えた第１の計算機と、
第２のプロセッサと第２の不揮発性メモリを備えて前記第１の計算機に接続された第２の計算機と、を有する計算機システムであって、
前記第１の計算機は、前記第１のプロセッサからデータの書き込み命令を受信すると、前記データを前記第１の不揮発性メモリへの書き込みと、前記データを前記第２の計算機への書き込みに変換する冗長化ハードウェアを有することを特徴とする計算機システム。
【請求項２】
請求項１に記載の計算機システムであって、
前記冗長化ハードウェアは、
バッファを有し、前記第１のプロセッサからデータの書き込み命令を受信すると、前記データを前記第１の不揮発性メモリ及び前記バッファへそれぞれ書き込み、前記第１のプロセッサからコミット命令を受信すると、前記バッファに書き込まれたデータを前記第２の計算機へ書き込むことを特徴とする計算機システム。
【請求項３】
請求項２に記載の計算機システムであって、
前記冗長化ハードウェアは、
前記第１のプロセッサからコミット命令を受信すると、前記第２の計算機へコミットを要求し、前記第２の計算機からコミットの完了通知を受信してから前記第１のプロセッサへ完了を応答することを特徴とする計算機システム。
【請求項４】
請求項２に記載の計算機システムであって、
前記第１のプロセッサは、
複数のプロセッサコアを有し、
前記バッファは、
前記プロセッサコアに対応する複製のテーブルを有し、
前記冗長化ハードウェアは、
前記第１のプロセッサからデータの書き込み命令を受信すると、前記プロセッサコアに対応する前記バッファのテーブルに前記データを書き込んで、前記第１のプロセッサからコミット命令を受信すると、前記プロセッサコアに対応する前記バッファのテーブルから前記データを前記第２の計算機へ送信することを特徴とする計算機システム。
【請求項５】
請求項２に記載の計算機システムであって、
前記第１の計算機と前記第２の計算機は、ネットワークを介して接続され、
前記冗長化ハードウェアは、
前記第１のプロセッサからコミット命令を受信すると、前記ネットワークの利用率を算出し、前記利用率が所定の閾値以下であれば、前記バッファに書き込まれたデータを前記第２の計算機へ書き込むことを特徴とする計算機システム。
【請求項６】
請求項５に記載の計算機システムであって、
前記冗長化ハードウェアは、
前記第１のプロセッサからコミット命令を受信すると、前回のコミット命令からの経過時間を算出し、前記利用率が所定の閾値以下で、かつ、前記経過時間が所定時間を経過していれば、前記バッファに書き込まれたデータを前記第２の計算機へ書き込むことを特徴とする計算機システム。
【請求項７】
請求項２に記載の計算機システムであって、
前記第２の計算機は、
前記第１の計算機から前記データの書き込みを受け付けると、前記データを受信した応答を前記第１の計算機へ送信した後に、前記データを前記第２の不揮発性メモリへ書き込むことを特徴とする計算機システム。
【請求項８】
第１のプロセッサと第１の不揮発性メモリを備えた第１の計算機と、第２のプロセッサと第２の不揮発性メモリを備えて前記第１の計算機に接続された第２の計算機で、不揮発性メモリへの書き込みを制御する不揮発性メモリの冗長化方法であって、
前記第１のプロセッサがデータの書き込み命令を発行する第１のステップと、
前記第１の不揮発性メモリに接続された冗長化ハードウェアが、前記第１のプロセッサからデータの書き込み命令を受信する第２のステップと、
前記冗長化ハードウェアが、前記受信したデータの書き込み命令を、前記データを前記第１の不揮発性メモリへの書き込みと、前記データを前記第２の計算機への書き込みに変換する第３のステップと、
前記冗長化ハードウェアが、前記データを前記第１の不揮発性メモリへ書き込む第４のステップと、
前記冗長化ハードウェアが、前記データを前記第２の計算機へ書き込む第５のステップと、
を含むことを特徴とする不揮発性メモリの冗長化方法。
【請求項９】
請求項８に記載の不揮発性メモリの冗長化方法であって、
前記第５のステップは、
前記第１のプロセッサからデータの書き込み命令を受信すると、前記データを前記冗長化ハードウェアのバッファへ書き込むステップと、
前記第１のプロセッサからコミット命令を受信すると、前記バッファに書き込まれたデータを前記第２の計算機へ書き込むステップと、
を含むことを特徴とする不揮発性メモリの冗長化方法。
【請求項１０】
請求項９に記載の不揮発性メモリの冗長化方法であって、
前記第５のステップは、
前記第１のプロセッサからコミット命令を受信すると、前記第２の計算機へコミットを要求するステップと、
前記第２の計算機からコミットの完了通知を受信してから前記第１のプロセッサへ完了を応答するステップと、
を含むことを特徴とする不揮発性メモリの冗長化方法。
【請求項１１】
請求項９に記載の不揮発性メモリの冗長化方法であって、
前記第１のプロセッサは、
複数のプロセッサコアを有し、
前記バッファは、
前記プロセッサコアに対応する複製のテーブルを有し、
前記第５のステップは、
前記第１のプロセッサからデータの書き込み命令を受信すると、前記プロセッサコアに対応する前記バッファのテーブルに前記データを書き込むステップと、
前記第１のプロセッサからコミット命令を受信すると、前記プロセッサコアに対応する前記バッファのテーブルから前記データを前記第２の計算機へ送信するステップと、
を含むことを特徴とする不揮発性メモリの冗長化方法。
【請求項１２】
請求項９に記載の不揮発性メモリの冗長化方法であって、
前記第１の計算機と前記第２の計算機は、ネットワークを介して接続され、
前記第５のステップは、
前記第１のプロセッサからコミット命令を受信すると、前記ネットワークの利用率を算出し、前記利用率が所定の閾値以下であれば、前記バッファに書き込まれたデータを前記第２の計算機へ書き込むことを特徴とする不揮発性メモリの冗長化方法。
【請求項１３】
請求項１２に記載の不揮発性メモリの冗長化方法であって、
前記第１のプロセッサからコミット命令を受信すると、前回のコミット命令からの経過時間を算出し、前記利用率が所定の閾値以下で、かつ、前記経過時間が所定時間を経過していれば、前記バッファに書き込まれたデータを前記第２の計算機へ書き込むことを特徴とする不揮発性メモリの冗長化方法。
【請求項１４】
請求項９に記載の不揮発性メモリの冗長化方法であって、
前記第２の計算機が、前記第１の計算機から前記データの書き込みを受け付ける第６のステップと、
前記第２の計算機が、前記データを受信した応答を前記第１の計算機へ送信した後に、前記データを前記第２の不揮発性メモリへ書き込む第７のステップと、
をさらに含むことを特徴とする不揮発性メモリの冗長化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性メモリを有する計算機に関する。
【背景技術】
【０００２】
近年、フラッシュメモリやＭＲＡＭ（Magnetoresistive Random Access Memory）等といった大容量不揮発メモリの普及が進んでいる。これにより、コンピュータシステムにおいても、ＤＲＡＭ（Dynamic Random Access Memory）に代わりこれらのメモリを使う動きが進んでいる。【０００３】
ストレージシステムにおいては、元々ＤＲＡＭをキャッシュメモリに使うことにより、ＨＤＤ等へのアクセスを削減し、性能を向上させる仕組みが広く適用されていた。その上で、特許文献１のように、不揮発メモリを併用する例が知られている。また、ハードウェアの障害に対応させるため、特許文献２に開示されるように、２つのハードウェアコンポーネントを用意し、両者でデータを複製する方式が知られている。【０００４】
サーバシステムにおいては、ＤＲＡＭのような揮発メモリに代わり不揮発メモリを利用するためのソフトウェアインタフェースとして、非特許文献１に開示されるように、通常のＤＲＡＭと同様に書き込みを行い、不揮発化を保証したいタイミングでコミット処理を行うハード−ソフトウェアインタフェースが提案されている。このインタフェースに従うハードウェア及びソフトウェアを用いることで、電源遮断などの障害においてもデータの不揮発性を保証することができる。【０００５】
また、非特許文献１では、ＤＲＡＭと同等のソフトウェアインタフェースで不揮発性メモリを扱う技術が開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】国際公開第２０１５／０９７７５１号公報
【特許文献２】特開２０１４−１６７８１８号公報
【非特許文献】
【０００７】
【非特許文献１】NVM Programming Model (NPM) Version 1, SNIA TechnicalPosition, Dec. 21, 2014
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ソフトウェアから見てＤＲＡＭとほぼ同じ使い方で、不揮発化、かつ障害にも耐えられるメモリを実現できれば、より手軽に高信頼かつ高性能なソフトウェア及びコンピュータシステムを実現できるようになるはずである。【０００９】
しかし、特許文献１や特許文献２では、ストレージのキャッシュメモリに用途を限定し、データの冗長化や不揮発化を行う技術が記載されているものの、ソフトウェアが特別なハードウェア操作を行うことを前提としている。【００１０】
このため、上記従来例ではソフトウェアで特別な操作が必要な上、当該操作によりソフトウェア処理が増えることから、性能が低下するという課題があった。また、上記非特許文献１では、ＤＲＡＭと同等のソフトウェアインタフェースで不揮発性メモリを扱うことが開示されているが、不揮発かつ冗長化を行うメモリの実現方法については開示されていない。【００１１】
これらの課題を踏まえ、本発明では、不揮発かつ冗長性を有して、ＤＲＡＭと同等のソフトウェアインタフェースで不揮発性メモリを扱う技術を実現する。
【課題を解決するための手段】
【００１２】
第１のプロセッサと第１の不揮発性メモリを備えた第１の計算機と、第２のプロセッサと第２の不揮発性メモリを備えて前記第１の計算機に接続された第２の計算機と、を有する計算機システムであって、前記第１の計算機は、前記第１のプロセッサからデータの書き込み命令を受信すると、前記データを前記第１の不揮発性メモリへ書き込み、前記データを前記第２の計算機への書き込み命令に変換する冗長化ハードウェアを有する。
【発明の効果】
【００１３】
本発明により、不揮発かつ冗長性を有して、ＤＲＡＭと同等のソフトウェアインタフェースを実現することができる。この結果、不揮発性メモリの可用性が必要で、かつ性能も必要なソフトウェアの記述が容易になって、より多くの用途でこれらの可用性を活用したアプリケーションが実現出来るようになる。
【図面の簡単な説明】
【００１４】
【図１】本発明の第１の実施例を示し、計算機システムの一例を示すブロック図である。
【図２】本発明の第１の実施例を示し、プロセッサコアから不揮発性メモリへの書き込みの一例を示す説明図である。
【図３】本発明の第１の実施例を示し、プロセッサコアで実行されるソフトウェアの一例を示すフローチャートである。
【図４】本発明の第１の実施例を示し、プロセッサコアとＦＰＧＡのメモリ空間の一例を示すマップである。
【図５】本発明の第１の実施例を示し、書き込みバッファの構成の一例を示す図である。
【図６】本発明の第１の実施例を示し、送信パケットの一例を示す図である。
【図７】本発明の第１の実施例を示し、アクセス受付部で行われる処理の一例を示すフローチャートである。
【図８】本発明の第１の実施例を示し、書き込み発行部で行われる処理の一例を示すフローチャートである。
【図９】本発明の第１の実施例を示し、二重化受付部で行われる処理の一例を示すフローチャートである。
【図１０】本発明の第２の実施例を示し、定期コミット処理の一例を示すフローチャートである。
【図１１】本発明の第３の実施例を示し、二重化受付部で行われる処理の一例を示すフローチャートである。
【図１２】本発明の第３の実施例を示し、コミット処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１５】
以下、添付図面を参照して本発明の実施形態について説明する。ただし、本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。また、各図において共通の構成については同一の参照番号が付されている。
【実施例１】
【００１６】
第一の実施例は、ソフトウェアがＤＲＡＭと同様のメモリ操作を行うことによりデータの冗長化を実現する冗長化ハードウェア及びそれを用いたコンピュータシステムである。【００１７】
図１は、本発明が適用されるコンピュータシステムの一例を示すブロック図である。コンピュータシステムは、２台以上のコンピュータ１ａ、１ｂ、及び両者を接続するためのネットワーク２０で構成される。図示の例ではコンピュータが２台、かつ、両者間は直結されているが、３台以上であっても良い。【００１８】
コンピュータ１ａは、プロセッサ１２ａと、不揮発メモリ１４ａと、及び、冗長化機能２ａが搭載されたＦＰＧＡ１１ａと、ネットワークインタフェース１６ａで構成されており、これらの構成要素が互いに接続されている。図示の例ではプロセッサ１２ａにＦＰＧＡ１１ａが接続されているが、論理的に各構成要素が互いにアクセス可能になっていれば、図示以外の接続関係でも良いし、また、例えばプロセッサ１２ａの中にＦＰＧＡ１１ａが内蔵されているような形でも良い。また、ＦＰＧＡ１１ａの代わりにＡＳＩＣのような専用の冗長化ハードウェアを用いても良い。【００１９】
プロセッサ１２ａは、複数のプロセッサコア１５ａ−０〜１５ａ−ｎ（図中コア０〜コアｎ）で構成されており、このプロセッサコア１５ａ上でソフトウェア１３ａが実行される。また、ＦＰＧＡ１１ａには、冗長化機能２ａがハードウェアとして搭載される、また、ＦＰＧＡ１１ａには、不揮発性メモリ１４ａを制御するメモリコントローラ１６ａが搭載される。【００２０】
コンピュータ１ｂは、コンピュータ１ａと同様の構成であり、コンピュータ１ａの各構成要素の符号の添え字“ａ”を“ｂ”とした符号で示す。なお、コンピュータ１ａ、１ｂの各構成要素の総称は、添え字“ａ”、“ｂ”または“−”のない符号で示す。【００２１】
本実施例１でコンピュータ１ａの不揮発性メモリ１４ａを冗長化するために必要な冗長化機能２ａの構成について以下に説明する。尚、本実施例では、プロセッサコア１５ａが、コンピュータ１ａの不揮発メモリ１４ａに加えてコンピュータ１ｂの不揮発メモリ１４ｂにもデータを格納することで冗長化する例を示している。【００２２】
冗長化機能２は、アクセス受付部３と、書き込み発行部４と、二重化受付部５と、書き込みバッファ６で構成される。冗長化を実施するソフトウェア１３ａは、同じコンピュータ１ａの冗長化機能２ａのうち、アクセス受付部３ａと、書き込みバッファ６ａと、書き込み発行部４ａを使用し、外部のコンピュータ１ｂの冗長化機能２ｂでは二重化受付部５ｂを使用する。【００２３】
なお、コンピュータ１ｂのソフトウェア１３ｂが冗長化を実施する際には、同じコンピュータ１ｂの冗長化機能２ｂのうち、アクセス受付部３ｂと、書き込みバッファ６ｂと、書き込み発行部４ｂを使用し、外部のコンピュータ１ａの冗長化機能２ａでは二重化受付部５ａを使用する。【００２４】
アクセス受付部３は、プロセッサコア１５からの書き込み命令、読み出し命令、コミット命令を受け付けて、各命令毎に所定の処理を行う。書き込みバッファ６は、プロセッサコア１５からの書き込みデータを一時的に格納するためのバッファである。書き込み発行部４は、書き込みバッファ６のデータを効率良く他のコンピュータ１に送信し、送信したデータが他のコンピュータ１に到着しているかを検出する。二重化受付部５は、他のコンピュータ１の書き込み発行部４によって送信されたデータを、受信して不揮発メモリ１４に書き込み、前述の到着の検知に対して応答する。【００２５】
図４は、プロセッサコア１５とＦＰＧＡ１１のメモリ空間の一例を示すマップである。【００２６】
プロセッサコア１５から見たメモリ空間１４１上には、ＦＰＧＡ１１がマッピングされており、例えば、アドレス００００＿００００Ｈ〜７ＦＦＦ＿ＦＦＦＦがプロセッサコア１５ａのメモリ空間１４１とする。【００２７】
ＦＰＧＡ１１は、プロセッサコア１５のメモリ空間１４１に加えて、不揮発性メモリ１４のアドレス空間としてＮＶＭ空間１４２が割り当てられており、例えば、アドレス８０００＿００００Ｈ〜ＦＦＦＦ＿ＦＦＦＦがＦＰＧＡ１１のＮＶＭ空間１４２として設定されている。【００２８】
本実施例１では、プロセッサコア１５から不揮発性メモリ１４への直接のアクセスを禁止する例を示すが、これに限定されるものではない。例えば、プロセッサコア１５のアクセス空間が、メモリ空間１４１にＮＶＭ空間１４２を加えてのアクセスを許容する構成であってもよい。【００２９】
ＦＰＧＡ１１は、プロセッサコア１５からメモリ空間１４１へのアクセス要求を受け付けると、メモリ空間１４１のアドレスをＮＶＭ空間１４２へのアクセスに変換して、要求されたメモリアクセスを実施する。本実施例１では、ＦＰＧＡ１１にメモリ空間１４１とＮＶＭ空間１４２のアドレスを変換するマップやオフセットなどの変換情報が予め設定されている。【００３０】
図２は、本実施例において、コンピュータ１ａのプロセッサコア１５ａからの書き込み命令で２箇所のコンピュータ１ａ、１ｂの不揮発メモリ１４ａ、１４ｂにデータが書き込まれる仕組みを示したものである。【００３１】
プロセッサコア１５ａは、ＦＰＧＡ１１ａのメモリ空間１４１に対してメモリ書き込みを行う。書き込み要求を受けたＦＰＧＡ１１ａのアクセス受付部３ａは、同一コンピュータ１ａの不揮発メモリ１４ａに書き込みを行ってから、コンピュータ１ｂのＦＰＧＡ１１ｂに対しても書き込み命令とデータを送信する。【００３２】
本実施例１では、冗長化ハードウェアとしてのＦＰＧＡ１１ａでは、アクセス受付部３ａがプロセッサコア１５ａからの書き込み要求を受け付けると、まず、不揮発性メモリ１４ａと書き込みバッファ６ａにデータを書き込む。次に、ＦＰＧＡ１１ａのアクセス受付部３ａは、プロセッサコア１５ａからコミット要求を受け付けると、書き込み発行部４ａに書き込みバッファ６ａ内のデータをコンピュータ１ｂへ送信させる。【００３３】
コンピュータ１ｂのＦＰＧＡ１１ｂの二重化受付部５ｂは、外部のコンピュータ１ａから受信したデータと書き込み命令に基づいて、不揮発性メモリ１４ｂへ受信したデータを書き込む。ＦＰＧＡ１１ｂの二重化受付部５ｂは、データの書き込みが完了すると、コンピュータ１ａに対して、完了を通知する。【００３４】
ＦＰＧＡ１１ａの書き込み発行部４ａは、書き込み先のコンピュータ１ｂからのコミットの完了通知を受信すると、コミット要求を発行したプロセッサコア１５ａに対してコミットの完了通知を送信する。【００３５】
なお、プロセッサコア１５ａ−０〜１５ａ−ｎは、ＦＰＧＡ１１ａに対して要求を発行する際に、要求を記載したメッセージにプロセッサコア１５ａの識別子を付加しておく。これにより、ＦＰＧＡ１１ａは応答等を送信するプロセッサコア１５ａ−０〜１５ａ−ｎを特定することが可能となる。【００３６】
また、ＦＰＧＡ１１ａの書き込み発行部４ａは、自コンピュータ１ａのメモリコントローラ１６ａに対してコミット要求を送信してもよい。この場合、メモリコントローラ１６ａは、変更前のデータを保持していた場合、コミット要求を受け付けると、当該変更前のデータを不揮発性メモリ１４ａから消去してコミットの完了をＦＰＧＡ１１ａの書き込み発行部４ａに通知する。【００３７】
ＦＰＧＡ１１ａの書き込み発行部４ａは、同一のコンピュータ１ａのメモリコントローラ１６ａからのコミットの完了通知と、外部のコンピュータ１ｂからのコミットの完了通知の双方を受信してから、コミットの完了通知を送信元のプロセッサコア１５ａに送信し、コミット要求を完了する。【００３８】
図３は、本実施例において、プロセッサコア１５で実行されるソフトウェア１３の処理の一例を示したものである。【００３９】
ソフトウェア１３は、主記憶としての不揮発性メモリ１４へロードされてからプロセッサコア１５によって実行され、所定の処理または計算を行い（Ｓ１３０）、処理または計算を行った結果を不揮発性メモリ１４に書き込む（Ｓ１３１）。プロセッサコア１５はこの書き込みの際に、ＦＰＧＡ１１の冗長化機能２を用いる。【００４０】
プロセッサコア１５は書き込みを行った後に、データが揮発しないことを保証させるため、コミット処理を行う（Ｓ１３２）。ソフトウェア１３は、上記の処理により書き込み要求の後に、コミット要求の発行を繰り返す。【００４１】
本実施例１では、ソフトウェア１３が、書き込み要求の後にコミット要求を発行する例を示すが、これに限定されるものではない。ソフトウェア１３は、書き込み要求のみでコミット要求を発行しなくてもよい。この場合、ＦＰＧＡ１１ａは、書き込み要求で、不揮発性メモリ１４ａと、外部のコンピュータ１ｂへの書き込みを実施する。【００４２】
図５は、書き込みバッファ６の構成及び内容の一例を示した図である。書き込みバッファ６は、書き込み元のプロセッサコア１５ａ−０〜１５ａ−ｎ毎にテーブル５０−０〜５０−ｎを有し、テーブル５０の各エントリに、プロセッサコア１５からの書き込みが行われる。テーブル５０のエントリは、書き込み先のアドレス５１と、書き込み長５２（バイト長）及びデータ５３で構成される。【００４３】
前述のコミット処理の際には、既に書き込みバッファ６へ書き込んだ内容を全て掃き出す必要があるが、掃き出す対象は、コミット要求を行ったプロセッサコア１５からの書き込みのみである。そこで、プロセッサコア１５ａ−０〜１５ａ−ｎ毎にテーブル５０−０〜５０−ｎを分割することで、掃き出しに要する時間を削減する。【００４４】
図６は、書き込み発行部４と二重化受付部５の間、即ちネットワーク２０上で送受信されるデータの一例を示した図である。データは、書き込みバッファ６の各エントリを連結したものと同じであり、アドレス８１と、書き込み長８２と、書き込みデータ８３と及び、次のデータとの境界を示す情報８４で構成される。【００４５】
図７は、本実施例１における、アクセス受付部３で行われる処理の一例を示すフローチャートである。本処理は、プロセッサコア１５からのアクセスがあった場合に開始される。【００４６】
本処理では、まず、アクセス受付部３は、プロセッサコア１５から受け付けたアクセスの種別を判定する（Ｓ３０１）。Ｗｒｉｔｅ（書き込み要求）であった場合には、アクセス受付部３は、プロセッサコア１５が指定したアドレスを変換して、変換後のＮＶＭ空間１４２のアドレスに対応する不揮発メモリ１４へ書き込みを行う（Ｓ３０２）。【００４７】
そして、アクセス受付部３は、プロセッサコア１５に対応する書き込みバッファ６のテーブル５０にエントリを追加してアドレス、データ長、データの内容を書き込んでから（Ｓ３０３）、処理を終了する。【００４８】
一方、ステップＳ３０１において、アクセスの種別がＲｅａｄであった場合、アクセス受付部３は、メモリコントローラ１６に対してＲｅａｄを発行し、指定されたアドレスに対応するデータを不揮発性メモリ１４から読み込む（Ｓ３０４）。そして、アクセス受付部３は、読み込んだデータをプロセッサコア１５に応答して（Ｓ３０５）、処理を終了する。【００４９】
ステップＳ３０１において、アクセスの種別がコミットであった場合、アクセス受付部３は、まず、書き込みバッファ６が空であるか否かを判定する（Ｓ３０６）。アクセス受付部３は、コミットを要求したプロセッサコア１５ａ−０〜１５ａ−ｎに対応するテーブル５０−０〜５０−ｎのエントリが空であればステップＳ３１１へ進み、空でなければステップＳ３０７へ進む。【００５０】
テーブル５０が空でない場合、アクセス受付部３は、コミットを要求したプロセッサコア１５に対応する書き込みバッファ６のテーブル５０の内容を全て掃き出す（Ｓ３０７）。ここで掃き出すとは、書き込みバッファ６のテーブル５０に格納されている内容（エントリ）を全て冗長化先のコンピュータ１ｂに送信するよう、書き込み発行部４にデータの書き込みを命令することである。【００５１】
この処理によって、書き込みバッファ６のテーブル５０に保持されていたデータは、外部のコンピュータ１ｂの不揮発性メモリ１４ｂへ書き込まれて、データの冗長性が確保される。【００５２】
命令を受け付けた書き込み発行部４は、メモリコントローラ１６に対して、コミット処理を行い（Ｓ３０８）、他のコンピュータ１ｂの二重化受付部５に対してもコミット処理を行う（Ｓ３０９）。【００５３】
メモリコントローラ１６は、コミットの要求を受け付けると、不揮発性メモリ１４に保持していた変更前のデータを消去して、書き込み発行部４へコミットの完了を通知する。コンピュータ１ｂの二重化受付部５ｂは、コミット命令を受信すると、応答を返信してコミットの完了を通知する。【００５４】
書き込み発行部４は、メモリコントローラ１６と外部のコンピュータ１ｂからのコミットの完了通知を待ち（Ｓ３１０）、双方のコミットの完了通知が到着するとステップＳ３１１へ進む。【００５５】
書き込み発行部４は、要求元のプロセッサコア１５に対して、コミットの完了を応答し（Ｓ３１１）、処理を終了する。一方、上記ステップＳ３０６の判定において書き込みバッファ６のテーブル５０が空の場合は、アクセス受付部３がコミットの完了をコミットの要求元のプロセッサコア１５へ応答して、処理を終了する（Ｓ３１１）。【００５６】
上記処理により、プロセッサコア１５で実行されるソフトウェア１３は、不揮発メモリ１４に対して行う場合と同様に、アクセス受付部３に対する読み書き、コミット処理を行うだけで、データの二重化までを行えるようになる。【００５７】
図８は、本実施例１における、書き込み発行部４の処理の一例を示すフローチャートである。本処理は、所定の周期（１μｓｅｃ〜１００μｓｅｃ）などで定期的に実行されるか、図７のステップＳ３０７で実行される。【００５８】
本処理では、まず、書き込み発行部４が、書き込みバッファ６のテーブル５０内に残っているデータの量（サイズ）と、ネットワーク２０の利用率を算出し、バッファ掃き出し命令を受信済みであるかを判定し、書き込みバッファ６の掃き出し処理を行うべきか否かを判定する（Ｓ６００）。【００５９】
ここで、書き込み発行部４は、ネットワーク２０の利用率として、例えば、ネットワークインタフェース１６ａの単位時間当たりのデータの送受信量と、ネットワーク２０の理論的な転送速度の比を利用率として算出する。書き込み発行部４は、算出した利用率が所定の閾値Ｔｈ１以下であれば、ネットワーク２０の利用率が低いと判定する。【００６０】
書き込みバッファ６のテーブル５０内のデータ量が少ない場合、ネットワーク２０に送信する場合のデータサイズが小さくなって利用効率が悪い。このため、書き込み発行部４は、テーブル５０内のデータ量が閾値Ｔｈ２未満の場合には、データを送信せずに書き込みバッファ６のテーブル５０にデータを溜め込む。【００６１】
また、ネットワーク２０の利用率が低い場合（利用率≦閾値Ｔｈ１）、少量のデータを送信してネットワーク２０の利用効率を下げてもネットワーク２０への影響が小さいことから、書き込み発行部４は、早期にデータを送信することにより、コミット処理時の送信量を減らせる効果があることから、積極的に送信を行う。【００６２】
以上を実現するため、例えば、書き込み発行部４は、テーブル５０のデータ量が閾値Ｔｈ２以上の場合にデータの掃き出し処理を実施するためステップＳ６０１以降の送信処理に進む。また、書き込み発行部４は、書き込みバッファ６のテーブル５０のデータ量が閾値Ｔｈ２以下であっても、ネットワーク２０の利用率が閾値Ｔｈ１以下の場合には送信を行う。一方、書き込み発行部４は、プロセッサコア１５からバッファ掃き出しの命令を受信している場合には、無条件でステップＳ６０１に進む。なお、書き込み発行部４は、掃き出しを行わないと判断した場合には、そのまま処理を終了する。【００６３】
書き込み発行部４は、書き込みバッファ６のテーブル５０のデータ量が閾値Ｔｈ２以上、またはネットワーク２０の利用率が閾値Ｔｈ１以下、あるいは、バッファ掃き出しの命令を受信した場合にテーブル５０のデータを外部のコンピュータ１ｂに書き込む。【００６４】
次に、書き込み発行部４は、掃き出し処理の対象となったテーブル５０の内容を基に送信パケットを生成する（Ｓ６０１）。そして、書き込み発行部４は、生成したパケットを冗長化先の二重化受付部５に送信して書き込みを要求する（Ｓ６０２）。書き込み発行部４は、送信が完了した書き込みバッファ６のテーブル５０の内容を消去し（Ｓ６０３）、処理を終了する。【００６５】
上記処理により、書き込み発行部４は、ネットワーク２０の負荷が過大になるのを抑えつつ、効率良く二重化処理を行うことができる。【００６６】
図９は、本実施例における、二重化受付部５で行われる処理の一例を示すフローチャートである。本処理は、二重化元のコンピュータ１ａからデータを受け取った場合に呼び出される。【００６７】
本処理では、まず、二重化受付部５は受信したパケットの種別を判定する（Ｓ７００）。Ｗｒｉｔｅであった場合、二重化受付部５は受信したパケットを展開して、アドレス８１と、データ長８２から書き込むデータ８３を取得する（Ｓ７０１）。【００６８】
そして、二重化受付部５は取得したデータ８３とアドレス８１に従い、不揮発性メモリ１４ｂへの書き込みを行い（Ｓ７０２）、処理を終了する。【００６９】
一方、上記ステップＳ７００の判定において、パケットの種別がコミットであった場合、二重化受付部５はコミットの完了通知を生成し、応答として返信する（Ｓ７０３）。その後、二重化受付部５は同一コンピュータ１ｂ内の不揮発メモリ１４ｂに対し、コミット処理を行う（Ｓ７０４）。このコミット処理は、例えば、二重化受付部５ｂがメモリコントローラ１６ｂに対してコミットを要求すると、不揮発性メモリ１４ｂに保持されていた変更までのデータが消去される。【００７０】
以上のように本実施例によれば、プロセッサコア１５ａがメモリへの書き込み要求を発行すると、ＦＰＧＡ１１ａはプロセッサコア１５ａと同じコンピュータ１ａの不揮発性メモリ１４ａへデータを書き込むのに加え、外部のコンピュータ１ｂの不揮発性メモリ１４ｂにもデータを書き込むことで、冗長性を確保できる。すなわち、ＦＰＧＡ１１ａはプロセッサコア１５からの書き込み命令を、同一のコンピュータ１ａの不揮発性メモリ１４への書き込み命令と、他のコンピュータ１ｂへの書き込み（送信）命令に変換する。【００７１】
また、ＦＰＧＡ１１ａが外部のコンピュータ１ｂに書き込むタイミングは、プロセッサコア１５ａからの書き込み要求の後にコミット要求を受け付けた後に書き込みを実施させることで、値が確定したデータの冗長性を確保することができる。【００７２】
また、ＦＰＧＡ１１ａは、コミット要求を受け付けると、メモリコントローラ１６ａに対してコミット要求を発行してコミットの完了通知を待機するのに加え、外部のコンピュータ１ｂにもコミット要求を発行してコミットの完了通知を待機する。そして、ＦＰＧＡ１１ａは、メモリコントローラ１６ａ及び外部のコンピュータ１ｂからコミットの完了通知を受信してから、プロセッサコア１５ａへコミットの完了通知を応答することで、冗長性を保証することができる。【００７３】
また、ＦＰＧＡ１１の書き込み発行部４は、ネットワーク２０の利用率が閾値Ｔｈ１以下、または、書き込みバッファ６のテーブル５０のデータ量が閾値Ｔｈ２以上、あるいは、バッファ掃き出しの命令を受信した場合にテーブル５０のデータを外部のコンピュータ１ｂに書き込むので、ネットワーク２０の利用効率を向上させることができる。【００７４】
本実施例１により、不揮発かつ障害にも耐えられて、ＤＲＡＭと同等のソフトウェアインタフェースで、不揮発性メモリ１４ａ、１４ｂによる冗長化を実現することができる。この結果、不揮発性メモリ１４の可用性が必要かつ性能も必要なソフトウェアの記述が容易になり、より多くの用途でこれらの可用性を活用したアプリケーションが実現出来るようになる。【００７５】
なお、コンピュータ１ａ、１ｂがブレードサーバなどで構成される場合は、ネットワーク２０としてバックプレーンを用いることができる。また、上記実施例では、冗長化ハードウェアとしてのＦＰＧＡ１１がプロセッサ１２に接続された例を示したが、プロセッサ１２が冗長化ハードウェアを内包する構成であってもよい。
【実施例２】
【００７６】
本実施例２は、前記実施例１に示した書き込み発行部４が定期的にコミット処理を行うことによってコンピュータ１の性能向上を目指したものである。以下、実施例１との差分について説明する。【００７７】
図１０は、本実施例２における、書き込み発行部４で行われる定期コミット処理６１の処理を示したフローチャートである。本処理は、１μｓｅｃ〜１００μｓｅｃなど所定の周期で定期的に実行される。【００７８】
本処理では、ネットワーク２０の利用率と、前回のコミット命令を受信した時刻からの経過時間を判定する（Ｓ６１０）。前記実施例１と同様にネットワーク２０の利用率が閾値Ｔｈ１を超えて高い場合、あるいは、ネットワーク２０の利用率が閾値Ｔｈ１以下でも、前回のコミット処理からの時間が所定時間Ｔｈ３を経過していない場合は、書き込み発行部４は、定期コミット処理６１を禁止して処理を終了する。【００７９】
一方、書き込み発行部４は、ネットワーク２０の利用率が閾値Ｔｈ１以下で、かつ、前回のコミット処理からの経過時間が所定時間Ｔｈ３を経過（時間Ｔｈ３以上）した場合、書き込み発行部４は、定期コミット処理６１を開始する（Ｓ６１１〜Ｓ６１４）。これらのステップＳ６１１〜Ｓ６１４は、実施例１に示した図７のＳ３０６〜Ｓ３１０と同様である。そして、本実施例２では、図７の処理にステップＳ６１５の処理を加えて、最終コミット実施時刻を更新して、処理を終了する。【００８０】
これにより、書き込み発行部４が、定期的に書き込みバッファ６を掃き出すことができ、プロセッサコア１５からのコミット要求の受信時に処理する書き込みバッファ６のデータ量を減らすことができる。この結果、プロセッサコア１５からのコミット処理から完了応答までの時間を短縮することができ、プロセッサコア１５の処理時間が短縮でき、処理性能を向上させることが可能となる。
【実施例３】
【００８１】
本実施例３は、実施例１に対し、コンピュータ１ａ、１ｂ間でデータ受信毎に応答を行うことで、コミット処理による処理時間の増大を低減するものである。以下、実施例１との差分について説明する。【００８２】
図１１は、本実施例３における、二重化受付部５の処理を示したフローチャートである。本処理は、図９に示す実施例１のフローチャートにステップＳ７１１を追加したもので、その他の構成は前記実施例１と同様である。【００８３】
本実施例３では、パケット種別がＷｒｉｔｅの場合、二重化受付部５は、まず、パケットを受信した旨を送信元に対して返送する（Ｓ７１１）点が、実施例１と異なる。その後、前記実施例１と同様に、二重化受付部５は、受信したパケットを展開し、不揮発性メモリ１４への書き込み処理を実行する。【００８４】
本実施例３では、二重化受付部５が、書き込み要求のパケットを受信すると、コミット要求を待たずに応答を返信することができる。【００８５】
図１２は、本実施例３における、アクセス受付部３のコミット要求の受信時の処理を示すフローチャートである。この処理は、前記実施例１の図７のＳ３０６以降に対応する。【００８６】
本処理では、まず、アクセス受付部３が書き込みバッファ６の該当テーブル５０内に未送信エントリがあるか否かを判定する（Ｓ６３０）。プロセッサコア１５に該当するテーブル５０内に未送信エントリがある場合、アクセス受付部３はバッファ掃き出しを行い（Ｓ６３１）、次に、掃き出したデータに対応するパケットについて、外部のコンピュータ１ｂから応答を待つ（Ｓ６３２）。アクセス受付部３は応答を受信してからコミットの完了を応答して（Ｓ６３３）、処理を終了する。【００８７】
一方、上記ステップＳ６３０の判定において、未送信エントリが無い場合、アクセス受付部３は最終送信パケットに対する応答が外部のコンピュータ１ｂから到着するのを待ち（Ｓ６３３）、到着した後にコミットの完了を応答する（Ｓ６３４）。【００８８】
上記処理により、プロセッサコア１５が実際にデータを送ったタイミングからコミットを行うまでの時間差による処理の遅延を削減することができる。この結果、プロセッサコア１５からのコミット処理からＦＰＧＡ１１による完了応答までの時間を低減でき、プロセッサ１２の処理時間を短縮して、性能向上を図ることができる。【００８９】
＜まとめ＞
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に記載したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加、削除、又は置換のいずれもが、単独で、又は組み合わせても適用可能である。【００９０】
また、上記の各構成、機能、処理部、及び処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、及び機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。【００９１】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【図１】
2017183096.tif 000003
【図２】
2017183096.tif 000004
【図３】
2017183096.tif 000005
【図４】
2017183096.tif 000006
【図５】
2017183096.tif 000007
【図６】
2017183096.tif 000008
【図７】
2017183096.tif 000009
【図８】
2017183096.tif 000010
【図９】
2017183096.tif 000011
【図１０】
2017183096.tif 000012
【図１１】
2017183096.tif 000013
【図１２】
2017183096.tif 000014
【国際調査報告】
2017183096.tif 000015
2017183096.tif 000016
2017183096.tif 000017
2017183096.tif 000018