特表2018-537765(P2018-537765A)IP Force 特許公報掲載プロジェクト 2015.5.11 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インターナショナル・ビジネス・マシーンズ・コーポレーションの特許一覧
特表2018-537765ストレージ書き込みキャッシュ管理用のハードウェア・アクセラレータの実装のためのデータ・ストレージ・システム、方法、および設計構造
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】特表2018-537765(P2018-537765A)
(43)【公表日】2018年12月20日
(54)【発明の名称】ストレージ書き込みキャッシュ管理用のハードウェア・アクセラレータの実装のためのデータ・ストレージ・システム、方法、および設計構造
(51)【国際特許分類】
   G06F 3/06 20060101AFI20181122BHJP
   G06F 12/0866 20160101ALI20181122BHJP
【FI】
   G06F3/06 301S
   G06F3/06 301X
   G06F3/06 302A
   G06F3/06 304F
   G06F3/06 540
   G06F12/0866 100
【審査請求】未請求
【予備審査請求】未請求
【全頁数】39
(21)【出願番号】特願2018-521653(P2018-521653)
(86)(22)【出願日】2016年11月7日
(85)【翻訳文提出日】2018年6月20日
(86)【国際出願番号】IB2016056677
(87)【国際公開番号】WO2017081593
(87)【国際公開日】20170518
(31)【優先権主張番号】62/252,749
(32)【優先日】2015年11月9日
(33)【優先権主張国】US
(81)【指定国】 AP(BW,GH,GM,KE,LR,LS,MW,MZ,NA,RW,SD,SL,ST,SZ,TZ,UG,ZM,ZW),EA(AM,AZ,BY,KG,KZ,RU,TJ,TM),EP(AL,AT,BE,BG,CH,CY,CZ,DE,DK,EE,ES,FI,FR,GB,GR,HR,HU,IE,IS,IT,LT,LU,LV,MC,MK,MT,NL,NO,PL,PT,RO,RS,SE,SI,SK,SM,TR),OA(BF,BJ,CF,CG,CI,CM,GA,GN,GQ,GW,KM,ML,MR,NE,SN,TD,TG),AE,AG,AL,AM,AO,AT,AU,AZ,BA,BB,BG,BH,BN,BR,BW,BY,BZ,CA,CH,CL,CN,CO,CR,CU,CZ,DE,DJ,DK,DM,DO,DZ,EC,EE,EG,ES,FI,GB,GD,GE,GH,GM,GT,HN,HR,HU,ID,IL,IN,IR,IS,JP,KE,KG,KN,KP,KR,KW,KZ,LA,LC,LK,LR,LS,LU,LY,MA,MD,ME,MG,MK,MN,MW,MX,MY,MZ,NA,NG,NI,NO,NZ,OM,PA,PE,PG,PH,PL,PT,QA,RO,RS,RU,RW,SA,SC,SD,SE,SG,SK,SL,SM,ST,SV,SY,TH,TJ,TM,TN,TR,TT,TZ,UA
(71)【出願人】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
(74)【代理人】
【識別番号】100108501
【弁理士】
【氏名又は名称】上野 剛史
(74)【代理人】
【識別番号】100112690
【弁理士】
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】ガルブレイス、ロバート
(72)【発明者】
【氏名】モールテル、ダニエル
(72)【発明者】
【氏名】ゲルハルト、エイドリアン
(72)【発明者】
【氏名】エドワーズ、ジョセフ
(72)【発明者】
【氏名】ウェックワース、リエック
(72)【発明者】
【氏名】バッケ、ブライアン
(72)【発明者】
【氏名】ラーダークリシュナン、ゴウリサンカー
【テーマコード(参考)】
5B205
【Fターム(参考)】
5B205JJ11
5B205MM11
(57)【要約】
【課題】ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためのコントローラ及びそれを含むストレージ・システムを提供。
【解決手段】コントローラは、ストレージ書き込みキャッシュ管理のためのハードウェア・アクセラレーションを実装する書き込みキャッシュ・ハードウェア・エンジンを含む。コントローラは、性能を大幅に向上させるために、ファームウェアの関与を最小限に抑えて、またはファームウェアの関与なしに、書き込みキャッシュのデータおよびメタデータを管理する。書き込みキャッシュ・ハードウェア・エンジンが、書き込みキャッシュのデータおよびメタデータを管理することが、新磁気ディスク制御機構(RAID)スタック内の前記ストレージ書き込みキャッシュを提供することを含み、書き込みキャッシュがアレイID/アレイLBA(論理ブロック・アドレス)ごとに実行されるデータ・ストレージ・システムである。
【選択図】図1
【特許請求の範囲】
【請求項1】
データ・ストレージ・システムであって、
ストレージ書き込みキャッシュのためのストレージ・アダプタ拡張書き込みキャッシュ管理を実装するコントローラを備え、前記コントローラが、
ストレージ書き込みキャッシュのハードウェア・アクセラレーションを実装する書き込みキャッシュ・ハードウェア・エンジンを備え、
前記書き込みキャッシュ・ハードウェア・エンジンが、ファームウェアを実質的に使用せずに書き込みキャッシュのデータおよびメタデータを管理する、データ・ストレージ・システム。
【請求項2】
前記書き込みキャッシュ・ハードウェア・エンジンが、書き込みキャッシュのデータおよびメタデータを管理することが、新磁気ディスク制御機構(RAID)スタック内の前記ストレージ書き込みキャッシュを提供することを含み、書き込みキャッシュがアレイID/アレイLBA(論理ブロック・アドレス)ごとに実行される、請求項1に記載のデータ・ストレージ・システム。
【請求項3】
前記書き込みキャッシュ・ハードウェア・エンジンがCL(キャッシュ・ライン)のハードウェア操作を提供する、請求項2に記載のデータ・ストレージ・システム。
【請求項4】
前記書き込みキャッシュ・ハードウェア・エンジンが、書き込み処理、読み取り処理、およびデステージ処理中にCLの状態を追跡するためにCL(キャッシュ・ライン)定義を使用する、請求項2に記載のデータ・ストレージ・システム。
【請求項5】
前記書き込みキャッシュ・ハードウェア・エンジンが書き込みキャッシュのコントロール・ストア(CS)から書き込みキャッシュのデータ・ストア(DS)へミラーリングすることを含めて、前記書き込みキャッシュ・ハードウェア・エンジンが前記ストレージ書き込みキャッシュへの書き込みを実行する、請求項1に記載のデータ・ストレージ・システム。
【請求項6】
前記書き込みキャッシュ・ハードウェア・エンジンが書き込みキャッシュのコントロール・ストア(CS)から書き込みキャッシュのデータ・ストア(DS)へミラーリングすることが、前記コントローラにおけるローカル・ミラーリングおよび二重のコントローラへのリモート・ミラーリングを含む、請求項5に記載のデータ・ストレージ・システム。
【請求項7】
前記書き込みキャッシュ・ハードウェア・エンジンが、前記ストレージ書き込みキャッシュからの完全または部分的な読み取りヒットを含めて、前記ストレージ書き込みキャッシュからの読み取りを実行する、請求項1に記載のデータ・ストレージ・システム。
【請求項8】
前記書き込みキャッシュ・ハードウェア・エンジンがハッシュ・テーブルおよびLRU(least recently used)キューのうちの1つを使用して前記ストレージ書き込みキャッシュから検索してデステージ処理を生成することを含めて、前記書き込みキャッシュ・ハードウェア・エンジンが前記ストレージ書き込みキャッシュからのデステージを実行する、請求項6に記載のデータ・ストレージ・システム。
【請求項9】
データ・ストレージ・システムにおけるストレージ・アダプタの書き込みキャッシュ管理を実装するための方法であって、
書き込みキャッシュ・ハードウェア・エンジンを備えるコントローラを提供することと、ストレージ書き込みキャッシュのハードウェア・アクセラレーションを実装するための前記書き込みキャッシュ・ハードウェア・エンジンを提供することと、
ファームウェアを実質的に使用せずに書き込みキャッシュのデータおよびメタデータを管理するための前記書き込みキャッシュ・ハードウェア・エンジンを提供することと
を含む、方法。
【請求項10】
新磁気ディスク制御機構(RAID)スタック内の前記ストレージ書き込みキャッシュを提供することを含み、書き込みキャッシュがアレイID/アレイLBA(論理ブロック・アドレス)ごとに実行される、請求項9に記載の方法。
【請求項11】
前記書き込みキャッシュ・ハードウェア・エンジンがCL(キャッシュ・ライン)のハードウェア操作を提供することを含む、請求項9に記載の方法。
【請求項12】
前記書き込みキャッシュ・ハードウェア・エンジンが、CL(キャッシュ・ライン)定義を使用し、書き込み処理、読み取り処理、およびデステージ処理中にCLの状態を追跡することを含む、請求項9に記載の方法。
【請求項13】
前記コントローラ内で前記書き込みキャッシュ・ハードウェア・エンジンが書き込みキャッシュのコントロール・ストア(CS)から書き込みキャッシュのデータ・ストア(DS)へミラーリングすること、および二重のコントローラへリモートでミラーリングすることを含めて、前記書き込みキャッシュ・ハードウェア・エンジンが前記ストレージ書き込みキャッシュへの書き込みを実行することを含む、請求項9に記載の方法。
【請求項14】
前記書き込みキャッシュ・ハードウェア・エンジンが、前記ストレージ書き込みキャッシュからの完全または部分的な読み取りヒットを含めて、前記ストレージ書き込みキャッシュからの読み取りを実行することを含む、請求項9に記載の方法。
【請求項15】
前記書き込みキャッシュ・ハードウェア・エンジンが、ハッシュ・テーブルおよびLRU(least recently used)キューのうちの1つを使用して前記ストレージ書き込みキャッシュから検索してデステージ処理を生成することを含めて、前記書き込みキャッシュ・ハードウェア・エンジンが前記ストレージ書き込みキャッシュからのデステージを実行することを含む、請求項9に記載の方法。
【請求項16】
設計工程において使用される機械可読媒体内で具現化される設計構造であって、前記設計構造が、
前記設計工程において使用される前記機械可読媒体内で有形に具現化されるコントローラ回路を備え、前記コントローラ回路がデータ・ストレージ・システムにおいてストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにあり、前記コントローラ回路が、ストレージ書き込みキャッシュのハードウェア・アクセラレーションを実装する書き込みキャッシュ・ハードウェア・エンジンを備え、
前記書き込みキャッシュ・ハードウェア・エンジンが、ファームウェアを実質的に使用せずに書き込みキャッシュのデータおよびメタデータを管理し、前記設計構造が、半導体チップの製造において読み取られて使用された場合に、前記コントローラ回路を備えるチップを製造する、設計構造。
【請求項17】
前記設計構造が、集積回路のレイアウト・データの交換に使用されるデータ形式としてストレージ媒体上に存在する、請求項16に記載の設計構造。
【請求項18】
前記設計構造が、テスト・データ・ファイル、特性評価データ、検証データ、または設計仕様のうちの少なくとも1つを含んでいる、請求項16に記載の設計構造。
【請求項19】
前記設計構造が、前記コントローラ回路を記述するネットリストを含む、請求項16に記載の設計構造。
【請求項20】
前記キャッシュ・ハードウェア・エンジンが、書き込みキャッシュのデータおよびメタデータを管理することが、前記キャッシュ・ハードウェア・エンジンが、ストレージ書き込みキャッシュに書き込み、前記ストレージ書き込みキャッシュから読み込むことを含む、請求項16に記載の設計構造。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、概してデータ処理分野に関し、さらに詳細には、ストレージ・アダプタの拡張書き込みキャッシュ(write cache)管理を実装するための方法およびコントローラ、ならびに対象のコントローラ回路が存在する設計構造に関する。
【背景技術】
【0002】
ストレージ・アダプタは、ホスト・コンピュータ・システムを、ハード・ディスク・ドライブ、半導体ドライブ、テープ・ドライブ、コンパクト・ディスク・ドライブなどのストレージI/O周辺機器(peripheral storage I/O devices)に接続するために使用される。現在、さまざまな高速システムの相互接続が、ホスト・コンピュータ・システムをストレージ・アダプタに接続するため、およびストレージ・アダプタを、PCIe(Peripheral Component Interconnect Express)、シリアル接続SCSI(SAS:Serial Attach SCSI)、ファイバ・チャネル、およびインフィニバンドなどのストレージI/Oデバイスに接続するために存在する。
【0003】
ストレージ・アダプタおよびストレージ・サブシステムは、多くの場合、性能を向上させるために書き込みキャッシュを含んでいる。この書き込みキャッシュは、通常は、例えばFlash backed DRAM(Flash backed DRAM)を使用した不揮発性であり、RAID−5およびRAID−6などの新磁気ディスク制御機構(RAID:redundant arrays of independent disks)によって導入されるライト・ペナルティを隠すために使用される。書き込みキャッシュは、書き込みキャッシュ内に配置された複数のホスト処理を1つのデステージ処理にまとめることによって、ストレージの性能も向上させることができ、その後、このデステージ処理は、RAID層およびディスク・デバイスによって処理される。冗長性のために、書き込みキャッシュのデータおよびディレクトリまたはメタデータは、有利なことに、アダプタが故障した場合に利用される第2のアダプタまたは二重のアダプタにミラーリングされ得る。
【0004】
ユーザ・データまたはホスト・データをキャッシュするためにストレージ・サブシステム内で使用されるフルアソシアティブ方式キャッシュまたはその他の複雑なキャッシュでは、必要なメタデータを更新してデータを書き込みキャッシュに入れるために、通常は多くのCPUサイクルが必要とされる。このメタデータは、キャッシュ・ライン(CL:Cache Line)構造、高速検索用のハッシュ・テーブル、および最も古いデータを検索するためのLRU(Least Recently Used)キューを含んでいる。このメタデータは、一貫性を維持し、キャッシュ・ディレクトリの不揮発性を保ち、キャッシュから削除するデータの検索を可能にするために使用される。
【0005】
拡張されたストレージ書き込みキャッシュ管理を実装するための効果的な方法およびコントローラに対する必要性が存在している。書き込みキャッシュ・ハードウェア・エンジン(hardware write cache engine)を含んでいるハードウェアで高速化された設計を提供するそのような方法およびコントローラを提供することに対する必要性が存在しており、この書き込みキャッシュ・ハードウェア・エンジンは、性能を大幅に向上させるために、ファームウェアの関与を最小限に抑えて、またはファームウェアの関与なしに、書き込みキャッシュのデータおよびメタデータを管理する。
【0006】
以下の説明および特許請求の範囲において使用されるように、「コントローラ」および「コントローラ回路」という用語は、入出力(IO:input/output)アダプタ(IOA:IO adapter)を含むように広く理解されるべきであり、ホスト・コンピュータ・システム、およびハード・ディスク・ドライブ、半導体ドライブ、テープ・ドライブ、コンパクト・ディスク・ドライブなどのストレージI/O周辺機器のさまざまな配置を接続するIO RAIDアダプタ(IO RAID adapter)を含む。
【0007】
以下の説明および特許請求の範囲において使用されるように、「実質的にファームウェアを使用しないで」、「ファームウェアの関与を最小限に抑えて、またはファームウェアの関与なしに」という表現は、ハードウェアによって実行される処理および機能を含むように広く理解されるべきであり、ファームウェアとの間で受け渡される処理および制御を含んでよい。
【発明の概要】
【発明が解決しようとする課題】
【0008】
本発明の主要な態様は、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するための方法およびコントローラ、ならびに対象のコントローラ回路が存在する設計構造を提供することである。本発明のその他の重要な態様は、実質的に悪影響を与えずに、従来技術の配置の短所の多くを克服する、そのような方法、コントローラ、および設計構造を提供することである。
【課題を解決するための手段】
【0009】
ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するための方法およびコントローラ、ならびに対象のコントローラ回路が存在する設計構造が提供される。このコントローラは、ストレージ書き込みキャッシュ管理のためのハードウェア・アクセラレーションを実装する書き込みキャッシュ・ハードウェア・エンジンを含む。このコントローラは、性能を大幅に向上させるために、ファームウェアの関与を最小限に抑えて、またはファームウェアの関与なしに、書き込みキャッシュのデータおよびメタデータを管理する。
【0010】
本発明は、前述およびその他の目的および利点と共に、図面において示された本発明の好ましい実施形態に関する以下の詳細な説明から最も良く理解され得る。
【図面の簡単な説明】
【0011】
図1】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理(storage adapter enhanced write cache management)を実装するための、二重のコントローラを含むシステム例を示す概略図である。
図2】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するための、入出力(IO)アダプタを示すブロック図である。
図3】好ましい実施形態に記載された、図1および2のストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、論理ブロック・アドレス(LBA)変換RAIDスタック(logical block address (LBA) translation RAID stack)の例を示す図であり、書き込みキャッシュが、動的層(簡易層)(Dynamic Tier (Easy Tier))、データ・ストライピング層、およびパリティ・ストライピング(RAID)層の上の、RAIDスタック内の上位に配置されており、この位置で、アレイID/アレイLBAごとにキャッシングが実行される。
図4】好ましい実施形態に記載された、図1および2のストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、論理ブロック・アドレス(LBA)変換RAIDスタックの例を示す図である。
図5】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、図3および4の論理ブロック・アドレス(LBA)変換の例を含んでいるハードウェアにおいてサポートされる読み取り処理の例を示す図である。
図6】好ましい実施形態に記載された、図1および2のストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、図3および4の論理ブロック・アドレス(LBA)変換の例を含んでいるハードウェアにおいてサポートされる書き込み処理の例を示す図であり、書き込みキャッシュが、動的層(簡易層)、データ・ストライピング層、およびパリティ・ストライピング(RAID)層の上の、RAIDスタック内の上位に配置されている。
図7】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、図3および4の論理ブロック・アドレス(LBA)変換の例を含んでいるハードウェアにおいてサポートされるデステージ処理の例を示す図である。
図8】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、コントロール・ストア(CS:control store)内のキャッシュ・ライン(CL)構造の例を示す図である。
図9】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、データ・ストア(DS:data store)への自動ミラー用のコントロール・ストア(CS)内のキャッシュ・ライン(CL)構造の例を示す図である。
図10】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、データ・ストア(DS)内のキャッシュ・ライン(CL)構造の例を示す図である。
図11】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、データ・ストア(DS)に対するローカルSASおよびリモートSASキャッシュ・ライン(CL)コントロール・ストア(CS)のミラーまたはSASミラー削除の例を示す図である。
図12】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、ハードウェア内のキャッシュ・ライン(CL)状態におけるトランザクションの例を示す図である。
図13】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、ハードウェア内のキャッシュ・ライン(CL)状態におけるトランザクションの例を示す図である。
図14】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、ハードウェア内で同じアレイID/LBAを持っているキャッシュ・ライン(CL)チェーン(cache line (CL) chains)の例を示す図である。
図15】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、ハードウェア内で同じアレイID/LBAを持っているキャッシュ・ライン(CL)チェーンの例を示す図である。
図16】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、書き込み、非最適化または一時的書き込み(non-optimized or provisional writes)、読み取り、およびデステージ処理のためのハードウェア・エンジンにおける制御ブロック(CB:control block)に基づく処理のチェーンの例を示す図である。
図17】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、書き込み、非最適化または一時的書き込み、読み取り、およびデステージ処理のためのハードウェア・エンジンにおける制御ブロック(CB)に基づく処理のチェーンの例を示す図である。
図18】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、書き込み、非最適化または一時的書き込み、読み取り、およびデステージ処理のためのハードウェア・エンジンにおける制御ブロック(CB)に基づく処理のチェーンの例を示す図である。
図19】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、書き込み、非最適化または一時的書き込み、読み取り、およびデステージ処理のためのハードウェア・エンジンにおける制御ブロック(CB)に基づく処理のチェーンの例を示す図である。
図20】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、書き込みプロセスの処理の例を示すフロー・チャートである。
図21】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、オーバーレイを伴う高速書き込みでのXORマージの例を示す図である。
図22】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、読み取りプロセスの処理の例を示すフロー・チャートである。
図23】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、デステージ構築プロセス(destage build process)の処理の例を示すフロー・チャートである。
図24】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、1つのデステージ・プロセスの処理の例を示すフロー・チャートである。
図25】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、複数のデステージ・プロセスの処理の例を示すフロー・チャートである。
図26】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、バイパス・プロセスの処理の例を示すフロー・チャートである。
図27】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、レジスタに基づくパージ・ハードウェア支援ツール・キット(register based purge hardware assist tool kit)の例を示す図である。
図28】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、パージ・エンジン・プロセス(purge engine process)の処理の例を示すフロー・チャートである。
図29】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、パージ・エンジン・プロセスの処理の例を示すフロー・チャートである。
図30】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、ハードウェア・カウンタおよび統計情報の例を示す図である。
図31】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、CLの制限およびしきい値の例を示す図である。
図32】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、CLの制限およびしきい値の例を示す図である。
図33】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、全体的イベント処理(global event processing)の処理の例を示すフロー・チャートである。
図34】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、アレイごとの処理のステップの例を示すフロー・チャートである。
図35】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、全体的トリガおよびアレイごとのトリガ(global triggers and per array triggers)の例を示す図である。
図36】好ましい実施形態に記載された、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、全体的トリガおよびアレイごとのトリガの例を示す図である。
図37】半導体の設計、製造、またはテスト、あるいはその組み合わせにおいて使用される設計工程のフロー図である。
【発明を実施するための形態】
【0012】
本発明の実施形態の以下の詳細な説明では、実施形態例を示す添付の図面への参照が行われ、それらの実施形態によって本発明が実践されてよい。本発明の範囲を逸脱することなくその他の実施形態が利用されてよく、構造的変更が行われてよいということが理解されるべきである。
【0013】
本明細書で使用される用語は、特定の実施形態を説明することのみを目的としており、本発明を限定することを意図していない。本明細書で使用される単数形「a」、「an」、および「the」は、特に明示的に示されない限り、複数形も含むことが意図されている。「備える(comprise)」または「備えている(comprising)」あるいはその両方の用語は、本明細書で使用される場合、記載された機能、整数、ステップ、処理、要素、またはコンポーネント、あるいはその組み合わせの存在を示すが、1つまたは複数のその他の機能、整数、ステップ、処理、要素、コンポーネント、またはこれらのグループ、あるいはその組み合わせの存在または追加を除外していないということが、さらに理解されるであろう。
【0014】
本発明の特徴に従って、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するための方法およびコントローラ、ならびに対象のコントローラ回路が存在する設計構造が提供される。本発明の方法およびコントローラは、書き込みキャッシュを管理し、キャッシュ・ディレクトリの実質的にアトミックな更新を提供する書き込みキャッシュ・ハードウェア・エンジンを含む。ファームウェアを使用せずに書き込みキャッシュ・ハードウェア・エンジンを使用し、ハードウェア・エンジンを一緒に連結して、書き込みキャッシュへの書き込みおよび書き込みキャッシュからの読み取りの両方が実行される。
【0015】
ここで図面を参照すると、好ましい実施形態に従ってストレージ・アダプタ拡張書き込みキャッシュ管理を実装するために、図1は、参照文字100によって全体的に示された二重のコントローラを含むシステム例を示しており、図2は、参照文字102によって全体的に示された入出力(IO)アダプタを示している。システム100は、第1の入出力アダプタ(IOA)またはコントローラ102(IOA #1)および第2の入出力アダプタ(IOA)またはコントローラ102(IOA #2)を含んでおり、書き込みキャッシュのデータおよびディレクトリまたはメタデータが二重のIOAにミラーリングされ、アダプタが故障した場合に、この二重のIOAが利用され得る。システム100はホスト・システム104を含んでおり、IOA #1および#2(コントローラ102)が、PCIE(Peripheral Component Interconnect Express)バスを介してホスト・システム104に直接結合されるか、または必要に応じて、PCIEスイッチ106を介してホスト・システム104に結合される。システム100は、例えば新磁気ディスク制御機構(RAID)を含んでいる、ハード・ディスク・ドライブ(HDD)または回転ドライブ108および半導体ドライブ(SSD:solid state drives)108などの複数のストレージ・デバイス108を含んでおり、これらのストレージ・デバイス108は、必要に応じて、各エキスパンダ110によって、IOA #1および#2(コントローラ102)間のSAS接続を含む1つまたは複数のシリアル接続SCSI(SAS)接続を介して、IOA #1および#2(コントローラ102)に結合される。
【0016】
図2では、好ましい実施形態に従って、データ・ストレージ・システム100内のIOA #1および#2(コントローラ102)それぞれのコンポーネントの例がさらに示されている。コントローラ102は、1つまたは複数のプロセッサまたは中央処理装置(CPU:central processor units)120、データ・ストア(DS)124およびコントロール・ストア(CS)126(ダイナミック・ランダム・アクセス・メモリ(DRAM:dynamic random access memory)など)を少なくとも含んでいる書き込みキャッシュ122を含んでいる。コントローラ102は、フラッシュ・メモリ128および不揮発性ランダム・アクセス・メモリ(NVRAM:non-volatile random access memory)130を含んでいる。
【0017】
コントローラ102は、好ましい実施形態に従って、書き込みキャッシュ・エンジン132を含んでいる。コントローラ102は、PCIEバスを介してホスト・システムに接続されたPCIE(Peripheral Component Interconnect Express)インターフェイス134および複数のストレージ・デバイス108それぞれに接続されたシリアル接続SCSI制御(SAS CTRL:Serial Attach SCSI control)136を含んでいる。
【0018】
IOA #1および#2(コントローラ102)ならびに書き込みキャッシュ・エンジン132は、例えば、ファームウェアを使用しないで書き込みキャッシュへの書き込みまたはオーバーレイを伴う書き込み(write-with-overlay)を実行するためのハードウェア・エンジンを一緒に連結する方法を実装するため、およびファームウェアを使用しないで書き込みキャッシュからの読み取りを実行するためのハードウェア・エンジンを一緒に連結する方法を実装するために、複数のハードウェア・エンジンを含んでいる。
【0019】
本発明の特徴に従って、書き込みキャッシュ・エンジン132を含んでいるストレージ・アダプタ拡張書き込みキャッシュ管理を実装するための方法およびコントローラ102は、ファームウェアを使用しないで書き込みキャッシュへの書き込みまたはオーバーレイを伴う書き込みを実行するために、異なるハードウェア・エンジンを使用して処理のチェーンを生成する。コントローラ102および書き込みキャッシュ・エンジン132は、不揮発性(NV:nonvolatile)バッファを割り当てるステップと、ホストからのデータにダイレクト・メモリ・アクセスするためのダイレクト・メモリ・アクセス(DMA:direct memory access)のステップと、キャッシュ・ライン(CL)状態を更新しながらキャッシュ内の既存のデータがオーバーレイされた可能性があるかどうかを決定するステップと、書き込み処理の開始時および終了時に非4Kデータをマージするステップと、ローカルNVメモリおよびリモートNVメモリ内のCLも更新しながらリモート・アダプタへのデータにダイレクト・メモリ・アクセスするステップと、ローカルNVメモリおよびリモートNVメモリ内のオーバーレイされたデータのCLを消去するステップと、CL状態を最終的に更新するステップと、すべてのオーバーレイされたデータのNVバッファの割り当てを解除するステップと、ホスト・コマンドに対する応答を送信するステップとを実行することによって、この方法を実施する。
【0020】
本発明の特徴に従って、書き込みキャッシュ・エンジン132を含んでいるストレージ・アダプタ拡張書き込みキャッシュ管理を実装するための方法およびコントローラ102は、ファームウェアを使用しないで書き込みキャッシュからの読み取りを実行するために、異なるハードウェア・エンジンを使用して処理のチェーンを生成する。コントローラ102および書き込みキャッシュ・エンジン132は、揮発性バッファ(Vol buffers)を割り当てるステップと、書き込みキャッシュ内の読み取りヒットを検索するステップと、ホストへのデータにダイレクト・メモリ・アクセスするステップと、揮発性バッファの割り当てを解除するステップと、CL状態を最終的に更新するステップと、キャッシュから同時にデステージされた読み取られているすべてのデータのNVバッファの割り当てを解除するステップと、ホスト・コマンドに対する応答を送信するステップとを実行することによって、この方法を実施する。
【0021】
本発明の特徴に従って、書き込みキャッシュ・エンジン132を含んでいるストレージ・アダプタ拡張書き込みキャッシュ管理を実装するための方法およびコントローラ102は、ファームウェアを使用しないで書き込みキャッシュからの部分的読み取りヒット(partial read hit)を実行するために、異なるハードウェア・エンジンを使用して処理のチェーンを生成する。コントローラ102および書き込みキャッシュ・エンジン132は、揮発性バッファを割り当てるステップと、書き込みキャッシュ内の読み取りヒットを検索するステップと、部分的読み取りヒットに関するHDD/SSDからのデータを読み取る/マージするステップと、ホストへのデータにダイレクト・メモリ・アクセスするステップと、揮発性バッファの割り当てを解除するステップと、CL状態を最終的に更新するステップと、キャッシュから同時にデステージされた読み取られているすべてのデータのNVバッファの割り当てを解除するステップと、ホスト・コマンドに対する応答を送信するステップとを実行することによって、この方法を実施する。
【0022】
本発明の特徴に従って、書き込みキャッシュ・エンジン132を含んでいるストレージ・アダプタ拡張書き込みキャッシュ管理を実装するための方法およびコントローラ102は、最小限のファームウェアを使用して書き込みキャッシュからのデステージ処理を実行するために、異なるハードウェア・エンジンを使用して処理のチェーンを生成する。コントローラ102および書き込みキャッシュ・エンジン132は、LRUまたは指定されたアレイLBAのいずれかで開始するため、および要求された最大サイズ/範囲または256Kストライプ境界(256K stripe boundary)の終端のいずれかで停止するためのオプションを含むデステージ処理を生成するのを支援する。
【0023】
本発明の特徴に従って、書き込みキャッシュ・エンジン132を含んでいるストレージ・アダプタ拡張書き込みキャッシュ管理を実装するための方法およびコントローラ102は、ホストの読み取りおよびキャッシュのデステージが同じCLに対して同時に発生することを許可する一連のポリシーを実装する。発生する衝突はキューに入れられ、ハードウェアによってディスパッチされる。
【0024】
本発明の特徴に従って、書き込みキャッシュ・エンジン132を含んでいるストレージ・アダプタ拡張書き込みキャッシュ管理を実装するための方法およびコントローラ102は、同じアレイ論理ブロック・アドレス(LBA:array logical block address)に関して、キャッシュ内の古いデータと新しいデータの保証された正しい識別を可能にするために、(CL)内の処理構築番号またはシーケンス番号を使用する。
【0025】
本発明の特徴に従って、書き込みキャッシュ・エンジン132を含んでいるストレージ・アダプタ拡張書き込みキャッシュ管理を実装するための方法およびコントローラ102は、書き込み、読み取り、およびデステージ処理のためのCLの更新の完了または取り消しにおいて使用するために、ハードウェアのターン・オフを実装する。
【0026】
本発明の特徴に従って、書き込みキャッシュ・エンジン132を含んでいるストレージ・アダプタ拡張書き込みキャッシュ管理を実装するための方法およびコントローラ102は、キャッシュからパージされるアレイLBAの範囲に関してCLを識別して更新するために使用される固有のハードウェア・エンジンを実装する。
【0027】
本発明の特徴に従って、書き込みキャッシュ・エンジン132を含んでいるストレージ・アダプタ拡張書き込みキャッシュ管理を実装するための方法およびコントローラ102は、例えばオーバーレイを伴う高速書き込みに関して、XOR(排他的OR)マージ機能を実装する。
【0028】
本発明の特徴に従って、書き込みキャッシュ・エンジン132を含んでいるストレージ・アダプタ拡張書き込みキャッシュ管理を実装するための方法およびコントローラ102は、キャッシュのデステージ・レート(destage rate)を動的に最適化し、キャッシュ内のデータのしきい値および制限の設定をアレイごとに調整するために、ハードウェアによって提供された入力(レジスタ)および出力(レジスタおよびイベント)を使用してファームウェアを支援して、トリガに基づく方法を実施する。
【0029】
本発明の特徴に従って、書き込みキャッシュ・エンジン132を含んでいるストレージ・アダプタ拡張書き込みキャッシュ管理を実装するための方法およびコントローラ102は、ファームウェアの関与を最小限に抑えて、またはファームウェアの関与なしに、書き込みキャッシュのデータおよびメタデータ(ディレクトリ)を管理して性能を大幅に向上させる、ハードウェアで高速化された設計の高レベルのフレームワークを実装する。
【0030】
本発明の特徴に従って、書き込みキャッシュ・エンジン132を含んでいるストレージ・アダプタ拡張書き込みキャッシュ管理を実装するための方法およびコントローラ102は、CL(キャッシュ・ライン)のハードウェア操作、ハッシュ・テーブル、およびアレイごとのLRUキューを提供する。これは、これらの構造に対する更新が、変更されないままであるか、またはハードウェア・エンジンが実行されるたびに完全に更新されるかのいずれかであるように、疑似アトミック方式(pseudo atomic fashion)で実行される。変更中のすべてのエントリは、例えば、キャッシュにチェックアウトされ、1回または複数回変更された後、成功した場合、バースト方式でチェックインされる。アダプタの故障が発生した場合にのみ、CLが不揮発性に保たれ、CLのサブセットを変更することが可能になる。
【0031】
本発明の特徴に従って、書き込みキャッシュ・エンジン132を含んでいるストレージ・アダプタ拡張書き込みキャッシュ管理を実装するための方法およびコントローラ102は、次の状態を追跡できるようにするCL定義を含む。オーバーレイ処理を伴う書き込み中の、オーバーレイ進行中(OIP:Overlay In Progress)、読み取り処理中の、読み取り進行中(RIP:Read In Progress)、デステージ処理中の、デステージ進行中(DIP:Destage In Progress)。RIPおよびDIPは、衝突を最小限に抑えることが同時に許容され、このことは、従来の設計では不可能である。
【0032】
本発明の特徴に従って、書き込みキャッシュ・エンジン132を含んでいるストレージ・アダプタ拡張書き込みキャッシュ管理を実装するための方法およびコントローラ102は、書き込み、非最適化または一時的書き込み、読み取り、およびデステージ処理を実装して性能を向上させる。
【0033】
ここで図3および4を参照すると、コントローラ102は、ストレージ・アダプタ拡張書き込みキャッシュ管理を実装するために、図3に示されているように、参照文字200によって全体的に指定された論理ブロック・アドレス(LBA)変換RAIDスタックの例を実装する。図4は、参照文字220によって全体的に指定された、ボリューム・セット(Vset)(すなわち、ホストによって読み取られ、書き込まれることが可能な論理デバイス)を使用したホストLBA変換を示している。
【0034】
図3において、コントローラ102は、IBM iオペレーティング・システムで使用されるホストLBAおよびAFDASD(Advanced Function DASD)変換(host LBA and AFDASD (Advanced Function DASD) translation)202を実装する。AFDASDは、IBM iオペレーティング・システムによって読み取られ、書き込まれることがあるRAID対応の物理デバイスを表している。ホストLBAおよびAFDASD変換202は、ブロック204でAFDASDからアレイへ(または、データ・ストライピングの逆変換)から開始し、206でアレイLBAおよびアレイIDを提供し、読み取り/書き込みキャッシュ208が、210でアレイLBAおよびアレイIDを提供する。読み取り/書き込みキャッシュ208は、RAIDスタック200内で上位に配置され、(RAID)層の、論理デバイスのLBAおよびLDN(論理デバイス番号)214を提供するデータ・ストライピング212、ならびに物理デバイスのLBAおよびLDN218を提供するパリティ・ストライピング216よりも上にあり、キャッシングが、好ましい実施形態に従って、アレイID/アレイLBAごとに実行される。論理ブロック・アドレス(LBA)変換RAIDスタック200は、書き込みキャッシュを動的層およびデータ・ストライピングの下に配置してキャッシングをデバイスLBAごとに実行していた従来の設計よりも、複雑さを低減し、遅延を減らす。
【0035】
図4は、AIX(Advanced Interactive eXecutive)、Unix(R)、Linus、およびその他の一般的なオペレーティング・システムで使用されるVSet222を使用したホストLBA変換のRAIDスタック220を示しており、VSetからアレイへ224から開始して、226でアレイLBAおよびアレイIDを提供し、読み取り/書き込みキャッシュ228が、230でアレイLBAおよびアレイIDを提供する。RAIDスタック220は、234で再マッピングされたアレイLBA/IDを提供する動的層または簡易層の再マッピング232を含み、その後に、論理デバイスのLBAおよびLDN(論理デバイス番号)214を提供するデータ・ストライピング212、および物理デバイスのLBAおよびLDN218を提供するパリティ・ストライピング216の共通コード(RAID)層(common code (RAID) layers)が続く。
【0036】
本発明の特徴に従って、書き込みキャッシュ・エンジン132を含んでいるストレージ・アダプタ拡張書き込みキャッシュ管理を実装するための方法およびコントローラ102は、通常はファームウェアの関与なしに、書き込みキャッシュからの完全または部分的な読み取りヒットを実行する書き込みキャッシュに対する自動読み取り、またはストレージ・デバイス108にまで達する自動読み取りを実装する。
【0037】
図5、6、および7を参照すると、読み取り処理、書き込み処理、およびデステージ処理の例が示されており、ブロックの隅に点があるブロックは、そのブロックにおいてハードウェアHWが、処理を実行するための制御をファームウェアFWに渡すことを示している。
【0038】
ここで図5を参照すると、好ましい実施形態に従ってストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラ102に含まれている、図3および4の論理ブロック・アドレス(LBA)変換RAIDスタックの各例を含んでいるハードウェアにおいてサポートされる読み取り処理の例が、参照文字300によって全体的に指定されて、示されている。ホストLBAおよびAFDASD RAIDスタックに関して、読み取りLBA長がブロック302、304に示されており、スキップ・マスクがブロック306、308に示されている。AFDASDからアレイへ(またはデータ・ストライピングの逆変換)ブロック310は、図に示されているように、書き込み/読み取りキャッシュ328に適用されるデータ・ストライプ・ブロック312、314、316、318、320、322、324、326を提供する。ホストLBAおよびVSet RAIDスタックに関して、読み取りLBA長がブロック330、332に示されており、スキップ・マスクがブロック334、336に示されており、32ビットを超えるLBAがブロック338に示されている。VSetからアレイへブロック340は、書き込み/読み取りキャッシュ328に適用される、オフセットなしブロック(no offset block)342、非ゼロ・オフセット・ブロック(non-zero offset block)344、VSetの末尾超過ブロック(past end of Vset block)346、および256K未満の長さのブロック(less than 256K length block)348を提供する。図に示されているように、書き込み/読み取りキャッシュ328は、完全なヒット(4Kアライメントされる(4K aligned))350、完全なヒット(スキップ)352、完全なヒット(先頭および末尾が4Kアライメントされない)354、完全なヒット(先頭が4Kアライメントされない)356、および完全なヒット(末尾が4Kアライメントされない)358を提供する。図に示されているように、書き込み/読み取りキャッシュ328は、ヒットなし(4Kアライメントされる)360、ヒットなし(スキップ)362、ヒットなし(先頭および末尾が4Kアライメントされない)364、ヒットなし(先頭が4Kアライメントされない)366、およびヒットなし(末尾が4Kアライメントされない)368を提供する。図に示されているように、書き込み/読み取りキャッシュ328は、部分的ヒット(4Kアライメントされる)370、部分的ヒット(スキップ)372、部分的ヒット(先頭および末尾が4Kアライメントされない)374、部分的ヒット(先頭が4Kアライメントされない)376、および部分的ヒット(末尾が4Kアライメントされない)378を提供する。
【0039】
図に示されているように、書き込み/読み取りキャッシュ328は、例外状況に対応するために、ブロック380で読み取り進行中(RIP)、ミラー進行中(MIP:mirror in progress)、およびオーバーレイ進行中(OIP)を提供し、ブロック382で65個のキャッシュ・ライン(CL)を提供し、ブロック384で4K CL未満の部分的ヒットを提供し、ブロック386で部分的ヒットのチキン・スイッチ(partial hit chicken switch)を提供する。ブロック387で「キャッシュなし」、ブロック388で「動的層なし」と示されているように、読み取りは、図に示されたデータ・ストライプ・ブロック312、314、316、318、320、322、324、326、327、および329を提供するデータ・ストライピング・ブロック389に進む。データ・ストライピング・ブロック389に進まない場合、動的層ブロック390は、ブロック391でスワップなし、ブロック392でスワップ(同じ冗長グループ(RG:Redundancy Group))、ブロック393でスワップなし(異なるRG)、ブロック394でスワップ進行中、またはブロック395でクロス・バンド(cross band)、あるいはその組み合わせを提供する。データ・ストライピング・ブロック389は、ブロック396でクロス・サブアレイ(cross sub-array)、またはブロック398で公開済みドライブのヒット、あるいはその両方を提供する。
【0040】
本発明の特徴に従って、書き込みキャッシュ・エンジン132を含んでいるストレージ・アダプタ拡張書き込みキャッシュ管理を実装するための方法およびコントローラ102は、HWにおいてサポートされる自動書き込み処理を実装し、このハードウェアは、通常はファームウェアの関与なしに、書き込みキャッシュへの書き込みまたはオーバーレイを伴う書き込みを実行するために、異なる制御ブロックまたはハードウェア・エンジンを使用して処理のチェーンを生成する。
【0041】
ここで図6を参照すると、好ましい実施形態に従ってストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラ102に含まれている、図3および4の論理ブロック・アドレス(LBA)変換RAIDスタックの各例を含んでいるハードウェアにおいてサポートされる書き込み処理の例が、参照文字400によって全体的に指定されて、示されている。ホストLBAおよびAFDASD RAIDスタックに関して、書き込みLBA長がブロック402、404に示されており、スキップ・マスクがブロック406、408に示されている。AFDASDからアレイへ(またはデータ・ストライピングの逆変換)ブロック410は、図に示されているように、書き込み/読み取りキャッシュ415に適用されるデータ・ストライプ・ブロック412、414を提供する。ホストLBAおよびVSet RAIDスタックの場合、読み取りLBA長がブロック416、418に示されており、スキップ・マスクがブロック420、422に示されており、32ビットを超えるLBAがブロック424に示されている。VSetからアレイへブロック426は、書き込み/読み取りキャッシュ415に適用される、オフセットなしブロック428、430、非ゼロ・オフセット・ブロック432、VSetの末尾超過ブロック432、および256Kを超える長さのブロック434を提供する。図に示されているように、書き込み/読み取りキャッシュ415は、高速書き込み(4Kアライメントされる)438、高速書き込み(スキップ)440、高速書き込み(先頭および末尾が4Kアライメントされない)442、高速書き込み(先頭が4Kアライメントされない)444、高速書き込み(末尾が4Kアライメントされない)446を提供する。図に示されているように、書き込み/読み取りキャッシュ415は、オーバーレイ(Ov:overlay)を伴う高速書き込み(FW:fast write)(4Kアライメントされる)448、オーバーレイ(Ov)を伴う高速書き込み(FW)(スキップ)450、オーバーレイ(Ov)を伴う高速書き込み(FW)(先頭および末尾が4Kアライメントされない)452、オーバーレイ(Ov)を伴う高速書き込み(FW)(先頭が4Kアライメントされない)454、オーバーレイ(Ov)を伴う高速書き込み(FW)(末尾が4Kアライメントされない)456を提供する。図に示されているように、書き込み/読み取りキャッシュ415は、ブロック458で、読み取り進行中(RIP)、ミラー進行中(MIP)、およびオーバーレイ進行中(OIP)を提供する。ブロック460で「キャッシュなし」、ブロック462で「動的層なし」、ブロック464で「非単一ドライブRAID−0」と示されているように、書き込みは、データR0−1ストライプ・ブロック468を提供するデータ・ストライピング・ブロック466に進む。
【0042】
ここで図7を参照すると、好ましい実施形態に従ってストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラ102に含まれている、図3および4の論理ブロック・アドレス(LBA)変換の例を含んでいるハードウェアにおいてサポートされるデステージ処理の例が、参照文字500によって全体的に指定されて、示されている。ブロック502で示されているように、デステージ検索は、LRU(アレイ内で使用されるリンク・リスト)またはアレイ・オフセット(アレイLBA)のいずれかで開始し、デステージ検索は、要求された最大サイズまたは範囲、あるいは256Kストライプ境界(64CL)の末尾のいずれかで終了する。DIP、MIP、またはOIPが設定されたCLは注目されるが、そうでないCLは無視される。ブロック504に示されているように、デステージ処理は、二重のコントローラ(102)あり、またはなしで提供される。読み取り処理300および書き込み処理400とは異なり、ハードウェア処理のチェーンを生成してデステージ全体を実行するために、ファームウェアが使用される。これは、多くの異なるRAIDレベルのサポートおよびその他の複雑さに起因するデステージの変形の数が、ファームウェアの支援なしでハードウェアが処理できないほど多いため、実行される。書き込み/読み取りキャッシュ505は、4K LBA/長ブロック(4K LBA/length block)506および32ビットを超えるLBAブロック508と共に示されている。デステージ処理は、デステージ(4Kアライメントされる)510、デステージ(スキップ)512、デステージ(先頭および末尾が4Kアライメントされない)514、デステージ(先頭が4Kアライメントされない)516、およびデステージ(末尾が4Kアライメントされない)518を含んでいる。動的層の再マッピング・ブロック520は、ブロック522でスワップなし、ブロック524でスワップ(同じRG)、ブロック526でスワップ(異なるRG)、ブロック528でスワップ進行中、またはブロック530でクロス・バンド、あるいはその組み合わせを提供する。ブロック532で「動的層なし」と示されているように、デステージは、図に示されたデータ・ストライプ・ブロック536、538、540、542、544、546、548、550、552、554を提供するデータ・ストライピング・ブロック534に進む。データ・ストライピング・ブロック534は、ブロック556でクロス・サブアレイ、またはブロック558で公開済みドライブのヒット、あるいはその両方を提供する。
【0043】
ここで図8を参照すると、好ましい実施形態に従ってストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラ102に含まれている、コントロール・ストア(CS)内のキャッシュ・ライン(CL)構造の例が、参照文字600によって全体的に指定されて、示されている。キャッシュ・ライン(CL)構造600は、次のようなCS状態定義を含むバイト0〜7を含んでいる。
7=割り当て済みCL。割り当てエンジンによって設定される。
6=局所性ビット(Locality bit)
5=PIP(パージ進行中)。CLにパージのマークが付けられたときにオンになり、カウンタをインクリメントする(割り当て解除時にカウンタをデクリメントする)。
4=MIP(ミラー進行中)。HASH内、LRU内。
3=HASHリンク有効(LRU内であってもなくてもよい)
2=RIP(読み取り進行中)。LRU内であってもなくてもよい。
1=DIP(デステージ進行中)。LRU内ではない。
0=OIP(ミラー後のオーバーレイ削除、マスク・マージの結合進行中(Combine Mask Merge in progress))。LRU内ではない。
【0044】
CL状態定義は、次の状態の追跡を可能にする。データ/ディレクトリをローカル/リモートNVメモリへミラーリングしているときに書き込み処理中の、ミラー進行中(MIP)、オーバーレイ処理を伴う書き込み中の、オーバーレイ進行中(OIP)、読み取り処理中の、読み取り進行中(RIP)、デステージ処理中の、デステージ進行中(DIP)。処理(OP:operation)構築番号(operation (OP) build number)は、キャッシュ・エントリごとにインクリメントされる。LRUのCSアドレス上方ポインタ(CS address Up pointer)(下位6ビット=0)、およびLRUのCSアドレス下方(または次)ポインタ(CS address Down or next pointer)(下位6ビット=0)。ハッシュのCSアドレス前ポインタ(CS address previous pointer)(下位6ビット=0)、およびハッシュのCSアドレス次ポインタ(下位6ビット=0)。キャッシュ・ライン(CL)構造600は、圧縮インデックス値を含む。
【0045】
最初の1つのNV割り当て処理の後に、すべてのCLに対して局所性ビットが設定され、カウンタがインクリメントされる。このカウンタは、NV割り当て解除時に、局所性ビットが設定されたすべてのCLに対してデクリメントされる。このカウンタは、デステージ処理を開始する前に書き込みキャッシュにどの程度書き込むことが許容されるかを決定するときに、FWによって使用される。大きい局所性カウント(Locality count)は、より多く書き込まれたWCを許容する。
【0046】
ここで図9を参照すると、好ましい実施形態に従ってストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、データ・ストア(DS)への自動ミラー用のコントロール・ストア(CS)内のキャッシュ・ライン(CL)構造の例が、参照文字700によって全体的に指定されて、示されている。データ・ストア(DS)への自動ミラー700用のコントロール・ストア(CS)内のキャッシュ・ライン(CL)構造は、アレイID、マスク、6Bアレイ・オフセット、0x80またはC0、処理(OP)構築番号、および圧縮インデックス値を含む。
【0047】
ここで図10を参照すると、好ましい実施形態に従ってストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、データ・ストア(DS)内のキャッシュ・ライン(CL)構造の例が、参照文字800によって全体的に指定されて、示されている。図に示されているように、DS800内のCLは、CLが有効である(すなわち、割り当てられている)ことを識別するために必要な最小限の情報、データのアレイIDおよびLBA、処理構築番号、および圧縮関連の情報を含んでいる。
【0048】
ここで図11を参照すると、好ましい実施形態に従ってストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、データ・ストア(DS)に対するローカルSASおよびリモートSASキャッシュ・ライン(CL)コントロール・ストア(CS)のミラーまたはSASミラー削除の例が、参照文字900によって全体的に指定されて、示されている。ローカルSASキャッシュ・ライン(CL)コントロール・ストア(CS)902は、ローカル・データストアDSへのローカルSASミラーまたはSASミラー削除パス904を含んでいる。SAS相互接続908は、リモートSASキャッシュ・ライン(CL)コントロール・ストア(CS)910およびリモート・データ・ストアDS912に提供される。リモートSASミラーまたはSASミラー削除パス914は、ローカルCS902からリモート・データ・ストアDS912に提供される。
【0049】
ここで図12および13を参照すると、好ましい実施形態に従ってストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラ102に含まれている、ハードウェア内のキャッシュ・ライン(CL)状態におけるトランザクションの例が、参照文字1000によって全体的に指定されて、示されている。キャッシュ・ラインCL状態トランザクション(Cache line CL state transactions)1000は、フリー・プール(Free Pool)1002、割り当て済み1004、HASHおよびLRUが有効なミラー1006、ならびにHASHリストおよびLRUリストが有効なアイドル1008を含んでいる。フリー・プール1002、割り当て済み1004、ミラー1006、およびアイドル1008はそれぞれ、図に示されているように、7=割り当て済みCL(割り当てエンジンによって設定される)、6=局所性ビット、5=パージ状態、4=MIP、3=HASHリンク有効、2=RIP、1=DIP、および0=OIPのCL状態を含んでいる。キャッシュ・ラインCL状態トランザクション1000は、HASHVおよびOIPおよびLRU=NULL1010、HASHVおよびDIPおよびLRU=NULL1012、HASHVおよびDIPおよびLRU=有効1014、HASHVおよびRIPおよびDIPおよびLRU=NULL1016、ならびにRIPおよびLRU/HASH=NULL1018を含んでいる。1020のラベル付きのラインの下のHASHV、RIP、DIP、OIPは、設定される場合にのみ示されている。
【0050】
図12内の各CL状態トランザクションのライン1A〜9Bと共に図13も参照すると、キャッシュ・ラインCL状態トランザクション1000は1022でインストールを含んでおり、1022は、1Bが設定されたMIP/RIP/DIP/OIPを検出した場合にこの制御ブロック(CB)をループすることを含む。ライン1Aに示されているように、ページ・リストが読み取られ、CLごとに、LRUおよびHASHへの追加と共に、MIPおよびHASHVがオンにされる。ライン1Bに示されているように、同じアレイIDおよびアレイ・オフセットに関して、HASH内で次のCLを検索し、検出したCLごとに、OIPをオンにし、LRUから削除し、SAS削除CLミラー・ページ・リスト(SAS delete CL mirror page list)に入れる。1024に示されているように、MIPおよびOIPをオフにする。ライン2Aに示されているように、ページ・リストを読み取り、CLごとにMIPをオフにする。ライン2Bに示されているように、OIPが設定されていて、同じアレイIDおよびアレイ・オフセットである場合、次のCLを読み取り、検出したCLごとに、OIPをオフにし、HASHVをオフにし、HASHから削除し、割り当て解除ページ・リスト(Deallocate Page List)に入れる。
【0051】
1026に示されているように、インストールを取り消す。ライン3Aに示されているように、ページ・リストを読み取り、CLごとに、MIPをオフにし、HASHVをオフにし、HASHから削除する。ライン3Bに示されているように、次のCLを読み取り、OIPをオフにし、パージをオフにし、再びLRUに追加する。1028に示されているように、「4」がMIP/RIP/OIPを検出した場合、このCBからWQへの検索ループを読み取る。ライン4に示されているように、一致するアレイIDおよびアレイ・オフセットに関してHASHを検索し、検出したCLごとに、RIPをオンにし、組み合わせHDMA2hページ・リスト(combo HDMA2h Page List)に入れ、検出しなかった場合、ボリューム・インデックス(volume Index)を組み合わせページ・リスト(Combo Page List)に書き込む。
【0052】
1030に示されているように、RIPをオフにし、組み合わせページ・リストを読み取り、スキップ・マスクを使用する。ライン5Aに示されているように、HASHVがオンである検出したCLごとに、RIPをオフにする。ライン5Bに示されているように、HASHVがオフである検出したCLごとに、RIPをオフにし、割り当て解除ページ・リストに入れる。1032に示されているように、デステージし、DIP/MIP/OIPを無視する。ライン6に示されているように、アレイ・オフセットの256KBの範囲に関してHASHを検索し、検出したCLごとに、DIPをオンにし、LRUから削除し、ページ・リストに入れる。1034に示されているように、DIPをオフにし、ページ・リストを読み取る。ライン7Aに示されているように、RIPがオフである検出したCLごとに、DIPをオフにし、HASHVをオフにし、HASHから削除し、割り当て解除ページ・リストに入れる。ライン7Bに示されているように、RIPがオンである検出したCLごとに、DIPをオフにし、HASHVをオフにし、HASHから削除する。
【0053】
1036に示されているように、デステージを取り消す。ライン8に示されているように、ページ・リストを読み取り、DIPをオフにし、パージ状態をオフにし、再びLRUに追加する。1038に示されているように、パージし、MIPまたは割り当て=0または4:0=0、あるいはパージ状態=1であるかどうかを無視する。ライン9Aに示されているように、OIP/DIPがオフかつHASHVがオンである検出したCLごとに、パージ状態をオンにし、DIPをオンにし、LRUから削除し、割り当て解除ページ・リストに入れる。ライン9Bに示されているように、OIP/DIPがオンまたはHASHVがオフである検出したCLごとに、パージ状態をオンにする。
【0054】
ここで図14および15を参照すると、好ましい実施形態に従ってストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラ102に含まれている、同じアレイID/LBAを含んでいるキャッシュ・ライン(CL)チェーンの例が、参照文字1100、1120によって全体的に指定されて、それぞれ示されている。図14では、コントロール・ストア(CS)内の同じアレイID/LBAを含んでいるCLチェーンの例1100は、示されているように、割り当て=1、LOC=0/1、HASHV=1、(LRU=有効)を含んでいるアイドル1102と、割り当て=1、LOC=0/1、HASHV=1、(LRU=有効)、RIP=1を含んでいるRIP1104と、割り当て=1、LOC=0/1、HASHV=1、DIP=1を含んでいるDIP1106と、割り当て=1、LOC=0/1、HASHV=1、RIP=1、DIP=1を含んでいるRIP/DIP1108と、割り当て=1を含んでいる割り当て済み1110、および割り当て=1、LOC=0/1、HASHV=1、(LRU=有効)を含んでいるアイドル1112と、割り当て=1、LOC=0/1、MIP=1、HASHV=1、(LRU=有効)を含んでいるMIP1114、および割り当て=1、LOC=0/1、HASHV=1を含んでいるOIP1116とを含んでいる。
【0055】
図15では、データ・ストア(DS)内の同じアレイID/LBAを含んでいるCLチェーンの例1100は、割り当て=1および処理構築番号=N+X+Yを含んでいる割り当て済み1122と、割り当て=1および処理構築番号=N+Xを含んでいる割り当て済み1124と、割り当て=1および処理構築番号=Nを含んでいる割り当て済み1126とを含んでいる。
【0056】
ここで図16、17、18、および19を参照すると、好ましい実施形態に従ってストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラに含まれている、書き込み、非最適化または一時的書き込み、読み取り、およびデステージ処理のための、ハードウェア・エンジンにおける制御ブロック(CB)に基づく処理のチェーンの例がそれぞれ示されている。
【0057】
図16では、参照文字1200によって全体的に指定された書き込みプロセスの例は、データ・ストア(DS)内のAページ・リストを割り当てる、NVページの割り当て1202と、ホストからAページ・リストへのデータにダイレクト・メモリ・アクセスするための、DSへのホストDMA(圧縮あり)1204と、CL状態の更新中にキャッシュ内の既存のデータがオーバーレイされた可能性があるかどうかを決定する、書き込みキャッシュ(WC)オーバーレイ検索およびインストール1026(MIPをオンにし、OIPリストまたはBページ・リストを生成し、セクタIOが必要であるかどうかを決定する)と、書き込み処理の開始時および終了時に非4Kデータをマージする、XORセクタI/Oマージ1208と、Aページ・リストの新しいデータをローカルNV DSおよびリモートNV DSにミラーリングする、SASミラー1210と、Bページ・リストのミラーを削除する、SASミラー削除1212と、例えばSASミラーまたはSASミラー削除が失敗した場合に、Aページ・リストのMIPをオフにし、OIPの新しいリストまたはCページ・リストを生成し、MIPおよびOIPの取り消しをオフにする、MIPおよびOIPのオフ1214と、オーバーレイされたページまたはCページ・リストを割り当て解除する、NV割り当て解除1216と、応答をホストへ送信する、SIS送信1218とを含んでいる。
【0058】
図17では、参照文字1220によって全体的に指定された非最適化または一時的書き込みプロセスの例は、揮発性からNVへのXORコピー(XOR Vol to NV copy)(圧縮なし)1222を含んでいる。
【0059】
図18では、参照文字1224によって全体的に指定された読み取りプロセスの例は、揮発性割り当て1126と、WC読み取り検索1228と、SAS読み取り(または部分的読み取りヒット)1230と、DSからのHDMA(圧縮解除あり)1232と、揮発性割り当て解除1234と、RIPのオフ1236と、例えばすでにデステージされたデータに関する、NV割り当て解除1238と、SIS送信1240とを含んでいる。
【0060】
図19では、参照文字1242によって全体的に指定されたデステージ・プロセスの例は、デステージ検索1244と、XOR圧縮解除1246と、揮発性割り当て/割り当て解除、PSLロック/ロック解除、パリティ更新フットプリント(PUFP:parity update footprint)の設定/更新/消去、SAS処理などの、RAIDのデステージに関わるさまざまな支援の実行1248と、SASミラー削除1250と、DIPのオフ1252、および例えばデステージが失敗した場合のDIPの取り消しのオフと、NV割り当て解除1254とを含んでいる。
【0061】
ここで図20を参照すると、好ましい実施形態に従ってストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラ102に含まれている、ブロック1302で開始する書き込みプロセスの例を示すフロー・チャートが、参照文字1300によって全体的に指定されて、示されている。判定ブロック1304に示されているように、揮発性ページ(x2)が提供されているかどうかのチェックが実行される。揮発性ページが提供された場合、ブロック1306に示されているようにバイパスし、ブロック1308に示されているように、AMGRを介して書き込む。揮発性ページが提供されなかった場合、判定ブロック1310に示されているように、キャッシュ内に可能性のあるデータがあるかどうかのチェックが実行される。キャッシュ内の可能性のあるデータが識別された場合、判定ブロック1312に示されているように、スキップまたはWCオーバーレイ例外があるかどうかのチェックが実行される。スキップまたはWCオーバーレイ例外が識別された場合、ブロック1316に示されているように揮発性割り当て(x2)または事前割り当て済みが提供され、ブロック1318に示されているようにホスト・ダイレクト・メモリ・アクセス(HDMA)が提供され、ブロック1320に示されているようにAMGRを介した書き込みが提供され、ブロック1322に示されているように揮発性割り当て解除が提供される。ブロック1323に示されているように、ホストへ応答を送信するSIS送信が提供される。
【0062】
スキップまたはWCオーバーレイ例外が識別されなかった場合、好ましい実施形態に従って、データ・ストア(DS)内のAページ・リストを割り当てる、NVページの割り当て1324と、ホストからAページ・リストへのデータにダイレクト・メモリ・アクセスするための、DSへのホストDMA(圧縮あり)1326と、CL状態の更新中にキャッシュ内の既存のデータがオーバーレイされた可能性があるかどうかを決定する、書き込みキャッシュ(WC)オーバーレイ検索およびインストール1328(MIPをオンにし、OIPリストまたはBページ・リストを生成し、セクタIOが必要であるかどうかを決定する)と、書き込み処理の開始時および終了時に非4Kデータをマージする、XORセクタI/Oマージ1330と、Aページ・リストの新しいデータを、ローカルNV DSまたはリモートNV DSあるいはその両方にミラーリングする、SASミラー1332と、Bページ・リストのミラーを削除する、SASミラー削除1334と、Aページ・リストのMIPをオフにし、OIPの新しいリストまたはCページ・リストを生成する、MIPおよびOIPのオフ1336と、オーバーレイされたページまたはCページ・リストを割り当て解除する、NV割り当て解除1338と、応答をホストへ送信する、SIS送信1323とのHWチェーン・ステップ(HW chained steps)を実行することによって、書き込みキャッシュへの書き込みが実行される。
【0063】
ここで図21を参照すると、好ましい実施形態に従ってストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラ102に含まれている、オーバーレイを伴う高速書き込み時のXORマージの例が、参照文字1400によって全体的に指定されて、示されている。オーバーレイを伴う高速書き込み時のXORマージ1400は、ミラー進行中(MIP:mirror in process)および新しいデータを含んでいるバッファA 1402と、オーバーレイ進行中(OIP)および古いデータを含んでいるバッファB 1404とを含み、バッファB 1404は、MIPおよびマージされたデータを含んでいるバッファA 1406にマージされる。
【0064】
ここで図22を参照すると、好ましい実施形態に従ってストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラ102に含まれている、ブロック1502で開始する読み取りプロセスの例を示すフロー・チャートが、参照文字1500によって全体的に指定されて、示されている。判定ブロック1504に示されているように、揮発性ページ(x2)が提供されているかどうかのチェックが実行される。揮発性ページが提供された場合、ブロック1506に示されているようにバイパスし、ブロック1508に示されているように、AMGRを介して読み取る。揮発性ページが提供されなかった場合、判定ブロック1510に示されているように、キャッシュ内の可能性のあるデータがあるかどうかのチェックが実行される。キャッシュ内の可能性のあるデータが識別された場合、判定ブロック1512に示されているように、スキップまたは読み取り検索例外があるかどうかのチェックが実行される。スキップまたは読み取り検索例外が識別された場合、ブロック1516に示されているように揮発性割り当て(x2)または事前割り当て済みが提供され、ブロック1518に示されているようにAMGRの読み取りが提供され、ブロック1520に示されているようにホスト・ダイレクト・メモリ・アクセス(HDMA)が提供され、ブロック1522に示されているように揮発性割り当て解除が提供される。ブロック1523に示されているように、ホストへ応答を送信するSIS送信が提供される。
【0065】
スキップまたは読み取り検索例外が識別されなかった場合、好ましい実施形態に従って、A−Volを提供する、揮発性割り当て1524と、WC読み取り検索1526であって、BがAからのボリューム・インデックスおよびキャッシュ内のデータのNVインデックスを含み、スキップ・ビットも生成される、WC読み取り検索1526と、AMGRを介した読み取り(256KB境界交差(cross 256 KB boundary)の2つの処理)1528と、B−NVvを受信する、DSからのHDMA(圧縮解除あり)1530と、A−Volを受信する、揮発性割り当て解除1532(または処理なし)と、B−NVvを受信して、スキップ・ビットが設定されたインデックスに関してRIPがオフにされたC−CLrを提供する、RIPのオフ1534と、例えば、NVインデックスを割り当て解除することのみが必要となるように、デステージによってすでに消去されたC−CLrを提供する、NV割り当て解除1536と、SIS送信1523とのHWチェーン・ステップを実行することによって、書き込みキャッシュからの読み取りが実行される。
【0066】
ここで図23を参照すると、好ましい実施形態に従ってストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラ102に含まれている、ブロック1602で開始するデステージ構築プロセスの例を示すフロー・チャートが、参照文字1600によって全体的に指定されて、示されている。
【0067】
本発明の特徴に従って、ハードウェア・エンジンは、LRUまたは指定されたアレイLBAのいずれかで開始するため、および要求された最大サイズ/範囲または256Kストライプ境界の終端のいずれかで停止するためのオプションを含むデステージ処理を生成するのを支援する。ブロック1604に示されているように、デステージを生成する(DIPをオンにする)ために、ハッシュ・テーブルまたはLRUキューあるいはその両方を介して書き込みキャッシュを検索するハードウェア支援と共に、LRUまたは指定されたアレイLBAのいずれかで開始するか、または(HDDの場合はギャップあり、SSDの場合はギャップなしで)LRUで開始するオプションを使用して、デステージ検索が呼び出される。完全な256Kが検出され、かつ完全なストライプ書き込み(FSW:Full Stripe Write)が許可されるかどうかのチェックが、判定ブロック1606に示されているように実行される。完全な256Kが検出され、かつ許可されるFSWが検出されなかった場合、判定ブロック1608に示されているように、処理をドライブに対して単一の処理として実行できないかどうかのチェックが実行される。例えば、ドライブがスキップ処理をサポートしていない場合のギャップのため、またはCLが、ギャップが生じる可能性のあるセクタI/Oを含んでいるために、処理をドライブに対して単一の処理として実行できないと判断された場合、ブロック1610に示されているように、重複したデステージまたは直列化したデステージが実行される。処理をドライブに対して単一の処理として実行できないと判断されなかった場合、ブロック1612に示されているように、単一のデステージが実行される。
【0068】
完全な256Kが検出され、かつ許可されるFSWが識別された場合、判定ブロック1614に示されているように、主要なパリティ・ストライプの先頭であるかどうかのチェックが実行される。主要なパリティ・ストライプの先頭が検出されなかった場合、ブロック1616に示されているように、単一のデステージが実行される。主要なパリティ・ストライプの先頭が検出された場合、ブロック1618に示されているように、アレイ・オフセットで開始するデステージ検索が呼び出される。判定ブロック1620に示されているように、追加検索結果がすべて完全な256Kであるか、またはなにも検索しなかったかのチェックが実行される。「はい」である場合、ブロック1622に示されているように、複数のデステージが実行される。「いいえ」である場合、ブロック1624に示されているように、追加デステージを取り消すか、または後で処理するためにキューに入れる。その後、ブロック1626に示されているように、単一のデステージが実行される。
【0069】
ここで図24を参照すると、好ましい実施形態に従ってストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラ102に含まれている、ブロック1702で開始する単一のデステージ・プロセスの例を示すフロー・チャートが、参照文字1700によって全体的に指定されて、示されている。判定ブロック1704に示されているように、RAID5または6があるかどうかのチェックが実行される。RAID5/6が識別された場合、好ましい実施形態に従って、次のようなHW処理ステップが実行される。揮発性割り当て(2Xバッファ)1706、XOR圧縮解除1708、AMGRを介した書き込み1710、揮発性割り当て解除1712、B−DIP(デステージ進行中)を受信する、SASミラー削除(ローカルまたはリモートあるいはその両方)1714、B−DIPを受信し、C−CLrを提供する(例えば、デステージが失敗した場合に、DIPの取り消しをオフにする)、DIPのオフ1716、C−CLrを受信する、NV割り当て解除1718、およびブロック1720に示されている、処理完了。
【0070】
RAID5/6が識別されなかった場合、好ましい実施形態に従って、次のようなHW処理ステップが実行される。No Destの読み込み(Read No Dest)(XOR圧縮解除)1722、AMGRを介した書き込み1724、B−DIP(デステージ進行中)を受信する、SASミラー削除(ローカルまたはリモートあるいはその両方)1714の継続、B−DIPを受信し、C−CLrを提供する(例えば、デステージが失敗した場合に、DIPの取り消しをオフにする)、DIPのオフ1716、C−CLrを受信する、NV割り当て解除1718、およびブロック1720に示されている、処理完了。
【0071】
ここで図25を参照すると、好ましい実施形態に従ってストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラ102に含まれている、ブロック1802で開始する複数のデステージ・プロセスの例を示すフロー・チャートが、参照文字1800によって全体的に指定されて、示されている。好ましい実施形態に従って、次のようなHW処理ステップが実行される。揮発性割り当て(2Xバッファ)1804、AMGRを介したストリップ書き込み(Strip Write)1806、揮発性割り当て解除1808、B−DIPを受信する、SASミラー削除(ローカルまたはリモートあるいはその両方)1810、B−DIPを受信し、C−CLrを提供する、DIPのオフ*N1812、C−CLrを受信する、NV割り当て解除*N1814、およびブロック1816に示されている、処理完了。
【0072】
ここで図26を参照すると、好ましい実施形態に従ってストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラ102に含まれている、ブロック1902で開始するバイパス・プロセスの例を示すフロー・チャートが、参照文字1900によって全体的に指定されて、示されている。ブロック1904に示されているように、処理のサイズ/範囲のアレイ・オフセットで開始することによって、デステージ検索が呼び出される。判定ブロック1906に示されているように、状態ビットのOR=0かつ書き込まれるインデックスの番号=0であるかどうかのチェックが実行される。「はい」である場合、ブロック1908に示されているように、処理が完了する。「いいえ」である場合、判定ブロック1910に示されているように、書き込まれるインデックスの番号=0であるかどうかのチェックが実行される。書き込まれるインデックスの番号=0である場合、ブロック1912に示されているように、遅延が提供され、処理はブロック1904に戻り、デステージ検索が呼び出され、続行する。書き込まれるインデックスの番号が0に等しくない場合、ブロック1914に示されているように、例えばギャップがあるが、ドライブがスキップ処理をサポートしていないか、またはCLが、ギャップが生じる可能性のあるセクタI/Oを含んでいるために、処理をドライブに対して単一の処理として実行できないかどうかのチェックが実行される。処理をドライブに対して単一の処理として実行できない場合、ブロック1916に示されているように、重複したデステージまたは直列化したデステージが実行される。処理をドライブに対して単一の処理として実行できる場合、ブロック1918に示されているように、単一のデステージが実行される。処理はブロック1904に戻り、デステージ検索が呼び出され、続行する。
【0073】
ここで図27を参照すると、好ましい実施形態に従ってストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラ102に含まれている、レジスタに基づくパージ・ハードウェア支援ツール・キットの例が、参照文字2000によって全体的に指定されて、示されている。ブロック2002に示されているように、WCハードウェアがすべてのCLを読み込み、この範囲に一致するいずれのCLも、次のことを発生させる。割り当て=1、PIP=0、MIP=0、かつHASHV=1である場合、PIPをオンにし、カウンタをインクリメントする。カウンタをインクリメントし、DIP=0かつOIP=0である場合、DIPをオンにし、LRUから削除し、CLをページ・テーブル・リストに入れる。この間に、WCエンジンはCBを処理することができ、この機能はCB処理とインターリーブする。FWによって読み込まれるレジスタ2004は次を含む。
アレイID(7:0)2006
開始アレイ・オフセット(44:0)(4KBでアライメントされなければならないため、ビット(2:0)=0)2008
終了アレイ・オフセット・サイズ(44:0)(4KBの倍数でなければならないため、ビット(2:0)=0)2010
ページ・テーブル・リスト・ポインタ(31:0)2012
ページ・テーブル・サイズ(11:0)(最大、4K−1個のエントリ)2014
ページ・テーブルの現在のサイズ(11:0)2016
現在のCLインデックス(24:0)2018(開始時にゼロに設定され、一時停止後に保持されてよい)
最大CLインデックス(24:0)2020
アクティブ・ビット、ページ・テーブル中断ビット2022、および
現在のパージ・カウンタ(24:0)2024(割り当て解除によって、PIPビットが設定されたすべてのCLに関してデクリメントされる)
【0074】
CL2026は、PIP(パージ進行中)ビット2028(設定された場合、パージ保留カウントをインクリメントし、割り当て解除時にパージ保留カウントをデクリメントする)を含む。イベントQエントリ2030は、ページ・テーブル・リストが満杯である場合に前述の一時停止を含み、パージ・ページ・リスト・イベントQエントリを送信する2032。パージが破棄を完了し、ページ・テーブル・リストが空でない場合に、パージ・ページ・リスト・イベントQエントリを送信する2034(11:10=タイプ=11b)。次のことに注意する。再起動されなければならず、パージが完了し、かつカウンタがゼロになった後に、パージ完了イベントQエントリを送信する2036(11:10=タイプ=10b)。LBAの小さい範囲に対してキャッシュ・データをパージするために、FWがデステージ検索を使用するということに注意する。LBAのより大きい範囲に対しては、パージ・エンジンが使用されるべきである。
【0075】
ここで図28および29を参照すると、好ましい実施形態に従ってストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラ102に含まれている、パージ・エンジン・プロセスの例を示すフロー・チャートが、参照文字2100、2200によって全体的に指定されて、それぞれ示されている。図28では、パージ・エンジン・プロセスがブロック2102で開始され、判定ブロック2104に示されているように、WCエンジンがアイドル状態であるかどうかのチェックが実行される。WCエンジンがアイドル状態であることが識別された場合、判定ブロック2106に示されているように、すべてのCLが処理されたかどうかのチェックが実行される。WCエンジンがアイドル状態であることが識別されなかった場合、ブロック2108に示されているようにCLが処理され、判定ブロック2110に示されているようにページ・リストが満杯かどうかのチェックが実行される。ページ・リストが満杯でない場合、判定ブロック2112に示されているように、256K境界であるかどうかのチェックが実行される。256K境界である場合、処理は、判定ブロック2104でのWCエンジンがアイドル状態であるかどうかのチェックに戻り、続行する。ページ・リストが満杯である場合、ブロック2114に示されているように、有効なインデックスの番号で部分的パージが示されることが提供される。すべてのCLが処理された場合、判定ブロック2116に示されているように、ページ・リストが空であるかどうかのチェックが実行される。ページ・リストが空でない場合、ブロック2114で、有効なインデックスの番号で部分的パージが示されることが提供される。ページ・リストが空である場合、判定ブロック2118に示されているように、パージ・カウンタがゼロであるかどうかのチェックが実行される。「はい」である場合、ブロック2120に示されているように、パージ完了が示される。「いいえ」である場合、ブロック2122に示されているように、処理が完了する。
【0076】
図29を参照すると、ブロック2202でパージ要求が開始されており、これには、判定ブロック2204に示されているように、進行中のパージが現在実行されているかどうかのチェックが含まれている。「はい」である場合、ブロック2205に示されているように、パージ要求がキューに入れられる。「いいえ」である場合、ブロック2206に示されているように、アレイIDおよびLBAの範囲に関して、パージ・エンジン・ルーチンが呼び出される。判定ブロック2208に示されているように、インデックスが検出されてパージ・エンジンが一時停止されているかどうかのチェックが実行される。「はい」である場合、ブロック2210に示されているように、SASミラー削除が実行される(ローカルまたはリモートあるいはその両方)。ブロック2212に示されているように、DIPがオフにされ、ブロック2214に示されているように、NV割り当て解除が提供される。ブロック2216に示されているように、パージ・エンジンが再起動(一時停止解除)され、インデックスが検出されてパージ・エンジンが一時停止されているかどうかをチェックする判定ブロック2208に戻り、続行する。インデックスが検出されてパージ・エンジンが一時停止されたことが識別されなかった場合、ブロック2218に示されているように、パージが完了する。その後、判定ブロック2220に示されているように、キューに入れられたパージ要求が存在するかどうかのチェックが実行される。「はい」の場合、処理は、ブロック2206でのアレイIDおよびLBAの範囲に関するパージ・エンジン・ルーチンの呼び出しに戻り、続行する。「いいえ」である場合、ブロック2222に示されているように、処理が完了する。
【0077】
ここで図30を参照すると、好ましい実施形態に従ってストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラ102に含まれている、ハードウェア・カウンタおよび統計情報の例が、参照文字2300によって全体的に指定されて、示されている。ハードウェア・カウンタおよび統計情報2300は、HWによってアレイIDごとに維持され、次を含んでいる。
現在のカウンタ値(CL)2302
現在のカウンタ値(局所性ビット)2304
HWM(CL)2306
HWM(局所性ビット)2308
LWM(CL)2310
LWM(局所性ビット)2312
LRU UP、LRU上の最も古いCLエントリ、ゼロ=null2314
LRU DOWN、新しいCLが配置される次の位置、ゼロ=null2316
現在のカウンタ値(WCインストールの合計)2318
現在のカウンタ値(オーバーレイを伴うWCインストール)2320
現在のカウンタ値(WC読み取りの合計)2322
現在のカウンタ値(完全なキャッシュ読み取りヒットを伴うWC読み取り)2324
【0078】
本発明の特徴によれば、キャッシュ管理の大部分がハードウェア制御下にある状態では、ハードウェアによる支援なしに、ファームウェアがアレイごとのキャッシュしきい値(すなわち、アレイごとのキャッシュ内のデータの望ましいレベル)およびアレイごとのキャッシュ制限(すなわち、アレイごとのキャッシュ内のデータの最大量)の管理を支援するのは困難であると考えられる。管理するべき全体的(アレイではない)しきい値および制限も存在する。ハードウェアは、キャッシュしきい値およびキャッシュ制限の管理を支援するために、ファームウェアからの入力(レジスタ)およびファームウェアへの出力(レジスタおよびイベント)を提供する。
【0079】
本発明の特徴に従って、デステージ・レートを動的に最適化するためのトリガに基づく新しい方法が提供される。このトリガに基づく新しい方法は、キャッシュ・ページの高トリガおよび低トリガ(high and low trigger)、ならびにキャッシュCLの高トリガおよび低トリガに、レジスタのセットを使用する。ハードウェアは、これらの各カウントのためのカウンタを維持し、ハードウェア・カウンタがこれらの高トリガまたは低トリガのいずれかと交差したときに、ファームウェアが処理するイベントを生成する。これらのトリガ値が交差し、これらのイベントが処理されると、ファームウェアは、それに応じて、デステージのキューの長さを調整する。キャッシュ・ページまたはキャッシュCLの高水準値が交差した場合、デステージのキューの長さを増やすことができる。同時に、次の交差を検出するために、キャッシュ・ページまたはキャッシュCLあるいはその両方の高水準値および低水準値のレジスタ値が増やされる。キャッシュ・ページまたはキャッシュCLの低水準値が交差した場合、高水準値および低水準値の設定と共に、デステージ・レートが低減されてよい。デステージ・レートは、キャッシュ・ページまたはキャッシュCLのいずれか高い方によって決定される。過剰なイベントを避けるために、キャッシュ・ページまたはキャッシュCLが高水準値と交差したときに、両方の高水準値を上に移動させる。ただし、最も使用率の高いリソースの低水準値を移動させることのみが重要である。本質的に、より高いデステージ・レートを引き起こしているリソースは、デステージ・レートを低減できるタイミングを検出するために低水準値を監視しなければならないリソースのみである。
【0080】
本発明の特徴に従って、キャッシュ・ページまたはキャッシュCLの低水準値が交差したときに、それがより使用率の低いリソースである場合、デステージ・レートは変更されず、そのリソースの低水準値のみが下方に調整されなければならない。それがより使用率の高いリソースである場合、より使用率の低いリソースがより使用率の高いリソースになったかどうかを決定するために、より使用率の低いリソースのレベルがチェックされなければならない。その後、より使用率の高いリソースに基づいて、デステージ・レートが設定される。両方の高水準値も、より使用率の高いリソースに基づいて設定される。次に、次のより低いデステージ・レートのトリガ・ポイントで、より使用率の高いリソースの低水準値が設定されなければならない。最後に、より使用率の低いリソースの低水準値が、より使用率の高いリソースの新しい設定よりも高い場合、その低水準値も低減されなければならない。
【0081】
本発明の特徴に従って、アレイごとのトリガに基づく方法が、リソースごとの制限を動的に調整する。この方法は、リソースごとのキャッシュCLの高トリガおよび低トリガ、およびリソースごとの局所性カウントの高トリガおよび低トリガのためのレジスタのセットを使用する。ハードウェアは、これらの各カウントのためのカウンタを維持し、ハードウェア・カウンタがこれらの高トリガまたは低トリガのいずれかと交差したときに、ファームウェアが処理するイベントを生成する。基本的に、これらのトリガは局所性カウントに対するCLの比率を監視し、リソースごとの制限を調整するために使用される。CLカウントが高水準値と交差した場合は、制限が減らされるべきである。同時に、CLの高水準値および低水準値が増やされるべきである。局所性カウントが高水準値と交差した場合、制限が増やされるべきであり、局所性カウントの高水準値および低水準値が増やされるべきである。CLカウントが低水準値と交差した場合、制限が増やされるべきであり、CLの高水準値および低水準値が減らされるべきである。局所性カウントが低水準値と交差した場合、制限が減らされるべきであり、局所性カウントの高水準値および低水準値が減らされるべきである。
【0082】
ここで図31および32を参照すると、好ましい実施形態に従ってストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラ102に含まれている、CL制限およびCLしきい値の例が、参照文字2400、2500によって全体的に指定されて、それぞれ示されている。
【0083】
図31(CL制限およびCLしきい値2400)では、高水準値(HWM)および低水準値(LWM)の例と共に、NV 4Kインデックスの全体的制限(キャッシュ・ディレクトリのサイズ)およびNV 4Kインデックスの全体的しきい値(制限のnn%)が2402に示されており、NV 528インデックスの全体的制限(実際のキャッシュ・メモリのサイズ)およびNV 528インデックスの全体的しきい値(制限のnn%)が2404に示されている。アレイ1(2406)、アレイ2(2408)、アレイ3(2410)、およびアレイ4(2412)に示されているように、HWMおよびLWMに対して、アレイごとの制限の各例が破線で示されており、アレイごとのしきい値の各例が点線で示されている。
【0084】
図32において、CL制限およびCLしきい値2500は、
CLカウント(アレイIDごと)、
CL局所性カウント(アレイIDごと)、
NV 4Kフリー・インデックス(free indexes)(ヘッド・ポインタ/テール・ポインタを介する)、および
NV 528フリー・インデックス(ヘッド・ポインタ/テール・ポインタを介する)を含んでいるレジスタ2504からの、HWからの入力2502を含んでいる。イベント2506からの、HWからの入力2502は、次を含んでいる。
HWMの上のNV 4K、LWMの下のNV 4K、HWMの上のNV 528
LWMの下のNV 528
HWMの上のアレイCLカウント
LWMの下のアレイCLカウント
HWMの上のアレイCL局所性カウント
LWMの下のアレイCL局所性カウント
【0085】
制限およびしきい値計算機能FW2508は、HWからの入力2502を受信し、CL制限の更新(アレイごと)2512を含んでいるHWへの出力2510を提供する。これは、FWアレイ待機Q更新ポート(FW Array Wait Q Update Port)を使用して、加算または減算によって実行される。HWへの出力2510は、アレイに基づくCLカウントおよびCL局所性カウントに関するHWM/LWMの更新2514を含んでいる。NV 4Kフリー・インデックスおよびNV 528フリー・インデックスのHWM/LWMが定期的に変更されないということに注意する。その他の出力2516は、デステージ・レート2518を含んでいる。
【0086】
ここで図33を参照すると、好ましい実施形態に従ってストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラ102に含まれている、全体的イベント処理の例を示すフロー・チャートが、参照文字2600によって全体的に指定されて、示されている。判定ブロック2602に示されているように、HWMまたはLWMが識別される。HWMの場合、判定ブロック2604に示されているように、ページまたはCLが識別される。ブロック2606に示されているように、識別されたページに関して、ページおよびCLのHWMが増やされる。ブロック2608に示されているように、ページのLWMが増やされる。ブロック2610に示されているように、識別されたCLに関して、ページおよびCLのHWMが増やされる。ブロック2612に示されているように、CLのLWMが増やされる。ブロック2614に示されているように、デステージ・レートが増やされる。LWMの場合、判定ブロック2615に示されているように、ページまたはCLが識別される。ブロック2616に示されているように、識別されたページに関して、ページがCLよりも大きいかどうかのチェックが実行される。ページがCLよりも大きい場合、ブロック2620に示されているように、ページおよびCLのHWMが減らされる。ページがCLよりも大きくない場合、ブロック2622に示されているように、ページのLWMがゼロに設定され、CLのLWMが設定される。判定ブロック2624に示されているように、デステージ・レートを低くする必要性を識別するためのチェックが実行される。デステージ・レートを低くする必要性が識別されなかった場合、ブロック2626に示されているように、全体的イベント処理が完了する。ブロック2628に示されているように、上位リソース(top resource)のLWMが減らされる。ブロック2630に示されているように、デステージ・レートが減らされてから、ブロック2626で全体的イベント処理が完了する。判定ブロック2632に示されているように、識別されたCLに関して、ページがCLよりも小さいかどうかのチェックが実行される。ページがCLよりも小さい場合、ブロック2620でページおよびCLのHWMが減らされる。ページがCLよりも小さくない場合、ブロック2634に示されているように、CLのLWMがゼロに設定され、ページのLWMが設定される。判定ブロック2636に示されているように、デステージ・レートを低くする必要性を識別するためのチェックが実行される。デステージ・レートを低くする必要性が識別されなかった場合、ブロック2626で全体的イベント処理が完了する。その後、ブロック2630に示されているように、デステージ・レートが減らされてから、ブロック2626で全体的イベント処理が完了する。
【0087】
ここで図34を参照すると、好ましい実施形態に従ってストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラ102に含まれている、アレイごとの処理のステップの例を示すフロー・チャートが、参照文字2700によって全体的に指定されて、示されている。判定ブロック2702に示されているように、HWMまたはLWMが識別される。HWMの場合、判定ブロック2704に示されているように、局所性またはCLが識別される。ブロック2706に示されているように、識別されたCLに関して、CLのHWMおよびLWMが増やされる。ブロック2708に示されているように、アレイCLの制限が減らされる。ブロック2710に示されているように、識別された局所性に関して、局所性のHWMおよびLWMが増やされる。ブロック2712に示されているように、アレイCLの制限が増やされる。その後、判定ブロック2714に示されているように、CLカウントがより高いデステージ・レートを必要としているかどうかを決定するためのチェックが実行される。CLカウントがより高いデステージ・レートを必要としている場合、ブロック2716に示されているように、アレイのデステージ・レートが増やされ、ブロック2718に示されているように、アレイごとの処理が終了する。LWMの場合、判定ブロック2720に示されているように、局所性またはCLが識別される。ブロック2722に示されているように、識別されたCLに関して、CLのHWMおよびLWMが減らされる。ブロック2724に示されているように、アレイCLの制限が増やされる。ブロック2726に示されているように、識別された局所性に関して、局所性のHWMおよびLWMが減らされる。ブロック2728に示されているように、アレイCLの制限が減らされる。その後、処理は判定ブロック2714に戻り、CLカウントがより高いデステージ・レートを必要としているかどうかを決定するためのチェックが実行され、続行する。
【0088】
ここで図35および36を参照すると、好ましい実施形態に従ってストレージ・アダプタ拡張書き込みキャッシュ管理を実装するためにコントローラ102に含まれている、参照文字2800によって全体的に指定された全体的トリガおよび参照文字2900によって全体的に指定されたアレイごとのトリガの各例が、示されている。図35では、全体的トリガ2800が、垂直軸に示されたデステージ・レートおよび相対的書き込み率を含んでおり、水平軸に時間が示されている。図36では、アレイごとのトリガ2900が、垂直軸に示されたデステージ・レートおよびCLの数/局所性/制限を含んでおり、時間が、大規模な/順次処理およびランダム処理の領域と共に水平軸に示されている。図36では、CLカウントが実線で示され、局所性カウントが点線で示され、CL制限が破線で示されている。
【0089】
図37は、設計フローの例3000のブロック図を示している。設計フロー3000は、設計されるICの種類に応じて変化してよい。例えば、特定用途向け集積回路(ASIC:application specific IC)を構築するための設計フロー3000は、標準コンポーネントを設計するための設計フロー3000とは異なってよい。設計構造3002は、好ましくは、設計工程3004への入力であり、IPプロバイダ、コア開発業者、またはその他の設計会社から提供されてよく、あるいは設計フローのオペレータによって、またはその他のソースから生成されてよい。設計構造3002は、回路図、またはVerilog、VHDL、CなどのHDL(ハードウェア記述言語:hardware-description language)の形態で、IOAまたはコントローラ102を含む。設計構造3002は、1つまたは複数の機械可読媒体に格納されてよい。例えば、設計構造3002は、コントローラ102および性能状態機械200のテキスト・ファイルまたはグラフィック表現であってよい。設計工程3004は、好ましくは、コントローラ102をネットリスト3006に合成または変換し、ネットリスト3006は、例えば、集積回路設計内の他の素子および回路への接続を記述する、ワイヤ、トランジスタ、論理ゲート、制御回路、I/O、モデルなどのリストであり、機械可読媒体のうちの少なくとも1つに記録される。設計工程3004は、ネットリスト3006が回路の設計仕様および設計パラメータに応じて1回または複数回再合成される反復的工程であってよい。
【0090】
設計工程3004は、さまざまな入力を使用することを含んでよく、例えば、異なる技術ノード(32nm、45nm、90nmなど)などの特定の製造技術に関するモデル、レイアウト、および記号表現を含めて、一般的に使用される素子、回路、およびデバイスのセットを収容してよい素子ライブラリ3008、設計仕様3010、特性評価データ3012、検証データ3014、設計ルール3016、ならびにテスト・パターンおよびその他のテスト情報を含んでよいテスト・データ・ファイル3018からの入力を使用してよい。設計工程3004は、例えば、タイミング解析、検証、設計ルール・チェック、配置配線処理などの、標準的な回路設計工程をさらに含んでよい。集積回路設計の当業者は、設計工程504において使用される可能性のある電子設計自動化ツールおよび電子設計自動化アプリケーションの範囲を、本発明の範囲および思想を逸脱することなく理解することができる。本発明の設計構造は、いずれかの特定の設計フローに限定されない。
【0091】
設計工程3004は、好ましくは、図1および2に示されたような本発明の実施形態を、任意のその他の集積回路設計またはデータ(該当する場合)と共に、第2の設計構造3020に変換する。設計構造3020は、集積回路のレイアウト・データ(例えば、GDSII(GDS2)、GL1、OASIS、またはそのような設計構造を格納するのに適した任意のその他の形式で格納された情報)の交換に使用されるデータ形式で、ストレージ媒体上に存在する。設計構造3020は、例えば、テスト・データ・ファイル、設計内容ファイル、製造データ、レイアウト・パラメータ、ワイヤ、各レベルの金属、ビア、形状、製造ラインで配線するためのデータ、ならびに図1および2に示されたような本発明の実施形態を製造するために半導体製造業者によって要求される任意のその他のデータなどの情報を含んでよい。その後、設計構造3020は段階3022に進んでよく、段階3022において、例えば設計構造3020は、テープアウトに進み、製造に向けてリリースされたり、マスク会社に向けてリリースされたり、別の設計会社に送信されたり、顧客に返送されたりなどする。
【0092】
本発明は、図面に示された本発明の実施形態の詳細を参照して説明されたが、それらの詳細は、添付の特許請求の範囲において請求される本発明の範囲を限定することは意図されていない。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24
図25
図26
図27
図28
図29
図30
図31
図32
図33
図34
図35
図36
図37
【国際調査報告】