JP5126621B2 - 二重アクティブ・コントローラ内のライト・キャッシュ・データのフェイルオーバーおよびフェイルバック - Google Patents

二重アクティブ・コントローラ内のライト・キャッシュ・データのフェイルオーバーおよびフェイルバック Download PDF

Info

Publication number
JP5126621B2
JP5126621B2 JP2009298236A JP2009298236A JP5126621B2 JP 5126621 B2 JP5126621 B2 JP 5126621B2 JP 2009298236 A JP2009298236 A JP 2009298236A JP 2009298236 A JP2009298236 A JP 2009298236A JP 5126621 B2 JP5126621 B2 JP 5126621B2
Authority
JP
Japan
Prior art keywords
controller
cache
data
controllers
mode
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.)
Expired - Fee Related
Application number
JP2009298236A
Other languages
English (en)
Other versions
JP2010140493A (ja
Inventor
イー.レッベルス クラーク
ディー.ウォーカー マイケル
ジー.エルキントン スーザン
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.)
Seagate Technology LLC
Original Assignee
Seagate Technology LLC
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 Seagate Technology LLC filed Critical Seagate Technology LLC
Publication of JP2010140493A publication Critical patent/JP2010140493A/ja
Application granted granted Critical
Publication of JP5126621B2 publication Critical patent/JP5126621B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2053Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
    • G06F11/2089Redundant storage control functionality
    • G06F11/2092Techniques of failing over between control units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/85Active fault masking without idle spares

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

