(57)【要約】【課題】ジャーナリングファイルシステムでは、ファイルシステムの更新に応じて、ジャーナルログの書き込みとフラッシュ処理による更新データの書き込みが各々実行されるため、サーバと記憶装置間の入出力処理による負荷が増大するという問題がある。【解決手段】本発明では、サーバからジャーナルログを受信した記憶装置は、ジャーナルログに含まれる更新データを利用して、フラッシュ処理を実行する。【選択図】図１
2004185349.tif 000002
【特許請求の範囲】
【請求項１】
データを記憶する一又は複数のディスクドライブと、前記一又は複数のディスクドライブに対するデータの読み書きを制御するディスク制御部とを有する記憶装置と、
前記一又は複数のディスクドライブに記憶されるデータを記憶するバッファメモリと、プロセッサとを有する、前記記憶装置に接続される計算機とを有する記憶装置システムであって、
前記プロセッサは、
前記一又は複数のディスクドライブに格納されているファイルに対するアクセス要求を受け付け、
前記アクセス要求に従って前記バッファメモリに格納されているデータを更新し、
バッファメモリ内で更新された更新データを含む第一の情報を作成し、
前記第一の情報を前記ディスク制御部に送信し、
前記記憶装置が有する記憶領域に記憶されているデータを更新するよう要求する第二の情報を、前記ディスク制御部に送信し、
前記ディスク制御部は、
前記第一の情報に含まれる前記更新データを用いて、前記ディスクドライブに記憶されているデータを更新するよう制御することを特徴とする記憶装置システム。
【請求項２】
請求項１記載の記憶装置システムにおいて、
前記第一の情報には更に、前記更新データが格納される前記一又は複数のディスクドライブ内の記憶領域のアドレス情報が含まれることを特徴とする記憶装置システム。
【請求項３】
請求項２記載の記憶装置システムにおいて、
前記記憶装置は更に、前記第一の情報が格納されるメモリを有し、
前記ディスク制御部は、前記第一の情報が有する更新データが前記バッファメモリに格納された順に、前記第一の情報を、前記メモリに格納することを特徴とする記憶装置システム。
【請求項４】
請求項３記載の記憶装置システムにおいて、
前記プロセッサは前記第一の情報を前記ディスク制御部に送信する場合に、予め定められた識別情報を有する入出力要求を前記ディスク制御部に対して発行し、
前記ディスク制御部は前記識別情報を有する入出力要求を受信した場合に、前記計算機から受信したデータを前記メモリに格納することを特徴とする記憶装置システム。
【請求項５】
請求項２記載の記憶装置システムにおいて、
前記ディスク制御部は、前記第一の情報に含まれる更新データを、前記第一の情報が有するアドレス情報が示す記憶領域に書き込むよう制御することを特徴とする記憶装置システム。
【請求項６】
請求項５記載の記憶装置システムにおいて、
前記計算機は、前記バッファメモリで更新されたデータを識別するための更新データ情報を記憶する記憶領域を有し、
前記プロセッサは、前記ディスク制御部から、前記第二の情報に対する応答を受信した場合に、前記更新データ情報を削除することを特徴とする記憶装置システム。
【請求項７】
請求項６記載の記憶装置システムにおいて、
前記ディスク制御部は、前記プロセッサから前記第二の情報を受信する前に、前記第一の情報に含まれる更新データを用いて前記ディスクドライブに記憶されているデータを更新するよう制御することを特徴とする記憶装置システム。
【請求項８】
請求項６記載の記憶装置システムにおいて、
前記記憶装置は更に、前記一又は複数のディスクドライブに書き込まれるデータを一時的に記憶するためのキャッシュメモリを有し、
前記ディスク制御部は、前記第二の情報を受信する前に、前記第一の情報に含まれる更新データを前記キャッシュメモリに書き込み、
前記キャッシュメモリに書き込まれたデータを用いて前記一又は複数のディスクドライブに記憶されているデータを更新するよう制御することを特徴とする記憶装置システム。
【請求項９】
データを記憶する一又は複数のディスクドライブと、前記一又は複数のディスクドライブに対するデータの入出力を制御するディスク制御部とを有する記憶装置と、
前記一又は複数のディスクドライブに記憶されるデータを記憶するバッファメモリと、プロセッサとを有し、前記記憶装置に接続され、前記一又は複数のディスクドライブに格納されているファイルに対するアクセス要求を受信する計算機とを有する記憶装置システムであって、
前記計算機は、
ファイルに対するアクセス要求に従って前記バッファメモリに格納されているデータが更新された場合に、バッファメモリに格納されている更新後のデータと、該更新後のデータが格納される前記一又は複数のディスクドライブ内の記憶領域のアドレス情報とを含む第一の情報を前記ディスク制御部に送信し、
前記一又は複数のディスクドライブ内の記憶領域のアドレス情報を有する、該記憶領域に格納されるデータの読み出し要求を、前記ディスク制御部に送信し、前記ディスク制御部は、前記読み出し要求が有するアドレス情報が示す記憶領域に格納される、前記第一の情報に含まれるデータを、前記計算機に送信することを特徴とする記憶装置システム。
【請求項１０】
記憶装置に接続される計算機が受け付けた、該記憶装置に記憶されているファイルに対するアクセス要求に従って、ファイルの内容であるユーザデータ若しくはファイルシステムの管理情報であるメタデータを更新する方法であって、
前記記憶装置に記憶されるデータが一時的に格納される前記計算機が有するバッファメモリに記憶されているデータを、前記アクセス要求に従って更新するステップと、
前記バッファメモリ内で更新された更新データを有する第一の情報を前記記憶装置に送信するステップと、
前記記憶装置に格納されているユーザデータ若しくはメタデータを更新するよう要求する第二の情報を前記記憶装置に送信するステップと、
前記記憶装置が、前記第一の情報が有する前記更新データを用いて、該記憶装置に記憶されてユーザデータ若しくはメタデータを更新するよう制御するステップとを有することを特徴とするデータ更新方法。
【請求項１１】
請求項１０記載のデータ更新方法において、
前記第一の情報は更に、前記更新データが格納される前記記憶装置内の記憶領域のアドレス情報を有することを特徴とするデータ更新方法。
【請求項１２】
請求項１１記載のデータ更新方法において、
前記第一の情報を送信するステップは、
予め定められた識別情報を有する入出力要求を前記記憶装置に送信するステップを有し、
前記記憶装置は、前記識別情報を有する入出力要求に従って受信したデータを、該記憶装置が有する予め確保されている記憶領域に格納することを特徴とするデータ更新方法。
【請求項１３】
請求項１２記載のデータ更新方法において、
前記ユーザデータ若しくはメタデータを更新するよう制御するステップは、前記予め確保されている記憶領域に格納されたデータから、前記バッファメモリ上で更新されたユーザデータ若しくはメタデータを抽出するステップと、
抽出されたユーザデータ若しくはメタデータを用いて前記記憶装置に記憶されているユーザデータ若しくはメタデータを更新するよう制御するステップを有することを特徴とするデータ更新方法。
【請求項１４】
請求項１１記載のデータ更新方法において、
前記ユーザデータ若しくはメタデータを更新するよう制御するステップは、前記第一の情報に含まれる更新データを、前記第一の情報に含まれるアドレス情報が示す記憶領域に書き込むステップを有することを特徴とするデータ更新方法。
【請求項１５】
請求項１１記載のデータ更新方法において、
前記ユーザデータ若しくはメタデータを更新するよう制御するステップは、前記記憶装置が前記第二の情報を受信する前に、前記第一の情報が有する更新データを用いて前記記憶装置に記憶されているユーザデータ若しくはメタデータを更新するよう制御するステップを有することを特徴とするデータ更新方法。
【請求項１６】
請求項１１記載のデータ更新方法において、
前記ユーザデータ若しくはメタデータを更新するよう制御するステップは、前記記憶装置が前記第二の情報を受信する前に、前記第一の情報が有する更新データを前記記憶装置が有するキャッシュに書き込むステップと、
前記キャッシュに書き込まれた前記更新データを、前記記憶装置が有する一又は複数のディスクドライブ内の記憶領域に書き込むステップと、
前記第二の情報に対して更新終了応答を返信するステップとを有することを特徴とするデータ更新方法。
【請求項１７】
記憶装置に接続される計算機が受信する該記憶装置に記憶されているファイルに対するアクセス要求に従って、ファイルの内容であるユーザデータ若しくはファイルシステムの管理情報であるメタデータの更新処理を該記憶装置及び該計算機に実行させるためのプログラムであって、
前記アクセス要求に従って、前記記憶装置に記憶されるデータが一時的に格納される前記計算機が有するバッファメモリに記憶されているデータを更新するステップと、
前記バッファメモリに格納されている更新後のデータである更新データを含む第一の情報を、前記記憶装置に送信するステップと、
前記記憶装置に格納されているユーザデータ若しくはメタデータを更新するよう要求する第二の情報を前記記憶装置に発行するステップと、
前記記憶装置内で、前記第一の情報が有する前記更新データを用いて、該記憶装置に記憶されているユーザデータ若しくはメタデータを更新するよう制御するステップとを有することを特徴とするデータ更新プログラム。
【請求項１８】
請求項１７記載のデータ更新プログラムにおいて、
前記第一の情報は更に、前記更新データが格納される前記記憶装置内の記憶領域のアドレス情報を有することを特徴とするデータ更新プログラム。
【請求項１９】
請求項１８記載のデータ更新プログラムにおいて、
前記第一の情報は、予め定められた識別情報を有しており、
更に、前記識別情報を有するデータを、前記記憶装置が有する予め定められた記憶領域に格納するステップを有することを特徴とするデータ更新プログラム。
【請求項２０】
請求項１９記載のデータ更新プログラムにおいて、
前記ユーザデータ若しくはメタデータを更新するよう制御するステップは、前記予め定められた記憶領域に格納されたデータから、前記バッファメモリ上で更新されたユーザデータ若しくはメタデータを抽出するステップと、
抽出されたユーザデータ若しくはメタデータを用いて前記記憶装置に記憶されているユーザデータ若しくはメタデータを更新するよう制御するステップを有することを特徴とするデータ更新プログラム。
【請求項２１】
請求項１８記載のデータ更新プログラムにおいて、
前記ユーザデータ若しくはメタデータを更新するよう制御するステップは、前記第一の情報に含まれる更新データを、前記第一の情報に含まれるアドレス情報が示す記憶領域に書き込むステップを有することを特徴とするデータ更新プログラム。
【請求項２２】
請求項１８記載のデータ更新プログラムにおいて、
前記ユーザデータ若しくはメタデータを更新するよう制御するステップは、前記第二の情報が発行される前に、前記第一の情報が有する前記更新データを用いて前記記憶装置に記憶されているユーザデータ若しくはメタデータを更新するよう制御するステップを有することを特徴とするデータ更新プログラム。
【請求項２３】
請求項１８記載のデータ更新プログラムにおいて、
前記ユーザデータ若しくはメタデータを更新するよう制御するステップは、前記第二の情報が発行される前に、前記第一の情報が有する更新データを前記記憶装置が有するキャッシュに書き込むステップと、
前記第二の情報に対して更新終了応答を発行するステップと、
前記更新終了応答を発行した後、前記キャッシュに書き込まれた前記更新データを、前記記憶装置が有するディスクドライブ内の記憶領域に書き込むステップとを有することを特徴とするデータ更新プログラム。
【請求項２４】
記憶装置に接続され、該記憶装置に格納されるファイルを管理する計算機であって、
前記記憶装置に格納されるデータを一時的に格納するバッファメモリと、
ネットワークに接続されるネットワークアダプタと、
プロセッサとを有し、
前記ネットワークアダプタが前記記憶装置に格納されているファイルに対するアクセス要求をネットワークから受信し、
前記プロセッサは、
前記アクセス要求に従って前記バッファメモリに記憶されているデータを更新し、
前記バッファメモリに格納されている更新後のデータと、該更新後のデータが格納される前記記憶装置内の記憶領域のアドレス情報とを有する情報を作成し、
前記情報を前記記憶装置に送信し、
前記情報の送信後、前記アクセス要求に従って前記記憶装置に格納されているデータを更新するよう要求する更新要求を前記記憶装置に対して発行することを特徴とする計算機。
【請求項２５】
記憶装置に接続され、該記憶装置に格納されるファイルを管理する計算機が、前記ファイルの内容であるユーザデータ若しくは前記ファイルの管理情報であるメタデータを更新するために実行するプログラムであって、
前記記憶装置に格納されているファイルに対するアクセス要求を受け付けるステップと、
前記アクセス要求に従って前記計算機が有するバッファメモリに記憶されているデータを更新するステップと、
前記更新されたデータと、該更新されたデータが格納される前記記憶装置内の記憶領域のアドレス情報とを有する情報を作成するステップと、
前記情報を前記記憶装置に送信するステップと、
前記情報の送信後、前記アクセス要求に従って前記記憶装置に格納されているデータを更新するよう要求する更新要求を前記記憶装置に対して発行するステップを計算機に実行させるためのプログラム。
【請求項２６】
計算機に接続され、該計算機に管理されるファイルシステムの管理情報であるメタデータと、該計算機に管理されるファイルの内容であるユーザデータとを記憶する記憶装置であって、
メタデータ及びユーザデータが格納される記憶媒体と、
前記計算機と接続されるチャネルアダプタと、
プロセッサを有し、
前記計算機が受信したファイルに対するアクセス要求に従って、該計算機が有するバッファメモリ上で更新された更新データを有する情報を、該計算機から前記チャネルアダプタを介して受信し、
前記情報の受信後、前記計算機から、前記記録媒体に格納されているデータを更新するよう要求する更新要求を、前記チャネルアダプタを介して受信し、
前記プロセッサは、前記情報が有する前記更新データを用いて、前記記憶媒体に格納されているユーザデータ若しくはメタデータを更新するよう制御することを特徴とする記憶装置。
【請求項２７】
請求項２６記載の記憶装置において、
更に、前記計算機から受信する前記情報を格納するためのメモリを有し、
前記プロセッサは前記チャネルアダプタを介して予め定められた識別情報を有する入出力要求を前記計算機から受信した場合に、該入出力要求に従って受信するデータを前記メモリに格納することを特徴とする記憶装置。
【請求項２８】
請求項２６記載の記憶装置において、
前記情報は更に、該情報が有する更新データが書き込まれる前記記憶媒体内の記憶領域のアドレス情報を有しており、
前記プロセッサは、前記情報が有する更新データを前記情報が有するアドレス情報が示す記憶領域に書き込むよう制御することを特徴とする記憶装置。
【請求項２９】
請求項２８記載の記憶装置において、
更に、前記記憶媒体に書き込まれるデータを一時的に格納するキャッシュメモリを有しており、
前記プロセッサは、
前記更新要求を前記計算機から受信する前に、前記情報が有する更新データを前記キャッシュメモリ格納し、
前記更新要求に応じて前記計算機に応答を送信し、
前記応答の送信後、前記キャッシュメモリに書き込まれた更新データを前記記憶媒体に書き込むよう制御することを特徴とする記憶装置。
【請求項３０】
計算機に接続され、該計算機に管理されるファイルシステムの管理情報であるメタデータと、該計算機に管理されるファイルの内容であるユーザデータとを記憶する記憶装置であって、
メタデータ及びユーザデータが格納される記憶媒体と、
前記計算機と接続されるアダプタと、
プロセッサを有し、
前記計算機が受信したファイルに対するアクセス要求に従って該計算機が有するバッファメモリ上で更新された更新後のデータと、該更新後のデータが格納される前記記憶媒体の記憶領域のアドレス情報とを含む情報を、前記アダプタが受信し、
前記記憶媒体の記憶領域を示すアドレス情報を有する、データの読み出し要求を、前記計算機から前記アダプタが受信し、
前記アドレス情報が示す記憶領域に格納されるデータであって、前記情報に含まれているデータを、前記アダプタから前記計算機に送信することを特徴とする記憶装置。
【請求項３１】
計算機に接続され、該計算機で管理されるファイルシステムの管理情報であるメタデータと、該計算機に管理されるファイルの内容であるユーザデータとを記憶する記憶媒体を有する記憶装置が、前記計算機が受け付けたファイルへのアクセス要求に従って、前記メタデータ若しくは前記ユーザデータを更新するために実行するプログラムであって、
前記計算機から、前記アクセス要求に従って前記計算機が有するバッファメモリ上で更新された更新データを有する情報を受信するステップと、
前記情報の受信後、前記計算機から、前記アクセス要求に従って前記記録媒体に格納されているユーザデータ若しくはメタデータを更新するよう要求する更新要求を受信するステップと、
前記情報が有する更新データを用いて、前記記憶媒体に格納されているユーザデータ若しくはメタデータを更新するよう制御するステップとを実行するためのファイル更新プログラム。
【請求項３２】
請求項３１記載のファイル更新プログラムにおいて、
前記情報を受信するステップは、予め定められた識別情報を有する入出力要求を前記計算機から受信するステップと、
前記識別情報を有する入出力要求に従って受信されるデータを、前記記憶装置内で確保されている記憶領域に格納するステップとを有することを特徴とするファイル更新プログラム。
【請求項３３】
請求項３１記載のファイル更新プログラムにおいて、
前記情報は更に、該情報が有する更新データが書き込まれる前記記憶媒体内の記憶領域のアドレス情報を有しており、
前記ユーザデータ若しくはメタデータを更新するよう制御するステップは、前記情報が有する更新データを前記情報が有するアドレス情報が示す記憶領域に書き込むよう制御するステップを有することを特徴とするファイル更新プログラム。
【請求項３４】
請求項３３記載のファイル更新プログラムにおいて、
前記ユーザデータ若しくはメタデータを更新するよう制御するステップは、前記更新要求を受信する前に、前記情報が有する更新データを前記記憶装置が有するキャッシュメモリに書き出すステップと、
前記更新要求を受信した場合に、前記サーバに応答を送信するステップと、
前記応答の送信後、前記キャッシュメモリに書き出された更新データを前記記憶媒体に書き込むよう制御するステップを有することを特徴とするファイル更新プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、サーバに障害が発生した場合に備えて、ディスクドライブに格納されているファイルの更新履歴を記憶装置に記憶するジャーナリングファイルシステムに関する。
【０００２】
【従来の技術】
記憶装置が有するディスクドライブに格納されるファイルを管理し、ファイルに対するアクセス要求を処理するサーバは、記憶装置に対する入出力回数を減らしてアクセス要求に対する応答速度を向上させるために、サーバ上に備えられたメモリであるバッファメモリを使用する。サーバは、ディスクドライブに格納されているデータをサーバ内のバッファメモリに一時的に格納しておき、サーバがファイルに対するアクセス要求を受け付けた場合には、記憶装置にアクセスすることなくバッファメモリに格納されているデータを用いてこのアクセス要求を処理する。
【０００３】
しかし、サーバがファイルの更新要求を受け付けてバッファメモリ上のデータのみを更新した場合に、電源断などの障害によりサーバがダウンしてしまうと、バッファ上で更新したファイルの内容が失われてしまう。この結果、サーバがファイルを管理するためのプログラムを実行することによって実現されるファイルシステムに、矛盾が生ずる可能性がある。このような問題を解決するために、非特許文献１ないし５には、ジャーナリングファイルシステムが記載されている。ジャーナリングファイルシステムでは、サーバがファイルの更新要求を受け取ると、バッファ上のデータを更新すると共に、更新内容を記録したジャーナルログを作成する。ジャーナルログは、サーバに障害が発生した場合にも失われることのないように、サーバが更新要求に対する応答を返す前にディスクドライブのジャーナルログ格納用の記憶領域に書き込まれる。一方、更新されたバッファ上のデータは、ジャーナリングファイルシステムによってダーティデータとして管理され、サーバが更新要求に対する応答を返した後、ディスクドライブに書き込まれる。尚、ディスク装置内に格納されているデータを更新する処理を以降、フラッシュ処理と呼ぶ。サーバに障害が生じた場合には、サーバはジャーナルログを記憶装置から読み込んで、これを利用してファイルシステムを修復することができる。
【０００４】
【非特許文献１】
カーティス  アンダーソン（Ｃｕｒｔｉｓ  Ａｎｄｅｒｓｏｎ）、外６名、“ｘＦＳ  プロジェクトアーキテクチャ（ｘＦＳ  Ｐｒｏｊｅｃｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ）”、１０．０、［ｏｎｌｉｎｅ］、１９９３年１０月８日、シリコングラフィックスインク（Ｓｉｌｉｃｏｎ  Ｇｒａｐｈｉｃｓ，  Ｉｎｃ．）、［平成１４年８月２３日検索］、インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｌｉｎｕｘ−ｘｆｓ．ｓｇｉ．ｃｏｍ／ｐｒｏｊｅｃｔｓ／ｘｆｓ／ｄｅｓｉｇｎ＿ｄｏｃｓ／ｘｆｓｄｏｃｓ９３＿ｐｄｆ／ａｒｃｈ．ｐｄｆ＞
【非特許文献２】
アダム  スウィーニー（Ａｄａｍ  Ｓｗｅｅｎｅｙ）、“ｘＦＳ  トランザクションメカニズム（ｘＦＳ  Ｔｒａｎｓａｃｔｉｏｎ  Ｍｅｃｈａｎｉｓｍ）”、２．１、４．３、４．４、４．５、［ｏｎｌｉｎｅ］、１９９３年１０月７日、シリコングラフィックスインク（Ｓｉｌｉｃｏｎ  Ｇｒａｐｈｉｃｓ，  Ｉｎｃ．）、［平成１４年８月２３日検索］、インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｌｉｎｕｘ−ｘｆｓ．ｓｇｉ．ｃｏｍ／ｐｒｏｊｅｃｔｓ／ｘｆｓ／ｄｅｓｉｇｎ＿ｄｏｃｓ／ｘｆｓｄｏｃｓ９３＿ｐｄｆ／ｔｒａｎｓ．ｐｄｆ＞
【非特許文献３】
マイケル  ニシモト（Ｍｉｃｈａｅｌ  Ｎｉｓｈｉｍｏｔｏ）、“ログマネージャ（Ｔｈｅ  Ｌｏｇ  Ｍａｎａｇｅｒ）”、３．０、［ｏｎｌｉｎｅ］、１９９４年３月２８日、シリコングラフィックスインク（Ｓｉｌｉｃｏｎ  Ｇｒａｐｈｉｃｓ，  Ｉｎｃ．）、［平成１４年８月２３日検索］、インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｌｉｎｕｘ−ｘｆｓ．ｓｇｉ．ｃｏｍ／ｐｒｏｊｅｃｔｓ／ｘｆｓ／ｄｅｓｉｇｎ＿ｄｏｃｓ／ｘｆｓｄｏｃｓ９３＿ｐｄｆ／ｌｏｇ＿ｍｇｒ．ｐｄｆ＞
【非特許文献４】
“ＪＦＳ  オーバービュー（ＪＦＳ  ｏｖｅｒｖｉｅｗ）”、ログ（Ｌｏｇｓ）、ジャーナリング（Ｊｏｕｒｎａｌｉｎｇ）、［ｏｎｌｉｎｅ］、アイビーエム（ＩＢＭ）、［平成１４年８月２３日検索］、インターネット＜ＵＲＬ：ｆｔｐ：／／ｗｗｗ６．ｓｏｆｔｗａｒｅ．ｉｂｍ．ｃｏｍ／ｓｏｆｔｗａｒｅ／ｄｅｖｅｌｏｐｅｒ／ｌｉｂｒａｒｙ／ｊｆｓ．ｐｄｆ＞
【非特許文献５】
スティーブ  ベスト（Ｓｔｅｖｅ  Ｂｅｓｔ）、“ＪＦＳログ（ＪＦＳ  Ｌｏｇ）”、［ｏｎｌｉｎｅ］、２０００年１０月、アイビーエムリナックステクノロジーセンター（ＩＭＢ  Ｌｉｎｕｘ  ＴｅｃｈｎｏｌｏｇｙＣｅｎｔｅｒ）、［平成１４年８月２３日検索］、インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｏｓｓ．ｓｏｆｔｗａｒｅ．ｉｂｍ．ｃｏｍ／ｄｅｖｅｌｏｐｅｒ／ｏｐｅｎｓｏｕｒｃｅ／ｊｆｓ／ｐｒｏｊｅｃｔ／ｐｕｂ／ｊｆｓｌｏｇ／ｊｆｓｌｏｇ．ｐｄｆ＞
【０００５】
【発明が解決しようとする課題】
ジャーナリングファイルシステムでは、ファイルの内容が更新される場合、ディスクドライブに対するジャーナルログの書き込み処理とフラッシュ処理とが、異なるタイミングで行われる。このため、サーバと記憶装置では、データ転送による負荷が増大する。
【０００６】
本発明の目的は、効率的にジャーナルログ書き込み処理及びフラッシュ処理を実行することができるサーバ及び記憶装置を提供することである。
【０００７】
【課題を解決するための手段】
上記目的を達成するために本発明では、サーバからジャーナルログを受信した記憶装置が、ジャーナルログに含まれる更新データを利用して、フラッシュ処理を実行する。
【０００８】
【発明の実施の形態】
以下、本発明の実施の形態を説明する。なお、これにより本発明が限定されるものではない。
【０００９】
図１は、本発明が適用されるシステムの構成例を示す図である。本システムは、サーバ１と、サーバ１に接続された記憶装置２を有する。尚、サーバ１と記憶装置２とは異なる装置であって通信路を介して相互に接続されていても良いし、サーバ１と記憶装置２は一つの筐体に格納されて全体で一つの装置として構成されており、装置内（筐体内）で通信路により接続されていても良い。
【００１０】
サーバ１は、制御プロセッサ１０、ファイルシステムの管理情報や記憶装置２のディスクドライブ４に格納されているデータを格納するバッファメモリ１３、記憶装置２と接続し記憶装置２との間でデータを送受信するディスクアダプタ１４、ネットワーク１７に接続しネットワーク上の他のサーバ１８との間での通信を制御するネットワークアダプタ１５、及び制御プロセッサ１０が実行するプログラムが格納されるメインメモリ１６が、バス等の内部通信線によって相互に接続された構成を有する計算機である。
【００１１】
また、サーバ１はサーバ１全体を制御するオペレーティングシステム１１や、記憶装置２のディスクドライブ４に格納されているファイルを管理するファイルシステム管理部１２も有する。尚、オペレーティングシステム１１や、ファイルシステム管理部１２は、制御プロセッサ１０がメインメモリ１６内に格納されているプログラムを実行することによって、実現される。サーバ１は更に、キーボードやマウス等の入力装置（図示せず）や、ディスプレイ装置等の出力装置（図示せず）を有している。
【００１２】
記憶装置２は、データを格納するディスクドライブ４と、サーバ１からディスクドライブ４が有する記憶領域へのアクセス要求を受け取り、ディスクドライブ４に対するデータの入出力を制御するディスク制御部３とを有する。
【００１３】
ディスク制御部３は、サーバ１との間でデータの送受信を行うチャネルアダプタ２１、サーバ１から受信するジャーナルログを格納するためのメモリであるジャーナルログ格納領域２４、サーバ１から書き込まれたデータやディスクドライブ４から読み出したデータを格納するキャッシュ２５、ディスク制御プロセッサ２２が実行するプログラムが格納されているメインメモリ２７、後述の各制御部によって使用される制御情報等が格納される制御メモリ２６、ディスクドライブ４との間でデータの送受信を行うディスクアダプタ２３、およびこれらの制御を行うディスク制御プロセッサ２２を有する。
【００１４】
またディスク制御部３は、チャネルアダプタ２１を介したサーバ１とキャッシュ２５またはサーバ１とジャーナルログ格納領域２４との間のデータの送受信を制御するチャネル制御部３１、サーバ１から受信した要求を解釈し、要求内容に従って各制御部に処理要求を発行するコマンド制御部３２、キャッシュ２５にデータが存在するか否かの判断や、キャッシュ２５の管理を行うキャッシュ制御部３３、ジャーナルログ格納領域２４を管理し、ジャーナルログの内容を利用してキャッシュ２５に更新データ５７を書き込むジャーナルログ制御部３４、ディスクアダプタ２３を介してキャッシュ２５とディスクドライブ４との間でのデータの送受信を制御するディスクドライブ制御部３５を有する。尚、チャネル制御部３１、コマンド制御部３２、キャッシュ制御部３３、ジャーナルログ制御部３４、ディスクドライブ制御部３５は各々、ディスク制御プロセッサ２２がメインメモリ２７に格納されているプログラムを実行することにより実現される。
【００１５】
ディスク制御プロセッサ２２は、複数のプロセッサによって構成される場合もある。ディスク制御プロセッサ２２が複数のプロセッサで構成される場合、複数のプロセッサ各々がどの処理、どの制御も実行できるよう構成しても良いし、プロセッサ毎に実行するプログラム、処理、制御内容を分担してもよい。例えば、ジャーナルログ制御部３４専用のプロセッサを持つ等の方法が考えられる。
【００１６】
キャッシュ２５、制御メモリ２６およびジャーナルログ格納領域２４は、バッテリバックアップされた不揮発性メモリで構成され、障害等で記憶装置の外部電源が切断された場合でも、データは保持される。図１では、キャッシュ２５とジャーナルログ格納領域２４を別に示したが、キャッシュ２５の領域の一部をジャーナルログ格納領域２４として使用することも可能である。また、ジャーナルログ格納領域２４として特別な領域を有さずとも、ジャーナルログ制御部３４がジャーナルログをキャッシュ２５上で通常のデータと区別して管理すればよい。
【００１７】
ディスクドライブ４は、磁気記憶媒体等の記憶媒体であり、単体のディスクドライブのみならず、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）型ディスクアレイのように複数のディスクドライブを有する場合もある。記憶媒体中の記憶領域は、５１２バイト等の固定長の複数のブロックに分かれており、ディスク制御部３は、ブロックアドレスを用いてブロックを指定することにより一意にデータの格納位置を指定することができる。ディスクドライブ４は、ファイルの内容であるユーザデータおよびファイルシステムの管理用データであるメタデータを格納している。ここでメタデータには、ファイルのサイズやファイルシステムのディレクトリ構造を示す情報、ディレクトリ構造内でのファイルの位置を示す情報等が含まれる。ファイルシステム管理部１２は、ディスクドライブ４に格納されているユーザデータやメタデータにアクセスする場合に、ブロックアドレスを指定したアクセス要求をディスク制御部３に対して発行する。ディスク制御部３のディスクドライブ制御部３５は、サーバから受信したブロックアドレスを用いてディスクドライブ４内の記憶領域にアクセスする。
【００１８】
次に図９を参照しながら、本実施形態におけるジャーナルログの書き込み処理およびフラッシュ処理の概要を説明する。サーバ１がネットワーク１７上の他の装置１８からネットワークアダプタ１５を介して、若しくはサーバ１を利用するユーザから入力装置を介して、記憶装置２に格納されているファイルに対する更新要求を受け付けた場合、ファイルシステム管理部１２が、オペレーティングシステム１１を介してこの更新要求を受信する。ファイルシステム管理部１２は、更新要求に応じてサーバ１のバッファメモリ１３上でデータを更新し、更新されたデータをダーティデータとして管理する。また、ファイルシステム管理部１２は、バッファメモリ１３上で実行されたファイルの更新の履歴情報であるジャーナルログを作成し、これを記憶装置２に送信する（Ｓ１）。ジャーナルログは、ジャーナルログ制御部３４の制御によって、記憶装置２内の不揮発のジャーナルログ格納領域２４に書き込まれる。
【００１９】
従来ディスク制御部３は、サーバ１から受け付けるジャーナルログの書き込みのための入出力要求を、他の通常のデータを書き込むための入出力要求と区別することができなかった。従って、ディスク制御部３は、サーバ１から書き込みのための入出力要求を受け付けると、書き込まれるデータがジャーナルログであっても通常のデータであっても一旦ディスク制御部３のキャッシュ２５に格納した後、ディスクドライブ４に書き込んでいた。しかし、本実施形態においては後述する方法によって、ジャーナルログを書き込むための入出力要求と通常のデータを書き込むための入出力要求とを、ディスク制御部３が識別することができる。従ってディスク制御部３は、サーバから受け付ける入出力要求の種類を判別することにより、サーバから受信するデータがジャーナルログであると識別した場合には、受信したデータをディスクドライブ４に書き込まずに、ディスク制御部３上のジャーナルログ格納領域２４に格納することができる。
【００２０】
サーバ１がバッファメモリ１３上で更新されたデータについて、記憶装置２内の記憶領域でもデータを更新するよう要求する場合には、ファイルシステム管理部１２がファイル更新要求（フラッシュ要求）を記憶装置２に発行する（Ｓ２）。尚、フラッシュ要求は、ジャーナルログ書き込みのための入出力要求と同期して発行される必要はない。ファイルシステム管理部１２は記憶装置２内の記憶領域でデータが更新されるまでの間、バッファメモリ１３上で更新されたデータをダーティデータとしてダーティキューに接続（キューイング）して管理する。
【００２１】
ダーティデータは、ダーティデータと同じ内容のデータが記憶装置２に書き込まれ、記憶装置２内の記憶領域でデータが更新されるまで、バッファメモリ１３上に格納しておく必要がある。従って、ダーティデータが格納されているバッファメモリ１３内の記憶領域は、フラッシュ処理が実行されるまで他のデータ用の記憶領域として使用されることがないよう、ファイルシステム管理部１２によって管理される。また、サーバ１が他のサーバ１８やサーバ１のユーザから、ダーティデータへのアクセス要求を受信した場合には、ファイルシステム管理部１２はバッファメモリ１３上に格納されているダーティデータを用いてこのアクセス要求を処理することにより、データ更新前の古いデータが記憶装置２から読み出されることがないよう制御する。
【００２２】
サーバ１がフラッシュ要求を発行した場合（Ｓ２）、従来はサーバ１のバッファメモリ１３に格納されている更新データ（ダーティデータ）が、ディスク制御装置２に転送され、キャッシュ制御部３３の制御によって一旦ディスク制御部３上のキャッシュに格納された後、ディスクドライブ制御部３５の制御によってディスクドライブに格納されていた。しかし、本実施形態においては、既にジャーナルログとしてジャーナルログ格納領域２４に格納されている更新データを用いて、ジャーナルログ制御部３４とディスクドライブ制御部３５がフラッシュ処理を実行する。
【００２３】
まず、サーバからフラッシュ要求を受信したディスク制御部３では（Ｓ２）、ジャーナルログ制御部３４がジャーナルログ格納領域に格納されている更新データをキャッシュ２５に読み出し（Ｓ３）、読み出し処理が終了すると、ディスク制御部３はサーバ１にフラッシュ処理終了通知を送信する（Ｓ４）。その後キャッシュ２５に読み出された更新データをディスクドライブ制御部３５がディスクドライブ４に書き込む（Ｓ５）。
【００２４】
尚、ディスク制御部３がサーバ１からデータの読み出し要求を受信した場合には、ディスク制御部３は読み出し要求に含まれているアドレス情報に基づいて、このアドレス情報が示すディスクドライブ内の記憶領域に格納されている、若しくはこれからこの記憶領域に格納されるデータがキャッシュ２５に読み出されているかを調べる。サーバから受信した読み出し要求が、Ｓ３でキャッシュ２５に読み出されたデータに対する読み出し要求である場合には、ディスク制御部３はキャッシュ２５に格納されているデータをサーバ１に送信する。キャッシュ２５に読み出されていないデータに対する読み出し要求である場合には、ディスク制御部３はディスクドライブ４からキャッシュへデータを読み出してから、データをサーバ１に送信する。
【００２５】
この結果本実施形態においては、フラッシュ要求時にサーバ１が記憶装置２へ更新データを転送する必要がなく、サーバ１及び記憶装置２のデータ転送による負荷を軽減することができる。尚サーバからフラッシュ要求を受信する前にジャーナルログ制御部３４がジャーナルログ格納領域からキャッシュ２５に更新データを読み出しておいても良い。この場合、ディスク制御部３がフラッシュ要求を受信した時には既に更新データはキャッシュ２５に読み出されているので、ディスク制御部３は直ちにサーバ１にフラッシュ処理終了通知を送信することができる。
【００２６】
サーバ１が記憶装置２からフラッシュ処理終了通知を受信すると、サーバ１のバッファメモリ上に格納されているダーティデータは、ファイルシステム管理部１２によってダーティキューよりデキューされる。この結果、ダーティデータが格納されていたバッファメモリ１３上の記憶領域は解放され、他のデータ用の記憶領域として使用可能な状態となる。
【００２７】
ジャーナルログの書き込み処理後、フラッシュ要求が発行される前に、サーバ１に電源断等の障害が発生した場合は、サーバ１のファイルシステム管理部１２が、ジャーナルログ格納領域２４に記憶されているジャーナルログを利用してファイルシステムを回復することができる。
【００２８】
図２は、ジャーナルログ格納領域２４に格納されるデータの構造の一例を示す図である。ジャーナルログ格納領域２４には、複数のジャーナルログがサーバ１から受信された順に格納される。ジャーナルログ格納領域２４はループ状に使用され、領域が最後まで使用された場合には、領域の先頭に戻って使用される。
【００２９】
前述のように、サーバ１がファイルに対する更新要求を受信すると、ファイルシステム管理部１２がバッファメモリ内のデータを更新した後、ジャーナルログを作成し、このジャーナルログをディスク制御部３に送信する。従って、記憶装置２ではまず、ジャーナルログがジャーナルログ格納領域２４に書き込まれる。その後記憶装置２では、サーバ１のバッファメモリ１３上で行われたデータの更新と同様のデータの更新が、キャッシュ２５上行われ、更に更新されたデータがディスクドライブ４に書き込まれる。従って、ジャーナルログはジャーナルログ格納領域２４に書き込まれているが、記憶装置２内では未だデータの更新が実行されていないという状態が生じうる。この様な場合、ジャーナルログが示すファイルの更新内容は、記憶装置２には反映されていないので、このジャーナルログを未反映のジャーナルログと呼ぶ。
【００３０】
ジャーナルログ格納領域２４のうち、未反映のジャーナルログが格納されている領域を示すために、ジャーナルログ制御部３４は始点ポインタ４３と終点ポインタ４４の二つのポインタを用いる。始点ポインタ４３と終点ポインタ４４の二つのポインタに挟まれた領域（始点ポインタのほうが終点ポインタより後部にある場合は、始点ポインタの位置からジャーナルログ格納領域の終わりまでと、ジャーナルログ格納領域の先頭から終点ポインタの位置までの領域）が未反映のジャーナルログが格納されている領域である。始点ポインタ４３および終点ポインタ４４の二つのポインタは、制御メモリ２６上に格納され、ジャーナルログ制御部３４により管理される。また、サーバ１で動作するファイルシステム管理部１２は、バッファメモリ１３上にこの二つのポインタに対応するポインタを持ち、ジャーナルログの作成時やフラッシュ処理終了通知を受信した時にこの二つのポインタの値を更新することにより、ジャーナルログ格納領域２４の状態を管理する。従って、サーバ１のファイルシステム管理部１２は、ジャーナルログ格納領域２４の空き領域等を管理するために、記憶装置２に対してポインタ読み出し要求を発行する必要がない。
【００３１】
各ジャーナルログは、ヘッダ部４１とデータ部４２を有する。データ部４２は可変長であり、データ部４２の長さ（バイト数）はヘッダ部４１に記憶されている情報から知ることができる。データ部は、サーバが受け付けたファイルの更新要求に応じてファイルに書き込まれるユーザデータや、更新要求に応じて変更されるファイルシステムの管理情報（メタデータ）を有する。尚、ジャーナルログは、サーバ１のユーザや他のサーバ１８からサーバ１が受信するファイルの更新要求毎に一つ作成される。
【００３２】
ファイルの更新要求に従って更新されるデータには、ファイルシステムの管理情報であるメタデータと、ファイルの内容であるユーザデータの二つがある。従って、ジャーナルログを作成する方法にも、メタデータとユーザデータ両方の更新についてジャーナルログを作成する方法と、メタデータまたはユーザデータいずれか一方の更新のみについてジャーナルログを作成する方法とがある。本実施形態におけるジャーナリングシステムは、いずれの方法を採用する場合にも適用することができる。メタデータとユーザデータ両方の更新履歴をジャーナルログに含ませる場合には、サーバ１はファイルの更新要求に応じてジャーナルログを記憶装置２に書き込み、メタデータとユーザデータそれぞれの更新に応じたダーティデータの管理を行う。メタデータの更新履歴のみをジャーナルログに含ませる場合は、サーバ１はファイルの更新要求に応じて、メタデータの更新に応じたジャーナルログと、バッファメモリ１３内で更新されたユーザデータとを記憶装置２に書き込み、メタデータの更新に応じたダーティデータの管理を行う。
【００３３】
図３は、本実施形態におけるジャーナルログのデータフォーマットの一例示した図である。ジャーナルログのヘッダ部４１は固定長であり、ジャーナルログのサイズを示すログサイズ５１およびジャーナルログに含まれる更新内容のまとまりであるアイテム４５の数を示すアイテム数５２が含まれる。
【００３４】
データ部４２には、ヘッダで示された数のアイテム４５が存在し、アイテム毎に領域が分かれている。各アイテム４５は、アイテム内の情報がディスクドライブ４内のどの記憶領域についての更新履歴を示しているのかを表すためのディスクドライブ上のブロックアドレス５３と、データ単位がいくつあるかを示すデータ数５４、および一つ以上のデータ単位から構成される。データ単位は可変長であり、更新データ５７が格納されるディスクドライブ４上の記憶領域のブロックアドレス５３からの相対的位置を示すオフセット５５、更新データ５７のデータ量を示すサイズ５６、及び更新データ５７を有する。
【００３５】
一つのアイテム内に格納されている更新データは、ディスクドライブ内の連続する記憶領域に格納される。更新データが格納されるディスクドライブ４内の記憶領域が、連続する複数のブロックにまたがっている場合には、ブロックアドレス５３は先頭のブロック内の位置を指す。オフセット５５はブロックサイズを超えた値をとることができ、オフセット５５がブロックサイズを超える場合には、オフセット５５は先頭ブロックに続くブロック内の位置を指す。即ち、オフセット５５からブロックサイズを引いた値が、先頭ブロックに続くブロック内における位置を示すことになり、オフセットが指すディスクドライブ４内の位置からこのオフセット情報と同じデータ単位に格納されている更新データが書き込まれることとなる。オフセットがさらにブロックサイズを超える場合は、順次引き続くブロック内の位置を指す。
【００３６】
従来、ジャーナルログにはブロックアドレスは含まれていなかった。これは、従来ジャーナルログはファイルシステムのみが使用するものであったため、ブロックアドレスをジャーナルログに含ませておく必要がなかったからである。従って従来と同様のジャーナルログでは、記憶装置２のディスク制御部３はジャーナルログに含まれるメタデータから更新データが格納されるディスクドライブ４内の記憶領域を特定することはできないため、ジャーナルログに更新データが含まれていても、これを利用してフラッシュ処理を実行することはできなかった。しかし、本実施形態においては、ジャーナルログがブロックアドレス５３を有している。ディスク制御部３はブロックアドレスを用いてディスクドライブ４内の記憶領域に対する入出力処理を実行しているので、ジャーナルログがブロックアドレス５３とオフセットを有していれば、これらの情報を用いてディスク制御部３のディスク制御プロセッサ２２は更新データが格納される記憶領域を特定することができる。従って、ディスク制御部３はジャーナルログが有する更新データを用いて、フラッシュ処理を実行することができるようになる。
【００３７】
ジャーナルログは、記憶装置２内の記憶領域でデータが更新されるまでの間に、障害等によりサーバ１のバッファメモリ１３上で実行されたデータ更新の内容が消失してしまう可能性があるため、ファイルの更新履歴を別途記憶装置２内に格納しておくためのものである。従って、記憶装置２内の記憶領域でデータが更新された後は、ジャーナルログは不要となる。そこで本実施形態においては、サーバ１と記憶装置２の間での通常のデータの入出力、フラッシュ要求、ジャーナルログの入力を区別するための構成を有する。記憶装置２がサーバ１から受信する通常のデータの入出力要求、フラッシュ要求、ジャーナルログの入力要求を区別できれば、ディスク制御部３では、ジャーナルログを通常のデータを格納するキャッシュ２５とは別のジャーナルログ格納領域２４に格納することができる。ディスク制御部３がジャーナルログを通常のデータとは別の領域に格納することにより、キャッシュ２５上に存在するデータがジャーナルログの書き込みにより追い出されることがなくなり、キャッシュヒット率の向上につながる。
【００３８】
また、記憶装置２が通常のデータの入出力要求とジャーナルログの入出力要求とを区別できれば、ディスク制御部３は通常のデータはディスクドライブ４に書き込むのに対し、ジャーナルログはジャーナルログ格納領域２４でのみ保持し、ディスクドライブ４に書き込まないよう制御することもできる。この結果、ディスク制御部３とディスクドライブ４の間でのデータ転送による負荷を低減することができる。また、ジャーナルログが格納されるはずであったディスクドライブ４上の記憶領域を通常のデータを格納するために使用することができ、ディスクドライブ４の記憶領域を有効に使用することができる。尚、障害発生時等に備えてディスクドライブ４内にジャーナルログを格納するための記憶領域を割り当てておき、ディスク制御部３はジャーナルログも通常のデータと同様ディスクドライブ４に書き込むこととしても良い。
【００３９】
本実施形態では、ジャーナルログ書き込みのための入出力要求、フラッシュ要求、およびフラッシュ処理終了通知は、サーバ１と記憶装置２とが特殊なインタフェースを用いることによって送受信されるものとし、この特殊なインタフェースを用いてサーバ１及び記憶装置２はジャーナルログ書き込みのための入出力要求とフラッシュ要求等の通常のデータの入出力要求とを識別する。
【００４０】
図４に、サーバ１と記憶装置２とが、ジャーナルログ書き込みのための入出力要求、フラッシュ要求、およびフラッシュ処理終了の通知を送受信するために用いるインタフェースのコマンドの一例を示す。コマンド６１は、ジャーナルログ書込み時にサーバ１から記憶装置２に対して発行されるコマンドである。コマンド６１は、ジャーナルログ書き込み要求のためのコマンドであることをしめすコマンド名フィールド、ジャーナルログの各種パラメータが格納されたパラメータフィールド、ジャーナルログのデータ部が格納されるデータフィールド、そしてコマンド発行元のサーバの識別情報が格納される発行元フィールドを有する。パラメータフィールドには、このジャーナルログが有する更新履歴に従ってデータが更新されるディスクドライブ４内の論理ユニットを示すＬＵ番号、ログデータのサイズを示すログサイズ、ログデータに含まれるアイテム数が格納されている。データフィールドには、図３に示すデータ部４２のフォーマットに従ったログデータが格納されている。コマンド６１を受け取った記憶装置２では、ジャーナルログ制御部３４が、ジャーナルログ格納領域２４に領域を確保し、パラメータフィールドに含まれるデータに基づいてヘッダを作成した後、データとして渡されるログデータを書き込む。
【００４１】
コマンド６２は、サーバ１から発行されるフラッシュ要求のためのコマンドであり、フラッシュ要求のためのコマンドであることを示すコマンド名フィールド、論理ユニット番号が格納されたパラメータフィールド、発行元サーバの識別情報が格納される発行元フィールドを有している。本実施形態においては上述のように、フラッシュ処理はジャーナルログに含まれる更新データを用いて実行されるため、フラッシュ要求コマンドはデータを有しない。
【００４２】
コマンド６３は、記憶装置２がフラッシュ処理の終了をサーバ１に通知するために発行するコマンドであり、フラッシュ処理終了通知である旨を示すコマンド名フィールド、論理ユニット番号やフラッシュ処理の対象となるジャーナルログを特定するためのジャーナルログ格納領域内のアドレスが格納されるパラメータフィールド、発行元の記憶装置の識別情報が格納される発行元フィールドを有している。コマンド６３もデータを有しない。
【００４３】
サーバが図４に示すコマンドを用いてジャーナルログ書き込み要求やフラッシュ要求を記憶装置に発行すれば、記憶装置２はコマンド名フィールドを検査することによってジャーナルログ書き込み要求とフラッシュ要求とを識別することができる。
特殊なコマンドを用意するかわりに、サーバ１と記憶装置２の間のインタフェースとして、ＳＣＳＩ等の一般的なインタフェースを用いることも可能である。ＳＣＳＩが用いられる場合、ジャーナルログの書き込み要求とフラッシュ要求とを識別するための方法として、サーバ１が例えばベンダユニークなコマンドを用いてジャーナルログ書込み要求を発行する方法や、サーバ１がライトコマンドのコマンドディスクリプションブロック（ＣＤＢ）にフラグを設定してジャーナルログ書き込み要求を発行する方法が考えられる。これらの方法によれば、記憶装置２は、ベンダユニークなコマンドやＣＤＢに設定されたフラグを認識することにより、ジャーナルログの書き込み要求とフラッシュ要求とを識別することができる。
【００４４】
また記憶装置２が、ジャーナルログ格納領域２４として、専用のデバイスや、ディスクドライブ４やキャッシュ２５内に専用の記憶領域を有しており、他のデバイスや記憶領域とは分けて管理していれば、サーバから受け付けたジャーナルログ格納領域２４への書込み要求を、ジャーナルログ書き込み要求と判断することもできる。
【００４５】
サーバ１が記憶装置２に発行するフラッシュ要求や、記憶装置２がサーバに送信するフラッシュ処理終了通知も、ＳＣＳＩのベンダユニークなコマンドや、ＣＤＢにフラグを設定したコマンドを用いることで、サーバ１と記憶装置２はフラッシュ要求やフラッシュ処理終了通知を他のコマンドから識別することができる。
【００４６】
図５を用いて、ＳＣＳＩインタフェースを用いてジャーナルログ書込み要求を送信する場合の一例として、サーバ１がＣＤＢにフラグを設定する例を説明する。図５はサーバ１がジャーナルログ書き込み要求を発行するために記憶装置２に送信するコマンドディスクリプションブロック（ＣＤＢ）の一例である。ＣＤＢのオペレーションコード７１にはライトコマンドである旨を表す１６進数０Ａが設定される。転送ブロック数７４にはジャーナルログのサイズがブロック数で指定される。制御バイト７５には、ジャーナルログの書き込みであることを表すためにＥ０等サーバ１と記憶装置２との間で予め定められている値が設定される。尚、ジャーナルログは、ジャーナルログ制御部３４がジャーナルログ格納領域２４に必要な領域を確保して書き込むため、データが書き込まれる記憶領域を指定するための論理ブロックアドレス７３の値は設定されない。記憶装置２はＣＤＢの制御バイト７５を検査することにより、ライトコマンドがジャーナルログ書き込み要求であるか否かを識別することができる。ＣＤＢに続いて、図３に示すヘッダ部４１とデータ部４２を含むジャーナルログがライトコマンドのデータとして、サーバ１から記憶装置２に送信される。
【００４７】
尚他の実施形態として、通常のデータの入出力要求、ジャーナルログの入力要求、及びフラッシュ要求を同様のインタフェースを用いて送信しても良い。この場合記憶装置２はジャーナルログ書き込み要求を他の入出力要求等から識別することはできないため、ジャーナルログも通常のデータと同様ディスクドライブに書き込まれることとなる。しかし、サーバがフラッシュ要求を発行する際に、フラッシュ処理の対象となるジャーナルログが格納されている記憶領域をフラッシュ要求内で指定すれば、記憶装置２は指定されたジャーナルログに含まれる更新データを用いてフラッシュ処理を実行することができる。
【００４８】
図６は、サーバ１がディスクドライブ４に格納されているファイルに対する更新要求を受け取った時の、ファイルシステム管理部１２の動作を示すフローチャートである。ファイルシステム管理部１２は、ステップ１０１で、オペレーティングシステム１１またはネットワークを介して更新要求を受け取る。ステップ１０２でファイルシステム管理部１２は、ジャーナルログ格納領域２４に更新内容を書き込むための空き領域があるかどうかを、バッファメモリ１３内で管理しているジャーナルログ格納領域２４の始点ポインタおよび終点ポインタを参照することによりチェックする。空き領域がある場合は、ステップ１０４でファイルシステム管理部１２は、必要な量の領域をこの更新要求用のジャーナルログ領域として確保し、バッファメモリ１３内の終点ポインタを確保した領域分進める。空き領域がない場合には、ステップ１０３に進み、ファイルシステム管理部１２は図７に示すように、記憶装置２にフラッシュ要求を発行し、記憶装置２からフラッシュ処理終了通知を受信した後ダーティデータのデキュー処理を行うことにより空き領域を作成し、ステップ１０４でジャーナルログ領域を確保する。次にステップ１０５で、ファイルシステム管理部１２は更新要求に従ってバッファメモリ１３上のデータを更新し、ステップ１０６で更新内容を記憶したジャーナルログをバッファメモリ１３上に作成する。そしてステップ１０７で、ファイルシステム管理部１２は更新データをダーティキューに接続することにより、記憶装置２では未だ更新処理が実行されていないダーティデータとしてこの更新データを管理する。ステップ１０８でファイルシステム管理部１２は、記憶装置２に対してジャーナルログ書込みのための入出力要求を発行する。この入出力要求を受信したディスク制御部３はジャーナルログ制御部３４の制御によりジャーナルログをディスク制御部３のジャーナルログ格納領域２４に書き込む。即ちジャーナルログ制御部３４は、ジャーナルログ格納領域２４の終点ポインタ４４が示す位置からジャーナルログを書き込み、終点ポインタ４４をジャーナルログが書き込まれた記憶領域の次まで進める。その後ステップ１０９で、ファイルシステム管理部１２はディスク制御部３からジャーナルログ書込み完了通知を受信するまで待ち、完了通知を受信後ステップ１１０で、更新要求の発行元に対して更新処理終了の応答を返す。
【００４９】
図７は、フラッシュ処理時にファイルシステム管理部１２が実行する処理手順を示すフローチャートである。ステップ１２１でファイルシステム管理部１２は、ジャーナルログ格納領域２４のどの部分に格納されているジャーナルログについてフラッシュ処理を実行するかを、バッファメモリ１３内で管理しているジャーナルログ格納領域２４の始点ポインタおよび終点ポインタを参照することにより決定する。次にステップ１２２でファイルシステム管理部１２は、ステップ１２１で決定したジャーナルログ格納領域２４の範囲を指定して記憶装置２に対してフラッシュ要求を発行し、ステップ１２３で、記憶装置２からのフラッシュ処理終了の通知を待つ。記憶装置２から終了通知を受け取ると、ステップ１２４でファイルシステム管理部１２は、フラッシュ処理により記憶装置２で更新されたデータに対応するデータをダーティキューからデキューする。ステップ１２５でファイルシステム管理部１２は、バッファメモリ１３上のジャーナルログ管理用の始点ポインタ４３を、フラッシュ処理を行った最終の地点まで進め、ステップ１２６でフラッシュ処理を終了する。
【００５０】
尚サーバ１がフラッシュ要求を発行する契機として図６では、ジャーナルログ格納領域２４に空きがなくなった時にフラッシュ要求を発行する例を示している。しかし、ある一定時間間隔毎や、ジャーナルログ格納領域２４の空き領域がある一定量以下になった場合にサーバ１がフラッシュ要求を発行することとしても良い。また、後述のようにサーバ１のファイルシステム管理部１２が複数のダーティキューを用いてダーティデータの管理を行っている場合には、アクティブなダーティキューの切り替えを契機にフラッシュ要求を発行し、フラッシュ要求を発行する毎に対応するダーティキューのデータを解放することとしても良い。
【００５１】
フラッシュ処理が行われた時にファイルシステム管理部１３がダーティキューからデキューできるデータは、フラッシュ処理により記憶装置２の記憶領域内で更新されたデータに対応するデータのみである。従ってファイルシステム管理部１３は、ステップ１２１でフラッシュ処理の対象としたジャーナルログに対応するダーティデータのみをデキューする必要がある。そこで、デキューするダーティデータをファイルシステム管理部１３が識別するために、サーバ１はジャーナルログとダーティデータとの対応関係をバッファメモリ１３に記憶している。ファイルシステム管理部１２はダーティデータをデキューする際に、ステップ１２１でフラッシュ処理の対象としたジャーナルログに対応するダーティデータを検索し、このダーティデータをデキューすべきデータと判断する。
【００５２】
他の方法としては、ファイルシステム管理部１３がダーティキューを複数個用いる方法が考えられる。ファイルシステム管理部１３は、複数のダーティキューの内一つをアクティブなダーティキューとし、バッファメモリ１３上でデータを更新した場合にはこのデータをアクティブなダーティキューに接続（キューイング）する。そしてファイルシステム管理部１３は、ある一定時間経過した場合や、一定量のデータの更新がバッファメモリ１３上で行われた場合等を契機として、別のダーティキューをアクティブに切り替え、今までアクティブであったダーティキューをノンアクティブに切り替える。この結果、各ダーティキューにはそのダーティキューがアクティブであった期間内に更新が行われたデータのみが接続されることとなり、このダーティキューがノンアクティブになった時以降に更新されたデータは他のダーティキューに接続されることになる。そこでファイルシステム管理部１３は、ダーティキューをアクティブからノンアクティブに切り替える際にこのダーティキューの最後尾に接続されているダーティデータに対応するジャーナルログの格納位置（ダーティキューをノンアクティブに切り替える時点における、ジャーナルログ格納領域の終点ポインタの位置に相当する。）を記憶しておく。フラッシュ要求発行の際には、記憶しておいたポインタが示す位置までの記憶領域を指定して、ファイルシステム管理部１３が記憶装置２に対してフラッシュ要求を発行することとすれば、フラッシュ処理が終了した場合には、対応するダーティキュー上のデータを全てデキューすることができる。
【００５３】
尚、フラッシュ要求発行時に存在する全ての未反映なジャーナルログについてフラッシュ処理を実行するようサーバ１が記憶装置２に要求した場合には、ファイルシステム管理部１２が記憶装置２に対してフラッシュ要求を発行した時を契機としてアクティブなダーティキューを切り替えればよい。
【００５４】
フラッシュ処理が行われた後、次のフラッシュ処理が行われるまでの間に、ファイルシステム管理部１２がディスクドライブ４内のある特定の記憶領域に格納されているデータに対するデータ更新要求を複数回受け付ける場合も考えられる。この場合には、ファイルシステム管理部１２が２回目以降のデータ更新要求を受け付けた時点で既に、先に受け付けたデータ更新要求に応じて複数のダーティキューのいずれかにこの記憶領域に反映されるべきダーティデータがエンキューされている。従って、ファイルシステム管理部１２は既に複数のダーティキューのいずれかにエンキューされているダーティデータをデキューした後、新たな更新要求に応じた更新データをアクティブなダーティキューにエンキューし直す必要がある。
【００５５】
ステップ１２２でサーバ１が発行するフラッシュ要求を受け取った記憶装置２では、ジャーナルログ制御部３４により、ジャーナルログを利用したフラッシュ処理が実行される。図８は、サーバ１からフラッシュ要求を受け取ったディスク制御部３のジャーナルログ制御部３４が実行する、フラッシュ処理の手順を示すフローチャートである。ジャーナルログ制御部３４は、ステップ１３１でフラッシュ要求を受け取ると、ジャーナルログ管理用ポインタの始点からフラッシュ要求で示される領域までのジャーナルログの内容を順にキャッシュ２５上に反映させる。
【００５６】
以下にジャーナルログの内容をキャッシュ２５に反映させる方法を説明する。まずステップ１３２で、ジャーナルログ制御部３４は始点ポインタ４３が示すジャーナルログを参照する。そしてステップ１３３で、ジャーナルログ制御部３４はジャーナルログ内の各アイテム４５について、ブロックアドレス５３が示すブロックのデータがキャッシュ２５上に存在するかチェックする。データがキャッシュ２５上に存在する場合はステップ１３５へ進む。データがキャッシュ２５上に存在しない場合は、ステップ１３４でジャーナルログ制御部３４は、キャッシュ２５上に領域を割り当て、ジャーナルログのブロックアドレス５３が示すブロックに格納されたデータをディスクドライブ４からキャッシュに読み出した後、ステップ１３５へ進む。ステップ１３５でジャーナルログ制御部３４は、アイテム４５内のデータ単位毎に、キャッシュ２５上に読み出されているブロックの指定オフセット５５が示す位置から更新データ５７を書き込む。そしてステップ１３６でジャーナルログ制御部３４は、次のアイテム４５が存在するか判断し、存在する場合はステップ１３３に戻って、次のアイテム４５について同様にブロックのデータがキャッシュ２５に存在するかチェックする。
【００５７】
ジャーナルログ内の全てのアイテム４５について更新が終了すると、ステップ１３７に進み、ジャーナルログ制御部３４は始点ポインタ４３を次のジャーナルログの位置へ更新する。ステップ１３８では、ジャーナルログ制御部３４は始点ポインタ４３がフラッシュ要求で指定された範囲を越えたかをチェックすることにより、指定範囲まで反映処理が終了したかをチェックする。反映処理が終了した場合は、ステップ１３９でジャーナルログ制御部３４は、フラッシュ処理終了通知をサーバ１に送信する。そして、フラッシュ処理終了通知の送信後、キャッシュ２５上に反映された更新データはディスクドライブ制御部３５の制御によりディスクドライブ４に書き込まれる。反映処理が終了していない場合は、ステップ１３２に戻り、ジャーナルログ制御部３４は始点ポインタ４３が示すジャーナルログを参照し、そのジャーナルログについてキャッシュへの反映処理を行う。
【００５８】
ジャーナルログ制御部３４は、フラッシュ要求を受信する前にジャーナルログに従ってキャッシュ上でデータを更新し、更に更新データをディスクドライブ４に書き込んでおくこともできる。ジャーナルログ制御部３４は、サーバ１からの入出力要求が少ない場合などディスク制御装置２の負荷が少ない時を利用して、始点ポインタ４３が示すジャーナルログに対して図８に示すステップ１３３からステップ１３６までの処理を行い、始点ポインタ４３を次のジャーナルログの位置を示すように変更する。このようにフラッシュ要求の受信に先行して、ジャーナルログに従ったデータの更新をキャッシュ２５上で実行しておくことにより、ジャーナルログ制御部３４がフラッシュ要求を受け取った時に反映すべきジャーナルログの数が少なくなる。従って、ジャーナルログ制御部３４がフラッシュ要求を受信してから、サーバ１にフラッシュ処理終了通知を送信までに要する時間が短くなる。
【００５９】
ジャーナルログ制御部３４がジャーナルログに従ってキャッシュ２５上でデータの更新処理を実行する他の方法として、記憶装置２がサーバ１からジャーナルログ書込みの入出力要求を受けた時に、同期的にジャーナルログの内容をキャッシュ２５に書き込む方法もある。ジャーナルログ書込みのための入出力要求を受け取ったディスク制御装置では、フラッシュ要求を受信した時に行う図８に示す処理と同様の処理を、サーバ１から受け取ったジャーナルログに対して行い、ジャーナルログ書込みの入出力要求に対してフラッシュ処理終了通知をサーバに返信する。この方法によればディスク制御装置３は、ジャーナルログ格納領域２４として一回のジャーナルログ書込みの入出力要求に応じて受信するジャーナルログの容量分の記憶領域を用意しておけばよく、始点ポインタ４３と終点ポインタ４４を用いた未反映のジャーナルログ領域の管理は不要となる。また、ジャーナルログ書き込みのための入出力要求が記憶装置２で受信される度に、キャッシュ２５上でデータが更新されるので、サーバ１がダーティデータの管理を行ったり、フラッシュ要求を発行する必要がなくなる。
【００６０】
同期的にジャーナルログの内容を記憶装置２に反映する方法では、ジャーナルログ書込み要求の入出力に対する応答時間が遅くなる。特にキャッシュ上でデータを反映させる際に、キャッシュ２５上に更新前のデータが格納されていなかった場合、ディスクドライブ４からデータを読み出し、その終了を待ってからデータを更新しなければならないため、応答時間が遅くなる。そこでディスク制御部３がサーバ１からジャーナルログを受け取ってジャーナルログ格納領域２４に格納した時に、ジャーナルログ制御部３４が先にフラッシュ処理終了通知をサーバに送信しておき、後に実際にジャーナルログに従ってキャッシュ上のデータを更新することとしてもよい。この方法によれば、サーバ１に対して、ジャーナルログの記憶装置２への書き込みと同期してフラッシュ処理が実行されたように見せかけることができる。この場合、ディスク制御部３は、サーバ１にはフラッシュ処理終了通知を送信したが、実際には未だキャッシュ上で更新されていないデータを、ダーティデータとして管理する必要がある。そして、ディスク制御部３がダーティデータに対する読み出し要求をサーバから受け取った時は、まずジャーナルログ制御部３４を起動して未反映のジャーナルログが示す更新内容をキャッシュ２５上に反映させた後に、読み出し要求に従ってサーバ１更新後のデータを送信する。
【００６１】
以上に述べた様に、ジャーナルログに更新データが格納される記憶領域のブロックアドレスを含ませることによって、ディスク制御部３がジャーナルログ中の更新データを用いてキャッシュ上のデータを更新し、更にディスクドライブ４に更新データを格納できるようになる。従って、フラッシュ要求に伴ってサーバ１から記憶装置２へ更新データを転送する必要がなくなり、サーバ１及び記憶装置２の処理負荷を削減することができる。また、ディスク制御部３がジャーナルログ内の更新データを利用できるので、ディスク制御部３がサーバ１からフラッシュ要求を受け付ける前に、ジャーナルログ内の更新データをディスク制御部３内のキャッシュ２５に書き出すことができ、この結果サーバ１がフラッシュ要求を発行してから、記憶装置２がサーバにフラッシュ処理終了通知を返信するまでの時間を短縮することができる。
【００６２】
更にディスク制御部３が、サーバから受け付けるジャーナルログ書き込み要求と、フラッシュ要求とを識別することにより、ジャーナルログをディスクドライブに書き出さないよう制御することができる。この結果、ディスク制御部３とディスクドライブ４の間のデータ転送による処理負荷を軽減することができる。
【００６３】
【発明の効果】
本発明によれば、サーバや記憶装置は、効率的にジャーナルログ書き込み処理及びフラッシュ処理を実行することができる。
【図面の簡単な説明】
【図１】本発明が適用されるシステムの構成例を示す図である。
【図２】ジャーナルログ格納領域のフォーマットの一例を示す図である。
【図３】ジャーナルログのフォーマットの一例を示す図である。
【図４】サーバとディスク制御部とが用いるコマンドの一例を示す図である。
【図５】ジャーナルログ書き込み要求に用いられるＳＣＳＩコマンドの一例を示す図である。
【図６】ファイルを更新する際の、ファイルシステム管理部の動作手順の一例を示すフローチャートである。
【図７】フラッシュ処理を実行するための、ファイルシステム管理部の動作手順の一例を示すフローチャートである。
【図８】ジャーナルログ制御部が行うフラッシュ処理の動作手順の一例を示すフローチャートである。
【図９】ジャーナルログの書き込み処理およびフラッシュ処理の一例を示す図である。
【符号の説明】
１…サーバ
２…記憶装置
３…ディスク制御部
４…ディスクドライブ
１２…ファイルシステム管理部
２４…ジャーナルログ格納領域
２５…キャッシュ
３４…ジャーナルログ制御部
【図１】
2004185349.tif 000003
【図２】
2004185349.tif 000004
【図３】
2004185349.tif 000005
【図４】
2004185349.tif 000006
【図５】
2004185349.tif 000007
【図６】
2004185349.tif 000008
【図７】
2004185349.tif 000009
【図８】
2004185349.tif 000010
【図９】
2004185349.tif 000011