(57)【特許請求の範囲】
【請求項１】
ホストコンピュータと接続されたストレージ装置であって、
データを格納する不揮発性媒体と、
前記不揮発性媒体に格納されるデータを一時的に記憶するディスクキャッシュと、
前記不揮発性媒体に対するデータの入出力を制御する制御部と、
前記制御部によって使用される情報を記憶する記憶部と、を備え、
前記制御部は、前記ディスクキャッシュを一つ又は複数の独立したディスクキャッシュ区画に分割し、
前記記憶部は、前記ディスクキャッシュの各記憶領域の状態を記述した第１の情報と、前記分割されたディスクキャッシュ区画が使用しているディスクキャッシュの各記憶領域の状態を記述した第２の情報と、を記憶し、
前記制御部は、
当該要求をしたホストコンピュータと対応するディスクキャッシュ区画を特定し、
前記第１の情報を参照し、前記要求されたデータがディスクキャッシュ内の記憶領域に格納されているか否かを判定し、
前記要求されたデータがディスクキャッシュのいずれの記憶領域にも格納されていなかった場合には、前記特定されたディスクキャッシュ区画が利用可能な記憶領域の容量を計算し、
当該ディスクキャッシュ区画に利用可能な記憶領域がない場合には、前記ディスクキャッシュに記憶されたデータのうち、アクセス頻度が低いデータを、前記不揮発媒体に書き込む又は破棄するという第１掃きだし処理を実行することによって、未使用の記憶領域を確保し、
ディスクキャッシュの各記憶領域の状態を記述した第１の情報のうち当該確保された記憶領域の情報を変更し、
前記ディスクキャッシュ区画によって使用されているディスクキャッシュの各記憶領域の状態を記述した第２の情報に、当該記憶領域の情報を追加し、
前記要求されたデータを前記不揮発性媒体から前記確保された記憶領域に転送し、
前記ディスクキャッシュの当該記憶領域に転送されたデータを前記ホストコンピュータへ転送することを特徴とするストレージ装置。
【請求項２】
前記制御部は、
前記第１掃きだし処理として、
前記第１の情報から掃きだし対象の記憶領域を選択し、
前記第１の情報を用いて掃きだし対象の記憶領域を使用しているディスクキャッシュ区画を特定し、
当該各ディスクキャッシュ区画の第２の情報から、掃きだし対象の記憶領域の情報を削除し、
必要があれば、当該掃きだし対象の記憶領域のデータを前記不揮発媒体に書き戻し、第１の情報のうち当該掃きだし対象の記憶領域の状態を未使用に変更することを特徴とする請求項１に記載のストレージ装置。
【請求項３】
前記制御部は、
前記要求されたデータがディスクキャッシュの記憶領域に格納されていた場合には、さらに前記第２の情報を参照して、対応するディスクキャッシュ区画が当該記憶領域を使用しているか否かを判定し、
前記対応するディスクキャッシュ区画が当該記憶領域を使用していた場合には、当該記憶領域に格納されたデータをホストコンピュータに転送し、
前記対応するディスクキャッシュ区画が当該記憶領域を使用していなかった場合には、当該記憶領域が使用中である情報を前記第２の情報に追加し、前記第１の情報のうち当該記憶領域の共有状態を当該ディスクキャッシュ区画が使用している状態に変更することを特徴とする請求項１に記載のストレージ装置。
【請求項４】
前記制御部は、
前記対応するディスクキャッシュ区画が当該記憶領域を使用していなかった場合には、
当該ディスクキャッシュ区画に空き容量があるか否かを判定し、
当該ディスクキャッシュ区画に空き容量がない場合には、前記ディスクキャッシュに記憶されたデータのうち、アクセス頻度が低いデータを、前記不揮発媒体に書き込む又は破棄するという第２掃きだし処理を実行して、未使用の記憶領域を確保し、
当該ディスクキャッシュ区画に空き容量がある場合には、当該記憶領域に格納されたデータをホストコンピュータに転送することを特徴とする請求項３に記載のストレージ装置。
【請求項５】
前記制御部は、
前記第２掃きだし処理として、
当該ディスクキャッシュ区画の前記第２の情報から、掃きだし対象の記憶領域の情報を削除し、
前記第１の情報の共有状態を参照し、他のディスクキャッシュ区画が当該記憶領域を使用中であるか否かを判定し、
当該他のディスクキャッシュ区画が当該記憶領域を使用中であれば、前記参照した共有状態を、当該ディスクキャッシュ区画が当該記憶領域を使用していないことを示す状態に変更し、
当該他のディスクキャッシュ区画が当該記憶領域を使用していない場合には、必要があれば、当該記憶領域のデータを前記不揮発媒体に書き戻し、前記第１の情報のうち当該記憶領域の状態を未使用に変更することを特徴とする請求項４に記載のストレージ装置。
【請求項６】
前記記憶部には、前記各ディスクキャッシュ区画に対応する前記ホストコンピュータが前記不揮発媒体に対して実行可能な操作を記述した第３の情報が記憶されており、
前記制御部は、
前記ディスクキャッシュ区画に対応する前記ホストコンピュータが前記不揮発媒体にアクセスしたときに、前記第３の情報を参照し、
前記アクセスが不可能な操作に関するものであれば、当該操作の失敗を前記ホストコンピュータに報告することを特徴とする請求項１に記載のストレージ装置。
【請求項７】
ホストコンピュータと接続されたストレージ装置において、前記ホストコンピュータからデータの読出要求時にディスクキャッシュを制御する方法であって、
前記ストレージ装置は、データを格納する不揮発性媒体と、前記不揮発性媒体に格納されるデータを一時的に記憶するディスクキャッシュと、前記不揮発性媒体に対するデータの入出力を制御する制御部と、前記制御部によって使用される情報を記憶する記憶部と、を備え、
前記制御部は、
当該要求をしたホストコンピュータと対応するディスクキャッシュ区画を特定し、
前記第１の情報を参照し、前記要求されたデータがディスクキャッシュ内の記憶領域に格納されているか否かを判定し、
前記要求されたデータがディスクキャッシュのいずれの記憶領域にも格納されていなかった場合には、前記特定されたディスクキャッシュ区画が利用可能な記憶領域の容量を計算し、
当該ディスクキャッシュ区画に利用可能な記憶領域がない場合には、前記ディスクキャッシュに記憶されたデータのうち、アクセス頻度が低いデータを、前記不揮発媒体に書き込む又は破棄するという第１掃きだし処理を実行することによって、未使用の記憶領域を確保し、
ディスクキャッシュの各記憶領域の状態を記述した第１の情報のうち当該確保された記憶領域の情報を変更し、
前記ディスクキャッシュ区画によって使用されているディスクキャッシュの各記憶領域の状態を記述した第２の情報に、当該記憶領域の情報を追加し、
前記要求されたデータを前記不揮発性媒体から前記確保された記憶領域に転送し、
前記ディスクキャッシュの当該記憶領域に転送されたデータを前記ホストコンピュータへ転送することを特徴とするディスクキャッシュ制御方法。
【請求項８】
前記第１掃きだし処理は、
前記制御部が、
前記第１の情報から掃きだし対象の記憶領域を選択し、
前記第１の情報を用いて掃きだし対象の記憶領域を使用しているディスクキャッシュ区画を特定し、
当該各ディスクキャッシュ区画の第２の情報から、掃きだし対象の記憶領域の情報を削除し、
必要があれば、当該掃きだし対象の記憶領域のデータを前記不揮発媒体に書き戻し、第１の情報のうち当該掃きだし対象の記憶領域の状態を未使用に変更することを特徴とする請求項７に記載のディスクキャッシュ制御方法。
【請求項９】
前記制御部は、
前記要求されたデータがディスクキャッシュの記憶領域に格納されていた場合には、さらに前記第２の情報を参照して、対応するディスクキャッシュ区画が当該記憶領域を使用しているか否かを判定し、
前記対応するディスクキャッシュ区画が当該記憶領域を使用していた場合には、当該記憶領域に格納されたデータをホストコンピュータに転送し、
前記対応するディスクキャッシュ区画が当該記憶領域を使用していなかった場合には、当該記憶領域が使用中である情報を前記第２の情報に追加し、前記第１の情報のうち当該記憶領域の共有状態を当該ディスクキャッシュ区画が使用している状態に変更することを特徴とする請求項７に記載のディスクキャッシュ制御方法。
【請求項１０】
前記制御部は、
前記対応するディスクキャッシュ区画が当該記憶領域を使用していなかった場合には、
当該ディスクキャッシュ区画に空き容量があるか否かを判定し、
当該ディスクキャッシュ区画に空き容量がない場合には、前記ディスクキャッシュに記憶されたデータのうち、アクセス頻度が低いデータを、前記不揮発媒体に書き込む又は破棄するという第２掃きだし処理を実行して、未使用の記憶領域を確保し、
当該ディスクキャッシュ区画に空き容量がある場合には、当該記憶領域に格納されたデータをホストコンピュータに転送することを特徴とする請求項９に記載のディスクキャッシュ制御方法。
【請求項１１】
前記第２掃きだし処理は、
前記制御部が、
当該ディスクキャッシュ区画の前記第２の情報から、掃きだし対象の記憶領域の情報を削除し、
前記第１の情報の共有状態を参照し、他のディスクキャッシュ区画が当該記憶領域を使用中であるか否かを判定し、
当該他のディスクキャッシュ区画が当該記憶領域を使用中であれば、前記参照した共有状態を、当該ディスクキャッシュ区画が当該記憶領域を使用していないことを示す状態に変更し、
当該他のディスクキャッシュ区画が当該記憶領域を使用していない場合には、必要があれば、当該記憶領域のデータを前記不揮発媒体に書き戻し、前記第１の情報のうち当該記憶領域の状態を未使用に変更することを特徴とする請求項１０に記載のディスクキャッシュ制御方法。
【請求項１２】
前記記憶部には、前記各ディスクキャッシュ区画に対応する前記ホストコンピュータが前記不揮発媒体に対して実行可能な操作を記述した第３の情報が記憶されており、
前記制御部は、
前記ディスクキャッシュ区画に対応する前記ホストコンピュータが前記不揮発媒体にアクセスしたときに、前記第３の情報を参照し、
前記アクセスが不可能な操作に関するものであれば、当該操作の失敗を前記ホストコンピュータに報告することを特徴とする請求項７に記載のディスクキャッシュ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置に関し、特に、ディスクキャッシュの制御技術に関する。
【背景技術】
【０００２】
近年、半導体技術の進歩に伴い、計算機システムにおける半導体メモリの高速化は目覚しいものがある。その一方で、磁気ディスクドライブに代表されるストレージ装置は、モータによる機械的な動作機構を採用しているため、半導体メモリほど高速化していない。例えば、代表的な半導体メモリのアクセス時間（レイテンシ）は、数十nsecから数百nsecのオーダであるのに対して、磁気ディスクドライブのレイテンシは、数msecである。このように、半導体メモリと磁気ディスクドライブのレイテンシの乖離が大きいため、磁気ディスクドライブがシステムのボトルネックとなりやすい。
【０００３】
この乖離を緩和するために、ストレージ装置に半導体メモリを搭載し、利用頻度の高いデータを前記半導体メモリに格納することで、ストレージ装置のレイテンシを短縮する技術が開発されている。前記半導体メモリは、ＣＰＵにおけるキャッシュと同様の性質を持つため、ディスクキャッシュと呼ばれている。
【０００４】
ホストコンピュータから要求されるデータがディスクキャッシュに格納されていれば、ホストコンピュータは原理的には半導体メモリのレイテンシで当該データにアクセスすることができる。前述したように、半導体メモリと磁気ディスクドライブのレイテンシの差は数万倍であるため、ディスクキャッシュのレイテンシに対する効果は非常に大きい。
【０００５】
ホストコンピュータがストレージ装置内のあるデータにアクセスしたときに、当該データがディスクキャッシュに格納されている場合、キャッシュヒットといい、ディスクキャッシュに格納されていない場合、キャッシュミスという。そして、キャッシュヒットとなる確率をキャッシュヒット率又はヒット率という。そして、ヒット率が高ければ高いほど、統計的にみてストレージ装置のレイテンシは短くなり、当該ストレージ装置の性能は向上する。
【０００６】
このため、ストレージ装置の性能を向上させるには、ディスクキャッシュ（半導体メモリ）を多く搭載すればよい。しかし、半導体メモリの容量あたりの価格（ビットコストという）は磁気ディスクドライブのビットコストの数百倍であり、無限にディスクキャッシュ（半導体メモリ）を搭載できるわけではない。言い換えれば、ディスクキャッシュに関して、性能とコストはトレードオフの関係にあるといえる。
【０００７】
さて、近年、企業において、複数のストレージ装置で分担していた業務を大型のストレージ装置１台に集約する動きが起こっている。これをストレージ集約という。ストレージ集約には、いくつかの利点がある。
【０００８】
まず、第１の利点として、管理業務の簡略化及び一元化ができる点がある。
【０００９】
ストレージ装置が複数、それも機種が異なっている場合、ストレージ装置毎に管理手法が異なるので、別な管理者を配置する必要があった。ストレージ装置を集約することで、管理者を１人にすることができ、管理者の人件費を削減することができる。
【００１０】
また、複数のストレージ装置を１人の管理者が管理することもできるが、管理業務が煩雑になり、管理者の負担が大きくなる。具体的には、機種が異なるストレージ装置は管理の操作が異なるので、管理者はストレージ装置毎に異なる操作方法を習得する必要があり、管理者の負担が大きかった。ストレージ装置を１台に集約することで、管理業務の簡略化が可能になり、管理者の負担を軽減することができる。
【００１１】
次に、第２の利点として、ストレージ資源の利用効率が向上する点がある。
【００１２】
一般的に、ストレージ装置では、その容量をすべて使い切ることはない。利用者が容量をすべて使い切ったとき、業務を継続できなくなる。そのため、管理者は業務が停止しないようにするために、予備の容量を常にストレージ装置内に用意している。複数のストレージ装置があった場合、各装置に予備の容量を持つことになる。
【００１３】
例えば、あるストレージ装置の予備容量が十分にあり、別のストレージ装置の予備容量が少なくなったとき、管理者は、前者から後者に予備容量を移すことはできない。管理者は後者のストレージ装置のために、追加の磁気ディスクドライブを購入しなくてはならない。言い換えれば、複数のストレージ装置全体としては、予備の容量があるのに、有効に活用することができない状態になっている。
【００１４】
ストレージ装置を１台に集約すると、前述したような、全体としては十分に予備の容量があるのに、予備容量を使えないという事態は発生しない。従って、管理者は、予備の容量を集約しないときよりも、ストレージ装置に実装するディスク容量少なくすることができ、全体としてのコストが低下することになる。言い換えれば、ストレージ集約は、購入したストレージ資源の利用効率の向上を、利用者にもたらす。
【００１５】
ストレージ集約は、利用者に前述した利益をもたらすが、必要な注意も存在する。
【００１６】
ストレージ集約によって、複数のホストコンピュータが１台のストレージ装置に接続された構成となる。そのため、ディスクキャッシュを複数のホストコンピュータが共有する。ホストコンピュータは、さまざまな業務を担っており、ストレージ装置に対するアクセスのパターンも様々である。
【００１７】
例えば、あるホストコンピュータは、ストレージ装置に対するアクセス頻度が他のストレージ装置と比較して大きい例を考えてみる。最も一般的に利用されるＬＲＵ（Least Recently Used）アルゴリズムを使用したディスクキャッシュの場合、アクセス頻度の高いホストコンピュータがディスクキャッシュの容量の大半を使用し、他のホストコンピュータが利用できるディスクキャッシュの容量が極めて小さくなる。
【００１８】
なぜなら、ＬＲＵアルゴリズムが、近い過去にアクセスされたデータをディスクキャッシュに残すからである。これでは、アクセス頻度の小さい、他のホストコンピュータの業務に支障をきたしてしまう。
【００１９】
そこで、それぞれのホストコンピュータに対して、使用できるディスクキャッシュの容量を管理者が設定できる技術が考案されている。これらの技術は、特許文献１〜３において開示されている。特許文献１〜３では、ディスクキャッシュの容量をそれぞれのホストコンピュータごとに割り当てる。すなわち、各ホストコンピュータが使用できるディスクキャッシュの容量の上限を指定するため、一つのホストコンピュータがディスクキャッシュの大半を占有して、他のホストコンピュータに対するストレージ装置のレイテンシを悪化させることはない。
【特許文献１】特開平８−１４７２１８号公報
【特許文献２】特開２００４−１３９３４９号公報
【特許文献３】米国特許第６７２８８３６号明細書
【発明の開示】
【発明が解決しようとする課題】
【００２０】
このように、特許文献１〜３記載の技術によって、各ホストコンピュータに対して、ディスクキャッシュの容量を割り当てることが可能になった。本明細書では、各ホストコンピュータに割り当てたディスクキャッシュをディスクキャッシュ区画と呼ぶ。
【００２１】
これらの公知技術では、それぞれのディスクキャッシュ区画が独立したディスクキャッシュとして機能している。そのため、あるディスクキャッシュ区画にロードされたデータを、他のディスクキャッシュ区画を使用するホストコンピュータは参照することはできない。
【００２２】
従って、ストレージ装置は、当該データを複数のディスクキャッシュ区画に格納せざるを得ないが、これら公知技術ではこの処理について言及していない。仮に、この処理が実行されると、同一のデータであるにもかかわらず、ディスクキャッシュの記憶領域を二重に使用する重複キャッシュの状態になっている。
【００２３】
前述したように、ディスクキャッシュは、性能に大きな影響を持つ要素であり、さらにビットコストも磁気ディスクドライブより高い。従って、同一内容のデータを重複してディスクキャッシュ上に保持することは、著しい性能劣化を招く。
【００２４】
さらに、管理者がストレージ装置に対して、同一性能を維持しようとすれば、より多量のディスクキャッシュ（半導体メモリ）を搭載することになり、コストの上昇を招く。これは、ストレージ装置に対する投資効率の低下を意味する。
【００２５】
また、磁気ディスクドライブのデータを同時に異なる二つのディスクキャッシュ区画にロードできない場合、磁気ディスクドライブをコピーして、前記二つのディスクキャッシュ区画に対応して二つの磁気ディスクドライブを配置する必要がある。この処理によって、同じデータが異なる磁気ディスクドライブに格納されるので、異なるデータとして取り扱われる。そのため、二つの異なるディスクキャッシュ区画に同じデータを格納することができる。
【００２６】
しかし、管理者は同一内容の複数の磁気ディスクドライブを設置することになり、磁気ディスクドライブの利用効率が下がることになる。
【００２７】
そこで、本発明は、ディスクキャッシュを複数の区画に分割したストレージ装置において、同一のデータを前記区画間で共有し、重複キャッシュを避けることを目的とする。
【課題を解決するための手段】
【００２８】
上記目的を達成するため、本発明のストレージ装置は、ディスクキャッシュの各領域が磁気ディスクドライブ内のどのデータを保持しているかを記述する第１の管理情報と、各ディスクキャッシュ区画に割り当てられた領域の状態を記述する第２の管理情報と、を記憶し、当該要求をしたホストコンピュータと対応するディスクキャッシュ区画を特定し、前記第１の情報を参照し、前記要求されたデータがディスクキャッシュ内の記憶領域に格納されているか否かを判定し、前記要求されたデータがディスクキャッシュのいずれの記憶領域にも格納されていなかった場合には、前記特定されたディスクキャッシュ区画が利用可能な記憶領域の容量を計算し、当該ディスクキャッシュ区画に利用可能な記憶領域がない場合には、前記ディスクキャッシュに記憶されたデータのうち、アクセス頻度が低いデータを、前記不揮発媒体に書き込む又は破棄するという第１掃きだし処理を実行することによって、未使用の記憶領域を確保し、ディスクキャッシュの各記憶領域の状態を記述した第１の情報のうち当該確保された記憶領域の情報を変更し、前記ディスクキャッシュ区画によって使用されているディスクキャッシュの各記憶領域の状態を記述した第２の情報に、当該記憶領域の情報を追加し、前記要求されたデータを前記不揮発性媒体から前記確保された記憶領域に転送し、前記ディスクキャッシュの当該記憶領域に転送されたデータを前記ホストコンピュータへ転送する。
【発明の効果】
【００２９】
本発明によると、ストレージ装置のディスクキャッシュを複数の区画に分割したときに、前記複数の区画間でデータを共有することができ、重複キャッシュを避けることができる。
【発明を実施するための最良の形態】
【００３０】
以下、本発明の実施の形態を、図面を参照して説明する。
【００３１】
（第１の実施の形態）
図１に、第１の実施の形態の計算機システムのハードウェア構成を示す。
【００３２】
第１の実施の形態の計算機システムは、ホストコンピュータ１００、ストレージ装置１０１及び管理端末１０２を備える。
【００３３】
ストレージ装置１０１は、ホストインタフェース部１０３、制御ＣＰＵ１０４、システムメモリ１０５、ディスクキャッシュ１０６、磁気ディスクドライブ１０７、ディスクインタフェース部１０８及びシステムバス１０９を備える。
【００３４】
ホストインタフェース部１０３は、ホストコンピュータ１００と通信する。制御ＣＰＵ１０４は、ストレージ装置全体を制御する。システムメモリ１０５は、制御ＣＰＵ１０４がストレージ装置の制御に用いる制御情報及びプログラムを格納する。
【００３５】
ディスクキャッシュ１０６は、磁気ディスクドライブ１０７に入出力されるデータを一時的に保存する。磁気ディスクドライブ１０７は、不揮発性の記憶媒体であり、ホストコンピュータ１００が使用するデータを格納する。ディスクインタフェース部１０８は、磁気ディスクドライブ１０７を制御し、磁気ディスクドライブと通信する。
【００３６】
システムバス１０９は、ホストインタフェース部１０３、制御ＣＰＵ１０４、ディスクキャッシュ１０６及びディスクインタフェース部１０８を結合する。
【００３７】
ディスクキャッシュ１０６は、ある固定されたサイズの領域を単位として管理される。すなわち、制御プログラム１１０は、前記固定サイズの単位の集合として、ディスクキャッシュ１０６を認識する。本明細書では、このディスクキャッシュ１０６の管理単位をセグメントと呼ぶ。いうまでもないが、本発明はセグメントの容量には依存しない。
【００３８】
磁気ディスクドライブ１０７は、ある固定されたサイズの領域を単位として管理される。すなわち、制御プログラム１１０は、前記固定サイズの単位の集合として、磁気ディスクドライブ１０７を認識する。本願明細書では、この磁気ディスクドライブ１０７の管理単位をトラックと呼ぶ。いうまでもないが、本発明は、トラックの容量には依存しない。
【００３９】
本明細書では、トラック容量とセグメント容量とが等しいとして説明するが、トラック容量とセグメント容量とは異なってもよい。すなわち、本発明は、トラック容量とセグメント容量の関係に依存しない。
【００４０】
システムメモリ１０５内には、制御ＣＰＵ１０４が使用する制御プログラム及び様々な制御情報が格納される。
【００４１】
制御プログラム１１０は、制御ＣＰＵ１０４によって実行されるプログラムである。制御ＣＰＵ１０４は、制御プログラム１１０を実行することによって、ストレージ装置１０１を制御する。制御プログラム１１０は通常はフラッシュメモリのような不揮発性のメモリ（図示せず）に格納される。制御プログラム１１０は、ストレージ装置１０１の電源投入直後に、前記不揮発性のメモリからシステムメモリ１０５に転送され、制御ＣＰＵ１０４が実行する。なお、制御プログラム１１０は不揮発性のメモリではなく磁気ディスクドライブ１０７に保存されてもよい。
【００４２】
制御ＣＰＵ１０４（制御ＣＰＵ１０４によって実行される制御プログラム１１０）が使用する制御情報には、ディスクキャッシュ管理テーブル１１１、未使用キャッシュ管理テーブル１１２、キャッシュ区画管理テーブル１１３、キャッシュ区画管理情報１１４、多重キャッシュ管理テーブル１１５及び共有状態情報１１６がある。
【００４３】
ディスクキャッシュ管理テーブル１１１は、ディスクキャッシュ１０６のセグメントが磁気ディスクドライブ１０７内のどのトラックのデータを保持しているかを記述する情報である。未使用ディスクキャッシュ管理テーブル１１２は、ディスクキャッシュ１０６内で未使用のセグメントを記述する情報である。ディスクキャッシュ区画管理テーブル１１３は、各ディスクキャッシュ区画（各ホストコンピュータに割り当てたディスクキャッシュ）の容量等の情報を記述する情報である。
【００４４】
ディスクキャッシュ区画管理情報１１４は、各ディスクキャッシュ区画に割り当てられたディスクキャッシュ１０６のセグメントを個々に記述した情報である。多重キャッシュ管理テーブル１１５は、ディスクキャッシュ１０６の個々のセグメントを、複数のディスクキャッシュ区画が使用した状態を記述する情報である。共有状態情報１１６は、多重キャッシュ管理テーブル１１５の一部であり、当該セグメントを使用しているディスクキャッシュ区画を記述した情報である。
【００４５】
本実施の形態では、一つの制御ＣＰＵ１０４だけを備えるストレージ装置１０１を例示するが、制御ＣＰＵ１０４は複数あってもよい。その場合、ディスクキャッシュ管理テーブル１１１、未使用キャッシュ管理テーブル１１２、キャッシュ区画管理テーブル１１３、キャッシュ区画管理情報１１４、多重キャッシュ管理テーブル１１５及び共有状態情報１１６は、複数の制御ＣＰＵ１０４が参照及び変更できる記憶媒体上に配置される。さらに、データの一貫性を保証するため、制御ＣＰＵ１０４がアトミック的にこれら情報を変更できることも必要である。
【００４６】
本実施の形態の磁気ディスクドライブ１０７は、ＲＡＩＤ（Redundant Array of Independent Disks）構成であってもよい。いうまでもないが、本発明は、磁気ディスクドライブ１０７の構成に依存しない。
【００４７】
管理端末１０２は、管理者がストレージ装置を操作するために使用するコンピュータである。
【００４８】
図２に、ディスクキャッシュ管理テーブル１１１を示す。
【００４９】
ディスクキャッシュ管理テーブル１１１は、エントリ番号２００、トラック番号２０１、セグメント番号２０２、共有区画数２０３及び状態２０４を含む。
【００５０】
エントリ番号２００は、本テーブルに記述された情報の一意の識別子である。各エントリは、ディスクキャッシュ１０６の使用されているセグメントに対応する。
【００５１】
トラック番号２０１は、磁気ディスクドライブ１０７内のトラックに付与された番号であり、当該セグメントに保持されたデータを記録しているトラックの番号である。
【００５２】
セグメント番号２０２は、当該セグメントに付与された番号である。制御プログラム１１０は、トラック番号２０１は及びセグメント番号２０２の二つの項目によって、ディスクキャッシュ１０６上に保持されたデータが磁気ディスクドライブ１０７内のどこに保存されるべきかを知ることができる。
【００５３】
本明細書では、磁気ディスクドライブ１０７内のデータの保存場所をトラック番号で指定するが、他の指定方法でもよい。例えば、ＳＣＳＩ（Small Computer System Interface）規格では、磁気ディスクドライブ１０７の識別子である、ＬＵＮ（Logical Unit Number）と磁気ディスクドライブ１０７内部のアドレスであるＬＢＡ（Logical Block Address）の組み合わせによって、データの保存場所を指定することができる。
【００５４】
共有区画数２０３は、当該セグメントを使用しているディスクキャッシュ区画の数を示す。当該セグメントを使用しているディスクキャッシュ区画が一つならば、共有区画数２０３には、”１”が設定される。当該セグメントを使用しているディスクキャッシュ区画が二つならば、共有区画数２０３には、”２”が設定される。
【００５５】
状態２０４は、当該セグメントの状態を表す。すなわち、ホストコンピュータ１００がデータをディスクキャッシュ１０６に書き込んだ後、磁気ディスクドライブ１０７に未反映の状態ならば、状態２０４は”dirty”である。ホストコンピュータ１００がデータをディスクキャッシュ１０６に書き込んだ後、磁気ディスクドライブ１０７に反映された状態ならば、状態２０４は”clean”である。
【００５６】
図３に、未使用ディスクキャッシュ管理テーブル１１２を示す。
【００５７】
未使用セグメント管理テーブル１１２は、未使用セグメント管理テーブルポインタ３００及び未使用セグメント番号３０１を含み、連結リスト（linked list）の形式である。
【００５８】
未使用セグメント管理テーブルポインタ３００は、連結リストの先頭の情報へのポインタである。制御プログラム１１０は、このポインタを常に保持し、未使用セグメントの情報を検索できるようにしている。
【００５９】
未使用セグメント番号３０１は、それぞれ、ディスクキャッシュ１０６の未使用のセグメントの番号を記述した情報である。未使用セグメント番号３０１は、前方参照ポインタを含み、前の未使用セグメント番号３０１を参照できるようにしている。また、未使用セグメント番号３０１は、後方参照ポインタを含み、次の未使用セグメント番号３０１を参照できるようにしている。この前方参照ポインタ及び後方参照ポインタによって、連結リストが形成される。
【００６０】
いわば、未使用セグメント番号３０１は、未使用のディスクキャッシュ１０６のセグメント番号とポインタからなる構造体といえる。
【００６１】
図４に、ディスクキャッシュ区画管理テーブル１１３を示す。
【００６２】
ディスクキャッシュ区画管理テーブル１１３は、区画番号４００、リクエスタＩＤ４０１、割り当て容量４０２、使用容量４０３及びディスクキャッシュ区画管理情報ポインタ４０４を含む。
【００６３】
区画番号４００は、ディスクキャッシュ区画の一意な識別子である。
【００６４】
リクエスタＩＤ４０１は、ホストコンピュータ１００に対する識別子を登録するエントリである。この識別子は、ホストコンピュータ１００を一意に識別できる情報であればよい。
【００６５】
例えば、ホストコンピュータ１００とストレージ装置１０１がファイバチャネルインタフェースによって接続されている場合、ホストコンピュータ１００のファイバチャネルホストアダプタ（図示せず）に一意に付与されたＷＷＮ（World Wide Name）が識別子になりうる。
【００６６】
また、一つのディスクキャッシュ区画に複数のホストコンピュータを割り当てる構成も考えられる。この場合は、リクエスタＩＤ４０１に複数のホストコンピュータ１００の識別子を登録してもよい。また、複数のホストコンピュータ１００に同一の識別子を割り当ててもよい。このような識別子は、ホストコンピュータ１００がストレージ装置１０１にディスク入出力コマンドを送信するときに、同時にストレージ装置１０１に送信される。
【００６７】
制御ＣＰＵ１０４（制御プログラム１１０）は、識別子（リクエスタＩＤ４０１）を参照して、当該命令がどのディスクキャッシュ区画に対する命令かを判断できる。
【００６８】
割り当て容量４０２は、ストレージ装置１０１の管理者が、当該ディスクキャッシュ区画に割り当てたディスクキャッシュ容量であり、制御ＣＰＵ１０４によって登録される。
【００６９】
使用容量４０３は、当該ディスクキャッシュ区画で使用されている容量であり、制御ＣＰＵ１０４によって登録される。
【００７０】
ディスクキャッシュ区画管理情報ポインタ４０４は、ディスクキャッシュ区画管理情報１１４へのポインタである。ディスクキャッシュ区画管理情報１１４は、ディスクキャッシュ区画ごとに存在し、当該ディスクキャッシュ区画で使用しているセグメントの連結リストである。
【００７１】
図５に、ディスクキャッシュ区画管理情報１１４のデータ構造を示す。
【００７２】
ディスクキャッシュ区画管理情報１１４は、ディスクキャッシュ区画管理情報ポインタ４０４及びディスクキャッシュ管理テーブルエントリ番号５００を含み、連結リスト（linked list）の形式である。
【００７３】
ディスクキャッシュ区画管理情報ポインタ４０４は、連結リストの先頭エントリへのポインタを示す。
【００７４】
ディスクキャッシュ管理テーブルエントリ番号５００は、当該ディスクキャッシュ区画が使用しているセグメントに対応するディスクキャッシュ管理テーブルのエントリ番号２００を示す。さらに、ディスクキャッシュ管理テーブルエントリ番号５００は、前方参照ポインタを含み、前のエントリ番号５００を参照できるようにしている。また、エントリ番号５００は、後方参照ポインタを含み、次のエントリ番号５００を参照できるようにしている。この前方参照ポインタ及び後方参照ポインタによって、連結リストが形成される。
【００７５】
いわば、ディスクキャッシュ管理テーブルエントリ番号５００は、当該ディスクキャッシュ区画が使用しているセグメントに対応するディスクキャッシュ管理テーブルのエントリ番号２００前方ポインタ及び後方ポインタからなる構造体である。そして、ディスクキャッシュ区画管理情報１１４は、それぞれのディスクキャッシュ区画が使用しているセグメントを連結リストの形式の情報である。
【００７６】
図６に、多重キャッシュ管理テーブル１１５を示す。
【００７７】
多重キャッシュ管理テーブル１１５は、エントリ番号６００、トラック番号６０１及び共有状態情報ポインタ６０２を含む。
【００７８】
エントリ番号６００は、ディスクキャッシュ管理テーブル１１１のエントリ番号２００と同じ番号であり、制御ＣＰＵ１０４によって登録される。
【００７９】
トラック番号６０１は、ディスクキャッシュ管理テーブル１１１のトラック番号２０１と同じ番号であり、制御ＣＰＵ１０４によって登録される。
【００８０】
共有状態情報ポインタ６０２は、共有状態情報１１６へのポインタである。
【００８１】
すなわち、図６からわかるように、複数のディスクキャッシュ区画が使用しているセグメントの状態を個別に記述するテーブルが、多重キャッシュ管理テーブルである。
【００８２】
図７に、共有状態情報１１６のデータ構造を示す。
【００８３】
共有状態情報１１６は、共有状態情報ポインタ６０２及び区画番号７００を含み、連結リスト（linked list）の形式である。
【００８４】
共有状態情報ポインタ６０２は、リストの先頭エントリ示す。
【００８５】
区画番号７００は、当該セグメントを使用しているディスクキャッシュ区画の番号が制御ＣＰＵ１０４によって登録される。
【００８６】
すなわち、制御プログラム１１０は、多重キャッシュ管理テーブル１１５及び共有状態情報１１６によって、複数のディスクキャッシュ区画間で共有されたセグメントの状態を記述することができる。本実施の形態において、ディスクキャッシュ１０６のセグメントが共有された状態を示すには、ディスクキャッシュ管理テーブル１１１の共有区画数２０３の情報だけで十分である。しかし、実際の製品では、このセグメントのような資源を複数の主体が共有するところに不具合が発生しやすい。このような不具合を修正するためには、原因の特定が必要であり、当該資源の状態をより詳細に知る必要がある。そのときに、多重キャッシュ管理テーブル１１５及び共有状態情報１１６のような詳細情報があると、不具合の原因を容易に特定することができる。
【００８７】
次に、ホストコンピュータ１００がストレージ装置１０１にディスク入出力コマンドを発行したときの、ストレージ装置１０１の動作を説明する。
【００８８】
図８に、ストレージ装置１０１がディスク入出力コマンドを処理するフローチャートを示す。
【００８９】
まず、ストレージ装置１０１は、ホストコンピュータ１０１が発行したディスク入出力コマンドを受信する（ステップ８０１）。
【００９０】
次に、制御ＣＰＵ１０４（制御ＣＰＵ１０４によって実行される制御プログラム１１０）は、ディスク入出力コマンドを解析して、コマンドに応じた処理を実行する（ステップ８０２）。例えば、ストレージ装置１０１がＳＣＳＩ規格に準拠する装置である場合、ディスク入出力コマンドとしては、ＲＥＡＤコマンド及びＷＲＩＴＥコマンドのような入出力のコマンドや、ＲＥＱＵＥＳＴ  ＳＥＮＳＥのような磁気ディスクドライブ１０７の制御を行うコマンドがある。
【００９１】
次に、制御ＣＰＵ１０４は、当該コマンドの実行結果をホストコンピュータ１００に送信する（ステップ８０３）。例えば、ストレージ装置１０１がＳＣＳＩ規格に準拠する場合、実行結果（ステータス）が送信される。ステータス”ＧＯＯＤ”は正常終了を意味し、ステータス”ＣＨＥＣＫ  ＣＯＮＤＩＴＩＯＮ”は当該コマンドの異常終了を意味する。ホストコンピュータ１００は、ステータスを確認して、次の動作を決定する。
【００９２】
その後、ストレージ装置１０１は、ディスク入出力コマンド処理を終了する。
【００９３】
次に、ディスク入出力コマンドの中でも最も頻繁に用いられるリードコマンド及びライトコマンドの処理の詳細を説明する。
【００９４】
図９に、リードコマンドの処理のフローチャートを示す。リードコマンド処理は制御ＣＰＵ１０４によって実行される。
【００９５】
まず、ホストコンピュータ１００からリードコマンドを受信すると、制御ＣＰＵ１０４は、リードコマンドの内容を解析する（ステップ９０１）。具体的には、リードコマンドには、トラック番号とホストコンピュータ１００が要求するデータのサイズが含まれる。そのため、制御ＣＰＵ１０４は、ディスクキャッシュ管理テーブル１１１を検索し、該当するトラック番号のトラックに格納されたデータを保持したセグメントを調べる。
【００９６】
さらに、ホストコンピュータ１００は、コマンドとともにホストコンピュータの識別子もストレージ装置１０１に送信する。そのため、制御ＣＰＵ１０４は、当該ディスク入出力コマンドに対応するディスクキャッシュ区画を特定することができる。
【００９７】
次に、制御ＣＰＵ１０４は、ディスクキャッシュ管理テーブル１１１に該当するセグメントがあるか否かを判定する。そして、ディスクキャッシュ管理テーブル１１１に該当するセグメントがあれば、キャッシュヒットと判定しステップ９０３に進む。一方、ディスクキャッシュ管理テーブル１１１に該当するセグメントがなければ、キャッシュミスと判定し、ステップ９１３に進む（ステップ９０２）。
【００９８】
キャッシュヒットと判定された場合、次に、制御ＣＰＵ１０４は、当該ホストコンピュータ１００に割り当てられたディスクキャッシュ区画内でヒットしたか判定する必要がある。なぜなら、各ディスクキャッシュ区画には容量の上限が設定されているからである。
【００９９】
具体的には、制御ＣＰＵ１０４は、共有状態情報１１６を検索し（ステップ９０３）、当該ディスクキャッシュ区画が共有状態情報１１６にすでに登録されているか判定する（ステップ９０４）。判定の結果、当該ディスクキャッシュ区画がすでに登録されていれば、”ヒット”と判定し、ステップ９０５に進む。一方、当該ディスクキャッシュ区画が登録されていなければ、”ミス”と判定し、ステップ９０８に進む。
【０１００】
当該ディスクキャッシュ区画のエントリが存在すると判定された場合、当該ディスクキャッシュ区画のディスクキャッシュ区画管理情報１１４を変更する（ステップ９０５）。すなわち、当該セグメントに対応するディスクキャッシュ管理テーブルエントリ番号５００の情報を連結リストの先頭に移動させる。この処理を繰り返すことによって、ディスクキャッシュ区画管理情報１１４のエントリはアクセス頻度の順に並ぶ。つまり、ディスクキャッシュ区画管理情報１１４の末尾に存在するエントリに対応するセグメントがもっともアクセス頻度が少ないようになる。制御ＣＰＵがＬＲＵアルゴリズムを採用した場合、データの追い出しが必要になったときは、末尾のエントリに対応するセグメントのデータを追い出すことができる。
【０１０１】
次に、制御ＣＰＵ１０４は、ホストコンピュータ１００によって要求されたデータを、ディスクキャッシュ１０６からホストコンピュータ１００に転送して（ステップ９０６）、リードコマンド処理を終了する。
【０１０２】
一方、当該ディスクキャッシュ区画のエントリが存在しないと判定された場合、ディスクキャッシュ１０６に目的のデータは存在したものの、当該ディスクキャッシュ区画には登録されていない状態である。各ディスクキャッシュ区画には、容量の上限がある。そこで制御ＣＰＵ１０４は、ディスクキャッシュ区画管理テーブル１１３を参照して、当該ディスクキャッシュ区画に空き容量があるか否かを判定する（ステップ９０８）。
【０１０３】
その結果、当該ディスクキャッシュ区画に空き容量がない場合、制御ＣＰＵ１０４は、当該ディスクキャッシュ区画が使用中のセグメントを必要数だけ解放する（ステップ９０９）。解放の手順は後述する。その後、ステップ９１０へ進む。
【０１０４】
当該ディスクキャッシュ区画に空き容量がある場合、制御ＣＰＵ１０４は、当該ディスクキャッシュ区画のディスクキャッシュ区画管理情報１１４に、当該セグメントに対応するディスクキャッシュ管理テーブルエントリ番号５００を追加する（ステップ９１０）。エントリ番号５００を追加する位置は、連結リストの先頭である。この処理も、ＬＲＵアルゴリズムに従った結果である。
【０１０５】
その後、制御ＣＰＵ１０４は、ディスクキャッシュ区画管理テーブル１１３及び共有状態情報１１６を変更する（ステップ９１１）。具体的には、制御ＣＰＵ１０４は、ディスクキャッシュ区画管理テーブル１１３の使用容量４０３を当該セグメントのサイズだけ加算する。共有状態情報１１６には、当該ディスクキャッシュ区画番号を設定した、当該ディスクキャッシュ区画番号７００を追加する。
【０１０６】
そして、制御ＣＰＵ１０４は、ディスクキャッシュ管理テーブル１１１を変更する（ステップ９１２）。具体的には、制御ＣＰＵ１０４が、ディスクキャッシュ管理テーブル１１１において当該セグメントの共有区画数２０３に”１”を加算する。これは、新たに当該セグメントを当該ディスクキャッシュ区画が共有したためである。
【０１０７】
一方、ステップ９０２にて、キャッシュミスと判定された場合、ディスクキャッシュ１０６に目的のデータが存在しない。よって、ストレージ装置１０１は、当該データを磁気ディスクドライブ１０７からディスクキャッシュ１０６に読み込まなくてはならない。そこで、制御ＣＰＵ１０４は、未使用セグメント管理テーブル１１２を参照し、未使用のセグメントがあるか否かを判定する（ステップ９１３）。
【０１０８】
その結果、ディスクキャッシュ１０６に未使用のセグメントがなかった場合、すでに使用しているセグメントを解放する（ステップ９１４）。当該セグメントの状態が”dirty”であれば、制御ＣＰＵ１０４は、当該セグメントに保存されたデータを磁気ディスクドライブ１０７に書き戻す。手順の詳細は後述する。そして、ステップ９１６に進む。
【０１０９】
一方、ディスクキャッシュ１０６に未使用のセグメントがあれば、制御ＣＰＵ１０４は未使用セグメント管理テーブル１１２の未使用セグメント番号３０１のエントリを取り出す（ステップ９１５）。
【０１１０】
そして、制御ＣＰＵ１０４は、ディスクキャッシュ管理テーブル１１１に当該セグメントの情報を登録する（ステップ９１６）。すなわち、エントリ番号２００、トラック番号２０１及びセグメント番号２０２が設定され、共有区画数２０３に”１”が設定される。さらに、状態２０４に”clean”が設定される。
【０１１１】
その後、制御ＣＰＵ１０４は、当該ディスクキャッシュ区画のディスクキャッシュ区画管理情報１１４に、当該セグメントに対応するディスクキャッシュ管理テーブルエントリ番号５００を追加する（ステップ９１７）。エントリ番号５００を追加する位置は、連結リストの先頭である。この処理も、ＬＲＵアルゴリズムに従った結果である。
【０１１２】
その後、制御ＣＰＵ１０４は、ディスクキャッシュ区画管理テーブル１１４及び共有状態情報１１７を変更する（ステップ９１８）。具体的には、制御ＣＰＵ１０４は、ディスクキャッシュ区画管理テーブル１１４の使用容量４０３を当該セグメントのサイズだけ加算し、共有状態情報１１７には、当該ディスクキャッシュ区画番号を設定した、当該ディスクキャッシュ区画番号７００を追加する。
【０１１３】
その後、制御ＣＰＵ１０４は、ホストコンピュータ１００が要求したデータを磁気ディスクドライブ１０７から当該セグメントへ転送する（ステップ９１９）。そして、ステップ９０６に進み、制御ＣＰＵ１０４は、当該データをホストコンピュータ１００に転送する。
【０１１４】
次に、ライトコマンドに対する制御ＣＰＵ１０４の処理を説明する。
【０１１５】
図１０に、ライトコマンドに対する制御ＣＰＵ１０４の処理のフローチャートを示す。図１０に示すライトコマンド処理は、リードコマンド処理（図９）とほぼ同じである。
【０１１６】
実際には、ストレージ装置１０１は、ホストコンピュータ１００からデータを受け取り、ディスクキャッシュ１０６内に保存した時点で、ライトコマンドの完了を報告することが可能である。そのため、リードコマンドの処理と異なり、設計者は、キャッシュがヒットしたか、ミスしたかを判定せずに、未使用セグメントにホストコンピュータ１００が送信するデータを書き込む処理を考えることができる。従って、図１０と異なるフローチャートもありうるが、理解の助けとなることを考慮して、リードコマンドと対称な処理で本発明を説明する。
【０１１７】
まず、ホストコンピュータ１００からライトコマンドを受信すると、制御ＣＰＵ１０４は、ライトコマンドの内容を解析する（ステップ１００１）。具体的には、ライトコマンドには、トラック番号とホストコンピュータ１００が要求するデータのサイズが含まれる。そのため、制御ＣＰＵ１０４は、ディスクキャッシュ管理テーブル１１１を検索し、該当するトラック番号のトラックに格納されたデータを保持したセグメントを調べる。
【０１１８】
さらに、ホストコンピュータ１００は、コマンドとともにホストコンピュータの識別子もストレージ装置１０１に送信する。そのため、制御ＣＰＵ１０４は、当該ディスク入出力コマンドに対応するディスクキャッシュ区画を特定することができる。
【０１１９】
次に、制御ＣＰＵ１０４は、ディスクキャッシュ管理テーブル１１１に該当するセグメントがあるか否かを判定する。そして、ディスクキャッシュ管理テーブル１１１に該当するセグメントがあれば、キャッシュヒットと判定しステップ１００３に進む。一方、ディスクキャッシュ管理テーブル１１１に該当するセグメントがなければ、キャッシュミスと判定し、ステップ１０１３に進む（ステップ１００２）。
【０１２０】
キャッシュヒットと判定された場合、次に、制御ＣＰＵ１０４は、当該ホストコンピュータ１００に割り当てられたディスクキャッシュ区画内でヒットしたか判定する必要がある。なぜなら、各ディスクキャッシュ区画には容量の上限が設定されているからである。
【０１２１】
具体的には、制御ＣＰＵ１０４は、共有状態情報１１６を検索し（ステップ１００３）、当該ディスクキャッシュ区画が共有状態情報１１６にすでに登録されているか判定する（ステップ１００４）。判定の結果、当該ディスクキャッシュ区画がすでに登録されていれば、”ヒット”と判定し、ステップ１００５に進む。一方、当該ディスクキャッシュ区画が登録されていなければ、”ミス”と判定し、ステップ１００８に進む。
【０１２２】
当該ディスクキャッシュ区画のエントリが存在すると判定された場合、当該ディスクキャッシュ区画のディスクキャッシュ区画管理情報１１４を変更する（ステップ１００５）。すなわち、当該セグメントに対応するディスクキャッシュ管理テーブルエントリ番号５００の情報を連結リストの先頭に移動させる。この処理を繰り返すことによって、ディスクキャッシュ区画管理情報１１４のエントリはアクセス頻度の順に並ぶ。つまり、ディスクキャッシュ区画管理情報１１４の末尾に存在するエントリに対応するセグメントがもっともアクセス頻度が少ないようになる。制御ＣＰＵがＬＲＵアルゴリズムを採用した場合、データの追い出しが必要になったときは、末尾のエントリに対応するセグメントのデータを追い出すことができる。
【０１２３】
次に、制御ＣＰＵ１０４は、ホストコンピュータ１００が送信するデータをディスクキャッシュ１０６に転送して（ステップ１００６）、ライトコマンド処理を終了する。なお、ステップ１００６は、ライトコマンド処理の最初に行ってもよい。
【０１２４】
一方、当該ディスクキャッシュ区画のエントリが存在しないと判定された場合、ディスクキャッシュ１０６に目的のデータは存在したものの、当該ディスクキャッシュ区画には登録されていない状態である。各ディスクキャッシュ区画には、容量の上限がある。そこで制御ＣＰＵ１０４は、ディスクキャッシュ区画管理テーブル１１３を参照して、当該ディスクキャッシュ区画に空き容量があるか否かを判定する（ステップ１００８）。
【０１２５】
その結果、当該ディスクキャッシュ区画に空き容量がない場合、制御ＣＰＵ１０４は、当該ディスクキャッシュ区画が使用中のセグメントを必要数だけ解放する（ステップ１００９）。解放の手順は後述する。その後、ステップ１０１０へ進む。
【０１２６】
当該ディスクキャッシュ区画に空き容量がある場合、制御ＣＰＵ１０４は、当該ディスクキャッシュ区画のディスクキャッシュ区画管理情報１１４に、当該セグメントに対応するディスクキャッシュ管理テーブルエントリ番号５００を追加する（ステップ１０１０）。エントリ番号５００を追加する位置は、連結リストの先頭である。この処理も、ＬＲＵアルゴリズムに従った結果である。
【０１２７】
その後、制御ＣＰＵ１０４は、ディスクキャッシュ区画管理テーブル１１４及び共有状態情報１１７を変更する（ステップ１０１１）。具体的には、制御ＣＰＵ１０４は、ディスクキャッシュ区画管理テーブル１１４の使用容量４０３を当該セグメントのサイズだけ加算する。共有状態情報１１７には、当該ディスクキャッシュ区画番号を設定した、当該ディスクキャッシュ区画番号７００を追加する。
【０１２８】
そして、制御ＣＰＵ１０４は、ディスクキャッシュ管理テーブル１１１を変更する（ステップ１０１２）。具体的には、制御ＣＰＵ１０４が、ディスクキャッシュ管理テーブル１１１において当該セグメントの共有区画数２０３に”１”を加算する。これは、新たに当該セグメントを当該ディスクキャッシュ区画が共有したためである。さらに制御ＣＰＵ１０４は、状態２０４に”dirty”を設定する。
【０１２９】
一方、ステップ１００２にて、キャッシュミスと判定された場合、ディスクキャッシュ１０６に目的のデータが存在しない。よって、ストレージ装置１０１は、当該データを磁気ディスクドライブ１０７からディスクキャッシュ１０６に読み込まなくてはならない。そこで、制御ＣＰＵ１０４は、未使用セグメント管理テーブル１１２を参照し、未使用のセグメントがあるか否かを判定する（ステップ１０１３）。
【０１３０】
その結果、ディスクキャッシュ１０６に未使用のセグメントがなかった場合、すでに使用しているセグメントを解放する（ステップ１０１４）。当該セグメントの状態が”dirty”であれば、制御ＣＰＵ１０４は、当該セグメントに保存されたデータを磁気ディスクドライブ１０７に書き戻す。手順の詳細は後述する。そして、ステップ１０１６に進む。
【０１３１】
一方、ディスクキャッシュ１０６に未使用のセグメントがあれば、制御ＣＰＵ１０４は未使用セグメント管理テーブル１１２の未使用セグメント番号３０１のエントリを取り出す（ステップ１０１５）。
【０１３２】
そして、制御ＣＰＵ１０４は、ディスクキャッシュ管理テーブル１１１に当該セグメントの情報を登録する（ステップ１０１６）。すなわち、エントリ番号２００、トラック番号２０１及びセグメント番号２０２が設定され、共有区画数２０３に”１”が設定される。さらに、状態２０４に”dirty”が設定される。
【０１３３】
その後、制御ＣＰＵ１０４は、当該ディスクキャッシュ区画のディスクキャッシュ区画管理情報１１４に、当該セグメントに対応するディスクキャッシュ管理テーブルエントリ番号５００を追加する（ステップ１０１７）。エントリ番号５００を追加する位置は、連結リストの先頭である。この処理も、ＬＲＵアルゴリズムに従った結果である。
【０１３４】
その後、制御ＣＰＵ１０４は、ディスクキャッシュ区画管理テーブル１１４及び共有状態情報１１７を変更する（ステップ１０１８）。具体的には、制御ＣＰＵ１０４は、ディスクキャッシュ区画管理テーブル１１４の使用容量４０３を当該セグメントのサイズだけ加算し、共有状態情報１１７には、当該ディスクキャッシュ区画番号を設定した、当該ディスクキャッシュ区画番号７００を追加する。
【０１３５】
その後、ステップ１００６に進み、制御ＣＰＵ１０４は、ホストコンピュータ１００からディスクキャッシュ１０６へデータを転送する。
【０１３６】
次に、ステップ９０９及び１００９のデータ追い出し処理を説明する。
【０１３７】
図１１に、データ追い出し処理のフローチャートを示す。図１１に示すデータ追い出し処理は、ディスクキャッシュ１０６全体としては未使用セグメントがあるが、当該ディスクキャッシュ区画の容量がその上限に達している場合に実行される。ディスクキャッシュ１０６全体で未使用セグメントがない場合の追い出し処理は図１２を用いて説明する。
【０１３８】
まず、制御ＣＰＵ１０４は、当該ディスクキャッシュ区画のディスクキャッシュ区画管理情報１１４の最後尾のエントリのディスクキャッシュ管理テーブルエントリ番号５００を取り出す（ステップ１１０１）。
【０１３９】
その後、制御ＣＰＵ１０４は、当該ディスクキャッシュ区画のディスクキャッシュ区画管理テーブル１１３を変更する（ステップ１１０２）。具体的には、当該ディスクキャッシュ区画の使用容量４０３を解放するセグメントのサイズだけ減算する。
【０１４０】
次に、制御ＣＰＵ１０４は、ディスクキャッシュ管理テーブル１１１の共有区画数２０３を参照する（ステップ１１０３）。
そして、制御ＣＰＵ１０４は、共有区画数が２以上か、１であるかを判定する（ステップ１１０４）。共有区画数が自然数でない場合は、不当な値であるため、制御ＣＰＵ１０４は処理を中止する（この不当な値に関する処理は、図示されていない）。
【０１４１】
共有区画数が２以上の場合、他のディスクキャッシュ区画が当該セグメントを使用していることを意味する。そこで、制御ＣＰＵ１０４は、当該セグメントの共有状態情報１１６の当該ディスクキャッシュ区画を示す区画番号７００を削除する（ステップ１１０５）。
【０１４２】
そして、制御ＣＰＵ１０４は、ディスクキャッシュ管理テーブル１１１の当該セグメントの共有区画数２０３から”１”を減算して（ステップ１１０６）、データ追い出し処理を終了する。
【０１４３】
一方、共有区画数が１だった場合、他のディスクキャッシュ区画が当該セグメントを使用していないため、当該セグメントを未使用の状態にすることができる。そこで、制御ＣＰＵ１０４は、多重キャッシュ管理テーブル１１５の当該セグメントに対応するエントリを削除する（ステップ１１０７）。
【０１４４】
制御ＣＰＵ１０４は、ディスクキャッシュ管理テーブル１１１の当該セグメントに対応するエントリを削除する（ステップ１１０８）。このとき当該セグメントの状態２０４が”dirty”だったときには、当該セグメントに保持されていたデータを磁気ディスクドライブ１０７に書き戻してから、当該エントリを削除する。なお、追い出しの対象とするセグメントを”clean”の状態のセグメントに限ってもよい。
【０１４５】
その後、制御ＣＰＵ１０４は、当該セグメントのセグメント番号を未使用セグメント管理テーブル１１２に追加して（ステップ１１０９）、データ追い出し処理を終了する。
【０１４６】
図１２に、別の追い出し処理のフローチャートを示す。
【０１４７】
図１１に示す追い出し処理は、ディスクキャッシュ１０６全体としては未使用セグメントが存在したが、ディスク入出力コマンドの対象となったディスクキャッシュ区画に関しては、その容量の上限に達していた場合である。一方、ステップ９１４及び１０１４の追い出し処理は、ディスクキャッシュ１０６全体に未使用セグメントがない場合である。
【０１４８】
まず、制御ＣＰＵ１０４は、ディスクキャッシュ管理テーブル１１１のエントリを一つ又は複数選択する（ステップ１２００）。例えば、状態が”clean”のセグメントを選択する方法もある。また、ＬＲＵアルゴリズムに従って、アクセス頻度が最も少ないセグメントを選択する方法もある。さらに、複数のセグメントにおいて、格納されたデータのトラック番号が連続していた場合は、一つのまとまったデータと判断して、これらのセグメントを一括して選択する方法もある。いうまでもないが、本発明はこの選択の方法に依存しない。
【０１４９】
その後、制御ＣＰＵ１０４は、多重キャッシュ管理テーブル１１５の、ステップ１２００で選択されたセグメントに対応するエントリを参照する（ステップ１２０１）。
【０１５０】
その後、制御ＣＰＵ１０４は、ステップ１２０１で得た情報に基づいて、当該セグメントを使用しているディスクキャッシュ区画を特定する（ステップ１２０２）。
【０１５１】
その後、制御ＣＰＵ１０４は、ステップ１２０２で特定されたディスクキャッシュ区画のディスクキャッシュ区画管理情報１１４から、当該セグメントに対応するディスクキャッシュ管理テーブルエントリ番号５００を削除する（ステップ１２０３）。
【０１５２】
その後、制御ＣＰＵ１０４は、ディスクキャッシュ区画管理テーブル１１３の当該ディスクキャッシュ区画の使用容量４０３から、解放したセグメントのサイズを減算する（ステップ１２０４）。
【０１５３】
その後、制御ＣＰＵ１０４は、当該セグメントを使用したディスクキャッシュ区画すべてに対して、ステップ１２０３から１２０４の処理を実行したか否かを判定する（ステップ１２０５）。そして、すべてディスクキャッシュ区画において前述した処理が実行されたならば、ステップ１２０６に進む。一方、前述した処理が実行されていないディスクキャッシュ区画があれば、ステップ１２０３に戻る。
【０１５４】
制御ＣＰＵ１０４は、多重キャッシュ管理テーブル１１５から当該セグメントの情報を削除する（ステップ１２０６）。
【０１５５】
次に、ストレージ装置１０１の管理者が、各ディスクキャッシュ区画に対して、容量などを設定する方法を説明する。
【０１５６】
図１３に、管理端末１０２の画面の一例を示す。
【０１５７】
管理端末の画面１３００内にディスクキャッシュ区画の設定情報１３０１が表示されている。設定情報１３０１は、区画番号１３０２、リクエスタＩＤ１３０３及び割り当て容量１３０４を含む。
【０１５８】
区画番号１３０２は、ディスクキャッシュ区画の番号を表示、設定される欄であり、ディスクキャッシュ区画管理テーブル１１３の区画番号４００と同じ情報が表示される。
【０１５９】
リクエスタＩＤ１３０３には、ディスクキャッシュ区画管理テーブル１１３のリクエスタＩＤ４０１と同じ情報が表示される。
【０１６０】
割り当て容量１３０４は、当該ディスクキャッシュ区画に管理者が割り当てるディスクキャッシュ容量を設定及び表示する欄である。割り当て容量１３０４に設定された情報は、ディスクキャッシュ区画管理テーブル１１３の割り当て容量４０２に反映される。
【０１６１】
管理者がＯＫボタン１３０７を操作すると、設定情報１３０１に設定したそれぞれの情報は制御ＣＰＵ１０４に転送される。制御ＣＰＵ１０４は、転送された情報をディスクキャッシュ区画管理テーブル１１３に反映させる。管理者がCancelボタン１３０８を操作すると、設定情報１３０１に設定したそれぞれの情報は、制御ＣＰＵ１０４に転送されずに破棄される。
【０１６２】
管理者が、各ディスクキャッシュ区画に容量を割り当てるには様々な方針がある。例えば、使用する磁気ディスクドライブ１０７の容量が大きいディスクキャッシュ区画には、多くの容量を設定することができる。また、ディスクキャッシュ区画に対応するホストコンピュータ１００が実行する業務の性質から必要な容量を見積り、容量を設定する方法もある。
【０１６３】
本実施の形態では、ストレージ装置１０１として、ＳＣＳＩ規格に代表されるブロックストレージを想定している。ブロックストレージとは、磁気ディスクドライブ１０７を固定サイズの記憶領域の単位（第１の実施の形態における「トラック」）に分割し、ホストコンピュータからみて、この単位の集合として磁気ディスクドライブ１０７を取り扱うストレージである。
【０１６４】
一方、ホストコンピュータ１００内で稼動するオペレーティングシステムは、磁気ディスク１０７内のデータをファイルという可変サイズの単位で、利用者に使用させる。ファイルは前述した磁気ディスクドライブ１０７の複数のトラックからなる単位である。ストレージ装置の中には、ホストコンピュータ１００とのインタフェースをファイル単位とする装置もある。このようなストレージ装置は、従来より、ファイルサーバ、ＮＡＳ（Network Attached Storage）と呼ばれてきた。これらをブロックストレージと区別してファイルストレージと呼ぶ。
【０１６５】
本発明は、ホストコンピュータ１００とストレージ装置１０１とのインタフェースに依存しないため、ファイルストレージにも適用可能であることはいうまでもない。すなわち、ファイルは磁気ディスクドライブ１０７の一つ又は複数のトラックから構成される。従って、ファイルを構成するトラックに対して本実施の形態で説明した方法を適用することができる。
【０１６６】
（第２の実施の形態）
これまで本発明の第１の実施の形態を説明してきたが、ディスクキャッシュ区画間（ホストコンピュータ間）でデータを共有する機器構成が前提である。あるホストコンピュータが使用しているデータを別のホストコンピュータが変更してしまうと、データを使用しているホストコンピュータにとってデータに不整合が生じる可能性がある。
【０１６７】
従来は、複数のユーザ間で同一のデータを共有したとき、データの一貫性の保証は、ホストコンピュータ内で稼動するオペレーティングシステムの役割であった。しかし、ストレージ集約の環境下では、ホストコンピュータ間の同期機構が設けられていないため、オペレーティングシステムでは一貫性を保証できない。そこで、ストレージ装置が一貫性を保証する必要がある。
【０１６８】
第２の実施の形態においてこの機構を説明する。
【０１６９】
図１４に、第２の実施の形態の計算機システムのハードウェア構成を示す。
【０１７０】
ストレージ装置１０１には、新たに磁気ディスク属性テーブル１４００が追加されている。他の要素は、図１と同様であるため、説明を省略する。磁気ディスク属性テーブル１４００は、各磁気ディスクドライブ１０７について、ディスクキャッシュ区画に許可されたコマンドの種別を記述したテーブルである。
【０１７１】
図１５に、磁気ディスク属性テーブル１４００を示す。
【０１７２】
磁気ディスク属性テーブル１４００は、磁気ディスクドライブ番号１５００、トラック番号１５０１、区画０（１５０２）及び区画１（１５０３）を含む。
【０１７３】
磁気ディスクドライブ番号１５００は、磁気ディスクドライブ１０７の識別子が設定される欄である。
【０１７４】
トラック番号１５０１は、磁気ディスクドライブに含まれるトラック番号の範囲が設定される欄である。
【０１７５】
区画０（１５０２）及び区画１（１５０３）は、各ディスクキャッシュ区画に許可されたコマンドが記述される欄である。
【０１７６】
図１５では、磁気ディスクドライブ番号０の磁気ディスクドライブに対して、ディスクキャッシュ区画０は、ＲＥＡＤ及びＷＲＩＴＥがともに可能である。ディスクキャッシュ区画１は、ＲＥＡＤ及びＷＲＩＴＥがともに可能である。
【０１７７】
一方、磁気ディスクドライブ番号１の磁気ディスクドライブは、区画０は、ＲＥＡＤ及びＷＲＩＴＥがともに可能であるが、区画１はＲＥＡＤのみ可能である。このようにディスクキャッシュ区画（ホストコンピュータ）それぞれに対して、許可された磁気ディスクドライブに対するコマンドを記述できる。
【０１７８】
図１６に、ストレージ装置のディスク入出力コマンドの処理のフローチャートを示す。
【０１７９】
まず、ストレージ装置１０１は、ホストコンピュータ１００が送信したディスク入出力コマンドを受信する（ステップ１６０１）。
【０１８０】
そして、ストレージ装置１０１は、コマンドを解析して、対象となる磁気ディスクドライブとディスクキャッシュ区画を特定し、磁気ディスク属性テーブル１４００を参照する。そして、ストレージ装置１０１は、当該ディスク入出力コマンドが許可されたコマンドか否かを判定する（ステップ１６０２）。
【０１８１】
当該コマンドが許可されていれば、ストレージ装置１０１は当該コマンドを実行する（ステップ１６０３）。そして、ストレージ装置１０１は、ホストコンピュータ１００に当該コマンドの処理完了を報告する（ステップ１６０４）。
【０１８２】
一方、当該コマンドが許可されていなければ、ストレージ装置１０１は、ホストコンピュータ１００に当該コマンドの異常終了を報告する（ステップ１６０５）。
【０１８３】
以上説明したように、本発明では、従来のように同一データを重複してディスクキャッシュに格納することを避けることができる。よって、従来技術と比較すると、重複してデータを配置していた容量分だけ利用者がディスクキャッシュの容量を多く利用することが可能になる。
【０１８４】
図１７に、ディスクキャッシュの割り当て容量算出処理のフローチャートを示す。
【０１８５】
まず、管理者は、ディスクキャッシュ容量の割当を算出する磁気ディスクの区画を選択する（ステップ２００１）。
【０１８６】
制御ＣＰＵ１０４は、ディスクキャッシュ区画管理テーブル１１３を参照して、管理者の選択に基づいて、ディスクキャッシュ容量の割当の算出対象となる区画のために使用される磁気ディスクの容量を算出する（ステップ２００２）。
【０１８７】
各区画のために使用される磁気ディスクの容量の比率に従って、各区画に割り当てられるディスクキャッシュの容量を決定する（ステップ２００３）。
【０１８８】
その後、区画間で共有される磁気ディスクの容量を計算する（ステップ２００４）。
【０１８９】
そして、共有される磁気ディスクの容量に比例した容量を、各区画のディスクキャッシュ容量に加算する（ステップ２００５）。
【０１９０】
図１８〜図２０に、ディスクキャッシュ割当容量算出処理（図１７）による算出結果を示す。
【０１９１】
図１８は、区画間で共有する磁気ディスクがないときのディスクキャッシュ容量配分を示す。
【０１９２】
磁気ディスクの全容量がＹ（ＧＢ）であり、区画０が使用する磁気ディスクの容量と区画１が使用する磁気ディスクの容量との比がα：（１−α）であった場合、区画０が使用する磁気ディスクの容量はαＹ（ＧＢ）となり、区画１が使用する磁気ディスクの容量は（１−α）Ｙ（ＧＢ）となる。
【０１９３】
各区画に割り当てられるディスクキャッシュの容量は、各区画に割り当てられた磁気ディスクの容量に比例する。よって、区画０に使用されるディスクキャッシュの容量と区画１に使用されるディスクキャッシュの容量との比がα：（１−α）となる。
【０１９４】
ディスクキャッシュの全容量がＸ（ＧＢ）であると、区画０に使用されるディスクキャッシュ容量はαＸ（ＧＢ）となり、区画１に使用されるディスクキャッシュ容量は（１−α）Ｘ（ＧＢ）となる。
【０１９５】
図１９は、区画間で共有する磁気ディスクがあるときのディスクキャッシュ容量配分を示す。
【０１９６】
磁気ディスクの全容量がＹ（ＧＢ）であり、区画０が使用する磁気ディスクの容量と区画１が使用する磁気ディスクの容量と区画間で共有される磁気ディスクの容量との比がα：（１−α）：βであった場合、区画０が使用する磁気ディスクの容量はαＹ（ＧＢ）となり、区画１が使用する磁気ディスクの容量は（１−α）Ｙ（ＧＢ）となり、区画間で共有される磁気ディスクの容量はβＹ（ＧＢ）となる。
【０１９７】
各区画に割り当てられるディスクキャッシュの容量は、各区画に割り当てられた磁気ディスクの容量に比例する。よって、区画０に使用されるディスクキャッシュの容量と区画１に使用されるディスクキャッシュの容量との比がα：（１−α）となる。
【０１９８】
ディスクキャッシュの全容量がＸ（ＧＢ）であると、区画間で共有される磁気ディスクの容量はβＸ（ＧＢ）となる。このβＸ（ＧＢ）を各区画で使用されるディスクキャッシュ容量で均等に配分することにすると、区画０に使用されるディスクキャッシュ容量は（α＋β／２）Ｘ（ＧＢ）となり、区画１に使用されるディスクキャッシュ容量は（１−α＋β／２）Ｘ（ＧＢ）となる。
【０１９９】
区画間で共有する磁気ディスクがあるときとないときの、各区画が有効に使えるディスクキャッシュの容量を比較すると、区画間で共有する磁気ディスクがあるときの方が、各区画が有効に使えるディスクキャッシュの容量を比較すると、共有される磁気ディスクがあるときの方が、各区画で有効に使えるディスクキャッシュの容量が大きくなる。
【０２００】
これは、図２０に示すように、ディスクを区画間で共有しないときには、区画０が使用するディスクキャッシュ容量はαＸ（ＧＢ）である。一方、ディスクを区画間で共有するときには、区画０が使用するディスクキャッシュ容量（α＋β／２）Ｘ（ＧＢ）に増加する。
【０２０１】
以上説明したように、管理者は、ディスクキャッシュ区画間で共有される磁気ディスクドライブ１０７の容量はあらかじめわかっているはずである。管理者がディスクキャッシュ区画に割り当てる容量の配分率を、使用する磁気ディスクドライブ１０７の容量に比例する方針を採った場合、共有される磁気ディスクドライブ１０７の容量の比率分だけ、ディスクキャッシュ区画に割り当てるディスクキャッシュ容量を従来と比較して増やすことができる。
【０２０２】
また、従来よりディスクキャッシュの利用容量が増えるため、ストレージ装置１０１自身の機能のためにこれらを利用してもよい。近年、ストレージ装置１０１の高機能化は著しい。例えば、遠隔地へデータをコピーする機能や、ストレージ装置１０１内で短時間に磁気ディスクドライブ１０７の複製を行う機能が考えられる。
【０２０３】
ディスクキャッシュ１０６は、前述のように性能に大きく影響するコンポーネントであり、その利用効率が向上することは、利用者に大きな利益をもたらすといえる。
【図面の簡単な説明】
【０２０４】
【図１】第１の実施の形態の計算機システムのハードウェア構成を示すブロック図である。
【図２】第１の実施の形態におけるストレージ装置のディスクキャッシュ管理テーブルの説明図である。
【図３】第１の実施の形態におけるストレージ装置の未使用セグメント管理テーブルの説明図である。
【図４】第１の実施の形態におけるストレージ装置のディスクキャッシュ区画管理テーブルの説明図である。
【図５】第１の実施の形態におけるストレージ装置のディスクキャッシュ区画管理情報の説明図である。
【図６】第１の実施の形態におけるストレージ装置の多重キャッシュ管理テーブルの説明図である。
【図７】第１の実施の形態におけるストレージ装置の共有状態情報の説明図である。
【図８】第１の実施の形態におけるストレージ装置のディスク入出力処理を示すフローチャートである。
【図９】第１の実施の形態におけるストレージ装置のリード処理を示すフローチャートである。
【図１０】第１の実施の形態におけるストレージ装置のライト処理を示すフローチャートである。
【図１１】第１の実施の形態におけるストレージ装置の追い出し処理を示すフローチャートである。
【図１２】第１の実施の形態におけるストレージ装置の追い出し処理を示すフローチャートである。
【図１３】第１の実施の形態における管理端末の設定画面を示す説明図である。
【図１４】第２の実施の形態の計算機システムのハードウェア構成を示すブロック図である。
【図１５】第２の実施の形態の磁気ディスク属性テーブルの説明図である。
【図１６】第２の実施の形態のストレージ装置のディスク入出力コマンドの処理を示すフローチャートである
【図１７】第２の実施の形態のディスクキャッシュの割り当て容量算出処理を示すフローチャートである。
【図１８】第２の実施の形態のディスクキャッシュ割当容量の算出の説明図である。
【図１９】第２の実施の形態のディスクキャッシュ割当容量の算出の説明図である。
【図２０】第２の実施の形態のディスクキャッシュ割当容量の算出の説明図である。
【符号の説明】
【０２０５】
１００  ホストコンピュータ
１０１  ストレージ装置
１０２  管理端末
１０３  ホストインタフェース部
１０４  制御ＣＰＵ
１０５  システムメモリ
１０６  ディスクキャッシュ
１０７  磁気ディスクドライブ
１０８  ディスクインタフェース部
１０９  システムバス
１１０  制御プログラム
１１１  ディスクキャッシュ管理テーブル
１１２  未使用セグメント管理テーブル
１１３  ディスクキャッシュ区画管理テーブル
１１４  ディスクキャッシュ区画管理情報
１１５  多重キャッシュ管理テーブル
１１６  共有状態情報
１４００  磁気ディスク属性テーブル
【図１】
0004813843.tif 000002
【図２】
0004813843.tif 000003
【図３】
0004813843.tif 000004
【図４】
0004813843.tif 000005
【図５】
0004813843.tif 000006
【図６】
0004813843.tif 000007
【図７】
0004813843.tif 000008
【図８】
0004813843.tif 000009
【図９】
0004813843.tif 000010
【図１０】
0004813843.tif 000011
【図１１】
0004813843.tif 000012
【図１２】
0004813843.tif 000013
【図１３】
0004813843.tif 000014
【図１４】
0004813843.tif 000015
【図１５】
0004813843.tif 000016
【図１６】
0004813843.tif 000017
【図１７】
0004813843.tif 000018
【図１８】
0004813843.tif 000019
【図１９】
0004813843.tif 000020
【図２０】
0004813843.tif 000021