JP2009122850A - ブロックデバイス制御装置及びアクセス範囲管理方法 - Google Patents

ブロックデバイス制御装置及びアクセス範囲管理方法 Download PDF

Info

Publication number
JP2009122850A
JP2009122850A JP2007294613A JP2007294613A JP2009122850A JP 2009122850 A JP2009122850 A JP 2009122850A JP 2007294613 A JP2007294613 A JP 2007294613A JP 2007294613 A JP2007294613 A JP 2007294613A JP 2009122850 A JP2009122850 A JP 2009122850A
Authority
JP
Japan
Prior art keywords
directory
block device
access
recording
range
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2007294613A
Other languages
English (en)
Inventor
Koji Tsuruhisa
康治 鶴久
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Toshiba Digital Solutions Corp
Original Assignee
Toshiba Corp
Toshiba Solutions Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toshiba Corp, Toshiba Solutions Corp filed Critical Toshiba Corp
Priority to JP2007294613A priority Critical patent/JP2009122850A/ja
Publication of JP2009122850A publication Critical patent/JP2009122850A/ja
Pending legal-status Critical Current

Links

Images

Abstract

【課題】ホストからのアクセスパターンに基づいてディレクトリの記録粒度を部分的に変更し、記録されたアクセス範囲に基づく処理またはディレクトリを管理する処理を軽減することを可能とする。
【解決手段】ホストI/F制御部211は、スレーブ・ブロックデバイス制御装置によって送信されたアクセス要求を受信する。キャッシュ・ディレクトリ管理部216は、ホストI/F制御部211によって受信されたアクセス要求アクセス要求に応じてアクセスされる論理ユニットへのアクセス範囲をキャッシュ・ディレクトリ235に記録する際の記録粒度を変更する。キャッシュ・ディレクトリ管理部216は、変更された記録粒度に基づいて、ホストI/F制御部211によって受信されたアクセス要求に応じてアクセスされる論理ユニットへのアクセス範囲をキャッシュ・ディレクトリ235に記録する。
【選択図】 図4

Description

本発明は、ブロックデバイス制御装置がホストコンピュータに対して提供する論理ユニットへのアクセス範囲を管理するブロックデバイス制御装置及びアクセス範囲管理方法に関する。
近年、例えば複数のブロックデバイス制御装置によって管理される複数の記憶領域(以下、単にエクステントと表記)が結合された論理ユニット(LU: Logical Unit)を、ホストコンピュータ(以下、単にホストと表記)に提供するストレージ・クラスタ・システムが知られている。ブロックデバイス制御装置は、複数の例えばハードディスクドライブ(HDD)のようなブロックデバイスを制御してエクステントを提供する。
このようなストレージ・クラスタ・システムでは、ホストからのリード要求またはライト要求は適切なブロックデバイス制御装置、例えば当該リード要求(またはライト要求)に応じたエクステントを提供(管理)するブロックデバイス制御装置へ転送される。このとき、転送処理を行うブロックデバイス制御装置においては、当該転送に伴うデータを例えば当該ブロックデバイス制御装置内のキャッシュメモリに蓄積することがスループットを向上させるために不可欠である。この場合、例えば各ブロックデバイス制御装置に分散したキャッシュメモリの一貫性を保証する処理(以下、コヒーレント処理と表記)が実行される。
コヒーレント処理は、ブロックデバイス制御装置間で例えばインタコネクトを介したメッセージの送受信によって、ホストからのLUへのライト要求に同期して、全てのブロックデバイス制御装置内のキャッシュメモリに存在する当該ライト要求に応じた領域に対応するデータ(キャッシュデータ)に対して、無効化あるいは新しいライトデータを反映することで実現される。
上記したような共有データに関する分散キャッシュの一貫性保証技術は、例えば並列計算機またはマルチプロセッサ・システムの分野で発展した技術であるが上記コヒーレント処理と本質的には同一である。これらの分野において、例えばディレクトリに記録することでコヒーレント処理の対象を限定して、発生するトランザクションを削減することが知られている。
同様に、ストレージ・クラスタ・システムにおけるコヒーレント処理においても、ブロックデバイス制御装置は、例えばホストからのLUへの断続的な複数のアクセス範囲を全て記録して参照することにより、発生するトランザクションを削減することができる。
そこで、例えばストレージ・クラスタ・システム内のブロックデバイス制御装置毎に分散するキャッシュデータの存在を管理するキャッシュ・ディレクトリが存在する。キャッシュ・ディレクトリは、各ブロックデバイス制御装置の主記憶メモリに分散させる形で設けられている。このキャッシュ・ディレクトリでは、例えばブロックデバイス制御装置から転送されたリード/ライト要求範囲と、その転送元であるブロックデバイス制御装置とが対応付けて記録される。これにより、例えばコヒーレント処理の対象ブロックデバイス制御装置を限定することで、送受信メッセージ数が削減できる。
一方、ブロックデバイス制御装置が断続的な複数のアクセス範囲を記録する別の例として、スナップショット機能における差分情報ディレクトリを用いた技術が開示されている(例えば、特許文献1を参照)。スナップショット機能とは、ある時点のLU(マスタLU)の内容を別のLU(バックアップLU)に複製する機能である。マスタLUとバックアップLUは同一ブロックデバイス制御装置が管理することもあり、また、異なるブロックデバイス制御装置が管理することもある。
この技術によれば、同期状態にあるマスタLUとバックアップLUは、ホストからのスナップショットデータ採取の指示によって同期状態が解除される。同期状態が解除された後のマスタLUへのライト要求は、差分情報として差分情報ディレクトリにアクセス範囲が記録される。マスタLUとバックアップLUとの再同期化を行うときには、バックアップLUへ差分情報ディレクトリに記録された範囲のデータのみコピーが行われる。また、あるスナップショットに対する差分データのみで構成される差分スナップショットを取得するときは、差分情報ディレクトリで記録された範囲のデータのみ必要となる。
しかしながら、近年のブロックデバイス制御装置が提供するLUの大容量化やユーザの使用するシステム・データ、ユーザ・データの増加に伴って、アクセス範囲が広範囲に及び、上記したようなキャッシュ・ディレクトリまたは差分情報ディレクトリに必要なメモリ量も膨大となる。
このため、ディレクトリを構成するメモリ量を削減するために、単純なテーブルやフルビットマップではなく、小さなビットマップを木構造で管理する方式が一般的である。そこで、例えばキャッシュ・ディレクトリを圧縮する技術が提案されている(例えば、特許文献2を参照)。
更に、例えばディレクトリ全体の記録粒度を粗くすることで、ディレクトリを構成するメモリ量を削減することができる。つまり、例えばアクセス範囲を1セクタ単位ではなく、例えば256セクタ単位で記録することで、ディレクトリを構成する全ビットマップに必要なメモリ量をおよそ256分の1に抑えることが可能である。また、これにより、ディレクトリの管理(例えば、探索または変更等)にかける処理量が軽減される。
特開2005−85117号公報 特開平9−22381号公報
しかしながら、記録粒度の粗さに起因して、本来はアクセスされていない範囲がアクセスされたと判定され、記録されたアクセス範囲に基づく処理量が増加する場合がある。例えば、ブロックデバイス制御装置によってリードされた範囲がキャッシュ・ディレクトリに記録された場合を想定する。この場合、そのリード範囲の近傍(の領域)に対する後続のライト要求受信処理では、当該ライト要求範囲はキャッシュされていないにもかかわらず、記録粒度の粗さによってライト要求範囲もキャッシュされていると判定されてしまう。これにより、不必要なコヒーレント処理を実行する必要が生じてしまう。
上記したように、ディレクトリ全体で均一の記録粒度を使用することによって、記録粒度の細かさが足りずに記録されたアクセス範囲に基づく処理量が大きくなる範囲と、必要以上に記録粒度が細かいためにディレクトリを管理する処理量が大きくなる範囲がディレクトリ内部にそれぞれ存在することになる。
本発明の目的は、ホストからのアクセスパターンに基づいてディレクトリの記録粒度を部分的に変更し、記録されたアクセス範囲に基づく処理またはディレクトリを管理する処理を軽減することができるブロックデバイス制御装置及びアクセス範囲管理方法を提供することにある。
本発明の1つの態様によれば、ホストコンピュータに対して論理ユニットを提供するブロックデバイス制御装置が提供される。このブロックデバイス制御装置は、前記ホストコンピュータからの前記論理ユニットに対するアクセス要求によって指定される当該論理ユニットへのアクセス範囲を記録するディレクトリと、前記ホストコンピュータからのアクセス要求を受信する受信手段と、前記受信されたアクセス要求によって指定される前記論理ユニットへのアクセス範囲を前記ディレクトリに記録する際の記録粒度を、当該アクセス要求に基づいて変更する変更手段と、前記受信されたアクセス要求によって指定される前記論理ユニットへのアクセス範囲を、前記変更された記録粒度に基づいて前記ディレクトリに記録する記録処理手段とを具備する。
本発明によれば、ホストからのアクセスパターンに基づいてディレクトリの記録粒度を部分的に変更し、記録されたアクセス範囲に基づく処理またはディレクトリを管理する処理を軽減することを可能とする。
以下、図面を参照して、本発明の各実施形態について説明する。
[第1の実施形態]
図1は、本発明の第1の実施形態に係るブロックデバイス制御装置を含むストレージ・クラスタ・システムの構成を示すブロック図である。ストレージ・クラスタ・システムは、ホストコンピュータ(以下、単にホストと表記)10及びブロックデバイス制御装置20を含む。図1に示すように、ホスト10は、複数(例えばN台)存在する。また、ブロックデバイス制御装置20は、複数(例えばM台)存在し、当該複数のブロックデバイス制御装置20は例えば疎結合されている。ホスト10及びブロックデバイス制御装置20は、例えばスイッチ30を介して接続される。
ブロックデバイス制御装置20には、配下に例えば複数のハードディスクドライブ(HDD)200のようなブロックデバイスから構成されるディスクアレイが接続されている。
上記したホスト10及びブロックデバイス制御装置20間を接続するインタコネクトとしては、例えばSCSI(Small Computer System Interface)プロトコルに基づくブロックデバイス用インタフェース(I/F)であるファイバチャネル(FC:Fibre Channel)またはiSCSIを想定している。例えばFCの場合、スイッチ30の部分がファブリック・スイッチとなる。また、iSCSIの場合は、例えばイーサネット(登録商標)のスイッチング・ハブとなる。
ストレージ・クラスタ・システムにおいては、ブロックデバイス制御装置20の各々はディスクアレイを複数に分割した記憶領域(以下、単にエクステントと表記)を提供する。ホスト10に対して少なくとも1つのエクステントによって構成される論理ユニット(LU:Logical Unit)が提供される。
このようなストレージ・クラスタ・システムにおいて、ホスト10からのLUに対するアクセス要求(リード/ライト要求)は、例えば予め設定された1台のブロックデバイス制御装置20(以下、代表ブロックデバイス制御装置と表記)に対して発行される。このアクセス要求がリード要求である場合、当該リード要求には、例えば当該リード要求に応じてアクセスされるLUを識別するLUN(Logical Unit Number)、当該LUのブロックアドレス及び当該アクセス要求に応じてアクセスされるデータのサイズ等が含まれる。また、リード要求には、例えば当該アクセス要求を送信したホスト10を識別する識別情報(イニシエータ情報)が含まれる。一方、アクセス要求がライト要求である場合、当該ライト要求には、上記したLUN、ブロックアドレス、データのサイズ及びイニシエータ情報に加えて、当該ライト要求に応じて書き込まれるデータ(ライトデータ)が含まれる。なお、ホスト10毎に異なる代表ブロックデバイス制御装置を割り当てて、マルチポートストレージとして動作することも可能である。
ストレージ・クラスタ・システムでは、ホスト10に対して提供されるLUのLUNとブロックアドレス範囲と、当該LUを構成するエクステントとエクステントを提供するブロックデバイス制御装置20のアドレスとが対応付けて保持されているルーティングテーブルが管理されている。このルーティングテーブルの詳細については後述する。
例えばホスト10に対して割り当てられた代表ブロックデバイス制御装置は、当該ホスト10からのアクセス要求に含まれるLUN及びブロックアドレスから、各ブロックデバイス制御装置20が提供しているエクステントと当該エクステントを管理するブロックデバイス制御装置20を特定する。この特定されたブロックデバイス制御装置は、マスタ・ブロックデバイス制御装置と称する。つまり、マスタ・ブロックデバイス制御装置は、ホスト10からのアクセス要求に応じてアクセスされるエクステントを管理するブロックデバイス制御装置である。
代表ブロックデバイス制御装置は、ホスト10からのアクセス要求を、特定されたマスタ・ブロックデバイス制御装置に対する要求に変換し、代表ブロックデバイス制御装置は、変換されたアクセス要求を上記したようなインタコネクト経由で転送することによって、ホスト10及びマスタ・ブロックデバイス制御装置間の中継を行うことができる。なお、この一連の中継処理を行うブロックデバイス制御装置をスレーブ・ブロックデバイス制御装置と称する。この場合では、代表ブロックデバイス制御装置がスレーブ・ブロックデバイス制御装置である。アクセス要求の変換は、ホスト10からのアクセス要求に含まれるブロックアドレスとデータのサイズを、当該ブロックアドレスと当該データのサイズによって示されるアクセス範囲と当該エクステントが当該LUにマップされた範囲が重なる範囲を示すブロックアドレスとデータのサイズに変更することで行われる。なお、スレーブ・ブロックデバイス制御装置によって転送された変換後のアクセス要求には、当該LUN、変換されたブロックアドレス、変換されたデータのサイズに加えて、当該スレーブ・ブロックデバイス制御装置を識別する識別情報(イニシエータ情報)が含まれる。
つまり、各ブロックデバイス制御装置20は、ホスト10または別のブロックデバイス制御装置20(例えばスレーブ・ブロックデバイス制御装置)からのアクセス要求に関して、当該アクセス要求に応じてアクセスされる範囲を構成する全エクステントの各々に対して、エクステントが自装置の配下のディスクアレイに存在する場合は、マスタ・ブロックデバイス制御装置として動作する。一方、存在しない場合は、スレーブ・ブロックデバイス制御装置として動作する。
図2は、ホストからLUへのアクセスパスの一例を示す図である。例えば、ブロックデバイス制御装置20(#0〜1)がそれぞれ提供する1024kセクタサイズのエクステント201(#0〜1)を組み合わせたLU(LUN0)をホスト10へ提供する。LUにおけるブロックアドレス0〜1024kセクタはエクステント201(#0)に相当し、ブロックアドレス1024k〜2048kセクタはエクステント201(#1)に相当する。
ここで、ホスト10が、例えばLUN0、ブロックアドレス1020kセクタ、サイズ16kセクタに関するリード要求を発行し、ブロックデバイス制御装置20(#0)が当該リード要求を受信した場合を想定する。この場合、ブロックデバイス制御装置20(#0)は、ルーティングテーブルを参照し、エクステント境界においてリード要求受信処理を分割して実行する。アクセス範囲におけるエクステント201(#0)に係る範囲(ブロックアドレス1020k〜1024kセクタ)においてはマスタ・ブロックデバイス制御装置として動作し、エクステント201(#1)に係る範囲(ブロックアドレス1024kセクタ〜1036kセクタ)においてはスレーブ・ブロックデバイス制御装置として動作し、ブロックデバイス制御装置20(#1)へリード要求を変換して転送する。転送するリード要求(LUN0、ブロックアドレス1024kセクタ、サイズ12kセクタ)には、イニシエータ情報としてブロックデバイス制御装置20(#0)の識別情報が含まれる。転送されたリード要求を受信したブロックデバイス制御装置20(#1)はルーティングテーブルを参照し、マスタ・ブロックデバイス制御装置として動作する。転送されたリード要求に対するリードデータはブロックデバイス制御装置20(#0)へ転送され、ブロックデバイス制御装置(#0)からホスト10へ転送される。
図3は、図1に示すブロックデバイス制御装置20のハードウェア構成を示すブロック図である。
ブロックデバイス制御装置20は、I/Oプロセッサ21、ROM22、メモリ23、バッテリ24、ホストインタフェース(ホストI/F)25及びディスクインタフェース(ディスクI/F)26を含む。
ブロックデバイス制御装置20は、例えばI/Oプロセッサ21上で動作するプログラム(ソフトウェア)により制御される。このプログラムは、例えばROM22に格納され、ブロックデバイス制御装置20の起動時に例えばメモリ23にロードされ、I/Oプロセッサ上で実行される。なお、このプログラムは、例えばコンピュータ読み取り可能な記憶媒体に予め格納して頒布可能である。また、このプログラムが、例えばネットワークを介してブロックデバイス制御装置20にダウンロードされても構わない。
メモリ23は、例えばバッテリ24により停電時もバックアップされる。また、メモリ23は、ホスト10に提供されるハードディスクドライブ200のようなストレージ(ブロックデバイス)のディスクキャッシュ、あるいはマスタ・ブロックデバイス制御装置の動作時に管理されるキャッシュ・ディレクトリ領域としても使用される。このキャッシュ・ディレクトリの詳細については、後述する。また、メモリ23内には、上記したルーティングテーブルも格納されている。
I/Oプロセッサ21及びホスト10間は、ホストI/F25を介して接続される。ホストI/F25としては、例えばFCまたはiSCSIが用いられる。ホストI/F25は、例えばホスト10またはスレーブ・ブロックデバイス制御装置に対する送受信処理を行う。
I/Oプロセッサ21及びブロックデバイス制御装置20の配下のディスクアレイ間は、ディスクI/F26を介して接続される。ディスクI/F26としては、FC、パラレルSCSI、SAS(Serial Attached SCSI)、SATA(serial ATA)等の通常のブロックデバイス用I/Fコントローラが用いられる。ディスクI/F26は、例えばブロックデバイス制御装置20の配下のディスクアレイに対するリード/ライト処理を行う。
また、I/Oプロセッサ21及びホストI/F25間、I/Oプロセッサ21及びディスクI/F26間は、例えばPCI(Peripheral Component Interconnect)バス等のインタコネクトで接続される。
なお、I/Oプロセッサ21内には、例えば割り込みコントローラ、RAID(Redundant Arrays of Inexpensive Disks)5用のパリティ計算モジュール、DMA(Direct Memory Access)コントローラ等のハードウェア(H/W)がある。
また、上記したI/Oプロセッサ21上で動作するプログラムによって、当該I/Oプロセッサ21の内部ハードウェアとホストI/Fコントローラ、ディスクI/Fコントローラ等の外部ハードウェアとが制御される。そして、例えば複数のハードディスクドライブ200で構成されるディスクアレイを複数に分割して、エクステントとして提供される。
図4は、ブロックデバイス制御装置20の主として機能構成を示すブロック図である。ブロックデバイス制御装置20は、ホストI/F制御部211、ディスクI/F制御部212、構成情報管理部213、キャッシュメモリ管理部214、統計情報管理部215、キャッシュ・ディレクトリ管理部216、I/O処理部217及び通信部218を含む。本実施形態において、これらの各部211乃至218は、図3に示すI/Oプロセッサ21がROM22に格納されているプログラムを実行することにより実現されるものとする。
また、ブロックデバイス制御装置20は、ルーティングテーブル231、エクステント構成テーブル232、キャッシュメモリ233、統計情報格納部234及びキャッシュ・ディレクトリ235を含む。本実施形態において、これらは、図3に示すメモリ23に格納される。
ホストI/F制御部211は、図3に示すホストI/F25を制御する。ホストI/F制御部211は、ホストI/F25を制御することによって、例えばホスト10または他のブロックデバイス制御装置20との間でSCSIプロトコルに従ってデータ送受信を行う。ホストI/F制御部211は、受信されたSCSIコマンドがリード要求であれば、当該リード要求に含まれるLUN、ブロックアドレス、サイズ及びイニシエータ情報を、I/O処理部217に渡す。一方、ホストI/F制御部211は、受信されたSCSIコマンドがライト要求であれば、当該ライト要求に含まれるLUN、ブロックアドレス、サイズ、イニシエータ情報及びライトデータを、I/O処理部217に渡す。また、ホストI/F制御部211は、受信されたSCSIコマンドが例えばストレージ・クラスタ・システム内で独自に定義された通信用SCSIコマンドであれば、当該SCSIコマンドに含まれるイニシエータ情報及び通信データを、通信部218に渡す。
ディスクI/F制御部212は、図3に示すディスクI/F26を制御する。ディスクI/F制御部212は、ディスクI/F26を制御することによって、例えばブロックデバイス制御装置20によって管理されているディスクアレイに対するリード/ライト処理を実行する。
構成情報管理部213は、ルーティングテーブル231及びエクステント構成テーブル232を管理する。このルーティングテーブル231及びエクステント構成テーブル232は、図3に示すメモリ23内に格納されている。
ルーティングテーブル231は、ストレージ・クラスタ・システムに含まれる各ブロックデバイス制御装置20が提供しているエクステント毎のエントリによって構成されている。ルーティングテーブル231には、各エクステント(を示す識別子)と当該エクステントを提供しているブロックデバイス制御装置(マスタ・ブロックデバイス制御装置)が、ホスト10へ提供するLUのLUNと範囲に対応付けて保持されている。ルーティングテーブル231には、ストレージ・クラスタ・システム内がホスト10に対して提供する全てのLUを構成する全てのエクステントに関する情報が保持される。
このルーティングテーブル231は、ストレージ・クラスタ・システムに含まれる全てのブロックデバイス制御装置20によって共有される。つまり、ストレージ・クラスタ・システム内のブロックデバイス制御装置20の各々のメモリ23には、同一のルーティングテーブル231が格納されている。ルーティングテーブル231を変更する場合は、通信部218を介して他のブロックデバイス制御装置20に対して当該変更が通知される。このように、変更が通知されると、当該変更が通知されたブロックデバイス制御装置20に含まれる構成情報管理部213によって、当該変更がルーティングテーブル231に反映される。
エクステント構成テーブル232には、ルーティングテーブル231とは異なり、当該エクステント構成テーブル232を含むブロックデバイス制御装置20によって提供されるエクステントに関する情報が保持される。
キャッシュメモリ管理部214は、ブロックデバイス制御装置20によって管理されているLU(エクステント)のデータをキャッシュ(格納)する領域(キャッシュメモリ233)を管理する。このキャッシュメモリ233はブロックデバイス制御装置に含まれるメモリ23の一部であり、さらに細分化して例えばLUN及びブロックアドレスと関連付けられる。細分化されたキャッシュメモリ233の領域(以下、キャッシュブロックと表記)には、セクタ単位でキャッシュされたデータ(キャッシュデータ)が格納され、排他的使用権の有無が管理される。
キャッシュメモリ管理部214は、各ブロックデバイス制御装置20内のキャッシュメモリ233の一貫性を保証する処理(以下、コヒーレント処理と表記)を実行する。キャッシュメモリ管理部214は、通信部218を介して他のブロックデバイス制御装置20に対してLUN、ブロックアドレス、サイズを送受信する。受信側のキャッシュメモリ管理部214は、例えばキャッシュメモリ233に格納されているキャッシュデータを破棄することにより、コヒーレント処理を実行する。
上記したキャッシュメモリ233は、例えば当該キャッシュメモリ233を含むブロックデバイス制御装置20がスレーブ・ブロックデバイス制御装置として動作するエクステントに対応するキャッシュブロックに関して、リード・キャッシュ/ライト・スルー・キャッシュとして使用される。一方、キャッシュメモリ233を含むブロックデバイス制御装置20がマスタ・ブロックデバイス制御装置として動作するエクステントに対応するキャッシュブロックに関して、リード・キャッシュ/ライト・バック・キャッシュとして使用される。なお、キャッシュメモリ233内のキャッシュブロックが枯渇した場合等には、例えばキャッシュブロックの選定/破棄処理が実行され、効率的にデータがキャッシュされる。
統計情報管理部215は、統計情報格納部234に格納されている統計情報を管理する。統計情報は、ブロックデバイス制御装置20によって提供されるエクステントに関するI/O処理(アクセス範囲)の統計を示す。統計情報は、例えばエクステント単位での過去数回分のI/O情報(リード/ライト種別、エクステント内オフセットアドレス及びサイズ等)履歴及びエクステント内の任意の領域のリード/ライトの割合を含む。
キャッシュ・ディレクトリ管理部216は、ホスト10からのLUに対するアクセス要求に応じてアクセスされる(指定される)当該LUへのアクセス範囲を記録するキャッシュ・ディレクトリ235を構成する。このキャッシュ・ディレクトリ235は、例えばメモリ23上に予め静的に確保した配列状のメモリ領域の要素の幾つかが連結することで構成される。
キャッシュ・ディレクトリ管理部216は、ホスト10からのアクセス要求を中継したスレーブ・ブロックデバイス制御装置によって送信されたアクセス要求によって指定されるLUへのアクセス範囲をキャッシュ・ディレクトリ235に対して記録(登録)する。このキャッシュ・ディレクトリ235は、例えばアクセス要求に応じてアクセスされるエクステント及び当該アクセス要求を送信したスレーブ・ブロックデバイス制御装置(イニシエータ)単位で管理される。
また、キャッシュ・ディレクトリ管理部215は、統計情報格納部234に格納されている統計情報を参照して、例えばアクセス範囲をキャッシュ・ディレクトリ235に記録する際の記録粒度の変更等の管理を行う。
I/O処理部217は、上記したルーティングテーブル231、エクステント構成テーブル232、キャッシュメモリ233、統計情報格納部234及びキャッシュ・ディレクトリ235を参照して、ホストI/F制御部211によって受信されたアクセス要求に対する処理を実行する。このとき、I/O処理部217は、構成情報管理部213、キャッシュメモリ管理部214、統計情報管理部215及びキャッシュ・ディレクトリ管理部216を介して処理を実行する。I/O処理部217は、例えばホストI/F制御部211によって受信されたアクセス要求に応じて、当該I/O処理部217を含むブロックデバイス制御装置20がマスタ・ブロックデバイス制御装置またはスレーブ・ブロックデバイス制御装置として動作することを決定する。
通信部218は、ホストI/F制御部211を介して、SCSIプロトコルに従ってデータを送受信し、他のブロックデバイス制御装置20との通信を実現する。
図5は、ルーティングテーブル231のデータ構造の一例を示す。上記したようにルーティングテーブル231には、ストレージ・クラスタ・システムがホスト10に提供する全てのLUを構成する全てのエクステントに関する情報が保持される。図5に示すように、ルーティングテーブル231には、LUN、ブロックアドレス範囲、アドレス情報及びエクステント識別子が対応付けて保持される。
アドレス情報は、LUN及びブロックアドレス範囲にマップされたエクステントを管理するブロックデバイス制御装置20(マスタ・ブロックデバイス制御装置)のアドレスを示す。アドレス情報は、ホストI/F制御部211を介したデータ送受信に必要となるアドレスで、ホスト10とブロックデバイス制御装置20間を接続するインタコネクトがFCの場合はWWN(World Wide Name)、iSCSIの場合はIP(Internet Protocol)アドレスとなる。エクステント識別子は、当該エクステントを管理するマスタ・ブロックデバイス制御装置内でエクステントを一意に識別するための識別子である。
図5に示す例では、LUN「0」、ブロックアドレス「0〜1024k」、アドレス情報「アドレス情報1」及びエクステント識別子「0」が対応付けて保持されている。これは、LUN「0」及びブロックアドレス「0〜1024k」によって特定される領域は、アドレス情報1によって示されるアドレスが割り当てられているブロックデバイス制御装置20においてエクステント識別子「0」によって識別されるエクステントにマップされていることを示す。
また、図5に示す例では、LUN「0」、ブロックアドレス範囲「1024k〜2048k」、アドレス情報「アドレス情報1」及びエクステント識別子「1」が対応付けて保持されている。これは、LUN「0」及びブロックアドレス範囲「1024k〜2048k」によって特定される領域が、アドレス情報1によって示されるアドレスが割り当てられているブロックデバイス制御装置20においてエクステント識別子「1」によって識別されるエクステントにマップされていることを示す。
同様に、LUN「0」、ブロックアドレス範囲「2048k〜3072k」、アドレス情報「アドレス情報2」及びエクステント識別子「0」が対応付けて保持されている。これは、LUN「0」及びブロックアドレス範囲「2048k〜3072k」によって特定される領域が、アドレス情報2によって示されるアドレスが割り当てられているブロックデバイス制御装置20においてエクステント識別子「0」によって識別されるエクステントにマップされていることを示す。
図6は、エクステント構成テーブル232のデータ構造の一例を示す。上記したようにエクステント構成テーブル232には、当該エクステント構成テーブル232を含むブロックデバイス制御装置20によって提供されているエクステントに関する情報が保持される。図6に示すように、エクステント構成テーブル232には、エクステント識別子、ディスクアレイ情報及びオフセットアドレスが対応付けて保持されている。
エクステント識別子は、エクステント構成テーブル232を含むブロックデバイス制御装置20によって管理されるエクステントを識別する識別子である。ディスクアレイ情報は、当該ディスクアレイ情報に対応付けられているエクステント識別子によって識別されるエクステントに対するディスクアレイを構成するための情報である。ディスクアレイ情報は、例えばディスクアレイの識別子や構成するRAIDの種類等を含む。オフセットアドレスは、エクステント識別子によって識別されるエクステントのディスクアレイ内における物理的な位置(アドレス)を示す。
図6に示す例では、エクステント識別子「0」、ディスクアレイ情報「ディスクアレイ情報1」及びオフセットアドレス「オフセットアドレス1」が対応付けて保持されている。また、エクステント識別子「1」、ディスクアレイ情報「ディスクアレイ情報2」及びオフセットアドレス「オフセットアドレス2」が対応付けて保持されている。
次に、図7を参照して、キャッシュ・ディレクトリ235のデータ構造について説明する。キャッシュ・ディレクトリ235には、当該キャッシュ・ディレクトリ235を含むブロックデバイス制御装置20(マスタ・ブロックデバイス制御装置)によって管理されるエクステントに対する、スレーブ・ブロックデバイス制御装置からのアクセス要求によって指定されるアクセス範囲が登録される。キャッシュ・ディレクトリ235は、上記したようにエクステント及びスレーブ・ブロックデバイス制御装置単位で管理され、例えばあるスレーブ・ブロックデバイス制御装置からあるエクステントに対するアクセスと、同一エクステントに対する別のスレーブ・ブロックデバイス制御装置からのアクセスは、分別して登録される。以下では、単一のエクステントに対する単一のスレーブ・ブロックデバイス制御装置からのアクセスを登録するためのデータ構造について説明する。
キャッシュ・ディレクトリ235は、当該キャッシュ・ディレクトリ235を含むブロックデバイス制御装置20によって管理されるエクステント内の部分的なデータ領域へのアクセスの有無を示すビットマップ(ディレクトリ・エントリ)の集合である。キャッシュ・ディレクトリ235は、複数のディレクトリ・エントリが例えば基数木(Radix Tree)と呼ばれるデータ構造により管理される。ここでは、例えばエクステントのサイズを1Mセクタ、1ディレクトリ・エントリのサイズを4バイトとし、当該1ディレクトリ・エントリに対応するデータ領域のサイズを32セクタであるものとして説明する。また、1セクタあたりの容量は、512バイトであるものとする。
キャッシュ・ディレクトリ235は、例えば根301、2つの節302及び葉303による4つの層で構成される。便宜的に根301が属する階層を第1層と称する。以下、根301から葉303に向かって、第2層、第3層、第4層と称する。
キャッシュ・ディレクトリ235を構成するディレクトリ・エントリ304は、例えば32ビットのビットマップである。このディレクトリ・エントリ304の各ビットは、上記した1ディレクトリ・エントリに対応するデータ領域サイズである32セクタの各々に該当する。つまり、ディレクトリ・エントリ304において、ビットが「0」のときは該当する領域(1セクタ)にアクセスがないことを示す。一方、ビットが「1」のときは該当する領域(1セクタ)にアクセスがあったことを示す。
第4層の葉303は、要素数32のディレクトリ・エントリ304の配列で構成される。第2層の節302及び第3層の節302は、要素数32のスロット状態フラグ305の配列及び当該スロット状態フラグ305の各々に対応する要素数32のスロット306で構成される。また、第1層の根301は、1組のスロット状態フラグ305及びスロット306で構成される。
スロット状態フラグ305は、当該スロット状態フラグ305に対応するスロット(同一インデックスのスロット)306の状態を示す。このスロットの状態には、ポインタモード及びビットマップモードが存在する。スロット状態フラグ305が「0」のときは、当該スロット状態フラグ305に対応するスロット306が、ポインタモードで使用されていることを示す。一方、スロット状態フラグ305が「1」のときは、当該スロット状態フラグ305に対応するスロット306が、ビットマップモードで使用されていることを示す。
スロット状態フラグ305が「0」、つまり、ポインタモードで使用されているスロット306には、当該スロット306を構成要素とする根301または節302の層より下位の層の節302または葉303へのポインタが格納される。図7に示すように、例えば第1層の根301を構成するスロット306がポインタモードで使用されている場合には、当該スロット306には例えば第2層の節302を示すポインタが格納される。また、例えば第2層の節302を構成するスロット306(要素数32のスロット306のうちの1つ)がポインタモードで使用されている場合には、当該スロット306には例えば第3層の節302を示すポインタが格納される。同様に、例えば第3層の節302を構成するスロット306(要素数32のスロット306のうちの1つ)がポインタモードで使用されている場合には、当該スロット306には例えば第4層の葉303を示すポインタが格納される。
ここで、上記したようにエクステントのサイズは1M(2^20)セクタであり、エクステント内のオフセット値は、20ビットで表現される。このオフセット値により、エクステント内におけるセクタが特定される。
ここで、図7に示すように、例えばエクステント内のオフセット値が、「0x0FC22」である場合を想定する。なお、オフセット値「0x0FC22」の「0FC22」は、16進数表記である。この「0FC22」を2進数表記にすると、「00001111110000100010」となり、20ビットで表現される。
上記した第1層の根301または第2層の節302、第3層の節302に含まれるポインタモード(スロット状態フラグ305が「0」)のスロット306によって、下位層の節302や葉303が参照される。エクステント内のあるセクタに該当するディレクトリ・エントリ304は、上記したオフセット値から特定される。上記したようにオフセット値を2進数表記した場合の、ビット15〜19の値(上記したオフセット値では、「00001」)が、第2層の節302のスロット配列のインデックスとして参照される。また、ビット10〜14の値(上記したオフセット値では、「11111」)が、第3層の節302のスロット配列のインデックスとして参照される。また、ビット5〜9(上記したオフセット値では、「00001」)が、第4層の葉303のディレクトリ・エントリ配列のインデックスとして参照される。そのディレクトリ・エントリ304に対してオフセット値のビット0から4(上記したオフセット値では、「00010」)が、インデックスとして参照される。
図7に示す例では、例えばオフセット値「0x0FC22(2進数表記では、0b00001111110000100010)」によって特定される1セクタに相当するディレクトリ・エントリ304は、まず、当該オフセット値のビット15〜19の値が「00001」であるため、第2層の節302のスロット配列のインデックス1が参照される。インデックス1のスロット306がポインタモードである場合には、当該スロット306に格納されているポインタによって示される第3層の節302が特定される。
次に、オフセット値のビット10〜14の値が「11111」であるため、特定された第3層の節302のスロット配列のインデックス31が参照される。インデックス31のスロット306がポインタモードである場合には、当該スロット306に格納されているポインタによって示される第4層の葉303が特定される。
次に、オフセット値のビット5〜9の値が「00001」であるため、特定された第4層の葉303のディレクトリ・エントリ配列のインデックス1が参照される。これにより、インデックス1のディレクトリ・エントリ304が特定される。そして、オフセット値のビット0〜4の値が「00010」であるため、特定されたディレクトリ・エントリ304のインデックス2が参照される。これにより、ディレクトリ・エントリ304のインデックス2のビットが、上記したオフセット値「0x0FC22」によって特定される1セクタに相当するビットである。つまり、このビットが「0」であれば、オフセット値「0x0FC22」によって特定されるセクタにアクセスがないことを示す。一方、このビットが「1」であれば、オフセット値「0x0FC22」によって特定される1セクタにアクセスがあったことを示す。
また、根301または節302において、ビットマップモード(スロット状態フラグが「1」)で使用されているスロット306は、上記したディレクトリ・エントリ304として使用される。このとき、このディレクトリ・エントリ304に対応するデータ領域のサイズは、上記した葉303を構成するディレクトリ・エントリ304とは異なり、32セクタ(1ビットあたり1セクタ)ではない。この場合では、スロット306が仮にポインタモードで使用された場合におけるスロット306を頂点とする部分木が管理する範囲(以下、スロット・セクタ範囲と表記)のセクタに相当する。
例えば、エクステント内のオフセット値「0x0F800(2進数表記では、0b00001111100000000000)」に該当する第3層の節に属するスロット306がビットマップモードである場合を想定する。この場合では、オフセット値「0x0F800〜0x0FBFF(2進数表記では、0b00001111100000000000〜0b00001111101111111111)」の範囲のセクタに相当するディレクトリ・エントリ304として使用される。つまり、32ビットのディレクトリ・エントリ304で、スロット・セクタ範囲のサイズが1024(2進数表記で、下位10ビットの0000000000〜1111111111)セクタに相当するため、1ビットあたり32セクタのディレクトリ・エントリ304として使用される。
また、例えば根のスロット306がビットマップモードであれば、そのディレクトリ・エントリ304は、オフセット値「0x00000〜0xFFFFF(2進数表記では、0b00000000000000000000〜0b11111111111111111111)」のスロット・セクタ範囲に相当するディレクトリ・エントリ304(1ビットあたり32768セクタ)として使用される。
なお、アクセス範囲が全く登録されていない部分木に関するデータ構造は存在する必要はない。よって、必要に応じてメモリ23の領域を割り当てる、または不要なデータ構造のメモリ23の領域を解放するといった構成であっても構わない。また、キャッシュ・ディレクトリ235のデータ構造において階層数は固定であるものとして説明したが、動的に伸縮させて部分木のみを管理する構成であってもよい。
次に、図8に示すフローチャートを参照して、ブロックデバイス制御装置20におけるリード要求受信処理について説明する。リード要求には、当該リード要求に応じてアクセスされるLUを識別するLUN、当該LUのブロックアドレス及び当該リード要求に応じてアクセスされるデータのサイズが含まれる。また、リード要求には、当該リード要求を送信したイニシエータ(例えばホスト10またはブロックデバイス制御装置20)のアドレスが含まれる。
まず、ブロックデバイス制御装置20に含まれるホストI/F制御部211は、ホストI/F25を制御することによって、リード要求を受信する。ホストI/F制御部211は、受信されたリード要求をI/O処理部217に渡す(ステップS1)。 I/O処理部217は、渡されたリード要求に含まれるLUN、ブロックアドレス及びサイズに基づいて指定される範囲(以下、イニシエータ・リード要求領域と表記)に該当するキャッシュブロックをキャッシュメモリ管理部214に対して問い合わせ、キャッシュメモリ管理部214は、問い合わせに応じてキャッシュメモリ233からキャッシュブロックを特定する(ステップS2)。
キャッシュメモリ管理部214は、特定されたキャッシュブロック内のイニシエータ・リード要求領域の排他的使用権を獲得する(ステップS3)。
I/O処理部217は、構成情報管理部213を介してルーティングテーブル231を参照し、イニシエータ・リード要求領域に該当する全てのエクステントを特定して、それぞれに対して以下のステップS4〜S7、S10を実行する。
I/O処理部217は、ルーティングテーブル231を参照して、イニシエータ・リード要求領域内の未処理の領域と重なる一つのエクステントを特定する(ステップS4)。I/O処理部217は、特定されたエクステントを管理するブロックデバイス制御装置20(マスタ・ブロックデバイス制御装置)を特定する。
当該エクステントのマスタ・ブロックデバイス制御装置がリード要求を受信したブロックデバイス制御装置20(自装置)であるかどうか判定し(ステップS5)、自装置であった場合(ステップS5のYES)はマスタ・ブロックデバイス制御装置におけるリード要求受信処理が実行され(ステップS10)、自装置でない場合(ステップS5のNO)にはスレーブ・ブロックデバイス制御装置におけるリード要求処理が実行される(ステップS6)。なお、ステップS6及びS10の処理は何れもイニシエータ・リード要求領域と当該エクステントのブロックアドレス範囲が重なる領域(以下、エクステント・リード要求領域と表記)に関して処理が実行される。
イニシエータ・リード要求領域における全ての領域の処理を完了したかどうか判定し(ステップS7)、処理が完了していなければ(ステップS7のNO)未処理の領域に関してステップS4から実行する。
ホストI/F制御部211は、受信されたリードデータ及びステータスを、イニシエータ(例えばホスト10)に対して転送する(ステップS8)。
ホストI/F制御部211によってデータ及びステータスが転送されると、キャッシュメモリ管理部214は、当該キャッシュブロック内のイニシエータ・リード要求領域の排他的使用権を放棄して処理を完了する(ステップS9)。
次に図9に示すフローチャートを参照して、スレーブ・ブロックデバイス制御装置におけるリード要求受信処理(図8に示すステップS6)の処理手順について説明する。
キャッシュメモリ管理部214は、エクステント・リード要求領域に対応するデータ(キャッシュデータ)が、上記した図8に示すステップS2で特定されたキャッシュブロック内に存在するか否かの判定を行う。つまり、キャッシュメモリ管理部214は、キャッシュヒットの判定を行う(ステップS11)。
キャッシュデータが当該キャッシュブロックに存在しないと判定された場合(ステップS11のNO)、I/O処理部217は、ホストI/F制御部211を介して、エクステント・リード要求領域に関するリード要求を当該エクステントのマスタ・ブロックデバイス制御装置に対して転送する(ステップS12)。なお、マスタ・ブロックデバイス制御装置のアドレスを示すアドレス情報は、上記したようにルーティングテーブル231に保持されている。
その後、マスタ・ブロックデバイス制御装置からリードデータとステータスが転送されるまで待機する(ステップS13)。キャッシュメモリ管理部214は、受信されたリードデータを、ステップS2において特定されたキャッシュブロックに格納する。つまり、キャッシュメモリ管理部214は、リードデータをキャッシュデータとしてキャッシュする(ステップS14)。
一方、ステップS11においてエクステント・リード要求領域に対応するキャッシュデータが当該キャッシュブロックに存在すると判定された場合、I/O処理部217は、エクステント・リード要求領域に関する情報をマスタ・ブロックデバイス制御装置へ通知する。これにより、I/O処理部217は、マスタ・ブロックデバイス制御装置に対して統計情報の更新を要求する(ステップS15)。マスタ・ブロックデバイス制御装置では、通知されたエクステント・リード要求領域に関する情報に基づいて、当該マスタ・ブロックデバイス制御装置に含まれる統計情報格納部234が更新される。
図10に示すフローチャートを参照して、マスタ・ブロックデバイス制御装置におけるリード要求受信処理(図8に示すステップS10)の処理手順について説明する。
I/O処理部217は、エクステント・リード要求領域に関して統計情報管理部215を介して統計情報の更新処理を実行する(ステップS21)。この統計情報の更新処理の詳細については後述する。
キャッシュメモリ管理部214は、エクステント・リード要求領域に対応するデータ(キャッシュデータ)が、ステップS2で特定されたキャッシュブロックに存在するか否かの判定を行う。つまり、キャッシュメモリ管理部214は、キャッシュヒットの判定を行う(ステップS22)。
キャッシュデータが当該キャッシュブロックに存在しないと判定された場合(ステップS22のNO)、I/O処理部217はディスクI/F制御部212を介して、自装置(マスタ・ブロックデバイス制御装置)の配下にあるディスクアレイに対してリード要求を発行する(ステップS23)。このとき、構成情報管理部213を介してエクステント構成テーブル232を参照することにより、特定されたエクステントに対するI/O情報は、ディスアレイに対するI/O情報に変換される。
その後、ディスクアレイに対するリード要求に応じたリード処理が完了するまで待機する(ステップS24)。
リード処理が完了されると、キャッシュメモリ管理部214は、ディスクアレイからリードされたデータ(リードデータ)を、ステップS2において特定されたキャッシュブロックに格納する。つまり、キャッシュメモリ管理部214は、リードデータをキャッシュデータとしてキャッシュする(ステップS25)。
I/O処理部217は、受信されたリード要求に含まれているイニシエータのアドレスに基づいて、当該イニシエータがストレージ・クラスタ・システム内のスレーブ・ブロックデバイス制御装置であるか否かを判定する(ステップS26)。
イニシエータがスレーブ・ブロックデバイス制御装置であると判定された場合(ステップS26のYES)、キャッシュ・ディレクトリ管理部216は、エクステント及びスレーブ・ブロックデバイス制御装置単位で管理されているキャッシュ・ディレクトリ235に対して、当該イニシエータからの当該エクステント・リード要求領域に対するアクセスを記録するためにアクセス範囲登録処理を実行する(ステップS27)。キャッシュ・ディレクトリ管理部216は、例えば統計情報格納部234に格納されている統計情報に基づいて、アクセス範囲登録処理を実行する。
一方、ステップS22においてエクステント・リード要求領域に対応するキャッシュデータが当該キャッシュブロックに存在すると判定された場合(ステップS22のYES)、ステップS26から実行する。
また、ステップS26においてイニシエータがスレーブ・ブロックデバイス制御装置でない、つまり、例えばホスト10であると判定された場合(ステップS26のNO)、マスタ・ブロックデバイス制御装置におけるリード要求受信処理を終了する。
次に、図11に示すフローチャートを参照して、上記したアクセス範囲登録処理(図10に示すステップS27)の処理手順について詳細に説明する。なお、アクセス範囲登録処理においては、エクステント・リード要求領域を示すLU内のブロックアドレス、サイズはエクステント内のオフセットアドレス、サイズへと変換して実行される。
まず、キャッシュ・ディレクトリ管理部216は、当該イニシエータと当該エクステントに対応するキャッシュ・ディレクトリ235を選定し、構成する根301を特定する(ステップS31)。キャッシュ・ディレクトリ235は、上記したように例えば根301、2つの節302及び葉303の4つの層から構成される。この根301、2つの節302及び葉303の4つの層で使用するメモリ領域は、例えばブロックデバイス制御装置20内のメモリ23において予め静的に確保した配列状のメモリ領域の要素を動的に取捨することで確保または解放される。
キャッシュ・ディレクトリ管理部216は、特定された根301を構成するスロット306を対象スロット306とする。以降の処理は対象スロット306を変更しながら、エクステント・リード要求領域の未処理領域と対象スロット306を頂点とする部分木で管理される範囲(スロット・セクタ範囲)が重なる領域に関する登録処理を繰り返す。
キャッシュ・ディレクトリ管理部216は、対象スロット306が使用されているモードを交換(変更)するか否かを判定する(ステップS32)。つまり、例えば対象スロット306に対して使用されるモードがビットマップモードである場合には、当該対象スロット306に対して使用されるモードを例えばビットマップモードからポインタモードに交換するか否かが判定される。一方、例えば対象スロット306に対して使用されるモードがポインタモードである場合には、当該対象スロット306に対して使用されるモードを例えばポインタモードからビットマップモードに交換するか否かが判定される。
キャッシュ・ディレクトリ管理部216は、受信されたリード要求及びアクセス対象となるエクステントに対応する統計情報に基づいて判定処理を実行する。この統計情報は、マスタ・ブロックデバイス制御装置によって管理されるエクステント毎に、当該マスタ・ブロックデバイス制御装置に含まれる統計情報管理部215によって管理されている。また、統計情報は、例えばエクステント単位での過去数回分のI/O情報(リード/ライト種別、エクステント内オフセットアドレス及びサイズ等)履歴及びキャッシュ・ディレクトリ235の全てのスロット306単位のスロット・セクタ範囲に対するリード/ライトの割合を含む。
上記したキャッシュ・ディレクトリ管理部216による対象スロット306に対して使用されるモードの交換についての判定処理の具体例について説明する。
まず、対象スロット306に対して使用されているモードがポインタモードである場合を想定する。この場合には、キャッシュ・ディレクトリ管理部216は、例えば統計情報に基づいて、対象スロット306のスロット・セクタ範囲に対するリードの割合が予め定められた閾値を超えている場合は、当該対象スロット306のモードをポインタモードからビットマップモードに交換すると判定する。
一方、対象スロット306に対して使用されているモードがビットマップモードである場合を想定する。この場合には、キャッシュ・ディレクトリ管理部216は、キャッシュ・ディレクトリ235に登録されるエクステント・リード要求領域(アクセス範囲)と対象スロット306のスロット・セクタ範囲が重なる領域を記録するために記録粒度が適切でない(正確に記録できない場合)、例えば対象スロット306のディレクトリ・エントリ304の1ビットに相当するデータ領域のサイズ(当該スロット・セクタ範囲のサイズの32分の1)の整数倍とならない場合には、対象スロット306をビットマップモードからポインタモードに交換すると判定する。記録粒度とは、上記した図6で説明したようなディレクトリ・エントリにおける1ビットあたりのセクタ数である。
なお、対象スロット306に対して使用されるモードがビットマップモードからポインタモードに交換されると、当該対象スロット306より下位層のデータ構造のためにキャッシュ・ディレクトリ235に必要な領域が増加する。つまり、ビットマップモードからポインタモードに交換されることにより対象スロット306より下位の層に節302(または葉303)が作成されるため、当該作成された節302(または葉303)のための領域を確保する必要があるため、キャッシュ・ディレクトリ235に必要な領域が増加する。このため、上記したようにキャッシュ・ディレクトリ235に登録されるエクステント・リード要求領域と対象スロット306のスロット・セクタ範囲が重なる領域を正確に記録するために記録粒度が適切でないときであっても、例えばビットマップモードからポインタモードに交換することによって増加するメモリ領域を、メモリ23内に確保できない場合には交換しないと判定される。
対象スロット306に対して使用されているモードをビットマップモードからポインタモード(または、ポインタモードからビットマップモード)に交換すると判定された場合(ステップS32のYES)、キャッシュ・ディレクトリ管理部216は、対象スロット306に対して使用されるモードの交換処理を実行する(ステップS33)。このとき、キャッシュ・ディレクトリ管理部216は、対象スロット306に対して使用されるモードの交換に応じて、対象スロット306に対応するスロット状態フラグ305を交換(変更)する。
つまり、キャッシュ・ディレクトリ管理部216は、対象スロット306に対して使用されるモードを交換することにより、対象スロット306を頂点とする部分木及び対象スロット306のスロット・セクタ範囲を包括するデータ領域を示すディレクトリ・エントリ304を交換する。これにより、対象スロット306が属する層より下位層のデータ構造が変わるため、例えばエクステント・リード要求領域(アクセス範囲)をキャッシュ・ディレクトリ235に記録する際、対象スロット306のスロット・セクタ範囲と重なる範囲の記録粒度を変更することができる。
次に、キャッシュ・ディレクトリ管理部216は、対象スロット306に対して使用されるモードがポインタモードであるか否かを判定する(ステップS34)。この場合、例えば上記したステップS33において対象スロット306に対して使用されるモードが交換されている場合には、当該交換後のモードについて判定される。キャッシュ・ディレクトリ管理部216は、対象スロット306に対応するスロット状態フラグ305を参照して判定処理を実行する。
対象スロット306に対して使用されるモードがポインタモードであると判定された場合(ステップS34のYES)、キャッシュ・ディレクトリ管理部216は、当該対象スロット306に格納されているポインタの参照先が葉303であるか否かを判定する(ステップS35)。
対象スロット306に格納されているポインタの参照先が葉303でないと判定された場合(ステップS35のNO)、キャッシュ・ディレクトリ管理部216は、当該ポインタの参照先となる節302に属するスロット配列(要素数32)のうち、未処理のエクステント・リード要求領域と重なるスロット・セクタ範囲を持つスロット306を選定する(ステップS36)。
ステップS36の処理が実行されると、選定されたスロット306を対象スロット306として上記したステップS32の処理が実行される。
一方、ステップS32において対象スロット306に対して使用されるモードを交換しないと判定された場合、ステップS34の処理が実行される。
また、ステップS34において対象スロット306に対して使用されるモードがポインタモードでない、つまり、ビットマップモードであると判定された場合、当該対象スロット306はディレクトリ・エントリとして使用されるので、キャッシュ・ディレクトリ管理部216は、当該ディレクトリ・エントリにおいてエクステント・リード要求領域に含まれる領域を示す全てのビットに「1」を設定(登録)する(ステップS38)。これにより、エクステント・リード要求領域の一部あるいは全部に対してアクセスがあったことがキャッシュ・ディレクトリ235に登録される。
ステップS38の処理が実行されると、キャッシュ・ディレクトリ管理部216は、エクステント・リード要求領域(アクセス範囲)の全てについてキャッシュ・ディレクトリ235に対してアクセス範囲登録処理が完了したか否かを判定する(ステップS39)。
エクステント・リード要求領域の全てについて登録処理が完了していないと判定された場合(ステップS39のNO)、未処理のエクステント・リード要求領域に関してステップS31の処理が実行される。一方、エクステント・リード要求領域の全てについて登録処理が完了したと判定された場合(ステップS39のYES)、処理は終了される。
また、ステップS35において対象スロット306に格納されているポインタの参照先が葉303であると判定された場合(ステップS35のYES)、キャッシュ・ディレクトリ管理部216は当該葉303を構成する要素数32のディレクトリ・エントリにおいて、未処理のエクステント・リード要求領域と重なる領域を管理するディレクトリ・エントリを選定する(ステップS37)。当該ディレクトリ・エントリに対してステップS38の処理が実行される。
ここで、図12及び図13を参照して、対象スロット306に対して使用されるモードの交換処理について具体的に説明する。
図12は、例えば第1層の根301または第2層の節302を構成する対象スロット306に対して使用されるモードの交換処理について示す。ここでは、対象スロット306は、根301を構成するスロットであるものとして説明する。
例えば対象スロット306に対して使用されているモードがビットマップモード(スロット状態フラグが「1」)である場合を想定する。この場合、図10に示すように、ビットマップモードで使用される対象スロット306の値が「0xC0000002」であるものとする。この「0xC0000002」のうちの「C0000002」は16進数表記であり、これを2進数表記した場合には「11000000000000000000000000000010」となり、32ビットのビットマップを示している。つまり、この対象スロット306においては、インデックス1、30及び31のビットに相当する領域へのアクセスがあったことが登録されている。
この対象スロット306に対して使用されているモードを、ビットマップモードからポインタモードに交換する場合を想定する。この場合、対象スロット306には、当該対象スロット306が属する根301の下位層となる節302を示すポインタが格納される。この節302は、要素数32のスロット306から構成される。
図12に示すように、ビットマップモードからポインタモードに交換された場合、節302を構成する要素数32のスロット306は、例えば全てビットマップモード(スロット状態フラグが「1」)とする。また、節302を構成する要素数32のスロット306のうち、ビットマップモード時にビットが「1」であったインデックス(ここでは、インデックス1、30及び31)に相当するスロット306の値は、「0xffffffff」とする。この「0xffffffff」のうち、「ffffffff」は16進数表記であり、これを2進数表記にすると「11111111111111111111111111111111(32ビット)」となる。つまり、ビットマップモードでは、1ビットでアクセスがあったことを示していた領域を、ポインタモードでは、32ビットで同じ領域について示している。これにより、同じ領域において、ビットマップモードからポインタモードに交換された場合でも記録範囲の正確性を損なうことなく記録粒度が変更される。
同様に、節302を構成する要素数32のスロット306のうち、ビットマップモード時にビットが「0」であったインデックス(ここでは、インデックス1、30及び31以外)に相当するスロット306の値は、「0x00000000」とする。この「0x00000000」のうち、「00000000」は16進数表記であり、これを2進数表記にすると「00000000000000000000000000000000(32ビット)」となる。つまり、ビットマップモードでは、1ビットでアクセスがないことを示していた領域を、ポインタモードでは、32ビットで同じ領域について示している。これにより同じ領域において、ビットマップモードからポインタモードに交換された場合でも記録範囲の正確性を損なうことなく記録粒度が変更される。
つまり、ビットマップモードからポインタモードへの交換により、例えば対象スロット306は、ディレクトリ・エントリから下位層に節302を有する部分木(の頂点)に交換される。これにより、記録粒度は、ビットマップモードである場合と比較して細かく変更される。
ここで、例えば第n層(n=1または2)のビットマップモードのスロットは1ビットあたり「2^(5×(4−n))」セクタのディレクトリ・エントリである。例えば第1層の根301のビットマップモードのスロットでは、1ビットあたり32768セクタのディレクトリ・エントリとなる。一方、例えば第2層の節302のビットマップモードのスロットでは、1ビットあたり1024セクタのディレクトリ・エントリとなる。
例えば第1層の根301を構成するスロットに対して使用されるモードをビットマップモードからポインタモードに交換すると、第2層の節302のビットマップモードのスロットが作成される。この第2層の節302に属するスロットに対してアクセス範囲(リード要求領域)が記録されるため、上記したように記録粒度(1ビットあたりのセクタ数)が変更される。
一方、例えば対象スロット306に対して使用されているモードがポインタモード(スロット状態フラグが「0」)であって、当該対象スロット306に対して使用されているモードをポインタモードからビットマップモードに交換する場合を想定する。この場合は、上記したビットマップモードからポインタモードに交換される場合と逆の処理が実行される。
つまり、このポインタモードからビットマップモードへの交換により、例えば対象スロット306は、下位層に節302を有する部分木(の頂点)から当該部分木に相当する範囲を包括するデータ領域を示すディレクトリ・エントリに交換される。これにより、記録粒度は、ポインタモードである場合と比較して粗く変更される。
図13は、例えば第3層の節302を構成する対象スロット306に対して使用されるモードの交換処理について示す。
例えば対象スロット306に対して使用されているモードがビットマップモード(スロット状態フラグが「1」)である場合を想定する。この場合、図13に示すように、ビットマップモードで使用される対象スロット306の値が「0xC0000002」であるものとする。
この対象スロット306に対して使用されているモードを、ビットマップモードからポインタモードに交換する場合を想定する。この場合、対象スロット306には、当該対象スロット306が属する節302の下位層となる葉303を示すポインタが格納される。この葉303は、要素数32のディレクトリ・エントリ304から構成される。
葉303を構成する要素数32のディレクトリ・エントリ304のうち、ビットマップモード時にビットが「1」であったインデックス(ここでは、インデックス1、30及び31)に相当するディレクトリ・エントリの値は、「11111111111111111111111111111111(32ビット)」とする。つまり、図12において説明したのと同様に、ビットマップモードでは、1ビットでアクセスがあったことを示していた領域を、ポインタモードでは、32ビットで同じ領域について示している。これにより、同じ領域において、ビットマップモードからポインタモードに交換された場合でも記録範囲の正確性を損なうことなく記録粒度が変更される。
同様に、葉303を構成する要素数32のディレクトリ・エントリ304のうち、ビットマップモード時にビットが「0」であったインデックス(ここでは、インデックス1、30及び31以外)に相当するディレクトリ・エントリの値は、「00000000000000000000000000000000(32ビット)」とする。つまり、ビットマップモードでは、1ビットでアクセスがないことを示していた領域を、ポインタモードでは、32ビットで同じ領域について示している。これにより、同じ領域において、ビットマップモードからポインタモードに交換された場合でも記録範囲の正確性を損なうことなく記録粒度が変更される。
つまり、ビットマップモードからポインタモードへの交換により、例えば対象スロット306は、ディレクトリ・エントリから下位層に葉303を有する部分木(の頂点)に交換される。これにより、記録粒度は、ビットマップモードである場合と比較して細かく変更される。
例えば第3層の節302を構成するスロットに対して使用されるモードをビットマップモードからポインタモードに交換すると、第4層の葉303を構成するディレクトリ・エントリが作成される。この第4層の葉303に属するスロットに対してアクセス範囲(リード要求領域)が記録されるため、上記したように記録粒度(1ビットあたりのセクタ数)が変更される。
一方、例えば対象スロット306に対して使用されているモードがポインタモード(スロット状態フラグが「0」)であって、当該対象スロット306に対して使用されているモードをポインタモードからビットマップモードに交換する場合を想定する。この場合は、上記したビットマップモードからポインタモードに交換される場合と逆の処理が実行される。
つまり、このポインタモードからビットマップモードへの交換により、例えば対象スロット306は、下位層に葉303を有する部分木(の頂点)からスロット・セクタ範囲に相当する範囲を包括するデータ領域を示すディレクトリ・エントリに交換される。これにより、記録粒度はポインタモードである場合と比較して粗く変更される。
図12及び図13において説明したように、ポインタモードのスロットをビットマップモードのスロットに交換することで、下位層のデータ構造(例えば節302または葉303)のためのメモリ23の領域を節約することが可能である。しかしながら、このとき記録範囲の正確性が損なわれることがある。
例えばセクタ範囲「0x0FC00〜0x0FFFF」に相当する第3層の節302のポインタモードで使用されているスロット306がある場合を想定する。この場合、このスロット306に格納されているポインタの参照先の葉303のディレクトリ、エントリ配列のうち、インデックス0の要素が「0xffffffff」、インデックス1の要素が「0x1」、その他の要素が「0」であるとき、記録されたアクセス範囲は「0x0FC00〜0x0FC20」である。このとき、第3層の節302に属するスロット306に対して使用されているポインタモードをビットマップモードに交換して、スロット306の値を「0x3(アクセス範囲は「0x0FC00〜0x0FC3F」)」、あるいは0x1(アクセス範囲は「0x0FC00〜0x0FC1F」)」とすると、記録範囲の正確性が損なわれる。
次に、図14に示すフローチャートを参照して、ブロックデバイス制御装置20におけるライト要求受信処理について説明する。ライト要求には、当該ライト要求に応じてアクセスされるLU識別するLUN、当該LUのブロックアドレス、当該ライト要求に応じてアクセスされるデータのサイズ及び当該ライト要求に応じて書き込まれるデータ(ライトデータ)が含まれる。また、ライト要求には、当該ライト要求を送信したイニシエータ(例えばホスト10またはブロックデバイス制御装置20)のアドレスが含まれる。
まず、ブロックデバイス制御装置20に含まれるホストI/F制御部211は、ホストI/F25を制御することによって、ライト要求及びライトデータを受信する。ホストI/F制御部211は、受信されたライト要求をI/O処理部217に渡す(ステップS41)。I/O処理部217は、ホストI/F制御部211によって渡されたライト要求に含まれるLUN、ブロックアドレス及びサイズに基づいて指定される範囲(以下、イニシエータ・ライト要求領域と表記)に該当するキャッシュブロックをキャッシュメモリ管理部214に対して問い合わせ、キャッシュメモリ管理部214は、問い合わせに応じてキャッシュメモリ233からキャッシュブロックを特定する(ステップS42)。
キャッシュメモリ管理部214は、特定されたキャッシュブロック内のイニシエータ・ライト要求領域の排他的使用権を獲得し(ステップS43)、ステップS41で受信したライトデータを特定されたキャッシュブロックへ格納する(ステップS44)。これによりライトデータはキャッシュされる。なお、マスタ・ブロックデバイス制御装置のライト要求受信処理において、キャッシュブロックはライト・バック・キャッシュとして使用される。よって、ディスクアレイに対するライトデータのライト処理は、ここで説明する図14に示す処理とは非同期に実行される。
上記したリード要求受信処理と同様に、I/O処理部217は構成情報管理部213を介してルーティングテーブル231を参照し、イニシエータ・ライト要求領域に該当する全てのエクステントを特定して、それぞれに対して以下のステップS45〜S48、S51を実行する。
I/O処理部217は、ルーティングテーブル231を参照して、イニシエータ・ライト要求領域内の未処理の領域と重なる一つのエクステントを特定する(ステップS45)。I/O処理部217は、特定されたエクステントを管理するブロックデバイス制御装置20(マスタ・ブロックデバイス制御装置)を特定する。
当該エクステントのマスタ・ブロックデバイス制御装置がライト要求を受信したブロックデバイス制御装置20(自装置)であるかどうか判定し(ステップS46)、自装置であった場合(ステップS46のYES)はマスタ・ブロックデバイス制御装置におけるライト要求受信処理が実行され(ステップS51)、自装置でない場合(ステップS46のNO)にはスレーブ・ブロックデバイス制御装置におけるライト要求処理が実行される(ステップS47)。なお、ステップS51及びS47の処理は何れもイニシエータ・ライト要求領域と当該エクステントのブロックアドレス範囲が重なる領域(以下、エクステント・ライト要求領域と表記)に関して処理が実行される。
イニシエータ・ライト要求領域における全ての領域の処理を完了したかどうか判定し(ステップS48)、処理が完了していなければ(ステップS48のNO)未処理の領域に関してステップS45から実行する。
ホストI/F制御部211は、上記した処理に対するステータスを、イニシエータ(例えばホスト10)に対して転送する(ステップS49)。
ホストI/F制御部211によってステータスが転送されると、キャッシュメモリ管理部214は、当該キャッシュブロック内のイニシエータ・ライト要求領域の排他的使用権を放棄して処理を完了する(ステップS50)。
図15に示すフローチャートを参照して、スレーブ・ブロックデバイス制御装置におけるライト要求受信処理(図14に示すステップS47)の処理手順について説明する。
I/O処理部217は、ホストI/F制御部211を介して、エクステント・ライト要求領域に関するライト要求を当該エクステントのマスタ・ブロックデバイス制御装置に対して転送する(ステップS61)。なお、マスタ・ブロックデバイス制御装置のアドレスを示すアドレス情報は、上記したようにルーティングテーブル231に保持されている。
その後、マスタ・ブロックデバイス制御装置からステータスが転送されるまで待機する(ステップS62)。
マスタ・ブロックデバイス制御装置からステータスを受信すると、ステップS42で特定したキャッシュブロックにおけるエクステント・ライト要求領域に該当するキャッシュデータを破棄して(ステップS63)、処理を完了する。
図16に示すフローチャートを参照して、マスタ・ブロックデバイス制御装置におけるライト要求受信処理(図14に示すステップS51)の処理手順について説明する。
I/O処理部217は、エクステント・ライト要求領域に関して統計情報管理部215を介して統計情報の更新処理を実行する(ステップS71)。
次に、キャッシュ・ディレクトリ管理部216は、エクステント及びスレーブ・ブロックデバイス制御装置単位で管理されているキャッシュ・ディレクトリ235に対して、当該エクステント・ライト要求領域に対する全てのイニシエータからのアクセス記録を消去するためにアクセス範囲削除処理を実行する。つまり、当該エクステントに関する記録が存在する(過去にアクセスしたことがある)スレーブ・ブロックデバイス制御装置を選定し、当該エクステントと選定された全てのスレーブ・ブロックデバイス制御装置の組み合わせによって特定したキャッシュ・ディレクトリ235に対して、当該エクステント・ライト要求領域に関するアクセス範囲削除処理を実行する(ステップS72)。キャッシュ・ディレクトリ管理部216は、例えばライト要求または統計情報格納部234に格納されている統計情報に基づいて、アクセス範囲削除処理を実行する。
キャッシュメモリ管理部214は、ステップS72におけるアクセス範囲削除処理において、当該イニシエータを除いて、少なくとも1セクタの範囲を削除した全てのスレーブ・ブロックデバイス制御装置に対して、コヒーレント処理を実行する(ステップS73)。キャッシュメモリ管理部214は、通信部218を介してエクステント・ライト要求領域に応じたLUN、ブロックアドレス及びサイズを含む通信データを当該スレーブ・ブロックデバイス制御装置に対して送信する。マスタ・ブロックデバイス制御装置から送信されたデータを受信した他のブロックデバイス制御装置20は、通信部218から通信データがキャッシュメモリ管理部214に渡され、当該受信された通信データに含まれるLUN、ブロックアドレス及びサイズに対応するキャッシュブロックを特定し、当該キャッシュブロックに格納され、通信データで指定される範囲に対応するキャッシュデータを破棄する。これにより、コヒーレント処理が完了される。なお、コヒーレント処理により送信される通信データは、LUNと上記のアクセス範囲削除処理によって削除された範囲のみを含んでもいても良い。
次に、図17に示すフローチャートを参照して、上記したアクセス範囲削除処理(図16に示すステップS72)の処理手順について詳細に説明する。なお、アクセス範囲削除処理においては、エクステント・ライト要求領域を示すLU内のブロックアドレス、サイズはエクステント内のオフセットアドレス、サイズへと変換して実行される。
まず、キャッシュ・ディレクトリ管理部216は、当該スレーブ・ブロックデバイス制御装置と当該エクステントに対応するキャッシュ・ディレクトリ235を選定し、構成する根301を特定する(ステップS81)。キャッシュ・ディレクトリ235は、上記したように例えば根301、2つの節302及び葉303の4つの層から構成される。この根301、2つの節302及び葉303の4つの層で使用するメモリ領域は、例えばブロックデバイス制御装置20内のメモリ23において予め静的に確保した配列状のメモリ領域の要素を動的に取捨することで確保または解放される。
キャッシュ・ディレクトリ管理部216は、特定された根301を構成するスロット306を対象スロット306とする。以降の処理は対象スロット306を変更しながら、エクステント・ライト要求領域の未処理領域と対象スロット306を頂点とする部分木で管理される範囲(スロット・セクタ範囲)が重なる領域に関する削除処理を繰り返す。
キャッシュ・ディレクトリ管理部216は、対象スロット306が使用されているモードを交換(変更)するか否かを判定する(ステップS82)。つまり、例えば対象スロット306に対して使用されるモードがビットマップモードである場合には、当該対象スロット306に対して使用されるモードを例えばビットマップモードからポインタモードに交換するか否かが判定される。一方、例えば対象スロット306に対して使用されるモードがポインタモードである場合には、当該対象スロット306に対して使用されるモードを例えばポインタモードからビットマップモードに交換するか否かが判定される。
キャッシュ・ディレクトリ管理部216は、受信されたライト要求及びアクセス対象となるエクステントに対応する統計情報に基づいて判定処理を実行する。統計情報は、上記した図11で説明したアクセス範囲登録処理で使用される統計情報と同一である。
上記したキャッシュ・ディレクトリ管理部216による対象スロット306に対して使用されるモードの交換についての判定処理の具体例について説明する。
まず、対象スロット306に対して使用されているモードがポインタモードである場合を想定する。この場合には、キャッシュ・ディレクトリ管理部216は、例えば受信されたライト要求がシーケンシャルライトである場合(統計情報に含まれるエクステントに対する過去数回分のI/O情報から判断される)には、対象スロット306に対して使用されるモードをポインタモードからビットマップモードに交換すると判定する。
一方、対象スロット306に対して使用されているモードがビットマップモードである場合を想定する。この場合には、キャッシュ・ディレクトリ管理部216は、キャッシュ・ディレクトリ235に登録されるエクステント・ライト要求領域(アクセス範囲)と対象スロット306のスロット・セクタ範囲が重なる領域を記録するために記録粒度が適切でない(正確に記録できない場合)、例えば対象スロット306のディレクトリ・エントリ304の1ビットに相当するデータ領域のサイズ(当該スロット・セクタ範囲のサイズの32分の1)の整数倍とならない場合には、対象スロット306をビットマップモードからポインタモードに交換すると判定する。記録粒度とは、上記した図6で説明したようなディレクトリ・エントリにおける1ビットあたりのセクタ数である。
なお、対象スロット306に対して使用されるモードがビットマップモードからポインタモードに交換されると、上述したように、当該対象スロット306より下位層のデータ構造のためにキャッシュ・ディレクトリ235に必要な領域が増加する。このため、例えばエクステント・ライト要求領域と対象スロット306のスロット・セクタ範囲が重なる領域を正確に記録するために記録粒度が適切でないときであっても、例えばビットマップモードからポインタモードに交換することによって増加するメモリ領域をメモリ23内に確保できない場合には交換しないと判定される。
対象スロット306に対して使用されているモードをビットマップモードからポインタモード(または、ポインタモードからビットマップモード)に交換すると判定された場合(ステップS82のYES)、キャッシュ・ディレクトリ管理部216は、対象スロット306に対して使用されるモードの交換処理を実行する(ステップS83)。このとき、キャッシュ・ディレクトリ管理部216は、対象スロット306に対して使用されるモードの交換に応じて、対象スロット306に対応するスロット状態フラグ305を交換(変更)する。対象スロット306に対して使用されるモードを交換することにより、当該対象スロット306が属する層より下位層のデータ構造が変わるため、例えばエクステント・ライト要求領域(アクセス範囲)をキャッシュ・ディレクトリ235に記録する際、対象スロット306のスロット・セクタ範囲と重なる範囲の記録粒度を変更することができる。
次に、キャッシュ・ディレクトリ管理部216対象スロット306に対して使用されるモードがポインタモードであるか否かを判定する(ステップS84)。この場合、例えば上記したステップS83において対象スロットに対して使用されるモードが交換されている場合には、当該交換後のモードについて判定される。キャッシュ・ディレクトリ管理部216は、対象スロット306に対応するスロット状態フラグ305を参照して判定処理を実行する。
対象スロット306に対して使用されるモードがポインタモードであると判定された場合(ステップS84のYES)、キャッシュ・ディレクトリ管理部216は、当該対象スロット306に格納されているポインタの参照先が葉303であるか否かを判定する(ステップS85)。
対象スロット306に格納されているポインタの参照先が葉303でないと判定された場合(スロットS85のNO)、キャッシュ・ディレクトリ管理部216は、当該ポインタの参照先となる節302に属するスロット配列(要素数32)のうち、未処理のエクステント・ライト要求領域に重なるスロット・セクタ範囲を持つスロット306を選定する(ステップS86)。
ステップS86の処理が実行されると、選定されたスロット306を対象スロット306として上記したステップS82の処理が実行される。
一方、ステップS82において対象スロット306に対して使用されるモードがポインタモードでない、つまり、ビットマップモードであると判定された場合、当該対象スロット306はディレクトリ・エントリとして使用されるので、キャッシュ・ディレクトリ管理部216は、当該ディレクトリ・エントリにおいてエクステント・ライト要求領域に含まれる領域を示す全てのビットに「0」を設定(削除)する(ステップS88)。これにより、エクステント・ライト要求領域の一部あるいは全部に対してアクセスがないことがキャッシュ・ディレクトリ235に登録される。つまり、キャッシュ・ディレクトリ235にアクセスがあったとして記録(登録)されていたエクステント・ライト要求領域(アクセス範囲)の一部あるいは全部が削除される。
ステップS88の処理が実行されると、キャッシュ・ディレクトリ管理部216は、エクステント・ライト要求領域(アクセス範囲)の全てについてキャッシュ・ディレクトリ235に対してアクセス範囲削除処理が完了したか否かを判定する(ステップS89)。
エクステント・ライト要求領域の全てについて削除処理が完了していないと判定された場合(ステップS89のNO)、未処理のエクステント・ライト要求領域に関してステップS81の処理が実行される。一方、エクステント・ライト要求領域の全てについて削除処理が完了したと判定された場合(ステップS89のYES)、処理は終了される。
また、ステップS85において対象スロット306に格納されているポインタの参照先が葉303であると判定された場合(ステップS85のYES)、キャッシュ・ディレクトリ管理部216は、当該葉303を構成する要素数32のディレクトリ・エントリにおいて、未処理のエクステント・ライト要求領域と重なる領域を管理するディレクトリ・エントリを選定する(ステップS87)。当該ディレクトリ・エントリに対してステップS88の処理が実行される。
次に、図18のフローチャートを参照して、統計情報更新処理(図10に示すステップS21及び図16に示すステップS71)について詳細に説明する。なお、統計情報更新処理においては、エクステント・リード要求領域またはエクステント・ライト要求領域を示すLU内のブロックアドレス、サイズは、エクステント内のオフセットアドレス、サイズへと変換して実行される。
ここで、統計情報管理部215において管理される統計情報は、例えばメモリ23上に予め静的に確保された配列上のメモリ領域の要素のいくつかが連結することで構成される。
統計情報は、エクステント単位で管理されるI/O履歴記録テーブルと、キャッシュ・ディレクトリ235におけるスロット単位で管理されるリードカウンタによって構成される。
I/O履歴テーブルには、エクステントへのアクセスに関するリード・ライト種別、エクステント内のオフセットアドレス及びサイズが例えば過去5回分記録され、この履歴を参照することにより、例えばホスト10からのエクステントに対するアクセスがシーケンシャルライトであるか否かを判断できる。
スロット単位のリードカウンタは、例えば幅が8ビットあり、32個単位で管理される(以下、リードカウンタエントリと表記)。リードカウンタエントリは、例えばキャッシュ・ディレクトリ235を構成する根301、節302または葉303として使用されるそれぞれのメモリ領域と1対1に対応している。本実施形態では、例えばキャッシュ・ディレクトリ235で使用されるメモリ領域と同様に、リードカウンタエントリはメモリ23上に配列として配置されており、根301、節302または葉303のメモリ23上のアドレスから各々対応するリードカウンタエントリのアドレスを線形計算で求めることが可能である。
図18のフローチャートを参照すると、まず、統計情報管理部215は、エクステント識別子によってI/O履歴テーブルを選択する。統計情報管理部215は、リード・ライト種別、エクステントオフセットアドレス及びサイズを、選択されたI/O履歴テーブルに対して記録する(ステップS91)。
次に、統計情報管理部215は、エクステント及びスレーブ・ブロックデバイス制御装置単位で管理されている全てのキャッシュ・ディレクトリ235を、キャッシュ・ディレクトリ管理部216を介して参照する。統計情報管理部215は、キャッシュ・ディレクトリ235を参照することにより、アクセス範囲(例えばエクステント・リード要求領域またはエクステント・ライト要求領域)であるエクステントに対するアクセス記録が存在する(つまり、過去にアクセスしたことがある)スレーブ・ブロックデバイス制御装置を選定する。選定された全てのスレーブ・ブロックデバイス制御装置とアクセス範囲であるエクステントの組み合せによって特定されるキャッシュ・ディレクトリ235に対して、以下のステップS92以降の処理が実行される。
まず、キャッシュ・ディレクトリ管理部216は、例えば選定された全てのスレーブ・ブロックデバイス制御装置とアクセス範囲であるエクステントの組合せによって特定されたキャッシュ・ディレクトリ235のうち、未処理であるキャッシュ・ディレクトリ(対象キャッシュ・ディレクトリ)235を選定する(ステップS92)。
キャッシュ・ディレクトリ管理部216は、選定した対象キャッシュ・ディレクトリ235を構成する根301及び当該根301に対応するリードカウンタエントリを特定する(ステップS93)。ここで、キャッシュ・ディレクトリ管理部216によって特定された301を構成するスロット306を対象スロット306とする。また、キャッシュ・ディレクトリ管理部216によって特定されたリードカウンタエントリを対象リードカウンタエントリとする。上記したように、対象リードカウンタエントリは、根301のアドレスから線形計算によって特定される。
以降の処理は、対象スロット306及び対象リードカウンタエントリを変更しながら、エクステント・リード要求領域あるいはエクステント・ライト要求領域の未処理領域と対象スロット306を頂点とする部分木で管理される範囲(スロット・セクタ範囲)が重なる領域に関する統計情報更新処理が繰り返される。
また、これらの処理の中で、対象スロットの根301または節302における対象スロットのインデックスと、対象リードカウンタエントリにおける対象リードカウンタのインデックスは同一である。
キャッシュ・ディレクトリ管理部216は、対象リードカウンタが統計情報更新処理において既に更新済みであるか否かを、統計情報管理部215を介して判定(検査)する(ステップS94)。
対象リードカウンタが更新済みでない場合(ステップS94のNO)、対象リードカウンタを更新し、更新済みとする(ステップS95)。
具体的には、まず当該エクステント・リード要求領域あるいは当該エクステント・ライト要求領域と対象スロットのスロット・セクタ範囲とが重なる領域のサイズを32で除算した値(小数点以下は切捨て)を算出する。リード要求受信処理から実行された統計情報更新処理においては、当該値を対象リードカウンタに加算する(最大値は255とする)。一方、ライト要求受信処理から実行された統計情報更新処理においては、当該値を対象リードカウンタに減算する(最小値は0とする)。
つまり、対象リードカウンタの値が増加する場合、対象スロットのスロット・セクタ範囲内へのリードアクセスが最近発生したことを示す。一方、対象リードカウンタの値が減少する場合、対象スロットのスロット・セクタ範囲内へのライトアクセスが最近発生したことを示す。ただし、対象スロットをビットマップモードで使用した場合、ディレクトリ・エントリの1ビットも変更されないようなサイズの場合は除外する。
次に、キャッシュ・ディレクトリ管理部216は、対象スロット306に対して使用されるモードがポインタモードであるか否かを判定する(ステップS96)。
対象スロット306に対して使用されるモードがポインタモードであると判定された場合(ステップS96のYES)、キャッシュ・ディレクトリ管理部216は、当該対象スロット306に格納されているポインタの参照先が葉303であるか否かを判定する(ステップS97)。
対象スロット306に格納されているポインタの参照先が葉303でナイト判定された場合(ステップS97のNO)、キャッシュ・ディレクトリ管理部216は、当該ポインタの参照先となる節302に属するスロット配列(要素数32)のうち、未処理のエクステント・リード要求領域あるいはエクステント・ライト要求領域と重なるスロット・セクタ範囲を持つスロット306を選定する(ステップS98)。
ステップS98の処理が実行されると、選定されたスロット306を対象スロット306として、対象リードカウンタエントリ及び対象リードカウンタが特定され、上記したステップS94の処理が実行される。
一方、ステップS94の処理において、対象リードカウンタが更新済みであると判定された場合、ステップS96の処理が実行される。
また、ステップS96の処理において、対象スロット306に対して使用されるモードがポインタモードでない,つまり,ビットマップモードであると判定された場合(ステップS96のNO),キャッシュ・ディレクトリ管理部216は,エクステント・リード要求領域あるいはエクステント・ライト要求領域の全てについて統計情報更新処理が完了したか否かを判定する(ステップS99)。
エクステント・リード要求領域あるいはエクステント・ライト要求領域の全てについて統計情報更新処理が完了していないと判定された場合(ステップS99のYES)、ステップS93の処理が実行される。
一方、エクステント・リード要求領域あるいはエクステント・ライト要求領域の全てについて統計情報更新処理が完了したと判定された場合(ステップS99のYES)、キャッシュ・ディレクトリ管理部216は、統計情報更新処理において更新済みとしたキャッシュ・ディレクトリに関する全てのリードカウンタを、統計情報管理部215を介して未更新とする。更に、アクセス範囲であるエクステントに過去アクセスしたことがあるスレーブ・ブロックデバイス制御装置によって選定されるキャッシュ・ディレクトリ235の全てについて統計情報更新処理が完了したか否かを判定する(ステップS100)。
選定されたキャッシュ・ディレクトリ235の全てについて統計情報更新処理が完了したと判定された場合(ステップS100のYES)、処理は終了される。一方、選定されたキャッシュ・ディレクトリ235の全てについて統計情報更新処理が完了していないと判定された場合(ステップS100のNO)、ステップS92の処理が実行される。
ここで、上記したように更新された統計情報を用いて対象スロット306が使用されているモードを交換するか否かを判定する処理について具体的に説明する。
例えば上述した図11に示すアクセス範囲登録処理のステップS32について説明する。この場合においては、例えば対象スロット306に対応する対象リードカウンタエントリの対象リードカウンタエントリの対象リードカウンタを特定し、その値が閾値(例えば100)を超えている場合、つまり、対象スロット306のスロット・セクタ範囲内への最近のリードの割合が高い場合には、ポインタモードからビットマップモードに交換すると判定される。
一方、例えば上述した図17に示すアクセス範囲削除処理のステップS82について説明する。この場合においては、例えば統計情報管理部215を介してI/O履歴テーブルを参照することによりエクステントへのライトがシーケンシャルライトである場合には、ポインタモードからビットマップモードに交換すると判定される。
上記したように本実施形態においては、マスタ・ブロックデバイス制御装置におけるリード要求受信処理またはライト要求受信処理の際に、キャッシュ・ディレクトリ235を構成するスロット306に対して使用されるモード(ビットマップモードまたはポインタモード)を交換することによって、当該キャッシュ・ディレクトリ235に対して記録されるアクセス範囲の記録粒度を部分的に変更することができる。これにより、本実施形態においては、例えば動的かつ選択的にキャッシュ・ディレクトリ235の一部または全部の記録粒度を粗くすることで、記録されたアクセス範囲に基づく処理または当該キャッシュ・ディレクトリ235を管理する処理を包括的に軽減する効果が得られる。また、スロット306に対して使用されるモードをポインタモードからビットマップモードに交換することで、キャッシュ・ディレクトリ235のために必要なメモリ領域を削減することも可能である。
また、本実施形態においては、リードの割合が高いと判定された領域の記録粒度を粗くすることで、後続のリード要求受信処理におけるアクセス範囲登録処理でのディレクトリ探索の処理を軽減することが可能となる。
また、本実施形態においては、ライト要求受信処理に伴うアクセス範囲削除処理において、当該ライト要求がシーケンシャルライトであると判定された領域の記録粒度を粗くすることで、コヒーレント処理の対象範囲を広げ、後続のライト要求受信処理で行わなければならないコヒーレント処理を省略することが可能となる。
また、メモリ23の領域が不足した場合には、記録粒度を粗くすることにより、当該不足した領域を確保することが可能となる。
なお、本実施形態においては、キャッシュ・ディレクトリ235におけるスロット306に対して使用されるモードの交換は、アクセス範囲登録処理またはアクセス範囲削除処理に同期して実行されているが、当該処理と非同期に実行することも可能である。例えば、LRU(Least Recent Used)方式で管理されたキャッシュ・ディレクトリ235を構成する節302または葉303において管理されている領域のうち、アクセス頻度の低い範囲を選定し、その範囲に該当するスロット306に対して使用されているモードをビットマップモードに交換することで、アクセス頻度が低い範囲の記録粒度を粗くすることが可能である。
同様に、LRU方式で管理されたキャッシュ・ディレクトリ235を構成する節302または葉303において管理されている領域のうち、アクセス頻度の高い範囲を選定し、その範囲に該当するビットマップモードで使用されているスロットのモードをポインタモードに交換することで、アクセス頻度が高い範囲の記録粒度を細かくすることが可能となる。
つまり、アクセス頻度が低い範囲に関してはアクセスの局所性を考慮すると再アクセスされる可能性が低いため、例えばアクセス頻度が低い範囲に対しては記録粒度を粗くして記録を維持することでメモリ領域が削減でき、当該削減されたメモリ領域を記録粒度の細かさが必要となる例えばアクセス頻度の高い範囲の部分木に当てることができる。これにより、例えばアクセス頻度の高い範囲において、記録粒度の不足を起因とする不必要なコヒーレント処理の発生を抑止することが可能となる。
[第2の実施形態]
図19は、本発明の第2の実施形態に係るブロックデバイス制御装置40を含むコンピュータシステムの構成を示すブロック図である。なお、図1と同様の部分には同一参照符号を付してその詳しい説明を省略する。ここでは、図1と異なる部分について主に述べる。また、ブロックデバイス制御装置40のハードウェア構成は、前述したブロックデバイス制御装置20と同様の構成であるため、図3を用いて説明する。
このコンピュータシステムは、ホスト10及びブロックデバイス制御装置40を含む。当該舗装と10及びブロックデバイス制御装置40は互いに接続されている。
ブロックデバイス制御装置40は、例えばマスタ論理ユニット(マスタLU)401及びバックアップ論理ユニット(バックアップLU)402をペアで管理する。なお、ブロックデバイス制御装置40は、マスタLU401及びバックアップLU402のペアを複数管理する構成でもよい。
マスタLU401は、例えばホスト10からのアクセス要求(リード要求またはライト要求)に応じて、データの読み出しまたは書き込みが行われるLUである。
一方、バックアップLU402は、マスタLU401に格納されているデータの複製を保持しておくLUである。
ブロックデバイス制御装置40は、前述した第1の実施形態に係るブロックデバイス制御装置20と異なり、スナップショット機能を有する。スナップショット機能とは、例えばマスタLU401に格納されている、ある時点での内容(データ)を、バックアップLU402に複製する機能である。なお、バックアップLU402に格納される、マスタLU401に格納されているデータの複製(コピー)データをスナップショットデータと称する。
上記したマスタLU401及びバックアップLU402は、ホスト10からマスタLU401のスナップショットデータ採取の要求(指示)があるまでは、同期状態にある。この同期状態時では、マスタLU401及びバックアップLU402(に格納されているデータ)の内容は同一である。また、ホスト10からのライト要求に応じてマスタLU401に書き込まれるデータ(ライトデータ)は、バックアップLU402に対しても反映される。
ブロックデバイス制御装置40は、例えばホスト10からのマスタLU401のスナップショットデータ採取の要求を受けると、マスタLU401及びバックアップLU402の同期状態を解除する。同期状態が解除されると、バックアップLU402がスナップショットデータとして使用できる。
ブロックデバイス制御装置40は、例えばホスト10からの同期状態が解除されたマスタLU401とバックアップLU402に対する再同期化の要求を受けると、マスタLU401に格納されているデータをバックアップLU402へコピーする再同期化処理が実行される。
図20は、図19に示すブロックデバイス制御装置40の主として機能構成を示すブロック図である。ブロックデバイス制御装置40は、ホストI/F制御部411、ディスクI/F制御部412、差分情報ディレクトリ413、I/O処理部414及びスナップショット管理部415を含む。本実施形態において、これらの各部411乃至415は、図3に示すI/Oプロセッサ21がROM22に格納されているプログラムを実行することにより実現されるものとする。
また、ブロックデバイス制御装置40は、差分情報ディレクトリ236を含む。本実施形態において、この差分情報ディレクトリ236は、図3に示すメモリ23に格納される。
ホストI/F制御部411は、ホストI/F25を制御する。ホストI/F制御部411は、ホストI/F25を制御することによって、例えばホスト10との間でSCSIプロトコルに従ってデータ送受信を行う。ホストI/F制御部411は、受信されたSCSIコマンドがリード要求であれば、当該リード要求に含まれるLUN、ブロックアドレス、サイズ及びイニシエータ情報を、I/O処理部414に渡す。一方、ホストI/F制御部411は、受信されたSCSIコマンドがライト要求であれば、当該ライト要求に含まれるLUN、ブロックアドレス、サイズ、イニシエータ情報及びライトデータを、I/O処理部414に渡す。また、ホストI/F制御部411は、受信されたSCSIコマンドが例えばブロックデバイス制御装置40で独自に定義されたスナップショット用SCSIコマンドであれば、当該SCSIコマンドに含まれるイニシエータ情報及び通信データを、スナップショット管理部415に渡す。
ディスクI/F制御部412は、ディスクI/F26を制御する。ディスクI/F制御部412は、ディスクI/F26を制御することによって、例えばマスタLU401及びバックアップLU402に対してリード/ライト処理を実行する。
差分情報ディレクトリ管理部413は、ホスト10からのマスタLU401に対するライト要求に応じてアクセスされる当該マスタLU401へのアクセス範囲を記録する差分情報ディレクトリ236を構成する。
この差分情報ディレクトリ236は、例えばオペレーティングシステム(OS: Operating System)の機能を利用して、動的に確保されたメモリ23の領域に格納されている。この差分情報ディレクトリ236のデータ構造は、前述した第1の実施形態に係るキャッシュ・ディレクトリ235と同様であるため、その詳しい説明は省略する。しかしながら、前述したキャッシュ・ディレクトリ235では、データ構造である基数木の階層数がエクステントのサイズ(例えば、1Mセクタ)によって決定されるが、差分情報ディレクトリ236では、データ構造である基数木の階層数がマスタLU401の容量で決定される。階層数を除けば、根301、節302、葉303またはディレクトリ・エントリ304の構成及び作用は同一である。本実施形態では、便宜上、マスタLU401の容量を1Mセクタとし、差分情報ディレクトリ236は根301、2つの節302及び葉303の4つの層で構成されているものとする。
差分情報ディレクトリ管理部413は、マスタLU401及びバックアップLU402の同期状態が解除された状態で、マスタLU401に対してライト処理が実行された場合に、当該ライト処理に応じたアクセス範囲を差分情報ディレクトリ236に記録(登録)する。この差分情報ディレクトリ236は、マスタLU401単位で管理される。
また、差分情報ディレクトリ管理部413は、同期状態が解除されたマスタLU401及びバックアップLU402の再同期化処理が実行された後に、差分情報ディレクトリ236(に記録されている全てのアクセス範囲)を削除する。
I/O処理部414は、例えばホストI/F制御部411によって受信されたアクセス要求に対する処理を実行する。また、I/O処理部414は、同期状態が解除されたマスタLU401に対するライト要求が受信された場合には、差分情報ディレクトリ管理部413に当該ライト要求に応じてアクセス範囲を差分情報ディレクトリ236に登録するよう要求する。また、I/O処理部414は、スナップショット管理部415が実行するマスタLU401とバックアップLU402の再同期化処理に伴うコピー処理を実行する。
スナップショット管理部415は、ホストI/F制御部411によって例えばホスト10から受信されたスナップショット用コマンドに従って処理を行う。当該コマンドがスナップショット採取の要求である場合、マスタLU401とバックアップLU402の同期状態を解除する。また、当該コマンドが再同期化の要求である場合、マスタLU401とバックアップLU402の再同期化処理を行い、マスタLU401とバックアップLU402は同期状態となる。
次に、図21に示すフローチャートを参照して、ブロックデバイス制御装置40におけるマスタLU401に対するライト要求受信処理の処理手順について説明する。
まず、ホストI/F制御部411は、例えばホスト10からのライト要求を受信する。ホストI/F制御部411は、受信されたライト要求をI/O処理部414へ渡す。(ステップS101)。このライト要求には、当該ライト要求に応じてアクセスされるLU(マスタLU401)を識別するLUN、当該LUのブロックアドレス、当該ライト要求に応じてアクセスされるデータのサイズ及び当該ライト要求に応じて書き込まれるデータ(ライトデータ)が含まれる。
I/O処理部414は当該ライト要求をディスクI/F制御部412に渡してマスタLU401への当該ライトデータの書き込みを行う(ステップS102)。
次に、I/O処理部414は、スナップショット管理部415を介して当該LUが同期状態であるかどうかを判定する(ステップS103)。
当該LUが同期状態である場合(ステップS103のYES)、当該ライト要求はディスクI/F制御部412に渡され、バックアップLU402への当該ライトデータの書き込みを行う(ステップS104)。ステップS104の実行後、I/O処理部414は、ホストI/F制御部411を介してホスト10にステータスを送信して(ステップS105)、処理を完了する。
一方、当該LUが同期状態でない場合(ステップS103のNO)、当該ライト要求は差分情報ディレクトリ管理部413に渡され、差分情報ディレクトリ236に対してアクセス範囲登録処理を実行する(ステップS106)。このアクセス範囲登録処理の詳細については後述する。ステップS106の実行後、ステップS105が実行される。
次に、図22に示すフローチャートを参照して、上記したアクセス範囲登録処理(図21に示すステップS106)の処理手順について説明する。
まず、差分情報ディレクトリ管理部413は、例えばホスト10からのライト要求によってアクセスされる領域(ライト要求領域)を含むマスタLU401、つまり、アクセス対象となるマスタLU401の差分情報ディレクトリ236を選定し、構成する根301を特定する(ステップS111)。差分情報ディレクトリ236は、前述したキャッシュ・ディレクトリ235と同様に、例えば根301、2つの節302及び葉303の4つの層から構成される。この根301、2つの節302及び葉303の4つの層で使用するメモリ領域は、例えばOSの機能を利用することにより、ブロックデバイス制御装置20内のメモリ23において動的に確保または解放される。
差分情報ディレクトリ管理部413は、特定された根301を構成するスロット306を対象スロット306とする。以降の処理は対象スロット306を変更しながら、ライト要求領域の未処理領域と対象スロット306を頂点とする部分木で管理される範囲(スロット・セクタ範囲)が重なる領域に関する登録処理を繰り返す。
差分情報ディレクトリ管理部413は、対象スロット306が使用されているモードを交換(変更)するか否かを判定する(ステップS112)。
例えば対象スロット306に対して使用されているモードがポインタモードである場合を想定する。この場合には、例えば対象スロット306を含む層より下位層のデータ構造を参照して、その記録密度が予め定められた閾値を超えた場合には、当該対象スロット306のモードをポインタモードからビットマップモードに交換すると判定する。
一方、対象スロット306に対して使用されているモードがビットマップモードである場合は、常にポインタモードに交換しないと判定する。
対象スロット306に対して使用されているモードをポインタモードからビットマップモードに交換すると判定された場合(ステップS112のYES)、前述した図11に示すステップS33に相当するステップS113の処理が実行される。
以下、図11に示すステップS34〜ステップS39に相当するステップS114〜ステップS119の処理が実行される。
一方、対象スロット306に対して使用されているモードを交換しないと判定された場合(ステップS112のNO)、ステップS114の処理が実行される。
次に、図23に示すフローチャートを参照して、マスタLU401とバックアップLU402の再同期化処理の処理手順について説明する。
ホストI/F制御部411は、例えばホスト10からスナップショット用SCSIコマンドを受信し、スナップショット管理部415に渡す。スナップショット管理部415は当該コマンドが再同期化要求であった場合、I/O処理部414に要求することでマスタLU401とバックアップLU402の再同期化処理を開始する(ステップS121)。
I/O処理部414は、差分情報ディレクトリ管理部413を介してマスタLU401に対応する差分情報ディレクトリ236を参照する。差分情報ディレクトリ236に記録されている全てのアクセス範囲(以降、コピー対象範囲と記述)において、後述するステップS123及びステップS124で行われるコピー処理が完了しているかどうか判定する(ステップS122)。
コピー対象範囲のコピー処理が全て完了していない場合(ステップS122のNO)、I/O処理部414は、コピー対象範囲のうち未処理の範囲の一部あるいは全部を抽出する。当該範囲に関して、ディスクI/F制御部412を介してマスタLU401からデータをリードする(ステップS123)。次に当該範囲に関して、ステップS123におけるリードデータをディスクI/F制御部412を介してバックアップLU402へライトする(ステップS124)。ステップS124が完了すると、ステップS122を実行する。
一方、コピー対象範囲のコピー処理が全て完了した場合(ステップS122のYES)、差分情報ディレクトリ管理部413はマスタLU401に対応する差分情報ディレクトリ236を削除し(ステップS125)、処理を完了する。
上記したように本実施形態においては、差分情報ディレクトリ236を構成するスロット306に対して使用されるモード(ビットマップモードまたはポインタモード)を交換することによって、当該差分情報ディレクトリ236に対して記録されるアクセス範囲の記録粒度を部分的に変更することができる。これにより、本実施形態においては、例えば動的かつ選択的に差分情報ディレクトリ236の一部または全部の記録粒度を粗くすることで、記録されたアクセス範囲に基づく処理または当該差分情報ディレクトリ236を管理する処理を包括的に軽減する効果が得られる。また、スロット306に対して使用されるモードをポインタモードからビットマップモードに交換することで、差分情報ディレクトリ236のために必要なメモリ領域を削減することで、メモリ領域を節約することも可能である。
また、本実施形態においては、記録密度が高い範囲は再同期化処理におけるコピー処理の実行回数が多くなるため、記録粒度を粗くして記録を維持することで、そのコピー回数を低減することが可能となる。また、上記したように節約されたメモリ領域を記録密度の低い範囲の部分木に用いることができるため、記録粒度の不足を起因とする不必要なコピー処理の発生を抑止することが可能となる。
また、アクセスの局所性を考慮すれば、記録密度が高い範囲が再度ライトされる可能性が高く、記録粒度を粗くすることで、後続のライト要求受信処理におけるアクセス範囲登録処理でのディレクトリ探索の処理量が軽減される。
なお、本実施形態においては、マスタLU401及びバックアップLU402が同一のブロックデバイス制御装置40によって管理されていたが、それぞれ異なるブロックデバイス制御装置40が管理する構成であっても構わない。
また、本実施形態では、差分情報ディレクトリ236におけるスロット306に対して使用されるモードの交換は、アクセス範囲登録処理に同期して実行されているが、当該処理と非同期に実行することも可能である。この場合、例えば節302または葉303を記録密度順のリストで管理する。このリストを参照して記録密度が高い範囲を選定し、当該範囲に該当するスロット306に対して使用されているモードをビットマップモードに交換することで、全体のアクセス範囲のうちの記録密度が高い範囲の記録粒度を粗くすることが可能となる。
なお、本願発明は、上記各実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記各実施形態に開示されている複数の構成要素の適宜な組合せにより種々の発明を形成できる。例えば、各実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に亘る構成要素を適宜組合せてもよい。
本発明の第1の実施形態に係るブロックデバイス制御装置を含むストレージ・クラスタ・システムの構成を示すブロック図。 図1に示すストレージ・クラスタ・システムにおけるIOパスの一例を示す図。 図1に示すブロックデバイス制御装置20のハードウェア構成を示すブロック図。 図1に示すブロックデバイス制御装置20の主として機能構成を示すブロック図。 ルーティングテーブル231のデータ構造の一例を示す図。 エクステント構成テーブル232のデータ構造の一例を示す図。 キャッシュ・ディレクトリ235のデータ構造について説明するための図。 ブロックデバイス制御装置におけるリード要求受信処理の処理手順を示すフローチャート スレーブ・ブロックデバイス制御装置におけるリード要求受信処理の処理手順を示すフローチャート。 マスタ・ブロックデバイス制御装置におけるリード要求受信処理の処理手順を示すフローチャート。 アクセス範囲登録処理の処理手順を示すフローチャート。 第1層の根301または第2層の節302を構成する対象スロット306に対して使用されるモードの交換処理について説明するための図。 第3層の節302を構成する対象スロット306に対して使用されるモードの交換処理について説明するための図。 ブロックデバイス制御装置におけるライト要求受信処理の処理手順を示すフローチャート。 スレーブ・ブロックデバイス制御装置におけるライト要求受信処理の処理手順を示すフローチャート。 マスタ・ブロックデバイス制御装置におけるライト要求受信処理の処理手順を示すフローチャート。 アクセス範囲削除処理の処理手順を示すフローチャート。 統計情報更新処理の処理手順を示すフローチャート。 本発明の第2の実施形態に係るブロックデバイス制御装置40を含むコンピュータシステムの構成を示すブロック図。 図15に示すブロックデバイス制御装置40の主として機能構成を示すブロック図。 ブロックデバイス制御装置40のマスタLU401へのライト要求受信処理の処理手順を示すフローチャート。 アクセス範囲登録処理の処理手順を示すフローチャート。 ブロックデバイス制御装置40のマスタLU401とバックアップLU402の再同期化処理の処理手順を示すフローチャート。
符号の説明
10…ホスト、20,40…ブロックデバイス制御装置、21…I/Oプロセッサ、22…ROM、23…メモリ、24…バッテリ、25…ホストI/F、26…ディスクI/F、30…スイッチ、200…ハードディスクドライブ、201…エクステント、211…ホストI/F制御部、212…ディスクI/F制御部、213…構成情報管理部、214…キャッシュメモリ管理部、215…統計情報管理部、216…キャッシュ・ディレクトリ管理部、217…I/O処理部、218…通信部、231…ルーティングテーブル、232…エクステント構成テーブル、233…キャッシュメモリ、234…統計情報格納部、235…キャッシュ・ディレクトリ、236…差分情報ディレクトリ、401…マスタ論理ユニット、402…バックアップ論理ユニット、411…ホストI/F制御部、412…ディスクI/F制御部、413…差分情報ディレクトリ管理部、414…I/O処理部、415…スナップショット管理部。

Claims (10)

  1. ホストコンピュータに対して論理ユニットを提供するブロックデバイス制御装置において、
    前記ホストコンピュータからの前記論理ユニットに対するアクセス要求によって指定される当該論理ユニットへのアクセス範囲を記録するディレクトリと、
    前記ホストコンピュータからのアクセス要求を受信する受信手段と、
    前記受信されたアクセス要求に応じてアクセスされる前記論理ユニットへのアクセス範囲を前記ディレクトリに記録する際の記録粒度を、当該アクセス要求に基づいて変更する変更手段と、
    前記受信されたアクセス要求によって指定される前記論理ユニットへのアクセス範囲を、前記変更された記録粒度に基づいて前記ディレクトリに記録する記録処理手段と
    を具備することを特徴とするブロックデバイス制御装置。
  2. 前記ディレクトリは、前記論理ユニット内の部分的なデータ領域を示す複数のディレクトリ・エントリが連結された木構造で構成され、
    前記変更手段は、前記受信されたアクセス要求によって指定されるアクセス範囲と重なるデータ領域を示す前記ディレクトリの部分木と、当該データ領域を示すディレクトリ・エントリであって、当該ディレクトリの部分木より前記記録粒度が粗いディレクトリ・エントリとを、当該アクセス要求に基づいて交換することにより前記記録粒度を変更する
    ことを特徴とする請求項1記載のブロックデバイス制御装置。
  3. 前記ホストコンピュータからのアクセス要求によって指定された前記論理ユニットへのアクセス範囲の統計を示す統計情報を予め格納する統計情報格納手段を更に具備し、
    前記変更手段は、前記アクセス要求または前記統計情報格納手段に格納されている統計情報に基づいて、前記記録粒度を変更する
    ことを特徴とする請求項1記載のブロックデバイス制御装置。
  4. 前記統計情報格納手段は、前記ホストコンピュータからのアクセス要求に応じた前記論理ユニットへのアクセスのうち、前記論理ユニット内の任意の領域に対するリードの割合を示す統計情報を格納し、
    前記変更手段は、前記アクセス範囲のうち、前記統計情報によって示されるリードの割合が予め定められた値より高い領域が含まれる場合、前記記録粒度を粗くする
    ことを特徴とする請求項3記載のブロックデバイス制御装置。
  5. 前記統計情報格納手段は、前記ホストコンピュータからのアクセス要求に応じた前記論理ユニットへのアクセスのうち、前記論理ユニット内の任意の領域に対するアクセス頻度を示す統計情報を格納し、
    前記変更手段は、前記アクセス範囲のうち、前記統計情報によって示されるアクセス頻度が予め定められた値よりも低い領域が含まれる場合、前記記録粒度を粗くする
    ことを特徴とする請求項3記載のブロックデバイス制御装置。
  6. 前記統計情報格納手段は、前記ホストコンピュータからのアクセス要求に応じた前記論理ユニットへのアクセスのうち、前記論理ユニットへのアクセス要求の履歴を示す統計情報を格納し、
    前記変更手段は、前記受信されたアクセス要求に応じた前記論理ユニットに対するアクセスがシーケンシャルライトであるかを、当該アクセス要求に基づいて判定する判定手段を含み、
    前記アクセスがシーケンシャルライトであると判定された場合に、前記記録粒度を粗くする
    ことを特徴とする請求項3記載のブロックデバイス制御装置。
  7. 前記変更手段は、
    前記受信されたアクセス要求によって指定されるアクセス範囲を、前記ディレクトリに正確に記録できるかを判定する記録粒度判定手段を含み、
    前記ディレクトリに正確に記録できないと判定された場合、前記記録粒度を細かくする
    ことを特徴とする請求項1記載のブロックデバイス制御装置。
  8. 前記ディレクトリを格納するメモリを更に具備し、
    前記変更手段は、
    前記メモリ内において、前記ディレクトリが占める領域が不足しているかを判定するメモリ領域判定手段を更に含み、
    前記記録粒度判定手段によって前記ディレクトリに正確に記録できないと判定された場合であって、前記メモリ領域判定手段によって前記ディレクトリが占める領域が不足していると判定された場合には、前記記録粒度を変更しない
    ことを特徴とする請求項6記載のブロックデバイス制御装置。
  9. 前記変更手段は、
    前記受信されたアクセス要求によって指定される前記論理ユニットへのアクセス範囲のうち、前記ディレクトリにおいて、予め定められた閾値より記録密度が高い範囲を含むかを判定する判定手段を含み、
    前記アクセス範囲に前記予め定められた閾値より記録密度が高い範囲が含まれると判定された場合、前記記録粒度を粗くする
    ことを特徴とする請求項1記載のブロックデバイス制御装置。
  10. ホストコンピュータに対して論理ユニットを提供するブロックデバイス制御装置であって、前記ホストコンピュータからの前記論理ユニットに対するアクセス要求によって指定される当該論理ユニットへのアクセス範囲を記録するディレクトリを備えるブロックデバイス制御装置において用いられるアクセス範囲管理方法であって、
    前記ホストコンピュータからのアクセス要求を受信するステップと、
    前記受信されたアクセス要求によって指定される前記論理ユニットへのアクセス範囲を前記ディレクトリに記録する際の記録粒度を、当該アクセス要求に基づいて変更するステップと、
    前記受信されたアクセス要求によって指定される前記論理ユニットへのアクセス範囲を、前記変更された記録粒度に基づいて前記ディレクトリに記録するステップと
    を具備することを特徴とするアクセス範囲管理方法。
JP2007294613A 2007-11-13 2007-11-13 ブロックデバイス制御装置及びアクセス範囲管理方法 Pending JP2009122850A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2007294613A JP2009122850A (ja) 2007-11-13 2007-11-13 ブロックデバイス制御装置及びアクセス範囲管理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007294613A JP2009122850A (ja) 2007-11-13 2007-11-13 ブロックデバイス制御装置及びアクセス範囲管理方法

Publications (1)

Publication Number Publication Date
JP2009122850A true JP2009122850A (ja) 2009-06-04

Family

ID=40814954

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007294613A Pending JP2009122850A (ja) 2007-11-13 2007-11-13 ブロックデバイス制御装置及びアクセス範囲管理方法

Country Status (1)

Country Link
JP (1) JP2009122850A (ja)

Cited By (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8285927B2 (en) 2006-12-06 2012-10-09 Fusion-Io, Inc. Apparatus, system, and method for solid-state storage as cache for high-capacity, non-volatile storage
US8443134B2 (en) 2006-12-06 2013-05-14 Fusion-Io, Inc. Apparatus, system, and method for graceful cache device degradation
US8489817B2 (en) 2007-12-06 2013-07-16 Fusion-Io, Inc. Apparatus, system, and method for caching data
US8578127B2 (en) 2009-09-09 2013-11-05 Fusion-Io, Inc. Apparatus, system, and method for allocating storage
US8706968B2 (en) 2007-12-06 2014-04-22 Fusion-Io, Inc. Apparatus, system, and method for redundant write caching
US8719501B2 (en) 2009-09-08 2014-05-06 Fusion-Io Apparatus, system, and method for caching data on a solid-state storage device
US8782344B2 (en) 2012-01-12 2014-07-15 Fusion-Io, Inc. Systems and methods for managing cache admission
US8825937B2 (en) 2011-02-25 2014-09-02 Fusion-Io, Inc. Writing cached data forward on read
US8874823B2 (en) 2011-02-15 2014-10-28 Intellectual Property Holdings 2 Llc Systems and methods for managing data input/output operations
JP5614452B2 (ja) * 2010-09-13 2014-10-29 富士通株式会社 情報処理装置および情報処理装置の制御方法
US8935302B2 (en) 2006-12-06 2015-01-13 Intelligent Intellectual Property Holdings 2 Llc Apparatus, system, and method for data block usage information synchronization for a non-volatile storage volume
US8966184B2 (en) 2011-01-31 2015-02-24 Intelligent Intellectual Property Holdings 2, LLC. Apparatus, system, and method for managing eviction of data
US8966191B2 (en) 2011-03-18 2015-02-24 Fusion-Io, Inc. Logical interface for contextual storage
US9003104B2 (en) 2011-02-15 2015-04-07 Intelligent Intellectual Property Holdings 2 Llc Systems and methods for a file-level cache
US9058123B2 (en) 2012-08-31 2015-06-16 Intelligent Intellectual Property Holdings 2 Llc Systems, methods, and interfaces for adaptive persistence
US9104599B2 (en) 2007-12-06 2015-08-11 Intelligent Intellectual Property Holdings 2 Llc Apparatus, system, and method for destaging cached data
US9116812B2 (en) 2012-01-27 2015-08-25 Intelligent Intellectual Property Holdings 2 Llc Systems and methods for a de-duplication cache
US9122579B2 (en) 2010-01-06 2015-09-01 Intelligent Intellectual Property Holdings 2 Llc Apparatus, system, and method for a storage layer
US9201677B2 (en) 2011-05-23 2015-12-01 Intelligent Intellectual Property Holdings 2 Llc Managing data input/output operations
US9251086B2 (en) 2012-01-24 2016-02-02 SanDisk Technologies, Inc. Apparatus, system, and method for managing a cache
US9251052B2 (en) 2012-01-12 2016-02-02 Intelligent Intellectual Property Holdings 2 Llc Systems and methods for profiling a non-volatile cache having a logical-to-physical translation layer
US9519540B2 (en) 2007-12-06 2016-12-13 Sandisk Technologies Llc Apparatus, system, and method for destaging cached data
US9563555B2 (en) 2011-03-18 2017-02-07 Sandisk Technologies Llc Systems and methods for storage allocation
US9594785B2 (en) 2010-12-16 2017-03-14 Nec Corporation Database management device and database management method
US9600184B2 (en) 2007-12-06 2017-03-21 Sandisk Technologies Llc Apparatus, system, and method for coordinating storage requests in a multi-processor/multi-thread environment
US9612966B2 (en) 2012-07-03 2017-04-04 Sandisk Technologies Llc Systems, methods and apparatus for a virtual machine cache
US9767032B2 (en) 2012-01-12 2017-09-19 Sandisk Technologies Llc Systems and methods for cache endurance
US9842053B2 (en) 2013-03-15 2017-12-12 Sandisk Technologies Llc Systems and methods for persistent cache logging
US9842128B2 (en) 2013-08-01 2017-12-12 Sandisk Technologies Llc Systems and methods for atomic storage operations
US9946607B2 (en) 2015-03-04 2018-04-17 Sandisk Technologies Llc Systems and methods for storage error management
US10019320B2 (en) 2013-10-18 2018-07-10 Sandisk Technologies Llc Systems and methods for distributed atomic storage operations
US10019353B2 (en) 2012-03-02 2018-07-10 Longitude Enterprise Flash S.A.R.L. Systems and methods for referencing data on a storage medium
US10073630B2 (en) 2013-11-08 2018-09-11 Sandisk Technologies Llc Systems and methods for log coordination
US10102117B2 (en) 2012-01-12 2018-10-16 Sandisk Technologies Llc Systems and methods for cache and storage device coordination
US10102144B2 (en) 2013-04-16 2018-10-16 Sandisk Technologies Llc Systems, methods and interfaces for data virtualization
US10133663B2 (en) 2010-12-17 2018-11-20 Longitude Enterprise Flash S.A.R.L. Systems and methods for persistent address space management
US10318495B2 (en) 2012-09-24 2019-06-11 Sandisk Technologies Llc Snapshots for a non-volatile device
US10339056B2 (en) 2012-07-03 2019-07-02 Sandisk Technologies Llc Systems, methods and apparatus for cache transfers
US10509776B2 (en) 2012-09-24 2019-12-17 Sandisk Technologies Llc Time sequence data management
US10558561B2 (en) 2013-04-16 2020-02-11 Sandisk Technologies Llc Systems and methods for storage metadata management

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002373093A (ja) * 2001-06-14 2002-12-26 Toshiba Corp スナップショット機能を有するディスク記憶装置、スナップショット差分情報管理方法及びスナップショット管理プログラム
JP2006331100A (ja) * 2005-05-26 2006-12-07 Hitachi Ltd 差分ビットマップ管理方法、ストレージ装置及び情報処理システム

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002373093A (ja) * 2001-06-14 2002-12-26 Toshiba Corp スナップショット機能を有するディスク記憶装置、スナップショット差分情報管理方法及びスナップショット管理プログラム
JP2006331100A (ja) * 2005-05-26 2006-12-07 Hitachi Ltd 差分ビットマップ管理方法、ストレージ装置及び情報処理システム

Cited By (55)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8935302B2 (en) 2006-12-06 2015-01-13 Intelligent Intellectual Property Holdings 2 Llc Apparatus, system, and method for data block usage information synchronization for a non-volatile storage volume
US9824027B2 (en) 2006-12-06 2017-11-21 Sandisk Technologies Llc Apparatus, system, and method for a storage area network
US11640359B2 (en) 2006-12-06 2023-05-02 Unification Technologies Llc Systems and methods for identifying storage resources that are not in use
US9575902B2 (en) 2006-12-06 2017-02-21 Longitude Enterprise Flash S.A.R.L. Apparatus, system, and method for managing commands of solid-state storage using bank interleave
US9734086B2 (en) 2006-12-06 2017-08-15 Sandisk Technologies Llc Apparatus, system, and method for a device shared between multiple independent hosts
US8443134B2 (en) 2006-12-06 2013-05-14 Fusion-Io, Inc. Apparatus, system, and method for graceful cache device degradation
US8756375B2 (en) 2006-12-06 2014-06-17 Fusion-Io, Inc. Non-volatile cache
US8762658B2 (en) 2006-12-06 2014-06-24 Fusion-Io, Inc. Systems and methods for persistent deallocation
US11960412B2 (en) 2006-12-06 2024-04-16 Unification Technologies Llc Systems and methods for identifying storage resources that are not in use
US11847066B2 (en) 2006-12-06 2023-12-19 Unification Technologies Llc Apparatus, system, and method for managing commands of solid-state storage using bank interleave
US9454492B2 (en) 2006-12-06 2016-09-27 Longitude Enterprise Flash S.A.R.L. Systems and methods for storage parallelism
US8285927B2 (en) 2006-12-06 2012-10-09 Fusion-Io, Inc. Apparatus, system, and method for solid-state storage as cache for high-capacity, non-volatile storage
US11573909B2 (en) 2006-12-06 2023-02-07 Unification Technologies Llc Apparatus, system, and method for managing commands of solid-state storage using bank interleave
US9519540B2 (en) 2007-12-06 2016-12-13 Sandisk Technologies Llc Apparatus, system, and method for destaging cached data
US8706968B2 (en) 2007-12-06 2014-04-22 Fusion-Io, Inc. Apparatus, system, and method for redundant write caching
US9104599B2 (en) 2007-12-06 2015-08-11 Intelligent Intellectual Property Holdings 2 Llc Apparatus, system, and method for destaging cached data
US9600184B2 (en) 2007-12-06 2017-03-21 Sandisk Technologies Llc Apparatus, system, and method for coordinating storage requests in a multi-processor/multi-thread environment
US8489817B2 (en) 2007-12-06 2013-07-16 Fusion-Io, Inc. Apparatus, system, and method for caching data
US8719501B2 (en) 2009-09-08 2014-05-06 Fusion-Io Apparatus, system, and method for caching data on a solid-state storage device
US8578127B2 (en) 2009-09-09 2013-11-05 Fusion-Io, Inc. Apparatus, system, and method for allocating storage
US9122579B2 (en) 2010-01-06 2015-09-01 Intelligent Intellectual Property Holdings 2 Llc Apparatus, system, and method for a storage layer
JP5614452B2 (ja) * 2010-09-13 2014-10-29 富士通株式会社 情報処理装置および情報処理装置の制御方法
US9594785B2 (en) 2010-12-16 2017-03-14 Nec Corporation Database management device and database management method
US10133663B2 (en) 2010-12-17 2018-11-20 Longitude Enterprise Flash S.A.R.L. Systems and methods for persistent address space management
US8966184B2 (en) 2011-01-31 2015-02-24 Intelligent Intellectual Property Holdings 2, LLC. Apparatus, system, and method for managing eviction of data
US9092337B2 (en) 2011-01-31 2015-07-28 Intelligent Intellectual Property Holdings 2 Llc Apparatus, system, and method for managing eviction of data
US9003104B2 (en) 2011-02-15 2015-04-07 Intelligent Intellectual Property Holdings 2 Llc Systems and methods for a file-level cache
US8874823B2 (en) 2011-02-15 2014-10-28 Intellectual Property Holdings 2 Llc Systems and methods for managing data input/output operations
US9141527B2 (en) 2011-02-25 2015-09-22 Intelligent Intellectual Property Holdings 2 Llc Managing cache pools
US8825937B2 (en) 2011-02-25 2014-09-02 Fusion-Io, Inc. Writing cached data forward on read
US8966191B2 (en) 2011-03-18 2015-02-24 Fusion-Io, Inc. Logical interface for contextual storage
US9563555B2 (en) 2011-03-18 2017-02-07 Sandisk Technologies Llc Systems and methods for storage allocation
US9250817B2 (en) 2011-03-18 2016-02-02 SanDisk Technologies, Inc. Systems and methods for contextual storage
US9201677B2 (en) 2011-05-23 2015-12-01 Intelligent Intellectual Property Holdings 2 Llc Managing data input/output operations
US8782344B2 (en) 2012-01-12 2014-07-15 Fusion-Io, Inc. Systems and methods for managing cache admission
US9767032B2 (en) 2012-01-12 2017-09-19 Sandisk Technologies Llc Systems and methods for cache endurance
US10102117B2 (en) 2012-01-12 2018-10-16 Sandisk Technologies Llc Systems and methods for cache and storage device coordination
US9251052B2 (en) 2012-01-12 2016-02-02 Intelligent Intellectual Property Holdings 2 Llc Systems and methods for profiling a non-volatile cache having a logical-to-physical translation layer
US9251086B2 (en) 2012-01-24 2016-02-02 SanDisk Technologies, Inc. Apparatus, system, and method for managing a cache
US9116812B2 (en) 2012-01-27 2015-08-25 Intelligent Intellectual Property Holdings 2 Llc Systems and methods for a de-duplication cache
US10019353B2 (en) 2012-03-02 2018-07-10 Longitude Enterprise Flash S.A.R.L. Systems and methods for referencing data on a storage medium
US10339056B2 (en) 2012-07-03 2019-07-02 Sandisk Technologies Llc Systems, methods and apparatus for cache transfers
US9612966B2 (en) 2012-07-03 2017-04-04 Sandisk Technologies Llc Systems, methods and apparatus for a virtual machine cache
US10346095B2 (en) 2012-08-31 2019-07-09 Sandisk Technologies, Llc Systems, methods, and interfaces for adaptive cache persistence
US9058123B2 (en) 2012-08-31 2015-06-16 Intelligent Intellectual Property Holdings 2 Llc Systems, methods, and interfaces for adaptive persistence
US10359972B2 (en) 2012-08-31 2019-07-23 Sandisk Technologies Llc Systems, methods, and interfaces for adaptive persistence
US10318495B2 (en) 2012-09-24 2019-06-11 Sandisk Technologies Llc Snapshots for a non-volatile device
US10509776B2 (en) 2012-09-24 2019-12-17 Sandisk Technologies Llc Time sequence data management
US9842053B2 (en) 2013-03-15 2017-12-12 Sandisk Technologies Llc Systems and methods for persistent cache logging
US10558561B2 (en) 2013-04-16 2020-02-11 Sandisk Technologies Llc Systems and methods for storage metadata management
US10102144B2 (en) 2013-04-16 2018-10-16 Sandisk Technologies Llc Systems, methods and interfaces for data virtualization
US9842128B2 (en) 2013-08-01 2017-12-12 Sandisk Technologies Llc Systems and methods for atomic storage operations
US10019320B2 (en) 2013-10-18 2018-07-10 Sandisk Technologies Llc Systems and methods for distributed atomic storage operations
US10073630B2 (en) 2013-11-08 2018-09-11 Sandisk Technologies Llc Systems and methods for log coordination
US9946607B2 (en) 2015-03-04 2018-04-17 Sandisk Technologies Llc Systems and methods for storage error management

Similar Documents

Publication Publication Date Title
JP2009122850A (ja) ブロックデバイス制御装置及びアクセス範囲管理方法
US8892840B2 (en) Computer system and data migration method
US9329795B2 (en) Logical volume transfer method and storage network system
JP4869368B2 (ja) ストレージ装置及び仮想化装置
JP5124103B2 (ja) 計算機システム
US7975115B2 (en) Method and apparatus for separating snapshot preserved and write data
JP4648751B2 (ja) 記憶制御システム及び記憶制御方法
JP4818812B2 (ja) フラッシュメモリストレージシステム
US8484425B2 (en) Storage system and operation method of storage system including first and second virtualization devices
US8204858B2 (en) Snapshot reset method and apparatus
US7558916B2 (en) Storage system, data processing method and storage apparatus
CN103793271B (zh) 用于在镜像卷之间进行切换的方法和系统
JP4990828B2 (ja) ストレージ装置及びこれの制御方法
JP2009043030A (ja) ストレージシステム
JP2008269374A (ja) ストレージシステムおよびその制御方法
JP2006184949A (ja) 記憶制御システム
US20130138916A1 (en) Storage apparatus and its control method
US10503440B2 (en) Computer system, and data migration method in computer system
US20180307427A1 (en) Storage control apparatus and storage control method
US11112973B2 (en) Computer system and data management method
JP6579149B2 (ja) ストレージ制御装置、及びストレージ制御プログラム
JP2015501959A (ja) ストレージシステムおよび記憶制御方法
US11755249B2 (en) Storage system including storage nodes to determine cache allocations to implement cache control

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100715

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100810

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20101207