(57)【要約】【課題】二つ以上のキューを有するデバイスドライバを扱う場合、同一アドレスに対するＩ／Ｏ要求が登録されることによって、データ化けが発生する可能性がある。【解決手段】アプリケーションが稼働するサーバは、キャッシュ領域を提供するキャッシュメモリシステムを有し、キャッシュドライバは、ストレージシステムの記憶領域へのデータの書き込みを命令する書込要求の登録指示を受け付け、キャッシュ領域がデータの読み出しが可能であり、かつ、データの書き込みが禁止される第１のキャッシュ状態である場合、キャッシュ領域を第１のキャッシュ状態から、データの読み出しが禁止され、かつ、データの書き込みが禁止される第３のキャッシュ状態に変更する。【選択図】図１
2015026263.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションが稼働するサーバ、及び、前記アプリケーションが使用するデータを格納するストレージシステムを備える計算機システムであって、
前記サーバは、第１のプロセッサ、前記第１のプロセッサに接続される第１のメモリ、前記第１のプロセッサに接続され、一時的にデータを格納するキャッシュ領域を提供するキャッシュメモリシステム、前記第１のプロセッサに接続され、前記キャッシュメモリシステムと接続するための接続インタフェース、及び前記第１のプロセッサに接続され、他の装置と接続するための第１のネットワークインタフェースを有し、
前記ストレージシステムは、第２のプロセッサ、前記第２のプロセッサに接続される第２のメモリ、及び前記第２のプロセッサに接続され、他の装置と接続するための第２のネットワークインタフェースを含むコントローラ、並びに前記コントローラと接続される複数の記憶装置を有し、
前記第１のメモリは、前記サーバを制御するオペレーティングシステムを実現するプログラムを格納し、
前記第２のメモリは、前記ストレージシステムを制御するストレージ制御部を実現するプログラムを格納し、
前記オペレーティングシステムは、
キャッシュデータを制御するキャッシュドライバ、前記キャッシュメモリシステムに対するＩ／Ｏ処理を制御するキャッシュメモリシステムドライバ、及び前記ストレージシステムに対するＩ／Ｏ処理を制御するストレージシステムドライバを含み、
前記キャッシュメモリシステムドライバは、前記キャッシュメモリシステムに対するＩ／Ｏ要求を登録する第１のキューを二つ以上有し、
前記ストレージシステムドライバは、前記ストレージシステムに対するＩ／Ｏ要求を登録する第２のキューを一つ以上有し、
前記キャッシュ領域は、前記キャッシュ領域からのデータの読み出しが可能であり、かつ、前記キャッシュ領域へのデータの書き込みが禁止される第１のキャッシュ状態、前記キャッシュ領域からのデータの読み出しが禁止され、かつ、前記キャッシュ領域へのデータの書き込みが許可される第２のキャッシュ状態、又は、前記キャッシュ領域からのデータの読み出しが禁止され、かつ、前記キャッシュ領域へのデータの書き込みが禁止される第３のキャッシュ状態のいずれかの状態に切替可能であり、
前記キャッシュドライバは、
前記アプリケーションから、前記ストレージシステムの第１の記憶領域へのデータの書き込みを命令する第１の書込要求の登録指示を受け付けた場合、前記第１の記憶領域に格納されるデータのキャッシュデータを格納する第１のキャッシュ領域が前記第１のキャッシュ状態であるか否かを判定し、
前記第１のキャッシュ領域が前記第１のキャッシュ状態であると判定された場合、前記第１のキャッシュ領域を前記第１のキャッシュ状態から前記第３のキャッシュ状態に変更することを特徴とする計算機システム。
【請求項２】
請求項１に記載の計算機システムであって、
前記キャッシュドライバは、
前記第１のキャッシュ領域が前記第１のキャッシュ状態から前記第３のキャッシュ状態に変更された時点における前記複数の第１のキューに登録された前記Ｉ／Ｏ要求の実行状態を監視し、
前記複数の第１のキューに登録されたＩ／Ｏ要求に対応するＩ／Ｏ処理が全て完了した場合、前記第１のキャッシュ領域を前記第３のキャッシュ状態から前記第２のキャッシュ状態に変更することによって、当該第１のキャッシュ領域を解放することを特徴とする計算機システム。
【請求項３】
請求項２に記載の計算機システムであって、
前記キャッシュドライバは、
前記ストレージシステムの記憶領域、前記ストレージシステムの記憶領域に格納されるデータのキャッシュデータが格納される前記キャッシュ領域、前記キャッシュ領域からのデータの読み出しが可能か否かを示す第１のフラグ、及び、前記キャッシュ領域へのデータの書き込みが可能か否かを示す第２のフラグを含むキャッシュ管理情報と、
前記複数の第１のキューに付与された識別子、及び前記複数の第１のキューの各々に登録された前記Ｉ／Ｏ要求の実行状態を示す情報を含むキャッシュキュー状態情報と、を管理し、
前記キャッシュドライバは、
前記第１のフラグを操作することによって、前記第１のキャッシュ領域を前記第１のキャッシュ状態から前記第３のキャッシュ状態に変更し、
前記第１のキャッシュ領域が前記第１のキャッシュ状態から前記第３のキャッシュ状態に変更された時点の前記キャッシュキュー状態情報のコピーをキャッシュキュー完了状態情報として取得し、
前記第１のキャッシュ領域のアドレスを取得し、
前記キャッシュキュー完了状態情報及び前記第１のキャッシュ領域のアドレスを含むキャッシュ解放情報を生成し、
任意の前記第１のキューに登録された前記Ｉ／Ｏ要求に対応するＩ／Ｏ処理が完了した場合、前記キャッシュキュー状態情報及び前記キャッシュキュー完了状態情報における当該第１のキューの実行状態を更新し、
前記キャッシュキュー完了状態情報に基づいて、前記複数の第１のキューの各々に登録されたＩ／Ｏ要求に対応するＩ／Ｏ処理が全て完了したか否かを判定し、
前記複数の第１のキューの各々に登録されたＩ／Ｏ要求に対応するＩ／Ｏ処理が全て完了したと判定された場合、前記第２のフラグを操作することによって、前記第１のキャッシュ領域を前記第３のキャッシュ状態から前記第２のキャッシュ状態に変更することを特徴とする計算機システム。
【請求項４】
請求項２又は請求項３に記載の計算機システムであって、
前記キャッシュドライバは、
前記第１のキャッシュ領域が前記第１のキャッシュ状態から前記第３のキャッシュ状態に変更された後、前記第２のキャッシュ状態である第２のキャッシュ領域を検索し、
前記第２のキャッシュ領域へのデータの書き込みを命令する第２の書込要求を登録する第１のキューを決定し、
前記決定された第１のキューに付与される識別番号とともに、前記第２の書込要求の登録を、前記キャッシュメモリシステムドライバに指示し、
前記キャッシュメモリシステムドライバは、前記第２の書込要求の登録の指示を受け付けた場合、前記キャッシュドライバによって決定された前記第１のキューに前記第２の書込要求を登録することを特徴とする計算機システム。
【請求項５】
請求項２又は請求項３に記載の計算機システムであって、
前記キャッシュドライバは、
前記第１のキャッシュ領域が前記第１のキャッシュ状態から前記第３のキャッシュ状態に変更された後、前記第２のキャッシュ状態である第２のキャッシュ領域を検索し、
前記第２のフラグを操作することによって、前記第２のキャッシュ領域を前記第２のキャッシュ状態から前記第３のキャッシュ状態に変更し、
前記キャッシュメモリシステムドライバから、前記第２の書込要求の完了が通知された場合、前記第１のフラグを操作することによって、前記第２のキャッシュ領域を前記第３のキャッシュ状態から前記第１のキャッシュ状態に変更することを特徴とする計算機システム。
【請求項６】
アプリケーションが稼働するサーバ、及び、前記アプリケーションが使用するデータを格納するストレージシステムを備える計算機システムにおけるキャッシュ管理方法であって、
前記サーバは、第１のプロセッサ、前記第１のプロセッサに接続される第１のメモリ、前記第１のプロセッサに接続され、一時的にデータを格納するキャッシュ領域を提供するキャッシュメモリシステム、前記第１のプロセッサに接続され、前記キャッシュメモリシステムと接続するための接続インタフェース、及び前記第１のプロセッサに接続され他の装置と接続するための第１のネットワークインタフェースを有し、
前記ストレージシステムは、第２のプロセッサ、前記第２のプロセッサに接続される第２のメモリ、及び前記第２のプロセッサに接続され、他の装置と接続するための第２のネットワークインタフェースを含むコントローラ、並びに前記コントローラに接続される複数の記憶装置を有し、
前記第１のメモリは、前記サーバを制御するオペレーティングシステムを実現するプログラムを格納し、
前記第２のメモリは、前記ストレージシステムを制御するストレージ制御部を実現するプログラムを格納し、
前記オペレーティングシステムは、
キャッシュデータを制御するキャッシュドライバ、前記キャッシュメモリシステムに対するＩ／Ｏ処理を制御するキャッシュメモリシステムドライバ、及び前記ストレージシステムに対するＩ／Ｏ処理を制御するストレージシステムドライバを含み、
前記キャッシュメモリシステムドライバは、前記キャッシュメモリシステムに対するＩ／Ｏ要求を登録する第１のキューを二つ以上有し、
前記ストレージシステムドライバは、前記ストレージシステムに対するＩ／Ｏ要求を登録する第２のキューを一つ以上有し、
前記キャッシュ領域は、前記キャッシュ領域からのデータの読み出しが可能であり、かつ、前記キャッシュ領域へのデータの書き込みが禁止される第１のキャッシュ状態、前記キャッシュ領域からのデータの読み出しが禁止され、かつ、前記キャッシュ領域へのデータの書き込みが許可される第２のキャッシュ状態、又は、前記キャッシュ領域からのデータの読み出しが禁止され、かつ、前記キャッシュ領域へのデータの書き込みが禁止される第３のキャッシュ状態のいずれかの状態に切替可能であり、
前記方法は、
前記キャッシュドライバが、前記アプリケーションから、前記ストレージシステムの第１の記憶領域へのデータの書き込みを命令する第１の書込要求の登録指示を受け付けた場合、前記第１の記憶領域に格納されるデータのキャッシュデータを格納する第１のキャッシュ領域が前記第１のキャッシュ状態であるか否かを判定する第１のステップと、
前記キャッシュドライバが、前記第１のキャッシュ領域が前記第１のキャッシュ状態であると判定された場合、前記第１のキャッシュ領域を前記第１のキャッシュ状態から前記第３のキャッシュ状態に変更する第２のステップと、
を含むことを特徴とするキャッシュ管理方法。
【請求項７】
請求項６に記載のキャッシュ管理方法であって、
前記方法は、
前記キャッシュドライバが、前記第１のキャッシュ領域が前記第１のキャッシュ状態から前記第３のキャッシュ状態に変更された時点における前記複数の第１のキューに登録された前記Ｉ／Ｏ要求の実行状態を監視する第３のステップと、
前記キャッシュドライバが、前記複数の第１のキューに登録されたＩ／Ｏ要求に対応するＩ／Ｏ処理が全て完了した場合、前記第１のキャッシュ領域を前記第３のキャッシュ状態から前記第２のキャッシュ状態に変更することによって、当該第１のキャッシュ領域を解放する第４のステップと、
を含むことを特徴とするキャッシュ管理方法。
【請求項８】
請求項７に記載のキャッシュ管理方法であって、
前記キャッシュドライバは、
前記ストレージシステムの記憶領域、前記ストレージシステムの記憶領域に格納されるデータのキャッシュデータが格納される前記キャッシュ領域、前記キャッシュ領域からのデータの読み出しが可能か否かを示す第１のフラグ、及び、前記キャッシュ領域へのデータの書き込みが可能か否かを示す第２のフラグを含むキャッシュ管理情報と、
前記複数の第１のキューに付与された識別子、及び前記複数の第１のキューの各々に登録された前記Ｉ／Ｏ要求の実行状態を示す情報を含むキャッシュキュー状態情報と、を管理し、
前記第２のステップは、
前記第１のフラグを操作することによって、前記第１のキャッシュ領域を前記第１のキャッシュ状態から前記第３のキャッシュ状態に変更するステップと、
前記第１のキャッシュ領域が前記第１のキャッシュ状態から前記第３のキャッシュ状態に変更された時点の前記キャッシュキュー状態情報のコピーをキャッシュキュー完了状態情報として取得するステップと、
前記第１のキャッシュ領域のアドレスを取得するステップと、
前記キャッシュキュー完了状態情報及び前記第１のキャッシュ領域のアドレスを含むキャッシュ解放情報を生成するステップと、を含み、
前記第３のステップは、任意の前記第１のキューに登録された前記Ｉ／Ｏ要求に対応するＩ／Ｏ処理が完了した場合、前記キャッシュキュー状態情報及び前記キャッシュキュー完了状態情報における当該第１のキューの実行状態を更新するステップと、
前記キャッシュキュー完了状態情報に基づいて、前記複数の第１のキューの各々に登録されたＩ／Ｏ要求に対応するＩ／Ｏ処理が全て完了したか否かを判定するステップと、を含み、
前記第４のステップでは、前記複数の第１のキューの各々に登録されたＩ／Ｏ要求に対応するＩ／Ｏ処理が全て完了したと判定された場合、前記第２のフラグを操作することによって、前記第１のキャッシュ領域を前記第３のキャッシュ状態から前記第２のキャッシュ状態に変更することを特徴とするキャッシュ管理方法。
【請求項９】
請求項７又は請求項８に記載のキャッシュ管理方法であって、
前記方法は、
前記キャッシュドライバが、前記第２のステップの後に、前記第２のキャッシュ状態である第２のキャッシュ領域を検索するステップと、
前記第２のキャッシュ領域へのデータの書き込みを命令する第２の書込要求を登録する第１のキューを決定するステップと、
前記決定された第１のキューに付与される識別番号とともに、前記第２の書込要求の登録を、前記キャッシュメモリシステムドライバに指示するステップと、
前記キャッシュメモリシステムドライバが、前記第２の書込要求の登録の指示を受け付けた場合、前記キャッシュドライバによって決定された前記第１のキューに前記第２の書込要求を登録するステップと、を含むことを特徴とするキャッシュ管理方法。
【請求項１０】
請求項７又は請求項８に記載のキャッシュ管理方法であって、
前記方法は、
前記キャッシュドライバが、前記第２のステップの後に、前記第２のキャッシュ状態である第２のキャッシュ領域を検索するステップと、
前記キャッシュドライバが、前記第２のフラグを操作することによって、前記第２のキャッシュ領域を前記第２のキャッシュ状態から前記第３のキャッシュ状態に変更するステップと、
前記キャッシュドライバが、前記キャッシュメモリシステムドライバから、前記第２の書込要求の完了が通知された場合、前記第１のフラグを操作することによって、前記第２のキャッシュ領域を前記第３のキャッシュ状態から前記第１のキャッシュ状態に変更するステップと、を含むことを特徴とするキャッシュ管理方法。
【請求項１１】
アプリケーションが稼働する計算機であって、
前記計算機は、
プロセッサ、
前記プロセッサに接続されるメモリ、
前記プロセッサに接続されるキャッシュメモリシステム、
前記プロセッサに接続され、前記キャッシュメモリシステムと接続するための接続インタフェース、及び、
前記プロセッサに接続され、他の装置と接続するためのネットワークインタフェースを備え、
前記第１のメモリは、前記計算機を制御するオペレーティングシステムを実現するプログラムを格納し、
前記キャッシュメモリシステムは、前記計算機に接続されるストレージシステムに格納されるデータのキャッシュデータを一時的に格納するキャッシュ領域を含み、
前記オペレーティングシステムは、
前記キャッシュデータを制御するキャッシュドライバ、
前記キャッシュメモリシステムに対するＩ／Ｏ処理を制御するキャッシュメモリシステムドライバ、及び、
前記ストレージシステムに対するＩ／Ｏ処理を制御するストレージシステムドライバを含み、
前記キャッシュメモリシステムドライバは、前記キャッシュメモリシステムに対するＩ／Ｏ要求を登録するキューを二つ以上有し、
前記キャッシュ領域は、前記キャッシュ領域からのデータの読み出しが可能であり、かつ、前記キャッシュ領域へのデータの書き込みが禁止される第１のキャッシュ状態、前記キャッシュ領域からのデータの読み出しが禁止され、かつ、前記キャッシュ領域へのデータの書き込みが許可される第２のキャッシュ状態、又は、前記キャッシュ領域からのデータの読み出しが禁止され、かつ、前記キャッシュ領域へのデータの書き込みが禁止される第３のキャッシュ状態のいずれかの状態に切替可能であり、
前記キャッシュドライバは、
前記アプリケーションから、前記ストレージシステムの第１の記憶領域へのデータの書き込みを命令する第１の書込要求の登録指示を受け付けた場合、前記第１の記憶領域に格納されるデータのキャッシュデータを格納する第１のキャッシュ領域が前記第１のキャッシュ状態であるか否かを判定し、
前記第１のキャッシュ領域が前記第１のキャッシュ状態であると判定された場合、前記第１のキャッシュ領域を前記第１のキャッシュ状態から前記第３のキャッシュ状態に変更することを特徴とする計算機。
【請求項１２】
請求項１１に記載の計算機であって、
前記キャッシュドライバは、
前記第１のキャッシュ領域が前記第１のキャッシュ状態から前記第３のキャッシュ状態に変更された時点における前記複数の第１のキューに登録された前記Ｉ／Ｏ要求の実行状態を監視し、
前記複数の第１のキューに登録されたＩ／Ｏ要求に対応するＩ／Ｏ処理が全て完了した場合、前記第１のキャッシュ領域を前記第３のキャッシュ状態から前記第２のキャッシュ状態に変更することによって、当該第１のキャッシュ領域を解放することを特徴とする計算機。
【請求項１３】
請求項１２に記載の計算機であって、
前記キャッシュドライバは、
前記ストレージシステムの記憶領域、前記ストレージシステムの記憶領域に格納されるデータのキャッシュデータが格納される前記キャッシュ領域、前記キャッシュ領域からのデータの読み出しが可能か否かを示す第１のフラグ、及び、前記キャッシュ領域へのデータの書き込みが可能か否かを示す第２のフラグを含むキャッシュ管理情報と、
前記複数の第１のキューに付与された識別子、及び前記複数の第１のキューの各々に登録された前記Ｉ／Ｏ要求の実行状態を示す情報を含むキャッシュキュー状態情報と、を管理し、
前記キャッシュドライバは、
前記第１のフラグを操作することによって、前記第１のキャッシュ領域を前記第１のキャッシュ状態から前記第３のキャッシュ状態に変更し、
前記第１のキャッシュ領域が前記第１のキャッシュ状態から前記第３のキャッシュ状態に変更された時点の前記キャッシュキュー状態情報のコピーをキャッシュキュー完了状態情報として取得し、
前記第１のキャッシュ領域のアドレスを取得し、
前記キャッシュキュー完了状態情報及び前記第１のキャッシュ領域のアドレスを含むキャッシュ解放情報を生成し、
任意の前記第１のキューに登録された前記Ｉ／Ｏ要求に対応するＩ／Ｏ処理が完了した場合、前記キャッシュキュー状態情報及び前記キャッシュキュー完了状態情報における当該第１のキューの実行状態を更新し、
前記キャッシュキュー完了状態情報に基づいて、前記複数の第１のキューの各々に登録されたＩ／Ｏ要求に対応するＩ／Ｏ処理が全て完了したか否かを判定し、
前記複数の第１のキューの各々に登録されたＩ／Ｏ要求に対応するＩ／Ｏ処理が全て完了したと判定された場合、前記第２のフラグを操作することによって、前記第１のキャッシュ領域を前記第３のキャッシュ状態から前記第２のキャッシュ状態に変更することを特徴とする計算機。
【請求項１４】
請求項１２又は請求項１３に記載の計算機であって、
前記キャッシュドライバは、
前記第１のキャッシュ領域が前記第１のキャッシュ状態から前記第３のキャッシュ状態に変更された後、前記第２のキャッシュ状態である第２のキャッシュ領域を検索し、
前記第２のキャッシュ領域へのデータの書き込みを命令する第２の書込要求を登録する第１のキューを決定し、
前記決定された第１のキューに付与される識別番号とともに、前記第２の書込要求の登録を、前記キャッシュメモリシステムドライバに指示し、
前記キャッシュメモリシステムドライバは、前記第２の書込要求の登録の指示を受け付けた場合、前記キャッシュドライバによって決定された前記第１のキューに前記第２の書込要求を登録することを特徴とする計算機。
【請求項１５】
請求項１２又は請求項１３に記載の計算機であって、
前記キャッシュドライバは、
前記第１のキャッシュ領域が前記第１のキャッシュ状態から前記第３のキャッシュ状態に変更された後、前記第２のキャッシュ状態である第２のキャッシュ領域を検索し、
前記第２のフラグを操作することによって、当該第２のキャッシュ領域を前記第２のキャッシュ状態から前記第３のキャッシュ状態に変更し、
前記キャッシュメモリシステムドライバから、前記第２の書込要求の完了が通知された場合、前記第１のフラグを操作することによって、前記第２のキャッシュ領域を前記第３のキャッシュ状態から前記第１のキャッシュ状態に変更することを特徴とする計算機。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、サーバ及びストレージシステムが有するキャッシュ領域を用いたＩ／Ｏ処理におけるキャッシュ制御に関する。
【背景技術】
【０００２】
近年、サーバや共有ストレージへのフラッシュメモリ等の不揮発性メモリの適用が進んでいる。これに対し、ストレージネットワーキングの発展を目的とした業界団であるＳＮＩＡ（Ｓｔｏｒａｇｅ  Ｎｅｔｗｏｒｋｉｎｇ  Ｉｎｄｕｓｔｏｒｙ  Ａｓｓｏｓｉａｔｉｏｎ）は、ＮＶＭｅ（Ｎｏｎ―Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ）という、ＰＣＩ−ＳＩＧが策定したＰＣＩＥｘｐｒｅｓｓ（以下、ＰＣＩｅ）Ｉ／Ｆを活用した不揮発性メモリ向けのＩ／Ｏスタックを提案している。
【０００３】
ＮＶＭｅは、不揮発性メモリの高速性を活用するために、既存のＩ／Ｏスタックと比べてＩ／Ｏ処理に対するＣＰＵ負荷を削減したＩ／Ｏスタックである。そのため、ＮＶＭｅを活用する事によって、ＣＰＵ負荷がボトルネックのアプリケーションの高速化が実現できる。今後、アプリケーション、サーバに搭載された不揮発性メモリ、ストレージシステムのそれぞれがＮＶＭｅに対応し、ＮＶＭｅの活用が進むと考えられる。
【０００４】
一方、近年、サーバに不揮発性メモリを搭載し、共有ストレージシステムのキャッシュとして活用する利用形態が広まっている（例えば、特許文献１参照）。
【０００５】
特許文献１には、ＨＤＤのキャッシュとしてフラッシュを用いた構成が開示されている。本構成においては、アプリケーションとサーバ不揮発性メモリ間、アプリケーションとストレージ間いずれも既存のＩ／Ｏスタックが用いられている。
【０００６】
以上を鑑みると、ＮＶＭｅ対応のアプリケーション及びＮＶＭｅ対応のストレージシステムを有するシステムに対し、ＮＶＭｅ対応の不揮発性メモリをキャッシュとして扱うシステムが今後必要となると考えられる。すなわち、アプリケーションと不揮発性メモリとの間及びアプリケーションとストレージとの間のＩ／Ｏスタックが共にＮＶＭｅに対応したシステムが今後登場すると考えられる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１２−７８９３９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ＮＶＭｅでは、Ｉ／Ｏの処理は、キューへＩ／Ｏ要求の登録、及びキューに登録されたＩ／Ｏ要求の実行の二つの処理に分けて行われる。前述した二つの処理は、アプリケーションからの指示に基づいて実行される。
【０００９】
例えば、アプリケーションがキューへのＲｅａｄ要求の登録を指示すると、ＮＶＭｅによって、キューにＲｅａｄ要求が登録される。この段階では、デバイスへＲｅａｄ処理は実行されない。その後、アプリケーションからキューに登録されたＲｅａｄ要求の実行指示を受け付けると、ＮＶＭｅによって、デバイスへＲｅａｄ処理が実行される。
【００１０】
ＮＶＭｅ対応のデバイスは、複数のキューを持ち、複数のキューを用いて、複数のＩ／Ｏ処理を並列実行することができる。
【００１１】
ここで、ＮＶＭｅ対応の不揮発性メモリをキャッシュとして用いるシステムにおいて、複数のキューの間で同一アドレスへのＩ／Ｏ要求が登録された場合、Ｉ／Ｏ要求の実行順序によっては、データ化けが発生するという課題が存在する。以下、具体的な例を用いてデータ化けの発生について説明する。
【００１２】
この例では、一つのアプリケーションが、第１のキュー及び第２のキューを用いてＩ／Ｏ処理を実行しているものとする。また、不揮発性メモリのアドレス「０ｘ１０００」に対応するキャッシュ領域にＩ／Ｏ要求の対象のデータが存在するものとする。
【００１３】
まず、アプリケーションが、第１のキューにＲｅａｄ要求を登録する。この段階では、Ｒｅａｄ要求は実行されていない。Ｒｅａｄ要求が実行されると、不揮発性メモリのアドレス「０ｘ１０００」に対応するキャッシュ領域からデータが読み出されることとなる。
【００１４】
次に、アプリケーションが、第２のキューにＷｒｉｔｅ要求を登録する。この時、サーバ不揮発性メモリのアドレス「０ｘ１０００」に、書き込むデータをキャッシュとして登録することになったとする。
【００１５】
ここで、アプリケーションが、第２のキューに登録されたＷｒｉｔｅ要求の実行を指示し、その後、第１のキューに登録されたＲｅａｄ要求の実行を指示するものとする。
【００１６】
この結果、アドレス「０ｘ１０００」に対応するキャッシュ領域には新しいデータが格納され、当該新しいデータが読み出されることとなる。そのため、本来、更新前のデータが読み出される必要があるが、更新後のデータが読み出されてしまう。すなわち、データ化けが発生する結果となる。
【００１７】
前述したようなデータ化けが発生する理由は、同一アドレス（同一のキャッシュ領域）に対するＲｅａｄ要求及びＷｒｉｔｅ要求の実行順序が入れ替わることによって発生する。
【００１８】
本発明は、ＮＶＭｅに対応した不揮発性メモリをキャッシュとして利用するシステムにおいて、Ｉ／Ｏ要求の実行順の入れ替わりによるデータ化けの発生を解決するシステム、方法及び装置を提供することを目的とする。
【課題を解決するための手段】
【００１９】
本発明の代表的な一例を示せば以下の通りである。すなわち、アプリケーションが稼働するサーバ、及び、前記アプリケーションが使用するデータを格納するストレージシステムを備える計算機システムであって、前記サーバは、第１のプロセッサ、前記第１のプロセッサに接続される第１のメモリ、前記第１のプロセッサに接続され、一時的にデータを格納するキャッシュ領域を提供するキャッシュメモリシステム、前記第１のプロセッサに接続され、前記キャッシュメモリシステムと接続するための接続インタフェース、及び前記第１のプロセッサに接続され、他の装置と接続するための第１のネットワークインタフェースを有し、前記ストレージシステムは、第２のプロセッサ、前記第２のプロセッサに接続される第２のメモリ、及び前記第２のプロセッサに接続され、他の装置と接続するための第２のネットワークインタフェースを含むコントローラ、並びに前記コントローラと接続される複数の記憶装置を有し、前記第１のメモリは、前記サーバを制御するオペレーティングシステムを実現するプログラムを格納し、前記第２のメモリは、前記ストレージシステムを制御するストレージ制御部を実現するプログラムを格納し、前記オペレーティングシステムは、キャッシュデータを制御するキャッシュドライバ、前記キャッシュメモリシステムに対するＩ／Ｏ処理を制御するキャッシュメモリシステムドライバ、及び前記ストレージシステムに対するＩ／Ｏ処理を制御するストレージシステムドライバを含み、前記キャッシュメモリシステムドライバは、前記キャッシュメモリシステムに対するＩ／Ｏ要求を登録する第１のキューを二つ以上有し、前記ストレージシステムドライバは、前記ストレージシステムに対するＩ／Ｏ要求を登録する第２のキューを一つ以上有し、前記キャッシュ領域は、前記キャッシュ領域からのデータの読み出しが可能であり、かつ、前記キャッシュ領域へのデータの書き込みが禁止される第１のキャッシュ状態、前記キャッシュ領域からのデータの読み出しが禁止され、かつ、前記キャッシュ領域へのデータの書き込みが許可される第２のキャッシュ状態、又は、前記キャッシュ領域からのデータの読み出しが禁止され、かつ、前記キャッシュ領域へのデータの書き込みが禁止される第３のキャッシュ状態のいずれかの状態に切替可能であり、前記キャッシュドライバは、前記アプリケーションから、前記ストレージシステムの第１の記憶領域へのデータの書き込みを命令する第１の書込要求の登録指示を受け付けた場合、前記第１の記憶領域に格納されるデータのキャッシュデータを格納する第１のキャッシュ領域が前記第１のキャッシュ状態であるか否かを判定し、前記第１のキャッシュ領域が前記第１のキャッシュ状態であると判定された場合、前記第１のキャッシュ領域を前記第１のキャッシュ状態から前記第３のキャッシュ状態に変更することを特徴とする。
【発明の効果】
【００２０】
本発明によれば、ＮＶＭｅ対応のアプリケーション及びＮＶＭｅ対応のストレージシステムを備える計算機システムにおいて、キャッシュドライバは、キャッシュデータが格納されるキャッシュ領域への書込要求を受け付けた場合、当該キャッシュ領域のキャッシュ状態を変更することによって、キャッシュ領域に対する書き込みを禁止することができる。これによって、Ｉ／Ｏ要求の実行順番の入れ替われによって発生するデータ化けの問題を解消することができる。
【００２１】
上記した以外の課題、構成及び効果は、以下の実施例の説明により明らかにされる。
【図面の簡単な説明】
【００２２】
【図１】本発明の実施例１における計算機システムのソフトウェア構成の一例を示すブロック図である。
【図２】本発明の実施例１における計算機システムのハードウェア構成の一例を示す説明図である。
【図３】本発明の実施例１におけるキャッシュ管理テーブルの一例を示す説明図である。
【図４】本発明の実施例１におけるキャッシュキュー状態テーブルの一例を示す説明図である。
【図５】本発明の実施例１のおけるキュー変換テーブルの一例を示す説明図である。
【図６】本発明の実施例１におけるキャッシュ解放情報の一例を示す説明図である。
【図７】本発明の実施例１における実行キューの構成例を示す説明図である。
【図８】本発明の実施例１のおける完了キューの構成例を示す説明図である。
【図９】本発明の実施例におけるＩ／Ｏ処理の概要を説明するフローチャートである。
【図１０】本発明の実施例１におけるＩ／Ｏ要求の登録処理の一例を説明するフローチャートである。
【図１１】本発明の実施例１におけるＩ／Ｏ要求の登録処理の一例を説明するフローチャートである。
【図１２】本発明の実施例１におけるキャッシュ登録処理を説明するフローチャートである。
【図１３】本発明の実施例における実行キューに登録されたＩ／Ｏ要求に対応するＩ／Ｏ処理を説明するフローチャートである。
【図１４】本発明の実施例１におけるキャッシュ解放処理の一例を説明するフローチャートである。
【図１５】本発明の実施例１におけるキャッシュ管理テーブル及びキャッシュ解放情報の初期化処理を説明するフローチャートである。
【図１６】本発明の実施例１におけるアプリケーションがキューを生成する場合の流れを説明するフローチャートを示す。
【図１７】本発明の実施例１の変形例におけるキャッシュ解放処理の一例を説明するフローチャートである。
【発明を実施するための形態】
【００２３】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。
【実施例１】
【００２４】
図１は、本発明の実施例１における計算機システムのソフトウェア構成の一例を示すブロック図である。図２は、本発明の実施例１における計算機システムのハードウェア構成の一例を示す説明図である。
【００２５】
本発明の計算機システムは、サーバ装置１０及び共有ストレージシステム３００から構成される。サーバ装置１０及び共有ストレージシステム３００は、ネットワーク４００を介して接続される。ネットワーク４００は、ＷＡＮ、ＬＡＮ及びＳＡＮ等が考えられる。本発明は、ネットワークの種類に限定されない。なお、サーバ装置１０及び共有ストレージシステム３００は、直接接続されていてもよい。
【００２６】
サーバ装置１０は、複数のサーバモジュール１００、及びキャッシュメモリシステム２００を備える。
【００２７】
サーバモジュール１００は、所定のアプリケーション１１０を実行する計算機であり、プロセッサ１０１、メモリ１０２、ネットワークインタフェース１０３、及び接続インタフェース１０４を備え、各構成は内部経路を介して互いに接続される。なお、サーバモジュール１００は、図示しない、記憶媒体、入出力装置等の他の構成を備えてもよい。
【００２８】
プロセッサ１０１は、メモリ１０２に格納されるプログラムを実行する。プロセッサ１０１が、メモリ１０２に格納されるプログラムを実行することによって、サーバモジュール１００が有する機能が実現される。
【００２９】
メモリ１０２は、プロセッサ１０１によって実行されるプログラム及び当該プログラムの実行に必要な情報を格納する。また、メモリ１０２は、プログラムが使用するワークエリアを含む。メモリ１０２に格納されるプログラム及び情報については、後述する。
【００３０】
ネットワークインタフェース１０３は、ネットワーク４００を介して他の装置と接続するためのインタフェースである。
【００３１】
接続インタフェース１０４は、キャッシュメモリシステム２００に接続するためのインタフェースである。本実施例では、サーバモジュール１００及びキャッシュメモリシステム２００は、ＰＣＩｅバスとの通信経路を介して接続されているものとする。この場合、ＰＣＩｅインタフェースが接続インタフェース１０４として用いられる。
【００３２】
キャッシュメモリシステム２００は、サーバモジュール１００が使用する記憶領域を提供する。キャッシュメモリシステム２００は、フラッシュメモリ等の不揮発性メモリ（不揮発性の記憶素子）から構成される。なお、キャッシュメモリシステム２００は、不揮発性メモリに対する制御を行うためのコントローラ（図示省略）を備える。
【００３３】
本実施例では、キャッシュメモリシステム２００が提供する記憶領域には、ＬＵ（Ｌｏｇｉｃａｌ  Ｕｎｉｔ）の論理ブロック単位のキャッシュデータが格納される。なお、ブロック単位のデータの管理方法としては、バッファキャッシュを用いることが考えられる。バッファキャッシュは、キャッシュメモリシステム２００の記憶領域にバッファページを割り当て、所定のブロックサイズのブロックバッファに当該バッファページを分割することによって生成される。
【００３４】
バッファキャッシュには、共有ストレージシステム３００における論理ブロック単位のデータの格納場所を特定するためのバッファヘッドが含まれる。なお、ＬＵは、後述するように共有ストレージシステム３００によって提供される。
【００３５】
以下の説明では、論理ブロック単位のデータをブロックデータ、論理ブロック単位の記憶領域をキャッシュ領域とも記載する。
【００３６】
また、本実施例では、複数のサーバモジュール１００が、キャッシュメモリシステム２００を共有して使用するものとする。なお、本発明はこれに限定されず、一つのサーバモジュール１００に一つのキャッシュメモリシステム２００を接続する構成でもよい。また、サーバモジュール１００内部にキャッシュメモリシステム２００が存在してもよい。さらに、サーバ装置１０の外部にキャッシュメモリシステム２００が存在してもよい。
【００３７】
また、本実施例では、不揮発性メモリから構成されるキャッシュメモリシステム２００を用いているが、揮発性メモリから構成されるキャッシュメモリシステムを用いてもよい。
【００３８】
共有ストレージシステム３００は、各サーバモジュール１００上で実行されるアプリケーション１１０が使用するデータ等を格納する記憶領域を提供する。共有ストレージシステム３００は、コントローラ３０１及び複数の記憶媒体３０６を備える。
【００３９】
コントローラ３０１は、共有ストレージシステム３００を制御する。コントローラ３０１は、プロセッサ３０２、メモリ３０３、ネットワークインタフェース３０４、及びストレージインタフェース３０５を備え、各構成は内部経路を介して互いに接続される。
【００４０】
プロセッサ３０２は、メモリ３０３に格納されるプログラムを実行する。プロセッサ３０２が、メモリ３０３に格納されるプログラムを実行することによって、共有ストレージシステム３００が有する機能が実現される。
【００４１】
メモリ３０３は、プロセッサ３０２によって実行されるプログラム及び当該プログラムの実行に必要な情報を格納する。また、メモリ３０３は、プログラムが使用するワークエリアを含む。メモリ３０３に格納されるプログラム及び情報については、後述する。
【００４２】
ネットワークインタフェース３０４は、ネットワーク４００を介して他の装置と接続するためのインタフェースである。
【００４３】
ストレージインタフェース３０５は、記憶媒体３０６に接続するためのインタフェースである。記憶媒体３０６は、データを格納する装置である。記憶媒体３０６は、例えばＨＤＤ又はＳＳＤが考えられる。ただし、データを格納できる装置であればどのような装置であってもよい。
【００４４】
次に、サーバモジュール１００、キャッシュメモリシステム２００、及び共有ストレージシステム３００のソフトウェア構成について説明する。
【００４５】
サーバモジュール１００のメモリ１０２は、複数のアプリケーション１１０、キューイングインタフェース１２０、及びＯＳ１３０を実現するプログラムを格納する。当該プログラムは、プロセッサ１０１によって実行される。
【００４６】
アプリケーション１１０は、所定の業務を実行する。なお、本発明は、アプリケーション１１０の種類に依存しない。
【００４７】
キューイングインタフェース１２０は、アプリケーション１１０と、キャッシュメモリシステム２００及び共有ストレージシステム３００との間のＩ／Ｏを制御する。具体的には、キューにＩ／Ｏ要求を登録し、また、キューに登録されたＩ／Ｏ要求の実行を制御する。本実施例では、キューイングインタフェース１２０として、ＮＶＭｅに準拠したインタフェースを用いるものとする。
【００４８】
なお、キューイングインタフェース１２０は、アプリケーション１１０又はＯＳ１３０内部に含まれもよい。また、キューイングインタフェース１２０は、ＮＶＭｅに準拠したインタフェースに限定されない。
【００４９】
ＯＳ１３０は、サーバモジュール１００全体を制御する。ＯＳ１３０は、キャッシュドライバ１４０、キャッシュメモリシステムドライバ１５０、及び共有ストレージシステムドライバ１６０を含む。
【００５０】
ＯＳ１３０は、共有ストレージシステム３００によって提供されるＬＵを所定のファイルシステムにフォーマットする。このとき、ＯＳ１３０は、ＬＵを所定の論理ブロックに分割し、各論理ブロックに識別番号を割り当てる。ファイルシステムは、一つ以上のブロックデータから構成されるデータをファイルとして管理する。
【００５１】
なお、ＯＳ１３０に含まれるファイルシステム等は、公知のものであるため説明を省略する。
【００５２】
キャッシュドライバ１４０は、キャッシュ領域におけるキャッシュデータを制御するドライバである。例えば、アプリケーション１１０からＲｅａｄ要求を受け付けた場合、以下のようなキャッシュ制御処理を実行する。
【００５３】
まず、キャッシュドライバ１４０は、Ｒｅａｄ対象のデータがキャッシュメモリシステム２００のキャッシュ領域に格納されているか否かを判定する。キャッシュ領域にＲｅａｄ対象のデータが格納されている場合、キャッシュドライバ１４０は、キャッシュ領域から当該データを読み出して、読み出されたデータをアプリケーション１１０に応答する。キャッシュ領域にＲｅａｄ対象のデータが格納されていない場合、キャッシュドライバ１４０は、共有ストレージシステム３００へのＲｅａｄ要求を登録し、当該Ｒｅａｄ要求に基づいて、共有ストレージシステム３００から読み出されたデータをアプリケーション１１０に応答する。
【００５４】
本実施例のキャッシュドライバ１４０は、キャッシュ管理テーブル１４１、複数のキャッシュキュー状態テーブル１４２、キュー変換テーブル１４３、及び複数のキャッシュ解放情報１４４を有する。
【００５５】
キャッシュ管理テーブル１４１は、キャッシュメモリシステム２００のキャッシュ領域を管理するための情報を格納する。キャッシュ管理テーブル１４１の詳細については、図３を用いて後述する。
【００５６】
キャッシュキュー状態テーブル１４２は、キャッシュメモリシステムドライバ１５０が保持するキューの状態を管理するための情報を格納する。キャッシュキュー状態テーブル１４２の詳細については、図４を用いて後述する。
【００５７】
なお、キャッシュキュー状態テーブル１４２の数は、ＯＳ１３０がキャッシュメモリシステム２００にアクセス時に用いるデバイスの数と一致するものとする。デバイスは、ＯＳ１３０が認識可能なデバイスであり、物理的なデバイス、又は仮想的なデバイスのいずれであってもよい。本発明は、キャッシュキュー状態テーブル１４２の数に限定されない。
【００５８】
キュー変換テーブル１４３は、アプリケーションキューと、キャッシュメモリシステムドライバ１５０のキュー及び共有ストレージシステムドライバ１６０のキューとの対応関係を示す情報を格納する。キュー変換テーブル１４３の詳細については、図５を用いて後述する。
【００５９】
ここで、アプリケーションキューは、キューイングインタフェース１２０によってアプリケーション１１０に提供される。本実施例では、キューイングインタフェース１２０が、一つのアプリケーション１１０に対して一つ以上のアプリケーションキューを提供するものとする。
【００６０】
キャッシュ解放情報１４４は、キャッシュ領域の解放時に用いられる情報を格納する。キャッシュ解放情報１４４の詳細については、図６を用いて後述する。
【００６１】
なお、キャッシュ解放情報１４４の数は、予め設定された数であるものとする。例えば、キャッシュキューの数に対応させてキャッシュ解放情報１４４の数を設定する方法が考えられる。本発明は、キャッシュ解放情報１４４の数に限定されない。
【００６２】
キャッシュメモリシステムドライバ１５０は、キャッシュメモリシステム２００へのアクセスを制御する。キャッシュメモリシステムドライバ１５０は、実行キュー１５１及び完了キュー１５２のペアを複数有する。以下の説明では、実行キュー１５１及び完了キュー１５２のペアをキャッシュキューとも記載する。
【００６３】
実行キュー１５１は、Ｉ／Ｏ要求を登録するためのキューである。完了キュー１５２は、Ｉ／Ｏ要求に対する応答を登録するためのキューである。本実施例では、一つのアプリケーション１１０に対して、実行キュー１５１及び完了キュー１５２のペア（キャッシュキュー）が一つ以上割り当てられるものとする。これによって、効率的なキャッシュ制御を実現することができる。
【００６４】
図１に示す例では、アプリケーション１１０−１には、実行キュー１５１−１及び完了キュー１５２−１のペアが割り当てられ、アプリケーション１１０−ｎには、実行キュー１５１−ｎ及び完了キュー１５２−ｎのペアが割り当てられる。
【００６５】
共有ストレージシステムドライバ１６０は、共有ストレージシステム３００へのアクセスを制御する。共有ストレージシステムドライバ１６０は、実行キュー１６１及び完了キューのペアを一つ以上有する。以下の説明では、実行キュー１６１及び完了キュー１６２のペアをストレージキューとも記載する。
【００６６】
キャッシュメモリシステム２００のコントローラは、複数のキャッシュキューの各々に対応した複数の実行レジスタ２１０を有する。実行レジスタ２１０の数は、キャッシュキューの数（ペアの数）と同一である。図１に示す例では、実行キュー１５１−１及び完了キュー１５２−１のペアには、実行レジスタ２１０−１が対応し、実行キュー１５１−ｎ及び完了キュー１５２−ｎのペアには、実行レジスタ２１０−ｎが対応する。
【００６７】
共有ストレージシステム３００のメモリ３０３は、ストレージ制御部３１０を実現するプログラムを格納する。
【００６８】
ストレージ制御部３１０は、共有ストレージシステム３００を制御する。本実施例では、複数の記憶媒体３０６を用いてＲＡＩＤが構成される。ストレージ制御部３１０は、ＲＡＩＤボリュームを論理的に分割することによって、複数のＬＵ（Ｌｏｇｉｃａｌ  Ｕｎｉｔ）を生成し、生成された複数のＬＵをサーバモジュール１００に提供する。また、ストレージ制御部３１０は、ＬＵと記憶媒体３０６との対応関係を示す管理情報を有する。
【００６９】
また、共有ストレージシステム３００のコントローラ３０１は、共有ストレージシステムドライバ１６０が有する実行キュー１６１及び完了キュー１６２のペアに対応する実行レジスタ３２０を有する。
【００７０】
ストレージ制御部３１０は、実行レジスタ３２０を介してサーバモジュール１００からＬＵへのＩ／Ｏ要求を受信した場合、管理情報に基づいてＬＵを構成する記憶領域（論理ブロック）を提供する記憶媒体３０６にアクセスする。
【００７１】
なお、ストレージ制御部３１０は、ＬＵの管理機能、データ転送機能、及びキャッシュ制御機能等の各種機能を有するが、公知の技術であるため詳細な説明を省略する。
【００７２】
図３は、本発明の実施例１におけるキャッシュ管理テーブル１４１の一例を示す説明図である。
【００７３】
キャッシュ管理テーブル１４１は、キャッシュメモリアドレス１４１１、共有ストレージシステムアドレス１４１２、データ有効ビット１４１３、及び書込有効ビット１４１４を含む。
【００７４】
キャッシュメモリアドレス１４１１は、キャッシュメモリシステム２００のキャッシュ領域の先頭アドレスである。共有ストレージシステムアドレス１４１２は、キャッシュ領域に格納されたデータの共有ストレージシステム３００における格納位置、すなわち、記憶領域の先頭アドレスである。
【００７５】
図３に示す例では、一つ目のエントリは、共有ストレージシステム３００のアドレス「０ｘ２０００」に対応する記憶領域に格納されるデータが、キャッシュメモリシステム２００のアドレス「０ｘ１０００」のキャッシュ領域に格納されていることを表す。
【００７６】
データ有効ビット１４１３は、キャッシュメモリアドレス１４１１に対応するキャッシュ領域からデータを読み出せるか否か示すビットである。すなわち、データ有効ビット１４１３は、キャッシュ領域に読み出し可能なデータが格納されているか否かを示すビットである。
【００７７】
データ有効ビット１４１３が「０」の場合、キャッシュメモリアドレス１４１１に対応するキャッシュ領域からデータが読み出せないことを示す。本実施例では、キャッシュ領域にデータが格納されていない場合、又は、キャッシュメモリアドレス１４１１に対応するキャッシュ領域にデータが格納されているが、読み出しができない場合に、データ有効ビット１４１３が「０」に設定される。
【００７８】
一方、データ有効ビット１４１３が「１」の場合、キャッシュメモリアドレス１４１１に対応するキャッシュ領域からデータを読み出せることを示す。すなわち、共有ストレージシステムアドレス１４１２に対応する記憶領域に格納されるデータが、キャッシュメモリアドレス１４１１に対応するキャッシュ領域に格納されていることを示す。
【００７９】
書込有効ビット１４１４は、キャッシュメモリアドレス１４１１に対応するキャッシュ領域にデータの書き込みが可能か否かを示すビットである。
【００８０】
書込有効ビット１４１４が「０」の場合、キャッシュメモリアドレス１４１１に対応するキャッシュ領域への書き込みができないことを示す。一方、書込有効ビット１４１４が「１」の場合、キャッシュメモリアドレス１４１１に対応するキャッシュ領域への書込が可能であることを示す。
【００８１】
本実施例では、キャッシュ領域は、三つの状態に切り替えることができる。
【００８２】
一つ目の状態は、キャッシュ領域へのＲｅａｄ要求が許可され、かつ、キャッシュ領域へのＷｒｉｔｅ要求が禁止される第１のキャッシュ状態である。第１のキャッシュ状態では、データ有効ビット１４１３が「１」、かつ、書込有効ビット１４１４が「０」となる。
【００８３】
二つ目の状態は、キャッシュ領域へのＲｅａｄ要求が禁止され、かつ、キャッシュ領域へのＷｒｉｔｅ要求が許可される第２のキャッシュ状態である。第２のキャッシュ状態では、データ有効ビット１４１３が「０」、かつ、書込有効ビット１４１４が「１」となる。
【００８４】
三つ目の状態は、キャッシュ領域へのＲｅａｄ要求が禁止され、かつ、キャッシュ領域へのＷｒｉｔｅ要求が禁止される第３のキャッシュ状態である。第３のキャッシュ状態では、データ有効ビット１４１３が「０」、かつ、書込有効ビット１４１４が「０」となる。
【００８５】
後述するように、キャッシュドライバ１４０は、データ化けを回避するために、データ有効ビット１４１３及び書込有効ビット１４１４の両方が「１」とならないように制御する。
【００８６】
図４は、本発明の実施例１におけるキャッシュキュー状態テーブル１４２の一例を示す説明図である。
【００８７】
キャッシュキュー状態テーブル１４２は、キャッシュキュー番号１４２１及びキュー実行待ちビット１４２２を含む。本実施例では、キャッシュキュー状態テーブル１４２は、実行キュー１５１及び完了キュー１５２のペア、すなわち、キャッシュキュー毎に一つのエントリを持つ。
【００８８】
キャッシュキュー番号１４２１は、実行キュー１５１及び完了キュー１５２のペア、すなわち、キャッシュキューに付与される識別番号である。また、本実施例では、実行キュー１５１及び完了キュー１５２も、キャッシュキュー番号１４２１によって識別できるものとする。すなわち、実行キュー１５１及び完了キュー１５２には、キャッシュキュー番号１４２１に対応する識別番号が付与される。
【００８９】
キュー実行待ちビット１４２２は、実行キュー１５１に登録され、かつ、実行されていないＩ／Ｏ要求が存在するか否かを示すビットである。
【００９０】
キュー実行待ちビット１４２２が「０」の場合、実行キュー１５１に、実行されていないＩ／Ｏ要求が存在しないことを示す。一方、キュー実行待ちビット１４２２が「１」の場合、実行キュー１５１に、実行されていないＩ／Ｏ要求が存在することを示す。
【００９１】
図５は、本発明の実施例１のおけるキュー変換テーブル１４３の一例を示す説明図である。
【００９２】
キュー変換テーブル１４３は、アプリケーションキュー番号１４３１、キャッシュキュー番号１４３２、及びストレージキュー番号１４３３を含む。本実施例では、キュー変換テーブル１４３は、アプリケーションキュー毎に一つのエントリを持つ。
【００９３】
アプリケーションキュー番号１４３１は、アプリケーションキューの識別番号である。キャッシュキュー番号１４３２は、キャッシュキューの識別番号である。ストレージキュー番号１４３３は、ストレージキューの識別番号である。
【００９４】
本実施例では、キャッシュドライバ１４０は、キュー変換テーブル１４３を用いて、アプリケーション１１０から受け付けたＩ／Ｏ要求を、キャッシュメモリシステム２００又は共有ストレージシステム３００へのＩ／Ｏ要求に変換する。具体的には、以下のような処理が実行される。
【００９５】
まず、アプリケーション１１０は、キューイングインタフェース１２０を介して、アプリケーションキュー番号を含むＩ／Ｏ要求の登録を指示する。
【００９６】
キャッシュドライバ１４０は、キャッシュメモリシステム２００へのＩ／Ｏ要求を受け付けた場合、キュー変換テーブル１４３のアプリケーションキュー番号１４３１を参照し、入力されたアプリケーションキュー番号に対応するエントリを検索する。
【００９７】
キャッシュドライバ１４０は、検索されたエントリのキャッシュキュー番号１４３２を用いてキャッシュメモリシステムドライバ１５０に対するＩ／Ｏ要求の登録指示に変換する。
【００９８】
また、キャッシュドライバ１４０は、共有ストレージシステム３００へのＩ／Ｏ要求を受け付けた場合、キュー変換テーブル１４３のアプリケーションキュー番号１４３１を参照し、入力されたアプリケーションキュー番号に対応するエントリを検索する。
【００９９】
キャッシュドライバ１４０は、検索されたエントリのストレージキュー番号１４３３を用いて共有ストレージシステムドライバ１６０に対するＩ／Ｏ要求の登録指示に変換する。
【０１００】
図６は、本発明の実施例１におけるキャッシュ解放情報１４４の一例を示す説明図である。
【０１０１】
キャッシュ解放情報１４４は、情報有効ビット１４４１０、キャッシュキュー完了状態テーブル１４４２０、及び解放対象アドレス１４４３０を含む。
【０１０２】
情報有効ビット１４４１０は、キャッシュキュー完了状態テーブル１４４２０が有効であるか否かを示す情報である。また、情報有効ビット１４４１０は、キャッシュ解放情報１４４が使用中であるか否かを示す情報でもある。
【０１０３】
情報有効ビット１４４１０が「０」の場合、キャッシュキュー完了状態テーブル１４４２０が有効でないこと、及びキャッシュ解放情報１４４が使用されていないことを示す。一方、情報有効ビット１４４１０が「１」の場合、キャッシュキュー完了状態テーブル１４４２０が有効であること、及びキャッシュ解放情報１４４が使用されていることを示す。
【０１０４】
キャッシュキュー完了状態テーブル１４４２０は、キャッシュ解放時におけるキャッシュドライバ１４０が有するキャッシュキューの状態を示す情報を格納する。すなわち、キャッシュキュー完了状態テーブル１４４２０は、キャッシュ解放時におけるキャッシュキュー状態テーブル１４２のコピーに対応する。
【０１０５】
具体的には、キャッシュキュー完了状態テーブル１４４２０は、キャッシュキュー番号１４４２１及びキュー実行待ちビット１４４２２を含む。キャッシュキュー番号１４４２１及びキュー実行待ちビット１４４２２は、キャッシュキュー番号１４２１及びキュー実行待ちビット１４２２と同一のものであるため説明を省略する。
【０１０６】
解放対象アドレス１４４３０は、解放対象のキャッシュ領域のアドレスである。
【０１０７】
キャッシュドライバ１４０は、後述するキャッシュ解放処理において、キャッシュ解放情報１４４を用いる。
【０１０８】
次に、実行キュー１５１、１６１及び完了キュー１５２、１６２の構成について説明する。
【０１０９】
図７は、本発明の実施例１における実行キュー１５１、１６１の構成例を示す説明図である。ここでは、実行キュー１５１を例に説明する。なお、実行キュー１６１も同一の構成である。
【０１１０】
実行キュー１５１は、エントリ番号１５１１、コマンド１５１２、宛先アドレス１５１３、データ１５１４、及びＩ／Ｏ要求有効ビット１５１５を含む。
【０１１１】
エントリ番号１５１１は、実行キュー１５１のエントリに付与される識別番号である。図７に示すように、実行キュー１５１それぞれは複数のエントリを有する。また、共有ストレージシステムドライバ１６０も同様に、複数のエントリを有する。
【０１１２】
コマンド１５１２は、エントリ番号１５１１に対応する実行キュー１５１に登録されたＩ／Ｏ要求の種別である。コマンド１５１２が「Ｒｅａｄ」の場合、Ｒｅａｄ要求が実行キューに登録されていることを示し、コマンド１５１２が「Ｗｒｉｔｅ」の場合、Ｗｒｉｔｅ要求が登録されていることを示す。
【０１１３】
宛先アドレス１５１３は、コマンド１５１２に対応するＩ／Ｏ要求の対象となるキャッシュ領域の先頭アドレスを示す。
【０１１４】
データ１５１４は、Ｗｒｉｔｅ要求における書き込みデータを示す。データ１５１４は、登録されたＩ／Ｏ要求がＲｅａｄ要求の場合には空欄となる。
【０１１５】
Ｉ／Ｏ要求有効ビット１５１５は、当該エントリのコマンド１５１２に対応するＩ／Ｏ要求が有効であるか否かを示すビットである。
【０１１６】
図８は、本発明の実施例１のおける完了キュー１５２、１６２の構成例を示す説明図である。ここでは、完了キュー１５２を例に説明する。なお、完了キュー１６２も同一の構成である。
【０１１７】
完了キュー１５２は、実行キューエントリ番号１５２１、及び完了ビット１５２２を含む。
【０１１８】
実行キューエントリ番号１５２１は、完了キュー１５２に登録された完了通知が、どの実行キュー１５１のどのエントリに登録されたＩ／Ｏ要求に対応するかを示す。実行キューエントリ番号１５２１は、エントリ番号１５１１と同一のものである。
【０１１９】
完了ビット１５２２は、実行キューエントリ番号１５２１に対応する実行キュー１５１に登録されたＩ／Ｏ要求（コマンド１５１２）の実行が完了しているか否かを示す情報である。
【０１２０】
完了ビット１５２２が「０」の場合、実行キュー１５１に登録されたＩ／Ｏ要求の実行が完了していないことを示し、完了ビット１５２２が「１」の場合、実行キュー１５１に登録されたＩ／Ｏ要求の実行が完了していることを示す。
【０１２１】
次に、本発明におけるアプリケーション及びキャッシュドライバの動作のフローを示す。
【０１２２】
図９は、本発明の実施例におけるＩ／Ｏ処理の概要を説明するフローチャートである。
【０１２３】
図９では、ＯＳ１３０が、アプリケーション１１０によって発行されたＩ／Ｏ要求の登録指示、及びＩ／Ｏ要求の実行指示を受け付け、当該Ｉ／Ｏ要求の実行結果をアプリケーション１１０に応答するまでの処理の流れを説明する。
【０１２４】
ＯＳ１３０は、アプリケーション１１０から、アプリケーションキューへのＩ／Ｏ要求の登録指示を受け付けると、キャッシュドライバ１４０を呼び出し、以下の処理を開始する。
【０１２５】
なお、アプリケーション１１０は、Ｉ／Ｏ要求の登録指示を行う場合、以下のような処理を実行する。まず、アプリケーション１１０は、処理対象のデータが格納される記憶領域（宛先アドレス）、処理対象のデータ、及びアプリケーションキューの識別番号を決定する。アプリケーション１１０は、キューイングインタフェース１２０を用いて、Ｉ／Ｏ要求の種別（コマンド）、宛先アドレス、処理対象のデータ、及びアプリケーションキュー番号を含むＩ／Ｏ要求の登録指示を入力する。
【０１２６】
キャッシュドライバ１４０は、実行キューへのＩ／Ｏ要求の登録処理を実行する（ステップＳ１００）。これによって、キャッシュメモリシステムドライバ１５０が有する実行キュー１５１、又は、共有ストレージシステムドライバ１６０が有する実行キュー１６１にＩ／Ｏ要求が登録される。Ｉ／Ｏ要求の登録処理の詳細は、図１０及び図１１を用いて後述する。
【０１２７】
キャッシュドライバ１４０は、アプリケーション１１０からＩ／Ｏ要求の実行指示を受け付けると、実行キューに登録されたＩ／Ｏ要求に対応するＩ／Ｏ処理を実行する（ステップＳ１０１）。
【０１２８】
具体的には、キャッシュドライバ１４０は、キャッシュメモリシステムドライバ１５０又は共有ストレージシステムドライバ１６０を呼び出し、Ｉ／Ｏ要求の実行を指示する。Ｉ／Ｏ処理の詳細は、図１３を用いて後述する。
【０１２９】
なお、アプリケーション１１０は、キューイングインタフェース１２０を用いて、アプリケーションキューに登録されたＩ／Ｏ要求の実行指示を入力する。このとき、アプリケーション１１０は、アプリケーションキュー番号を含むＩ／Ｏ要求の実行指示を入力する。
【０１３０】
キャッシュメモリシステムドライバ１５０又は共有ストレージシステムドライバ１６０は、キャッシュメモリシステム２００又は共有ストレージシステム３００から、割り込みを受け付けると（ステップＳ１０２）、キャッシュドライバ１４０を介して、アプリケーション１１０にＩ／Ｏ要求の完了を通知し（ステップＳ１０３）、処理を終了する。
【０１３１】
以上の処理によって、アプリケーションキューに対して登録されたＩ／Ｏ要求（コマンド）の処理が完了する。
【０１３２】
図１０及び図１１は、本発明の実施例１におけるＩ／Ｏ要求の登録処理の一例を説明するフローチャートである。
【０１３３】
図１０は、Ｒｅａｄ要求の登録処理である。図１１は、Ｗｒｉｔｅ要求の登録処理である。
【０１３４】
まず、Ｒｅａｄ要求の登録指示を受け付けた場合に実行されるＩ／Ｏ要求の登録処理について説明する。
【０１３５】
キャッシュドライバ１４０は、キューイングインタフェース１２０を介して、コマンドが「Ｒｅａｄ」であるＩ／Ｏ要求（Ｒｅａｄ要求）の登録指示を受け付ける（ステップＳ２００）。
【０１３６】
キャッシュドライバ１４０は、キャッシュ管理テーブル１４１を参照し、共有ストレージシステムアドレス１４１２が、Ｒｅａｄ要求の登録指示に含まれる宛先アドレスと一致するエントリを検索する（ステップＳ２０１）。
【０１３７】
キャッシュドライバ１４０は、検索の結果に基づいて、宛先アドレスに対応するキャッシュ領域に読み出し可能なＲｅａｄ対象のデータが格納されているか否かを判定する（ステップＳ２０２）。すなわち、宛先アドレスに対応するキャッシュ領域が、第１のキャッシュ状態であるか否かが判定される。具体的には、以下のような処理が実行される。
【０１３８】
キャッシュドライバ１４０は、検索の結果に基づいて、共有ストレージシステムアドレス１４１２が宛先アドレスと一致するエントリが存在するか否かを判定する。
【０１３９】
共有ストレージシステムアドレス１４１２が宛先アドレスと一致するエントリが存在すると判定された場合、キャッシュドライバ１４０は、検索されたエントリのデータ有効ビット１４１３が「１」であるか否かを判定する。
【０１４０】
検索されたエントリのデータ有効ビット１４１３が「１」であると判定された場合、キャッシュドライバ１４０は、キャッシュメモリシステム２００に読み出し可能なデータが格納されていると判定する。
【０１４１】
一方、共有ストレージシステムアドレス１４１２が宛先アドレスと一致するエントリが存在しない、又は、検索されたエントリのデータ有効ビット１４１３が「０」であると判定された場合、キャッシュドライバ１４０は、キャッシュメモリシステム２００に読み出し可能なＲｅａｄ対象のデータが格納されていないと判定する。
【０１４２】
以上がステップＳ２０２の処理の説明である。
【０１４３】
宛先アドレスに対応するキャッシュ領域に読み出し可能なＲｅａｄ対象のデータが格納されていると判定された場合、キャッシュドライバ１４０は、キャッシュ管理テーブル１４１を参照し、キャッシュメモリシステム２００のキャッシュ領域のアドレスを取得する（ステップＳ２０３）。
【０１４４】
具体的には、キャッシュドライバ１４０は、検索されたエントリのキャッシュメモリアドレス１４１１に格納されるアドレスを取得する。
【０１４５】
また、キャッシュドライバ１４０は、キュー変換テーブル１４３を参照し、Ｒｅａｄ要求を登録するキャッシュメモリシステム２００の実行キュー１５１を特定する（ステップＳ２０４）。具体的には、以下のような処理が実行される。
【０１４６】
キャッシュドライバ１４０は、キュー変換テーブル１４３を参照し、アプリケーションキュー番号１４３１がＲｅａｄ要求の登録指示に含まれるアプリケーションキュー番号に一致するエントリを検索する。
【０１４７】
キャッシュドライバ１４０は、検索されたエントリのキャッシュキュー番号１４３２に格納される識別番号を読み出す。読み出された識別番号に対応する実行キュー１５１が、Ｒｅａｄ要求を登録する実行キュー１５１となる。
【０１４８】
以上が、ステップＳ２０４の処理の説明である。
【０１４９】
次に、キャッシュドライバ１４０は、キャッシュメモリシステムドライバ１５０を呼び出し、Ｒｅａｄ要求の登録を指示する（ステップＳ２０５）。このとき、キャッシュドライバ１４０は、取得されたキャッシュ領域のアドレス、及び特定された実行キュー１５１の識別番号をキャッシュメモリシステムドライバ１５０に通知する。
【０１５０】
キャッシュメモリシステムドライバ１５０は、通知された実行キュー１５１の識別番号に対応する実行キュー１５１に、Ｒｅａｄ要求を登録する（ステップＳ２０６）。
【０１５１】
具体的には、キャッシュメモリシステムドライバ１５０は、通知された識別番号に対応する実行キュー１５１に、コマンド１５１２に「Ｒｅａｄ」、宛先アドレス１５１３に通知されたキャッシュ領域のアドレス、Ｉ／Ｏ要求有効ビット１５１５に「１」が設定されたＲｅａｄ要求を登録する。
【０１５２】
キャッシュドライバ１４０は、キャッシュキュー状態テーブル１４２を参照し、Ｒｅａｄ要求が登録された実行キュー１５１に対応するエントリのキュー実行待ちビット１４２２を「１」に設定し（ステップＳ２０７）、処理を終了する。
【０１５３】
ステップＳ２０７の処理は、同一アドレスに対するＩ／Ｏ要求の追い抜きによって発生するデータ化けを防止するための処理であり、これによって、実行されていないＲｅａｄ要求が実行キュー１５１に存在することが分かる。
【０１５４】
ステップＳ２０２において、宛先アドレスに対応するキャッシュ領域に読み出し可能なＲｅａｄ対象のデータが格納されていないと判定された場合、すなわち、キャッシュミスヒットの場合、キャッシュドライバ１４０は、キュー変換テーブル１４３を参照し、Ｒｅａｄ要求を登録する共有ストレージシステム３００の実行キュー１６１を特定する（ステップＳ２０８）。ステップＳ２０８の処理は、ステップＳ２０４と同様の処理であるため説明を省略する。
【０１５５】
キャッシュドライバ１４０は、共有ストレージシステムドライバ１６０を呼び出し、Ｒｅａｄ要求の登録を指示する（ステップＳ２０９）。このとき、キャッシュドライバ１４０は、入力された宛先アドレス、及び特定された実行キュー１６１の識別番号を共有ストレージシステムドライバ１６０に通知する。
【０１５６】
共有ストレージシステムドライバ１６０は、通知された実行キュー１６１の識別番号に対応する実行キュー１６１に、Ｒｅａｄ要求を登録し（ステップＳ２１０）、処理を終了する。
【０１５７】
具体的には、共有ストレージシステムドライバ１６０は、通知された実行キュー１６１の識別番号に対応する実行キュー１６１に、コマンドに「Ｒｅａｄ」、宛先アドレスに入力された宛先アドレス、有効ビットに「１」が設定されたＲｅａｄ要求を登録する。
【０１５８】
次に、Ｗｒｉｔｅ要求の登録指示を受け付けた場合に実行されるＩ／Ｏ要求の登録処理について説明する。
【０１５９】
キャッシュドライバ１４０は、キューイングインタフェース１２０を介して、コマンドが「Ｗｒｉｔｅ」であるＩ／Ｏ要求（Ｗｒｉｔｅ要求）の登録指示を受け付ける（ステップＳ３００）。
【０１６０】
キャッシュドライバ１４０は、キュー変換テーブル１４３を参照し、Ｗｒｉｔｅ要求を登録する共有ストレージシステム３００の実行キュー１６１を特定する（ステップＳ３０１）。具体的には、以下のような処理が実行される。
【０１６１】
キャッシュドライバ１４０は、キュー変換テーブル１４３を参照し、アプリケーションキュー番号１４３１がＷｒｉｔｅ要求の登録指示に含まれるアプリケーションキュー番号に一致するエントリを検索する。
【０１６２】
キャッシュドライバ１４０は、検索されたエントリのストレージキュー番号１４３３に格納される識別番号を読み出す。読み出された識別番号に対応する実行キュー１６１が、Ｗｒｉｔｅ要求を登録する実行キュー１６１となる。
【０１６３】
以上が、ステップＳ３０１の処理の説明である。
【０１６４】
次に、キャッシュドライバ１４０は、共有ストレージシステムドライバ１６０を呼び出し、Ｗｒｉｔｅ要求の登録を指示する（ステップＳ３０２）。このとき、キャッシュドライバ１４０は、入力された宛先アドレス、及び特定された実行キュー１６１の識別番号を共有ストレージシステムドライバ１６０に通知する。
【０１６５】
共有ストレージシステムドライバ１６０は、通知された実行キュー１６１の識別番号に対応する実行キュー１６１に、Ｗｒｉｔｅ要求を登録する（ステップＳ３０３）。
【０１６６】
具体的には、共有ストレージシステムドライバ１６０は、通知された識別番号に対応する実行キュー１６１に、コマンドに「Ｗｒｉｔｅ」、宛先アドレスに入力された宛先アドレス、Ｉ／Ｏ要求有効ビットに「１」が設定されたＷｒｉｔｅ要求を登録する。
【０１６７】
キャッシュドライバ１４０は、キャッシュ管理テーブル１４１を参照し、共有ストレージシステムアドレス１４１２がＷｒｉｔｅ要求の登録指示に含まれる宛先アドレスと一致するエントリを検索する（ステップＳ３０４）。
【０１６８】
ここで、キャッシュヒット又はキャッシュミスヒットに関わらず、共有ストレージシステム３００にデータを書き込むのは、書き込まれるデータを保護するためである。サーバモジュール１００にのみデータが書き込まれる場合、例えば、サーバモジュール１００の電源故障等によってデータが消滅してしまう可能性があるためである。なお、保護の必要がないデータを扱うシステムにおいては、キャッシュヒットした場合にステップＳ３００からステップＳ３０４までの処理を省略することもできる。
【０１６９】
キャッシュドライバ１４０は、検索の結果に基づいて、宛先アドレスに対応するキャッシュ領域に読み出し可能なデータが格納されているか否かを判定する（ステップＳ３０５）。すなわち、宛先アドレスに対応するキャッシュ領域が第１のキャッシュ状態であるか否かが判定される。ステップＳ３０５の処理は、ステップＳ２０２と同一であるため説明を省略する。
【０１７０】
宛先アドレスに対応するキャッシュ領域に読み出し可能なデータが格納されていると判定された場合、キャッシュドライバ１４０は、当該キャッシュ領域からのデータの読み出しを禁止するために、データ有効ビット１４１３を「０」に設定する（ステップＳ３０６）。すなわち、キャッシュ領域の状態が、第１のキャッシュ状態から第３のキャッシュ状態に変更される。この場合、当該キャッシュ領域には読み出し可能なデータが格納されているが、これ以降、当該キャッシュ領域へのＩ／Ｏ要求の登録が禁止される。
【０１７１】
キャッシュドライバ１４０は、Ｉ／Ｏ要求の登録が禁止されたキャッシュ領域に関するキャッシュ解放情報１４４を生成する（ステップＳ３０７）。具体的には、以下のような処理が実行される。
【０１７２】
まず、キャッシュドライバ１４０は、空のキャッシュ解放情報１４４を生成し、情報有効ビット１４４１０に「１」を設定する。キャッシュドライバ１４０は、解放対象アドレス１４４３０に、Ｉ／Ｏ要求の登録が禁止されたキャッシュ領域のアドレスを登録する。
【０１７３】
キャッシュドライバ１４０は、この時点における全てのキャッシュキュー状態テーブル１４２のコピーを取得し、キャッシュ解放情報１４４に、キャッシュキュー完了状態テーブル１４４２０として登録する。
【０１７４】
なお、情報有効ビット１４４１０が「０」、かつ、キャッシュキュー完了状態テーブル１４４２０が登録されていないキャッシュ解放情報１４４が存在する場合、キャッシュドライバ１４０は、当該キャッシュ解放情報１４４に必要な情報を設定してもよい。
【０１７５】
以上が、ステップＳ３０７の処理の説明である。
【０１７６】
ステップＳ３０５において宛先アドレスに対応するキャッシュ領域に読み出し可能なデータが格納されていないと判定された場合、又は、ステップＳ３０７の処理が実行された後、キャッシュドライバ１４０は、キャッシュ管理テーブル１４１を参照し、キャッシュメモリシステム２００に、Ｗｒｉｔｅ要求におけるＷｒｉｔｅ対象のデータを格納するためのキャッシュ領域が存在するか否かを判定する（ステップＳ３０８）。
【０１７７】
具体的には、キャッシュドライバ１４０は、キャッシュ管理テーブル１４１から書込有効ビット１４１４が「１」であるエントリを検索する。すなわち、第２のキャッシュ状態であるキャッシュ領域が検索される。
【０１７８】
書込有効ビット１４１４が「１」であるエントリが、Ｗｒｉｔｅ対象のデータを書き込むために必要なキャッシュ領域分存在する場合、キャッシュドライバ１４０は、キャッシュメモリシステム２００に、Ｗｒｉｔｅ対象のデータを格納するためのキャッシュ領域が存在すると判定する。
【０１７９】
キャッシュメモリシステム２００に、Ｗｒｉｔｅ対象のデータを格納するためのキャッシュ領域が存在しないと判定された場合、キャッシュドライバ１４０は、処理を終了する。
【０１８０】
キャッシュメモリシステム２００に、Ｗｒｉｔｅ対象のデータを格納するためのキャッシュ領域が存在すると判定された場合、キャッシュドライバ１４０は、キャッシュ登録処理を実行し（ステップＳ３０９）、処理を終了する。キャッシュ登録処理の詳細は、図１２を用いて後述する。なお、スッテップＳ３０８の処理及びＳ３０９の処理は、ステップＳ３００の処理が実行されている場合、省略してもよい。この場合、Ｗｒｉｔｅされたデータは共有ストレージシステム３００のみに存在する。
【０１８１】
図１２は、本発明の実施例１におけるキャッシュ登録処理を説明するフローチャートである。
【０１８２】
キャッシュドライバ１４０は、キャッシュ管理テーブル１４１を参照し、書込有効ビット１４１４が「１」であるエントリを一つ検索する（ステップＳ４００）。すなわち、第２のキャッシュ状態であるキャッシュ領域が検索される。
【０１８３】
キャッシュドライバ１４０は、検索されたエントリのキャッシュメモリアドレス１４１１を読み出し（ステップＳ４０１）、また、当該エントリの書込有効ビット１４１４を「０」に設定する（ステップＳ４０２）。すなわち、キャッシュ領域の状態が、第２のキャッシュ状態から第３のキャッシュ状態に変更される。これ以降、キャッシュ領域へのＩ／Ｏ要求の登録が禁止される。
【０１８４】
キャッシュドライバ１４０は、検索されたキャッシュ領域に対するＷｒｉｔｅ要求の登録に用いる実行キュー１５１を決定する（ステップＳ４０３）。すなわち、実行キュー１５１の識別番号が決定される。
【０１８５】
本実施例では、ＯＳ１３０毎にキャッシュキューが割り当てられているため、一時的に、いずれかのＯＳ１３０に割り当てられたキャッシュキューを利用できるようにする。例えば、最後にコマンドが生成されたキャッシュキューを優先的に使用する方法が考えられる。
【０１８６】
キャッシュドライバ１４０は、キャッシュメモリシステムドライバ１５０を呼び出し、Ｗｒｉｔｅ要求の登録を指示する（ステップＳ４０４）。このとき、キャッシュドライバ１４０は、読み出されたキャッシュ領域のアドレス、及び決定された実行キュー１５１の識別番号をキャッシュメモリシステムドライバ１５０に通知する。
【０１８７】
キャッシュメモリシステムドライバ１５０は、決定された実行キュー１５１に、Ｗｒｉｔｅ要求を登録する（ステップＳ４０５）。
【０１８８】
具体的には、キャッシュメモリシステムドライバ１５０は、決定された実行キュー１５１に、コマンド１５１２に「Ｗｒｉｔｅ」、宛先アドレス１５１３に読み出されたキャッシュ領域のアドレス、及びＩ／Ｏ要求有効ビット１５１５に「１」が設定されたＷｒｉｔｅ要求を登録する。
【０１８９】
キャッシュドライバ１４０は、キャッシュキュー状態テーブル１４２を参照し、キャッシュキュー番号１４２１が決定された実行キュー１５１の識別番号と一致するエントリを検索し、当該エントリのキュー実行待ちビット１４２２を「１」に設定する（ステップＳ４０６）。
【０１９０】
その後、キャッシュドライバ１４０は、実行キュー１５１に登録されたＷｒｉｔｅ要求が実行され、実行完了の割り込みが行われるまで待つ（ステップＳ４０７）。すなわち、キャッシュ領域にデータが書き込まれるまでキャッシュドライバ１４０は待ち状態となる。
【０１９１】
キャッシュドライバ１４０は、実行キュー１５１に登録されたＷｒｉｔｅ要求の実行完了の割り込みを受け付けた後、ステップＳ４００において検索されたキャッシュ管理テーブル１４１のエントリのデータ有効ビット１４１３を「１」に設定する（ステップＳ４０８）。すなわち、キャッシュ領域の状態が、第３のキャッシュ状態から第１のキャッシュ状態に変更される。これ以降、キャッシュ領域からのデータの読み出しが可能となる。
【０１９２】
なお、ステップＳ４０３において、キャッシュドライバ１４０は、キャッシュキューの中から使用する実行キュー１５１を決定していたが、本発明はこれに限定されない。予め、キャッシュメモリシステムドライバ１５０に、キャッシュ登録時に用いるキャッシュドライバ１４０用のキャッシュキューが設定されていてもよい。この場合、キャッシュドライバ１４０が、任意のタイミングで専用の実行キュー１５１に登録されたＷｒｉｔｅ要求を実行してもよい。また、ステップＳ４０６の処理は省略できる。
【０１９３】
また、前述したキャッシュ登録処理は、Ｗｒｉｔｅ要求の登録時以外にも実行される。例えば、共有ストレージシステム３００から読み出されたデータをキャッシュメモリシステム２００に格納する場合にキャッシュ登録処理が実行される。また、キャッシュドライバ１４０がＩ／Ｏ処理の履歴を管理することによって、キャッシュドライバ１４０自身が周期的にキャッシュ領域に格納するデータの有無を判定し、当該判定結果に基づいてデータをキャッシュメモリシステム２００に格納する場合等にキャッシュ登録処理が実行される。
【０１９４】
図１３は、本発明の実施例における実行キューに登録されたＩ／Ｏ要求に対応するＩ／Ｏ処理を説明するフローチャートである。
【０１９５】
ＯＳ１３０は、アプリケーション１１０から、アプリケーションキューに登録されたＩ／Ｏ要求の実行指示を受け付けると、キャッシュドライバ１４０を呼び出し、以下の処理を開始する。
【０１９６】
なお、アプリケーション１１０は、Ｉ／Ｏ要求の実行指示を行う場合、処理対象のアプリケーションキュー番号を決定し、キューイングインタフェース１２０を介して、決定されたアプリケーションキュー番号を含むＩ／Ｏ要求の実行指示を入力する。
【０１９７】
キャッシュドライバ１４０は、当該Ｉ／Ｏ要求の実行指示を受け付けると（ステップＳ５００）、処理対象のＩ／Ｏ要求が登録されるキャッシュキュー及びストレージキューを特定する（ステップＳ５０１）。
【０１９８】
具体的には、キャッシュドライバ１４０は、キュー変換テーブル１４３を参照し、アプリケーションキュー番号１４３１が、受け付けたＩ／Ｏ要求の実行指示に含まれるアプリケーションキュー番号と一致するエントリを検索する。キャッシュドライバ１４０は、検索されたエントリのキャッシュキュー番号１４３２及びストレージキュー番号１４３３を取得する。
【０１９９】
キャッシュドライバ１４０は、キャッシュキュー状態テーブル１４２を参照し、Ｉ／Ｏ要求の実行指示に含まれるアプリケーションキュー番号と一致するエントリのキュー実行待ちビット１４２２を「０」に設定する（ステップＳ５０２）。
【０２００】
また、キャッシュドライバ１４０は、キャッシュ解放情報１４４のキャッシュキュー完了状態テーブル１４４２０を参照し、キャッシュキュー番号１４４２１が取得されたキャッシュキュー番号１４３２と一致するエントリを含むキャッシュキュー完了状態テーブル１４４２０を検索する（ステップＳ５０３）。
【０２０１】
さらに、キャッシュドライバ１４０は、検索されたキャッシュキュー完了状態テーブル１４４２０を参照し、キャッシュキュー番号１４４２１が取得されたキャッシュキュー番号１４３２と一致するエントリのキュー実行待ちビット１４４２２を「０」に設定する（ステップＳ５０４）。
【０２０２】
ステップＳ５０２からステップＳ５０４の処理によって、キャッシュキューに登録されたＩ／Ｏ要求が全て実行されたことが分かる。
【０２０３】
キャッシュドライバ１４０は、キャッシュメモリシステムドライバ１５０及び共有ストレージシステムドライバ１６０のそれぞれに、処理対象のＩ／Ｏ要求の実行を指示する（ステップＳ５０５）。
【０２０４】
このとき、キャッシュドライバ１４０は、取得されたキャッシュキュー番号１４３２をキャッシュメモリシステムドライバ１５０に通知し、取得されたストレージキュー番号１４３３を共有ストレージシステムドライバ１６０に通知する。
【０２０５】
キャッシュメモリシステムドライバ１５０及び共有ストレージシステムドライバ１６０は、それぞれ、通知されたキャッシュキュー番号１４３２に対応する実行キュー１５１及び通知されたストレージキュー番号１４３３に対応する実行キュー１６１に登録された処理対象のＩ／Ｏ要求を実行し（ステップＳ５０６）、処理を終了する。
【０２０６】
具体的には、キャッシュメモリシステムドライバ１５０は、処理対象のＩ／Ｏ要求が登録された実行キュー１５１に対応する実行レジスタ２１０を介して、キャッシュメモリシステム２００にＩ／Ｏ要求の実行を指示する。また、共有ストレージシステムドライバ１６０は、処理対象のＩ／Ｏ要求が登録された実行キュー１６１に対応する実行レジスタ３２０を介して、共有ストレージシステム３００にＩ／Ｏ要求の実行を指示する。
【０２０７】
図１４は、本発明の実施例１におけるキャッシュ解放処理の一例を説明するフローチャートである。
【０２０８】
キャッシュドライバ１４０は、周期的、又は、キャッシュ領域の使用率が所定のしきい値以上となった場合に、以下で説明するキャッシュ解放処理を実行する。なお、ＯＳ１３０等から実行指示を受け付けた場合に、キャッシュ解放処理が開始されてもよい。
【０２０９】
キャッシュドライバ１４０は、解放するキャッシュ領域を決定する（ステップＳ６００）。
【０２１０】
具体的には、キャッシュドライバ１４０は、情報有効ビット１４４１０が「１」であるキャッシュ解放情報１４４を検索する。ここでは、情報有効ビット１４４１０が「１」であるキャッシュ解放情報１４４が一つ以上検索される。
【０２１１】
キャッシュドライバ１４０は、検索の結果、情報有効ビット１４４１０が「１」であるキャッシュ解放情報１４４が一つ以上存在するか否かを判定する（ステップＳ６０１）。
【０２１２】
情報有効ビット１４４１０が「１」であるキャッシュ解放情報１４４が存在しないと判定された場合、キャッシュドライバ１４０は、キャッシュ領域を解放できないと判定し（ステップＳ６０６）、処理を終了する。
【０２１３】
キャッシュドライバ１４０は、検索された各キャッシュ解放情報１４４のキャッシュキュー完了状態テーブル１４４２０を監視し、全てのキャッシュキュー完了状態テーブル１４４２０に含まれる全てのエントリのキュー実行待ちビット１４４２２が「０」になるのを待つ（ステップＳ６０３）。
【０２１４】
すなわち、キャッシュドライバ１４０は、解放するキャッシュ領域へのアクセスが禁止された時点において、各実行キュー１５１に登録された全てのＩ／Ｏ要求が実行されるのを待つ。
【０２１５】
図１３のステップＳ５０４に示すように、実行キュー１５１に登録されたＩ／Ｏ要求が実行される度に、キュー実行待ちビット１４４２２が「０」に設定される。したがって、一定期間経過すると、キュー実行待ちビット１４４２２は全て「０」になる。これによって、解放するキャッシュ領域に対するＩ／Ｏ要求が全て実行された状態となる。
【０２１６】
キャッシュドライバ１４０は、任意のキャッシュ解放情報１４４において、全てのキャッシュキュー完了状態テーブル１４４２０に含まれる全てのエントリのキュー実行待ちビット１４４２２が「０」になった場合、キャッシュドライバ１４０は、解放対象アドレス１４４３０に対応するキャッシュ領域を解放する（ステップＳ６０４）。
【０２１７】
具体的には、キャッシュドライバ１４０は、キャッシュメモリアドレス１４１１が解放対象アドレス１４４３０と一致するエントリを検索する。キャッシュドライバ１４０は、検索されたエントリの書込有効ビット１４１４を「１」に設定する。すなわち、キャッシュ領域の状態が、第３のキャッシュ状態から第２のキャッシュ状態に変更される。これ以降、キャッシュ領域へのデータの書き込みが可能な状態となる。
【０２１８】
キャッシュメモリシステム２００へのデータの書き込み時に、書込有効ビット１４１４が「１」であるエントリに対応するキャッシュ領域に対して一度のみデータを書き込むものとすれば、Ｒｅａｄ要求及びＷｒｉｔｅ要求の宛先アドレスを別々に分けることができ、また、異なるＷｒｉｔｅ要求同士の宛先アドレスも重複しないため、同一のキャッシュ領域に対応する複数のＩ／Ｏ要求の追い抜きによるデータ化けの問題を回避することができる。
【０２１９】
キャッシュドライバ１４０は、全てのキャッシュキュー完了状態テーブル１４４２０に含まれる全てのエントリのキュー実行待ちビット１４４２２が「０」になったキャッシュ解放情報１４４を初期化する（ステップＳ６０５）。
【０２２０】
具体的には、キャッシュドライバ１４０は、情報有効ビット１４４１０を「０」に設定し、解放対象アドレス１４４３０を空にする。また、キャッシュドライバ１４０は、キャッシュ解放情報１４４からキャッシュキュー完了状態テーブル１４４２０を削除する。
【０２２１】
なお、キャッシュドライバ１４０は、キャッシュ解放情報１４４を削除してもよい。また、キャッシュ解放処理では、条件を満たすキャッシュ領域を全て解放してもよいし、所定の数のキャッシュ領域のみを解放してもよい。条件を満たすキャッシュ領域が全て解放されない場合、その後、実行されるキャッシュ解放処理において、当該キャッシュ領域が解放されることとなる。
【０２２２】
図１５は、本発明の実施例１におけるキャッシュ管理テーブル１４１及びキャッシュ解放情報１４４の初期化処理を説明するフローチャートである。
【０２２３】
サーバモジュール１００の初期の起動時に、ＯＳ１３０によって呼び出されたキャッシュドライバ１４０が、以下で説明するキャッシュ管理テーブル１４１及びキャッシュ解放情報１４４の初期化処理を実行する。
【０２２４】
キャッシュドライバ１４０は、キャッシュとして使用されるキャッシュメモリシステム２００に生成されるキャッシュ領域の数と同一の数のエントリを有するキャッシュ管理テーブル１４１を生成する（ステップＳ７００）。
【０２２５】
キャッシュドライバ１４０は、生成されたキャッシュ管理テーブル１４１の各エントリのデータ有効ビット１４１３、及び書込有効ビット１４１４に初期値を設定する（ステップＳ７０１）。
【０２２６】
例えば、キャッシュドライバ１４０は、全エントリのデータ有効ビット１４１３に「０」、書込有効ビット１４１４に「１」を設定する。すなわち、全てのキャッシュ領域の初期状態が第２のキャッシュ状態に設定される。
【０２２７】
また、他の方法としては、初期値を定義したキャッシュプリロード情報が設定されている場合、キャッシュドライバ１４０は、プリロードされた全てのキャッシュ領域に対応するエントリのデータ有効ビット１４１３に「１」、書込有効ビット１４１４に「０」を設定する。また、キャッシュドライバ１４０は、その他のエントリのデータ有効ビット１４１３に「０」、書込有効ビット１４１４を「１」に設定する。
【０２２８】
なお、キャッシュプリロード情報は、キャッシュ領域に初期起動時の段階に登録される情報であり、キャッシュ登録データ又は共有ストレージシステムアドレスを示すものである。
【０２２９】
図１６は、本発明の実施例１におけるアプリケーション１１０がキューを生成する場合の流れを説明するフローチャートを示す。
【０２３０】
キャッシュドライバ１４０は、アプリケーション１１０からキューの生成指示を受け付けると（ステップＳ８００）、アプリケーションキュー番号、キャッシュキュー番号、及びストレージキュー番号の対応関係を決定し、キュー変換テーブル１４３に登録する（ステップＳ８０１）。
【０２３１】
なお、キャッシュドライバ１４０は、キャッシュメモリシステム２００が物理的に有するキャッシュキュー番号及び共有ストレージシステム３００が物理的に持つストレージキュー番号の間で任意に対応関係を定めてよい。例えば、所定のポリシ情報に基づいて決定する方法が考えられる。
【０２３２】
キャッシュドライバ１４０は、キャッシュキュー状態テーブル１４２にキャッシュキュー番号に対応するエントリを生成し、生成されたエントリのキュー実行待ちビット１４２２に「０」を設定する（ステップＳ８０２）。
【０２３３】
キャッシュドライバ１４０は、キャッシュメモリシステムドライバ１５０に、キャッシュキュー番号に対応するキャッシュキューの生成を指示する（ステップＳ８０３）。このとき、キャッシュメモリシステムドライバ１５０は、当該指示にしたがって、キャッシュキューを生成し、キュー生成完了をキャッシュドライバに通知する。
【０２３４】
キャッシュドライバ１４０は、共有ストレージシステムドライバ１６０に、ストレージキュー番号に対応するストレージキューの生成を指示する（ステップＳ８０４）。このとき、共有ストレージシステムドライバ１６０は、当該指示にしたがって、ストレージキューを生成し、キュー生成完了をキャッシュドライバに通知する。
【０２３５】
キャッシュドライバ１４０は、キュー生成完了をアプリケーション１１０に通知し（ステップＳ８０５）、処理を終了する。
【０２３６】
以上で述べたように、ＮＶＭｅ対応のアプリケーション１１０がＮＶＭｅ対応のストレージシステムを使用し、キャッシュ領域としてＮＶＭｅ対応のキャッシュメモリを使用するシステムにおいて、本発明のキャッシュドライバ１４０は、同一のキャッシュ領域に対するＩ／Ｏ要求の実行順序の入れ替わりによって発生するデータ化けの問題を防ぐことができる。
【０２３７】
より具体的には、Ｗｒｉｔｅ要求の登録時に、Ｗｒｉｔｅ対象のキャッシュ領域に読み出し可能なデータが格納される場合、キャッシュドライバ１４０は、当該キャッシュ領域へのアクセスを一旦禁止する（ステップＳ３０６）。
【０２３８】
さらに、キャッシュドライバ１４０は、Ｗｒｉｔｅ要求の宛先アドレスを変更することによって、変更された宛先アドレスに対応するキャッシュ領域へのＷｒｉｔｅ要求の登録指示に変更する（ステップＳ４００からステップＳ４０３）。
【０２３９】
以上の処理によって、同一アドレスに対応するキャッシュ領域へのＩ／Ｏ要求が重複することを防ぐことができる。したがって、データ化けの発生を解消することができる。
【０２４０】
また、Ｉ／Ｏ要求の登録が禁止されたキャッシュ領域は、すぐに解放せず、Ｉ／Ｏ要求の登録が禁止された時点において登録されたＩ／Ｏ要求の実行が完了した後に、当該キャッシュ領域を解放する。これによって、Ｉ／Ｏ要求の不整合を解消できる。
【０２４１】
なお、本発明は、ＮＶＭｅ対応のアプリケーション及びキャッシュメモリ以外のアプリケーション及びキャッシュメモリでも同様の効果を奏するものである。
【０２４２】
（変形例）
実施例１では、キャッシュ解放時に、Ｉ／Ｏ要求の登録が禁止されたキャッシュ領域のみを対象としていた。本発明はこれに限定されず、従来のキャッシュ制御のアルゴリズムと組み合わせることも可能である。
【０２４３】
以下、実施例１との差異を中心に変形例について説明する。
【０２４４】
変形例のシステム構成、ハードウェア構成、及びソフトウェア構成は、実施例１と同一であるため説明を省略する。また、Ｉ／Ｏ要求の登録処理、キャッシュ登録処理、Ｉ／Ｏ処理は実施例１と同一であるため説明を省略する。変形例のキャッシュ管理テーブル及びキャッシュ解放情報の初期化処理、キューの生成処理も実施例１と同一であるため説明を省略する。
【０２４５】
変形例では、キャッシュ解放処理が一部異なる。ここでは、ＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）方式のキャッシュ制御アルゴリズムを例に説明する。
【０２４６】
図１７は、本発明の実施例１の変形例におけるキャッシュ解放処理の一例を説明するフローチャートである。
【０２４７】
ステップＳ６００の処理の実行後、キャッシュドライバ１４０は、ＬＲＵアルゴリズムに基づいて、解放するキャッシュ領域を決定する（ステップＳ６５０）。例えば、Ｉ／Ｏ要求の登録が禁止されたキャッシュ領域だけでは、必要なキャッシュ領域を確保できない場合等に、従来のアルゴリズムを用いて解放するキャッシュ領域を決定する。
【０２４８】
キャッシュドライバ１４０は、必要なキャッシュ領域を確保できるか否かを判定する（ステップＳ６５１）。例えば、ステップＳ６００において特定されたキャッシュ領域と、ステップＳ６５１において決定されたキャッシュ領域との合計から、必要な数のキャッシュ領域を確保できるか否かが判定される。
【０２４９】
必要なキャッシュ領域を確保できると判定された場合、キャッシュドライバ１４０は、キャッシュ管理テーブル１４１を参照し、ステップＳ６５０において決定されたキャッシュ領域に対応するエントリのデータ有効ビット１４１３を「０」に設定する（ステップＳ６５２）。すなわち、キャッシュ領域の状態が、第１のキャッシュ状態から第３のキャッシュ状態に変更される。これ以降、キャッシュ領域へのＩ／Ｏ要求の登録が禁止される。
【０２５０】
さらに、キャッシュドライバ１４０は、ステップＳ６５０において決定されたキャッシュ領域について、キャッシュ解放情報１４４を生成する（ステップＳ６５３）。具体的には、以下のような処理が実行される。
【０２５１】
まず、キャッシュドライバ１４０は、情報有効ビット１４４１０が「０」、かつ、キャッシュキュー完了状態テーブル１４４２０が登録されていないキャッシュ解放情報１４４を検索する。
【０２５２】
なお、前述した条件を満たすキャッシュ解放情報１４４が存在しない場合、キャッシュ領域を解放できないと判定してもよいし、新たに、キャッシュ解放情報１４４を生成してもよい。
【０２５３】
キャッシュドライバ１４０は、現時点におけるキャッシュキュー状態テーブル１４２のコピーを取得し、検索されたキャッシュ解放情報１４４にキャッシュキュー完了状態テーブル１４４２０として登録する。
【０２５４】
また、キャッシュドライバ１４０は、解放対象アドレス１４４３０に、ステップＳ６５０において決定されたキャッシュ領域のアドレスを登録する。なお、ステップＳ６５０において決定されたキャッシュ領域が複数存在する場合、解放対象アドレス１４４３０にはリスト形式の情報として登録される。
【０２５５】
以上がステップＳ６５３の処理の説明である。
【０２５６】
ステップＳ６０２では、ステップＳ６５３において生成されたキャッシュ解放情報１４４の情報有効ビット１４４１０も「１」に設定される。
【０２５７】
ステップＳ６０４では、キャッシュドライバ１４０は、解放対象アドレス１４４３０に含まれるアドレス毎に、キャッシュ管理テーブルの当該アドレスに対応するエントリの書込有効ビット１４１４を「１」に設定する。
【０２５８】
その他の処理は実施例１と同一の処理である。
【０２５９】
各実施例では、ソフトウェアによる制御を用いた例について説明したが、その一部をハードウェアによって実現することも可能である。
【０２６０】
以上、本発明を添付の図面を参照して詳細に説明したが、本発明はこのような具体的構成に限定されるものではなく、添付した請求の範囲の趣旨内における様々な変更及び同等の構成を含むものである。
【符号の説明】
【０２６１】
１０  サーバ装置
１００  サーバモジュール
１０１  プロセッサ
１０２  メモリ
１０３  ネットワークインタフェース
１０４  接続インタフェース
１１０  アプリケーション
１２０  キューイングインタフェース
１３０  ＯＳ
１４０  キャッシュドライバ
１４１  キャッシュ管理テーブル
１４２  キャッシュキュー状態テーブル
１４３  キュー変換テーブル
１４４  キャッシュ解放情報
１５０  キャッシュメモリシステムドライバ
１５１  実行キュー
１５２  完了キュー
１６０  共有ストレージシステムドライバ
１６１  実行キュー
１６２  完了キュー
２００  キャッシュメモリシステム
２１０  実行レジスタ
３００  共有ストレージシステム
３０１  コントローラ
３０２  プロセッサ
３０３  メモリ
３０４  ネットワークインタフェース
３０５  ストレージインタフェース
３０６  記憶媒体
３１０  ストレージ制御部
３２０  実行レジスタ
４００  ネットワーク
１４４１０  情報有効ビット
１４４２０  キャッシュキュー完了状態テーブル
１４４３０  解放対象アドレス
【図１】
2015026263.tif 000003
【図２】
2015026263.tif 000004
【図３】
2015026263.tif 000005
【図４】
2015026263.tif 000006
【図５】
2015026263.tif 000007
【図６】
2015026263.tif 000008
【図７】
2015026263.tif 000009
【図８】
2015026263.tif 000010
【図９】
2015026263.tif 000011
【図１０】
2015026263.tif 000012
【図１１】
2015026263.tif 000013
【図１２】
2015026263.tif 000014
【図１３】
2015026263.tif 000015
【図１４】
2015026263.tif 000016
【図１５】
2015026263.tif 000017
【図１６】
2015026263.tif 000018
【図１７】
2015026263.tif 000019