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