本発明は一般に分散記憶システムの分野に関するもので、より詳しくは、遠隔装置と記憶空間との間でコマンドを渡す二重アクティブ・コントローラをフェイルオーバーおよびフェイルバックするための機器および方法に関するものであるが、これに限定されるものではない。
記憶装置は高速かつ効率的にデータにアクセスするのに用いられる。或るタイプの記憶装置は、回転可能な記憶媒体と、媒体表面上に定義されたトラックにデータを書き込みまたトラックからデータを読み取る1個以上のデータ変換器とを用いる。
インテリジェント記憶要素(ISE)は多重記憶装置を用いて強化されたメモリ空間を形成してよい。一般に用いられるISEの1つのフォーマットはRAID(独立ディスクの冗長アレイ)構成を用いる。この構成では入力データをアレイ内の多重の記憶装置にまたがって記憶する。RAIDレベルに従って、ミラリング、ストライピング、およびパリティ・コード生成などの種々の技術を用いて、記憶されたデータの完全性を強化することができる。
記憶容量および性能のレベルを常に高めることが絶えず要求されるので、かかるアレイ内の記憶装置を動作中に管理する方法を改善する必要が常に存在する。本発明の好ましい実施の形態は一般にこれらの改善に関するものである。
本発明の好ましい実施の形態は一般に、分散記憶システム内で二重コントローラをフェイルオーバーおよびフェイルバックするための機器および関連する方法に関する。
或る実施の形態では、1対のコントローラと、キャッシュ内データをコントローラの対の残存する方のコントローラのキャッシュから他方のコントローラのキャッシュに直接コピーすることにより単一アクティブ・ライトバック・モードから二重アクティブ・ライトバック・モードにフェイルバックするための回路とを備えるデータ記憶装置を提供する。
或る実施の形態では、第2のコントローラが予めミラリングしたキャッシュ内データに依存して、第1および第2のコントローラの二重アクティブ・モードから第1のコントローラの単一アクティブ・モードにフェイルオーバーし、第2のコントローラを再初期化し、キャッシュ内データを第1のコントローラから第2のコントローラに直接コピーすることにより二重アクティブ・モードにフェイルバック方法を提供する。
或る実施の形態では、書込みコマンドを記憶空間に渡すためのそれぞれのライトバック・キャッシュを有する第1および第2のコントローラと、フェイルオーバーおよびフェイルバックを行ってコントローラを単一アクティブ・モードと二重アクティブ・モードでそれぞれ動作させる手段とを備えるデータ記憶システムを提供する。
本発明を特徴づけるこれらの機能および利点は、以下の詳細な説明を読み、関連する図面を参照すれば明らかになる。
図1は、本発明の好ましい実施の形態に従って構築されまた動作する記憶装置を一般に示す。 図2は、図1に示すような多数の記憶装置を用いるネットワーク・システムの機能的ブロック図である。 図3は、本発明の実施の形態に従って構築されたインテリジェント記憶要素の組立分解斜視図である。 図4は、図3のインテリジェント記憶要素の多重ディスク・アレイの部分組立分解斜視図である。 図5は、図3のインテリジェント記憶要素の機能ブロック図である。 図6は、図2のコントローラの好ましい構造の一般的な表現である。 図7は、図6の選択されたインテリジェント記憶プロセッサの機能的ブロック図である。 図8は、多数の並列のターゲット装置に接続する原始装置の一般的な表現である。 図9は、好ましい実施の形態に係るターゲット装置へのデータの並列同時転送を示す。 図10は、図5と同様な図である。 図11は、図3のインテリジェント記憶要素の異なる線図を示す。 図12は、本発明の好ましい実施の形態に従って実施されるステップを一般的に示すフェイルオーバー/フェイルバック・ルーチンを示す。
図1はユーザ・データを記憶しまた検索する例示の記憶装置100を示す。装置100は好ましくはハード・ディスク・ドライブであるが、必要に応じて他の装置構成を用いてよい。
ベース・デッキ102に上部カバー(図示しない)をかぶせると閉じたハウジングを形成する。ハウジング内にスピンドル・モータ104を取り付けて、好ましくは磁気記録ディスクである媒体106を制御して回転させる。
制御されて動くアクチュエータ108は、ボイス・コイル・モータ(VCM)112に電流を与えることにより、媒体表面上に定義されたトラックに近接する読取り/書込み変換器110のアレイを動かす。可撓回路組立体114は、アクチュエータ108と、外部取付けのプリント回路板(PCB)116上の装置制御電子回路との間に電気通信路を形成する。
図2はn個の記憶装置(SD)100を組み込んで強化した記憶空間122を形成する例示のネットワーク・システム120を一般的に示す。冗長コントローラ124は好ましくは記憶空間122とサーバ128(ホスト)との間にデータを転送する。サーバ128は、ローカル・エリア・ネットワーク(LAN)、インターネットなどの切換え機構130に接続する。
遠隔ユーザはパーソナル・コンピュータ(PC)132,134,136を介して機構130にそれぞれアクセスする。このようにして、選択されたユーザは記憶空間122にアクセスして、必要に応じてデータを書き込みまたは取り出すことができる。
装置100およびコントローラ124は、好ましくはインテリジェント記憶要素(ISE)127の中に組み込む。ISE127は好ましくは1つ以上の選択されたRAID(独立ディスクの冗長アレイ)構成を用いて、装置100にまたがってデータを記憶する。図2には1台のISE127と3台の遠隔ユーザとを示したが、認識されるようにこれは単なる例であって、制限するものではない。必要に応じて、ネットワーク・システム120は任意の数およびタイプのISE、サーバ、クライアントおよびホスト装置、機構の構成、およびプロトコルなどを用いてよい。
図3は本発明の実施の形態に従って構築されたISE127内のハードウエアを示す。棚137はコントローラ124を受けて係合して中央板138に電気的に接続するための空洞を定義する。棚137はキャビネット(図示しない)内に支持される。棚137は1対の多重ディスク組立体(MDA)139を中央板138の同じ側に受けて係合する。中央板139の反対側には、緊急電源である二重電池140、二重交流電源141、および二重インターフェース・モジュール142が接続する。好ましくは、二重構成要素ではMDA139の一方または両方が同時に動作するので、1つの構成要素が故障した場合はバックアップ保護を行うことができる。
図4は本発明の或る実施の形態に従って構築されたMDA139の拡大部分組立分解等角図である。MDA139は上部143と下部144とを有し、それぞれは5個のデータ記憶装置100を支持する。区画143,144は、中央板138(図3)と係合するコネクタ146を有する共通回路板145と接続できるようにデータ記憶装置100を揃える。カバー147は電磁妨害を遮蔽する。MDA139のこの例示の実施の形態は、特許出願10/884,605、「多重ディスク・アレイの搬送装置および方法(Carrier Device and Method for a Multiple Disc Array)」の主題である。これは本発明の被譲渡人に譲渡されたものであって、ここに援用する。MDAの別の例示の実施の形態は同じタイトルの特許出願10/817,378の主題である。これも本発明の被譲渡人に譲渡されたものであって、ここに援用する。別の同等の実施の形態では、密閉された容器内にMDA139を収めてよい。
図5は本発明の実施の形態に従って構築された例示のISE127の線図である。コントローラ124はインテリジェント記憶プロセッサ(ISP)150と共に動作してデータの完全性の信頼性を管理する。ISP150は、コントローラ124内、MDA139内、またはISE127内のどこか別のところに常駐してよい。
管理された信頼性の態様はRAID方式などの信頼できるデータ記憶フォーマットを作ることを含む。例えば、複数の異なるRAIDフォーマットの選択された1つを選択的に用いるシステムを形成することによりデータ記憶のための比較的強いシステムを作り、またMDA139を管理するのに用いるソフトウエアの複雑さを軽減すると共に記憶の故障状態から比較的速く回復できるようにファームウエア・アルゴリズムを最適にすることができる。この多重RAIDフォーマット・システムのこれらの態様は、特許出願10/817,264、「記憶媒体データ構造および方法(Storage Media Data Structure and Method)」に記述されている。これは本発明の被譲渡人に譲渡されたものであって、ここに援用する。
管理された信頼性は、システムを監視して使用することに基づく診断および訂正ルーチンのスケジューリングも含んでよい。データ回復の方法はデータをコピーしまた再構築することで行う。ISP150は、データを失わずにデータ記憶容量全体を「自己治癒」しやすくするようにしてMDA139と共に組み込む。ここで考えた管理された信頼性のこれらの態様は、特許出願10/817,617、「管理された信頼性の記憶システムおよび方法(Managed Reliability Storage System and Method)」に開示されている。これは本発明の被譲渡人に譲渡されたものであって、ここに援用する。管理された信頼性の他の態様は、予め決められた規則に関する予測的故障表示への応答の速さを含む。これは例えば、特許出願11/040,410、「分散記憶システムにおける予測された故障からの決定論的な予防的回復(Deterministic Preventive Recovery From a Predicted Failure in a Distributed Storage System)」に開示されている。これは本発明の被譲渡人に譲渡されたものであって、ここに援用する。
更にこれらの管理された信頼性の目的では、この実施の形態は「二重アクティブ」モードで動作することを考える。すなわち、1つのコントローラがキャッシュに転送したデータを別のコントローラに関連するキャッシュにミラリングする。好ましくは、このミラリングは受動的に行う。すなわち、ミラリングはホストが一切制御せずに行う。受動的ミラリングは同時継続出願中の「多重ターゲット装置へのデータの同時転送による受動的ミラリング(Passive Mirroring Through Concurrent Transfer of Data to Multiple Target Devices)」の主題である。これは本発明の被譲渡人に譲渡されたものであって、ここに援用する。
両方のコントローラ124が利用可能なときは、キャッシュ・データのミラリングは可能になる。一方のコントローラ124だけにフェイルオーバーするとミラリングは不能になる。しかし故障したコントローラ124が再稼動するとミラリングは再び可能になる。これについての詳細は、以下に受動ミラリングを可能にするISE127の説明から始める。
図6は中間バス151(Eバスと呼ぶ)により結合された2個のインテリジェント記憶プロセッサ(ISP)150を示す。各ISP150は、好ましくは共通のコントローラ板上の別個の集積回路パッケージ内に収める。好ましくは各ISP150は、ファイバ・チャネル・サーバ・リンク152を介して上流のアプリケーション・サーバと、またファイバ・チャネル記憶リンク154を介して記憶装置100と、それぞれ通信する。
ポリシー・プロセッサ156はコントローラ124のために実時間オペレーティング・システム(RTOS)を実行し、PCIバス160を介して各ISP150と通信する。更にポリシー・プロセッサ156はカストマイズされた論理を実行して、所定の記憶アプリケーションについてISP150と共に高度の処理タスクを実行する。ISP150およびポリシー・プロセッサ156は、動作中の必要に応じてメモリ・モジュールにアクセスする。
図7は図6の1個の選択されたISP150の好ましい構造を示す。多数の機能コントローラ(まとめて168で示す)が、多数のコントローラ動作のための機能コントローラ・コア(FCC)として働く。例えば、ホスト交換、直接メモリ・アクセス(DMA)、排他的論理和(XOR)、コマンド経路選択、メタデータ制御、およびディスク交換などを行う。各FCCは好ましくは高度に柔軟な機能集合およびインターフェースを含み、メモリ交換などのスケジューリング・タスクを容易にする。
リスト・マネージャは、好ましくはアレイ動作中に分散・収集リスト(SGL)を生成しまたは更新する。認識されるように、SGLは一般に、データを書き込み(すなわち、分散し)またはデータを読み取る(すなわち、収集する)メモリ位置を識別する。
各リスト・マネージャは好ましくはFCCによるメモリ・アクセスのためのメッセージ・プロセッサとして動作し、また好ましくは、定義されたプロトコルに従って受けたメッセージが定義する動作を実行する。
リスト・マネージャ170は多数のメモリ・モジュールとそれぞれ通信しまた制御する。メモリ・モジュールは、交換メモリ・ブロック172、キャッシュ・テーブル・ブロック174、バッファ・メモリ・ブロック176、PCIインターフェース182、およびSRAM178を含む。機能コントローラ168とリスト・マネージャ170とはクロスポイント・スイッチ(CPS)モジュール180を介してそれぞれ通信する。このようにして、コントローラ168の選択された機能コアはCPS180を介して、対応するリスト・マネージャ170への通信路を確立して状態を知らせ、メモリ・モジュールにアクセスし、または望ましいISP動作を起こす。
同様に、選択されたリスト・マネージャ170はCPS180を介して機能コントローラ168に応答を返してよい。図示していないが、好ましくは図7の各要素の間に別のデータ・バス接続を確立してその間のデータ転送を可能にする。認識されるように、必要に応じて他の構成を用いてよい。
図7は更に、ポリシー・プロセッサ156とISP150との間にトランザクションを確立しまた指示するPCIインターフェース(I/F)モジュール182を示す。Eバス・インターフェース(I/F)モジュール184はFCCと各ISP142,144のリスト・マネージャとの間のEバス146による通信を容易にする。またポリシー・プロセッサ156,158は、必要に応じてEバス146を介してシステムの他の部分との間で情報を送りまた受けてよい。
図6および図7のコントローラ構造の優れた点は拡張が容易で高度に機能的なアレイのデータ管理および制御が可能なことである。好ましくは、ストライプ・バッファ・リスト(SBL)またはその他のメタデータ構造を、記憶媒体のストライプ境界と、記憶トランザクション中にディスク・ストライプに関連するデータだけを記憶するキャッシュ内の基準データ・バッファとに対して配置される。処理の効率および管理を強化するため、アレイと種々のデータ書込み動作を行うときはコントローラ構造内の多数のキャッシュ位置にデータをミラリングしてよい。
図8は、多数のターゲット装置にデータを受動的にミラリングする、本発明の好ましい実施の形態を示す一般化された例示のデータ転送回路200を示す。回路200は、好ましくは図6および図7の選択された構成要素(選択されたFCCと各ISP150のそれぞれのアドレス生成器とを組み合わせたものなど)を示す。より詳しく述べると、原始装置はFCCインターフェース・ブロックを備え、ターゲット装置はISP150のそれぞれのバッファ・マネージャを備えると考える。しかし、これは単に例示のためであって、制限するものではない。
原始装置202は、好ましくはマルチライン・データ・バスなどの共通の経路208を介して第1および第2のターゲット装置204,206と通信する。図に示す経路はEバス境界209を越えて伸びているが、これは必ずしも必要でない。原始装置202は好ましくは双方向(送信および受信)直接メモリ・アクセス(DMA)ブロック210を含む。これはターゲット装置204,206のマネージャ・ブロック212,214とそれぞれインターフェースする。
原始装置202は好ましくは、データ・パケットなどのデータを経路208により第1および第2のターゲット装置204,206に同時に転送する。好ましくは、各FIFO216,218がこのデータ・パケットを同時に受けて、メモリ空間220,222に移す。この例では、メモリ空間220,222は好ましくはコントローラ構造内の異なるキャッシュ・メモリ位置を表す。
転送されたパケットを受けると、ターゲット装置204,206は好ましくはそれぞれ別個の肯定応答(ACK)信号を原始装置に送って、データ転送作業が正常に終了したことを確認する。ACK信号は転送が終了したとき、または転送の都合のよい境界で送ってよい。
第1の好ましい実施の形態では、同時転送は図9に示すように並列に行う。すなわち、例えば経路224で表される共通クロック信号を用いてFIFO216,218にそれぞれ同期してパケットをクロックする。この方法では、好ましくは単一DMA転送により各装置にそれぞれデータを転送する。転送速度は好ましくは経路208の転送速度能力に応じて決めるが、所定の環境の要求に従って他の要因も転送速度に影響を与えてよい。
必要ではないが、かかる同期転送はターゲット装置が名目上同一である(例えば、バッファ・マネージャがISP150などの名目上同じチップ・セット内にある)ときに特に適している。しかし、2つのターゲット装置の低い方に転送速度を合わせてよい場合は、異なるタイプの装置に転送を行ってよい。終了すると、各装置204,206は図に示すように別個の通信路226,228を介して別個の肯定応答(ACK1およびACK2)を送る。
次に、二重アクティブ・コントローラ・モードで動作中に、この実施の形態が受動ミラリングを用いて、記憶されているキャッシュ・データのフェイルセイフ冗長性を実現する方法について説明する。図10のISE127は、各コントローラ124A,124BにI/Oコマンドを渡すときに遠隔装置によりアドレス指定することができる。記憶容量が要求されると、データ記憶装置100の物理的データ・パック252に関する記憶プールから論理ユニット(LUN)250を作成し、また同様に物理的データ・パック256に関してLUN254を作成する。コントローラ124AはLUN250のユニット・マスタであり、コントローラ124BはLUN254のユニット・マスタである。これによりうまく負荷を分担することができる。すなわち、二重アクティブ動作モードではLUN250,254の両方に関連するI/Oコマンドを並列に処理することができる。
この実施の形態は、二重アクティブ・モードから単一アクティブ・モードにフェイルオーバーする新規な配置および方法を提供する。すなわち、2台のコントローラ124の一方(不動作コントローラ)がシステム100で利用できなくなると、他方(残留コントローラ)だけが一時的にLUN250,254の両方のユニット・マスタになる。この実施の形態は更に、不動作コントローラが回復して再び稼動できるようになると二重アクティブ・モードにフェイルバックするという新規な装置および方法を提供する。
次に、図11のキャッシュ・ミラリングの線図および図12の流れ図を用いてこの実施の形態が提供する機器および関連する方法を説明する。コントローラ124Aのキャッシュは、コントローラAのキャッシュへのデータ転送を受ける一次キャッシュ260(APと呼ぶことがある)と、コントローラBのキャッシュへのデータ転送のミラー・コピーを受ける二次キャッシュ262(BSと呼ぶことがある)とに分割される。同様にコントローラ124Bのキャッシュは、コントローラBのキャッシュへのデータ転送を受ける一次キャッシュ264(BPと呼ぶことがある)と、コントローラAのキャッシュへのデータ転送のミラー・コピーを受ける二次キャッシュ266(ASと呼ぶことがある)とに分割される。後で説明するが、この実施の形態では、メモリ内に記憶されている書かれた命令により、ISP150は残留コントローラ・キャッシュ内に記憶されているデータを以前の不動作コントローラ・キャッシュに直接コピーして二重アクティブ・モードにフェイルバックするステップを実行することができる。
二重アクティブ動作モードでは、ユニット・マスタ・コントローラは、ホストのアクセス・コマンドに応じて、キャッシュ・データを自分の一次キャッシュにライトバックし、またこのデータを他方のコントローラの二次キャッシュにミラリングする。非ユニット・マスタがホストのアクセス・コマンドを受けた場合でも、そのコマンドはEバス151によりユニット・マスタに渡される。より詳しく述べると、コントローラ124Bが書込みコマンドを実行すると、ライトバック・データをBP264内に記憶し、またコントローラ124AのBS262内にミラリングする。コントローラ124Bが故障した場合は、LUN250,254の両方のキャッシュ・データの全記録がコントローラ124AのAP260およびBS262キャッシュ内で利用できる。図12の流れ図のステップを用いて、この実施の形態に従ってフェイルオーバーした後フェイルバックする方法を説明する。
フェイルオーバー/フェイルバックの方法300は、二重アクティブ・モードで動作中に一方のコントローラ124が利用できなくなったという指示302で始まる。例として、図12の流れ図の中でコントローラ124Bが故障したとする。方法300はブロック304でコントローラ124を再ブートして、コントローラ124Aに関連するホスト・ポートを介して全てのLUN250,254を遠隔装置にマップし、またデータ・アクセス・コマンドを受けないようにコントローラ124Bに関連するホスト・ポートを不能にする。残存コントローラ124Aをすぐホット・ブートし、不動作コントローラ124Bをコールド・ブートして、管理された信頼性診断を始める。ブロック306でコントローラ124AはAP260およびBS262とだけトランザクションを行うためのキャッシュ・ノードおよびコンテキストを構築する。ブロック308でメタデータを更新して、全てのライトバック・キャッシュ・データがAP260およびBS262内だけに存在することを反映する。
次にブロック310で、全てのLUN250,254について単一アクティブ・コントローラ・モードでI/Oコマンドを可能にする。認識されるように、単一アクティブ・コントローラ・モードではキャッシュ転送のミラリングはやめる。また認識されるように、単一アクティブ・コントローラ・モードではBS262に新しいデータを書き込まない。第1の理由はミラリングを行わないからであり、第2の理由はLUN254に関連するコマンドの新しいライトバック・データはAP260内に記憶されるからである。ブロック312でBS262のフラッシングを始める。同時に、ブロック316で不動作コントローラ124Bが再稼動可の信号を出していないと判断する限り、ブロック314でI/O処理を続ける。
休止を必要とした故障条件から回復させるために、不動作コントローラ124Bに必要な診断を行って必要な対策を講じる。首尾よく回復すると再稼動可の信号を出す。制御はブロック318に進み、両方のコントローラ124をホット・ブートし、二重アクティブ・モードでの各ユニット・マネージャのホスト・ポートを介して全てのLUN250,254を遠隔装置にマップする。ブロック320で、これまでの不動作コントローラ124Bを初期化して、BP264およびAS266を両方ともクリアする。ブロック322で、AP260およびBS262内の書かれていないデータについてキャッシュ・ノードおよびコンテキストを構築する。ブロック323で、AP260およびBS262内の書かれていないデータをBP264およびAS266にミラリングする。ブロック324でメタデータを更新して、全象限AP260、BP264、AS266およびBS262内にライトバック・キャッシュ・データが存在することを反映する。
ブロック326で、二重アクティブ・モードを介して全てのLUN250,254についてI/Oコマンドを可能にする。次にブロック328で、前にブロック312で行ったフラッシングの結果、BS262がクリアされたかどうか判定する。ノーの場合はブロック330でフラッシングを続ける。ブロック328の判定がイエスの場合は制御はブロック332に進み、LUN254に関連するAP260内の全てのデータをBP264にコピーし、またBS262にミラリングする。認識されるように、システム100を二重アクティブ・モードに戻すには、書かれていないキャッシュ・データをこのように直接コピーする方が、AP260内にあるがLUN254に関連する、書かれていないキャッシュ・データをフラッシングする読み合わせ法より速い。最後に、ブロック334でI/Oコマンド処理を二重アクティブ・コントローラ・モードで続ける。
要約すると、データ記憶システム(100など)は1対のコントローラ(124A、124Bなど)と、キャッシュ内のデータをコントローラ対の残存する方のコントローラのキャッシュから他方のコントローラのキャッシュに直接コピーすることにより単一アクティブ・ライトバック・モードから二重アクティブ・ライトバック・モードにフェイルバックするための回路とを有する。好ましくは、残存コントローラからコピーされたデータは、二重アクティブ・モードのコントローラの他方のコントローラによるライトバック・キャッシングを介して予めミラリングされている。この回路は、フェイルバックのステップを行うために、メモリ内に記憶してプロセッサ(150など)が実行するコンピュータ命令を含んでよい。
別の実施の形態では、第2のコントローラが予めミラリングしたキャッシュ・データに依存して、第1および第2のコントローラの二重アクティブ・モードから第1のコントローラの単一アクティブ・モードにフェイルオーバーする方法(300など)を提供する。この方法では更に、コントローラを再初期化し、キャッシュ内のデータを第1のコントローラから第2のコントローラに直接コピーすることにより二重アクティブ・モードにフェイルバックする。
フェイルオーバーするステップは一次キャッシュ(260,264など)と二次キャッシュ(262,266など)に分割されたキャッシュをそれぞれ有するコントローラを特徴としてよい。フェイルオーバーするステップの前に、二重アクティブ・モードで第2のコントローラはその一次キャッシュ内にライトバック・キャッシュしたデータを第1のコントローラの二次キャッシュ内にミラリングする。またフェイルオーバーするステップは、第1のコントローラ・キャッシュ内に記憶されたデータについてキャッシュ・ノードおよびコンテキストを構築すること(306など)を特徴としてよい。またフェイルオーバーするステップは第2のコントローラと遠隔装置との間の書込みコマンドを送る通信を不能にする(304など)ことを特徴としてよい。またフェイルオーバーするステップは、メタデータを更新して全てのLUNを第1のコントローラだけに関連づける(308など)ことを特徴としてよい。またフェイルオーバーするステップは、以前第2のコントローラが二重アクティブ・モードでLUNの少なくとも1つを支配したことを特徴としてよい。
フェイルオーバーでは、第1のコントローラのキャッシュを介して全てのLUNに関連するデータに対して単一アクティブ・モードのライトバック・キャッシングを行うが、キャッシュ・ミラリングは行わない。第1のコントローラの二次キャッシュのフラッシングは好ましくは空になるまで行う。
再初期化するステップは、第2のコントローラのキャッシュをクリアし、第2のコントローラと遠隔装置との間の書込みコマンドを送る通信を可能にする(312〜320)ことを特徴としてよい。
フェイルバックするステップは、第1のコントローラが第2のコントローラから稼動可の信号を受けることを特徴としてよい。またフェイルバックするステップは、第1のコントローラ内に記憶された、書かれていないデータについてキャッシュ・ノードおよびコンテキストを構築し、次に第1のコントローラ内の書かれていないデータを第2のコントローラにミラリングし、次にメタデータを更新して全てのLUNを第1および第2のコントローラと関連づける(322,323,324など)ことを特徴としてよい。
フェイルバックするステップは第1のコントローラの一次キャッシュ内のデータを第2のコントローラの一次キャッシュにコピーし(332など)、コピーされたデータを、二重アクティブ・モードで第2のコントローラが支配するLUNに関連づけてよい。キャッシュ・ミラリングを再確立して第1および第2のコントローラの一次キャッシュを介してコマンドのライト・キャッシングを続けてよい(334など)。
或る実施の形態では、書込みコマンドを記憶空間に渡すためのそれぞれのライトバック・キャッシュを有する第1および第2のコントローラと、フェイルオーバーおよびフェイルバックを行ってコントローラを単一アクティブ・モードと二重アクティブ・モードでそれぞれ動作させる手段とを備えるデータ記憶システムを提供する。
この説明およびクレームの目的では、「フェイルオーバーおよびフェイルバックを行う手段」という用語は、残存キャッシュ内にあるが不動作コントローラに関連する書かれていないキャッシュ・データを、再初期化した不動作コントローラのキャッシュに直接コピーするという、上に説明した構造を意味する。これは残存コントローラのキャッシュ内の書かれていないデータに読み合わせフラッシュを行うという、ここで考えない他の解決策とは異なる。
理解されるように、これまでの記述で本発明の種々の実施の形態の多数の特徴および利点を、本発明の種々の実施の形態の構造および機能の詳細と共に述べたが、この詳細な記述は単なる例示であって、詳細に関しては、特に本発明の原理内の部分の構造および配置に関してクレームを表現する用語の広い一般的な意味で示す範囲で、変更を行ってよい。例えば、本発明の精神と範囲から逸れない限り特定の要素を特定の処理環境に従って変えてよい。
更に、ここに述べた実施の形態はデータ記憶アレイに関するものであるが、当業者が認識するように、クレームされた主題はこれに限定されるものではなく、本発明の精神および範囲から逸れない限り種々の他の処理システムを用いてよい。
124A 第1のコントローラ
124B 第2のコントローラ
260 第1のコントローラの一次キャッシュ(AP)
262 第1のコントローラの二次キャッシュ(BS)
264 第2のコントローラの一次キャッシュ(BP)
266 第2のコントローラの二次キャッシュ(AS)

Claims (2)

  1. データ記憶装置であって
    対のコントローラと
    ャッシュ内のデータを前記コントローラの対のうち障害が発生しなかった第1のコントローラのキャッシュから、障害が復旧して動作可能となった第2のコントローラのキャッシュにコピーすることにより、前記第1のコントローラのみを動作させる単一動作モードから前記第1および第2のコントローラを二重で動作させる二重動作モードにフェイルバックするための回路とを備え
    前記回路は、前記第1のコントローラ内に記憶された書かれていないデータについてキャッシュおよび制御情報を構築し、次に第1のコントローラ内の書かれていないデータを第2のコントローラにミラリングし、次にメタデータを更新してすべての論理ユニットを前記第1および第2のコントローラと関連づける、データ記憶装置。
  2. 第2のコントローラが予めミラリングしたキャッシュ・データに基づいて第1のコントローラを単一で動作させることにより前記第1および第2のコントローラの二重動作モードから前記第1のコントローラの単一動作モードにフェイルオーバーし、
    前記第2のコントローラを再初期化し、
    キャッシュ内のデータを前記第1のコントローラのキャッシュから前記第2のコントローラのキャッシュにコピーすることにより前記二重動作モードにフェイルバックし、
    前記フェイルバックするステップは、前記第1のコントローラ内に記憶された書かれていないデータについてキャッシュおよび制御情報を構築し、次に第1のコントローラ内の書かれていないデータを第2のコントローラにミラリングし、次にメタデータを更新してすべての論理ユニットを前記第1および第2のコントローラと関連づける、方法。
