JP2013538389A - Xfr_rdyの動的なイネーブリングおよびディセーブリングのための方法、コンピュータ・プログラム、およびシステム(xfr_rdyの動的なイネーブリングおよびディセーブリング) - Google Patents
Xfr_rdyの動的なイネーブリングおよびディセーブリングのための方法、コンピュータ・プログラム、およびシステム(xfr_rdyの動的なイネーブリングおよびディセーブリング) Download PDFInfo
- Publication number
- JP2013538389A JP2013538389A JP2013520169A JP2013520169A JP2013538389A JP 2013538389 A JP2013538389 A JP 2013538389A JP 2013520169 A JP2013520169 A JP 2013520169A JP 2013520169 A JP2013520169 A JP 2013520169A JP 2013538389 A JP2013538389 A JP 2013538389A
- Authority
- JP
- Japan
- Prior art keywords
- target
- xfr
- rdy
- write command
- initiator
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Information Transfer Systems (AREA)
- Storage Device Security (AREA)
Abstract
【課題】 XFR_RDYの使用を動的にイネーブリングおよびディセーブリングするための方法を提供する。
【解決手段】 本発明の一実施形態では、こうした方法は、ターゲットで書き込みコマンドを受信すること、および書き込みコマンドに対してXFR_RDYがイネーブルまたはディセーブルであるかどうかを決定することを含む。XFR_RDYがディセーブルである場合、この方法は、ターゲットで1つまたは複数のバッファが使用可能であるかどうかを決定する。少なくとも1つのバッファが使用可能である場合、この方法は、書き込みコマンドに関連付けられたデータを1つまたは複数のバッファに書き込むことによって、書き込みコマンドを処理する。次にこの方法は、書き込みコマンドが完了した後に、ターゲットで依然として使用可能なバッファの数を示す情報を戻す。本明細書では、対応する装置およびコンピュータ・プログラム製品も開示および請求される。
【選択図】 図5
【解決手段】 本発明の一実施形態では、こうした方法は、ターゲットで書き込みコマンドを受信すること、および書き込みコマンドに対してXFR_RDYがイネーブルまたはディセーブルであるかどうかを決定することを含む。XFR_RDYがディセーブルである場合、この方法は、ターゲットで1つまたは複数のバッファが使用可能であるかどうかを決定する。少なくとも1つのバッファが使用可能である場合、この方法は、書き込みコマンドに関連付けられたデータを1つまたは複数のバッファに書き込むことによって、書き込みコマンドを処理する。次にこの方法は、書き込みコマンドが完了した後に、ターゲットで依然として使用可能なバッファの数を示す情報を戻す。本明細書では、対応する装置およびコンピュータ・プログラム製品も開示および請求される。
【選択図】 図5
Description
本発明は、転送準備済み(XFR_RDY)(transfer-ready)イネーブル・モード(enabled mode)と転送準備済み(XFR_RDY)ディセーブル・モード(disabled mode)とを動的に切り替えるための装置および方法に関する。
ファイバ・チャネル・プロトコル(FCP)書き込み動作中、XFR_RDYは、ターゲット・デバイスが、FCPデータのバーストの受信準備ができた旨をFCPイニシエータに通知するために、FCPターゲット・デバイスによって使用可能である。データの第1のバーストに対するXFR_RDYの使用は、プロセス・ログイン(PRLI)時に2つのFCPポート間で取り決め(negotiate)られる。FCPポートは、書き込み動作中、FCPデータの第1のバースト時にXFR_RDYを使用するように、あるいは、第1のバースト時にXFR_RDYをディセーブルするように取り決める。XFR_RDYがイネーブルとされた場合、ターゲット・デバイスは、FCP書き込みコマンドを受信した後、イニシエータにXFR_RDYメッセージを送信する前にFCPデータの第1のバースト用にスペースを割り振ることになる。同様に、イニシエータは、XFR_RDYメッセージを受信した後に、FCP書き込みデータのバーストを送信するのみとすることができる。XFR_RDYがディセーブルとされた場合、イニシエータは、ターゲット・デバイスがデータの第1のバーストを受信するために常にxバイトのデータを使用できるものと想定し、イニシエータは、XFR_RDYメッセージを待つことなく、FCPデータの直後に書き込みコマンドを送信することになる。XFR_RDYがイネーブルされずに動作することは、長距離を介したデータ複製などの待ち時間に縛られた応用例にとって、特に有益である。
現在のファイバ・チャネル・ポートは、通常、少なくとも4K、およびデータの各バーストに対して64Kの、同時ファイバ・チャネル交換をサポートする。これらの値を想定すると、XFR_RDYのディセーブルをサポートするFCPデバイスは、データの第1のバーストを受信するために1ポートあたり少なくとも64K×4K=256MBの使用可能なメモリを有していなければならない。これは、特に、現在のストレージ・コントローラが128ポート以上をサポートしている可能性があり、これがデータの第1のバースト向けに予約される32GB(256MB×128ポート)のメモリに変換されることを考えると、大量のメモリである。すべてのストレージ・コントローラが、XFR_RDYがディセーブルなデータの第1のバーストを受信するために、この大量のメモリの予約に使用可能なリソースを有するわけではない。データの第1のバーストを受信するために使用可能な十分なバッファ・スペースを保証することなく、XFR_RDYがディセーブルな状態で動作可能な必要のあるストレージ・コントローラは、以下のオプションを有する。
第1のオプションは、XFR_RDYディセーブル・モードでの動作をサポートしないことである。これは、ほとんどのファイバ・チャネル・デバイスによって実装されるオプションである。しかしながらこのオプションは、書き込み性能に容認できないほどの影響を与えるため、長距離を介してデータを複製する構成などの多くの構成で実行不可能である。これは、XFR_RDYをディセーブルにするためには、イニシエータがデータ転送を実行する前にターゲットからのXFR_RDYメッセージを待機する必要があるという事実によるものである。こうした遅延は、多くの構成において容認することができない。
第2のオプションは、イニシエータとターゲットとの間で限定数の交換をサポートすることである。このオプションは、加入超過(oversubscription)が一般的な競合環境では実行不可能である。ほとんどのコントローラは、各イニシエータが多数の交換を同時に送信する場合、1ポートあたり多数のイニシエータのログインをサポートする必要がある。
第3のオプションは、XFR_RDYディセーブル・モードでの動作をサポートすることであるが、データの第1のバーストのサイズを制限する。このオプションは、64KトラックごとにXFR_RDYメッセージを送信するように構成可能な、キャッシュ・トラック・ベース・アーキテクチャを備えたストレージ・コントローラには実行不可能である。したがって、最低64Kをサポートすることが可能なバースト・サイズを有する必要がある。
第4のオプションは、XFR_RDYディセーブル・モードでの動作をサポートすることであるが、XFR_RDYがディセーブルな状態で実行可能な最大数の同時書き込み転送に対処するのに十分なバッファが存在することは保証しない。言い換えれば、ターゲット・デバイスは、使用可能なバッファ・スペースの加入超過を可能にするように構成される。このオプションは、作業負荷がすべてのリソースを必要としないという事実に依拠している。しかしながら、作業負荷が充分に大きく、物理的に使用可能であるよりも多くのバッファ・スペースが必要である場合、ターゲット・コントローラは交換を破棄するかまたは打ち切らなければならない。これはI/Oエラーにつながり、結果として性能の低下、および、SAN内の他のデバイスへの影響を含む、そのさまざまな結果を伴う起こり得るSAN輻輳を生じさせる。
第5のオプションは、FCPポートについて、プロセス・ログイン中にXFR_RDYのディセーブリングを取り決めることである。バッファ・スペースがあるしきい値を下回った場合、ターゲットは新規の着信する交換をドロップすること、またはホストをログアウトすること、あるいはその両方を実行するように構成される。これにより、ホストを再度ログインさせることが可能であり、その時点でFCPポートはXFR_RDYをイネーブルするように再度取り決めることができる。このオプションは、XFR_RDYの使用をイネーブルまたはディセーブルする前にすべてのI/Oを終結する必要があり、これによって望ましくない性能の低下を生じさせる。
上記に鑑みて、従来技術の前述の欠点を軽減する手段が求められている。
したがって本発明は、第1の態様において、XFR_RDYを動的にイネーブリングおよびディセーブリングするための方法を提供し、この方法は、ターゲットで書き込みコマンドを受信すること、書き込みコマンドに対してXFR_RDYがディセーブルであるかどうかを決定すること、XFR_RDYがディセーブルである場合、ターゲット上で少なくとも1つのバッファが使用可能であるかどうかを決定すること、少なくとも1つのバッファが使用可能である場合、書き込みコマンドに関連付けられたデータを少なくとも1つのバッファに書き込むことによって、書き込みコマンドを処理すること、および、書き込みコマンドが完了した後に、ターゲット上で依然として使用可能なバッファの数を示す情報を戻すことを含む。
この方法は、少なくとも1つのバッファが使用可能でない場合、ターゲットで書き込みコマンドに関連付けられたデータを破棄することを、さらに含むことができる。好ましくは、データを破棄することは、書き込みコマンドが失敗し、XFR_RDYがイネーブルな状態で再駆動されるべきであることを示す状況を戻すことを、さらに含む。好ましくは、情報を戻すことは、この情報を書き込みコマンドのイニシエータに送信することをさらに含む。好ましくは、XFR_RDYがディセーブルな状態で別の書き込みコマンドをターゲットに送信する以前に、イニシエータは、ターゲット上で依然として使用可能なバッファの数が、イニシエータが有するターゲットとの未処理の書き込みコマンドの数よりも多いかどうかを決定する。好ましくは、イニシエータが、ターゲット上で依然として使用可能なバッファの数が、イニシエータが有するターゲットとの未処理の書き込みコマンドの数よりも多いものと決定した場合、イニシエータは、XFR_RDYがディセーブルな状態で別の書き込みコマンドを送信するように構成される。好ましくは、イニシエータが、ターゲット上で依然として使用可能なバッファの数が、イニシエータが有するターゲットとの未処理の書き込みコマンドの数よりも多くないものと決定した場合、イニシエータは、XFR_RDYがイネーブルな状態で書き込みコマンドを送信するように構成される。
第2の態様では、コンピュータ・システム内にロードされ、その上で実行された場合、当該コンピュータ・システムに、第1の態様に従った方法のすべてのステップを実行させるための、コンピュータ読み取り可能媒体上に格納されたコンピュータ・プログラム・コードを含む、コンピュータ・プログラムが提供される。
この第2の態様で見られる本発明は、XFR_RDYを動的にイネーブルおよびディセーブルするためのコンピュータ・プログラム製品の形で提供可能であり、このコンピュータ・プログラム製品は、内部にコンピュータ使用可能プログラム・コードを具体化したコンピュータ使用可能記憶媒体を含み、このコンピュータ使用可能プログラム・コードは、ターゲットで書き込みコマンドを受信するためのコンピュータ使用可能プログラム・コードと、書き込みコマンドに対してXFR_RDYがディセーブルであるかどうかを決定するためのコンピュータ使用可能プログラム・コードと、XFR_RDYがディセーブルである場合、ターゲット上で少なくとも1つのバッファが使用可能であるかどうかを決定するためのコンピュータ使用可能プログラム・コードと、少なくとも1つのバッファが使用可能である場合、書き込みコマンドに関連付けられたデータを少なくとも1つのバッファに書き込むことによって書き込みコマンドを処理するためのコンピュータ使用可能プログラム・コードと、書き込みコマンドが完了した後に、ターゲット上で依然として使用可能なバッファの数を示す情報を戻すためのコンピュータ使用可能プログラム・コードとを含む。
第3の態様では、XFR_RDYを動的にイネーブルおよびディセーブルするためのシステムが提供され、このシステムは、書き込みコマンドを送信するためのイニシエータと、書き込みコマンドを受信し、書き込みコマンドに対してXFR_RDYがディセーブルであるかどうかを決定するためのターゲットを備え、さらにこのターゲットは、XFR_RDYがディセーブルである場合、ターゲット上で少なくとも1つのバッファが使用可能であるかどうかを決定するように構成され、さらにこのターゲットは、ターゲット上で少なくとも1つのバッファが使用可能である場合、書き込みコマンドに関連付けられたデータを少なくとも1つのバッファに書き込むことによって書き込みコマンドを処理するように構成され、さらにこのターゲットは、書き込みコマンドが完了した後に、ターゲット上で依然として使用可能なバッファの数を示す情報をイニシエータに戻すようにさらに構成される。
好ましくは、さらにこのターゲットは、少なくとも1つのバッファが使用可能でない場合、書き込みコマンドに関連付けられたデータを破棄するように構成される。好ましくは、さらにこのターゲットは、データが破棄された場合、書き込みコマンドが失敗し、XFR_RDYがイネーブルな状態で再駆動されるべきであることを示す状況を戻すように構成される。好ましくは、さらにこのイニシエータは、XFR_RDYがディセーブルな状態で別の書き込みコマンドをターゲットに送信する以前に、ターゲット上で依然として使用可能なバッファの数が、ターゲットとの未処理の書き込みコマンドの数よりも多いかどうかを決定するように構成される。好ましくは、さらにこのイニシエータは、ターゲット上で依然として使用可能なバッファの数が、ターゲットとの未処理の書き込みコマンドの数よりも多い場合、XFR_RDYがディセーブルな状態で別の書き込みコマンドをターゲットに送信するように構成される。好ましくは、さらにこのイニシエータは、ターゲット上で依然として使用可能なバッファの数が、ターゲットとの未処理の書き込みコマンドの数よりも多くない場合、XFR_RDYがイネーブルな状態で書き込みコマンドを送信するように構成される。
ある実施形態では、XFR_RDYを動的にイネーブリングおよびディセーブリングするための方法は、ターゲット上で使用可能なバッファの数を示す情報をターゲットから受信すること、ターゲット上で依然として使用可能なバッファの数が、ターゲットとの未処理の書き込みコマンドの数よりも大きいかどうかを決定すること、ターゲット上で使用可能なバッファの数が、ターゲットとの未処理の書き込みコマンドの数よりも大きい場合、XFR_RDYがディセーブルな状態で書き込みコマンドを送信すること、および、ターゲット上で使用可能なバッファの数が、ターゲットとの未処理の書き込みコマンドの数よりも大きくない場合、XFR_RDYがイネーブルな状態で書き込みコマンドを送信することを、含むことができる。具体化される方法は、XFR_RDYがディセーブルな状態で書き込みコマンドが失敗した場合、XFR_RDYがイネーブルな状態で書き込みコマンドを再駆動することを、さらに含むことができる。
したがって本発明の実施形態は、FCP書き込み動作の最大サポート数が同時に実行できるようにする必要なしに、XFR_RDYがディセーブルな状態で可能な性能利得をデバイスが利用できるようにするソリューションを提供する。さらに、最小限の書き込み性能の低下でXFR_RDYを効率的にイネーブルおよびディセーブルすることが可能なソリューションも求められている。理想的には、こうしたソリューションは、作業負荷の変化に応じて、および交換ごとに、デバイスがXFR_RDYをイネーブルおよびディセーブルできるようにするものである。したがって本発明は、XFR_RDYの使用を動的にイネーブルおよびディセーブルするための装置および方法を提供するために開発されてきた。本発明の特徴および利点は、以下の説明および添付の特許請求の範囲からさらに詳細に明らかとなるか、または、以下で説明するような本発明の実践によって習得することができる。
前述の内容に一致して、本明細書では、XFR_RDYの使用を動的にイネーブリングおよびディセーブリングするための方法が開示される。本発明の一実施形態では、こうした方法は、ターゲットで書き込みコマンドを受信すること、および、書き込みコマンドに対してXFR_RDYがイネーブルまたはディセーブルされるかどうかを決定することを含む。XFR_RDYがディセーブルである場合、この方法は、ターゲットで1つまたは複数のバッファが使用可能であるかどうかを決定する。少なくとも1つのバッファが使用可能である場合、この方法は、書き込みコマンドに関連付けられたデータを1つまたは複数のバッファに書き込むことによって書き込みコマンドを処理する。次にこの方法は、書き込みコマンドが完了した後に、ターゲットで依然として使用可能なバッファの数を示す情報を戻す。
対応する装置およびコンピュータ・プログラム製品も、本明細書で開示および請求されている。
次に、本発明の好ましい実施形態について、添付の図面を参照しながら単なる例として説明する。
本明細書の図面内に全体として説明および例示されているように、本発明の実施形態の構成要素が多種多様な異なる構成で配置および設計可能であることが容易に理解されよう。したがって、図面内に表されたような以下の本発明の実施形態のより詳細な説明は、本発明の範囲を請求された通りに限定することを意図するものではなく、本発明に従って現在企図されている実施形態のある例を単に代表するものである。ここで説明される実施形態は、同じ部分が全般にわたって同じ番号で指定される図面を参照することにより、最も良く理解されるであろう。
当業者であれば理解されるように、本発明は、装置、システム、方法、またはコンピュータ・プログラム製品として具体化可能である。さらに本発明は、ハードウェア実施形態、ハードウェアを動作するように構成されたソフトウェア実施形態(ファームウェア、常駐ソフトウェア、マイクロコードなどを含む)、または、本明細書ではすべてを全体として「モジュール」または「システム」として呼ぶことが可能なソフトウェアおよびハードウェアの態様を組み合わせた実施形態の、形を取ることが可能である。さらに、本発明は、コンピュータ使用可能プログラム・コードが内部に格納された任意の有形な表現媒体内に具体化された、コンピュータ使用可能記憶媒体の形を取ることが可能である。
コンピュータ・プログラム製品を格納するために、1つまたは複数のコンピュータ使用可能またはコンピュータ読み取り可能記憶媒体の任意の組み合わせを使用することが可能である。コンピュータ使用可能またはコンピュータ読み取り可能記憶媒体は、たとえば、電子、磁気、光、電磁、赤外線、または半導体のシステム、装置、またはデバイスとすることが可能であるが、これらに限定されるものではない。コンピュータ読み取り可能記憶媒体のより特定な例(非網羅的リスト)は、1本または複数本のワイヤを有する電気接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み取り専用メモリ(ROM)、消去可能プログラマブル読み取り専用メモリ(EPROMまたはフラッシュ・メモリ)、光ファイバ、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD−ROM)、光記憶デバイス、または磁気記憶デバイスを含むことができる。本明細書との関連において、コンピュータ使用可能またはコンピュータ読み取り可能記憶媒体は、命令実行のシステム、装置、またはデバイスによって、あるいはこれらと共に使用するためのプログラムを包含、格納、または移送することが可能な、任意の媒体とすることができる。
本発明の動作を実行するためのコンピュータ・プログラム・コードは、Java、Smalltalk、C++などの、オブジェクト指向プログラミング言語、および、「C」プログラミング言語または同様のプログラミング言語などの、従来の手続き型プログラミング言語を含む、1つまたは複数のプログラミング言語の任意の組み合わせで作成可能である。本発明を実施するためのコンピュータ・プログラム・コードは、アセンブリ言語などの低水準プログラミング言語でも作成可能である。
本発明について、本発明の実施形態に従った方法、装置、システム、およびコンピュータ・プログラム製品の、流れ図またはブロック図あるいはその両方を参照しながら、以下で説明することができる。流れ図またはブロック図あるいはその両方の各ブロック、および、流れ図またはブロック図あるいはその両方のブロックの組み合わせが、コンピュータ・プログラム命令またはコードによって実装可能であることを理解されよう。これらのコンピュータ・プログラム命令は、機械を製造するために、汎用コンピュータ、特定用途向けコンピュータ、または他のプログラム可能データ処理装置のプロセッサに提供することが可能であり、結果として、コンピュータまたは他のプログラム可能データ処理装置のプロセッサを介して実行する命令が、流れ図またはブロック図あるいはその両方のブロック内に指定された機能/動作を実装するための手段を作成する。
これらのコンピュータ・プログラム命令は、特定の様式で機能するようにコンピュータまたは他のプログラム可能データ処理装置に指示することが可能なコンピュータ読み取り可能記憶媒体内に格納することも可能であり、結果として、コンピュータ読み取り可能記憶媒体内に格納された命令が、流れ図またはブロック図あるいはその両方のブロック内に指定された機能/動作を実装する命令手段を含む製品を製造する。
コンピュータ・プログラム命令は、一連の動作ステップをコンピュータまたは他のプログラム可能装置上で実行させ、コンピュータ実装プロセスを生成するために、コンピュータまたは他のプログラム可能データ処理装置上にロードすることも可能であり、結果として、コンピュータまたは他のプログラム可能装置上で実行する命令が、流れ図またはブロック図あるいはその両方のブロック内に指定された機能/動作を実装するためのプロセスを提供する。
図1を参照すると、ネットワーク・アーキテクチャ100の一例が示されている。ネットワーク・アーキテクチャ100は、本発明に従った装置および方法が実装可能な環境の一例を示すために提示されている。ネットワーク・アーキテクチャ100は単なる例として提示されており、限定的であることは意図されていない。実際に、本明細書で開示された装置および方法は、図示されたネットワーク・アーキテクチャ100に加え、多種多様な異なるネットワーク・アーキテクチャにも適用可能である。
図に示されるように、ネットワーク・アーキテクチャ100は、ネットワーク104によって相互接続された1つまたは複数のコンピュータ102、106を含む。ネットワーク104は、たとえばローカル・エリア・ネットワーク(LAN)104、ワイド・エリア・ネットワーク(WAN)104、インターネット104、イントラネット104などを含むことができる。ある実施形態では、コンピュータ102、106は、クライアント・コンピュータ102およびサーバ・コンピュータ106(本明細書では「ホスト・システム」106とも呼ばれる)の両方を含むことができる。一般に、クライアント・コンピュータ102は通信セッションを開始し、サーバ・コンピュータ106はクライアント・コンピュータ102からの要求を待機する。ある実施形態では、コンピュータ102またはサーバ106あるいはその両方は、1つまたは複数の内部または外部の直接接続記憶システム(たとえば、ハードディスク・ドライブ、ソリッドステート・ドライブ、テープ・ドライブなど)に接続可能である。これらのコンピュータ102、106および直接接続記憶システム112は、ATA、SATA、SCSI、SAS、ファイバ・チャネルなどのプロトコルを使用して通信可能である。
ネットワーク・アーキテクチャ100は、ある実施形態において、サーバ106の背後に、ストレージ・エリア・ネットワーク(SAN)108またはLAN108(たとえば、ネットワーク接続ストレージを使用する場合)などの、記憶ネットワーク108を含むことができる。このネットワーク108は、サーバ106を、ハードディスク・ドライブまたはソリッドステート・ドライブのアレイ110a、テープ・ライブラリ110b、個々のハードディスク・ドライブ110cまたはソリッドステート・ドライブ110c、テープ・ドライブ110d、CD−ROMライブラリなどの、1つまたは複数の記憶システム110に接続することができる。記憶システム110にアクセスするために、ホスト・システム106は、ホスト106上の1つまたは複数のポートから記憶システム110上の1つまたは複数のポートへ、物理接続を介して通信することができる。接続は、スイッチ、構造(fabric)、直接接続などを介することができる。ある実施形態では、サーバ106および記憶システム110は、ファイバ・チャネル(FC)などのネットワーク標準を使用して通信することができる。
図2を参照すると、各ホスト・システム106および記憶システム110は、記憶ネットワーク108を介して他のホスト・システム106および記憶システム110と通信するために、1つまたは複数のホスト・アダプタ200を含むことができる。ある実施形態では、ホスト・アダプタ200は、それぞれホスト・システム106および記憶システム110の拡張スロットにプラグインされるアダプタ・カードとして具体化されるが、これはすべての実施形態において必須ではない。ホスト・システム106および記憶システム110上のホスト・アダプタ200は、通信を容易にするために1つまたは複数のポート202を含むことができる。これを説明するために、通信を(たとえばコマンドの送信によって)開始するポート202を「イニシエータ」と呼ぶことが可能であり、通信を受信してこれに応答するポート202を「ターゲット」と呼ぶことが可能である。イニシエータ300およびターゲット302の一例を示す高水準ブロック図が、図3に示されている。
図3を参照すると、上記の背景セクションで論じられたように、ファイバ・チャネル・プロトコル(FCP)書き込み動作中、FCPターゲット302はXFR_RDYを使用して、ターゲット302がFCPデータのバーストを受信するための準備済みである旨をFCPイニシエータ300に通知することができる。データの第1のバーストに対するXFR_RDYの使用を、プロセス・ログイン(PRLI)時に2つのFCPポート202間で取り決めることができる。FCPポート202は、書き込み動作中のFCPデータの第1のバースト時にXFR_RDYを使用するか、または、第1のバースト時にXFR_RDYをディセーブルとするかを、取り決めることができる。XFR_RDYがイネーブルである場合、FCP書き込みコマンドを受信した後、ターゲット302は、XFR_RDYメッセージをイニシエータ300に送信する前に、FCPデータの第1のバーストに対してスペースを割り振ることになる。同様に、イニシエータ300は、XFR_RDYメッセージを受信した後、FCP書き込みデータのバーストのみを送信することができる。XFR_RDYがディセーブルである場合、イニシエータ300は、ターゲット・デバイス302がデータの第1のバーストを受信するために使用可能なxバイトのデータを常に有するものと想定し、イニシエータ300は、XFR_RDYメッセージを待機することなく、書き込みコマンドとその直後に続く最高xバイトまでのFCPデータとを送信することになる。
背景セクションで説明したように、XFR_RDYをイネーブルとしない動作は、長距離を介したデータ複製など(たとえば、ピアツーピア遠隔コピー・アプリケーション、すなわちPPRCなど)の待ち時間に縛られた構成にとって有益である。それにもかかわらず、さらに上記で論じられたように、すべての記憶コントローラが、XFR_RDYがディセーブルな状態でデータの第1のバーストを受信するために必要な大量のメモリを予約するために使用可能なリソースを有する訳ではない。したがって、限られた数の書き込み動作に対してディセーブルなXFR_RDYを有することの性能利点を、デバイスが利用できるようにするソリューションが求められている。最小限の書き込み性能の低下でのXFR_RDYの使用を動的にイネーブルおよびディセーブルためのソリューションがさらに求められている。理想的には、こうした装置および方法は、作業負荷の変化に応じて、および交換ごとに、デバイスがXFR_RDYをイネーブルおよびディセーブルできるようにするものである。
図3は、XFR_RDYの使用を動的にイネーブリングおよびディセーブリングするための技法の全体概要を示す。この技法は、図4および図5に関連してより詳細に説明される。この技法は、イニシエータ300およびターゲット302が、限られた数の書き込み動作に対してXFR_RDYをディセーブリングすることに関連付けられた性能利得を利用できるようにするものである。
図3に示されるように、選択された実施形態では、イニシエータ300は、(XFR_RDYがディセーブルな状態で)イニシエータが有するターゲット302との未処理の書き込みコマンド308の数を追跡するように構成することができる。未処理の書き込みコマンド308は、イニシエータ300がターゲット302に送信したが、書き込みコマンド308が成功したかまたは失敗したかを示す状況310を依然として受信していない、書き込みコマンドを含むことができる。ある実施形態では、イニシエータ300がターゲット302に送信する各書き込みコマンド308は、サポート・フィールド312およびイネーブル/ディセーブル・フィールド314を含むことができる。
サポート・フィールド312は、イニシエータ300がXFR_RDYの動的なイネーブリングおよびディセーブリングをサポートするかどうかを示す。ある実施形態では、サポート・フィールド312は単一ビットである。このビットは、XFR_RDYの動的なイネーブリングおよびディセーブリングをサポートしていないターゲット302がビットを見ないように、選択または構成することができる。ビットが設定された場合、イニシエータ300は、(1)XFR_RDYがディセーブルな状態で書き込みコマンド308が失敗し、XFR_RDYがイネーブルな状態で再駆動されるべきである旨を示す、状況メッセージ310、および、(2)書き込み動作が首尾よく完了した旨を示す状況メッセージ310の、2つをサポートする旨を示すことが可能であり、ここで状況メッセージ310は、イニシエータ300からXFR_RDYがディセーブルな状態で書き込み動作を処理するために、ターゲット302上で使用可能なバッファの数306を示す情報を含む。
他の実施形態では、サポート・フィールド312の使用以外、または使用に加えた方法を使用して、イニシエータ300およびターゲット302がXFR_RDYの動的なイネーブリングおよびディセーブリングをサポートするかどうかを確立することができる。たとえば、イニシエータ300およびターゲット302は、XFR_RDYの動的なイネーブリングおよびディセーブリングが、ログイン段階で、あるいは、機能交換プロトコルまたは他の好適なプロトコルの一部として、サポートされるかどうかを取り決めることができる。他の実施形態では、書き込みコマンド308の場合とは反対に、サポート・フィールド312をフレーム・ヘッダまたは他の好適な位置に含めることができる。
イニシエータ300は、XFR_RDYがその内部に含まれる特定の書き込みコマンド308に対してイネーブルであるかまたはディセーブルであるかを示すように、イネーブル/ディセーブル・フィールド314を設定することができる。XFR_RDYがイネーブルである場合、イニシエータは書き込みコマンド308に関連付けられたデータを送信するまで、ターゲット302からのXFR_RDYメッセージを待機することになる。他方で、XFR_RDYがディセーブルである場合、イニシエータ300は、ターゲット302からのXFR_RDYメッセージを待機することなく、書き込みコマンド308の後にデータを送信することになる。ある実施形態では、書き込みコマンド308内にイネーブル/ディセーブル・フィールド314を提供する代わりに、フレーム・ヘッダの制御フィールドまたは他の好適な位置内にイネーブル/ディセーブル・フィールド314が含められる。
ターゲット302は、イニシエータ300からの書き込みコマンド308を処理するために使用可能な、ターゲット302が有するバッファの数(Y)306を追跡するように構成することができる。ある実施形態では、ターゲット302は、ターゲット302と共にログインされる各イニシエータ300に対して異なる値の「Y」を維持する。ターゲット302は、進行中の書き込みコマンド308の数およびターゲット302と共にログインされたイニシエータ300の数に基づいて、「Y」の値を動的に変更することができる。ターゲット302は、ターゲット・デバイス302上での他の動作に対してバッファを使用する必要性などの他の理由のために、「Y」の値を変更することも可能である。「Y」の現行の値は、任意の特定時点でのイニシエータ300に対してターゲット302上で使用可能なバッファの数のスナップショットである。
書き込みコマンド308がターゲット302によって処理される場合、ターゲット302は、書き込み動作308の成功または失敗を示す状況310に応答することができる。状況メッセージ310(または望ましい実装に応じて他のメッセージ)は、書き込みコマンド308の完了後にターゲット302上で依然として使用可能なバッファの数306を示すことができる。この情報306を使用して、イニシエータ300は、ターゲット302上で使用可能なバッファの数306と、イニシエータ300が有するターゲット302との未処理の書き込みコマンドの数304とを比較することができる。この比較を実行して、イニシエータ300がターゲット302に送信する次の書き込みコマンド308に関する動作モード(すなわち、XFR_RDYがイネーブルであるかディセーブルであるか)を決定することができる。
たとえば、ターゲット302上で使用可能なバッファの数306が、イニシエータ300が有するターゲット302との未処理の書き込みコマンドの数304よりも大きい場合、イニシエータ300はXFR_RDYがディセーブルな状態で次の書き込みコマンド308を送信することができる。他方で、ターゲット302上で使用可能なバッファの数306が、イニシエータ300が有するターゲット302との未処理の書き込みコマンドの数304よりも小さいかまたは等しい場合、イニシエータ300は、XFR_RDYがイネーブルな状態で次の書き込みコマンド308を送信することができる。XFR_RDYをイネーブルにすることで、書き込みコマンド308に関連付けられたデータを受信する前に、ターゲット302がバッファを割り振ることが可能となる。
図4を参照すると、XFR_RDYの動的なイネーブリングおよびディセーブリングをサポートする、イニシエータ300によって実装される方法400の一実施形態が示されている。図に示されるように、初めにイニシエータ300は、書き込みコマンドを送信する準備が済んでいるかどうかを決定する(402)。これは、イニシエータ300がターゲット・デバイス302に書き込む必要のあるデータを受信した場合に発生する可能性がある。次にイニシエータ300は、書き込みコマンド308の制御フィールド312内でXFR_RDYの動的なイネーブリングおよびディセーブリングをサポートする旨を示す(404)。前述のように、この制御フィールド312は、XFR_RDYの動的なイネーブリングおよびディセーブリングをサポートしていないターゲット302が制御フィールド312を見ないかまたはこれを無視するように選択することができる。
次にイニシエータ300は、ターゲット302上で使用可能なバッファの数306を決定する(406)。これは、イニシエータ300によって維持されるYの値を読み取ることによって実施可能である。ある実施形態では、イニシエータ300は、その内部値Yを所望の値に初期設定した後、使用可能なバッファの数306が状況メッセージ310または他の好適なメッセージ内でターゲット302から受信された場合にYを更新する。イニシエータ300は、それが有するターゲット302との未処理の書き込みコマンドの数304も決定する(408)。イニシエータ300は、ターゲット302に書き込みコマンド308を送信し、ターゲット302から状況メッセージ310を受信する間、この数304を追跡することができる。
ステップ410で、ターゲット302上で使用可能なバッファの数(Y)306が、イニシエータ300が有するターゲット302との未処理の書き込みコマンドの数(Z)304よりも大きい場合、イニシエータ300はXFR_RDYがディセーブルな状態で書き込みコマンド308を送信する(412)。次にイニシエータ300は、ターゲット302からのXFR_RDYメッセージを待機することなく、書き込みコマンド308に関連付けられたデータをターゲット302に送信する(412)。ステップ410で、ターゲット302上で使用可能なバッファの数306が、イニシエータ300が有するターゲット302との未処理の書き込みコマンドの数304よりも小さいかまたは等しい場合、イニシエータ300は、XFR_RDYがイネーブルな状態で書き込みコマンド308を送信する(414)。次にイニシエータ300は、ターゲット302からXFR_RDYメッセージを受信するのを待機する(416)。イニシエータ300がXFR_RDYメッセージを受信すると、イニシエータ300は書き込みコマンド308に関連付けられたデータをターゲット302に送信する。
イニシエータ300がステップ412または418でデータを送信すると、イニシエータ300はターゲット302から状況310を受信するのを待機する(420)。状況が良好である場合、すなわち書き込み動作が首尾よく完了した場合、イニシエータ300はターゲット302で使用可能なバッファの数を状況メッセージ310から読み取る(422)。この情報によって、イニシエータ300は、将来の書き込みコマンド308に対してXFR_RDYを適宜イネーブルまたはディセーブルにすることができる。他方で、状況が良好でない場合、すなわち書き込みコマンド308が首尾よく完了しなかった場合、イニシエータ300はエラー回復プロセスを実行することができる(424)。これは、たとえば短い待機期間後に、同じかまたは別の経路をたどる書き込みコマンド308の再駆動を含むことができる。別の方法として、またはこれに加えて、状況メッセージ310がイニシエータ300にそのように実行するよう指示する場合、XFR_RDYがイネーブルな状態での書き込みコマンド308の再駆動を含むことができる。イニシエータ300に、書き込みコマンド308が首尾よく完了しなかった旨が通知された場合、イニシエータ300はその内部値Yをゼロに設定し、ターゲット302上で現在使用可能なバッファがないことを反映させることができる。別の方法として、ターゲット302は、使用可能なバッファがないことをイニシエータ300に通知し、そのYの値を更新させることができる。次にイニシエータ300は、次の書き込みコマンド308に対して方法400を反復することができる。
図5を参照すると、XFR_RDYの動的なイネーブリングおよびディセーブリングをサポートするターゲット302によって実装される方法500の一実施形態が示される。図に示されるように、初めにターゲット302は、書き込みコマンド308が受信されたかどうかを決定する(308)。書き込みコマンド308が受信された場合(502)、書き込みコマンド308を調べることによって、ターゲット302はXFR_RDYがディセーブルであるかどうかを決定する(504)。XFR_RDYがディセーブルでない場合、ターゲット302はバッファを割り振り(526)、XFR_RDYをイニシエータ300に送信する(526)。データがイニシエータ300から着信した場合、ターゲット302はそのデータをバッファに書き込み、書き込み動作の成功または失敗、ならびに書き込み動作の完了後にターゲット上で依然として使用可能なバッファの数306を示す状況310を、イニシエータ300に戻す(528)。
ステップ504で、XFR_RDYがディセーブルである場合、ターゲット302は、XFR_RDYを送信することなく、書き込みコマンド308に関連付けられたデータが着信するのを待機する(506)。データが着信した場合、ターゲット302は、ターゲット上で1つまたは複数のバッファが使用可能であるかどうかを決定する(508)。1つまたは複数のバッファが使用可能である場合、ターゲット302は、データをバッファに書き込むことによって書き込みコマンド308を処理する(510)。次にターゲット302は、イニシエータ300がXFR_RDYの動的なイネーブリングおよびディセーブリングをサポートするかどうかを決定する(512)。これは、書き込みコマンド308内のサポート・フィールド312を読み取ることによって実施可能である。サポートしている場合、ターゲット302は、ターゲット302上で依然として使用可能なバッファの数306を示す良好な(書き込み動作が首尾よく完了したものと想定する)状況310で応答する(514)。他方で、イニシエータ300がXFR_RDYの動的なイネーブリングおよびディセーブリングをサポートしていない場合、ターゲット302は単に良好な(書き込み動作が首尾よく完了したものと想定する)状況で応答する(516)。
ステップ508で、ターゲット302が、書き込みコマンド308に関連付けられたデータを保持するために使用可能なバッファがない旨を決定した場合、ターゲット302はデータを格納するためのリソースを有していないため、ターゲット302は受信された書き込みコマンド308に関連付けられたデータを破棄する(518)。次にターゲット302は、イニシエータ300がXFR_RDYの動的なイネーブリングおよびディセーブリングをサポートするかどうかを決定する(520)。サポートしていない場合、ターゲット302はエラー状況310で応答する。これによりイニシエータ300は、エラー回復プロセスを呼び出してエラー状況310に応答することができる。ステップ520でターゲット302が、イニシエータ300がXFR_RDYの動的なイネーブリングおよびディセーブリングをサポートしているものと決定した場合、ターゲット302は、XFR_RDYがイネーブルな状態で書き込みコマンド308を再駆動するようイニシエータ300に指示する(524)。XFR_RDYがイネーブルな状態で書き込みコマンド308を再駆動することで、ターゲット302はデータを受信する前にバッファを割り振る時間が可能になる。
図4および図5に提示された方法400、500は単なる例として提示されたものであり、限定的であることは意図されていない。当業者であれば、本発明の本質または特徴から逸脱することなく、方法400、500への様々な変更が実行可能であることを理解されよう。方法400、500は、イニシエータ300およびターゲット302のそれぞれによって実行可能な方法400、500の単なる例を示すために提示されている。
図6および図7を参照すると、図4および図5に示された方法400、500が1つまたは複数のモジュールの形で実装可能である。これらのモジュールは、ハードウェア、ハードウェア上で実行可能なソフトウェアまたはファームウェア、あるいはそれらの組み合わせで実装可能である。これらのモジュールは単なる例として提示されたものであり、限定的であることは意図されていない。実際に、代替実施形態は、例示されたモジュールよりも多いかまたは少ないモジュールを含むことが可能である。いくつかの実施形態では、いくつかのモジュールの機能を複数のモジュールに分配すること、あるいはその逆に、いくつかのモジュールの機能を単一のモジュールまたはより少ないモジュールに組み合わせることが可能であることも理解されたい。モジュールが必ずしも例示された場所に実装されるものでないことも理解されたい。たとえば、イニシエータ300内に示されたいくつかの機能は実際にはターゲット302内に実装可能であり、その逆もまた可能である。したがってモジュールの場所は単なる例として提示されており、限定的であることは意図されていない。
図6は、XFR_RDYの動的なイネーブリングおよびディセーブリングをサポートするイニシエータ300内に含めることが可能な様々なモジュールを示す高水準ブロック図である。図6に示されるように、選択された実施形態では、こうしたイニシエータ300は、取り決めモジュール600、値追跡モジュール602、コマンド生成モジュール604、コマンド送信モジュール606、待機モジュール608、データ送信モジュール610、および状況モジュール612のうちの、1つまたは複数の含むことができる。コマンド生成モジュール604は、設定モジュール614、決定モジュール616、イネーブル・モジュール618、およびディセーブル・モジュール620のうちの1つまたは複数を含むことができる。
イニシエータ300の取り決めモジュール600を使用して、ターゲット302の対応する取り決めモジュール700(図7に示される)と取り決めることができる。ある実施形態では、取り決めモジュール600、700間での取り決めは、プロセス・ログイン時に実行される。取り決めモジュール600、700を使用して、イニシエータ300およびターゲット302は、XFR_RDYのディセーブル・モードでの動作がサポートされるかどうかを取り決めることができる。イニシエータ300およびターゲット302は、XFR_RDYの動的なイネーブリングおよびディセーブリングがサポートされるかどうかも取り決めることができる。
値追跡モジュール602を使用して、ターゲット302との未処理の書き込みコマンド308の数304を追跡することができる。XFR_RDYがディセーブルな状態で新しい書き込みコマンド308がターゲット302に送信された場合、値追跡モジュール602は数304を増分することができる。同様に、XFR_RDYがディセーブルな状態で未処理の書き込みコマンドに関する状況310が戻された場合、値追跡モジュール602は数304を減分することができる。値追跡モジュール602は、ターゲット302上で使用可能なバッファの数306を追跡することもできる。これはたとえば、状況メッセージ310がイニシエータ300から受信された場合に使用可能なバッファの数306を読み取ることによって実施可能である。
コマンド生成モジュール604を使用して、ターゲット302に送信するための書き込みコマンド308を生成および読み込むことができる。このタスクを実施するために、設定モジュール314は、イニシエータ300がXFR_RDYの動的なイネーブリングおよびディセーブリングをサポートする旨を示す(404)ために、書き込みコマンド308内にサポート・フィールド312を設定することができる。次に決定モジュール616は、イネーブル/ディセーブル・フィールド314をどのように設定するかを決定することができる。より具体的に言えば、決定モジュール616は、ターゲット302上で使用可能なバッファの数306が、イニシエータ300が有するターゲット302との未処理の書き込みコマンドの数304よりも大きいかどうかを決定することができる。大きい場合、ディセーブル・モジュール620が、書き込みコマンド308に対してXFR_RDYをディセーブルにするようにイネーブル/ディセーブル・フィールド314を設定する。大きくない場合、イネーブル・モジュール618が、XFR_RDYをイネーブルにするようにイネーブル/ディセーブル・フィールド314を設定する。
コマンド生成モジュール604によって書き込みコマンド308が生成されると、コマンド送信モジュール606は書き込みコマンド308をターゲット302に送信する。書き込みコマンド308内でXFR_RDYがイネーブルである場合、待機モジュール608はターゲット302からのXFR_RDYメッセージを待機する。このメッセージが受信されると、データ送信モジュール610は1つまたは複数のフレーム内でデータを送信することなどによって、書き込みコマンド308に関連付けられたデータをターゲット302に送信する。他方で、XFR_RDYがディセーブルである場合、データ送信モジュール610はXFR_RDYメッセージを待機することなくデータを送信することができる。データ送信モジュール610によってデータが送信されると、状況モジュール612はターゲット302からの状況情報310を待機し、これを読み取る。これは、書き込み動作の完了後に依然としてターゲット302上で使用可能なバッファの数306を状況情報310から読み取ることを含むことができる。
図7は、XFR_RDYの動的なイネーブリングおよびディセーブリングをサポートするターゲット302内に含めることが可能な様々なモジュールを示す高水準ブロック図である。図7に示されるように、選択された実施形態では、こうしたターゲット302は、取り決めモジュール700、値追跡モジュール702、検査モジュール704、決定モジュール706、割り振りモジュール708、送信モジュール710、可用性モジュール712、破棄モジュール714、処理モジュール716、および応答モジュール718のうちの1つまたは複数を含む。
前述のように、ターゲット302の取り決めモジュール700は、ある機能がサポートされているかどうかを決定するために、プロセス・ログイン時にイニシエータ300の取り決めモジュール600と取り決めることができる。より具体的に言えば、取り決めモジュール700は、XFR_RDYのディセーブル・モードでの動作がサポートされるかどうか、ならびにXFR_RDYの動的なイネーブリングおよびディセーブリングがサポートされるかどうかを、取り決めることができる。値追跡モジュール702は、ターゲット302上で使用可能なバッファの数306を追跡することができる。バッファが使用可能な場合、値追跡モジュール702は数306を減分することができる。同様に、バッファがターゲット302上で使用可能になると、値追跡モジュール702は数306を増分することができる。
検査モジュール704を使用して、着信する書き込みコマンド308を検査することができる。特に検査モジュール704は、着信する書き込みコマンド308のサポート・フィールド312およびイネーブル/ディセーブル・フィールド314を検査するように構成することができる。これらのフィールド312、314内の情報を使用することで、決定モジュール706は、イニシエータ300がXFR_RDYの動的なイネーブリングおよびディセーブリングをサポートするかどうか、ならびに書き込みコマンド308に対してXFR_RDYがイネーブルまたはディセーブルであるかどうかを、決定することができる。書き込みコマンド308に対してXFR_RDYがイネーブルである場合、割り振りモジュール708は書き込みコマンド308に関連付けられたデータに対してバッファを割り振り、送信モジュール710は、バッファが割り振られたことおよびターゲット302がデータを受信する準備が済んでいることを示すXFR_RDYメッセージを、インジケータ300に送信する。
他方で、決定モジュール706が、書き込みコマンド308に対してXFR_RDYがディセーブルであるものと決定した場合、ターゲット302は単に書き込みコマンド308に関連付けられたデータが着信するのを待機するだけでよい。データが着信した場合、可用性モジュール712は、データを受信するためにターゲット302上で少なくとも1つのバッファが使用可能であるかどうかを決定することができる。使用可能なバッファがない場合、破棄モジュール714は、データがイニシエータ300から受信された場合にそのデータを破棄することができる。少なくとも1つのバッファが使用可能である場合、処理モジュール716は、コマンド308に関連付けられたデータを少なくとも1つのバッファに書き込むことによって、書き込みコマンド308を処理することができる。次に応答モジュール718は、書き込み動作の結果を示す状況310をイニシエータ300に送信することができる。応答モジュール718は、書き込み動作の完了後、ターゲット302上で依然として使用可能なバッファの数を示す情報を状況310内に含めることができる。
図面内の流れ図およびブロック図は、本発明の様々な実施形態に従ったシステム、方法、およびコンピュータ使用可能媒体の可能な実装のアーキテクチャ、機能、および動作を示す。この点で、流れ図またはブロック図内の各ブロックは、指定された論理機能を実装するための1つまたは複数の実行可能命令を含む、コードのモジュール、セグメント、または部分を表すことができる。いくつかの代替実装では、ブロック内に示された機能が図面内に示された順序以外で実行可能であることにも留意されたい。たとえば連続して示された2つのブロックが実際にはほぼ同時に実行可能であるか、またはこのブロックが、関連する機能に応じて逆の順序で実行可能である。ブロック図または流れ図あるいはその両方の各ブロック、ならびに、ブロック図または流れ図あるいはその両方内のブロックの組み合わせが、特定用途向けハードウェアおよびコンピュータ命令の指定された機能または動作あるいはそれらの組み合わせを実行する、特定用途向けハードウェアベースのシステムによって実装可能であることにも留意されよう。
Claims (14)
- XFR_RDYを動的にイネーブリングおよびディセーブリングするための方法であって、
ターゲットで書き込みコマンドを受信すること、
前記書き込みコマンドに対してXFR_RDYがディセーブルであるかどうかを決定すること、
XFR_RDYがディセーブルである場合、前記ターゲット上で少なくとも1つのバッファが使用可能であるかどうかを決定すること、
少なくとも1つのバッファが使用可能である場合、前記書き込みコマンドに関連付けられたデータを前記少なくとも1つのバッファに書き込むことによって、前記書き込みコマンドを処理すること、および、
前記書き込みコマンドが完了した後に、前記ターゲット上で依然として使用可能なバッファの数を示す情報を戻すこと、
を含む、方法。 - 少なくとも1つのバッファが使用可能でない場合、前記ターゲットで前記書き込みコマンドに関連付けられたデータを破棄することをさらに含む、請求項1に記載の方法。
- データを破棄することは、前記書き込みコマンドが失敗し、XFR_RDYがイネーブルな状態で再駆動されるべきであることを示す状況を戻すことをさらに含む、請求項2に記載の方法。
- 情報を戻すことは、前記情報を前記書き込みコマンドのイニシエータに送信することをさらに含む、前記請求項のいずれか一項に記載の方法。
- XFR_RDYがディセーブルな状態で別の書き込みコマンドを前記ターゲットに送信する以前に、前記イニシエータは、前記ターゲット上で依然として使用可能な前記バッファの数が、前記イニシエータが有する前記ターゲットとの前記未処理の書き込みコマンドの数よりも多いかどうかを決定する、請求項4に記載の方法。
- 前記イニシエータが、前記ターゲット上で依然として使用可能な前記バッファの数が、前記イニシエータが有する前記ターゲットとの前記未処理の書き込みコマンドの数よりも多いものと決定した場合、前記イニシエータは、XFR_RDYがディセーブルな状態で別の書き込みコマンドを送信するように構成される、請求項5に記載の方法。
- 前記イニシエータが、前記ターゲット上で依然として使用可能な前記バッファの数が、前記イニシエータが有する前記ターゲットとの前記未処理の書き込みコマンドの数よりも多くないものと決定した場合、前記イニシエータは、XFR_RDYがイネーブルな状態で書き込みコマンドを送信するように構成される、請求項5に記載の方法。
- コンピュータ・システム内にロードされ、その上で実行された場合、前記コンピュータ・システムに請求項1から7のいずれか一項に従った方法のすべてのステップを実行させるための、コンピュータ読み取り可能媒体上に格納されたコンピュータ・プログラム・コードを含む、コンピュータ・プログラム。
- XFR_RDYを動的にイネーブリングおよびディセーブリングするためのシステムであって、
書き込みコマンドを送信するためのイニシエータと、
前記書き込みコマンドを受信し、前記書き込みコマンドに対してXFR_RDYがディセーブルであるかどうかを決定するためのターゲットを備え、
さらに前記ターゲットは、XFR_RDYがディセーブルである場合、前記ターゲット上で少なくとも1つのバッファが使用可能であるかどうかを決定するように構成され、
さらに前記ターゲットは、前記ターゲット上で少なくとも1つのバッファが使用可能である場合、前記書き込みコマンドに関連付けられたデータを前記少なくとも1つのバッファに書き込むことによって前記書き込みコマンドを処理するように構成され、
さらに前記ターゲットは、前記書き込みコマンドが完了した後に、前記ターゲット上で依然として使用可能な前記バッファの数を示す情報を前記イニシエータに戻すようにさらに構成される、
システム。 - さらに前記ターゲットは、少なくとも1つのバッファが使用可能でない場合、前記書き込みコマンドに関連付けられたデータを破棄するように構成される、請求項9に記載のシステム。
- さらに前記ターゲットは、前記データが破棄された場合、前記書き込みコマンドが失敗し、XFR_RDYがイネーブルな状態で再駆動されるべきであることを示す状況を戻すように構成される、請求項10に記載のシステム。
- さらに前記イニシエータは、XFR_RDYがディセーブルな状態で別の書き込みコマンドを前記ターゲットに送信する以前に、前記ターゲット上で依然として使用可能な前記バッファの数が、前記ターゲットとの前記未処理の書き込みコマンドの数よりも多いかどうかを決定するように構成される、請求項9から11のいずれか一項に記載のシステム。
- さらに前記イニシエータは、前記ターゲット上で依然として使用可能な前記バッファの数が、前記ターゲットとの前記未処理の書き込みコマンドの数よりも多い場合、XFR_RDYがディセーブルな状態で別の書き込みコマンドを前記ターゲットに送信するように構成される、請求項12に記載のシステム。
- さらに前記イニシエータは、前記ターゲット上で依然として使用可能な前記バッファの数が、前記ターゲットとの前記未処理の書き込みコマンドの数よりも多くない場合、XFR_RDYがイネーブルな状態で書き込みコマンドを送信するように構成される、請求項12に記載のシステム。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/914,024 US8732357B2 (en) | 2010-10-28 | 2010-10-28 | Apparatus and method for dynamically enabling and disabling write XFR—RDY |
US12/914,024 | 2010-10-28 | ||
PCT/EP2011/067866 WO2012055705A1 (en) | 2010-10-28 | 2011-10-13 | Dynamically enabling and disabling write xfr_rdy |
Publications (2)
Publication Number | Publication Date |
---|---|
JP5308602B1 JP5308602B1 (ja) | 2013-10-09 |
JP2013538389A true JP2013538389A (ja) | 2013-10-10 |
Family
ID=44800040
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2013520169A Active JP5308602B1 (ja) | 2010-10-28 | 2011-10-13 | Xfr_rdyの動的なイネーブリングおよびディセーブリングのための方法、コンピュータ・プログラム、およびシステム(xfr_rdyの動的なイネーブリングおよびディセーブリング) |
Country Status (7)
Country | Link |
---|---|
US (1) | US8732357B2 (ja) |
EP (1) | EP2633417B1 (ja) |
JP (1) | JP5308602B1 (ja) |
KR (1) | KR101507664B1 (ja) |
CN (1) | CN103180840B (ja) |
CA (1) | CA2814706C (ja) |
WO (1) | WO2012055705A1 (ja) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7890668B2 (en) | 2008-02-14 | 2011-02-15 | International Business Machines Corporation | Providing indirect data addressing in an input/output processing system where the indirect data address list is non-contiguous |
US9052837B2 (en) | 2008-02-14 | 2015-06-09 | International Business Machines Corporation | Processing communication data in a ships passing condition |
JP5675278B2 (ja) | 2010-11-01 | 2015-02-25 | オリンパス株式会社 | データ処理装置および画像処理装置 |
JP5784299B2 (ja) * | 2010-11-01 | 2015-09-24 | オリンパス株式会社 | データ処理装置および画像処理装置 |
US9195626B2 (en) * | 2013-01-29 | 2015-11-24 | Emulex Corporation | Reducing write I/O latency using asynchronous Fibre Channel exchange |
US8990439B2 (en) * | 2013-05-29 | 2015-03-24 | International Business Machines Corporation | Transport mode data transfer between a channel subsystem and input/output devices |
CN105683934B (zh) | 2013-10-31 | 2019-04-05 | 慧与发展有限责任合伙企业 | 数据传输的目标端口处理方法和装置 |
WO2015126429A1 (en) | 2014-02-24 | 2015-08-27 | Hewlett-Packard Development Company, L.P. | Repurposable buffers for target port processing of a data transfer |
US9892065B2 (en) * | 2015-05-20 | 2018-02-13 | International Business Machines Corporation | Adjustments of buffer credits for optimizing the number of retry operations and transfer ready operations |
US10061734B2 (en) | 2015-05-20 | 2018-08-28 | International Business Machines Corporation | Adjustment of buffer credits and other parameters in a startup phase of communications between a plurality of channels and a control unit |
US9864716B2 (en) * | 2015-05-20 | 2018-01-09 | International Business Machines Corporation | Receiving buffer credits by a plurality of channels of one or more host computational devices for transmitting data to a control unit |
JP2018112883A (ja) | 2017-01-11 | 2018-07-19 | 東芝メモリ株式会社 | 半導体記憶装置 |
US11327664B1 (en) * | 2017-08-04 | 2022-05-10 | Dell Products L.P. | Fast small write forwarding with non-temporal cache memory |
US10310760B1 (en) | 2018-05-21 | 2019-06-04 | Pure Storage, Inc. | Layering communication fabric protocols |
US11954220B2 (en) | 2018-05-21 | 2024-04-09 | Pure Storage, Inc. | Data protection for container storage |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030056000A1 (en) * | 2001-07-26 | 2003-03-20 | Nishan Systems, Inc. | Transfer ready frame reordering |
JP2004171150A (ja) * | 2002-11-18 | 2004-06-17 | Seiko Epson Corp | 情報処理装置及び方法、並びにプリンタシステム |
JP2005267502A (ja) * | 2004-03-22 | 2005-09-29 | Hitachi Ltd | データ転送用スイッチ |
JP2008129885A (ja) * | 2006-11-22 | 2008-06-05 | Nec Computertechno Ltd | ディスク装置、データ転送システム及びそれに用いるデータ転送方法 |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5220974B2 (ja) * | 1999-10-14 | 2013-06-26 | ブルアーク ユーケー リミテッド | ハードウェア実行又はオペレーティングシステム機能の加速のための装置及び方法 |
US6734862B1 (en) * | 2000-06-14 | 2004-05-11 | Intel Corporation | Memory controller hub |
US8281084B2 (en) | 2003-01-13 | 2012-10-02 | Emlilex Design & Manufacturing Corp. | Method and interface for access to memory within a first electronic device by a second electronic device |
US7613785B2 (en) * | 2003-11-20 | 2009-11-03 | International Business Machines Corporation | Decreased response time for peer-to-peer remote copy write operation |
US20050192967A1 (en) | 2004-03-01 | 2005-09-01 | Cisco Technology, Inc. | Apparatus and method for performing fast fibre channel write operations over relatively high latency networks |
US7484058B2 (en) * | 2004-04-28 | 2009-01-27 | Emc Corporation | Reactive deadlock management in storage area networks |
US20060004935A1 (en) * | 2004-06-30 | 2006-01-05 | Pak-Lung Seto | Multi-protocol bridge |
US20070147233A1 (en) * | 2005-12-23 | 2007-06-28 | Tolga Asveren | Graceful failover mechanism for SSCOP service access point for SS7 links |
US7890655B2 (en) | 2006-02-16 | 2011-02-15 | Cisco Technology, Inc. | Storage area network port based data transfer acceleration |
US7502873B2 (en) | 2006-10-10 | 2009-03-10 | International Business Machines Corporation | Facilitating access to status and measurement data associated with input/output processing |
US7617386B2 (en) * | 2007-04-17 | 2009-11-10 | Xmos Limited | Scheduling thread upon ready signal set when port transfers data on trigger time activation |
US7941570B2 (en) | 2008-02-14 | 2011-05-10 | International Business Machines Corporation | Bi-directional data transfer within a single I/O operation |
US8196149B2 (en) | 2008-02-14 | 2012-06-05 | International Business Machines Corporation | Processing of data to determine compatability in an input/output processing system |
US8108570B2 (en) | 2008-02-14 | 2012-01-31 | International Business Machines Corporation | Determining the state of an I/O operation |
US8055807B2 (en) | 2008-07-31 | 2011-11-08 | International Business Machines Corporation | Transport control channel program chain linking including determining sequence order |
JP2010039873A (ja) | 2008-08-06 | 2010-02-18 | Toshiba Storage Device Corp | ストレージシステム、ストレージシステムの制御方法及び記憶装置 |
-
2010
- 2010-10-28 US US12/914,024 patent/US8732357B2/en active Active
-
2011
- 2011-10-13 KR KR1020137008652A patent/KR101507664B1/ko active IP Right Grant
- 2011-10-13 CA CA2814706A patent/CA2814706C/en active Active
- 2011-10-13 EP EP11769870.4A patent/EP2633417B1/en active Active
- 2011-10-13 CN CN201180051735.1A patent/CN103180840B/zh active Active
- 2011-10-13 JP JP2013520169A patent/JP5308602B1/ja active Active
- 2011-10-13 WO PCT/EP2011/067866 patent/WO2012055705A1/en active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030056000A1 (en) * | 2001-07-26 | 2003-03-20 | Nishan Systems, Inc. | Transfer ready frame reordering |
JP2004171150A (ja) * | 2002-11-18 | 2004-06-17 | Seiko Epson Corp | 情報処理装置及び方法、並びにプリンタシステム |
JP2005267502A (ja) * | 2004-03-22 | 2005-09-29 | Hitachi Ltd | データ転送用スイッチ |
JP2008129885A (ja) * | 2006-11-22 | 2008-06-05 | Nec Computertechno Ltd | ディスク装置、データ転送システム及びそれに用いるデータ転送方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103180840A (zh) | 2013-06-26 |
EP2633417A1 (en) | 2013-09-04 |
CA2814706A1 (en) | 2012-05-03 |
WO2012055705A1 (en) | 2012-05-03 |
JP5308602B1 (ja) | 2013-10-09 |
CA2814706C (en) | 2018-09-04 |
KR101507664B1 (ko) | 2015-04-01 |
CN103180840B (zh) | 2015-05-20 |
EP2633417B1 (en) | 2014-08-20 |
KR20130127974A (ko) | 2013-11-25 |
US20120110222A1 (en) | 2012-05-03 |
US8732357B2 (en) | 2014-05-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5308602B1 (ja) | Xfr_rdyの動的なイネーブリングおよびディセーブリングのための方法、コンピュータ・プログラム、およびシステム(xfr_rdyの動的なイネーブリングおよびディセーブリング) | |
US6948036B2 (en) | System and method for providing multi-initiator capability to an ATA drive | |
US6961813B2 (en) | System and method for providing multi-initiator capability to an ATA drive | |
US9933946B2 (en) | Fibre channel storage array methods for port management | |
US8832367B2 (en) | Methods and apparatus for cut-through cache management for a mirrored virtual volume of a virtualized storage system | |
KR20200078382A (ko) | 개시자 모드를 갖는 솔리드-스테이트 드라이브 | |
US8694723B2 (en) | Method and system for coupling serial attached SCSI (SAS) devices and internet small computer system internet (iSCSI) devices through single host bus adapter | |
US9910800B1 (en) | Utilizing remote direct memory access (‘RDMA’) for communication between controllers in a storage array | |
EP2840576A1 (en) | Hard disk and data processing method | |
US20090112877A1 (en) | System and Method for Communicating Data in a Storage Network | |
US20130117767A1 (en) | Sas expander for communication between drivers | |
WO2017162175A1 (zh) | 一种数据传输方法及装置 | |
WO2022218160A1 (zh) | 一种数据访问系统、方法、设备以及网卡 | |
US8909864B2 (en) | Multicast write commands | |
US9807428B2 (en) | Video distribution server and SSD control method | |
US10318196B1 (en) | Stateless storage system controller in a direct flash storage system | |
US8694826B2 (en) | SAS host cache control | |
US20170329714A1 (en) | Fibre Channel Scale-Out With Physical Path Discovery and Volume Move | |
US10318171B1 (en) | Accessing fast memory in a data storage array | |
JP4469829B2 (ja) | ブロックデバイス制御装置及びプログラム | |
US7925758B1 (en) | Fibre accelerated pipe data transport | |
CN105573935A (zh) | 调平io | |
WO2013115153A1 (ja) | 情報処理装置および情報処理方法およびプログラム | |
JP2018085634A (ja) | 情報処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
TRDD | Decision of grant or rejection written | ||
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20130628 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5308602 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |