〈実施例1〉
以下、本発明の一実施例を図1〜図5及び図13により説明する。
図1において、本実施例は、CPU1、ディスクアレイコントローラ(以下ADC)2、ディスクアレイユニット(以下ADU)3により構成される。ADU3は、複数の論理グループ10により構成され、個々の論理グループ10は、m台のSCSIドライブ12と、各々のSCSIドライブ12とADC2を接続するドライブパス9−1から9−4により構成される。なお、このSCSIドライブ12の数は、本発明の効果を得るには特に制限は無い。この論理グループ10は障害回復単位で、この論理グループ10内の各SCSIドライブ12内の各データによりパリティを作成する。本実施例では、m−1台の個々のSCSIドライブ12内のデータから各々のパリティが作成される。
次に、ADC2の内部構造について図1を用いて説明する。
ADC2は、チャネルパスディレクタ5と、2個のクラスタ13と、バッテリバックアップ等により不揮発化された半導体メモリであるキャッシュメモリ7により構成される。このキャッシュメモリ7には、データとアドレス変換用テーブルが格納されている。このキャッシュメモリ7およびその中のアドレス変換用テーブルは、ADC2内の全てのクラスタにおいて共有で使用される。
クラスタ13は、ADC2内において独立に動作可能なパスの集合で、各クラスタ13間においては、電源、回路は全く独立となっている。クラスタ13は、チャネル、キャッシュメモリ7間のパスであるチャネルパス6と、キャッシュメモリ7とSCSIドライブ12間のパスであるドライブパス8−1から8−4が、それぞれ、2個ずつで構成されている。それぞれのチャネルパス6−1から6−4とドライブパス8は、キャッシュメモリ7を介して接続されている。CPU1より発行されたコマンドは、外部インターフェースパス4を通って、ADC2のチャネルパスディレクタ5に発行される。
ADC2は、2個のクラスタ13により構成され、それぞれのクラスタは2個のパスで構成されるため、ADC2は合計4個のパスにより構成される。このことから、ADC2では、CPU1からのコマンドを同時に4個まで受け付けることが可能である。そこで、CPU1からコマンドが発行された場合、ADC2内のチャネルパスディレクタ5により、コマンドの受付が可能かどうか判断する。
図2は、図1のチャネルパスディレクタ5と、1クラスタ13−1内の内部構造を示した図である。
図2に示すように、CPU1からADC2に送られてきたコマンドは、インターフェースアダプタ(以下IF Adp)15により取り込まれ、マイクロプロセッサであるMP1 20は、クラスタ内の外部インターフェースパス4の中で使用可能なパスがあるかを調べ、使用可能な外部インターフェースパス4がある場合は、MP1 20は、チャネルパススイッチ16を切り換えてコマンドの受付け処理を行ない、受け付けられない場合は、受付不可の応答をCPU1へ送る。
本実施例では、ADU3を構成するSCSIドライブ12は、SCSIインターフェースのドライブを使用する。CPU1をIBMシステム9000シリーズのような大型汎用計算機とした場合、CPU1からは、IBMオペレーティングシステム(OS)で動作可能なチャネルインターフェースのコマンド体系にのっとってコマンドが発行される。そこで、SCSIドライブ12をSCSIインターフェースのドライブを使用した場合、CPU1からのコマンドを、SCSIインターフェースのコマンド体系にのっとったコマンドに変換する必要が生じる。この変換は、コマンドのプロトコル変換とアドレス変換に大きく分けられる。以下にアドレス変換について説明する。
CPU1から指定されるアドレスは、図12に示すように、当該データが格納されているトラックが所属するシリンダの位置と、そのシリンダ内において当該データが格納されているトラックを決定するヘッドアドレスと、そのトラック内のレコードの位置を特定する。具体的には、要求データが格納されている当該ドライブの番号(CPU指定ドライブ番号)と、当該ドライブ内のシリンダ番号であるシリンダアドレス(CC)と、シリンダにおいてトラックを選択するヘッドの番号であるヘッドアドレス(HH)と、レコードアドレス(R)からなるCCHHRである。
従来のCKDフォーマット対応の磁気ディスクサブシステム(IBM3990−3390)では、このアドレスに従ってドライブへアクセスすれば良い。しかし、本実施例では、複数のSCSIドライブ12により、従来のCKDフォーマット対応の磁気ディスクサブシステムを論理的にエミュレートする。つまり、ADC2は、複数のSCSIドライブ12が従来のCKDフォーマット対応の磁気ディスクサブシステムで使用されているドライブ1台に相当するように、CPU1にみせかける。このため、 MP1 20は、CPU1から指定してきたアドレス(CCHHR)をSCSIドライブのアドレスに変換する。このアドレス変換には、以下に示すようなアドレス変換用のテーブル40(以下アドレステーブルとする)が使用される。
ADC2内のキャッシュメモリ7には、その内部の適当な領域に、図3に示すようなアドレステーブル40が格納されている。本実施例では、CPU1が指定してくるドライブは、CKDフォーマット対応の単体ドライブである。しかし、本発明では、CPU1が単体と認識しているドライブが、実際は複数のSCSIドライブ12により構成されるため、論理的なドライブとして定義される。このため、ADC2のMP1 20は、CPU1より指定してきたアドレス(CPU指定ドライブ番号41とCCHHR46)を、SCSIドライブ12に対するSCSIドライブアドレス42(SCSIドライブ番号43とそのSCSIドライブ内のアドレス(以下SCSI内Addrとする)44)に変換する。
アドレステーブル40は、CPU1が指定するCPU指定ドライブ番号41と、SCSIドライブアドレス42により構成される。SCSIドライブアドレス42は、SCSIドライブ12のアドレスであるSCSIドライブ番号43と、そのSCSIドライブ内の実際にデータが格納されているアドレスであるSCSI内Addr44と、論理グループ10内において、そのSCSI内Addr44により決定されるパリティグループにおけるパリティが格納されているSCSIドライブ番号(パリティドライブ番号50)と、二重化領域(スペース領域)が格納されているSCSIドライブ番号(スペースドライブ番号51)により構成されている。
このアドレステーブル40では、論理アドレス45により、SCSIドライブ番号43とSCSI内Addr44を決定する。アドレステーブル40のSCSIドライブアドレス42に登録されているSCSIドライブ番号43のSCSIドライブ12により論理グループ10は構成される。
この論理グループ10内の同一SCSI内Addr44において、パリティが格納されているSCSIドライブ番号43をパリティドライブ番号50に登録し、スペース領域が確保されているSCSIドライブ番号43をスペースドライブ番号51に登録する。
スペースドライブ番号51は、スペース領域が確保されているSCSIドライブ番号の他に、SDフラグ53により構成される。SDフラグ53は、スペース領域に格納されているデータが有効で、書き込み処理においてスペース領域として使用できない場合はオン(1)となり、無効で、スペース領域として使用可能な場合はオフ(0)となる。この論理グループ10は、データとこのデータと関連するパリティにより構成されるパリティグループと、スペース領域により構成される。
論理アドレス45には、CPU1から指定されるアドレスであるCPU指定ドライブ番号41と、CCHHRの中でCCHHR46が登録されており、それ以外に、この論理アドレス45のデータがキャッシュメモリ7内に存在する場合に、そのデータのキャッシュメモリ7内のアドレスを格納するキャッシュアドレス47と、キャッシュメモリ7内にその論理アドレス45のデータを保持している場合にオン(1)が登録されるキャッシュフラグ48と、その論理アドレス45にはスペース領域が確保されている場合にオン(1)となる無効フラグ49と、キャッシュメモリ7内の書き込みデータがドライブに書き込まれている場合にオン(1)となるドライブフラグ52により構成される。
以上のように、アドレステーブル40によりCPU指定ドライブ番号41とCCHHR46を論理アドレス45に変換し、そのデータが実際に格納されているSCSIドライブ番号43とSCSI内Addr44を決定する。
例えば、図3において、CPU1から、CPU指定ドライブ番号41としてDrive#1、CCHHR46がADR8のデータに対して要求を発行してきた場合、アドレステーブル40において、CPU指定ドライブ番号41がDrive#1の領域で各論理アドレス45内のCCHHR46を調べ、CCHHR46がADR8の論理アドレス45を探す。図3においては、論理アドレス45として、Data#23(D#23)でCCHHR46がADR8となっており、Data#23(D#23)が当該論理アドレス45である。
このData#23(D#23)は、アドレステーブル40から、SD#2のSCSIインターフェースのSCSIドライブ12内のSCSI内Addr44として、DADR8に該当することが分かり、物理的なアドレスへ変換される。また、このData#23(D#23)に対応するパリティは、パリティドライブ番号50から、Data#23(D#23)と同一のSCSI内Addr44のDADR8のSD#4のSCSIドライブ12に格納されており、スペアドライブ番号51から、SDフラグ53がオン(1)のためSD#4、5のSCSI内Addr44がDADR8に二重化して格納されているデータは有効で、この領域は二重化領域(スペア領域)として使用することは禁止されている。
このように、CPU1から指定されたアドレスを論理アドレス45に変換し、実際に読み出し/書き込みを行うSCSIドライブ12の物理的なアドレスに変換した後、SD#2のSCSIドライブ12のData#23(D#23)に対し、読み出しまたは書き込み要求が発行される。この時、アドレステーブル40において、Data#23(D#23)の論理アドレス45ではキャッシュフラグ48がオン(1)のため、このデータはキャッシュメモリ7内のCADR2、1に存在する。もし、キャッシュフラグ48がオフ(0)であれば、CADR2、4のキャッシュメモリ7内には、当該データは存在しない。また、このデータは無効フラグ49がオフ(0)のため、このデータは有効となる。更に、ドライブフラグ52がオン(1)のため、このデータはキャッシュメモリ7からドライブに既に書き込まれている。
この、アドレステーブル40は、システムの電源をオンした時に、MP1 20により、論理グループ10内のある特定のSCSIドライブ12からキャッシュメモリ7に、CPU1は関知せずに自動的に読み込まれる。一方、電源をオフする時は、MP1 20により、キャッシュメモリ7内のアドレステーブル40を、読み込んできたSCSIドライブ12内の所定の場所に、CPU1は関知せずに自動的に格納する。
次に、ADC2内での具体的なI/O処理について、図1、図2を用いて説明する。CPU1より発行されたコマンドは、IF Adp15を介してADC2に取り込まれ、MP1 20により、読み出し要求か書き込み要求か解読される。まず、読み出し要求の場合の処理方法を以下に示す。
MP1 20が読み出し要求のコマンドを認識すると、MP1 20は、CPU1から送られてきたCPU指定ドライブ番号41とCCHHR46(以下両方を併せてCPU指定アドレスとする)についてアドレステーブル40を参照し、当該データの論理アドレス45への変換を行ない、論理アドレス45に登録されているキャッシュメモリ7内に存在するかどうかキャッシュフラグ48を調べ、判定する。
キャッシュフラグ48がオンでキャッシュメモリ7内に格納されている場合(キャッシュヒット)は、MP1 20が、キャッシュメモリ7から当該データを読み出す制御を開始し、キャッシュメモリ7内に無い場合(キャッシュミス)は、当該ドライブ12からその内部の当該データを読み出す制御を開始する。
キャッシュヒット時、MP1 20は、アドレステーブル40により、CPU1が指定してきたCPU指定アドレスから論理アドレス45に変換し、論理アドレス45内のキャッシュアドレス47によりキャッシュメモリ7のアドレスに変換し、キャッシュメモリ7へ当該データを読み出しに行く。具体的には、MP1 20の指示の元で、キャッシュアダプタ回路(C Adp)24によりキャッシュメモリ7から当該データは読み出される。
C Adp24は、キャッシュメモリ7に対するデータの読み出し、書き込みをMP1 20の指示で行う回路であり、キャッシュメモリ7の状態の監視、各読み出し、書き込み要求に対して排他制御を行う回路である。C Adp24により読み出されたデータは、データ制御回路(DCC)22の制御により、チャネルインターフェース回路(CH IF)21に転送される。
CH IF21では、CPU1におけるチャネルインターフェースのプロトコルに変換し、チャネルインターフェースに対応する速度に速度調整する。具体的には、CPU1、ADC2間のチャネルインターフェースを光のインターフェースにした場合、光のインターフェースのプロトコルをADC2内では電気処理でのプロトコルに変換する。CH IF21におけるプロトコル変換および速度調整後は、チャネルパスディレクタ5において、チャネルパススイッチ16が外部インターフェースパス4を選択し、IF Adp15によりCPU1へデータ転送を行う。
一方、キャッシュミス時は、キャッシュヒット時と同様に、アドレステーブル40によりCPU指定アドレスを論理アドレス45に変換し、論理アドレス45から、当該SCSIドライブ番号とそのSCSIドライブ内の実際にデータが格納されているSCSI内Addr44を認識し、そのアドレスに対し、MP1 20は、Drive IF28に対し、当該ドライブ12への読み出し要求を発行するように指示する。
Drive IF28では、SCSIの読み出し処理手順に従って、読み出しコマンドをドライブユニットパス9−1または9−2を介して発行する。Drive IF28から読み出しコマンドを発行された当該SCSIドライブ12においては、指示されたSCSI内Addr44へシーク、回転待ちのアクセス処理を行う。当該SCSIドライブ12におけるアクセス処理が完了した後、当該SCSIドライブ12は、当該データを読み出しドライブユニットパス9を介してDrive IF28へ転送する。
Drive IF28では、転送されてきた当該データをSCSIドライブ側のキャッシュアダプタ回路(C Adp)14に転送し、(C Adp)14では、キャッシュメモリ7にデータを格納する。この時、C Adp14は、キャッシュメモリ7にデータを格納することをMP1 20に報告する。
MP1 20は、この報告を元に、アドレステーブル40のCPUが読み出し要求を発行したCPU指定アドレスに対応した論理アドレス45のキャッシュフラグ48をオン(1)にし、キャッシュアドレス47に、キャッシュメモリ7内のデータを格納したアドレスを登録する。キャッシュメモリ7にデータを格納し、アドレステーブル40のキャッシュフラグ48をオン(1)にし、キャッシュメモリ7内のアドレスを更新した後は、キャッシュヒット時と同様な手順で、CPU1へ当該データを転送する。
一方、書き込み時は、以下のように処理される。
書き込み処理は、ユーザが書き込み先のアドレス(CPU指定アドレス)を指定し、その位置にユーザはデータを書き込んでいると認識する。つまり、ユーザは、固定の位置にアドレスを指定していると認識している。
CPU1から、指定アドレス、すなわち、図3に示すアドレステーブル40においてCPU指定ドライブ番号41がドライブ#1で、CCHHR46がADR8に対して、書き込み命令が発行されたとする。まず、ADC2のMP1 20は、CPU1から、ドライブ#1のCCHHR46がADR8に対する書き込み要求のコマンドを受け取った後、コマンドを受け取ったMP1 20が所属するクラスタ13内の各チャネルパス6において処理可能かどうかを調べ、可能な場合は処理可能だという応答をCPU1へ返す。CPU1では、処理可能だという応答を受け取った後に、ADC2へデータを転送する。
この時、ADC2では、MP1 20の指示により、チャネルパスディレクタ5において、チャネルパススイッチ16が、当該外部インターフェースパス4とIF Adp15を当該チャネルパス6と接続し、CPU1とADC2間の接続を確立する。
CPU1とADC2間の接続を確立後、CPU1からのデータ転送を受け付ける。CPU1から転送されてきた書き込みデータ(以下新データとする)は、MP1 20の指示により、CH IF21によりプロトコル変換を行ない、外部インターフェースパス4での転送速度からADC2内での処理速度に速度調整する。CH IF21におけるプロトコル変換および速度制御の完了後、データは、DCC22によるデータ転送制御を受け、C Adp24に転送され、C Adp24によりキャッシュメモリ7内に格納される。
この時、CPU1から送られてきた情報がCPU指定アドレスの場合は、データが転送されてくる前に必ずCPU指定アドレスがCPU1より転送されているため、読み出しと同様に、アドレステーブル40によりアドレス変換を行い、論理アドレス45に変換する。また、CPU1から送られてきた情報がデータの場合は、キャッシュメモリ7に格納したアドレスを上記アドレス変換により変換した論理アドレス45のキャッシュアドレス47に登録する。この時、書き込みデータをキャッシュメモリ7内に保持するときは、論理アドレス45のキャッシュフラグ48をオン(1)とし、保持しない場合は、キャッシュフラグ48をオフ(0)とする。
尚、キャッシュメモリ7内に保持されている新データに対し、さらに書き込み要求がCPU1から発行された場合は、キャッシュメモリ7内に保持されている新データを書き替える。
キャッシュメモリ7に格納された新データは、この新データにより新しくパリティを更新し(以下、更新されたパリティを新パリティとする)、以下のように、論理グループ10内のSCSIドライブ12へ新データと新パリティを格納する。
図3に示すように、スペース領域及びパリティはデータと同じ様に扱われ、論理グループ10内の各SCSIドライブ12に分散して格納されている。論理グループ10を構成する各SCSIドライブ12内のデータについては、行方向(同一SCSI内Addr44)にパリティグループが構成され、このパリティグループ内のデータにおいてパリティが作成される。つまり、パリティグループは、データとパリティにより構成され、論理グループ10は、パリティグループとスペース領域で構成される。
図3において具体的な例を示す。
SCSI内Addr44がDADR1については、SD#1のSCSIドライブ12に格納されているData#1(D#1)と、SD#2のSCSIドライブ12に格納されているData#2(D#2)と、SD#3のSCSIドライブ12に格納されているData#3(D#3)によりパリティが作成される。このパリティが、SD#6のSCSIドライブ12に格納され、これらがパリティグループを構成する。
また、論理グループ10は、SD#4のSCSIドライブ12に確保されているスペース領域(S)と、SD#5のSCSIドライブ12に確保されているスペース領域(S)と、上記パリティグループにより構成される。
MP1 20は、アドレステーブル40を参照し、データ、スペース領域、パリティが格納されているSCSIドライブ12を認識する。具体的には、アドレステーブル40においてCPU指定アドレスが指定したCPU指定ドライブ番号41に対応する領域において、CPU指定アドレスで指定したCCHHR46と一致しているSCSIドライブアドレス42に登録されている論理アドレス45をMP1 20は探す。MP1 20は、CPU指定アドレスから論理アドレス45への変換後、論理アドレス45から、その論理アドレス45が格納されているSCSIドライブ番号43と、そのSCSIドライブ12内の物理的なアドレスであるSCSI内Addr44に変換する。
パリティは、論理グループ10を構成する各SCSIドライブ12において、各SCSI内Addr44が同一のデータに対し作成され、そのパリティもデータと同一のSCSI内Addr44に格納される。このため、アドレステーブル40のパリティドライブ番号50とスペースドライブ番号51において、パリティおよびスペース領域は、それぞれが格納されているSCSIドライブ番号43のみが登録されている。
そこで、MP1 20では、アドレステーブル40により、パリティドライブ番号50とスペースドライブ番号51を決定することが可能となる。つまり、パリティドライブ番号50とスペースドライブ番号51を決定することにより、パリティおよびスペース領域は、データと同一のSCSI内Addr44に格納されていることから、それらのアドレスを決定することになる。このように、データ、スペース領域、パリティが格納されているSCSIドライブ12を認識した後は、Drive IF28に対し、各々の当該SCSIドライブ12に対し書き込み処理を行うように指示する。
本発明における書き込み処理とは、論理グループ10において、新データをキャッシュメモリ7から実際にSCSIドライブ12に書き込む処理と、新データの書き込みによりパリティを新たに作り直さなければならないため、この新パリティを作成するための書き込み前のデータ(以下旧データ)と書き込み前のパリティ(以下旧パリティとする)を読み出し、新パリティを作成する処理と、書き込み後の新パリティを実際にSCSIドライブ12に書き込む一連の処理をいう。この新データをキャッシュメモリ7に格納した後の一連の書き込み処理のフローチャートを図5に示す。
図4に示すように、CPU1からSD#1のSCSIドライブ12のData#1(D#1)の論理アドレスに対し、ND#1のデータの書き込み要求が発行された場合、先に示したように、CPU1からキャッシュメモリ7に新データは一旦格納される。新データのキャッシュメモリ7への格納後、書き込み処理は次の手順で行っていく。キャッシュメモリ7に新データ(ND#1)が格納された後、MP1 20は書き込み処理に入り、アドレステーブル40により、SD#1のSCSIドライブ12が所属する論理グループ10で、Data#1(D#1)のSCSI内Addr44であるDADR1に対し、スペース領域が確保されているSD#4,5のSCSIドライブ12に対し、使用権の獲得を行う。
SD#4、5のSCSIドライブ12の使用権を獲得した後は、図5のフローチャートに示すように書き込み処理500を行っていく。
先ず、MP1 20は、アドレステーブル40のスペースドライブ番号51のSDフラグ53をチェックし、SDフラグ53がオフ(0)の場合、スペース領域として使用でき、オン(1)の場合は使用できないと判断する(502)。MP1 20は、このSDフラグ53により、SD#4、5のSCSIドライブ12にスペース領域が確保されているかを判断する。そして、SDフラグ53がオフ(0)の場合、キャッシュメモリ7に格納されているND#1をこのSD#4,5に二重化して書き込み(504)、MP1 20はCPU1へ書き込み完了の報告を行う(508)。
一方、ステップ502のチェックにより、SDフラグ53がオン(1)の場合は、図13に示すように、書き込む新データ(ND#1)をキャッシュメモリ7に書き込んだ後、MP1 20は優先的に前の書き込み処理におけるパリティの作成を指示し、このパリティを当該SCSIドライブ12に書き込む(1310)。前の書き込み処理におけるパリティの作成が完了し、当該SCSIドライブへの書き込みが完了すると、MP1 20は、アドレステーブル40においてスペースドライブ番号51にSDフラグ53をオフ(0)とし(1308)、キャッシュメモリ7に格納されているND#1を二重化して書き込み(1316)、MP1 20は、CPU1へ書き込み完了の報告を行う(1320)。
そこで、次に、SCSIドライブ12への新データ(ND#1)の書き込み方法を示す。
MP1 20は、アドレステーブル40のSDフラグ53がオフ(0)になっているのを確認後、Drive IF28に書き込むデータである新データ(ND#1)をスペース領域が確保されているSD#4とSD#5のSCSIドライブ12に書き込むよう指示する。Drive IF28では、SCSIの書き込み手順に従って、ドライブユニットパス9−1から9−4の中の2本を介して、SD#4とSD#5のSCSIドライブ12に書き込みコマンドを発行する。
Drive IF28から書き込みコマンドを発行された当該SCSIドライブ12では、Drive IF28から送られてきたCPU1が書き込み先のアドレスとして指定したCPU指定アドレスを論理アドレス45に変換し、論理アドレス45であるData#1に対応するSCSI内Addr44のDADR1へシーク、回転待ちのアクセス処理を行う。SD#4、5のSCSIドライブ12においてアクセス処理が完了し、書き込みが可能になり次第、C Adp14は、キャッシュメモリ7から書き込む新データ(ND#1)を読み出してDrive IF28へ転送する。
Drive IF28では、転送されてきた新データ(ND#1)をドライブユニットパス9−1から9−4の中の2本を介してSD#4、5のSCSIドライブ12へ転送する。新データ(ND#1)のSD#4、5のSCSIドライブ12への書き込みが完了すると、SD#4、5のSCSIドライブ12は、Drive IF28に完了報告を行ない、Drive IF28が、この完了報告を受け取ったことをMP1 20に報告する。
この時、アドレステーブル40において、書き込み前の旧データの論理アドレス45(Data#1、D#1)の無効フラグをオン(1)とし、書き込み前の論理アドレス45(Data#1、D#1)内のCCHHR46のアドレスを、新データ(ND#1)を二重化して書き込んだスペース領域の2つの論理アドレス45のCCHHR46に登録し、無効フラグをオフ(0)とし、ドライブフラグ52をオン(1)とする。また、キャッシュメモリ7内に書き込む新データ(ND#1)を保持する場合は、書き込み後の2つの論理アドレス45内のキャッシュアドレス47に、キャッシュメモリ7内の新データ(ND#1)が格納されているアドレスを登録し、キャッシュフラグ48をオン(1)とする。
この新データ(ND#1)をキャッシュメモリ7上に残さない場合、MP1 20は、この報告を元にアドレステーブル40のキャッシュフラグ48をオフ(0)にする。さらに、書き込みを行った論理グループ10内のSCSI内Addr44に対し、スペースドライブ番号51のSDフラグをオン(1)とする。
上記のようにアドレステーブル40の更新が完了すると、MP1 20は、SD#4とSD#5の両方のSCSIドライブ12からの完了報告を受け取った後、CPU1に対し擬似的に書き込み処理の終了報告を行う。SD#4、5のSCSIドライブ12に対する新データ(ND#1)の格納が完了しても、キャッシュメモリ7内には新データ(ND#1)が存在しており、パリティの更新はキャッシュメモリ7内に格納されている新データ(ND#1)で行う。
以上のように、MP1 20がCPU1に対し擬似的に終了報告を行った後は、CPU1は書き込み処理を終了したと認識しているが、MP1 20は、新しいパリティを作成して当該SCSIドライブ12書き込んでいないため、まだ書き込み処理は終了していない。そこで、MP1 20がCPU1に対し終了報告を行った後に、MP1 20が独自に新しいパリティを作成し、当該SCSIドライブ12に書き込む。この方法について以下に説明する。
MP1 20は、CPU1に対し書き込み処理の終了報告を行った後、図5に示すように、CPU1からの読み出し、書き込み要求の状況(IO状況)を監視する(510)。具体的には、MP1 20が、当該論理グループ10に対するCPU1からの読み出し、書き込み要求の単位時間当りの回数を数える。当該論理グループ10に対するこの回数が、予めユーザまたはシステム管理者により設定された数より少なく、パリティの作成およびこの作成したパリティを書き込むSCSIドライブ12が所属する論理グループ10に対する読み出し、書き込み要求がCPU1より発行されていない場合、パリティの作成およびパリティの当該SCSIドライブ12への書き込み処理を開始する。
新しくパリティを作成する場合、CPU1から書き込み先に指定されたアドレスに書き込まれているデータ(旧データ)と、更新するパリティ(旧パリティ)を読み出し、新しく作成したパリティ(新パリティ)をSCSIドライブ12に書き込む。この時、旧データと旧パリティを読み出すSCSIドライブ12と、新パリティを書き込む当該SCSIドライブ12に対し、MP1 20は、CPU1からの読み出し、書き込み要求と同様の擬似的な読み出し、書き込み要求を発行する。この、擬似的な読み出し、書き込み要求が発行されているSCSIドライブ12に対し、CPU1から読み出しまたは書き込み要求が発行された場合は、MP1 20は、CPU1からの読み出し、書き込み要求を受付、処理の待ち行列とする。
次に、新パリティの作成および当該SCSIドライブ12への作成したパリティの書き込み方法を具体的に示す。
MP1 20は、SD#1のSCSIドライブ12に対して旧データの読み出し要求、SD#6のSCSIドライブ#12に対して旧パリティの読み出し要求を発行するように、Drive IF28に指示する(514)。
Drive IF28から読み出しコマンドを発行された当該SCSIドライブ12では、Drive IF28から送られてきたSCSI内Addr44へシーク、回転待ちのアクセス処理を行う。キャッシュメモリ7内には新データ(ND#1)が存在しており、パリティの更新はキャッシュメモリ7内に格納されている新データ(ND#1)で行う。
もし、キャッシュメモリ7に新データ(ND#1)が存在していない場合は、スペース領域に二重化して書き込まれているデータをキャッシュメモリ7に読み出す。
SD#1、6のSCSIドライブ12において、シーク、回転待ちのアクセス処理が完了し、旧データ(D#1)および旧パリティ(P#1)の読み出しが可能になり次第、旧データ(D#1)および旧パリティ(P#1)を読み出し、キャッシュメモリ7に格納する。SD#1のSCSIドライブ12から旧データ(D#1)を、SD#6のSCSIドライブ12から旧パリティ(P#1)を読み出し、それぞれをキャッシュメモリ7に格納した後、MP1 20は、キャッシュメモリ7内に格納されている新たな書き込みデータ(ND#1)で、排他的論理和により、更新後の新パリティ(NP#1)を作成するようにPG36に指示を出し、PG36において新パリティ(NP#1)を作成し、キャッシュメモリ7に格納する(516)。
新パリティ(NP#1)をキャッシュメモリ7に格納した後、MP1 20では、新パリティ(NP#1)を格納する論理アドレス45のキャッシュアドレス47に、キャッシュメモリ7内の新パリティ(NP#1)を格納したアドレスを登録し、キャッシュフラグ48をオン(1)とし、無効フラグ49とドライブフラグ52をオフ(0)とする(518)。新パリティ(NP#1)の作成が完了したことを認識し、SD#6のSCSIドライブ12にIO要求が発行されていない時に、更新後の新パリティ(NP#1)を書き込むように、Drive IF28に対し指示する。
SD#6のSCSIドライブ12への更新後の新パリティ(NP#1)の書き込み方法(520)は、先に述べた新たな書き込みデータ(ND#1)をSD#4、5のSCSIドライブ12に書き込んだ方法と同じである。新パリティ(NP#1)の作成が完了したら、MP1 20は、Drive IF28に、SD#6のSCSIドライブ12に対し書き込みコマンドを発行するように指示し、当該SCSIドライブ12では、指示SCSI内Addr44へシーク、回転待ちのアクセス処理を行う。
新パリティ(NP#1)は、既に作成されキャッシュメモリ7に格納されており、SD#6のSCSIドライブ12におけるアクセス処理が完了した場合、C Adp14は、キャッシュメモリ7から新パリティ(NP#1)を読み出してDrive IF28へ転送する。Drive IF28では、転送されてきた新パリティ(NP#1)をドライブユニットパス9−1から9−4の中の1本を介してSD#6のSCSIドライブ12へ転送する(522)。
新パリティ(NP#1)のSD#6のSCSIドライブ12への書き込みが完了すると、SD#6のSCSIドライブ12は、Drive IF28に完了報告を行ない、Drive IF28がこの完了報告を受け取ったことをMP1 20に報告する。この時、MP1 20は、この新データ(ND#1)をキャッシュメモリ7上に残さない場合は、この報告を元にアドレステーブル40のキャッシュフラグ48をオフ(0)にし、キャッシュメモリ7上に残す場合はオン(1)とする。さらに、アドレステーブル40において、書き込み後の新パリティ(NP#1)の論理アドレス45の無効フラグをオフ(0)とし、ドライブフラグ52をオン(1)とする(524)。
このような、新しく作成した新パリティ(NP#1)を当該SCSIドライブ12に書き込んだ後は、旧データ(D#1)が格納されていたSD#1のSCSIドライブ12の旧データ(D#1)と二重化されている新データ(ND#1)が格納されているSD#4、5のSCSIドライブ12の中で、SCSIドライブ番号の小さいSD#4のSCSIドライブ12に格納されている新データ(ND#1)をスペース領域として解放し、次の書き込み処理用にスペース領域として登録する。この登録の方法は、MP1 20が、アドレステーブル40においてSD#1とSD#4のSCSI内Addr44がD ADR1の旧データ(D#1)と、二重化されていた新データ(ND#1)の一方が格納されている論理アドレス45において、無効フラグをオン(1)とし、更に、スペースドライブ番号51にSD#1とSD#4を登録し、SDフラグをオフ(0)にする(526)。
以上のように、書き込み処理時に書き込む新データ(ND#1)を一旦二重化して論理グループ10内に格納しておき、後でCPU1からの読み出し、書き込み要求が比較的少ないときに、新パリティ(NP#1)を作成し、SCSIドライブ12に格納することで、書き込み処理時の応答時間が短縮され、従来のように新パリティ(NP#1)の作成により他の読み出し、書き込み処理が待たされることが減少する。
もし、新パリティ(NP#1)を当該SCSIドライブ12への書き込み前に論理グループ10内のSCSIドライブ12に障害が発生した場合は、図14に示すように回復処理を行う。
図4(a)に示すように、SD#6のSCSIドライブ12に対し新パリティ(NP#1)を書き込む前に(1402)、SD#1,2、3の内のどれか1台のSCSIドライブ12に障害が発生した場合(1406)、障害が発生していないSCSIドライブ12からのデータと旧パリティから、障害が発生したSCSIドライブ12内のデータを回復することが可能となる(1410)。例えば、SD#1のSCSIドライブ12に障害が発生した場合、SD#2、3のD#2、D#3と、SD#6のSCSIドライブ1からの旧パリティ(P#1)から、SD#1のSCSIドライブ12内のデータであるD#1を回復することが可能となる。また、新データ(ND#1)が二重化して格納されているSD#4、5のどちらか一方に障害が発生した場合は、二重化データの一方のデータにより回復することが可能となる(1412)。
図4(b)に示すように、SD#6のSCSIドライブ12に対し新パリティ(NP#1)を書き込んだ後は、SD#2、3、5のSCSIドライブ12内のデータ(D#2、3、ND#1)に対し新パリティ(NP#1)が作成されてSD#6のSCSIドライブ12に格納されており、SD#2、3、5のSCSIドライブ12の中の1台のSCSIドライブ12に障害が発生した場合、残りの正常なSCSIドライブ12内のデータとSD#6のSCSIドライブ12内のパリティにより、障害が発生したSCSIドライブ12内のデータは回復される。
例えば、SD#2のSCSIドライブ12に障害が発生した場合、SD#2のSCSIドライブ12内のデータ(D#2)は、SD#3のSCSIドライブ12内のデータ(D#3)と、SD#4のSCSIドライブ12内のデータ(ND#1)と、SD#6のSCSIドライブ12内のパリティ(NP#1)から、障害が発生したSD#2のSCSIドライブ12内のデータ(D#2)は回復される。
本発明のように、書き込み処理において、スペース領域に書き込みデータ(新データ)をとりあえず二重化して格納し、この段階でCPU1に対し書き込み処理の終了報告を行うことにより、CPU1にとっては、この二重化してSCSIドライブ12に書き込む時間が書き込み処理時間になる。
従来のアレイディスクでは、図12に示すように、書き込み時に平均1.5回転の回転待ち時間が必要としたのが、もし、論理グループ10を構成するSCSIドライブ12の回転を同期させた場合は、回転待ちは平均0.5回転となる。また、新パリティをSCSIドライブ12に書き込む前に論理グループ10を構成するSCSIドライブ12に障害が発生しても、先に述べたように、旧パリティと二重化された新データにより従来のアレイディスクと同様に、障害回復を行うことが可能となる。
本実施例では、パリティおよびパリティの作成に関与したデータとスペース領域は、論理グループ10を構成する各SCSIドライブ12において、各SCSI内Addr44を同一とした。しかし、アドレステーブル40の各論理アドレス45とパリティドライブ番号50、スペースドライブ番号51において、論理グループ10のアドレスを付加することにより、論理グループ10を構成する各SCSIドライブ12において、SCSI内Addr44を任意とすることが可能となる。
本実施例では、書き込み時の回転待ち時間を減少させる目的で、書き込みデータを一旦二重化してSCSIドライブ12に書き込み、後の適当なタイミングでパリティを更新し、パリティの更新後は二重化した書き込みデータの一方を開放する方法について説明した。本発明は、上記のような性能向上の観点とは別に、以下に示すような応用例も考えられる。
パリティによる信頼性と二重化による信頼性では、二重化による信頼性の方が、信頼性向上のために必要とする容量は大きいが、信頼性は高くなる。この特徴を活かし、本発明の応用として、最新に書き込まれたデータ、または、頻繁に書き込み要求が発行されるデータについては、二重化されているため、高信頼とし、あまり書き込み要求が発行されないデータについては、二重化ほど高信頼ではないが、信頼性向上のために必要とする容量が二重化と比較して少なくて済む、パリティにより信頼性を確保する。
つまり、あまり書き込み要求が発行されないデータに対しては、信頼性は二重化ほど高くないがパリティを付けるだけで済む、パリティで信頼性を確保し、最新に書き込まれたデータ、または頻繁に書き込み要求が発行されるデータについては、パリティと比較して容量を多く必要とするが信頼の高い二重化で高信頼とする、二段階の信頼性のレベルを設定することも可能である。
〈実施例2〉
本発明の他の実施例を図6を中心にして説明する。本実施例では、実施例1で示したシステムにおいて、SCSIドライブ12に障害が発生した時に、その障害が発生したSCSIドライブ12内のデータを回復し、それを格納するための領域にスペース領域を使用する例を示す。
本発明では、図3に示すように、論理グループ10内の各SCSIドライブ12では、その内部の各々対応する同一SCSI内Addr44のデータにより、パリティグループを構成する。具体的には、SD#1、2、3のSCSIドライブ12内のData#1、2、3(D#1、2、3)で、PG36によりパリティ#1(P#1)が作られ、SD#6のSCSIドライブ12内に格納される。本実施例では、パリティは奇数パリティとし、Data#1、2、3(D#1、2、3)の各データにおける各々対応するビットについて1の数を数え、奇数であれば0、偶数であれば1とする(排他的論理和)。もし、SD#1のSCSIドライブ12に障害が発生したとする。この時、Data#1(D#1)は読み出せなくなる。
本実施例では、パリティグループ当りにパリティを1個しか持っていないため、1台のSCSIドライブ12の障害はデータを復元できるが、データの復元が完了する前に更にもう一台のSCSIドライブ12に障害が発生した場合、復元出来ない。そこで、この様な場合、2台目のSCSIドライブ12障害が発生する前に、残りのData#2、3(D#2、3)とパリティ#1(P#1)をキャッシュメモリ7に転送し、MP1 20がPG36に対し、Data#1(D#1)を復元する回復処理を早急に行うように指示する。この回復処理を行ないData#1(D#1)を復元した後は、MP1 20は、このData#1(D#1)をSD#4または6のどちらかのスペース領域に格納する。
これにより、スペース領域を実施例1で示したような、書き込み処理時の回転待ち時間を短縮させるためだけではなく、SCSIドライブ12に障害が発生したときに、復元したデータを格納するためのスペア領域としても活用する。この様に、MP1 20が、スペース領域に回復したData#1(D#1)を格納した後は、キャッシュメモリ7にある図3に示すアドレステーブル40において、スペースドライブ番号51の中で、回復データを格納した方のスペースドライブ番号51を削除し、この削除したドライブ番号に対する論理アドレス45に、回復したData#1(D#1)の論理アドレス45の内容を複写する。
図6に示すように、SD#1のSCSIドライブ12には、Data#1(D#1)の他にスペース領域、パリティ、Data#13、16、19、22(D#13、16、19、22)が格納されている。スペース領域については、回復処理を行ない復元する必要は無い。
パリティ#3(P#3)は、SD#3、4、5のSCSIドライブ12から、Data#7、8、9(D#7、8、9)を読み出して新たに作成し、SD#2か6のSCSIドライブ12のスペース領域に格納する。Data#13(D#13)は、SD#3、5、6のSCSIドライブ12からパリティ#5(P#5)、Data#14、15(D#14、15)を読み出して、回復処理を行ない復元し、SD#2または4のSCSIドライブ12のスペース領域に格納する。
Data#16(D#16)は、SD#2、4、6のSCSIドライブ12からData#17(D#17)、パリティ#6(P#6)、Data#18(D#18)を読み出して、回復処理を行ない復元し、SD#3または5のSCSIドライブ12のスペース領域に格納する。以下、同様に、Data#19、22(D#19、22)と回復処理を行ない、論理グループ10内のスペース領域に格納していく。
この様に、SD#2、3、4、5、6のSCSIドライブ12内のスペース領域に、SD#1のSCSIドライブ12の回復データを全て格納した後は、スペース領域が論理グループ10において一つしかないため、実施例1で述べたような書き込み時の回転待ちを短くすることは出来ないため、従来のアレイディスクであるRAIDのレベル5の処理となる。また、SD#1のSCSIドライブ12の回復データを全て格納した後は、SD#2、3、4、5、6のSCSIドライブ12の中で更にもう一台SCSIドライブ12に障害が発生した場合、同様にその障害が発生したSCSIドライブ12内のデータについて回復処理を行ない、残りのスペース領域に格納し、処理を行える。
この様にして、論理グループ10内のスペース領域を全て使い切ってしまった場合は、障害SCSIドライブ12を正常のSCSIドライブ12に交換し、この交換した正常なSCSIドライブ12は全てスペース領域として論理グループを再構成する。
障害SCSIドライブ12を正常のSCSIドライブ12に交換した直後は、スペース領域が特定SCSIドライブ12に集中した形になっているため、このSCSIドライブ12が使用できずに待たされることが多くなり、ネックとなるため、実施例1で示した回転待ち時間を短縮する効果が効率的に発揮できない。しかし、時間が立つにつれて、スペース領域が分散されてSCSIドライブ12障害前の状態に戻っていき、次第に解消されていく。もし、この時間が問題となる場合は、SCSIドライブ12に障害が発生したことを感知した場合、正常なSCSIドライブ12に交換して、この交換した正常なSCSIドライブ12に障害が発生したSCSIドライブ12内のデータとパリティをユーザが復元することも可能とする。なお、この時スペース領域に関しては復元せずにスペース領域として空けておく。
本実施例では、この回復処理とスペース領域へ復元したデータを書き込む処理をMP1 20が独自に行う。この様に独自に行うことにより、SCSIドライブ12に障害が発生した場合、障害が発生したSCSIドライブ12を正常なSCSIドライブ12に交換し、回復したデータを書き込むのと比較して、本発明では、システムを使用するユーザがSCSIドライブ12に障害が発生すると直ぐに正常なSCSIドライブ12と交換する必要が無いため、ユーザの負担が軽くなる。
〈実施例3〉
本発明の第三の実施例を図7〜図11により説明する。
本実施例では、図7、8に示すように、論理グループ10単位にサブDKC11を設け、その内部に図9に示すように実施例1、2において示したキャッシュメモリ7内のアドレステーブル40と、RPC27、PG36、サブキャッシュ32と、それらを制御するマイクロプロセッサMP3 29を持たせたものを示す。本実施例におけるデータの処理手順は、実施例1および2で示したものと同様である。
以下、実施例1、2で示した処理手順と異なる部分のみを図10および図11を用いて示す。
本実施例では、図9に示すように、実施例1、2で示したキャッシュメモリ7内のアドレステーブル40をサブDKC11内のデータアドレステーブル(DAT)30に格納する。DAT30は、格納されているテーブルの形式や機能は実施例1、2と同様であるが、異なるのは、データを格納するSCSIドライブアドレス42が論理グループ10に限られている点と、メモリがアドレステーブル40を格納するデータを格納するのとは別の専用メモリである。ADC2内のGAT23は、CPU1から指示されたCPU指定アドレスから、そのCPU指定アドレスが指示する場所がADU3内のどの論理グループ10かを判定するのみである。キャッシュメモリ7内には、その特別な領域に、図10に示すような論理グループテーブル(LGT)60が格納されている。
LGT60は、図10に示すように、CPU1から指定されるCPU指定ドライブ番号41とCCHHR46に対応して、論理グループアドレス61が決定できるテーブルとなっている。また、LGT60には、CPU指定アドレスに対応するデータがキャッシュメモリ7内に存在する場合、そのデータのキャッシュメモリ7内のアドレスをキャッシュアドレス47に登録でき、また、キャッシュメモリ7内にデータが存在する場合はオン(1)とし、キャッシュメモリ7内に存在しない場合はオフ(0)とするキャッシュフラグ48が用意されている。
ユーザは、初期設定する際に自分の使用可能な容量に対する領域を確保するが、その際に、ADC2のMP1 20が、LGT60により論理グループ10を割当てる。この時、MP1 20は、LGT60にユーザが確保するために指定したCPU指定アドレスに対応する領域を登録する。
そこで、実際の読み出し、書き込み処理においては、GAT23は、LGT60により、CPU1から指定してきたCPU指定アドレスに対応した論理グループ10を認識することが可能となる。読み出し時は、GAT23が、LGCにより論理グループ10を確定し、その確定した結果をMP1 20に報告し、MP1 20が、この当該論理グループ10に対し読み出し要求を発行するようにDrive IF28に指示する。MP1 20から指示を受けたDrive IF28は、当該論理グループ10のサブDKC11に対し、読み出し要求とCPU1が指定するCPU指定アドレスを発行する。
サブDKC11では、マイクロプロセッサであるMP3 29が、この読み出し要求のコマンドとCPU指定アドレスを受け付け、実施例1と同様に、DAT30を参照して、Drive IF28から送られてきたCPU指定アドレスを当該データが格納されている論理グループ10内の論理アドレス45に変換し、この論理アドレス45から当該SCSIドライブアドレス42(SCSIドライブ番号43とその中のSCSI内Addr44)を確定する。
このアドレスの確定後、MP3 29は、当該SCSIドライブ12に対して読み出し要求を発行する。MP3 29から読み出し要求を発行されたSCSIドライブ12では、SCSI内Addr44へシーク、回転待ちを行ない、当該データの読み出しが可能になり次第、当該データをドライブアダプタ回路(Drive Adp)34に転送し、Drive Adp34は、サブキャッシュメモリ32に格納する。
サブキャッシュメモリ32に当該データの格納が完了した後、Drive Adp34は、MP3 29に格納報告を行ない、MP3 29は、DAT30の当該データの当該論理アドレス45内の当該キャッシュフラグ48をオン(1)とする。後に、当該キャッシュフラグ48がオン(1)のデータに対して読み出しまたは書き込み要求が発行された場合、サブキャッシュ32内で処理を行う。実施例1と同様に、MP3 29によるDAT30の更新が終了すると、MP3 29は、ADC2内のDrive IF28に対しデータ転送可能という応答を行ない、Drive IF28は、この応答を受け取るとMP1 20に対し報告する。
MP1 20は、この報告を受け取ると、キャッシュメモリ7への格納が可能なら、Drive IF28に対しサブDKC11からデータを転送するように指示する。Drive IF28では、MP1 20からの指示を受けると、サブDKC11のMP3 29に対し読み出し要求を発行する。この読み出し要求を受けたMP3 29は、サブキャッシュアダプタ回路(SCA)31に対しサブキャッシュ32から当該データを読みだすように指示し、SCA31は、実際にデータを読み出してDrive IF28にデータを転送する。Drive IF 28がデータを受け取った後は、実施例1、2で示した処理を行う。
一方、書き込み時は、読み出し時と同様に、当該論理グループ10を確定し、MP1 20は、Drive IF28に対し、当該論理グループ10のMP3 29に対し書き込み要求を発行するように指示する。当該論理グループ10内のMP3 29は、書き込み要求を受け付け、書き込みデータをサブキャッシュ32に格納した後は、図5のフローチャートに従って、実施例1、2と同様に処理を行う。本実施例では、実施例1、2の効果を実現することが可能である。
以上、磁気ディスク装置を用いたシステムを実施例として説明したが、本発明は、光ディスク装置を用いたシステムにおいても、同様な効果を発揮することが可能である。
1:CPU、2:レイディスクコントローラ(ADC)、3:アレイディスクユニット(ADU)、4:外部インターフェースパス、5:チャネルパスディレクタ、6:チャネルパス、7:キャッシュメモリ、8:ドライブパス、9:アレイディスクユニットパス、10:論理グループ、12:SCSIドライブ、13:クラスタ、14:ドライブ側キャッシュアダプタ(C Adp)、15:インターフェースアダプタ、16:チャネルパススイッチ、17:制御信号線、18:データ線、19:パス、20:マイクロプロセッサ1(MP1)、21:チャネルインターフェース(CH IF)回路、22:データ制御回路(DCC)、23:グループアドレス変換回路(GAT)、24:チャネル側キャッシュアダプタ(C Adp)、28:ドライブインターフェース回路(Drive IF)、29:マイクロプロセッサ3(MP3)、30:データアドレステーブル40、31:サブキャッシュアダプタ、34:ドライブアダプタ(Drive Adp)、35:ドライブパス、36:パリティ生成回路、40:アドレス変換用テーブル(アドレステーブル)、41:CPU指定ドライブ番号、42:SCSIドライブアドレス、43:SCSIドライブ番号、44:SCSI内Addr、45:論理アドレス、46:CCHHR、47:キャッシュアドレス、48:キャッシュフラグ、49:無効フラグ、50:パリティドライブ番号、51:スペースドライブ番号、52:ドライブフラグ、53:SDフラグ、60:論理グループテーブル、61:論理グループアドレス。