JP2009298236A 2006-06-30 2009-12-28 二重アクティブ・コントローラ内のライト・キャッシュ・データのフェイルオーバーおよびフェイルバック Expired - Fee Related JP5126621B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/479,846 2006-06-30
US11/479,846 US7444541B2 (en) 2006-06-30 2006-06-30 Failover and failback of write cache data in dual active controllers

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2007173241A Division JP4986045B2 (ja) 2006-06-30 2007-06-29 二重アクティブ・コントローラ内のライト・キャッシュ・データのフェイルオーバーおよびフェイルバック

Publications (2)

Publication Number Publication Date
JP2010140493A JP2010140493A (ja) 2010-06-24
JP5126621B2 true JP5126621B2 (ja) 2013-01-23

Family

ID=38878317

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2007173241A Expired - Fee Related JP4986045B2 (ja) 2006-06-30 2007-06-29 二重アクティブ・コントローラ内のライト・キャッシュ・データのフェイルオーバーおよびフェイルバック
JP2009298236A Expired - Fee Related JP5126621B2 (ja) 2006-06-30 2009-12-28 二重アクティブ・コントローラ内のライト・キャッシュ・データのフェイルオーバーおよびフェイルバック

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2007173241A Expired - Fee Related JP4986045B2 (ja) 2006-06-30 2007-06-29 二重アクティブ・コントローラ内のライト・キャッシュ・データのフェイルオーバーおよびフェイルバック

