(57)【要約】【課題】サーバ及びストレージシステムから構成される計算機システムにおいて、システムの処理性能が最適となるキャッシュ制御方法を実現する。【解決手段】アプリケーションが稼働するサーバ、及び、ストレージシステムを備える計算機システムであって、サーバは、サーバを制御するオペレーティングシステムを有し、オペレーティングシステムは、サーバキャッシュを制御するキャッシュドライバを含み、データに対する読出処理の回数、及び書込処理の回数を格納するアクセス情報を保持し、キャッシュドライバは、アプリケーションからＩ／Ｏ要求を受け付けた場合、アクセス情報を更新し、更新されたアクセス情報に基づいてＩ／Ｏ要求の対象のデータのアクセス特性を解析し、アクセス特性の解析結果に基づいて、Ｉ／Ｏ要求の対象のデータをサーバキャッシュに格納するか否かを判定する。【選択図】図１
2014232350.tif 000002
【特許請求の範囲】
【請求項１】
所定のサービスを提供するアプリケーションが稼働するサーバ、及び、前記アプリケーションが使用するデータを格納するストレージシステムを備える計算機システムであって、
前記サーバは、第１のプロセッサ、第１のメモリ、一時的にデータを格納するサーバキャッシュが設定されるキャッシュデバイス、及び他の装置と接続するための第１のインタフェースを有し、
前記ストレージシステムは、第２のプロセッサ、第２のメモリ、及び他の装置と接続するための第２のインタフェースを含むコントローラ、並びに複数の記憶装置を有し、
前記サーバは、前記サーバを制御するオペレーティングシステムを有し、
前記ストレージシステムは、一時的にデータを格納するストレージキャッシュ、及び前記ストレージシステムを制御するストレージ制御部を有し、
前記オペレーティングシステムは、
前記サーバキャッシュを制御するキャッシュドライバを含み、
データに対する読出処理の回数、及び書込処理の回数を格納するアクセス情報を保持し、
前記キャッシュドライバは、
前記アプリケーションからＩ／Ｏ要求を受け付けた場合、前記アクセス情報を更新し、
前記更新されたアクセス情報に基づいて前記Ｉ／Ｏ要求の対象のデータのアクセス特性を解析し、
前記アクセス特性の解析結果に基づいて、前記Ｉ／Ｏ要求の対象のデータを前記サーバキャッシュに格納するか否かを判定することを特徴とする計算機システム。
【請求項２】
請求項１に記載の計算機システムであって、
前記キャッシュドライバは、
前記アプリケーションから第１のデータの読出要求を受け付けた場合、前記サーバキャッシュに前記第１のデータが格納されるか否かを判定し、
前記サーバキャッシュに前記第１のデータが格納されないと判定された場合、前記ストレージシステムに読出要求を送信し、
前記サーバキャッシュに前記第１のデータを格納し、
前記アクセス情報の前記第１のデータに対する前記読出処理の回数を更新し、
前記更新されたアクセス情報に基づいて、前記第１のデータが前記アプリケーションによって頻繁に読み出されるデータであるか否かを判定し、
前記第１のデータが前記アプリケーションによって頻繁に読み出されるデータでないと判定された場合、前記サーバキャッシュに格納される前記第１のデータを無効化し、
前記アプリケーションから第２のデータの書込要求を受け付けた場合、前記サーバキャッシュに前記第２のデータが格納されるか否かを判定し、
前記サーバキャッシュに前記第２のデータが格納されると判定された場合、前記第２のデータを更新し、
前記ストレージシステムに書込要求を送信し、
前記アクセス情報の前記第２のデータに対する前記書込処理の回数を更新し、
前記更新されたアクセス情報に基づいて、前記第２のデータが前記アプリケーションによって頻繁に書き込まれるデータであるか否かを判定し、
前記第２のデータが前記アプリケーションによって頻繁に書き込まれるデータであると判定された場合、前記サーバキャッシュに格納される前記第２のデータを無効化することを特徴とする計算機システム。
【請求項３】
請求項１に記載の計算機システムであって、
前記キャッシュドライバは、
前記アプリケーションから第１のデータの読出要求を受け付けた場合、前記サーバキャッシュに前記第１のデータが格納されるか否かを判定し、
前記サーバキャッシュに前記第１のデータが格納されないと判定された場合、前記ストレージシステムに読出要求を送信し、
前記アクセス情報の前記第１のデータに対する前記読出処理の回数を更新し、
前記更新されたアクセス情報に基づいて、前記第１のデータが前記アプリケーションによって頻繁に読み出されるデータであるか否かを判定し、
前記第１のデータが前記アプリケーションによって頻繁に読み出されるデータであると判定された場合、前記第１のデータを前記サーバキャッシュに格納し、
前記アプリケーションから第２のデータの書込要求を受け付けた場合、前記サーバキャッシュに前記第２のデータが格納されるか否かを判定し、
前記サーバキャッシュに前記第２のデータが格納されると判定された場合、前記第２のデータを更新し、
前記ストレージシステムに書込要求を送信し、
前記アクセス情報の前記第２のデータに対する前記書込処理の回数を更新し、
前記更新されたアクセス情報に基づいて、前記第２のデータが前記アプリケーションによって頻繁に書き込まれるデータであるか否かを判定し、
前記第２のデータが前記アプリケーションによって頻繁に書き込まれるデータであると判定された場合、前記サーバキャッシュに格納される前記第２のデータを無効化することを特徴とする計算機システム。
【請求項４】
請求項２又は請求項３に記載の計算機システムであって、
前記キャッシュドライバは、
前記第１のデータの読み出し回数を前記第１のデータの書き込み回数で除算することによって、第１のアクセス比率を算出し、
前記第１のデータの読み出し回数が第１の閾値以上、かつ、前記第１のアクセス比率が第２の閾値以上の場合に、前記第１のデータが前記アプリケーションによって頻繁に読み出されるデータであると判定し、
前記第１のデータの読み出し回数が前記第１の閾値より小さい、及び、前記第１のアクセス比率が前記第２の閾値より小さい、のいずれか一方を満たす場合に、前記第１のデータが前記アプリケーションによって頻繁に読み出されるデータでないと判定し、
前記第２のデータの書き込み回数を前記第２のデータの読み出し回数で除算することによって、第２のアクセス比率を算出し、
前記第２のデータの書き込み回数が第３の閾値以上、及び、前記第２のアクセス比率が第４の閾値以上のいずれか一方を満たす場合に、前記第２のデータが前記アプリケーションによって頻繁に書き込まれるデータであると判定し、
前記第２のデータの書き込み回数が前記第３のより小さい、かつ、前記第２のアクセス比率が前記第４の閾値より小さい場合に、前記第２のデータが前記アプリケーションによって頻繁に書き込まれるデータでないと判定することを特徴とする計算機システム。
【請求項５】
所定のサービスを提供するアプリケーションが稼働するサーバ、及び、前記アプリケーションが使用するデータを格納するストレージシステムを備える計算機システムにおけるキャッシュ制御方法であって、
前記サーバは、第１のプロセッサ、第１のメモリ、一時的にデータを格納するサーバキャッシュが設定されるキャッシュデバイス、及び他の装置と接続するための第１のインタフェースを有し、
前記ストレージシステムは、第２のプロセッサ、第２のメモリ、及び他の装置と接続するための第２のインタフェースを含むコントローラ、並びに複数の記憶装置を有し、
前記サーバは、前記サーバを制御するオペレーティングシステムを有し、
前記ストレージシステムは、一時的にデータを格納するストレージキャッシュ、及び前記ストレージシステムを制御するストレージ制御部を有し、
前記オペレーティングシステムは、
前記サーバキャッシュを制御するキャッシュドライバを含み、
データに対する読出処理の回数、及び書込処理の回数を格納するアクセス情報を保持し、
前記方法は、
前記キャッシュドライバが、前記アプリケーションからＩ／Ｏ要求を受け付けた場合、前記アクセス情報を更新する第１のステップと、
前記キャッシュドライバが、前記更新されたアクセス情報に基づいて前記Ｉ／Ｏ要求の対象のデータのアクセス特性を解析する第２のステップと、
前記キャッシュドライバが、前記アクセス特性の解析結果に基づいて、前記Ｉ／Ｏ要求の対象のデータを前記サーバキャッシュに格納するか否かを判定する第３のステップと、を含むことを特徴とするキャッシュ制御方法。
【請求項６】
請求項５に記載のキャッシュ制御方法であって、
前記アプリケーションから第１のデータの読出要求を受け付けた場合における前記第２のステップは、
前記サーバキャッシュに前記第１のデータが格納されるか否かを判定する第４のステップと、
前記サーバキャッシュに前記第１のデータが格納されないと判定された場合、前記ストレージシステムに読出要求を送信する第５のステップと、
前記サーバキャッシュに前記第１のデータを格納する第６のステップと、
前記アクセス情報の前記第１のデータに対する前記読出処理の回数を更新する第７のステップと、
前記更新されたアクセス情報に基づいて、前記第１のデータが前記アプリケーションによって頻繁に読み出されるデータであるか否かを判定する第８のステップと、を含み、
前記アプリケーションから前記第１のデータの読出要求を受け付けた場合における前記第３のステップでは、前記第１のデータが前記アプリケーションによって頻繁に読み出されるデータでないと判定された場合、前記サーバキャッシュに格納される前記第１のデータを無効化し、
前記アプリケーションから第２のデータの書込要求を受け付けた場合における第２のステップは、
前記サーバキャッシュに前記第２のデータが格納されるか否かを判定する第９のステップと、
前記サーバキャッシュに前記第２のデータが格納されると判定された場合、前記第２のデータを更新する第１０のステップと、
前記ストレージシステムに書込要求を送信する第１１のステップと、
前記アクセス情報の前記第２のデータに対する前記書込処理の回数を更新する第１２のステップと、
前記更新されたアクセス情報に基づいて、前記第２のデータが前記アプリケーションによって頻繁に書き込まれるデータであるか否かを判定する第１３のステップと、を含み、
前記アプリケーションから第２のデータの書込要求を受け付けた場合における第３のステップでは、前記第２のデータが前記アプリケーションによって頻繁に書き込まれるデータであると判定された場合、前記サーバキャッシュに格納される前記第２のデータを無効化することを特徴とするキャッシュ制御方法。
【請求項７】
請求項５に記載のキャッシュ制御方法であって、
前記アプリケーションから第１のデータの読出要求を受け付けた場合における前記第２のステップは、
前記サーバキャッシュに前記第１のデータが格納されるか否かを判定する第１４のステップと、
前記サーバキャッシュに前記第１のデータが格納されないと判定された場合、前記ストレージシステムに読出要求を送信する第１５のステップと、
前記アクセス情報の前記第１のデータに対する前記読出処理の回数を更新する第１６のステップと、
前記更新されたアクセス情報に基づいて、前記第１のデータが前記アプリケーションによって頻繁に読み出されるデータであるか否かを判定する第１７のステップと、を含み、
前記アプリケーションから第１のデータの読出要求を受け付けた場合における前記第３のステップでは、前記第１のデータが前記アプリケーションによって頻繁に読み出されるデータであると判定された場合、前記第１のデータを前記サーバキャッシュに格納し、
前記アプリケーションから第２のデータの書込要求を受け付けた場合における第２のステップは、
前記サーバキャッシュに前記第２のデータが格納されるか否かを判定する第１８のステップと、
前記サーバキャッシュに前記第２のデータが格納されると判定された場合、前記第２のデータを更新する第１９のステップと、
前記ストレージシステムに書込要求を送信する第２０のステップと、
前記アクセス情報の前記第２のデータに対する前記書込処理の回数を更新する第２１のステップと、
前記更新されたアクセス情報に基づいて、前記第２のデータが前記アプリケーションによって頻繁に書き込まれるデータであるか否かを判定する第２２のステップと、を含み、
前記アプリケーションから第２のデータの書込要求を受け付けた場合における第３のステップでは、前記第２のデータが前記アプリケーションによって頻繁に書き込まれるデータであると判定された場合、前記サーバキャッシュに格納される前記第２のデータを無効化することを特徴とするキャッシュ制御方法。
【請求項８】
請求項６又は請求項７に記載のキャッシュ制御方法であって、
前記第８のステップ又は前記第１７のステップは、
前記第１のデータの読み出し回数を前記第１のデータの書き込み回数で除算することによって、第１のアクセス比率を算出するステップと、
前記第１のデータの読み出し回数が第１の閾値以上、かつ、前記第１のアクセス比率が第２の閾値以上の場合に、前記第１のデータが前記アプリケーションによって頻繁に読み出されるデータであると判定するステップと、
前記第１のデータの読み出し回数が前記第１の閾値より小さい、及び、前記第１のアクセス比率が前記第２の閾値より小さい、のいずれか一方を満たす場合に、前記第１のデータが前記アプリケーションによって頻繁に読み出されるデータでないと判定するステップと、を含み、
前記第１３のステップ又は前記第２２のステップは、
前記第２のデータの書き込み回数を前記第２のデータの読み出し回数で除算することによって、第２のアクセス比率を算出するステップと、
前記第２のデータの書き込み回数が第３の閾値以上、及び、前記第２のアクセス比率が第４の閾値以上のいずれか一方を満たす場合に、前記第２のデータが前記アプリケーションによって頻繁に書き込まれるデータであると判定するステップと、
前記第２のデータの書き込み回数が前記第３の閾値より小さい、かつ、前記第２のアクセス比率が前記第４の閾値より小さい場合に、前記第２のデータが前記アプリケーションによって頻繁に書き込まれるデータでないと判定するステップと、を含むことを特徴とするキャッシュ制御方法。
【請求項９】
所定のサービスを提供するアプリケーションが稼働し、前記アプリケーションが使用するデータを格納するストレージシステムと接続されるサーバであって、
前記サーバは、プロセッサ、メモリ、一時的にデータを格納するサーバキャッシュが設定されるキャッシュデバイス、及び他の装置と接続するためのインタフェースを備え、
前記サーバは、前記サーバを制御するオペレーティングシステムを備え、
前記オペレーティングシステムは、
前記サーバキャッシュを制御するキャッシュドライバを含み、
データに対する読出処理の回数、及び書込処理の回数を格納するアクセス情報を保持し、
前記キャッシュドライバは、
前記アプリケーションからＩ／Ｏ要求を受け付けた場合、前記アクセス情報を更新し、
前記更新されたアクセス情報に基づいて前記Ｉ／Ｏ要求の対象のデータのアクセス特性を解析し、
前記アクセス特性の解析結果に基づいて、前記Ｉ／Ｏ要求の対象のデータを前記サーバキャッシュに格納するか否かを判定することを特徴とするサーバ。
【請求項１０】
請求項９に記載のサーバであって、
前記キャッシュドライバは、
前記アプリケーションから第１のデータの読出要求を受け付けた場合、前記サーバキャッシュに前記第１のデータが格納されるか否かを判定し、
前記サーバキャッシュに前記第１のデータが格納されないと判定された場合、前記ストレージシステムに読出要求を送信し、
前記サーバキャッシュに前記第１のデータを格納し、
前記アクセス情報の前記第１のデータに対する前記読出処理の回数を更新し、
前記更新されたアクセス情報に基づいて、前記第１のデータが前記アプリケーションによって頻繁に読み出されるデータであるか否かを判定し、
前記第１のデータが前記アプリケーションによって頻繁に読み出されるデータでないと判定された場合、前記サーバキャッシュに格納される前記第１のデータを無効化し、
前記アプリケーションから第２のデータの書込要求を受け付けた場合、前記サーバキャッシュに前記第２のデータが格納されるか否かを判定し、
前記サーバキャッシュに前記第２のデータが格納されると判定された場合、前記第２のデータを更新し、
前記ストレージシステムに書込要求を送信し、
前記アクセス情報の前記第２のデータに対する前記書込処理の回数を更新し、
前記更新されたアクセス情報に基づいて、前記第２のデータが前記アプリケーションによって頻繁に書き込まれるデータであるか否かを判定し、
前記第２のデータが前記アプリケーションによって頻繁に書き込まれるデータであると判定された場合、前記サーバキャッシュに格納される前記第２のデータを無効化することを特徴とするサーバ。
【請求項１１】
請求項９に記載のサーバであって、
前記キャッシュドライバは、
前記アプリケーションから第１のデータの読出要求を受け付けた場合、前記サーバキャッシュに前記第１のデータが格納されるか否かを判定し、
前記サーバキャッシュに前記第１のデータが格納されないと判定された場合、前記ストレージシステムに読出要求を送信し、
前記アクセス情報の前記第１のデータに対する前記読出処理の回数を更新し、
前記更新されたアクセス情報に基づいて、前記第１のデータが前記アプリケーションによって頻繁に読み出されるデータであるか否かを判定し、
前記第１のデータが前記アプリケーションによって頻繁に読み出されるデータであると判定された場合、前記第１のデータを前記サーバキャッシュに格納し、
前記アプリケーションから第２のデータの書込要求を受け付けた場合、前記サーバキャッシュに前記第２のデータが格納されるか否かを判定し、
前記サーバキャッシュに前記第２のデータが格納されると判定された場合、前記第２のデータを更新し、
前記ストレージシステムに書込要求を送信し、
前記アクセス情報の前記第２のデータに対する前記書込処理の回数を更新し、
前記更新されたアクセス情報に基づいて、前記第２のデータが前記アプリケーションによって頻繁に書き込まれるデータであるか否かを判定し、
前記第２のデータが前記アプリケーションによって頻繁に書き込まれるデータであると判定された場合、前記サーバキャッシュに格納される前記第２のデータを無効化することを特徴とするサーバ。
【請求項１２】
請求項１０又は請求項１１に記載のサーバであって、
前記キャッシュドライバは、
前記第１のデータの読み出し回数を前記第１のデータの書き込み回数で除算することによって、第１のアクセス比率を算出し、
前記第１のデータの読み出し回数が第１の閾値以上、かつ、前記第１のアクセス比率が第２の閾値以上の場合に、前記第１のデータが前記アプリケーションによって頻繁に読み出されるデータであると判定し、
前記第１のデータの読み出し回数が前記第１の閾値より小さい、及び、前記第１のアクセス比率が前記第２の閾値より小さい、のいずれか一方を満たす場合に、前記第１のデータが前記アプリケーションによって頻繁に読み出されるデータでないと判定し、
前記第２のデータの書き込み回数を前記第２のデータの読み出し回数で除算することによって、第２のアクセス比率を算出し、
前記第２のデータの書き込み回数が第３の閾値以上、及び、前記第２のアクセス比率が第４の閾値以上のいずれか一方を満たす場合に、前記第２のデータが前記アプリケーションによって頻繁に書き込まれるデータであると判定し、
前記第２のデータの書き込み回数が前記第３の閾値より小さい、かつ、前記第２のアクセス比率が前記第４の閾値より小さい場合に、前記第２のデータが前記アプリケーションによって頻繁に書き込まれるデータでないと判定することを特徴とするサーバ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、サーバ及びストレージシステムが有するキャッシュ領域を用いたＩ／Ｏ処理におけるキャッシュ制御に関する。
【背景技術】
【０００２】
近年、Ｆｌａｓｈメモリのような不揮発性メモリ（ＮＶＭ：Ｎｏｎ  Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ）が様々電子機器に用いられる。不揮発性メモリは、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）のように機械的動作を伴わないため、ＨＤＤに比べ高速なアクセスが可能である。
【０００３】
そのため、サーバ及びストレージシステム等高速なデータアクセスが必要とされるエンタープライズ用途にも用いられる。特に、サーバに搭載可能な不揮発性メモリは安価になっているため、広く普及している。
【０００４】
サーバが備える揮発性メモリ及び不揮発性メモリを用いて高速なデータアクセスを実現する計算機システムが様々考えられている（例えば、特許文献１参照）。特許文献１には、メインメモリとは異なるデータキャッシュ用のメモリを有するシステムにおけるキャッシュ制御が記載されている。例えば、ディスクへのデータの書き込みが検出された場合、デバイスドライバが、データキャッシュ用のメモリにデータを書き込むことができるか否かを判定し、必要な場合にはデータキャッシュ用のメモリからデータを追い出して、要求されたデータを書き込む。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許出願公開第２００９／００２４７９３号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来のキャッシュ制御方法としては、ＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）方式、ＭＲＵ（Ｍｏｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）方式、又はＬＦＵ（Ｌｅａｓｔ  Ｆｒｅｑｕｅｎｔｌｙ  Ｕｓｅｄ）方式等が用いられる。
【０００７】
ＬＲＵ方式では、最近最も使われていないデータがキャッシュから破棄される。ＭＲＵ方式では、最近最も使われているデータがキャッシュから破棄される。また、ＬＦＵ方式では、頻繁に使われていないデータがキャッシュから破棄される。
【０００８】
しかし、従来のキャッシュ制御方法を単純に適用しただけでは、計算機システムの性能を最適化するキャッシュの制御が実現できない。ここで、ＬＲＵ方式を用いた場合のキャッシュ制御を例に説明する。
【０００９】
アプリケーションからの読出頻度が高いデータがサーバキャッシュに格納される場合、最後にアクセスされてから長時間アクセスされていないと、サーバキャッシュから当該データが破棄される。この場合、再度、ストレージシステムからデータを読み出す必要があるため、アプリケーションの処理性能が低下する。また、アプリケーションからの読出頻度が高いデータがストレージキャッシュにのみ格納される場合、サーバから読出要求が頻繁に送信される。したがって、読出処理によるストレージシステムの負荷が増大するため、ストレージシステムにおける書込処理の処理性能が低下する。
【００１０】
さらに、キャッシュ制御のための設定は煩雑であり、ユーザの負担が大きい。
【００１１】
特許文献１に記載の技術を用いても前述した課題が発生する。
【００１２】
本願発明は前述した課題に鑑みてなされた発明である。すなわち、計算機システムの処理性能を自動的に最適化するキャッシュ制御を実現するシステム及び方法を提供することである。
【課題を解決するための手段】
【００１３】
本願において開示される発明の代表的な一例を示せば以下の通りである。すなわち、所定のサービスを提供するアプリケーションが稼働するサーバ、及び、前記アプリケーションが使用するデータを格納するストレージシステムを備える計算機システムであって、前記サーバは、第１のプロセッサ、第１のメモリ、一時的にデータを格納するサーバキャッシュが設定されるキャッシュデバイス、及び他の装置と接続するための第１のインタフェースを有し、前記ストレージシステムは、第２のプロセッサ、第２のメモリ、及び他の装置と接続するための第２のインタフェースを含むコントローラ、並びに複数の記憶装置を有し、前記サーバは、前記サーバを制御するオペレーティングシステムを有し、前記ストレージシステムは、一時的にデータを格納するストレージキャッシュ、及び前記ストレージを制御するストレージ制御部を有し、前記オペレーティングシステムは、前記サーバキャッシュを制御するキャッシュドライバを含み、データに対する読出処理の回数、及び書込処理の回数を格納するアクセス情報を保持し、前記キャッシュドライバは、前記アプリケーションからＩ／Ｏ要求を受け付けた場合、前記アクセス情報を更新し、前記更新されたアクセス情報に基づいて前記Ｉ／Ｏ要求の対象のデータのアクセス特性を解析し、前記アクセス特性の解析結果に基づいて、前記Ｉ／Ｏ要求の対象のデータを前記サーバキャッシュに格納するか否かを判定することを特徴とする。
【発明の効果】
【００１４】
アプリケーションによるデータのアクセス特性に基づいて、サーバキャッシュに格納するデータを制御することによって、計算機システムの処理性能を向上させることができる。
【００１５】
前述した以外の課題、構成及び効果は、以下の実施形態の説明によって明らかにされる。
【図面の簡単な説明】
【００１６】
【図１】本発明の概要を説明するブロック図である。
【図２】本発明の実施例１の計算機システムの構成例を示すブロック図である。
【図３】本発明の実施例１におけるアクセス情報の一例を示す説明図である。
【図４Ａ】本発明の実施例１におけるサーバが実行するＩ／Ｏ処理の一例を説明するフローチャートである。
【図４Ｂ】本発明の実施例１におけるサーバが実行するＩ／Ｏ処理の一例を説明するフローチャートである。
【図５Ａ】本発明の実施例１におけるキャッシュ判定処理の一例を説明するフローチャートである。
【図５Ｂ】本発明の実施例１におけるキャッシュ判定処理の一例を説明するフローチャートである。
【図６】本発明の実施例１におけるキャッシュ登録処理の一例を説明するフローチャートである。
【図７】本発明における効果を説明するグラフである。
【図８Ａ】本発明の実施例２におけるサーバが実行するＩ／Ｏ処理の一例を説明するフローチャートである。
【図８Ｂ】本発明の実施例２におけるサーバが実行するＩ／Ｏ処理の一例を説明するフローチャートである。
【図９Ａ】本発明の実施例２におけるキャッシュ判定処理の一例を説明するフローチャートである。
【図９Ｂ】本発明の実施例２におけるキャッシュ判定処理の一例を説明するフローチャートである。
【図１０】本発明の実施例３におけるアクセス情報の一例を示す説明図である。
【発明を実施するための形態】
【００１７】
以下、図面を用いて実施例について説明する。
【００１８】
図１は、本発明の概要を説明するブロック図である。
【００１９】
本発明では、サーバ１００が、サーバキャッシュ１３０に格納されるデータを制御する。具体的には、サーバ１００は、アプリケーション１２０によって頻繁に読み出されるデータをサーバキャッシュ１３０に格納する。一方、サーバ１００は、頻繁に書き込まれるデータをサーバキャッシュ１３０に格納されないように制御する。
【００２０】
一方、ストレージシステム２００は、記憶媒体２０６（図２参照）からデータを読み出す場合、ストレージキャッシュ２２０に記憶媒体２０６（図２参照）から読み出されたデータを格納する。また、ストレージシステム２００は、記憶媒体２０６（図２参照）にデータを書き込む場合、ストレージキャッシュ２２０にデータを格納する。これによって、読出処理及び書込処理の処理性能を向上させることができる。
【００２１】
本発明では、サーバ１００が前述したキャッシュの制御を行うことによって、図１に示すようなアクセス状態となる。すなわち、サーバキャッシュ１３０には頻繁に読み出されるデータが格納され、ストレージキャッシュ２２０には、記憶媒体２０６に書き込まれるデータが格納される。
【００２２】
したがって、本発明では以下のような効果が奏される。
【００２３】
第１に、サーバ１００は、アプリケーション１２０からデータの読出要求を受信した場合、ストレージシステム２００にアクセスすることなく、サーバキャッシュ１３０からデータを読み出すことができる。これによって、高速なデータの読み出しが可能となる。
【００２４】
第２に、頻繁に書き込まれるデータはサーバキャッシュ１３０に格納されないため、書込処理によるサーバキャッシュ１３０の性能劣化を抑止することができる。一般的に、サーバキャッシュ１３０として用いられるＦｌａｓｈメモリには、書き込み回数に制限があり、頻繁にデータの書込処理が発生すると、Ｆｌａｓｈメモリの劣化が生じる。そのため、Ｆｌａｓｈメモリへの書込処理の回数を低減することによって、サーバキャッシュ１３０の性能劣化を抑止できる。
【００２５】
第３に、サーバ１００から送信される読出要求の数が減少するため、ストレージシステム２００は、当該ストレージシステム２００の性能限界まで書込処理を実行することができる。
【００２６】
第４に、前述したキャッシュの制御は、サーバ１００がデータのアクセス特性に基づいて自動的に実行する。したがって、システムの管理者又はアプリケーション１２０を利用するユーザ等は、予めキャッシュ制御に関する情報を設定する必要がない。
【実施例１】
【００２７】
図２は、本発明の実施例１の計算機システムの構成例を示すブロック図である。
【００２８】
本実施例の計算機は、サーバ１００及びストレージシステム２００から構成される。図２には一つのサーバ１００及び一つのストレージシステム２００から構成される計算機システムを示しているが、これに限定されない。計算機システムは、複数のサーバ１００及び複数のストレージシステム２００を含んでもよい。
【００２９】
サーバ１００及びストレージシステム２００は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）又はＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）を介して接続される。また、同一筐体内にサーバ１００及びストレージシステム２００を備える計算機システムであってもよい。この場合、サーバ１００及びストレージシステム２００は、バックプレーンを介して接続される。また、サーバ１００及びストレージシステム２００は、直接接続されてもよい。
【００３０】
サーバ１００は、所定の業務を実行する計算機である。サーバ１００は、プロセッサ１０１、メモリ１０２、キャッシュデバイス１０３、及び接続インタフェース１０４を備え、各構成は内部経路を介して互いに接続される。なお、サーバ１００は、ストレージ装置、及び入出力装置を備えてもよい。ストレージ装置は、例えば、ＨＤＤ等が考えられる。また、入出力装置には、キーボード、マウス、タッチパネル、及びディスプレイ等が含まれる。
【００３１】
プロセッサ１０１は、メモリ１０２に格納されるプログラムを実行する。プロセッサ１０１がプログラムを実行することによって、サーバ１００が備える機能が実現される。以下の説明では、プログラムを主体に処理を説明する場合、プロセッサ１０１によってプログラムが実行されていることを示す。
【００３２】
メモリ１０２は、プロセッサ１０１によって実行されるプログラム及び当該プログラムの実行に必要な情報を格納する。メモリ１０２に格納されるプログラム及び情報については後述する。
【００３３】
キャッシュデバイス１０３は、データを一時的に格納するサーバキャッシュ１３０を実現するデバイスである。キャッシュデバイス１０３の全記憶領域がサーバキャッシュ１３０として用いられる。
【００３４】
本実施例では、Ｆｌａｓｈメモリを有するＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）をキャッシュデバイス１０３として用いるものとする。なお、キャッシュデバイス１０３は、Ｆｌａｓｈメモリのような不揮発性メモリに限定されない。例えば、ＤＲＡＭのような揮発性メモリを用いてもよい。
【００３５】
本実施例のサーバキャッシュ１３０には、ＬＵ（Ｌｏｇｉｃａｌ  Ｕｎｉｔ）の論理ブロック単位のデータが格納される。例えば、バッファキャッシュを用いることが考えられる。バッファキャッシュは、サーバキャッシュ１３０にバッファページを割り当て、所定のブロックサイズのブロックバッファに当該バッファページを分割することによって生成される。
【００３６】
バッファキャッシュには、論理ブロック単位のデータの格納場所を特定するためのバッファヘッドが含まれる。なお、ＬＵは、後述するようにストレージシステム２００によって提供される。
【００３７】
以下の説明では、論理ブロック単位のデータをブロックデータとも記載する。
【００３８】
接続インタフェース１０４は、ストレージシステム２００等の外部装置と接続するためのデバイスである。例えば、サーバ１００及びストレージシステム２００がＳＡＮを介して接続される場合、ＦＣ（Ｆｉｂｅｒ  Ｃｈａｎｎｅｌ）アダプタカードが接続インタフェース１０４として用いられる。また、サーバ１００及びストレージシステム２００がＬＡＮを介して接続される場合、ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）が接続インタフェース１０４として用いられる。
【００３９】
ここで、メモリ１０２に格納されるプログラム及び情報について説明する。本実施例のメモリ１０２は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）１１０、及びアプリケーション１２０を実現するプログラムを格納する。なお、メモリ１０２には、その他のプログラム及び情報が格納されてもよい。
【００４０】
ＯＳ１１０は、サーバ１００を制御する機能を提供し、また、サーバ１００とストレージシステム２００との間のデータ転送を制御する。ＯＳ１１０は、ＶＦＳ１１１、ファイルシステム１１２、キャッシュドライバ１１３、デバイスドライバ１１４、及びアクセス情報１１５を含む。なお、ＯＳ１１０は、図示しない機能部を有するが、公知のものであるため説明を省略する。
【００４１】
ＶＦＳ（Ｖｉｒｔｕａｌ  Ｆｉｌｅｓｙｓｔｅｍ）１１１は、複数の種類のファイルシステム１１２に対して共通のインタフェースを提供する。ＶＦＳ１１１は、アプリケーション１２０によるデータへの操作（読み出し、書き込み等）を、各ファイルシステム１１２に依存した操作に変換する。これによって、アプリケーション１２０は、同一の操作を用いて異なるファイルシステムのデバイスにアクセスすることができる。
【００４２】
また、ＶＦＳ１１１は、ファイルシステム１１２の管理情報、及びファイルシステム１１２に固有の情報を保持する。例えば、スーパーブロックオブジェクト、ｉｎｏｄｅオブジェクト、ｆｉｌｅオブジェクト、及びｄｅｎｔｒｙオブジェクト等を保持する。
【００４３】
ファイルシステム１１２は、記憶媒体に格納されるデータをファイルとして管理するための機能を提供する。本実施例では、複数のファイルシステム１１２が存在するものとする。なお、ファイルシステム１１２は一つであってもよい。
【００４４】
ＯＳ１１０は、ストレージシステム２００によって提供されるＬＵを所定のファイルシステム１１２にフォーマットする。このとき、ＯＳ１１０は、ＬＵを所定の論理ブロックに分割し、各論理ブロックに識別番号を割り当てる。ファイルシステム１１２は、一つ以上のブロックデータから構成されるデータをファイルとして管理する。
【００４５】
キャッシュドライバ１１３は、キャッシュデバイス１０３を制御する。デバイスドライバ１１４は、サーバ１００が備える接続インタフェース１０４等のデバイスを制御する。
【００４６】
アクセス情報１１５は、データのアクセス特性に関する情報を格納する。アクセス情報１１５の詳細については、図３を用いて後述する。
【００４７】
アプリケーション１２０は、所定の業務を実行する。本発明は、サーバ１００上で実行されるアプリケーション１２０の種類及び業務内容に限定されない。
【００４８】
なお、メモリ１０２に格納されるプログラム及び情報は、ストレージシステム２００又はサーバ１００が備えるストレージ装置に格納されてもよい。この場合、プロセッサ１０１がストレージシステム２００又はストレージ装置からプログラム及び情報を取得し、取得されたプログラム及び情報をメモリ１０２にロードする。
【００４９】
ストレージシステム２００は、サーバ１００が実行する業務に用いる記憶領域を提供する。ストレージシステム２００は、コントローラ２０１、及び複数の記憶媒体２０６を備え、各構成は内部経路を介して互いに接続される。
【００５０】
コントローラ２０１は、ストレージシステム２００を制御し、また、サーバ１００とストレージシステム２００との間のデータ転送を制御する。コントローラ２０１は、プロセッサ２０２、メモリ２０３、接続インタフェース２０４、及びストレージインタフェース２０５を備え、各構成は内部経路を介して互いに接続される。
【００５１】
プロセッサ２０２は、メモリ２０３に格納されるプログラムを実行する。プロセッサ２０２がプログラムを実行することによって、ストレージシステム２００が備える機能が実現される。以下の説明では、プログラムを主体に処理を説明する場合、プロセッサ２０２によってプログラムが実行されていることを示す。
【００５２】
メモリ２０３は、プロセッサ２０２によって実行されるプログラム及び当該プログラムの実行に必要な情報を格納する。メモリ２０３に格納されるプログラム及び情報については後述する。また、メモリ２０３は、一時的にデータを格納する記憶領域であるストレージキャッシュ２２０を含む。ストレージキャッシュ２２０は、サーバ１００によってアクセスされたデータを一時的に格納する。
【００５３】
例えば、サーバ１００から読出要求を受信した場合、ストレージシステム２００は、ストレージキャッシュ２２０に格納されるデータを応答する。また、サーバ１００から書込要求を受信した場合、ストレージシステム２００は、ストレージキャッシュ２２０にデータを書き込み、サーバ１００に処理の完了を通知し、その後、記憶媒体２０６にデータを書き込む。前述した処理によって、サーバ１００への応答を高速化することができる。
【００５４】
接続インタフェース２０４は、サーバ１００等の外部装置と接続するためのデバイスである。例えば、サーバ１００及びストレージシステム２００がＳＡＮを介して接続される場合、ＣＡ（Ｃｈａｎｎｅｌ  Ａｄａｐｔｅｒ）が接続インタフェース２０４として用いられる。また、サーバ１００及びストレージシステム２００がＬＡＮを介して接続される場合、ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）が接続インタフェース２０４として用いられる。
【００５５】
ストレージインタフェース２０５は、記憶媒体２０６と接続するためのデバイスである。記憶媒体２０６は、データを格納する装置である。記憶媒体２０６は、例えばＨＤＤ又はＳＳＤが考えられる。ただし、データを格納できればどのような装置であってもよい。
【００５６】
ここで、メモリ２０３に格納されるプログラム及び情報について説明する。本実施例のメモリ２０３は、ストレージ制御部２１０を実現するプログラムを格納する。なお、メモリ２０３には、その他のプログラム及び情報が格納されてもよい。例えば、記憶媒体２０６に格納されるデータを管理するための情報等が格納されてもよい。
【００５７】
ストレージ制御部２１０は、ストレージシステム２００を制御する。本実施例では、複数の記憶媒体２０６を用いてＲＡＩＤが構成される。ストレージ制御部２１０は、ＲＡＩＤボリュームを論理的に分割することによって、複数のＬＵ（Ｌｏｇｉｃａｌ  Ｕｎｉｔ）を生成する。また、ストレージ制御部２１０は、生成された複数のＬＵをサーバ１００に提供する。
【００５８】
ストレージ制御部２１０は、ＬＵと記憶媒体２０６との対応関係を示す管理情報を有する。ストレージ制御部２１０は、サーバ１００からＬＵへのアクセス要求を受信した場合、管理情報に基づいてＬＵを構成する記憶領域（論理ブロック）を提供する記憶媒体２０６にアクセスする。また、ストレージ制御部２１０は、ＬＵの管理機能、データ転送機能、及びキャッシュ制御機能等の各種機能を有するが、公知の技術であるため詳細な説明を省略する。
【００５９】
なお、メモリ２０３に格納されるプログラム及び情報は、記憶媒体２０６に格納されてもよい。この場合、プロセッサ２０２が記憶媒体２０６からプログラム及び情報を取得し、取得されたプログラム及び情報をメモリ２０３にロードする。
【００６０】
なお、ストレージのメモリ２０３上にストレージキャッシュ２２０を設定したが本発明はこれに限定されない。コントローラ２０１は、キャッシュ用のメモリを備えていてもよい。キャッシュ用のメモリは、不揮発性のメモリ又は揮発性のメモリのいずれであってもよい。
【００６１】
図３は、本発明の実施例１におけるアクセス情報１１５の一例を示す説明図である。
【００６２】
アクセス情報１１５は、ブロック番号３０１及びアクセス種別３０２を含む。
【００６３】
ブロック番号３０１は、論理ブロックのブロック番号である。アクセス種別３０２は、アクセスの種別を示し、具体的にはＲｅａｄ３０３及びＷｒｉｔｅ３０４の二つのアクセスの種別が存在する。
【００６４】
図３に示す例では、ブロック番号３０１が「３」のブロックデータは、読み出された回数が「８」回、書き込まれた回数が「１」であることを示す。
【００６５】
なお、アクセス情報１１５には、ＬＵの全ての論理ブロックのエントリが含まれなくてもよい。例えば、１回以上アクセスされた論理ブロックのエントリのみを含むものであってもよい。
【００６６】
図４Ａ及び図４Ｂは、本発明の実施例１におけるサーバ１００が実行するＩ／Ｏ処理の一例を説明するフローチャートである。
【００６７】
ＯＳ１１０は、アプリケーション１２０からＩ／Ｏ要求を受け取った場合、以下で説明するＩ／Ｏ処理を開始する。なお、Ｉ／Ｏ要求には、アクセス対象のファイルの識別情報又はアクセス対象のブロックデータの識別情報が含まれる。例えば、アクセス対象がファイルの場合にはファイル名等が含まれ、アクセス対象がブロックデータの場合にはブロック番号等が含まれる。ここでは、Ｉ／Ｏ要求にはファイル名が含まれるものとする。
【００６８】
ＯＳ１１０は、Ｉ／Ｏ要求が読出要求であるか否かを判定する（ステップＳ１０１）。
【００６９】
Ｉ／Ｏ要求が読出要求であると判定された場合、ＯＳ１１０は、サーバキャッシュ１３０に読出対象のデータが存在するか否かを判定する（ステップＳ１０２）。具体的には、以下のような処理が実行される。
【００７０】
ＶＦＳ１１１が、読出対象のファイルを管理するファイルシステム１１２にファイルの読み出しを依頼する。ファイルシステム１１２は、キャッシュドライバ１１３を呼び出し、読出対象のファイルのブロックデータの検索を指示する。当該指示には、読出対象のファイルのブロックデータのブロック番号を特定するための情報が含まれる。以下の説明では、ファイルのブロックデータのブロック番号を特定するための情報を、ブロック取得情報とも記載する。
【００７１】
キャッシュドライバ１１３は、ブロック取得情報に基づいて、ファイルのブロックデータのブロック番号を特定する。ファイルが複数のブロックデータを含む場合、キャッシュドライバ１１３は、ファイルに含まれる全てのブロックデータのブロック番号を特定する。
【００７２】
キャッシュドライバ１１３は、サーバキャッシュ１３０に格納されるブロックデータの中から、読出対象のファイルのブロックデータを検索する。ブロック番号に基づくブロックデータの検索方法は公知の技術であるため詳細な説明を省略するが、例えば、バッファヘッドに基づいてブロックデータが検索される。
【００７３】
読出対象のファイルのブロックデータが存在する場合、キャッシュドライバ１１３は、ＶＦＳ１１１に当該ブロックデータを出力する。一方、読出対象のファイルのブロックデータが存在しない場合、キャッシュドライバ１１３は、ＶＦＳ１１１にブロックデータが存在しない旨を通知する。
【００７４】
なお、複数のブロックデータを含むファイルにおいて、サーバキャッシュ１３０に少なくとも一つのブロックデータが存在しない場合、キャッシュドライバ１１３は、ＶＦＳ１１１にブロックデータが存在しない旨を通知するものとする。
【００７５】
以上がステップＳ１０２の処理の説明である。
【００７６】
サーバキャッシュ１３０に読出対象のファイルのブロックデータが存在すると判定された場合、ＯＳ１１０は、サーバキャッシュ１３０からデータを読み出し（ステップＳ１０３）、アプリケーション１２０に読出処理の完了通知を送信する（ステップＳ１０４）。さらに、ＯＳ１１０は、アクセス情報１１５を更新し（ステップＳ１０５）、処理を終了する。具体的には、以下のような処理が実行される。
【００７７】
キャッシュドライバ１１３は、検索されたブロックデータをＶＦＳ１１１に出力する。ＶＦＳ１１１は、アプリケーション１２０に完了通知とともにキャッシュドライバ１１３から取得したブロックデータを出力する。
【００７８】
また、キャッシュドライバ１１３は、アクセス情報１１５のブロック番号３０１を参照して、読み出されたブロックデータのブロック番号に対応するエントリを検索する。キャッシュドライバ１１３は、検索されたエントリのＲｅａｄ３０３の値を「１」加算する。
【００７９】
以上がステップＳ１０３、ステップＳ１０４及びステップＳ１０５の処理の説明である。
【００８０】
ステップＳ１０２において、サーバキャッシュ１３０に読出対象のファイルのブロックデータが存在しないと判定された場合、ＯＳ１１０は、ストレージシステム２００に読出要求を送信する（ステップＳ１０６）。具体的には、以下のような処理が実行される。
【００８１】
キャッシュドライバ１１３は、ブロック取得情報に基づいて、読出要求を登録し、デバイスドライバ１１４を呼び出す。なお、アプリケーションの処理は、デバイスドライバ１１４から登録された全ての読出要求の完了通知を受けつけるまで待ち状態となる。
【００８２】
デバイスドライバ１１４は、登録された読出要求に基づいて、ストレージシステム２００に読出要求を送信する。
【００８３】
以上がステップＳ１０６の処理の説明である。
【００８４】
ＯＳ１１０は、ストレージシステム２００から読み出されたデータをサーバキャッシュ１３０に格納するためにキャッシュ登録処理を実行する（ステップＳ１０７）。具体的には、以下のような処理が実行される。
【００８５】
デバイスドライバ１１４は、ストレージシステム２００からファイルのブロックデータを含む完了通知をキャッシュドライバ１１３に出力する。
【００８６】
キャッシュドライバ１１３は、デバイスドライバ１１４から完了通知を受けつけると、キャッシュ登録処理を開始する。なお、キャッシュ登録処理の詳細については、図６を用いて後述する。
【００８７】
以上がステップＳ１０７の処理の説明である。
【００８８】
ＯＳ１１０は、登録された全ての読出処理の完了通知を受け付けた後、アプリケーション１２０に完了通知を送信する（ステップＳ１０８）。また、ＯＳ１１０は、アクセス情報１１５を更新する（ステップＳ１０９）。具体的には、以下のような処理が実行される。
【００８９】
キャッシュドライバ１１３は、登録された全ての読出要求の完了通知を受けつけた後、サーバキャッシュ１３０に格納されるブロックデータをＶＦＳ１１１に出力する。ＶＦＳ１１１は、アプリケーション１２０に完了通知とともに当該ブロックデータを出力する。
【００９０】
また、キャッシュドライバ１１３は、アクセス情報１１５のブロック番号３０１を参照して、完了通知に含まれるブロックデータのブロック番号に対応するエントリを検索する。キャッシュドライバ１１３は、検索されたエントリのＲｅａｄ３０３の値を「１」加算する。
【００９１】
以上がステップＳ１０８及びステップＳ１０９の処理の説明である。
【００９２】
ＯＳ１１０は、キャッシュ判定処理を実行し（ステップＳ１１０）、その後処理を終了する。具体的には、キャッシュドライバ１１３が、キャッシュ判定処理を実行する。なお、キャッシュ判定処理の詳細は、図５Ａ及び図５Ｂを用いて後述する。
【００９３】
ステップＳ１０１においてＩ／Ｏ要求が読出要求でない、すなわち、書込要求であると判定された場合、ＯＳ１１０は、サーバキャッシュ１３０に書込対象のファイルのブロックデータが存在するか否かを判定する（ステップＳ１１１）。ステップＳ１１１の処理はステップＳ１０２と同一であるため説明を省略する。
【００９４】
サーバキャッシュ１３０に書込対象のファイルのブロックデータが存在すると判定された場合、ＯＳ１１０は、サーバキャッシュ１３０に格納されるブロックデータを更新する（ステップＳ１１２）。また、ＯＳ１１０は、ストレージシステム２００に書込要求を送信し（ステップＳ１１３）、アプリケーション１２０に完了通知を送信する（ステップＳ１１４）。さらに、ＯＳ１１０は、アクセス情報１１５を更新する（ステップＳ１１５）。具体的には、以下のような処理が実行される。
【００９５】
キャッシュドライバ１１３は、検索されたブロックデータが格納されるバッファキャッシュに、新たなブロックデータを上書きする。
【００９６】
キャッシュドライバ１１３は、ブロック取得情報に基づいて、書込要求を登録し、デバイスドライバ１１４を呼び出す。キャッシュドライバ１１３は、ＶＦＳ１１１に完了通知を出力する。ＶＦＳ１１１は、アプリケーション１２０に完了通知を出力する。
【００９７】
デバイスドライバ１１４は、登録された書込要求に基づいて、ストレージシステム２００に書込要求を送信する。
【００９８】
キャッシュドライバ１１３は、アクセス情報１１５のブロック番号３０１を参照して、上書きされたブロックデータのブロック番号に対応するエントリを検索する。キャッシュドライバ１１３は、検索されたエントリのＷｒｉｔｅ３０４の値を「１」加算する。
【００９９】
以上がステップＳ１１２、ステップＳ１１３、ステップＳ１１４及びステップＳ１１５の処理の説明である。
【０１００】
ＯＳ１１０は、キャッシュ判定処理を実行し（ステップＳ１１６）、その後処理を終了する。具体的には、キャッシュドライバ１１３がキャッシュ判定処理を実行する。なお、キャッシュ判定処理の詳細は、図５Ａ及び図５Ｂを用いて後述する。
【０１０１】
ステップＳ１１１において、サーバキャッシュ１３０に書込対象のファイルのブロックデータが存在しないと判定された場合、ＯＳ１１０は、書込対象のブロックデータをサーバキャッシュ１３０に格納するためにキャッシュ登録処理を実行する（ステップＳ１１７）。キャッシュ登録処理の詳細については、図６を用いて後述する。
【０１０２】
ＯＳ１１０は、ストレージシステム２００に書込要求を送信し（ステップＳ１１８）、アプリケーション１２０に完了通知を送信する（ステップＳ１１９）。さらに、ＯＳ１１０は、アクセス情報１１５を更新する（ステップＳ１２０）。
【０１０３】
ステップＳ１１８、ステップＳ１１９及びステップＳ１２０の処理は、ステップＳ１１３、ステップＳ１１４及びステップＳ１１５と同一であるため説明を省略する。
【０１０４】
ＯＳ１１０は、キャッシュ判定処理を実行し（ステップＳ１２１）、その後処理を終了する。具体的には、キャッシュドライバ１１３がキャッシュ判定処理を実行する。なお、キャッシュ判定処理の詳細は、図５Ａ及び図５Ｂを用いて後述する。
【０１０５】
なお、ストレージシステム２００は、サーバ１００から読出要求又は書込要求を受信した場合、以下のような処理を実行する。
【０１０６】
サーバ１００から読出要求を受信した場合、ストレージシステム２００は、ストレージキャッシュ２２０に読出対象のブロックデータが格納されるか否かを判定する。
【０１０７】
ストレージキャッシュ２２０に読出対象のブロックデータが格納されると判定された場合、ストレージシステム２００は、ストレージキャッシュ２２０に格納されるデータをサーバ１００に送信する。
【０１０８】
ストレージキャッシュ２２０に読出対象のブロックデータが格納されていないと判定された場合、ストレージシステム２００は、ストレージキャッシュ２２０の記憶領域を確保し、記憶媒体２０６からブロックデータを読み出す。さらに、ストレージシステム２００は、確保された記憶領域に読み出されたブロックデータを格納し、サーバ１００に当該ブロックデータを送信する。
【０１０９】
また、サーバ１００から書込要求を受信した場合、ストレージシステム２００は、ストレージキャッシュ２２０に書込対象のブロックデータが格納されるか否かを判定する。
【０１１０】
ストレージキャッシュ２２０に書込対象のブロックデータが格納されると判定された場合、ストレージシステム２００は、ストレージキャッシュ２２０に格納されるブロックデータを更新し、サーバ１００に完了通知を送信する。その後、ストレージシステム２００は、ストレージキャッシュ２２０に格納されるブロックデータを、記憶媒体２０６の所定の記憶領域に書き込む。
【０１１１】
ストレージキャッシュ２２０に書込対象のブロックデータが格納されていないと判定された場合、ストレージシステム２００は、ストレージキャッシュ２２０の記憶領域を確保し、確保された記憶領域に書込対象のブロックデータを格納し、サーバ１００に完了通知を送信する。その後、ストレージシステム２００は、ストレージキャッシュ２２０に格納されるブロックデータを、記憶媒体２０６の所定の記憶領域に書き込む。
【０１１２】
なお、ステップＳ１０５の処理の後にキャッシュ判定処理が実行されてもよい。
【０１１３】
図５Ａ及び図５Ｂは、本発明の実施例１におけるキャッシュ判定処理の一例を説明するフローチャートである。
【０１１４】
キャッシュドライバ１１３は、アクセス情報１１５を更新した後、以下で説明するキャッシュ判定処理を実行する。なお、処理対象のブロックデータが複数存在する場合、キャッシュドライバ１１３は、各ブロックデータに対して以下で説明する処理を繰り返し実行する。
【０１１５】
キャッシュドライバ１１３は、キャッシュ判定処理を実行する必要があるか否かを判定する（ステップＳ２０１）。例えば、以下の式（１）を満たすか否かが判定される。
【０１１６】
【数１】
2014232350.tif 000003
【０１１７】
ここで、Ｒｅａｄ  ＣｎｔｒはブロックデータのＲｅａｄ３０３の値を表す変数であり、Ｗｒｉｔｅ  Ｃｎｔｒは、ブロックデータのＷｒｉｔｅ３０４の値を表す変数である。また、Ｊは閾値を表す。式（１）を満たす場合、キャッシュ判定処理を実行する必要があると判定される。
【０１１８】
初めて読み出されたブロックデータ等はアクセス特性が不明である。そのため、本実施例では、サーバ１００は、一定間、ブロックデータのアクセス状態を監視する。なお、本実施例では、アクセス頻度を用いているが、アクセス時間等を用いてもよい。
【０１１９】
キャッシュ判定処理を実行する必要がないと判定された場合、キャッシュドライバ１１３は、処理を終了する。
【０１２０】
キャッシュ判定処理を実行する必要があると判定された場合、キャッシュドライバ１１３は、処理契機が読出要求であるか否かを判定する（ステップＳ２０２）。ステップＳ２０２以降では、キャッシュドライバ１１３は、ブロックデータのアクセス特性を解析する。
【０１２１】
処理契機が読出要求であると判定された場合、キャッシュドライバ１１３は、読出対象のブロックデータの読み出し回数が所定の閾値以上であるか否かを判定する（ステップＳ２０３）。例えば、以下の式（２）を満たすか否かが判定される。
【０１２２】
【数２】
2014232350.tif 000004
【０１２３】
ここで、Ｋは閾値を表す。式（２）を満たす場合、読出対象のブロックデータの読み出し回数が所定の閾値以上であると判定される。
【０１２４】
読出対象のブロックデータの読み出し回数が所定の閾値より小さいと判定された場合、キャッシュドライバ１１３は、サーバキャッシュ１３０に格納される読出対象のブロックデータを無効化（Ｉｎｖａｌｉｄａｔｅ）し（ステップＳ２０５）、処理を終了する。
【０１２５】
読出対象のブロックデータの読み出し回数が所定の閾値以上であると判定された場合、キャッシュドライバ１１３は、読出対象のブロックデータが読出傾向の高いデータであるか否かを判定する（ステップＳ２０４）。例えば、以下の式（３）を満たすか否かが判定される。
【０１２６】
【数３】
2014232350.tif 000005
【０１２７】
ここで、Ｌは閾値を表す。式（３）は、Ｒｅａｄ３０３をＷｒｉｔｅ３０４で除算することによって算出されたアクセス比率が所定の閾値以上であるか否かを判定するための条件式である。式（３）を満たす場合、読出対象のブロックデータが読出傾向の高いデータであると判定される。
【０１２８】
読出対象のブロックデータが読出傾向の高いブロックデータでないと判定された場合、キャッシュドライバ１１３は、サーバキャッシュ１３０に格納される読出対象のブロックデータを無効化し（ステップＳ２０５）、処理を終了する。
【０１２９】
本実施例では、ＯＳ１１０は、ブロックデータの読み出し回数が大きい場合であっても、頻繁に書込処理が実行されるブロックデータがサーバキャッシュ１３０に格納されないように制御する。これは、頻繁にデータの書込処理が実行されるとキャッシュデバイス１０３の書込性能が劣化する可能性があり、また、書込処理の実行によってブロックデータの読出処理に遅延が発生する可能性があるためである。
【０１３０】
読出対象のブロックデータが読出傾向の高いブロックデータであると判定された場合、キャッシュドライバ１１３は、処理を終了する。
【０１３１】
ステップＳ２０２において、処理契機が読出要求でない、すなわち、処理契機が書込要求であると判定された場合、キャッシュドライバ１１３は、書込対象のブロックデータの書き込み回数が所定の閾値以上であるか否かを判定する（ステップＳ２０６）。例えば、以下の式（４）を満たすか否かが判定される。
【０１３２】
【数４】
2014232350.tif 000006
【０１３３】
ここで、Ｍは閾値を表す。式（４）を満たす場合、書込対象のブロックデータの書き込み回数が所定の閾値以上であると判定される。
【０１３４】
書込対象のブロックデータの書き込み回数が所定の閾値以上であると判定された場合、キャッシュドライバ１１３は、サーバキャッシュ１３０に格納されるブロックデータを無効化し（ステップＳ２０８）、処理を終了する。
【０１３５】
書込対象のブロックデータの書き込み回数が所定の閾値より小さいと判定された場合、キャッシュドライバ１１３は、書込対象のブロックデータが書込傾向の高いブロックデータであるか否かを判定する（ステップＳ２０７）。例えば、以下の式（５）を満たすか否かが判定される。
【０１３６】
【数５】
2014232350.tif 000007
【０１３７】
ここで、Ｎは閾値を表す。式（５）は、Ｗｒｉｔｅ３０４をＲｅａｄ３０３で除算することによって算出されたアクセス比率が所定の閾値以上であるか否かを判定するための条件式である。式（５）を満たす場合、書込対象のブロックデータが書込傾向の高いデータであると判定される。
【０１３８】
書込対象のブロックデータが書込傾向の高いブロックデータであると判定された場合、キャッシュドライバ１１３は、サーバキャッシュ１３０に格納されるブロックデータを無効化し（ステップＳ２０８）、処理を終了する。
【０１３９】
本実施例では、ＯＳ１１０は、書き込み回数が小さい場合であっても、頻繁に書込処理が実行されるブロックデータがサーバキャッシュ１３０に格納されないように制御する。これによって、キャッシュデバイス１０３の書込性能の劣化を抑止することができ、また、アプリケーションの性能を向上できる。
【０１４０】
書込対象のブロックデータが書込傾向の高いブロックデータでないと判定された場合、キャッシュドライバ１１３は、処理を終了する。
【０１４１】
図６は、本発明の実施例１におけるキャッシュ登録処理の一例を説明するフローチャートである。
【０１４２】
以下の説明では、サーバキャッシュ１３０に新たに格納するブロックデータを新規ブロックデータとも記載する。
【０１４３】
キャッシュドライバ１１３は、サーバキャッシュ１３０に、新規ブロックデータを格納するための記憶領域が存在するか否かを判定する（ステップＳ３０１）。
【０１４４】
例えば、キャッシュドライバ１１３は、ＯＳ１１０にサーバキャッシュ１３０の空き容量を問い合わせて、新規ブロックデータの容量よりサーバキャッシュ１３０の空き容量が大きいか否かを判定する。
【０１４５】
サーバキャッシュ１３０に、新規ブロックデータを格納するための記憶領域が存在すると判定された場合、キャッシュドライバ１１３は、サーバキャッシュ１３０に、新規ブロックデータを格納し（ステップＳ３０２）、処理を終了する。
【０１４６】
具体的は、キャッシュドライバ１１３が、空き記憶領域にバッファキャッシュを生成し、生成されたバッファキャッシュに新規ブロックデータを格納する。
【０１４７】
サーバキャッシュ１３０に、新規ブロックデータを格納するための記憶容量が存在しないと判定された場合、キャッシュドライバ１１３は、サーバキャッシュ１３０に格納されるブロックデータのアクセス特性に基づいて、移動可能なブロックデータを検索し（ステップＳ３０３）、検索結果に基づいて、移動可能なブロックデータが存在するか否かを判定する（ステップＳ３０４）。例えば、以下の式（６）を満たすブロックデータが一つ以上存在するか否かが判定される。
【０１４８】
【数６】
2014232350.tif 000008
【０１４９】
式（６）を満たすブロックデータが一つ以上存在する場合、移動戒能なブロックデータが存在すると判定される。
【０１５０】
移動可能なブロックデータが存在すると判定された場合、キャッシュドライバ１１３は、検索されたブロックデータの中から一つのブロックデータを選択し、選択されたブロックデータを新規ブロックデータに置き換える（ステップＳ３０５）。
【０１５１】
具体的には、キャッシュドライバ１１３は、選択されたブロックデータを破棄し、当該ブロックデータが格納されるバッファキャッシュに新規ブロックデータを格納する。なお、式（６）を満たすデータが複数存在する場合、キャッシュドライバ１１３は、式（６）の左辺のアクセス比率の値が最も小さいブロックデータを選択する。
【０１５２】
移動可能なブロックデータが存在しないと判定された場合、キャッシュドライバ１１３は、ＬＲＵアルゴリズムに基づいてブロックデータの置き換えを実行し（ステップＳ３０６）、処理を終了する。ＬＲＵアルゴリズムに基づくデータの置き換え処理は、公知の技術を用いればよいため、詳細な説明を省略する。
【０１５３】
図７は、本発明における効果を説明するグラフである。
【０１５４】
図７は、ストレージシステム２００におけるアクセス性能を示すグラフである。縦軸はストレージシステム２００におけるＩＯＰＳ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ｐｅｒ  Ｓｅｃｏｎｄ）、横軸は書込比率を表す。
【０１５５】
図７に示すように、ストレージシステム２００における書込処理の性能は、読出処理の比率の増加に伴って減少する。そのため、従来のストレージシステム２００では、書込比率を５０パーセント程度に調整することによって、性能の最適化が行われていた。
【０１５６】
本発明では、アプリケーション１２０によって高い頻度で読み出されるブロックデータがサーバキャッシュ１３０に自動的に格納される。一方、アプリケーション１２０によって高い頻度で書き込まれるブロックデータがストレージキャッシュ２２０にのみ格納される。
【０１５７】
本発明のサーバ１００は、読出処理ではサーバキャッシュ１３０にアクセスし、書込処理ではストレージキャッシュ２２０にアクセスする。このため、ストレージシステム２００における書込比率は１００パーセントに近い状態となる。したがって、書込処理の性能が、従来の性能より大幅に向上する。
【０１５８】
実施例１によれば、計算機システムの処理性能が向上するキャッシュ制御を実現できる。具体的には、以下のような効果によって計算機システムの処理性能が向上する。
【０１５９】
サーバ１００は、サーバキャッシュ１３０にアプリケーション１２０から読み出されるデータが格納する。すなわち、サーバキャッシュ１３０は読み出し専用のキャッシュとして用いられる。これによって、高速なデータの読み出しが可能となる。
【０１６０】
また、頻繁に書き込まれるデータはサーバキャッシュ１３０に格納されないため、書込処理によるサーバキャッシュ１３０の性能劣化を抑止することができる。また、サーバ１００から送信される読出要求の数が減少する。これによって、ストレージシステム２００は、当該ストレージシステム２００の性能限界まで書込処理を実行することができる。
【０１６１】
また、サーバ１００は、データのアクセス特性に基づいて自動的にサーバキャッシュ１３０に格納されるブロックデータを制御する。したがって、システムの管理者又はアプリケーション１２０を利用するユーザ等は、予めキャッシュ制御に関する情報を設定する必要がない。
【実施例２】
【０１６２】
実施例１では、ＯＳ１１０は、一度、サーバキャッシュ１３０にブロックデータを格納し、その後、キャッシュ判定処理を実行する。実施例２では、ＯＳ１１０は、キャッシュ判定処理を実行し、当該処理の結果に基づいてブロックデータをサーバキャッシュ１３０に格納するか否かを判定する。以下、実施例１との差異を中心に説明する。
【０１６３】
実施例２の計算機システム、サーバ１００及びストレージシステム２００の構成は実施例１と同一であるため説明を省略する。
【０１６４】
図８Ａ及び図８Ｂは、本発明の実施例２におけるサーバ１００が実行するＩ／Ｏ処理の一例を説明するフローチャートである。
【０１６５】
ステップＳ１０６の処理の後、ＯＳ１１０は、キャッシュ登録処理を実行せず、アプリケーション１２０に完了通知を送信する（ステップＳ１０８）。実施例２では、キャッシュ判定処理に基づいてキャッシュ登録処理を実行するか否かが判定される。これによって、キャッシュデバイス１０３への書込回数の増加を低減できる。
【０１６６】
ステップＳ１１１において、サーバキャッシュ１３０に書込対象のファイルのブロックデータが存在しないと判定された場合、ＯＳ１１０は、キャッシュ登録処理及びキャッシュ判定処理を実行せず、ストレージシステム２００に書込要求を送信する（ステップＳ１１８）。
【０１６７】
また、ステップＳ１２０の後、ＯＳ１１０は、キャッシュ判定処理を実行することなく処理を終了する。すなわち、キャッシュドライバ１１３は、書込処理時には、サーバキャッシュ１３０にブロックデータを格納しない。これによって、キャッシュデバイス１０３への書込回数の増加を低減できる。
【０１６８】
図９Ａ及び図９Ｂは、本発明の実施例２におけるキャッシュ判定処理の一例を説明するフローチャートである。
【０１６９】
ステップＳ２０３において、読出対象のブロックデータの読み出し回数が所定の閾値より小さいと判定された場合、キャッシュドライバ１１３は、処理を終了する。実施例２では、サーバキャッシュ１３０にブロックデータが格納されていないため、ブロックデータを無効化する処理は省略される。
【０１７０】
また、ステップＳ２０４において、読出対象のブロックデータが読出傾向の高いブロックデータであると判定された場合、キャッシュドライバ１１３はキャッシュ登録処理を実行する（ステップＳ２５１）。
【０１７１】
なお、この時点ではキャッシュドライバ１１３は、ブロックデータを保持していない可能性があるため、読出対象のブロックデータを取得する必要がある。例えば、キャッシュドライバ１１３が、再度、ストレージシステム２００に読出要求を送信することによって、読出対象のブロックデータを取得する。
【０１７２】
なお、キャッシュ登録処理は実施例１と同一であるため説明を省略する。
【０１７３】
実施例２によれば、キャッシュドライバ１１３へのデータの書き込み回数が減少するため、ＳＳＤ等の書き込み回数に制限があるキャッシュデバイス１０３の性能劣化を抑止することができる。
【実施例３】
【０１７４】
実施例１では、ブロックデータのアクセス特性に基づいてブロックデータの格納位置を制御していたが、実施例３では、ＯＳ１１０は、ファイルのアクセス性能に基づいてファイルのデータの格納位置を制御する点が異なる。以下、実施例１との差異を中心に説明する。
【０１７５】
計算機システムの構成、サーバ１００及びストレージシステム２００のハードウェア構成及びソフトウェア構成は、実施例１と同一であるため説明を省略する。実施例２では、アクセス情報１１５の内容が異なる。
【０１７６】
図１０は、本発明の実施例３におけるアクセス情報１１５の一例を示す説明図である。
【０１７７】
実施例３のアクセス情報１１５は、ファイル識別子３０５を含む。ファイル識別子３０５は、ファイルを一意に識別するための情報である。例えば、ファイル識別子３０５には、ファイル名、ファイルパス等が格納される。
【０１７８】
実施例３では、ブロック番号３０１には、ストレージシステム２００における、ファイルのブロックデータの格納位置を示す番号が格納される。その他の情報は実施例１と同一であるため説明を省略する。
【０１７９】
次に、実施例３における処理について説明する。
【０１８０】
実施例３におけるサーバ１００のＩ／Ｏ処理では、以下の点が異なる。
【０１８１】
ステップＳ１０４、ステップＳ１０８、ステップＳ１１５、及びステップＳ１２０では、キャッシュドライバ１１３は、ファイルを構成するブロックデータ毎のアクセス種別３０２の値を更新する。
【０１８２】
その他の処理は、実施例１と同一であるため説明を省略する。
【０１８３】
実施例３におけるキャッシュ判定処理では、以下の点が異なる。
【０１８４】
ステップＳ２０３では、キャッシュドライバ１１３は、読出対象のブロックデータを含むファイルの読み出し回数が所定の閾値以上であるか否かを判定する。例えば、以下の式（７）を満たすか否かが判定される。
【０１８５】
【数７】
2014232350.tif 000009
【０１８６】
ここで、Ｔｏｔａｌ  Ｒｅａｄ  Ｃｎｔｒは、読出対象のブロックデータを含むファイルの読み出し回数を表す変数である。また、Ｐは閾値を表す。式（７）を満たす場合、読出対象のブロックデータを含むファイルの読み出し回数が所定の閾値以上であると判定される。
【０１８７】
ここで、Ｔｏｔａｌ  Ｒｅａｄ  Ｃｎｔｒに格納される値は以下のようにして算出される。
【０１８８】
キャッシュドライバ１１３は、アクセス情報１１５のブロック番号３０１を参照して、読出対象のブロックデータを含むファイルを特定する。
【０１８９】
キャッシュドライバ１１３は、特定されたファイルに含まれる全てのブロックデータのＲｅａｄ３０３を加算することによって、Ｔｏｔａｌ  Ｒｅａｄ  Ｃｎｔｒを算出する。
【０１９０】
ステップＳ２０４では、キャッシュドライバ１１３は、読出対象のブロックデータを含むファイルが読出傾向の高いファイルであるか否かを判定する。例えば、以下の式（８）を満たすか否かが判定される。
【０１９１】
【数８】
2014232350.tif 000010
【０１９２】
ここで、Ｔｏｔａｌ  Ｗｒｉｔｅ  Ｃｎｔｒは、書込対象のブロックデータを含むファイルにおける書き込み回数を表す変数である。また、Ｑは閾値を表す。式（８）を満たす場合、読出対象のブロックデータを含むファイルが読出傾向の高いファイルであると判定される。なお、Ｔｏｔａｌ  Ｗｒｉｔｅ  Ｃｎｔｒに格納される値は、Ｔｏｔａｌ  Ｒｅａｄ  Ｃｎｔｒを算出する方法と同一であるため説明を省略する。式（８）を満たす場合、ファイルが読出傾向の高いファイルであると判定される。
【０１９３】
ステップＳ２０６において、キャッシュドライバ１１３は、書込対象のブロックデータを含むファイルの書き込み回数が所定の閾値以上であるか否かを判定する。例えば、以下の式（９）を満たすか否かが判定される。
【０１９４】
【数９】
2014232350.tif 000011
【０１９５】
ここで、Ｒは閾値を表す。式（９）を満たす場合、書込対象のブロックデータを含むファイルの書き込み回数が所定の閾値以上であると判定される。
【０１９６】
ステップＳ２０７において、キャッシュドライバ１１３は、書込対象のブロックデータを含むファイルが書込傾向の高いファイルであるか否かを判定する。例えば、以下の式（１０）を満たすか否かが判定される。
【０１９７】
【数１０】
2014232350.tif 000012
【０１９８】
ここで、Ｓは閾値を表す。式（１０）を満たす場合、書込対象のブロックデータを含むファイルが書込傾向の高いファイルであると判定される。
【０１９９】
次に、キャッシュ登録処理について説明する。
【０２００】
キャッシュドライバ１１３は、まず、ファイルに含まれるブロックデータを一つ選択する。例えば、ブロック番号の小さい順位ブロックデータを選択する。その後、キャッシュドライバ１１３は、選択されたブロックデータに対してステップＳ３０１からステップＳ３０６の処理を実行する。
【０２０１】
キャッシュドライバ１１３は、ファイルに含まれる全てのブロックデータに対して、同一の処理を繰り返し実行する。
【０２０２】
実施例３によれば、ファイル単位にキャッシュの制御を行うことができる。
【０２０３】
各実施例では、ソフトウェアによる制御を用いた例について説明したが、その一部をハードウェアによって実現することも可能である。
【０２０４】
以上、本発明を添付の図面を参照して詳細に説明したが、本発明はこのような具体的構成に限定されるものではなく、添付した請求の範囲の趣旨内における様々な変更及び同等の構成を含むものである。
【符号の説明】
【０２０５】
１００    サーバ
１０１  プロセッサ
１０２  メモリ
１０３  キャッシュデバイス
１０４  接続インタフェース
１１０  ＯＳ
１１１  ＶＦＳ
１１２  ファイルシステム
１１３  キャッシュドライバ
１１４  デバイスドライバ
１１５  アクセス情報
１２０  アプリケーション
１３０  サーバキャッシュ
２００  ストレージシステム
２０１  コントローラ
２０２  プロセッサ
２０３  メモリ
２０４  接続インタフェース
２０５  ストレージインタフェース
２０６  記憶媒体
２１０  ストレージ制御部
２２０  ストレージキャッシュ
【図１】
2014232350.tif 000013
【図２】
2014232350.tif 000014
【図３】
2014232350.tif 000015
【図４Ａ】
2014232350.tif 000016
【図４Ｂ】
2014232350.tif 000017
【図５Ａ】
2014232350.tif 000018
【図５Ｂ】
2014232350.tif 000019
【図６】
2014232350.tif 000020
【図７】
2014232350.tif 000021
【図８Ａ】
2014232350.tif 000022
【図８Ｂ】
2014232350.tif 000023
【図９Ａ】
2014232350.tif 000024
【図９Ｂ】
2014232350.tif 000025
【図１０】
2014232350.tif 000026