(57)【要約】複数の資源のうちから１つの資源を選択するための方法は、当該資源の統計的特性に基づいて（４４）、資源のスコアを求めるステップ（４２）を含む。スコアによって決まる範囲を有する、当該資源に対応する区間（４６）が定義される。乱数を生成し、その乱数がその資源の区間の範囲に含まれれば、その資源を選択することによって、特定の資源が選択される。
2004520655.tif 000002
【特許請求の範囲】
【請求項１】
複数の資源のうちから１つの資源を選択するための方法であって、
資源の統計的特性に基づいて前記資源のスコアを求めるステップと、
前記資源に対応しかつ前記スコアによって決まる範囲を有する区間を定義するステップと、
乱数を生成するステップと、
前記乱数が前記区間の範囲にあれば前記資源を選択するステップとからなる方法。
【請求項２】
選択された資源をポーリングし、前記資源に対応する統計的特性の以前の測定値を更新するステップをさらに含む、請求項１に記載の方法。
【請求項３】
前記スコアを求めるステップは前記統計的特性の以前の測定値に基づいて前記統計的特性の現在の値を推定するステップからなる、請求項１に記載の方法。
【請求項４】
前記資源を選択することは作業負荷が変動するプロセッサを選択することである、請求項１に記載の方法。
【請求項５】
前記資源のスコアを求めるステップは前記プロセッサの現在の作業負荷の推定値を取得するステップからなる、請求項４に記載の方法。
【請求項６】
前記資源を選択することはキュー長が変動するキューを選択することであり、前記スコアを求めるステップは前記キューの有効キュー長を求めるステップからなる、請求項１に記載の方法。
【請求項７】
前記有効キュー長を求めるステップは前記キューのキュー長を推定するステップと前記キューの優先度を決定するステップとからなり、前記スコアを求めるステップは前記キュー長を前記優先度で重み付けするステップからなる、請求項６に記載の方法。
【請求項８】
複数の資源のうちから１つの資源を選択するための、コンピュータ上にコード化されているソフトウェアを有するコンピュータ可読媒体であって、前記ソフトウェアは、
前記資源の統計的特性に基づいて前記資源のスコアを求める命令と、
前記資源に対応しかつ前記スコアによって決まる範囲を有する区間を定義する命令と、
乱数を生成する命令と、
前記乱数が前記区間の範囲にあれば前記資源を選択する命令とからなるコンピュータ可読媒体。
【請求項９】
前記資源は作業負荷が変動するプロセッサである、請求項８に記載のコンピュータ可読媒体。
【請求項１０】
前記資源はキュー長が変動するキューであり、前記スコアを求めることは有効前記キューのキュー長を決定することからなる、請求項８に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【０００１】
本発明は、分散型コンピュータシステムに関し、より詳細には、分散型コンピュータシステムを構成するプロセッサによるシステム資源の選択に関する。
【０００２】
（背景）
分散型コンピュータシステムは、多数のプロセッサを備えており、各々のプロセッサは自身のローカルメモリを有する。これらのプロセッサは共通メモリを共有する。共通メモリには、実行待ち状態にある各種処理タスクのための命令を順に格納しているキューが複数存在する。プロセッサは、遊休状態になると、これらのキューのうちの１つを選択して、キューの先頭で実行待ちにある処理タスクを実行する。
【０００３】
プロセッサは、キューを選択する際に、各キューに存在する各処理タスクの待機時間を最小化しようと試みる。待機時間はキューの長さによって部分的に決まるため、キューを選択する前に、プロセッサが各キューに存在するタスクの数を知ることができれば有益である。
【０００４】
分散型コンピュータシステムにおいては、複数のプロセッサがキューに対して常に処理タスクの追加や削除を行なっている。このため、各キューの長さが予測不可能に変化する。このため、プロセッサがキューの長さを知るためには、プロセッサは時間を割いてキューをポーリングしなければならない。しかし、各プロセッサが、処理タスクの終了時に全キューをポーリングしなければならないとすると、キューの選択に付随するオーバーヘッドが許容できない程増大する。
【０００５】
分散型コンピュータシステムは、時として他の分散型コンピュータシステムと通信することがある。このような場合、送信側の分散型コンピュータシステムで送信を行なうプロセッサが、受信側の分散型コンピュータシステムを構成しているプロセッサのうちの１つにメッセージを送信する。そのためには、受信側システムを構成するプロセッサの中から、受信先のプロセッサを選択する必要がある。
【０００６】
好適には、送信元のプロセッサは、受信側システムのプロセッサのうち最も利用度の低いものを受信先のプロセッサとして選択する。しかし、送信側のプロセッサがこれを実現しようとしても、上記のキュー選択の問題と同じ問題に遭遇する。受信側システムに存在する全プロセッサをポーリングする以外には、最も利用度の低いプロセッサを特定するための簡単かつ信頼性の高いメカニズムが存在しない。
【０００７】
（概要）
受信先のプロセッサの選択やキューの選択にまつわる問題は、統計的特性に基づいて資源を選択するという、より一般的な問題の例である。本発明による方法では、各資源の統計的特性の正確な値を求めようと試みる代わりに、利用可能な各資源に関する統計的特性の現在の（すなわち現時点の）推定値を用いて、確率に基づいて資源を選択する。
【０００８】
複数の資源のうちから１つの資源を選択するための一方法では、資源の統計的特性に基づいてその資源のスコアを求め、資源に対応する区間を定義する。この区間の範囲は、当該資源のスコアに基づいて選択される。この後、乱数が生成されて、その値が資源に対して定義された区間内にあれば、その資源が選択される。乱数は、複数の資源に対応する全区間の集合にわたって均一に分散していることもあるが、必ずしもそうである必要はない。
【０００９】
このため、この方法は、選択対象の資源の数と同数のスロットを有するルーレットの輪を回転させる場合と同じ特性を有する。このとき、各スロットの範囲は、スロットに対応する資源の統計的特性の値によって決まる。これによって、所望の統計的特性値を有する資源が選択され易くはなるものの、どの資源も選択される確率を有することが保証される。
【００１０】
本発明の第１の実施形態においては、選択対象の資源はキューであり、当該資源の統計的特性はキューのキュー長である。本発明の第２の実施形態においては、資源はプロセッサであり、統計的特性はプロセッサの作業負荷である。
【００１１】
いずれの場合も、本方法では、選択可能な複数の資源に含まれる各資源のスコアが求められる。スコアの算出においては、資源の統計的特性の現在の値が、典型的にはその統計的特性の以前の測定値を基に予測される。本発明の一態様では、以前の測定値は、対象資源の統計的特性の最後の既知の値、すなわち最も最近測定された値である。
【００１２】
特定の資源に対応する区間の範囲は、その資源のスコアによって決まる。本発明の一実施形態において、区間の範囲は、当該資源の正規化されたスコアによって決まる。資源のスコアの正規化は、複数の資源に含まれる各資源に付与されたスコアの合計を評価し、資源に付与されたスコアをスコアの合計によって正規化することにより行なわれることがある。
【００１３】
本方法はまた、統計的特性の現在の値の基礎となる測定値を定期的に更新する随意的なステップを含むことがある。本発明の一実施形態においては、選択済みの資源もポーリングされて、当該資源の統計的特性の現在の値が決定される。次に、この現在値は、当該資源の統計的特性の新たな最後の既知の値となる。
【００１４】
本発明の上記の特徴及び他の特徴は、下記の詳細説明と添付の図面とから明らかになるであろう。
（詳細説明）
図１に示すように、資源選択方法を実行するデータストレージシステム１０は、外部デバイスのインターフェースとなるアダプタ１２を複数有する。外部デバイスは、ディスクドライブなどのデータストレージデバイス１４のこともあり、この場合アダプタは「ディスクアダプタ」と呼ばれる。また、外部デバイスは、データストレージシステム１０のユーザーによって直接アクセスされるホスト１６すなわち処理システムのこともあり、この場合アダプタは「ホストアダプタ」と呼ばれる。さらに、外部デバイスは、データストレージシステム１０に存在するデータをミラーリングするためのリモートデータストレージシステム１８のこともあり、この場合アダプタは「リモートアダプタ」と呼ばれる。各アダプタ１２は、プロセッサ２０と、プロセッサ２０が利用できるローカルメモリ２２とを有する。
【００１５】
また、データストレージシステム１０は、全アダプタがアクセスすることができる共通メモリ２４を有する。共通メモリ２４は、データの一時ストレージのステージング領域として機能する。共通メモリ２４を使用することによって、大規模ストレージデバイスのアクセスに付随する待ち時間が短縮され、これによりデータストレージシステム１０の性能が向上する。
【００１６】
データストレージシステム１０に存在する種々のアダプタ１２は、相互に連携して、共通メモリ２４と、大規模ストレージデバイス１４、ホスト１６及びミラーサイト１８との間にデータが正しい順序で流れることを保証する。アダプタ１２同士が効率的に連携するためには、アダプタ１２は相互に通信している必要がある。図２に示すように、アダプタ間の通信は、共通メモリ２４のキュー部２８に少なくとも１つのキュー２６を設けることにより実現される。アダプタ３２が、他のアダプタが特定のタスクを実行することを要求する場合、アダプタ３２は、キュー部２８内のキュー２６に、タスクを実行するように要求するメッセージ３０を残す。このキューをスキャン中のアダプタ３４は、メッセージ３０を発見し、そのタスクを実行することができる。
【００１７】
本明細書ではこれ以降、メッセージを残すアダプタ３２を「要求アダプタ」、メッセージに指定されているタスクを実行するアダプタ３４を「実行アダプタ」と呼ぶ。しかし、これらは論理的な名称に過ぎないことが理解される。データストレージシステム１０の動作時に、ディスクアダプタ、ホストアダプタ及びリモートアダプタの各々が、要求アダプタ３２として機能することもあれば、実行アダプタ３４として機能することもある。
【００１８】
データストレージシステム１０では、緊急度が高く、直ちに実行される必要がタスクもあれば、時間的に余裕のあるタスクもある。このため、データストレージシステム１０は、キュー２６に異なる優先度を指定している。実行すべきタスクを有する要求アダプタ３２は、タスクの優先度を決定し、タスクの緊急度に見合う優先度のキュー２６の中にタスクを入れる。
【００１９】
キュー２６に含まれるメッセージ３０の数はキュー毎に異なる。キューに存在するメッセージの数は、キュー長と呼ばれる。キュー長の下限値は０であり、上限値はディスクストレージシステム１０の構成によって変わる。通常作動時には、要求アダプタ３２は新しいメッセージをキュー２６に入れ、実行アダプタ３４がメッセージに指定されている要求を実行して、そのメッセージをキュー２６から消去する。このため、キュー長は、経時に伴い変化する乱数となる。
【００２０】
実行アダプタ３４が遊休状態になり、処理タスクを実行できるようになると、実行アダプタ３４はキュー２６を選択して、そのキュー２６の一番目に存在するメッセージ３６に指定されている処理タスクを実行する。実行アダプタ３４は、全キューに存在する処理待ちのメッセージ全ての待ち時間が最小になるようにキュー２６を選択する。大抵の場合、これを実現するため、実行アダプタ３４はキュー長が最も大きいキュー２６を選択する。
【００２１】
キュー長は経時変化する乱数であるため、実行アダプタ３４は、キュー２６を選択しなければならないときに、現時点での各キュー２６の長さの正確な値を知ることはできない。仮に実行アダプタ３４が、全てのキュー２６をポーリングしてオーバーヘッドを生じさせたとしても、他のアダプタ１２が、実行アダプタ３４によってポーリングされたばかりのキュー２６にメッセージ３０の追加及び削除を行なう可能性がある。このような場合、実行アダプタが評価したキュー長に誤差が生じる。
【００２２】
実行アダプタ３４が遊休状態となり、キューのうちの１つに存在する要求を実行できるようになる度に全キュー２６をポーリングしなくても済むように、実行アダプタ３４は、ローカルメモリ２２にキュー長テーブル３８をキャッシュする。このテーブルには、実行アダプタ３４がキュー２６に存在する実行待ちの要求を最後に実行したときの全キュー２６の長さが記録されている。このため、キュー長テーブル３８のテーブルエントリは、キュー２６毎の最後の既知のキュー長である。最後の既知のキュー長は、実行アダプタ３４がキュー２６を選択した時点のキュー長の推定値として機能する。
【００２３】
実行アダプタ３４は、要求を実行するためにキュー２６にアクセスする度に、キュー長テーブル３８にある当該キューのエントリを更新する。実行アダプタ３４は、キュー２６にある待ち状態の要求を実行するために、いずれにせよキュー２６にアクセスしなければならないため、キュー長を取得するためにキュー２６をポーリングするのに要するオーバーヘッドの増分はわずかである。
【００２４】
実行アダプタ３４はまた、各キュー２６に指定されている優先度の値を記録している優先度テーブル４０を維持管理している。優先度テーブル４０では、優先度の高いキューは大きな整数値を有する。優先度テーブル４０では、優先度の低いキューは小さな整数を有する。
【００２５】
図３において、キュー２６を選択するために、実行アダプタ３４は、各キュー２６にスコアを付与する（４２）。その際、実行アダプタ３４は、各キュー２６のキュー長の推定値を、キュー２６に指定された優先度によって重み付けする。得られた結果は、そのキュー２６の「有効キュー長」と呼ばれる。実行アダプタ３４は、全キュー２６の有効キュー長の合計を求めて（４４）、図４に示すように、この合計と等しい範囲を有するサンプリング区間４８を定義する（４６）。
【００２６】
次に、実行アダプタ３４は、サンプリング区間４８を、キュー２６の数と同数のキュー区間５２に分割する（５０）。各キュー区間５２の範囲は、対応するキュー２６の有効キュー長に対応している。図中の実施形態では、各キュー区間５２の範囲は、サンプリング区間４８の範囲によって正規化された有効キュー長である。さらに、各キュー区間５２は、他の全キュー区間の範囲と重複しない。このため、サンプリング区間上の各点は、１つのキュー２６にのみ対応している。
【００２７】
キュー区間５０を定義した後に、実行アダプタ３４は、乱数処理５６（図２参照）を実行し（５４）、サンプリング区間４８全体に均一に分散する値を取る乱数を生成する。このため、この乱数は、サンプリング区間４８を構成するいずれかのキュー区間に入る値を有する。乱数が、任意の特定のキュー区間５２に入る確率は、他の全キューの最後の既知の有効キュー長と当該キュー２６のキュー区間との比によって決まる。
【００２８】
次に、実行アダプタ３４は、乱数が含まれるキュー区間５２に対応するキュー２６にアクセスして（５８）、選択されたキュー２６の一番目のメッセージ３６に指定されているタスクを実行する（６０）。タスクが完了したら、実行アダプタ３４は、一番目のメッセージ３６を選択したキュー２６から削除し（６２）、選択したキュー２６をポーリングして（６４）キュー長を取得する。次に、実行アダプタ３４は、キュー長テーブル３８に存在する選択したキュー２６のエントリを更新する（６６）。
【００２９】
上記のキュー選択方法では、ローカルにキャッシュされた最後の既知のキュー長を用いて現在の有効キュー長の推定値を生成しているため、各キュー２６をポーリングして、現在のキュー長を取得する必要がない。このため、上記のキュー選択方法では、キュー２６を迅速に選択できるが、そのキューは、有効キュー長が最も長いキューである可能性が高いものの、有効キュー長が最長であることは保証されない。上記のキュー選択方法においては、どのキュー２６にも選択される確率があるため、いずれかのキュー２６が放置されることはない。このため、有効キュー長が短いキュー内で実行待ちにあるタスクが、妥当な待機時間の経過後に実行されるようになる。また、有効キュー長の短いキューが時々ポーリングされて、有効キュー長が変化したか否かが確認されることが保証される。
【００３０】
優先度が全て等しい複数のキュー２６を維持管理できるように、データストレージシステム１０を構成することが可能である。この種のシステムでは複数のアダプタが待機中の複数の要求を同時実行できるため、データストレージシステム１０は、キューが１つしかないデータストレージシステムよりも柔軟に負荷を分散させることができる。
【００３１】
上記の方法は、複数のキュー２６の優先度が全て等しいデータストレージシステム１０でも実施することもできる。この種のデータストレージシステム１０では、有効キュー長を実際のキュー長に設定することができ、優先度テーブル４０が不要となる。別法として、優先度テーブル４０の全エントリに同じ値を設定してもよい。
【００３２】
上記の方法は、任意の資源を、その統計的特性に基づいて選択するように適合させることができる。上記の実施形態では、資源はキュー２６であり、選択の基礎となる統計的特性はそのキューの長さであった。資源がリモートミラーリングサイト１８のリモートアダプタであり、選択の基礎となる統計的特性がリモートアダプタの処理作業負荷である実施形態を下記に記載する。
【００３３】
第１実施形態と第２実施形態との相違点は、第１実施形態では統計的特性値が高い資源を選ぶことが好ましく、第２実施形態では統計的特性値が低い資源を選ぶことが好ましいという点である。統計的特性そのものではなく、統計的特性の逆数を取ることによって、この相違点を容易に克服して、第２実施形態を実現することができる。
【００３４】
図５において、第１データストレージシステム６８は時として第２データストレージシステム７０と通信する。例えば、第１データストレージシステム６８のホストアダプタ７２がデバイス７４に書き込み、このデバイスが第２データストレージシステム７０のディスクアダプタ７８によって制御されているミラーデバイス７６にミラーリングされている場合、第１データストレージシステム６８のリモートアダプタ８０は、第２データストレージシステム７０の選択されたリモートアダプタ８２と通信を確立する。これ以降、第１データストレージシステム６８のリモートアダプタを「送信アダプタ」８０と呼び、第２データストレージシステム７０のリモートアダプタを「受信アダプタ」８２と呼ぶ。リモートアダプタ８０，８２の各々は、プロセッサ８２とローカルメモリ８４とを有する。
【００３５】
「受信アダプタ」及び「送信アダプタ」との名称は、論理的な名称に過ぎないことが理解される。例えば、第２データストレージシステム７０が第１データストレージシステム６８にミラーリングされるデバイスを有し、第２データストレージシステム７０のリモートアダプタ８２が送信アダプタとして機能し、第１データストレージシステム６８のリモートアダプタ８０が受信アダプタとして機能する場合もある。
【００３６】
送信アダプタ８０は、通信確立時に、利用可能な受信アダプタ８２のうちのいずれか１つを選択する。好適には、送信アダプタ８０は、最も利用度の低い受信アダプタ８２を選択する。しかし、受信アダプタ８２との通信によってオーバーヘッドが生ずるため、送信アダプタ８０が全受信アダプタ８２をポーリングして、最も利用度の低い受信アダプタ８２を判定するのは現実的ではない。
【００３７】
さらに、送信アダプタ８０は、受信アダプタ８２の選択に利用した情報が正確なものであるか否かを知ることはできない。例えば、送信アダプタ８０がポーリングを行なってから送信アダプタ８０がタスクを実行するまでの短い時間の間に、他の送信アダプタ８０から送信された要求によって受信アダプタ８２が使用中となることがある。
【００３８】
送信アダプタ８０は、全ての受信アダプタ８２のポーリングを行なわずに済むように、ローカルメモリ８４に作業負荷テーブル８６を維持管理している。このテーブルには、送信アダプタ８０が受信アダプタ８２と最後にＩ／Ｏトランザクションを行なった時点における、各受信アダプタ８２によって実行された作業の負荷を表す情報が含まる。このため、特定の受信アダプタ８２の作業負荷は、その受信アダプタ８２の最後の既知の作業負荷である。受信アダプタを選択する本方法では、作業負荷テーブル８６に記憶されている受信アダプタの最後の既知の作業負荷を用いて、送信アダプタ８０が受信アダプタ８２を選択する時点における受信アダプタ８２の利用度を推定している。
【００３９】
送信アダプタ８０は、受信アダプタ８２とＩ／Ｏトランザクションを行なう度に、各受信アダプタ８２のエントリを記憶している作業負荷テーブル８８にある、当該受信アダプタ８２のエントリを更新する。送信アダプタ８０は、アダプタ８２との間でＩ／Ｏトランザクションを行なうために、いずれにせよ受信アダプタ８２との通信を確立しなければならないため、受信アダプタ８２をポーリングして、受信アダプタ８２の利用度を取得するために要するオーバーヘッドの増分はわずかである。受信アダプタ８２は、送信アダプタ８０からのポーリングに応答して、同時に処理しているタスクの数を表す整数を提供する。
【００４０】
図６において、送信アダプタ８０は、通信対象の受信アダプタ８２を選択するために、各受信アダプタ８２にスコアを付与する（８８）。その際、送信アダプタ８０は、各受信アダプタ８２のテーブルエントリの逆数を、以降のステップで時間のかかる浮動小数点演算を行なわなくて済む位十分大きな整数で重み付けする。得られたスコアは、当該受信アダプタ８２の「逆作業負荷」と呼ばれる。次に、送信アダプタ８０は、全受信アダプタ８２の逆作業負荷の合計を求めて（９０）、図７に示すように、この合計と等しい長さを有するサンプリング区間９４を定義する（９２）。
【００４１】
次に、サンプリング区間９４を、受信アダプタ８２数と同数の小区間９８に分割する（９６）。各小区間９８の長さは、対応する受信アダプタ８２の逆作業負荷に対応する。さらに、各小区間９８は、他の全小区間と重複しない。このため、サンプリング区間９４の各点は、１つの受信アダプタ８２にのみ対応している。
【００４２】
小区間を定義した後に、送信アダプタ８０は、乱数処理１０２を実行し（１００）、サンプリング区間９４全体に均一に分散する値を取る乱数を生成する。このため、この乱数は、受信アダプタ８２のうちのいずれか１つに対応する小区間９８の範囲に入る値を取る。乱数が、特定の受信アダプタ８２によって決まる小区間９８に入る確率は、他の全受信アダプタの逆作業負荷と当該受信アダプタ８２の逆作業負荷との比によって決まる。
【００４３】
次に、送信アダプタ８０は、乱数が含まれる小区間９８に対応する受信アダプタ８２との間で通信を確立し（１０４）、選択した受信アダプタ８２にメッセージを送信する（１０６）。次に、送信アダプタ８０は、受信アダプタ８２をポーリングして（１０８）作業負荷の新しい推定値を取得し、作業負荷テーブル８６に存在する当該受信アダプタ８２のエントリを更新する（１１０）。
【００４４】
受信アダプタ８２をポーリングする代わりに、ローカルにキャッシュされた最後の既知の作業負荷を用いて現在の作業負荷を取得する。このため、送信アダプタ８０は受信アダプタ８２を迅速に選択できるが、そのアダプタは、作業負荷が最も小さい可能性が高いものの、作業負荷が最小であることは保証されない。確率に基づいた上記の選択処理では、どの受信アダプタ８２にも選択される確率があるため、いずれかの受信アダプタ８２が放置される。このため、受信アダプタ８２の間で負荷が分散されることが保証される。また、以前に利用度が高かった受信アダプタ８２が時々ポーリングされて、ある程度の空きがあることが確認されることが保証される。
【００４５】
上に、新規であり、特許により保護されるものとして特許を請求する本発明並びにその好適な実施形態を記載した。
【図面の簡単な説明】
【図１】データストレージシステムを示す図。
【図２】図１のデータストレージシステムのローカルキャッシュメモリ及びグローバルメモリの内容を示す図。
【図３】キュー選択方法を示すフローチャート。
【図４】図３のキュー選択方法のサンプリング区間を示す図。
【図５】リモートデータストレージシステムと通信する図１のデータストレージシステムを示す図。
【図６】通信対象のリモートアダプタを選択するための方法を示すフローチャート。
【図７】図６のリモートアダプタ選択方法のサンプリング区間を示す図。
【図３】
2004520655.tif 000003
【図６】
2004520655.tif 000004
【国際公開パンフレット】
2004520655.tif 000005
2004520655.tif 000006
2004520655.tif 000007
2004520655.tif 000008
2004520655.tif 000009
2004520655.tif 000010
2004520655.tif 000011
2004520655.tif 000012
2004520655.tif 000013
2004520655.tif 000014
2004520655.tif 000015
2004520655.tif 000016
2004520655.tif 000017
2004520655.tif 000018
2004520655.tif 000019
2004520655.tif 000020
2004520655.tif 000021
【国際調査報告】
2004520655.tif 000022