Country Status (2)

Country Link
US (1) US7444541B2 (ja)
JP (2) JP4986045B2 (ja)

Families Citing this family (61)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3774826B2 (ja) * 2002-07-11 2006-05-17 日本電気株式会社 情報処理装置
JP4519170B2 (ja) * 2005-02-09 2010-08-04 富士通株式会社 フィードバック制御装置
US20070233961A1 (en) * 2006-03-31 2007-10-04 Banning John P Multi-portioned instruction memory
US7747896B1 (en) * 2006-06-30 2010-06-29 Guillermo Rozas Dual ported replicated data cache
US7945730B2 (en) * 2006-11-13 2011-05-17 Lsi Corporation Systems and methods for recovering from configuration data mismatches in a clustered environment
US7930481B1 (en) 2006-12-18 2011-04-19 Symantec Operating Corporation Controlling cached write operations to storage arrays
US20080263391A1 (en) * 2007-04-20 2008-10-23 International Business Machines Corporation Apparatus, System, and Method For Adapter Card Failover
US7870417B2 (en) * 2007-04-20 2011-01-11 International Business Machines Corporation Apparatus, system, and method for adapter card failover
US8060775B1 (en) * 2007-06-14 2011-11-15 Symantec Corporation Method and apparatus for providing dynamic multi-pathing (DMP) for an asymmetric logical unit access (ALUA) based storage system
US8006133B2 (en) * 2008-02-14 2011-08-23 International Business Machines Corporation Non-disruptive I/O adapter diagnostic testing
JP4802207B2 (ja) * 2008-04-23 2011-10-26 株式会社日立製作所 情報処理システムの制御方法、情報処理システム、およびプログラム
US7895465B2 (en) * 2008-06-03 2011-02-22 International Business Machines Corporation Memory preserved cache failsafe reboot mechanism
US8615678B1 (en) * 2008-06-30 2013-12-24 Emc Corporation Auto-adapting multi-tier cache
US8006128B2 (en) * 2008-07-31 2011-08-23 Datadirect Networks, Inc. Prioritized rebuilding of a storage device
US8495291B2 (en) 2008-08-21 2013-07-23 Infinidat Ltd. Grid storage system and method of operating thereof
US8443137B2 (en) * 2008-08-21 2013-05-14 Infinidat Ltd. Grid storage system and method of operating thereof
US20100049919A1 (en) * 2008-08-21 2010-02-25 Xsignnet Ltd. Serial attached scsi (sas) grid storage system and method of operating thereof
US8452922B2 (en) * 2008-08-21 2013-05-28 Infinidat Ltd. Grid storage system and method of operating thereof
US8078906B2 (en) * 2008-08-21 2011-12-13 Infinidat, Ltd. Grid storage system and method of operating thereof
US8499120B2 (en) * 2008-10-17 2013-07-30 Seagate Technology Llc User selectable caching management
US8010835B2 (en) * 2008-11-11 2011-08-30 Datadirect Networks, Inc. Storage device realignment
US20100180151A1 (en) * 2009-01-15 2010-07-15 Jibbe Mahmoud K Method for handling interrupted writes using multiple cores
US8732396B2 (en) * 2009-06-08 2014-05-20 Lsi Corporation Method and apparatus for protecting the integrity of cached data in a direct-attached storage (DAS) system
US8635420B2 (en) 2010-07-22 2014-01-21 Susan Elkington Resilient mirroring utilizing peer-to-peer storage
US9021223B2 (en) 2011-07-22 2015-04-28 Xiotech Corporation Resilient mirroring
JP5768587B2 (ja) 2011-08-17 2015-08-26 富士通株式会社 ストレージシステム、ストレージ制御装置およびストレージ制御方法
JP5884606B2 (ja) * 2012-03-30 2016-03-15 富士通株式会社 ストレージ管理方法、システム、およびプログラム
US9798623B2 (en) * 2012-05-11 2017-10-24 Seagate Technology Llc Using cache to manage errors in primary storage
US9015525B2 (en) * 2012-06-19 2015-04-21 Lsi Corporation Smart active-active high availability DAS systems
GB2503274A (en) * 2012-06-22 2013-12-25 Ibm Restoring redundancy in a RAID
US9367412B2 (en) * 2012-06-25 2016-06-14 Netapp, Inc. Non-disruptive controller replacement in network storage systems
US9582559B1 (en) * 2012-06-29 2017-02-28 EMC IP Holding Company LLC Multi-site storage system with replicated file system synchronization utilizing virtual block storage appliances
WO2014084836A1 (en) * 2012-11-29 2014-06-05 Hewlett-Packard Development Company, L.P. Fault tolerance in a multi-core circuit
US20150019822A1 (en) * 2013-07-11 2015-01-15 Lsi Corporation System for Maintaining Dirty Cache Coherency Across Reboot of a Node
US9239797B2 (en) * 2013-08-15 2016-01-19 Globalfoundries Inc. Implementing enhanced data caching and takeover of non-owned storage devices in dual storage device controller configuration with data in write cache
JP6187150B2 (ja) 2013-10-25 2017-08-30 富士通株式会社 ストレージ制御装置、ストレージ装置、及びストレージ制御プログラム
JP6307847B2 (ja) * 2013-11-19 2018-04-11 富士通株式会社 情報処理装置,制御装置及び制御プログラム
KR101940311B1 (ko) * 2014-02-12 2019-01-18 한국전자통신연구원 네트워크 운영 모드 기반 프로세스 제어 방법 및 장치
US9887008B2 (en) * 2014-03-10 2018-02-06 Futurewei Technologies, Inc. DDR4-SSD dual-port DIMM device
JP6175566B2 (ja) * 2014-06-30 2017-08-02 株式会社日立製作所 ストレージシステム及び記憶制御方法
US20160011929A1 (en) * 2014-07-08 2016-01-14 Netapp, Inc. Methods for facilitating high availability storage services in virtualized cloud environments and devices thereof
US9632890B2 (en) 2014-07-08 2017-04-25 Netapp, Inc. Facilitating N-way high availability storage services
JP6185668B2 (ja) * 2014-07-25 2017-08-23 株式会社日立製作所 ストレージ装置
US20160212198A1 (en) * 2015-01-16 2016-07-21 Netapp, Inc. System of host caches managed in a unified manner
US9600378B2 (en) * 2015-01-29 2017-03-21 Dell Products, Lp Efficient mechanism to replicate data for multiple controllers
US11080192B2 (en) * 2015-05-14 2021-08-03 Hitachi, Ltd. Storage system and storage control method
US10169172B2 (en) * 2015-08-11 2019-01-01 International Business Machines Corporation Passive detection of live systems during controller failover in distributed environments
US9990151B2 (en) * 2016-05-27 2018-06-05 Netapp, Inc. Methods for flexible data-mirroring to improve storage performance during mobility events and devices thereof
WO2018173246A1 (ja) * 2017-03-24 2018-09-27 株式会社日立製作所 ストレージシステム及び記憶制御方法
US10191812B2 (en) * 2017-03-30 2019-01-29 Pavilion Data Systems, Inc. Recovery mechanism for low latency metadata log
US10445004B2 (en) 2017-03-30 2019-10-15 Pavilion Data Systems, Inc. Low latency metadata log
US10540246B2 (en) * 2017-07-27 2020-01-21 International Business Machines Corporation Transfer track format information for tracks in cache at a first processor node to a second process node to which the first processor node is failing over
US10572355B2 (en) 2017-07-27 2020-02-25 International Business Machines Corporation Transfer track format information for tracks in cache at a primary storage system to a secondary storage system to which tracks are mirrored to use after a failover or failback
US10579296B2 (en) 2017-08-01 2020-03-03 International Business Machines Corporation Providing track format information when mirroring updated tracks from a primary storage system to a secondary storage system
US10585769B2 (en) * 2017-09-05 2020-03-10 International Business Machines Corporation Method for the implementation of a high performance, high resiliency and high availability dual controller storage system
CN109828868B (zh) * 2019-01-04 2023-02-03 新华三技术有限公司成都分公司 数据存储方法、装置、管理设备和双活数据存储系统
US11327858B2 (en) 2020-08-11 2022-05-10 Seagate Technology Llc Preserving data integrity during controller failure
US11669515B2 (en) * 2020-10-28 2023-06-06 Accelstor Technologies Ltd Data access system
US11403218B2 (en) 2020-11-06 2022-08-02 Seagate Technology Llc Storage controller cache integrity management
CN114089923A (zh) * 2021-11-29 2022-02-25 新华三大数据技术有限公司 一种双活存储系统及其数据处理方法
US11847071B2 (en) 2021-12-30 2023-12-19 Pure Storage, Inc. Enabling communication between a single-port device and multiple storage system controllers

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5790775A (en) * 1995-10-23 1998-08-04 Digital Equipment Corporation Host transparent storage controller failover/failback of SCSI targets and associated units
JP3772369B2 (ja) * 1995-11-20 2006-05-10 株式会社日立製作所 記憶サブシステム
US5761705A (en) * 1996-04-04 1998-06-02 Symbios, Inc. Methods and structure for maintaining cache consistency in a RAID controller having redundant caches
US6006342A (en) * 1997-12-11 1999-12-21 International Business Machines Corporation Failover and failback system for a direct access storage device
US6004342A (en) * 1998-03-26 1999-12-21 Filis; Elias A. Nasal insert device for improving breathing
US6513097B1 (en) * 1999-03-03 2003-01-28 International Business Machines Corporation Method and system for maintaining information about modified data in cache in a storage system for use during a system failure
US6574709B1 (en) * 1999-09-30 2003-06-03 International Business Machine Corporation System, apparatus, and method providing cache data mirroring to a data storage system
US6578158B1 (en) * 1999-10-28 2003-06-10 International Business Machines Corporation Method and apparatus for providing a raid controller having transparent failover and failback
US6658590B1 (en) * 2000-03-30 2003-12-02 Hewlett-Packard Development Company, L.P. Controller-based transaction logging system for data recovery in a storage area network
US6629264B1 (en) * 2000-03-30 2003-09-30 Hewlett-Packard Development Company, L.P. Controller-based remote copy system with logical unit grouping
US6643795B1 (en) * 2000-03-30 2003-11-04 Hewlett-Packard Development Company, L.P. Controller-based bi-directional remote copy system with storage site failover capability
GB0025226D0 (en) * 2000-10-14 2000-11-29 Ibm Data storage system and method of storing data
US6681339B2 (en) * 2001-01-16 2004-01-20 International Business Machines Corporation System and method for efficient failover/failback techniques for fault-tolerant data storage system
IES20010783A2 (en) * 2001-04-26 2002-09-18 Richmount Computers Ltd Data storage apparatus
US6587921B2 (en) * 2001-05-07 2003-07-01 International Business Machines Corporation Method and apparatus for cache synchronization in a clustered environment
US6931487B2 (en) * 2001-10-22 2005-08-16 Hewlett-Packard Development Company L.P. High performance multi-controller processing
US6912669B2 (en) * 2002-02-21 2005-06-28 International Business Machines Corporation Method and apparatus for maintaining cache coherency in a storage system
JPWO2003090089A1 (ja) * 2002-04-22 2005-08-25 富士通株式会社 キャッシュ装置
JP4704659B2 (ja) * 2002-04-26 2011-06-15 株式会社日立製作所 記憶装置システムの制御方法および記憶制御装置
US7307948B2 (en) * 2002-10-21 2007-12-11 Emulex Design & Manufacturing Corporation System with multiple path fail over, fail back and load balancing
US7085886B2 (en) * 2003-05-28 2006-08-01 International Buisness Machines Corporation Autonomic power loss recovery for a multi-cluster storage sub-system
JP4338075B2 (ja) * 2003-07-22 2009-09-30 株式会社日立製作所 記憶装置システム
JP2005122453A (ja) * 2003-10-16 2005-05-12 Hitachi Ltd ストレージ装置のディスクコントローラ制御方式およびストレージ装置
JP4319017B2 (ja) * 2003-12-02 2009-08-26 株式会社日立製作所 ストレージシステムの制御方法、ストレージシステム、及び記憶装置

