(57)【要約】【課題】メモリ部の必要なデータを容易かつ適切に保護できるようにする。【解決手段】サーバ２０において、メモリ部２２と、プロセッサ部と、記憶デバイス２３とを備え、メモリ部２２は、ＣＭ５２と、管理情報を格納するＳＭ５１と、ＣＭ５２及びＳＭ５１に対する変更内容を示すログデータを格納するためのログバッファ５４と、を有し、記憶デバイス２３は、ログデータを記憶するためのログチャンク４０を有し、プロセッサ部は、Ｉ／Ｏ要求に対応する対応データをＣＭ５２に格納し、対象データをＣＭ５２に格納した場合における、ＣＭ５２に対する変更内容のログデータと、ＳＭ５１に対する変更内容のログデータとを生成してログバッファ５４に格納し、ログバッファ５４に格納された複数のログデータをログチャンク７２に書き込み、Ｉ／Ｏ要求に対応する全てのログデータがログチャンク７２に書き込まれた後に、要求元に正常応答を送信するように構成する。【選択図】図１
2019192004.tif 000002
【特許請求の範囲】
【請求項１】
Ｉ／Ｏ要求を受け付けて、前記Ｉ／Ｏ要求の対象の対象データを管理する記憶装置であって、
メモリ部と、プロセッサ部と、不揮発性記憶デバイスとを備え、
前記メモリ部は、
前記対象データを一時的に格納するキャッシュ領域と、
前記キャッシュ領域における前記対象データを管理するための管理情報を格納する管理領域と、
前記キャッシュ領域に対する変更内容のログデータ及び前記管理領域に対する変更内容を示すログデータを格納するためのログバッファと、を有し、
前記不揮発性デバイスは、
前記ログデータを記憶するためのログチャンクを有し、
前記プロセッサ部は、
前記Ｉ／Ｏ要求を受け付けた場合に、前記Ｉ／Ｏ要求に対応する対象データを前記キャッシュ領域に格納し、
前記Ｉ／Ｏ要求に対応する前記対象データを前記キャッシュ領域に格納した場合における、前記キャッシュ領域に対する変更内容のログデータと、前記管理領域に対する変更内容のログデータとを生成して前記ログバッファに格納し、
前記ログバッファに格納された複数のログデータをまとめて前記ログチャンクに書き込み、
前記Ｉ／Ｏ要求に対応する全てのログデータが前記ログチャンクに書き込まれた後に、前記Ｉ／Ｏ要求の要求元にＩ／Ｏ要求を正常に処理したことを示す正常応答を送信する
記憶装置。
【請求項２】
前記プロセッサ部は、
前記ログバッファに格納されたログデータのデータ量が所定のデータ量以上となった場合に、前記ログバッファに格納されている複数のログデータを前記ログチャンクに送信する
請求項１に記載の記憶装置。
【請求項３】
前記プロセッサ部は、
前記ログバッファの複数のログデータのうち、前記メモリ部の同一アドレス範囲に対する変更を示す複数のログデータについては、最新のログデータのみを用いて、前記ログチャンクに送信する
請求項１又は請求項２に記載の記憶装置。
【請求項４】
前記プロセッサ部は、
前記ログバッファに過去に格納されたログデータを前記ログチャンクに書き込む処理が実行中ではない場合に、前記ログデータを前記ログチャンクに書き込む
請求項１から請求項３のいずれか一項に記載の記憶装置。
【請求項５】
前記プロセッサ部は、
前記ログチャンクに書き込まれたログデータに基づいて、前記ログデータに対応する変更が行われた時点における前記キャッシュ領域及び管理領域のメモリイメージを前記不揮発性デバイスのメモリチャンクに生成する
請求項１から請求項４のいずれか一項に記載の記憶装置。
【請求項６】
前記プロセッサ部は、
前記ログチャンクに書き込まれたログデータのうち、前記メモリの同一アドレス範囲に対する変更を示す複数のログデータについては、最新のログデータのみを用いて、前記キャッシュ領域及び管理領域のメモリイメージを生成する
請求項５に記載の記憶装置。
【請求項７】
前記プロセッサ部は、
前記メモリの状態を復帰させる必要がある場合に、前記ログチャンクに書き込まれたログデータに基づいて、前記不揮発性デバイスのメモリチャンクに生成された前記メモリイメージを更新し、
前記メモリイメージを、前記メモリ部に反映させる
請求項５又は請求項６に記載の記憶装置。
【請求項８】
前記プロセッサ部は、前記キャッシュ領域に対する変更内容のログデータと、前記管理領域に対する変更内容のログデータの少なくとも一部とを、前記記憶装置で管理するデータのコピーを管理する他の記憶装置に送信する
請求項１から請求項７のいずれか一項に記載の記憶装置。
【請求項９】
Ｉ／Ｏ要求を受け付けて、前記Ｉ／Ｏ要求の対象の対象データを管理する記憶装置によるデータ管理方法であって、
前記記憶装置は、メモリ部と、プロセッサ部と、不揮発性記憶デバイスとを備え、
前記メモリ部は、
前記対象データを一時的に格納するキャッシュ領域と、
前記キャッシュ領域における前記対象データを管理するための管理情報を格納する管理領域と、
前記キャッシュ領域に対する変更内容のログデータ及び前記管理領域に対する変更内容を示すログデータを格納するためのログバッファと、を有し、
前記不揮発性デバイスは、
前記ログデータを記憶するためのログチャンクを有し、
前記Ｉ／Ｏ要求を受け付けた場合に、前記Ｉ／Ｏ要求に対応する対象データを前記キャッシュ領域に格納し、
前記Ｉ／Ｏ要求に対応する前記対象データを前記キャッシュ領域に格納した場合における、前記キャッシュ領域に対する変更内容のログデータと、前記管理領域に対する変更内容のログデータとを生成して前記ログバッファに格納し、
前記ログバッファに格納された複数のログデータをまとめて前記ログチャンクに書き込み、
前記Ｉ／Ｏ要求に対応する全てのログデータが前記ログチャンクに書き込まれた後に、前記Ｉ／Ｏ要求の要求元にライト要求を正常に処理したことを示す正常応答を送信する
データ管理方法。
【請求項１０】
Ｉ／Ｏ要求を受け付けて、前記Ｉ／Ｏ要求の対象の対象データを格納して管理する記憶装置を構成するコンピュータに実行させるためのデータ管理プログラムであって、
前記コンピュータは、メモリ部と、プロセッサ部と、不揮発性記憶デバイスとを備え、
前記メモリ部は、
前記対象データを一時的に格納するキャッシュ領域と、
前記キャッシュ領域における前記対象データを管理するための管理情報を格納する管理領域と、
前記キャッシュ領域に対する変更内容のログデータ及び前記管理領域に対する変更内容を示すログデータを格納するためのログバッファと、を有し、
前記不揮発性デバイスは、
前記ログデータを記憶するためのログチャンクを有し、
前記コンピュータを、
前記Ｉ／Ｏ要求を受け付けた場合に、前記Ｉ／Ｏ要求に対応する対象データを前記キャッシュ領域に格納させ、
前記Ｉ／Ｏ要求に対応する前記対象データを前記キャッシュ領域に格納した場合における、前記キャッシュ領域に対する変更内容のログデータと、前記管理領域に対する変更内容のログデータとを生成させて前記ログバッファに格納させ、
前記ログバッファに格納された複数のログデータをまとめて前記ログチャンクに書き込ませ、
前記Ｉ／Ｏ要求に対応する全てのログデータが前記ログチャンクに書き込まれた後に、前記Ｉ／Ｏ要求の要求元にＩ／Ｏ要求を正常に処理したことを示す正常応答を送信させる
データ管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Ｉ／Ｏ要求を受け付けて、Ｉ／Ｏ要求の対象の対象データを管理する記憶装置等に関する。
【背景技術】
【０００２】
従来、データを管理するストレージ機能を有する記憶装置が知られている。このような記憶装置は、専用のハードウェアで構成されており、停電発生時には、内蔵バッテリによりＳＭ（Ｓｈａｒｅ  Ｍｅｍｏｒｙ）やＣＭ（Ｃａｓｈ  Ｍｅｍｏｒｙ）の内容をＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）に退避することで、メモリのデータ（メモリデータ）を保護していた。
【０００３】
近年、ソフトウェアによりストレージ機能を実現して汎用サーバを記憶装置として用いることが行われるようになっている。この記憶装置においては、ハードウェアは汎用サーバであるので、内蔵バッテリによりメモリデータを保護する機能を備えていない。このため、停電発生時においてメモリデータが保護できないという問題がある。
【０００４】
例えば、障害発生時におけるデータを保護する技術としては、データの書き込み時に、ＳＳＤ等の高速な記憶レイヤにログを格納するようにし、その後、速度の遅いバックエンドの記憶デバイスに格納するようにする技術が知られている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許第９，３３６，１３２号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
例えば、専用ハードウェアで構成された記憶装置において、内蔵バッテリによるバッテリバックアップが適切に行われなかった場合には、メモリデータを保護することができない。
【０００７】
また、汎用サーバで構成した記憶装置においては、ＵＰＳ等の外部バッテリ等を用意することで停電に対処することができるが、ＵＰＳ等を備えなければならずコストがかかるという問題がある。
【０００８】
本発明は、上記事情に鑑みなされたものであり、その目的は、メモリ部における必要なデータを容易かつ適切に保護することのできる技術を提供することにある。
【課題を解決するための手段】
【０００９】
上記目的を達成するため、一観点に係る記憶装置は、Ｉ／Ｏ要求を受け付けて、Ｉ／Ｏ要求の対象の対象データを管理する記憶装置であって、メモリ部と、プロセッサ部と、不揮発性記憶デバイスとを備え、メモリ部は、対象データを一時的に格納するキャッシュ領域と、キャッシュ領域における対象データを管理するための管理情報を格納する管理領域と、キャッシュ領域に対する変更内容のログデータ及び管理領域に対する変更内容を示すログデータを格納するためのログバッファと、を有し、不揮発性デバイスは、ログデータを記憶するためのログチャンクを有し、プロセッサ部は、Ｉ／Ｏ要求を受け付けた場合に、Ｉ／Ｏ要求に対応する対象データをキャッシュ領域に格納し、Ｉ／Ｏ要求に対応する対象データをキャッシュ領域に格納した場合における、キャッシュ領域に対する変更内容のログデータと、管理領域に対する変更内容のログデータとを生成してログバッファに格納し、ログバッファに格納された複数のログデータをまとめてログチャンクに書き込み、Ｉ／Ｏ要求に対応する全てのログデータがログチャンクに書き込まれた後に、Ｉ／Ｏ要求の要求元にＩ／Ｏ要求を正常に処理したことを示す正常応答を送信する。
【発明の効果】
【００１０】
本発明によれば、メモリ部における必要なデータを容易かつ適切に保護することができる。
【図面の簡単な説明】
【００１１】
【図１】図１は、一実施形態の概要を説明する図である。
【図２】図２は、一実施形態に係る計算機システムの全体構成図である。
【図３】図３は、一実施形態に係る計算機システムの一部を詳細に示す構成図である。
【図４】図４は、一実施形態に係るログデータの構成図である。
【図５】図５は、一実施形態に係るログバッファ管理情報の構成図である。
【図６】図６は、一実施形態に係るログチャンク管理情報の構成図である。
【図７】図７は、一実施形態に係るログバッファと、ログチャンクとの構成を説明する図である。
【図８】図８は、一実施形態に係るＩ／Ｏ処理のシーケンス図である。
【図９】図９は、一実施形態に係るＩ／Ｏ応答処理のシーケンス図である。
【図１０】図１０は、一実施形態に係るＩ／Ｏ処理時における確定要求の送信を説明する図である。
【図１１】図１１は、一実施形態に係るＳＭ／ＣＭチャンク更新処理のフローチャートである。
【図１２】図１２は、一実施形態に係る回復処理のフローチャートである。
【発明を実施するための形態】
【００１２】
実施形態について、図面を参照して説明する。なお、以下に説明する実施形態は特許請求の範囲に係る発明を限定するものではなく、また実施形態の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１３】
また、以下の説明では、「メモリ部」は、１以上のメモリを含む。メモリは、主に、プロセッサ部による処理の際に使用される。
【００１４】
また、以下の説明では、「プロセッサ部」は、１以上のプロセッサを含む。少なくとも１つのプロセッサは、典型的には、ＣＰＵ（Central Processing Unit）のようなマイクロプロセッサである。１以上のプロセッサの各々は、シングルコアでもよいしマルチコアでもよい。プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。
【００１５】
また、以下の説明では、「プログラム」を動作主体として処理を説明する場合があるが、プログラムは、プロセッサ部によって実行されることで、定められた処理を、適宜にメモリ部及びインターフェース部のうちの少なくとも１つを用いながら行うため、処理の主語が、プロセッサ部（或いは、プロセッサ部を有するサーバ（計算機）又は計算機システム）とされてもよい。プログラムは、プログラムソースから計算機にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ又は計算機が読み取り可能な記録媒体であってもよい。また、以下の説明において、２以上のプログラムが１つのプログラムとして実現されてもよいし、１つのプログラムが２以上のプログラムとして実現されてもよい。
【００１６】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号（又は参照符号における共通部分）を使用し、同種の要素を区別して説明する場合は、要素のＩＤ（又は要素の参照符号）を使用することがある。
【００１７】
まず、一実施形態の概要について説明する。
【００１８】
図１は、一実施形態の概要を説明する図である。
【００１９】
計算機システム１において、ホスト１０からサーバ２０Ａ（サーバ１）に対して、Ｉ／Ｏ（Input/Output）要求が発行されると、サーバ２０Ａは、Ｉ／Ｏ要求に応じて、ＳＭ（共有メモリ）５１と、ＣＭ（キャッシュメモリ）５２とを更新する（図１（１））。ここで、Ｉ／Ｏ要求は、ライト要求又はリード要求である。例えば、Ｉ／Ｏ要求がライト要求である場合には、ＣＭ５２には、ライト要求に含まれるライト対象のデータ（対象データ：ライトデータ）が格納され、ＳＭ５１には、ライトデータの記憶デバイス２３における格納先の情報からＣＭ５２における格納先を特定可能なポインタが格納される。また、Ｉ／Ｏ要求がリード要求である場合には、ＣＭ５２には、リード要求により特定される記憶デバイス２３に格納されたリード対象のデータ（対象データ：リードデータ）が格納され、ＳＭ５１には、リードデータの記憶デバイス２３における格納先の情報からＣＭ５２における格納先を特定可能なポインタが格納される。
【００２０】
次いで、サーバ２０Ａは、ＳＭ５１及びＣＭ５２のそれぞれにおける更新内容を示すログデータを作成し、ログバッファ５４に格納する（図１（２））とともに、それらのログデータのうち、サーバ２０Ｂ（サーバ２）に格納しておく対象（二重化して管理する対象）のログデータを送信バッファ５５に格納する（図１（３））。
【００２１】
サーバ２０Ａは、所定のタイミングにおいて、送信バッファ５５に格納されたログデータが複数ある場合には、複数のログデータをまとめて、サーバ２０Ｂに送信する（図１（４））。サーバ２０Ｂにおいては、サーバ２０Ａから送信されたログデータをログバッファ５４に格納する。次いで、サーバ２０Ｂは、ログバッファ５４のログデータの示す内容をＳＭ５１とＣＭ５２とに反映させる（図１（５））。
【００２２】
一方、サーバ２０Ａは、ログバッファ５４に格納されているログデータ（複数ある場合には、複数のログデータ）を不揮発性メモリデバイス（例えば、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）である記憶デバイス２３のログチャンク７２に格納する（図１（６））。同様に、サーバ２０Ｂは、ログバッファ５４に格納されているログデータ（複数ある場合には、複数のログデータ）を不揮発性メモリデバイスである記憶デバイス２３のログチャンク７２に格納する（図１（７））。これにより、ＳＭ５１及びＣＭ５２の更新内容を示すログデータは、記憶デバイス２３に格納されることとなり、停電が発生した場合であっても、記憶デバイス２３に記憶された状態で維持されることとなる。
【００２３】
この後、サーバ２０Ａは、Ｉ／Ｏ要求の要求元のホスト１０に対して、Ｉ／Ｏ要求が正常に終了したことを示す応答（Ｇｏｏｄ応答）を送信する（図１（８））。
【００２４】
この後、サーバ２０Ａでは、Ｉ／Ｏ要求とは非同期（無関係）のタイミングで、ログチャンク７２に格納されたログデータを作業用メモリ５３に読み出し（図１（９））、作業用メモリ５３のログデータに対応する変更を、ＳＭ／ＣＭチャンク７１のＳＭ５１及びＣＭ５２のイメージ（メモリイメージ）に反映させる（図１（１０））。これにより、ＳＭ／ＣＭチャンク７１には、ログデータが生成された時点におけるＳＭ５１及びＣＭ５２のメモリイメージが生成されることとなる。一方、サーバ２０Ｂにおいても同様にして、ログチャンク７２に格納されたログデータを作業用メモリ５３に読み出し（図１（１１））、作業用メモリ５３のログデータに対応する変更を、ＳＭ／ＣＭチャンク７１のＳＭ５１及びＣＭ５２のイメージ（メモリイメージ）に反映させる（図１（１２））。これにより、サーバ２０ＢのＳＭ／ＣＭチャンク７１にも、ログデータが生成された時点におけるＳＭ５１及びＣＭ５２のメモリイメージ（ただし、二重化する対象の内容のみ）が生成されることとなる。
【００２５】
次に、一実施形態に係る計算機システムについて詳細に説明する。
【００２６】
図２は、一実施形態に係る計算機システムの全体構成図である。
【００２７】
計算機システム１は、一以上のホスト１０と、一以上の記憶装置の一例としてのサーバ２０（２０Ａ，２０Ｂ）とを備える。ホスト１０と、サーバ２０とは、ネットワーク４０を介して接続されている。ネットワーク４０は、有線ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）や無線ＬＡＮなどである。
【００２８】
ホスト１０は、例えば、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）で構成され、各種処理を実行する。ホスト１０は、処理の実行時に、Ｉ／Ｏ要求を発行して、処理で生成されたデータをサーバ２０に書き込んだり、サーバ２０に格納されているデータを読み出したりする。
【００２９】
サーバ２０は、例えば、汎用的なサーバ装置により構成され、プロセッサ部２１と、メモリ部２２と、記憶デバイス２３と、通信インターフェース（通信Ｉ／Ｆ）２４とを備える。
【００３０】
通信インターフェース２４は、例えば有線ＬＡＮカードや無線ＬＡＮカードなどのインターフェースであり、ネットワーク４０を介して他の装置（例えば、他のサーバ２０、ホスト１０）との通信を仲介する。プロセッサ部２１は、メモリ部２２に格納されたプログラムを実行することにより各種処理を実行する。メモリ部２２は、プロセッサ部２１により実行されるプログラムや、処理に必要なデータ等を記憶する。メモリ部２２は、例えば、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等の揮発性メモリにより構成されている。このため、停電等により、サーバ２０への電源の供給が遮断された場合には、データの記憶を維持することができない。記憶デバイス２３は、例えば、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）等の不揮発性メモリデバイスである。記憶デバイス２３は、サーバ２０への電源の供給が遮断した場合であってもデータの記憶を維持することができる。
【００３１】
次に、計算機システム１のサーバ２０の一部を詳細に説明する。
【００３２】
図３は、一実施形態に係る計算機システムの一部を詳細に示す構成図である。なお、サーバ２０Ａと、サーバ２０Ｂとの同様な構成については同一の符号を付している。
【００３３】
サーバ２０Ａのメモリ部２２は、ＳＭ（共有メモリ）５１と、ＣＭ（キャッシュメモリ）５２と、作業用メモリ５３と、ログバッファ５４と、送信バッファ５５とを備える。
【００３４】
ＳＭ５１は、各種管理情報を記憶する。ＳＭ５１の記憶領域が、管理領域に対応する。管理情報としては、例えば、ＣＭ５２にキャッシュされているデータの記憶デバイス２３におけるアドレス（格納位置情報）と、ＣＭ５２でのキャッシュされているアドレスとの対応を示す格納位置管理情報や、Ｉ／Ｏ処理に関する統計情報（ＩＯＰＳ（Ｉｎｐｕｔ  Ｏｕｔｐｕｔ  Ｐｅｒ  Ｓｅｃｏｎｄ）、平均応答時間等）や、サーバ２０の記憶デバイス２３に作成されているボリュームや、リモートコピーに関するペア状態等の構成情報（論理構成情報）や、サーバ２０に実装されている構成（プロセッサ、ドライブ）に関する構成情報（物理構成情報）等がある。
【００３５】
ＣＭ５２は、Ｉ／Ｏ要求の対象となったデータ（対象データ）をキャッシュする。ＣＭ５２の記憶領域が、キャッシュ領域に対応する。ＣＭ５２は、ホスト１０からのライト要求に対応付けられているデータ（ライトデータ）をキャッシュする。また、ＣＭ５２は、ホスト１０からのリード要求に対応し、記憶デバイス２３から読み出されたデータ（リードデータ）を格納する。
【００３６】
作業用メモリ５３は、プロセッサ部２１による処理における作業領域として利用される。ログバッファ５４は、停電時においても維持する必要のある、ＳＭ５１やＣＭ５２の更新内容を示すログデータ５０（図４参照）を格納する。本実施形態では、ログバッファ５４には、ＳＭ５１やＣＭ５２に対する各更新内容に対するそれぞれのログデータが格納される。
【００３７】
送信バッファ５５には、ＳＭ５１やＣＭ５２の更新内容のうちで、二重化して管理する必要がある情報に対する更新内容を示すログデータが格納される。本実施形態では、送信バッファ５５には、ＣＭ５２の各更新内容に対するそれぞれのログデータが格納され、ＳＭ５１における一部の情報についての更新内容に対するログデータが格納される。送信バッファ５５のログデータは、ペアとなるサーバ２０（２０Ｂ）に送信される対象となる。
【００３８】
また、メモリ部２２は、ログバッファ管理情報５６と、ログチャンク管理情報５７と、ストレージＯＳ（Ｏｐｅｒｒａｔｉｎｇ  Ｓｙｓｔｅｍ）５８と、ＳＭ／ＣＭ保護プログラム６１と、を記憶する。
【００３９】
ログバッファ管理情報５６は、ログバッファ５４におけるログデータを管理する情報である。ログチャンク管理情報５７は、ログチャンク７２におけるログデータを管理する情報である。
【００４０】
ストレージＯＳ５８は、サーバ２０を、データを管理する記憶装置として動作させるためのＯＳである。ストレージＯＳ５８は、Ｉ／Ｏ制御プログラム５９と、ログ作成プログラム６０とを含む。
【００４１】
Ｉ／Ｏ制御プログラム５９は、プロセッサ部２１に実行されることにより、ホスト１０からのＩ／Ｏ要求を受け付けて、Ｉ／Ｏ要求に対応するデータのＩ／Ｏを制御する。具体的には、Ｉ／Ｏ制御プログラム５９は、プロセッサ部２１に実行されることにより、ホスト１０からリード要求を受け付けた場合には、リード要求に対応するデータ（リードデータ）がＣＭ５２にあれば、ＣＭ５２から読み出して、ホスト１０に送信し、リードデータがなければ、記憶デバイス２３からリードデータを読み出して、ＣＭ５２に格納するとともに、ホスト１０に送信する。また、Ｉ／Ｏ制御プログラム５９は、プロセッサ部２１に実行されることにより、ホスト１０からライト要求を受け付けた場合には、ライト要求に対応するデータ（ライトデータ）を受信してＣＭ５２に格納し、その後、ライトデータを記憶デバイス２３に格納する。
【００４２】
ログ作成プログラム６０は、プロセッサ部２１に実行されることにより、ＳＭ５１とＣＭ５２とにおける更新内容に基づくログデータを作成し、作成したログデータをログバッファ５４、送信バッファ５５に格納する処理を実行する。
【００４３】
ＳＭ／ＣＭ保護プログラム６１は、ＳＭ５１と、ＣＭ５２とのメモリデータを復元可能に保持する処理をプロセッサ部２１に実行させるためのプログラムである。ＳＭ／ＣＭ保護プログラム６１は、ログ退避回復プログラム６２と、ログ転送プログラム６３とを含む。
【００４４】
ログ退避回復プログラム６２は、プロセッサ部２１に実行されることにより、ログバッファ５４に格納されたログデータをログチャンク７２に格納する処理、ログチャンク７２のログデータに基づいて、ＳＭ／ＣＭチャンク７１にＳＭ５１及びＣＭ５２のメモリイメージを作成する処理を実行する。ログ転送プログラム６３は、プロセッサ部２１に実行されることにより、ペアとなるサーバ２０との間でのデータ転送処理を実行する。例えば、ログ転送プログラム６３は、プロセッサ部２１に実行されることにより、送信バッファ５５に格納されているログデータを、ペアとなるサーバ２０のログバッファ５４に送信する処理を実行する。
【００４５】
記憶デバイス２３は、ログチャンク７２と、ＳＭ／ＣＭチャンク７１とを格納する。ログチャンク７２は、ログデータを格納する。ログチャンク７２には、ＳＭ／ＣＭチャンク７１のメモリイメージに反映されていない更新内容のログデータが格納される。ＳＭ／ＣＭチャンク７１は、或る時点における、ＳＭ５１と、ＣＭ５２とのそれぞれのメモリイメージ、すなわち、ＳＭ５１に格納される全データと、ＣＭ５２に格納される全データとを格納する。
【００４６】
次に、ログデータについて詳細に説明する。
【００４７】
図４は、一実施形態に係るログデータの構成図である。
【００４８】
ログデータ５０は、ＳＭ５１又はＣＭ５２の更新毎に対応するデータであり、アドレス５０ａと、サイズ５０ｂと、ログステータス５０ｃと、データ５０ｄとのフィールドを含む。アドレス５０ａには、更新されたメモリ（ＳＭ５１又はＣＭ５２）のアドレスが格納される。サイズ５０ｂには、更新されたデータのサイズが格納される。ログステータス５０ｃには、ログデータの状態を表す変数（ログステータス）が格納される。変数としては、ログデータがログバッファ５４に存在し、作成済みであることを示すｆｒｅｅと、ログデータがログバッファ５４に存在し、後述する確定要求が発行済みであることを示すｃｏｍｍｉｔと、ログデータがログバッファ５４に存在し、ログチャンク７２に対して書き込み中であることをしめすｄｅｓｔａｇｉｎｇと、ログデータがログチャンク７２に書き込まれたことを示すｃｌｅａｎと、ログデータがＳＭ／ＣＭチャンク７１に反映中であることを示すｕｐｄａｔｉｎｇとがある。データ５０ｄには、更新内容のデータの本体が格納される。
【００４９】
次に、ログバッファ管理情報、ログチャンク管理情報について詳細に説明する。
【００５０】
図５は、一実施形態に係るログバッファ管理情報の構成図である。図６は、一実施形態に係るログチャンク管理情報の構成図である。図７は、一実施形態に係るログバッファと、ログチャンクとの構成を説明する図である。
【００５１】
ログバッファ管理情報５６は、図５に示すように、先頭ポインタ５６ａと、終端ポインタ５６ｂとを含む。ここで、本実施形態では、ログバッファ５４は、図７に示すように、領域の物理的な後端が先頭に繋がって使用されるリングバッファ構造として構成されている。先頭ポインタ５６ａは、図７に示すように、ログバッファ５４のデータが格納可能なｆｒｅｅ領域の先頭を示すポインタである。終端ポインタ５６ｂは、ログバッファ５４のｆｒｅｅ領域の後端を示すポインタである。
【００５２】
ログバッファ管理情報５６によると、ログバッファ５４における先頭ポインタ５６ａから後端ポインタ５６ｂまで領域がｆｒｅｅ領域であることがわかる。また、終端ポインタ５６ｂと、先頭ポインタ５６ａとの間の領域には、すでに書き込まれたログデータが格納されていることがわかる。終端ポインタ５６ｂと、先頭ポインタ５６ａとの間のログデータについては、終端ポインタ５６ｂに近いログデータのほうがより古いログデータであることを示しており、ログデータのステータスとしては、例えば、終端ポインタ５６ｂに近いほうからｄｅｓｔａｇｉｎｇ、ｃｏｍｍｉｔ、ｄｉｒｔｙとなる。
【００５３】
ログチャンク管理情報５７は、図６に示すように、先頭オフセット５７ａと、終端オフセット５７ｂとを含む。ここで、本実施形態では、ログチャンク７２は、管理領域７２ａと、ログデータ格納領域７２ｂとを含む。管理領域７２ａは、固定のデータサイズであり、ログチャンク管理情報５７（先頭オフセット５７ａ及び終端オフセット５７ｂ）と同様な情報（以下、便宜的にログチャンク管理情報５７ということもある）を格納する。ログデータ格納領域７２ｂは、この領域の物理的な後端が先頭に繋がって使用されるリングバッファ構造として構成されている。先頭オフセット５７ａは、図７に示すように、ログデータ格納領域７２ｂのデータが格納可能なｆｒｅｅ領域の先頭についてのログチャンク７２の物理的な先頭からのオフセット（ｂｙｔｅ）である。後端オフセット５７ｂは、図７に示すように、ログデータ格納領域７２ｂのデータが格納可能なｆｒｅｅ領域の後端についてのログチャンク７２の物理的な先頭からのオフセット（ｂｙｔｅ）である。
【００５４】
ログチャンク管理情報５７によると、ログチャンク７２のログデータ格納領域７２ｂにおける先頭オフセット５７ａの位置から後端オフセット５７ｂの位置までの領域がｆｒｅｅ領域であることがわかる。また、終端オフセット５７ｂの位置から先頭オフセット５７ａの位置までのログデータについては、終端オフセット５７ｂの位置に近いログデータのほうがより古いログデータであることを示しており、ログデータのステータスとしては、例えば、終端オフセット５７ｂの位置に近いほうから、ｕｐｄａｔｉｎｇ、ｃｌｅａｎとなる。ログチャンク７２の先頭オフセット５７ａ以降のｆｒｅｅの領域に、ログバッファ５４の後端ポインタ５６ｂが示す領域以降に格納されたログデータが格納されることとなる。
【００５５】
次に、一実施形態に係る計算機システム１におけるＩ／Ｏ処理について説明する。
【００５６】
図８は、一実施形態に係るＩ／Ｏ処理のシーケンス図である。
【００５７】
ホスト１０がＩ／Ｏ要求を発行すると（Ｓ１１）、サーバ２０Ａ（サーバ１）のＩ／Ｏ制御プログラム５９（厳密には、Ｉ／Ｏ制御プログラム５９を実行するプロセッサ部２１）がＩ／Ｏ要求に応じてＳＭ５１の更新を行う（Ｓ１２）。例えば、Ｉ／Ｏ要求が、ライト要求である場合には、ライト要求に付随するライトデータについてのＣＭ５２における格納位置を管理する情報（格納位置管理情報）等を更新する。次いで、Ｉ／Ｏ制御プログラム５９は、ログ作成プログラム６０にＳＭ５１における更新内容に対応するログを作成する要求（ログ作成要求）を送信する（Ｓ１３）。
【００５８】
ログ作成プログラム６０は、ログ作成要求を受け取ると、ＳＭ５１での更新内容に対応するログデータを作成し（Ｓ１４）、作成したログデータをログバッファ５４に追加する処理を行う（Ｓ１５）。ここで、ログ作成プログラム６０は、ログバッファ５４に追加するログデータのログステータスを、ｄｉｒｔｙに設定する。また、ログ作成プログラム６０は、ログバッファ管理情報５６の先頭ポインタ５６ａを追加したログデータに応じて更新する。次いで、ログ作成プログラム６０は、作成したログデータの中の二重化をすべき内容（例えば、格納位置管理情報）に対応するログデータについては、送信バッファ５５に格納する（Ｓ１６）。
【００５９】
次いで、ログ作成プログラム６０は、ログバッファ５４に格納されたログデータの退避と、送信バッファ５５に格納されたログデータの転送とを確認する処理を実行する（Ｓ１７）。具体的には、ログ作成プログラム６０は、ログバッファ５４に格納されたログデータのデータ量が所定の閾値以上あるか否を判定し、所定の閾値以上ある場合には、ログバッファ５４に格納されたログデータをログチャンク７２へ退避すると決定し、所定の閾値以上でない場合には、退避しないと決定する。また、ログ作成プログラム６０は、送信バッファ５５に格納されたログデータのデータ量が所定の閾値以上あるか否を判定し、所定の閾値以上ある場合には、送信バッファ５５に格納されたログデータをサーバ２０Ｂ（サーバ２）に転送すると決定し、所定の閾値以上でない場合には、転送しないと決定する。ここで。所定の閾値としては、例えば、ログバッファ５４の容量や、ホスト１０からのＩ／Ｏ要求の状況に応じて決定してもよく、要は、ログバッファ５４の空き容量が枯渇しないような閾値とすればよい。また、退避を決定するための閾値と、転送を決定するための閾値とを異なる値としてもよい。
【００６０】
この結果、送信バッファ５５に格納されたログデータをサーバ２０Ｂに転送すると決定した場合（転送決定時）には、ログ作成プログラム６０はログ転送プログラム６３に他系（サーバ２０Ｂ）への転送要求を送信する（Ｓ１８）。ログ転送プログラム６３は、他系への転送要求を受信すると、転送バッファ５５に格納されているログデータをまとめて、サーバ２０Ｂに転送する（Ｓ１９）。なお、ログ転送プログラム６３は、転送バッファ５５に、同一のアドレス及び同一サイズ（同一アドレス範囲）に対する更新内容のログデータが複数ある場合には、最新のログデータを残し、それ以外を削除した後、ログデータを転送するようにしてもよい。この結果、サーバ２０Ｂにおいては、ログ転送プログラム６３が、サーバ２０Ａのログ転送プログラム６３から送信されたログデータをログ作成プログラム６０に渡す（Ｓ２０）。一方、サーバ２０Ａのログ転送プログラム６３は、ログデータの転送が終了した場合には、ログデータの転送が終了したことをログ作成プログラム６０に通知する（Ｓ２１）。なお、サーバ２０Ｂにおいては、ログ作成プログラム６０がログデータをログバッファ５４に格納し（Ｓ３２）、ログ作成プログラム６０が、ログバッファ５４のログデータの内容を、ＳＭ５１及びＣＭ５２に反映させる（Ｓ３３）。
【００６１】
また、ログバッファ５４に格納されたログデータをログチャンク７２へ退避すると決定した場合（退避決定時）には、ログ作成プログラム６０はログ退避回復プログラム６２に退避要求を送信する（Ｓ２２）。退避要求を受け取ったログ退避回復プログラム６２は、ログバッファ５４に格納されたログデータをログチャンク７２に退避する（Ｓ２３）。なお、ログ退避回復プログラム６２は、ログバッファ５４に、同一のアドレス及び同一サイズ（同一アドレス範囲）に対する更新内容のログデータが複数ある場合には、最新のログデータを残し、それ以外を削除した後、ログデータを退避するようにしてもよい。ログ退避回復プログラム６２は、退避させたログデータに応じて、ログバッファ管理情報５６の終端ポインタ５６ｂを更新し、ログチャンク管理情報５７の先頭オフセット５７ａを更新し、ログチャンク７２の管理領域７２ａに先頭オフセット５７ａを格納する。この際、ログ退避回復プログラム６２は、ログバッファ５４に複数のログデータがある場合には、それらをまとめてログチャンク７２に退避する。ここで、ログチャンク７２を備える記憶デバイス２３へのデータ転送では、最小アクセス単位（例えば、５１２ｂｙｔｅ）が規定されているので、例えば、最小アクセス単位よりも小さいデータを転送する場合であっても最小アクセス単位でのデータ転送が必要となり、転送効率が悪くなる。これに対して、本実施形態では、複数のログデータをまとめて転送することにより、各ログデータを個別に送信する場合に比して転送効率を向上することができる。次いで、ログ退避回復プログラム６２は、ログデータの退避が終了した場合には、ログデータの退避が終了したことをログ作成プログラム６０に通知する（Ｓ２４）。
【００６２】
ログ作成プログラム６０は、ログデータの転送が終了したことの通知を受けた場合、ログデータの退避が終了したことの通知を受けた場合、又は、ログデータの転送をしない又は退避をしないと決定した場合には、ＳＭ５１のログ作成処理が終了したことをＩ／Ｏ制御プログラム５９に通知する。
【００６３】
次いで、サーバ２０ＡのＩ／Ｏ制御プログラム５９は、Ｉ／Ｏ要求に応じてＣＭ５２の更新を行う（Ｓ２６）。例えば、Ｉ／Ｏ要求が、ライト要求である場合には、ライト要求に付随するライトデータをＣＭ５２に格納し、Ｉ／Ｏ要求が、リード要求である場合には、リード要求に対応するライトデータがＣＭ５２に格納されていなければ、記憶デバイス２３から読み出して、ＣＭ５２に格納する。
【００６４】
次いで、Ｉ／Ｏ制御プログラム５９は、ログ作成プログラム６０にＣＭ５２における更新内容に対応するログを作成する要求（ログ作成要求）を送信する（Ｓ２７）。
【００６５】
ログ作成プログラム６０は、ログ作成要求を受け取ると、ＣＭ５２での更新内容に対応するログデータを作成し（Ｓ２８）、作成したログデータをログバッファ５４に追加する処理を行う（Ｓ２９）。次いで、ログ作成プログラム６０は、作成したログデータを送信バッファ５５に格納する（Ｓ３０）。
【００６６】
次いで、ログ作成プログラム６０は、ログバッファ５４に格納されたログデータの退避と、送信バッファ５５に格納されたログデータの転送とを確認する処理を実行する（Ｓ３１）。この処理は、ステップＳ１７の処理と同様である。また、ステップＳ３１の実行後には、Ｓ１８〜Ｓ２５と同様な処理を実行する。
【００６７】
次に、Ｉ／Ｏ応答処理について説明する。
【００６８】
図９は、一実施形態に係るＩ／Ｏ応答処理のシーケンス図である。Ｉ／Ｏ応答処理は、例えば、図８に示すＩ／Ｏ処理の後、又は、所定の時間ごとに実行される。
【００６９】
まず、Ｉ／Ｏ制御プログラム５９は、Ｉ／Ｏ要求に従ったＳＭ５１とＣＭ５２の更新内容を確定させる要求（確定要求）の処理が実行中であるか否かを確認する（Ｓ４２）。ここで、確定要求の処理とは、例えば、ログバッファ５４に格納されているログデータをログチャンク７２に退避させ、正常応答をＩ／Ｏ要求の要求元に送信する処理である。この結果、確定要求の処理が実行中である場合には、確定要求を行うことができないので、Ｉ／Ｏ制御プログラム５９は、Ｉ／Ｏ応答処理を終了する。
【００７０】
一方、確定要求の処理が実行中ではない場合（未実行時）、すなわち、最初のＩ／Ｏ要求である場合、又は過去のＩ／Ｏ要求に対応する確定要求が完了している場合には、Ｉ／Ｏ制御プログラム５９は、完了していない（応答を返していない）Ｉ／Ｏ要求に関するＳＭ／ＣＭ確定要求をログ退避回復プログラム６２に送信する（Ｓ４３）。
【００７１】
ログ退避回復プログラム６２は、ＳＭ／ＣＭ確定要求を受信すると、ログ転送プログラム６３に他系（サーバ２０Ｂ）に対するＳＭ／ＣＭ確定を実行させる要求を送信する。ログ転送プログラム６３は、送信バッファ５５に未送信のログデータがある場合には、未送信のログデータをサーバ２０Ｂに送信する（Ｓ４５）。
【００７２】
次いで、ログ転送プログラム６３は、ＳＭ／ＣＭ確定要求をサーバ２０Ｂのログ転送プログラム６３に送信し（Ｓ４６）、他系ＳＭ／ＣＭ確定要求に対する応答をログ退避回復プログラム６２に送信する（Ｓ４７）。
【００７３】
ログ退避回復プログラム６２は、他系ＳＭ／ＣＭ確定要求に対する応答を受信すると、ログバッファ５４に格納されているログデータについてのログチャンク７２への反映（退避）を開始し（Ｓ４８）、ログチャンク７２への反映を完了させる（Ｓ４９）。この結果、その時点におけるＳＭ５１及びＣＭ６２の更新内容を示すログデータがログチャンク７２に存在することとなり、停電が発生したとしても、必要なログデータを消失させることなく記憶させておくことができる。
【００７４】
一方、サーバ２０Ｂでは、ログ転送プログラム６３がＳＭ／ＣＭ確定要求を受け取ると、ログ退避回復プログラム６２に対して、ログバッファ５４に格納されたログデータのログチャンク７２への退避を指示する（Ｓ５０）。ログ退避回復プログラム６２は、退避指示を受け取ると、ログバッファ５４に格納されているログデータについてのログチャンク７２への反映を行い（Ｓ５１）、反映を行った後に完了通知をログ転送プログラム６３に送信する（Ｓ５２）。ログ転送プログラム６３は、完了通知を受け取ると、サーバ２０Ａのログ転送プログラム６３に完了通知を送信する（Ｓ５３）。サーバ２０Ａのログ転送プログラム６３は、完了通知を受け取ると、他系ＳＭ／ＣＭ確定要求の応答をログ退避回復プログラム６２に送信する（Ｓ５４）。
【００７５】
ログ退避回復プログラム６２は、ステップＳ４９の処理を終了し、ステップＳ５４で他系ＳＭ／ＣＭ確定要求の応答を受け取った場合には、Ｉ／Ｏ制御プログラム５９に対して、ＳＭ／ＣＭ確定要求に対応する確定完了応答を送信する（Ｓ５５）。
【００７６】
次いで、Ｉ／Ｏ制御プログラム５９は、ＳＭ／ＣＭ確定要求に対応する確定完了応答を受け取ると、ＳＭ／ＣＭ確定要求に対応するＩ／Ｏ要求に対する正常応答（Ｇｏｏｄ応答）をホスト１０に送信する（Ｓ５６）。これにより、ホスト１０では、Ｉ／Ｏ要求に対応する処理が完了したことを把握することができる。
【００７７】
次に、Ｉ／Ｏ処理時における確定要求の送信について説明する。
【００７８】
図１０は、一実施形態に係るＩ／Ｏ処理時における確定要求の送信を説明する図である。
【００７９】
Ｉ／Ｏ制御プログラム５９は、ホスト１０からＩ／Ｏ要求（１）を受信し（Ｓ６１）、既に実行されている確定要求が完了していない場合には、ＳＭ／ＣＭ確定要求を発行（送信）しない。同様に、Ｉ／Ｏ制御プログラム５９は、ホスト１０からＩ／Ｏ要求（２）を受信し（Ｓ６２）、既に実行されている確定要求が完了していない場合には、ＳＭ／ＣＭ確定要求を発行しない。
【００８０】
その後、ホスト１０からＩ／Ｏ要求（３）を受信し（Ｓ６３）、既に実行されている確定要求が完了している場合には、Ｉ／Ｏ制御プログラム５９は、確定要求を行っていないＩ／Ｏ（１）（２）（３）に関するＳＭ／ＣＭ確定要求をログ退避回復プログラム６２に送信する（Ｓ６４）。
【００８１】
次に、ホスト１０からＩ／Ｏ要求（４）（５）を受信した場合（Ｓ６５，Ｓ６６）には、Ｓ６４で送信したＳＭ／ＣＭ確定要求が完了していないので、Ｉ／Ｏ制御プログラム５９は、ＳＭ／ＣＭ確定要求を発行しない。
【００８２】
次いで、ログ退避回復プログラム６２からＩ／Ｏ要求（１）（２）（３）に関するＳＭ／ＣＭ確定要求に対する確定完了応答を受信すると（Ｓ６７）、Ｉ／Ｏ制御プログラム５９は、Ｉ／Ｏ要求（１）に対応するＧｏｏｄ応答（１）と、Ｉ／Ｏ要求（２）に対応するＧｏｏｄ応答（２）と、Ｉ／Ｏ要求（３）に対応するＧｏｏｄ応答（３）とをホスト１０に送信する（Ｓ６８，Ｓ６９，Ｓ７０）。
【００８３】
次に、ホスト１０からＩ／Ｏ要求（６）を受信すると（Ｓ７１）、実行されている確定要求が完了しているので、確定要求を行っていないＩ／Ｏ（４）（５）（６）に関するＳＭ／ＣＭ確定要求をログ退避回復プログラム６２に送信する（Ｓ７２）。
【００８４】
その後、ホスト１０からＩ／Ｏ要求（７）（８）を受信した場合（Ｓ７３，Ｓ７４）には、Ｓ６４で送信したＳＭ／ＣＭ確定要求が完了していないので、Ｉ／Ｏ制御プログラム５９は、ＳＭ／ＣＭ確定要求を発行しない。
【００８５】
次いで、ログ退避回復プログラム６２からＩ／Ｏ要求（４）（５）（６）に関するＳＭ／ＣＭ確定要求に対する確定完了応答を受信すると（Ｓ７５）、Ｉ／Ｏ制御プログラム５９は、Ｉ／Ｏ要求（４）に対応するＧｏｏｄ応答（４）と、Ｉ／Ｏ要求（５）に対応するＧｏｏｄ応答（５）と、Ｉ／Ｏ要求（６）に対応するＧｏｏｄ応答（６）とをホスト１０に送信する（Ｓ７６，Ｓ７７，Ｓ７８）。
【００８６】
次に、ＳＭ／ＣＭチャンク更新処理について説明する。
【００８７】
図１１は、一実施形態に係るＳＭ／ＣＭチャンク更新処理のフローチャートである。
【００８８】
ＳＭ／ＣＭチャンク更新処理は、例えば、ログ退避回復プログラム６２によって実行される処理である。ＳＭ／ＣＭチャンク更新処理は、Ｉ／Ｏ要求と非同期の任意のタイミングで行ってよく、例えば、ログチャンク７２のデータ量が所定の閾値以上となった場合としてもよく、ホスト１０からのＩ／Ｏ要求の頻度が低い場合としてもよい。
【００８９】
ログ退避回復プログラム６２（厳密には、ログ退避回復プログラム６２を実行するプロセッサ部２１）は、ログチャンク７２にエントリー（ログデータ）が存在するか否かを判定する（Ｓ８１）。この結果、ログチャンク７２にエントリが存在しないと判定した場合（Ｓ８１：Ｎｏ）には、ログ退避回復プログラム６２は、ＳＭ／ＣＭチャンク更新処理を終了する。
【００９０】
一方、ログチャンク７２にエントリが存在すると判定した場合（Ｓ８１：Ｙｅｓ）には、ログ退避回復プログラム６２は、ログチャンク７２のエントリを作業用メモリ５３に読み出し、ＳＭ５１又はＣＭ５２の同一のアドレス及び同一サイズに対する更新内容のエントリが複数ある場合には、最新のエントリを残し、それ以外のエントリを削除する（Ｓ８２）。これにより、更新に使用するエントリの数を低減することができ、処理効率を向上することができる。
【００９１】
次いで、ログ退避回復プログラム６２は、残ったエントリのデータを、ＳＭ／ＣＭチャンク７１のメモリイメージの対応する領域に反映させる（Ｓ８３）。この間の処理の進行状態に応じて、ログ退避回復プログラム６２は、ログデータのログステータスを、ｃｌｅａｎ、ｕｐｄａｔｉｎｇ、ｆｒｅｅの順に変更する。次いで、ログ退避回復プログラム６２は、ログチャンク管理情報５７（ログチャンク７２の管理領域７２ａのログチャンク管理情報５７も同様）の終端オフセット５７ｂを先端オフセット５７ａと同じ値に設定し（Ｓ８４）、処理を終了する。
【００９２】
上記したＳＭ／ＣＭチャンク更新処理によると、ログチャンク７２に格納されているログデータによる更新内容を、ＳＭ／ＣＭチャンク７１のメモリイメージに適切に反映させることができる。
【００９３】
次に、回復処理について説明する。
【００９４】
図１２は、一実施形態に係る回復処理のフローチャートである。
【００９５】
回復処理は、例えば、停電等が発生した後に、ログ退避回復プログラム６２によって実行される。
【００９６】
ログ退避回復プログラム６２は、ログチャンク７２の管理領域７２ａからログチャンク管理情報５７の先頭オフセット５７ａと、終端オフセット５７ｂとを取得し、メモリ部２２に格納する（Ｓ９１）。次いで、ログ退避回復プログラム６２は、ログチャンク７２にエントリ（ログデータ）が存在するか否かを判定する（Ｓ９２）。この結果、ログチャンク７２にエントリが存在しないと判定した場合（Ｓ９２：Ｎｏ）には、ＳＭ／ＣＭチャンク７１のメモリイメージが停電発生時に確定しているＳＭ５１及びＣＭ５２の状態であることを意味しているので、ログ退避回復プログラム６２は、処理をステップＳ９６に進める。
【００９７】
一方、ログチャンク７２にエントリが存在すると判定した場合（Ｓ９２：Ｙｅｓ）には、ログ退避回復プログラム６２は、ログチャンク７２のエントリを作業用メモリ５３に読み出し、ＳＭ５１又はＣＭ５２の同一のアドレス及び同一サイズ（同一アドレス範囲）に対する更新内容のエントリが複数ある場合には、最新のエントリを残し、それ以外のエントリを削除する（Ｓ９３）。これにより、更新に使用するエントリの数を低減することができ、処理効率を向上することができる。
【００９８】
次いで、ログ退避回復プログラム６２は、残ったエントリのデータを、ＳＭ／ＣＭチャンク７１のメモリイメージの対応する領域に反映させる（Ｓ９４）。この間の処理の進行状態に応じて、ログ退避回復プログラム６２は、ログデータのログステータスを、ｃｌｅａｎ、ｕｐｄａｔｉｎｇ、ｆｒｅｅの順に変更する。次いで、ログ退避回復プログラム６２は、ログチャンク管理情報５７（ログチャンク７２の管理領域７２ａのログチャンク管理情報５７も同様）の終端オフセット５７ｂを先端オフセット５７ａと同じ値に設定し（Ｓ９５）、処理をステップＳ９６に進める。
【００９９】
ステップＳ９６では、ログ退避回復プログラム６２は、Ｉ／Ｏ制御プログラム５９の起動を開始し、回復処理を終了する。Ｉ／Ｏ制御プログラム５９は、起動を開始すると、ＳＭ／ＣＭチャンク７１のＳＭ５１及びＣＭ５２のメモリイメージを、ＳＭ５１と、ＣＭ５２とに書き込む。これにより、ＳＭ５１とＣＭ５２とは、停電発生時に確定しているメモリの状態となる。
【０１００】
以上説明したように、本実施形態に係る計算機システムによると、ＳＭ５１と、ＣＭ５２とのＩ／Ｏ要求に基づく更新内容のログデータをログチャンク７２に格納した後に、Ｉ／Ｏ要求の要求元にＧｏｏｄ応答を返すようにしたので、停電が発生してメモリ部２２のＳＭ５１とＣＭ５２とのデータが消失した場合であっても、ログチャンク７２に格納されたログデータに基づいて、停電発生時において確定している（Ｇｏｏｄ応答を行っている）メモリの状態に適切に回復することができる。このため、ＳＭ５１及びＣＭ５２の必要なデータが消失してしまうことを適切に防止できる。なお、ログチャンク７２にログデータを格納した後、Ｇｏｏｄ応答をホスト１０に送信していない状態で停電状態となる可能性があり、この場合には、ホスト１０側でＧｏｏｄ応答を得られていないＩ／Ｏ要求が再度ホスト１０から送信されることとなるが、このＩ／Ｏ要求が来た場合であっても、ログチャンク７２のログデータの更新内容と同じ内容であるので、メモリのデータについては何ら支障がない。
【０１０１】
なお、本発明は、上述の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で、適宜変形して実施することが可能である。
【０１０２】
例えば、上記実施形態では、記憶装置を、汎用的なサーバ装置を用いて構成するようにしていたが、本発明はこれに限られず、記憶装置を専用のハードウェアにより構成するようにしてもよい。また、上記実施形態では、記憶装置として、停電時における電力供給を行うバッテリを備えていない例を示していたが、本発明はこれに限られず、バッテリを備えてもよい。バッテリを備えている場合であっても、バッテリの故障等により、電力の供給が遮断されてしまう可能性があるが、上記した発明によると、このような状況においても適切にＳＭ５１及びＣＭ５２のメモリデータを復元することができる。
【０１０３】
また、上記実施形態では、２つのサーバ２０間でメモリデータの二重化するようにしていたが、本発明はこれに限られず、必ずしも二重化を行わなくてもよい。すなわち、２つのサーバ２０間での二重化に必要な処理を行う機能部をサーバ２０に備えないようにしてもよい。例えば、二重化をしない場合には、Ｉ／Ｏ制御プログラム５９は、ログバッファ５４からログチャンク７２へのログデータの反映が完了した場合にＧｏｏｄ応答をホスト１０に送信するようにすればよい。
【０１０４】
また、上記実施形態において、プロセッサ部２１が行っていた処理の一部又は全部を、専用のハードウェア回路で行うようにしてもよい。また、上記実施形態におけるプログラムは、プログラムソースからインストールされてよい。プログラムソースは、プログラム配布サーバ又は記憶メディア（例えば可搬型の記憶メディア）であってもよい。
【符号の説明】
【０１０５】
１…計算機システム、１０…ホスト、２０，２０Ａ，２０Ｂ…サーバ、２１…プロセッサ部、２２…メモリ部、２３…記憶デバイス、５１…共有メモリ（ＳＭ）、５２…キャッシュメモリ（ＣＭ）、５４…ログバッファ、５５…送信バッファ、７１…ＳＭ／ＣＭチャンク、７２…ログチャンク
【図１】
2019192004.tif 000003
【図２】
2019192004.tif 000004
【図３】
2019192004.tif 000005
【図４】
2019192004.tif 000006
【図５】
2019192004.tif 000007
【図６】
2019192004.tif 000008
【図７】
2019192004.tif 000009
【図８】
2019192004.tif 000010
【図９】
2019192004.tif 000011
【図１０】
2019192004.tif 000012
【図１１】
2019192004.tif 000013
【図１２】
2019192004.tif 000014