Also Published As

Publication number Publication date
JP2010140493A (ja) 2010-06-24
JP4986045B2 (ja) 2012-07-25
US20080005614A1 (en) 2008-01-03
US7444541B2 (en) 2008-10-28
JP2008059558A (ja) 2008-03-13

Similar Documents

Publication Publication Date Title
JP5126621B2 (ja) 二重アクティブ・コントローラ内のライト・キャッシュ・データのフェイルオーバーおよびフェイルバック
US7607035B2 (en) Disk array apparatus and method for controlling the same
US8024525B2 (en) Storage control unit with memory cache protection via recorded log
US7975168B2 (en) Storage system executing parallel correction write
US7328324B2 (en) Multiple mode controller method and apparatus
US7013372B2 (en) Method for controlling information processing system, information processing system and information processing program
US7600152B2 (en) Configuring cache memory from a storage controller
JP5511960B2 (ja) 情報処理装置、及びデータの転送方法
JP2007086972A (ja) ストレージシステム、二重化制御方法、及びプログラム
US20070088925A1 (en) Storage system and remote copy method for storage system
WO2002003204A1 (en) Three interconnected raid disk controller data processing system architecture
JP2005267038A (ja) ストレージシステムの運用方法
TW200540623A (en) System and method for drive recovery following a drive failure
JP2005301419A (ja) ディスクアレイ装置およびそのデータ処理方法
WO2015058542A1 (zh) 独立冗余磁盘阵列的重构方法及装置
JP2007200299A (ja) データ記憶システムに配置された記憶アレイを再構成するための装置及び方法
JP4398596B2 (ja) ディスクアレイ装置
JP3793544B2 (ja) ディスクアレイ装置及びその制御方法
US20080005385A1 (en) Passive mirroring through concurrent transfer of data to multiple target devices
US20090063770A1 (en) Storage control apparatus, storage control program, and storage control method
JP2003345530A (ja) 記憶システム
CN107515723A (zh) 用于管理存储系统中的存储器的方法和系统
JP5150947B2 (ja) 広域予備化した分散記憶システム
JP3620205B2 (ja) 着脱可能な記憶媒体を使用した高信頼記憶システム
JP2008016028A (ja) 広域複製を持つ分散記憶システム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100618

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20100618

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120417

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120717

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20121002

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121017

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151109

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees