【解決手段】デフォルトキュー207は、事前に設定されたトラフィック閾値より少ないトラフィックを有するあらゆるVMを提供する。プールに割り当てられるべきキューに対するプールが存在しない場合、プールを定義しプールにキューを割り当てる。LLRプール210及びHLTプール215は、特定のVMの要件に対処するために作成される2つのプールである。LLRプール210は、LLR VMを提供するキューを含み、HLTプール215は、HLT VMを提供するキューを含む。LLR VM250及び252は、LLRプール210のLLRキュー222及び224を介してパケットを送受信し、HLT VMは、HLTプール215のHLTキュー230〜238を介してパケットを送受信する。
前記プールを第1のプール、前記キューのセットを第1のキューのセットであり、前記基準セットを第1の基準セット、前記データトラフィックのサブセットをデータトラフィックの第1のサブセットとし、方法は、
前記監視することに基づいて、前記キューの第2のセットを介するデータトラフィックを管理するための第2の基準セットを有する第2のプールを指定し且つ前記第2のプールに前記第2のキューのセットを割り当てるステップと、
前記第2の基準セットに基づいて、前記データトラフィックの第2のサブセットを前記第2のキューのセットに向けるステップとを備え、
前記第1の基準セットは前記第2の基準セットと異なることを特徴とする請求項1に記載の方法。
特定のプール内の少なくともキューのサブセットを介するデータトラフィックが前記最大閾値量を上回る場合、前記特定のプールのキューのセットに新しいキューを割り当てるステップを更に備えることを特徴とする請求項3に記載の方法。
特定のキューを介するデータトラフィックがある期間の間前記最小閾値量を下回る場合、特定のプールのキューのセットから前記特定のキューを除去するステップを更に備えることを特徴とする請求項7に記載の方法。
データトラフィックを監視するステップは、前記電子装置上で実行するアドレス指定可能なノードに関連付けられるデータトラフィックを監視するステップを含むことを特徴とする請求項1に記載の方法。
前記データトラフィックのサブセットを向けるステップは、前記キューのセットを介して前記データトラフィックのサブセットをルーティングする前記NIC内のフィルタセットを指定するステップを含むことを特徴とする請求項1に記載の方法。
前記フィルタセットは、前記キューのセットを介する前記データトラフィックのサブセットを前記電子装置上で実行するアドレス指定可能宛先ノードのセットにルーティングすることを特徴とする請求項13に記載の方法。
前記データトラフィックのサブセットを向けるステップは、前記データトラフィックのサブセットを前記電子装置上で実行するアドレス指定可能送信元ノードのセットから前記キューのセットを介して前記電子装置の外部にルーティングするフィルタセットを指定するステップを含むことを特徴とする請求項1に記載の方法。
前記フィルタセットは、複数のアドレス指定可能送信元ノードと前記電子装置上のネットワーキングリソースのセットを共有するネットワーク仮想化レイヤにおいて定義されることを特徴とする請求項15に記載の方法。
前記フィルタセットは、前記電子装置上で実行する複数のアドレス指定可能なノードと前記電子装置上のネットワーキングリソースのセットを共有するネットワーク仮想化レイヤにおいて定義されることを特徴とする請求項15に記載の方法。
前記監視するステップ、前記指定するステップ及び前記向けるステップは、複数の異なる仮想モジュール間で前記電子装置上のネットワーキングリソースのセットを共有するネットワーク仮想化レイヤにより実行される動作であり、
前記フィルタセットは、異なる仮想モジュールからのデータトラフィックを前記複数のキューにおける異なるキューに割り当てるために前記ネットワーク仮想化レイヤにおいて定義されることを特徴とする請求項15に記載の方法。
前記NICとの間の前記データトラフィックのセットを監視するステップを更に備え、前記判定するステップは前記監視するステップに基づくことを特徴とする請求項19に記載の方法。
前記第2のサブセットを割り当てるステップは、前記非デフォルトプールに割り当てられる第3のキューに前記第2のサブセットを割り当てるステップを含むことを特徴とする請求項21に記載の方法。
前記第1のサブセットを再割り当てするステップは、前記第1のサブセットを前記第1のキューに再割り当てするステップを含むことを特徴とする請求項24に記載の方法。
前記第1のサブセットを再割り当てするステップは、前記デフォルトプールに割り当てられる第3のキューに前記第1のサブセットを再割り当てするステップを含むことを特徴とする請求項24に記載の方法。
異なるプールの前記基準セットは、前記特定のプールの各キューを通過するための異なる最大閾値データトラフィック量を指定する点で異なることを特徴とする請求項27に記載の方法。
異なるプールの前記基準セットは、前記特定のプールの各キューを通過するための異なる最小閾値データトラフィック量を指定する点で異なることを特徴とする請求項27に記載の方法。
前記データトラフィックのセットは、前記電子装置上で実行するアドレス指定可能なノードに関連付けられるデータトラフィックを含むことを特徴とする請求項19に記載の方法。
前記アドレス指定可能なノードは、仮想マシン(VM)、記憶ボリュームマウンタ及びVMマイグレータのうちの少なくとも1つを含むことを特徴とする請求項31に記載の方法。
【発明を実施するための形態】
【0016】
以下の本発明の詳細な説明において、本発明の多くの詳細、例及び実施形態を記載及び説明する。しかし、本発明は記載される実施形態に限定されず、説明する特定の詳細及び例のいくつかを用いずに実施されてもよいことが当業者には明らかになるだろう。
【0017】
いくつかの実施形態は、ホスト上で実行する複数の仮想マシン(VM:virtual machines)との間のトラフィックを処理する複数のキューを効率的且つ動的に管理するキュー管理システムを提供する。本システムは、(1)優先度の高いプールが特定の種類のトラフィック又はVM(例えば、短い待ち時間を必要とするVMに対するトラフィック)に対して確保される優先度の異なるプールにキューを分割し、(2)各プール内のキューの数を動的に調整し(すなわち、プールのサイズを動的に調整し)、(3)1つ以上の最適化基準(例えば、キューが十分に使用されていない又は過剰に使用されている場合に関する基準)に基づいてVMを新しいキューに動的に再割り当てすることにより、キューを管理する。
【0018】
いくつかの実施形態において、キュー管理システムは、キューを以下の4種類のプールにグループ化する。
(1)いくつかの実施形態において、VMの初期化時にVMの一部又は全てに対する初期キューである1つのデフォルトキューを含むデフォルトプール(他の実施形態において、デフォルトプールは2つ以上のデフォルトキューを含む)
(2)全ての未使用キュー(すなわち、どのVMとの間のトラフィックにも割り当てられていないキュー)を含む未使用プール
(3)LRO及びRSS等の特定のハードウェア特徴に関連付けられたキューを含むハードウェア特徴プール
(4)短い待ち時間を必要とする(LLR)VM及び長い待ち時間に耐えられる(HLT)VM等の異なる種類の要件を有するVMを提供するキューを含むVM要件プール
【0019】
これらの実施形態のいくつかにおいて、キュー管理システムは最初、デフォルトプール内に存在する1つのデフォルトキューを除き、未使用のプール内の全キューを未割当とする。いくつかの実施形態は、最初のVMが初期化されるまでデフォルトキューを確保しないが、他の実施形態は、最初のVMが初期化される前でもデフォルトキューを指定する。
【0020】
VMのトラフィックが事前に設定された閾値を上回る場合、システムはVMのトラフィック要件に一致するプールが存在するか(例えば、閾値を上回っているLLR VMに対するLLRプールが存在するか)を判定し、そのようなプールが存在する場合、VMを当該プールに割り当てる。一致するプールが存在しない場合、システムは新しいプールを作成し、VMを当該プールに割り当てる。新しいプールを作成するための未使用キューが存在しない場合、キュー管理システムは、1つ以上の割り当て済キュー(すなわち、先に指定されたプールに割り当てられたキュー)を優先的に使用し、新たに作成されたプールに優先的に使用されるキューを割り当てる。この優先的使用により、既存のプールの間でキューのバランスが再調整され、新しいプールのために1つ以上のキューが解放される。いくつかの実施形態において、プールにわたるバランス再調整処理は、プールの最小サイズ及び最大サイズ、プールの相対優先度等の1つ以上のリソース割り当て基準に基づく。
【0021】
プールにわたるキューのバランス調整に加えて、いくつかの実施形態のキュー管理システムは、プール内のトラフィックのバランスを再調整する。本システムは、異なる実施形態において異なる基準を使用して、プール内のトラフィックのバランスを再調整する。そのような基準の例は、関連付けられた管理スレッドのCPU負荷、トラフィックの種類、トラフィックの負荷、キューの他の実時間負荷計測値等を含む。いくつかの実施形態において、システムは、異なるプールに対して異なるバランス再調整基準を使用する。例えばシステムは、いくつかのプールでは少数のキューにVMを集約しようとし、他のプールでは可能な限り多くのキューにVMを分散しようとする。いくつかの実施形態において、キュー管理システムは、周期的に及び/又は特定のイベントにバランス再調整処理を実行する負荷バランス調整器を有する。
【0022】
VMのトラフィックが閾値を下回る場合、いくつかの実施形態のキュー管理システムは、VMをデフォルトキューに戻す。VMが非デフォルトプールにおいてキューを使用している最後のVMである場合、最後に使用されたキューは、後でいずれかのプールに再割り当てできるように、割り当てが行われていないキューの未使用プールに移動される。このように、本手法において、キューは、VMを割り当てられ次第、非デフォルトプールのうちの1つに割り当てられ、最後のVMが再割り当てされるか又は切り離され次第、未使用プールに再割り当てされる。
【0023】
VMのデータトラフィックに加えて又はVMのデータトラフィックの代わりに、いくつかの実施形態のキュー管理システムは、プールを動的に定義し、各プールを一意に管理し、プール内のキューを動的に変更し、ホスト上で実行する非VMアドレス指定可能なノード(例えば、送信元エンドノード又は宛先エンドノード)との間のデータトラフィックを動的に再割り当てする。最初に、VMに対するこれらの動作の実行を以下に説明する。その次に、非VMアドレス指定可能なノードに対するこれらの動作の実行を説明する。
【0024】
I.異なる要件を有するVMに対する異なるプール
上述のように、いくつかの実施形態のキュー管理システムは、優先度の高いプールが特定の種類のトラフィック又はVM(例えば、短い待ち時間を必要とするVMに対するトラフィック)に対して確保される優先度の異なるプールに、キューを分割する。
図2は、トラフィック又はVMの要件の種類に基づいて、キューを2つの優先プール210及び215に概念的にグループ化することの例を示す。詳細には、
図2は、(1)複数のキューを有する物理NIC(Physical NIC)200、及び(2)異なる要件を有する複数の仮想マシン(VM)202を示す。VMは、ホストコンピュータ(不図示)上で実行する。これらのVMとの間のトラフィックは、NICの種々のキューに分散される。
図2に示すように、各キューは、入力トラフィックを処理するための受信側バッファセット204と、出力トラフィックを処理するための送信側バッファセット206とを有する。いくつかの実施形態において、マルチコアプロセッサの1つのコアが各キューを管理する。従って、
図2に示す例において、8つのコアがNICの8つのキューを管理する。
【0025】
いくつかのNICにおいて、各受信側バッファセット204はNICにおける独自の独立型キューとなる。同様に、これらのNICにおいて、各送信側バッファセット206は、NICにおける独自の独立型キューとなる。しかし、これらのNICにおいて受信側キューが送信側キューから分離し且つ独立している場合でも、いくつかの実施形態のキュー管理システムは1つの受信側キューと1つの送信側キューとを対にし、それにより、キューの対をVMに対する1つのキュー構造体として使用できる。しかし、他の実施形態はキューを「対」にしない。詳細には、これらの他の実施形態では、1つの受信側キューを使用する全てのVMが同一の送信側キューを使用する必要がない。2つのVMは、同一の受信側キューを使用するが異なる送信側キューを使用することができる。しかし、例示を簡略にするために、
図3〜
図6及び
図10〜
図15に示す各キューは、送信側キューと対にされた受信側キューを含むキューの対である。
【0026】
図2において、キュー管理システムは、物理NIC200のキューを3つの異なる種類のプールにグループ化している。これらは、(1)デフォルトプール205、(2)LLRプール210及び(3)HLTプール215である。
図2に示すように、いくつかの実施形態におけるデフォルトプール205は、1つのデフォルトキューのみを含む。他の実施形態において、デフォルトプール205は2つ以上のデフォルトキューを含む。デフォルトキューは、非デフォルトプールのキューに割り当てられないVMのトラフィックを提供する。1つのデフォルトキュー(デフォルトキュー207等)しか存在しない場合、「デフォルト」キューは、非デフォルトプールに割り当てられない全てのVMを提供する。いくつかの実施形態において、デフォルトキュー207は、全ての低トラフィックVMを提供し、すなわち、事前に設定されたトラフィック閾値より少ないトラフィックを有するあらゆるVMを提供する。これらのVMはトラフィックが少ないため、非デフォルトキューに配置する利点が小さい。
【0027】
いくつかの点において、デフォルトキュー207は、どのプールにも属さないと見ることができる。というのは、ハードウェアから見た場合、デフォルトキュー207は、入出力トラフィックのルーティングを別のキューに向けるマッチングフィルタを有さない全てのVMを提供するためである。いくつかの実施形態のキュー管理システムは、VMのトラフィックが閾値を上回るまで、各VMをデフォルトキューから開始する。VMのトラフィックが閾値を上回ると、システムはVMに対する非デフォルトキューを選択し、VMのインバウンドトラフィックに対するフィルタを割り当てるようにPNICに命令し、VMのアウトバウンドトラフィックに対するフィルタを割り当てるように仮想化レイヤに命令する。いくつかの実施形態において、アウトバウンドトラフィックに対するフィルタは送信元MACアドレスに基づき、インバウンドトラフィックに対するフィルタは宛先MACアドレスに基づく。これらのフィルタは、入出力トラフィックを選択されたキューにルーティングするようにPNIC及び仮想化レイヤ内のモジュールに命令する。尚、フィルタは他の識別子に基づいてもよい。例えば、いくつかの実施形態におけるアウトバウンドトラフィックに対するフィルタは、ソフトウェア転送要素のポートIDに基づく。
【0028】
フィルタを割り当てることにより、非デフォルトプールに概念的に割り当てられるキューがVMのトラフィックを提供できる。換言すると、フィルタを指定することにより、システムはVMのトラフィックとキューとをリンクする。更に、キューとそれを保持する概念的な「プール」とを関連付けることにより、キュー管理システムは、異なる管理処理を適用して異なるプール内のキューを異なる方法で管理でき、それにより、異なる要件を有する異なるVMを管理できる。これについては第II節で以下に更に説明する。
【0029】
プールに割り当てられるべきキューに対するプールが存在しない場合、以下に更に説明するように、キュー管理システムは、最初にプールを定義した後、プールにキューを割り当てる。LLRプール210及びHLTプール215は、特定のVMの要件に対処するために作成される2つのプールである。LLRプール210は、LLR VMを提供することを意図するキューを含み、HLTプール215は、HLT VMを提供することを意図するキューを含む。
図2に示すように、LLR VM250及び252は、LLRプール210のLLRキュー222及び224を介してパケットを送受信し、HLT VM260は、HLTプール215のHLTキュー230〜238を介してパケットを送受信する。
【0030】
いくつかの実施形態において、キュー管理システムは、LLR VMのトラフィックが一方のキューのセットを通過し且つHLT VMのトラフィックが別のキューのセットを通過するようにフィルタを特に割り当てる(送信側及び受信側の双方において)ことにより、これらのプールを概念的に定義する。LLR VMの場合、いくつかの実施形態のキュー管理システムは、LLR VMが他のVMのトラフィックにより受ける影響が最小限になるように、VMのトラフィックが可能な限り多くのLLRキューに拡散されることを保証するために、LLRキューの割り当てを最適化する。それに対して、HLT VMの場合、いくつかの実施形態のシステムは、多くの未使用キューを新しい割り当てに使用できるようにしておくために、HLT MVにより使用されるHLTキューの数を減少しようとすることにより、HLTキューの割り当てを最適化する。
【0031】
LLR VMに対するキューとHLT VMに対するキューとを分離することにより、いくつかの実施形態のキュー管理システムは、LLR VMとの間のトラフィックが輻輳の少ないLLRキューを通過するようにする。そのため、LLR VMは、パケットの送受信における待ち時間を短くできる。
【0032】
図2に示す例は3種類のプールを示すが、他の実施形態は2種類以下又は4種類以上のプールを使用することが当業者には認識されるだろう。例えばLLRプール及びHLTプールの双方を提供する代わりに、いくつかの実施形態のキュー管理システムはLLRプールのみを定義し、全てのHLTトラフィックがデフォルトプールを介するように向ける。そのようなHLTトラフィックの全てを処理するために、いくつかの実施形態のキュー管理システムはデフォルトプール内に複数のキューを定義する。
【0033】
LLRプール及び/又はHLTプールに加えて、いくつかの実施形態のキュー管理システムは、NICのLROハードウェア特徴及びRSSハードウェア特徴をサポートするためにLROプール及びRSSプール(
図1と同様)を更に定義する。また、LLRプール及びHLTプールはVMの要件に基づいて指定されるプールの例であり、LLRプールはLLR VMのトラフィックに対するプールであることを意図するため、LLRプールはHLTプールより優先度の高いプールである。他の実施形態において、キュー管理システムは、3種類以上のVMの要件を処理するために3つ以上の優先プールを定義する。例えば
図3は、3つの異なる種類のVMに対する3つの優先プールの例を示す。プールは、優先度の高いプール305、優先度が中間であるプール310及び優先度の低いプール315を含み、それらのキューはそれぞれ、優先度の高い(HP)VM320、優先度が中間である(MP)VM325及び優先度の低い(LP)VM330に対するトラフィックを処理する。いくつかの実施形態において、優先度の高いプールは、優先度の低いプールより少ないVMを有し、且つ/又は、キュー毎の総トラフィックが少ない。
【0034】
また、LLRプール又はHLTプールを定義する代わりに、あるいはそのようなプールを定義することに加えて、いくつかの実施形態のキュー管理システムは、高割込み(HI)プール又は低割込み(LI)プールを定義する。この場合、割込みは、PNIC内のキューに対して応答できる、ネットワーク仮想化レイヤ(NVL)内のスレッドに対してPNICにより生成される信号を参照する。
図4は、そのようなスレッド及び本発明のいくつかの実施形態の割込み生成アーキテクチャを示す。いくつかの実施形態において、スレッドは、タスクセットを実行するために(例えば、VMに対するネットワークスタック内の受信側モジュール又は送信側モジュールを管理するために)初期化される処理である。また、いくつかの実施形態において、異なるスレッドは、マルチスレッドプロセッサの異なるスレッド及び/又はマルチコアプロセッサの異なるコアにおける独立した処理として実行可能である。
【0035】
図4はPNIC400を示し、このPNIC400は、(1)VMに中継される必要のある入力トラフィックを受信する複数のキュー、(2)キューに対する入力トラフィックの割り当てを管理する受信側(RX)処理エンジン405、(3)キューの状態を監視するキュー監視器410、並びに(4)キューに格納されたデータを検索するようにNVLの受信側スレッドに命令する割込みを生成する割込み生成器430を含んでいる。RX処理エンジンはMACフィルタ420を含み、これは、上述し且つ更に後述するように、VMの入力トラフィックとキューとを対にするために使用される。
【0036】
図4は、PNIC内の各キューに対する受信側(RX)スレッド427を更に示す。いくつかの実施形態において、スレッド427は、PNICを介する仮想マシンとの間のトラフィックを管理するネットワーク仮想化レイヤの一部である。いくつかの実施形態において、キュー管理システムはネットワーク仮想化レイヤの一部である。
【0037】
各スレッドは、それに関連付けられたキューを管理する。キューが受信パケットで満たされる度に、PNICのキュー監視器410はこれを検出し、キューからパケットを検索するようにスレッドに命令するため、キューのスレッド425を実行するコアに対する割込みを生成するようにPNICの割込み生成器430に命令する。生成器は、PNICドライバ435のAPIを介して当該割込みを送出し、PNICドライバ435がコアに対する割込みを生成する。キューのスレッドが当該動作のために呼び出される度に、キューを管理し且つそのスレッドを実行するコアは、そのキューからパケットを読み出すスレッドを実行するため、実行中の別のタスクに割り込む必要がある。そのような割込みは、プロセッサの動作効率に影響を及ぼす。
【0038】
従って、プロセッサの動作効率を向上し且つ/又は重要なVMに対する待ち時間を短縮するために、いくつかの実施形態のキュー管理システムは、HIプール又はLIプールを定義する。このHIプールは、短い待ち時間で出力される必要のあるトラフィックを搬送するキューを含むプールであり、LIプールは、長い待ち時間に耐えられるトラフィックを搬送するキューを含むプールである。
【0039】
いくつかの実施形態において、HIプールを管理するスレッドは、LIプールを管理するスレッドより多く割込みを受信するため、いくつかの実施形態では、LIプールを動作するコアより負荷の少ないプロセッサコアにより動作される。詳細には、LLR VMの所望の短い待ち時間を考慮するために、いくつかの実施形態のキュー管理システムは、LLR VMに対するトラフィックを処理するキューをHIプール内のキューとして指定する。この指定に基づいて、当該キューの管理及び当該キューのスレッドを実行するコアの管理を最適化するための種々のタスクを実行できる。例えばいくつかの実施形態におけるキュー管理システムは、当該HIキューに割り当てられるVMの数を減少するか、あるいは同様に重要であり且つ短い待ち時間を必要とするVMのみを当該キューに割り当てる。それに加えて又はその代わりに、いくつかの実施形態のキュー管理システムは、当該HIキューに対するスレッドを実行するコアに対する負荷を軽減するようにプロセッサのスケジューラに更に命令でき且つ/又は当該キューに対する割込みを早く生成するようにPNICに命令できる。
【0040】
図4は、HIプールを実行するコアに対する負荷を軽減する例を示す。詳細には、本例において、キュー管理スレッドTQM1及びTQM2は、HIキューである優先度の高いキューHPQ1及びHPQ2を管理するためのスレッドである。これらのスレッドは、マルチコアプロセッサ450のコア1及び2に割り当てられる。
図4に示すように、コア2はスレッドTQM2のみを実行し且つコア1はスレッドTQM1及び非キュー管理スレッドTNQM1を実行するため、これらのコアに対する負荷は相対的に軽い。これらのコアに対する負荷は、キュー管理スレッドTQM5(優先度の低いキュー5(LPQ5)に対する)を実行し且つ3つの他の非キュー管理スレッドTNQM2〜TNQM4を更に実行するコア5に対する負荷と異なる。
【0041】
HLT VMの許容可能な長い待ち時間を考慮するために、いくつかの実施形態のキュー管理システムは、HLT VMに対するトラフィックを処理するキューをLIプール内のLPQとして指定する。この指定に基づいて、当該キューの管理及び当該キューのスレッドを実行するコアの管理を最適化するための種々のタスクを実行できる。例えばいくつかの実施形態におけるキュー管理システムは、より多くのVMを当該キューに割り当ててもよい。それに加えて又はその代わりに、いくつかの実施形態のキュー管理システムは、当該キューに対するスレッドを実行するコアに更なるスレッドをスケジュールできることをプロセッサのスケジューラに更に通知し且つ/又は当該キューに対して生成する割込みを少なくするように(すなわち、当該キューが更に満たされてから割込みを生成するように)PNICに命令する。
【0042】
いくつかの実施形態において、HIプール及び/又はLIプールの指定は、LLRプール及び/又はHLTプールの指定に加えて使用されるが、他の実施形態において、それらはLLRプール及び/又はHLTプールの指定の代わりに使用される。いくつかの実施形態において、キューは、LLRキュー及びHIキューの双方として指定されてもよい。あるいは、LLR VMはHLT VMと共にキューに含まれてもよいが、そのコアに対する負荷が重くならず且つキューを空にするために頻繁に割込みを行えるように、キューはHIキューとして指定されてもよい。
【0043】
II.キュー管理システム
図5を参照して、いくつかの実施形態のキュー管理システムを以下に説明する。このシステム500は、優先度の高いプールが特定の種類のトラフィック又はVM(例えば、短い待ち時間を必要とするVMに対するトラフィック)に対して確保される優先度の異なるプールに、キューを分割する。また、本システムは、各プール内のキューを動的に調整し(すなわち、プールのサイズを動的に調整し)、1つ以上の最適化基準(例えば、キューが十分に使用されていない又は過剰に使用されている場合に関する基準)に基づいてVMをプール内の新しいキューに動的に再割り当てする。
【0044】
図5は、(1)ホスト上で実行している複数のVM505、(2)VMにより共有されるホストの物理NIC515、(3)ホスト上で実行し且つ共有PNICを介するVMとの間のトラフィックを助長するネットワーク仮想化レイヤ510、並びに(4)スレッド(コンテキストとも呼ぶ)のうちの1つを実行するタイミング及び場所をプロセッサに命令するカーネルスケジューラである物理プロセッサスケジューラ525(物理CPU又はPCPUとも呼ぶ)を示す。
【0045】
PNIC515は、複数のキュー517を有する。これらのキューは、ホストにより受信された入力データを格納するための受信側キューと、VMから送信された出力データを格納するための送信側キューとを含む。いくつかの実施形態において、各キューは、入力データ又は出力データを格納するためのバッファセットを含む。いくつかの実施形態において、受信側キューは送信側キューから分離し且つ独立しているが、仮想化レイヤは1つの受信側キューと1つの送信側キューとを対にし、それにより、キューの対をVMに対する1つのキュー構成体として使用できる。しかし、他の実施形態はキューを「対」にしない。換言すると、これらの実施形態では、1つの受信側キューを使用する全てのVMが同一の送信側キューを使用する必要がない。2つのVMは、同一の受信側キューを使用するが異なる送信側キューを使用することができる。
【0046】
PNICは、有線又は無線リンクから入力パケットを受信する受信側(RX)処理エンジン511を更に有する。RX処理エンジンは、宛先MACに基づいて各VMの入力トラフィックと1つのキューの対とを関連付けるように構成されるMACフィルタ514を有する。仮想化レイヤは、出力パケットに対する同様のフィルタ516を保持し、当該レイヤ内のキュー選択器518は、当該フィルタ内のデータを使用して、各VMの出力トラフィックが入力トラフィックと同一のキューの対を使用するように構成する。いくつかの実施形態において、フィルタ516は、VM又はVNICの送信元MACアドレスを用いてVMを指定するが、他の実施形態において、VMのVNICが接続するソフトウェア転送要素のポートIDを用いてVMを指定する。いくつかの実施形態において、PNICは、
図4を参照して上述したように、キューを監視し且つ割込みを生成するための回路網を更に含む。
【0047】
VMは、いくつかの実施形態においてネットワーク仮想化レイヤ510を含むハイパーバイザ(不図示)上で実行する。
図5は、各VMが仮想NIC(VNIC)507を含むことを示している。
図5は、(1)VM毎に1つのネットワークスタック550、(2)ソフトウェア転送要素535、(3)統計データ収集エンジン540、(4)総計データ記憶装置545、並びに(5)動的負荷バランス調整器555を含むネットワーク仮想化レイヤ510を更に示す。各ネットワークスタックは、VNICエミュレータ527及びI/Oチェーン529を含む。各ネットワークスタックは、受信/送信スレッド531により管理される。
【0048】
各ネットワークスタックは、VNICエミュレータを介してVMに接続し、全てのVMの全てのネットワークスタックにより共有されるソフトウェア転送要素535に接続する。各ネットワークスタックは、スイッチのポート(不図示)を介してソフトウェア転送要素に接続する。いくつかの実施形態において、ソフトウェア転送要素は、VNIC毎に単一のポートを保持する。ソフトウェア転送要素535は、自身のポートのうちの1つにおいて受信するパケットを自身のポートのうちの別の1つのポート又は別のホスト上で実行する別のソフトウェア転送要素のポートのうちの1つに転送するパケット処理動作を実行する。例えばいくつかの実施形態において、ソフトウェア転送要素は、パケット内のデータ(例えば、パケットヘッダ内のデータ)を使用してパケットとフローベースの規則とをマッチングしようとし、マッチングする規則が見つかると、マッチングする規則により指定される動作を実行する。
【0049】
いくつかの実施形態において、異なるホスト装置(例えば、異なるコンピュータ)上で実行するソフトウェア転送要素は、同一の共有演算/ネットワーキングリソースを使用する異なるテナント、ユーザ、部門等の異なる論理ネットワークに対する異なる論理転送要素(LFE)を実現するように構成される。例えば2つのホスト装置上で実行する2つのソフトウェア転送要素は、L2スイッチの機能性を実行できる。これらのソフトウェアスイッチの各々は、各論理L2スイッチが1つのエンティティのVMを接続することにより、2つの異なる論理L2スイッチを部分的に実現できる。いくつかの実施形態において、ソフトウェア転送要素はL3ルーティングの機能性を提供し、他のホスト上で実行するソフトウェアL3ルータを用いて異なる論理ルータを実現するように構成可能である。
【0050】
仮想化の分野において、ソフトウェアスイッチがソフトウェア要素であるため、これらを仮想スイッチと呼ぶ場合がある。しかし、本明細書において、物理世界に結び付けられない論理構造体である論理転送要素と区別するために、ソフトウェア転送要素を物理転送要素(PFE)と呼ぶ。換言すると、ソフトウェア転送要素は物理世界において存在し且つ動作するが、論理転送要素はユーザに対して提示される転送要素の単なる論理表現であるため、ソフトウェア転送要素をPFEと呼ぶ。論理転送要素の例は、論理スイッチ、論理ルータ等の論理転送要素である。本明細書に参考として取り入れられる米国特許出願第14/070,360号において、PFE及びLFEの更なる例が提供される。
【0051】
ソフトウェア転送要素535は、出力パケットを送出し且つ入力パケットを受信するためにPNICに接続する。いくつかの実施形態において、ソフトウェア転送要素は、パケットを送受信するためにPNICに接続する際に介するポートを含むように定義される。上述のように、いくつかの実施形態において、キュー選択器518がソフトウェア転送要素535とPNICとの間に配置される。キュー選択器は、入力パケットを検索するための受信側キュー及び出力パケットを供給するための送信側キューを選択する。上述のように、キュー選択器は、フィルタ516内のデータを使用して、特定のVMの出力トラフィックを供給するための送信側キューを識別する。選択器は、VMのRXスレッドに対してキューを選択し且つそのパケットを検索するためにフィルタ内のデータを使用しない。いくつかの実施形態において、キュー選択器は、以下に更に説明するように、ネットワークスタックの受信/送信スレッド531の一部である。そのため、これらの実施形態の場合、キュー選択器518は、受信/送信スレッド531がいくつかの実施形態において実行するキュー選択動作の概念的表現である。
【0052】
VM内の各VNICは、それに関連付けられたVNICエミュレータ527を介するVMとネットワーク仮想化レイヤとの間のパケット交換を行う能力を有する。各VNICエミュレータは、VMとの間でデータを送受信するためにVM内のNICドライバと相互作用する。いくつかの実施形態において、VNICは、仮想NICエミュレータにより実現される物理NICのソフトウェア抽象化である。例えばいくつかの実施形態において、接続IDを要求し且つ取得するためのコードは、仮想NICエミュレータの構成要素内に常駐する。換言すると、いくつかの実施形態において、VNICの状態は、各VNICエミュレータにより実現され且つ保持される。VNIC等の仮想装置は、VMの一部であるように説明するのに便利であるが実際はエミュレータを使用する仮想化ソフトウェアにより実現されるソフトウェア抽象化である。しかし、各VMの状態は自身の仮想装置の状態を含み、これは下層の仮想化ソフトウェアにより制御され且つ保持される。
図5は各VMのVNIC毎に1つのVNICエミュレータを示すが、いくつかの実施形態において、各VNICエミュレータは2つ以上のVNIC及び/又は2つ以上のVMに対する状態を保持してもよい。
【0053】
各ネットワークスタック内のI/Oチェーンは、各パケットに対して一連のタスクを実行する一連のモジュールを含む。上述の本明細書に取り入れられる米国特許出願第14/070,360号において説明されるように、I/Oチェーンのモジュールの2つの例は、ARP及びDHCP同報メッセージを同報通信することなく解決するARP及びDHCPプロキシモジュールである。I/Oチェーン内のモジュールにより実行される処理の他の例は、ファイヤウォール及びトラフィックトンネリング動作を含む。I/Oチェーンの入力/出力は、ソフトウェア転送要素のポートのうちの1つに進む。
【0054】
いくつかの実施形態において、各ネットワークスタック550の受信/送信スレッド531は、ネットワークスタック内のモジュールを管理するカーネルレベルのスレッドである。これらのスレッドは、スタックのVMに関連付けられるPNICキュー517を更に管理する。詳細には、いくつかの実施形態において、各キューの受信側は、割込みを処理し且つキューの受信側からのパケットをポーリングするための専用RXカーネルスレッドを有する。また、各VMは、VMから送出されたパケットを処理するための専用TXカーネルスレッドを有する。いくつかの実施形態において、それらの実施形態で推奨されるキューの数はホストのマルチコアプロセッサのコアの数に等しいため、受信スレッド/送信スレッドの対の各々はホストのマルチコアプロセッサのコアのうちの1つにより実行される。
図5において、スタック及びそれに関連付けられるキューの受信動作及び送信動作を別個に管理するために別個の受信スレッド及び送信スレッドが使用されるが、他の実施形態において、1つのスレッドが上記のタスクの双方を実行するために使用されることが当業者には認識されるだろう。また、いくつかの実施形態において、RX/TXスレッドは、キュー、コア及び/又はVMに全く又は厳密に結び付けられなくてもよい。
【0055】
上述のように、ネットワーク仮想化レイヤは、統計データ収集エンジン540、統計データ記憶装置545及び動的負荷バランス調整器555を更に含む。統計データ収集エンジン540、負荷バランス調整器555及びRX/TXスレッド531は、いくつかの実施形態のキュー管理システムを部分的に形成する。統計データ収集エンジン540により収集される統計データは、プールにキューを割り当てるタイミング及びプールを調整するタイミングを判定するために必要な情報を負荷バランス調整器に提供する。
【0056】
異なる実施形態において、統計データ収集エンジンは異なるソースから統計データを取得する。例えばいくつかの実施形態において、当該エンジンは、CPUスケジューラ525(CPU使用量の場合)及びRX/TXスレッド(ネットワークトラフィックの場合)のいずれかから統計データをプルするか又はプッシュされた統計データを受信する。ネットワークトラフィックの場合、ネットワーク仮想化レイヤは、ネットワークスタックの各レイヤ(すなわち、RX/TXスレッドにより管理される各モジュール)を含む種々のソースから収集される統計データ(スループット、パケットレート、パケットドロップ等)を有する。
【0057】
いくつかの実施形態において、統計データ収集エンジンは、PNICのパケットレート、PNICのスループット、並びにRX/TXスレッド毎のCPU使用量であるネットワークの統計データを負荷バランス調整器のために収集する。いくつかの実施形態において、RX/TXスレッドが実際にPNICと通信し且つ正確な数値を有するスレッドであるため、CPUスケジューラ525はCPU使用量データを更新し、RX/TXスレッドはPNICのパケットレート及びスループットを更新する。いくつかの実施形態において、PNICドライバモジュールがキュー選択器の下位に存在する。当該PNICドライバは、PNICと通信し且つPNICの負荷の統計データを更新するモジュールである。また、いくつかの実施形態において、統計データ収集エンジンは、負荷バランス調整器のためにPNICの統計データを収集するのに加えて、VNICエミュレータにより収集されるVNICの統計データを更に収集する。
【0058】
VNICの統計データに依存することにより、負荷バランス調整器は、同一のキューを共有するVMに悪影響を及ぼし始める何らかの閾値をVNICのパケットレートが上回る場合、待ち時間の影響を受けやすいVMを専用キューに移動すると決定できる。更に一般的に、負荷バランス調整器555は収集された統計データを使用して、どのキューをどのVMに割り当てるか、プールにキューを動的に割り当てるタイミング及びプールを動的に調整するタイミングを判定する。
【0059】
いくつかの実施形態において、負荷バランス調整器は、負荷バランス調整処理を周期的(例えば、数秒毎、数ミリ秒毎、数マイクロ秒毎等)に実行する。この処理は、統計データ収集エンジンが保持する「負荷統計データ」記憶装置545から統計データをプルし、これらの統計データに基づいて、プールを割り当てる必要があるか、プールの割り当てを解除する必要があるか、VMをキューに割り当てる必要があるか、プールのサイズを変更する必要があるか及び/又はキューを優先的に使用する必要があるかを判定する。いくつかの実施形態において、負荷バランス調整器は、特定のキュー識別子と出力トラフィックの特定の送信元MACアドレス及び入力トラフィックの特定の宛先MACアドレスとを関連付けるようにPNIC及び仮想化レイヤのフィルタを構成することにより、VMをキューに割り当てる。PNICのMACフィルタを構成するために、負荷バランス調整器は、PNICドライバのAPIを使用してキュー毎にフィルタ及びハードウェア特徴をプログラムする。
【0060】
図5に示すように、負荷バランス調整器は、プール561、キューバランス再調整器559及びプールバランス再調整器557である3つのモジュールを有する。プールは、負荷バランス調整器が定義するPNICキューのソフトウェアの抽象的グループ化である。負荷バランス調整器は、異なる処理を適用して異なる「プール」内のキューを管理する。そのため、各プールを同一の「特徴」を有するキューのセットであると見ることができる。この場合、特徴はハードウェア特徴(RSS/LRO等)と同様である。そのような特徴の例は、VMの要件(短い待ち時間又は低い割込み率等)を含む。
【0061】
異なる処理を適用して異なるプール内のキューを管理することにより、負荷バランス調整器は、異なるプールに対して異なる方法でキューの割り当て及びプールのサイズ変更を最適化できる。プールバランス再調整器557は、プールのリソース割り当て基準に基づいて各プールのサイズを変更し、必要に応じて他のプールのキューを優先的に使用する。そのようなリソース割り当て基準の例は、プールのキューの最大数/最小数、プールのCPU総使用量、プールのネットワークトラフィック、プールのサービス品質(QoS)制約等を含む。キューバランス再調整器559は、プールのバランス再調整基準に基づいて、同一プール内のキューのバランスを再調整する。そのようなプールのバランス再調整基準の例は、可能な限り少ないキューにVMを集約すること(例えば、HLTプールの場合)、可能な限り多くのキューにVMを分散すること(例えば、LLRプールの場合)等である。いくつかの実施形態において、2つの異なるプールを管理する2つの異なる処理は、異なるリソース割り当て基準、異なる優先的使用基準、異なるバランス再調整基準等を指定する。
【0062】
III.VMの割り当ての調整及びプールの調整
図6は、いくつかの実施形態において負荷バランス調整器555が実行する全体的な処理600を概念的に示す。いくつかの実施形態における負荷バランス調整器555は、当該処理を周期的(例えば、数秒毎、数ミリ秒毎、数マイクロ秒毎等)に実行して、VMをキューに割り当て、各プール内のキューのバランスを再調整し、プールにわたる所望のバランスを保持する。
【0063】
いくつかの実施形態において、処理600は、タイマ(例えば、N秒タイマ)が満了した時に開始する。
図6に示すように、処理600は、最初に、デフォルトプール内のVMを検査して非デフォルトプールに移動する必要のあるVMを識別し且つ識別されたVMを非デフォルトプール内の適切な非デフォルトキューに移動するキュー割り当て処理を呼び出す(605)。いくつかの実施形態において、キュー割り当て処理では、VMによるデフォルトキューの使用量がデフォルトキューに対する閾値レベル又はVMによるデフォルトキューの使用量に対する閾値レベルを上回る場合にVMを非デフォルトキューに移動する(605)。605において、デフォルトプールに戻す必要のある非デフォルトキュー内のVMを更に識別し、識別されたVMをデフォルトプールに戻す。いくつかの実施形態において、キュー割り当て処理は、VMによる非デフォルトキューの使用量が非デフォルトキューに対する閾値レベル又はVMによる非デフォルトキューの使用量に対する閾値レベルを下回る場合にVMをデフォルトプールに戻す(605)。
図7を参照して、いくつかの実施形態のキュー割り当て処理を以下に更に説明する。
【0064】
605の後、処理600は、各プール内のキューのバランスを再調整するプール調整処理を呼び出す(610)。いくつかの実施形態において、このプール調整処理は、各プールを検査し、プールに対する1つ以上の最適化基準に基づいて、1つ以上のVMをプール内のキュー間で移動するか又はプール内の新しいキューに移動する必要があるかを判定する。いくつかの実施形態のプール調整処理は、異なるプールに対して異なる最適化基準を使用する。例えばいくつかの実施形態において、LLRプールに対する最適化基準は、LLRプールのキューにVMを分散するように処理を偏らせるが、HLTプールに対する最適化基準は、HLTプール内の少数のキューにVMを集約するように処理を偏らせる。これらの基準及び610における判定に基づいて、処理600において、VMをプール内のキュー間で又はプール内の新しいキューに再割り当てする(610)。いくつかの実施形態のプール調整処理を以下に更に説明する。
【0065】
次に615において、処理600は、プールにわたる所望のバランスを保持するプールバランス調整処理を呼び出す。いくつかの実施形態において、プールバランス調整処理は、種々のプールにわたりキューの使用量を検査する。この検査に基づいて、バランス調整処理は1つのプールに1つ以上のキューを割り当ててもよい。この検査に基づいて、バランス調整処理は別のプールの1つ以上のキューの割り当てを解除してもよい。この処理は、1回の呼び出しで2つ以上のプールに更なるキューを割り当ててもよく、あるいは2つ以上のプールにおいてキューの割り当てを解除してもよい。プールにわたるバランス再調整処理を以下に更に説明する。
【0066】
負荷バランス調整処理600は他の実施形態と異なることが当業者には認識されるだろう。例えばいくつかの実施形態において、処理600は、別個のバランス再調整動作615を有さず、動作605及び610の一部として当該動作を黙示的又は明示的に実行する。また、動作605、610及び615のうちの1つの一部として特定の副動作を上述及び後述するが、これらの副動作を上記の動作605、610又は615のうちの異なる動作において実行でき、あるいは、それ自体で異なる動作として又は異なる動作の副動作として実行できることが当業者には認識されるだろう。
【0068】
図7は、いくつかの実施形態において負荷バランス調整器555が周期的(例えば、数秒毎、数ミリ秒毎、数マイクロ秒毎等)に呼び出すキュー割り当て処理700を概念的に示す。いくつかの実施形態における負荷バランス調整器555は、当該処理を周期的に呼び出し、デフォルトキューを過剰に使用しているか又は非デフォルトキューを十分に使用していないVMを識別して移動する。
図7に示すように、処理700において、最初に、全てのVMによるデフォルトキュー及び非デフォルトキューの使用量に関する統計データを統計データ記憶装置545から収集する(705)。以下に更に説明するように、検索された統計データを使用して解析を実行する。
【0069】
次に、検索された統計データに基づいて、デフォルトキューに対する閾値使用量又はVMによるデフォルトキューの使用量に対する閾値使用量(例えば、異なるVMがデフォルトキューに対する異なる閾値使用量を有する場合)を現在上回っているデフォルトプール内のデフォルトキューを使用するVMを識別する(710)。上述のように、いくつかの実施形態は、VMの初期化時に各VMをデフォルトキューに割り当てるが、各VMによるデフォルトキューの使用量を監視し、VMによる使用量が閾値レベルを上回る場合にVMを非デフォルトキューに移動する。
【0070】
715において、710でVMが識別されたかを判定する。VMが識別されなかった場合、以下に更に説明する765へ進む。VMが識別された場合、720へ進み、710で識別されたVMのうちの1つを選択し、プールのキューに加わるための選択されたVMの要件を識別する。上述のように、本発明のいくつかの実施形態は、異なるVMのセットの1つ以上の異なる要件を満たすキューの1つ以上の非デフォルトプールを定義する。
【0071】
次に725において、選択されたVMの要件に対するプールが事前に定義されているかを判定する。例えば選択されたVMがLLR VMであると仮定すると、LLR VMをLLRプールのキューに割り当てるためのLLRプールが事前に定義されているかを判定する(725)。VMの要件に対するプールが事前に定義されていると判定される場合(725)、事前に定義された当該プール内のキューのうちの1つに選択されたVMを割り当てることができるかを判定する(730)。換言すると、730において、プールの既存のキューが720で選択されたVMが使用できる十分な容量を有するかを判定する。
【0072】
プール内のキューが十分な容量を有する場合、VMを当該キュー及び当該キューのプールに割り当て(735)、以下に説明する740へ進む。上述のように、いくつかの実施形態は、送信元MACアドレスを使用してVMの出力トラフィックと特定のキューとを結び付け且つ宛先MACアドレスを使用して入力トラフィックと特定のキューとを結び付けるフィルタリングを介して、VMとキューとを関連付ける。いくつかの実施形態は、VMとプールとの関連付けを明示的に指定するが、他の実施形態は、VMに関連付けられたキューとプールとの関連付けを介してVMとプールとの関連付けを黙示的に指定する。735でVMとプールとを関連付けることにより、負荷バランス調整器は、キューにおけるVMと当該キュー及び同一プール内の他のキューにおける他のVMとを共に管理するために共通の処理セットを適用できる。上述のように、いくつかの実施形態において、これらの処理セットは、他のキュープール内の他のVMを管理するために使用される処理セットと異なる。
【0073】
選択されたVMの要件(例えば、LLR要件)に対するプールが存在しないと判定される場合(725)、選択されたVMの要件に対するプールを指定し(例えば、LLRプールを指定し)(745)、750へ進む。VMの要件に対する事前に指定されたプールが選択されたVMに対する十分な容量を有するキューを有さないと判定される場合(730)も750へ進む。
【0074】
750において、現時点でVMに割り当てられていないPNICキューが存在するか(すなわち、未使用キュープール内にキューが存在するか)を判定する。そのようなキューが存在する場合、未使用キューのうちの1つを選択し(755)、それをプールに割り当て、選択されたVMを当該キュー及びプールに割り当て、以下に説明する740へ進む。そのようなキューが存在しない場合、未使用プールではない別のプールにより使用されるキューのうちの1つを優先的に使用する(760)。優先的使用は、最初に、優先的に使用されるキューを使用しているVMを優先的に使用されるキューを含むプール内の他のキューに再割り当てすることを含む。いくつかの実施形態において、VMの現在の非デフォルトプールの優先度が他の非デフォルトプールより低いため、別のプールのキューを優先的に使用できない場合がある。全てのVMが再割り当てされ且つキューがそのようなVMに対する全てのトラフィックの処理を終了すると、優先的に使用されるキューが選択されたVMの要件に対するプールに割り当てられる(760)。選択されたVMを当該キュー及びプールに更に割り当て(760)、740へ進む。
【0075】
740において、710で識別された全てのVMを処理したかを判定する。全てのVMを処理していない場合、720に戻り、識別された別のVMを選択する。全てのVMを処理した場合、710で識別された各VMをプール及びキューに割り当てた後、705で検索された統計データに基づいて、非デフォルトキューにおけるいずれかのVMをデフォルトプールに戻す必要があるかを判定する(765)。いくつかの実施形態において、VMによる非デフォルトキューの使用量が非デフォルトキューに対する閾値使用量又はVMによる非デフォルトキューの使用量に対する閾値使用量を下回る場合、VMをデフォルトキューに戻す。これらの実施形態のいくつかにおける処理は、VMによる使用量が十分に長い期間にわたり閾値使用量を下回る場合のみ、VMを移動する。765においてVMが識別される場合、識別されたVMをデフォルトプールのデフォルトキューに戻し、以前に割り当てられた非デフォルトキューのプールから当該VMを除去する。この再割り当て後、以前に割り当てられた非デフォルトキューを他のVMが使用しない場合、処理700において、更に非デフォルトキューを未使用キューのプールに再割り当てする(765)。この再割り当てされたキューがプールの最後のキューである場合、いくつかの実施形態の処理700において、プールが現時点でキューを全く含まないため、更にプールの割り当てを解除する。しかし、他の実施形態は、そのような状況でプールの割り当てを解除しない。765の後、処理は終了する。
【0076】
図8は、いくつかの実施形態において負荷バランス調整器555が周期的(例えば、数秒毎、数ミリ秒毎、数マイクロ秒毎)に呼び出すプール調整処理800を概念的に示す。いくつかの実施形態における負荷バランス調整器555は、当該処理を周期的に呼び出して、各プール内のキューのバランスを再調整する。いくつかの実施形態において、プール調整処理は、各プールを検査し、プールに対する1つ以上の最適化基準に基づいて、1つ以上のVMをプール内のキュー間で移動するか又はプール内の新しいキューに移動する必要があるかを判定する。いくつかの実施形態のプール調整処理は、異なるプールに対して異なる最適化基準を使用する。例えばいくつかの実施形態において、LLRプールに対する最適化基準は、LLRプールのキューにVMを分散するように処理を偏らせるが、HLTプールに対する最適化基準は、HLTプール内のキューにVMを集約するように処理を偏らせる。
【0077】
図8に示すように、処理800において、最初に、全てのVMによるデフォルトキュー及び非デフォルトキューの使用量に関する統計データを統計データ記憶装置545から収集する(805)。以下に更に説明するように、検索された統計データを使用して解析を実行する。805の後、処理800において、非デフォルトプールのうちの1つを選択して検査する(例えば、LLRプールを選択して検査する)(810)。次に815において、プール内のいずれかのキューが十分に使用されてないかを判定する。十分に使用されてないキューを見つけた場合、選択されたプール内の他のいずれかのキューが815で識別された十分に使用されてないキューを現在使用しているVMに対する容量を有するかを判定する(815)。そのような容量に余裕のあるキューが識別された場合、VMを十分に使用されてないキューから容量に余裕のあるキューに割り当てる(815)。また、移動後、他のVMが十分に使用されてないキューに割り当てられていない場合、選択されたプールから十分に使用されてないキューの割り当てを解除する(すなわち、十分に使用されてないキューを未使用プールに割り当てる)(815)。このように、後で別のプール又は同一プールに割り当てるために、十分に使用されてないキューを解放することができる。
【0078】
815の後、選択されたプール内の過剰に使用されているキューを識別する(820)。その後、選択されたプールが、識別された過剰に使用されているキューに現在割り当てられているVMのうちの1つ以上のトラフィックを処理するための容量に余裕のあるキューを有するかを判定する(825)。容量に余裕のある1つ以上のキューが識別される場合(825)、識別された過剰に使用されているキューに現在割り当てられているVMのうちの1つ以上を容量に余裕のある1つ以上のキューに割り当て(830)、以下に説明する835へ進む。
【0079】
それに対して、選択されたプールが、過剰に使用されているキューを現在通過しているトラフィックの一部を処理するための容量に余裕のあるキューを有さないと判定される場合(825)、未使用キューが存在するか(例えば、未使用プールがキューを有するか)を判定する(840)。未使用キューが存在する場合、未使用キューのうちの1つ以上を選択されたプール(すなわち、810で選択されたプール)に割り当てる(845)。845において、識別された過剰に使用されているキューに現在割り当てられているVMのうちの1つ以上を新たに割り当てられたキューに更に割り当て、以下に説明する835へ進む。
【0080】
未使用キューが存在しないと判定される場合(840)、別のプールのキューを優先的に使用できるかを判定する(850)。いくつかの実施形態において、全てのプールが他のプールのキューを優先的に使用できるわけではなく、いくつかのプール(例えば、LLRプール)のみが他のプール(例えば、HLTプール)のキューを優先的に使用できる。また、いくつかの実施形態において、いくつかのプールは、特定の状況において(例えば、他のプール自体が著しい過負荷状態になっていない場合)のみ、他のプールのキューを優先的に使用できる。
【0081】
別のプールのキューを優先的に使用できないと判定される場合(850)、835へ進む。それに対して、別のプールのキューを優先的に使用できると判定される場合(850)、優先的に使用されるキューを現在使用している全てのVMを優先的に使用されるキューと同一プール内の新しいキューに割り当てる(855)。全てのVMを再割り当てした後、選択されたプール(すなわち、810で選択されたプール)に優先的に使用されるキューを割り当て(855)、識別された過剰に使用されているキューに現在割り当てられているVMのうちの1つ以上を新たに割り当てられたキューに割り当て、835へ進む。
【0082】
835において、検査する必要のある非デフォルトプールの全てを検査したかを判定する。そのような非デフォルトプールの全てを検査したと判定される場合、処理は終了する。そのような非デフォルトプールの全てを検査したと判定されない場合、810に戻り、別の非デフォルトプールを選択する。異なるプールに対してキューが十分に使用されていない及び過剰に使用されていることを評価するために、異なる基準が使用される。例えばLLRプールの場合、過剰な使用の閾値は50%の負荷であってもよく、使用が十分ではない場合の閾値は5%であってもよいが、HLTプールの場合、過剰な使用の閾値は90%であってもよく、使用が十分ではない場合の閾値は75%であってもよい。
【0083】
また、上述のように、いくつかの実施形態は、プールのキューの最大数/最小数、プールのCPU総使用量、プールのネットワークトラフィック、プールのサービス品質(QoS)制約等の異なるプールリソース割り当て基準に基づいて、異なるプールのサイズを変更する。同様に、いくつかの実施形態は、可能な限り少ないキューにVMを集約すること(例えば、HLTプールの場合)、可能な限り多くのキューにVMを分散すること(例えば、LLRプールの場合)等の異なるバランス再調整基準に基づいて、異なるプール内のキューのバランスを再調整する。
【0084】
いくつかの実施形態では、
図8の処理800において、VMを同一プール内の他のキューに再割り当てすることにより十分に使用されてないキューの割り当てを解除できるようにするために、十分に使用されてないキューを検査する。十分に使用されてないキューの検査に加えて又はその代わりに、いくつかの実施形態の負荷バランス調整器は、非デフォルトキューに割り当てられる各VMを検査し、VMによる非デフォルトキューの使用量が閾値レベルを下回るかを判定する。
図9は、VMによるキューの使用量を評価するためにいくつかの実施形態の負荷バランス調整器により実行される処理900を示す。
【0085】
図9に示すように、処理900は、非デフォルトキューのVMを選択する(905)ことから開始する。次に910において、そのVMがキューを十分に使用していないかを判定する。例えばいくつかの実施形態において、キューを介するトラフィックの1%のみがVMによるものである場合、VMはキューを十分に使用していないと考えられる。
【0086】
VMがキューを十分に使用していると判定される場合(910)、処理は終了する。VMがキューを十分に使用していないと判定される場合、VMの現在のキューと同一プール内の別のキューが選択されたVMに対する容量を有するかを判定する(915)。別のキューがそのような容量を有さないと判定される場合、処理は終了する。別のキューがそのような容量を有すると判定される場合、VMの現在のキューと同一プール内の新しいキューにVMを割り当てる(920)。その後、VMの以前のキューに他のVMが割り当てられていない場合、VMの以前のキューの割り当てを解除する(925)。
【0087】
図10は、第1のキューが十分に使用されていない、又は、VMによる第1のキューが十分に使用されていないため、VMを第1のキューから第2のキューに再割り当てする例を示す。詳細には、
図10は、最初に2つのキュー1025及び1030に割り当てられる2つのVM1015及び1020のネットワークスタック1005及び1010を示す。これらの2つのVMは、VMの初期化時にこれらの2つのキューに割り当てられる。
【0088】
その後、負荷バランス調整器555は、種々のVMによる種々のキューの使用量に関する統計データを検索する。これらの統計データに基づいて、負荷バランス調整器は、VM1020が使用するキュー1030の容量が1%未満であることを検出する。当該VMがキューを十分に使用していないため、負荷バランス調整器は、VM1020及びそのネットワークスタック1010をキュー1030からキュー1025に再割り当てするフィルタをネットワーク仮想化レイヤ及びPNIC内に定義する。他のVMがキュー1030を使用していない場合、負荷バランス調整器は更に、キュー1030を未使用キュープールに再割り当てする。いくつかの実施形態において、負荷バランス調整器は、VM1020をキュー1025に再割り当てする(且つキュー1030を同時に使用している他のVMを再割り当てする)ことによりキュー1030をVMのトラフィックから解放して未使用プールに再割り当てできるようになると判定される場合のみ、VM1020をキュー1025に再割り当てする。しかし、他の実施形態において、負荷バランス調整器は、VMによるキューの使用量のみに基づいて再割り当てを決定する。
【0089】
図11は、第1のキューの過剰な使用のため、VMを第1のキューから第2のキューに再割り当てする例を示す。詳細には、
図11は、VM1015及び1020の双方がキュー1025に割り当てられた後の、同一の2つのVM1015及び1020の同一の2つのネットワークスタック1005及び1010を示す。ある時点で、負荷バランス調整器555は、種々のVMによる種々のキューの使用量に関する統計データを検索する。これらの統計データに基づいて、負荷バランス調整器は、キュー1025が容量の90%を使用してトラフィックを処理していることを検出する。当該キューが過剰に使用されているため、負荷バランス調整器は、VM1020及びそのネットワークスタック1010をキュー1025からキュー1030に再割り当てするフィルタをネットワーク仮想化レイヤ及びPNIC内に定義する。
【0090】
上述のように、いくつかの実施形態における負荷バランス調整器は、プールにわたる所望のバランスを保持するプールバランス調整処理である。いくつかの実施形態において、プールバランス調整処理は、種々のプールにわたりキューの使用量を検査する。この検査に基づいて、バランス調整処理は1つのプールに1つ以上のキューを割り当ててもよい。この検査に基づいて、バランス調整処理は別のプールの1つ以上のキューの割り当てを解除してもよい。この処理は、1回の呼び出しで2つ以上のプールに更なるキューを割り当ててもよく、あるいは2つ以上のプールにおいてキューの割り当てを解除してもよい。
【0091】
図12は、プールにわたるプールバランス調整の例を示す。詳細には、
図12は、優先度の低いプール1215から優先度の高いプール1220へのキューの追加を2つの段階1205及び1210で示す。第1の段階において、負荷バランス調整器555は、統計データ記憶装置545から統計データを検索する。検索された統計データに基づいて、負荷バランス調整器は、優先度の高いプール1220のキューを介する負荷(LH)が優先度の低いプール1215のキューを介する負荷(LL)の特定の割合(例えば、75%)を上回ると判定する。
【0092】
いくつかの実施形態では、優先度の高いキューを介する負荷は優先度の低いキューを介する負荷より大幅に小さいことが望ましいため、負荷バランス調整器は、優先度の低いプールのキュー1250が当該プールから除去されて優先度の高いプールに追加されるようにフィルタを設定する。キュー1250が優先度の高いプールに切り替えられる前に、優先度の低いプールにおいてキュー1250を使用していたVMが当該プール内の異なるキューに割り当てられる必要がある。
図12は、キュー1250を優先度の高いプールに追加した後、優先度の高いキューを介する負荷(LH)が優先度の低いキューを介する負荷(LL)の指定された割合を下回ることを示す。
【0093】
IV.非VMアドレス指定可能なノード及び他のフィルタリング
ホスト装置上で実行する1つ以上のVMとの間のデータトラフィックに対して、キューのプールを動的に定義し、各プールを一意に管理し、プール内のキューを動的に変更し且つVMのトラフィックを新しいキューに動的に再割り当てする複数の実施形態を上述した。これらの実施形態の多くは、ホスト装置により受信又は送信されるパケットの宛先又は送信元MACアドレスを使用して、VMのデータトラフィックパケットを異なるプール及びプール内の異なるキューに割り当てる。
【0094】
しかし、全ての実施形態がMACアドレスを使用してデータトラフィックをプール及びプール内のキューに割り当てるわけではない。また、いくつかの実施形態のキュー管理方法及び装置は、VMのデータトラフィック以外のデータトラフィックに対して使用される。詳細には、VMのデータトラフィックに加えて又はVMのデータトラフィックの代わりに、いくつかの実施形態は、プールを動的に定義し、各プールを一意に管理し、プール内のキューを動的に変更し、ホスト上で実行する非VMアドレス指定可能なノード(例えば、送信元エンドノード又は宛先エンドノード)との間のデータトラフィックを動的に再割り当てする。いくつかの実施形態の方法及び装置は、これらの動作を実行してキューを介する異なる種類のデータトラフィックのルーティングを区別するために使用される。
【0095】
複数のそのような実施形態を以下に更に説明する。詳細には、第A項において、MACアドレスフィルタリングを使用して非VMトラフィックデータを異なるプールの異なるキューにルーティングする複数の実施形態を説明する。次に第B項において、5タプルIPフィルタリングを使用して異なる種類のデータトラフィックを異なるプールの異なるキューにルーティングする複数の実施形態を説明する。
【0096】
A.非VMトラフィックに対するMACフィルタリング
いくつかの実施形態は、MACアドレスフィルタリングを使用して、ホスト装置上で実行する非VMデータアドレス指定可能なノードのデータトラフィックを異なるキュープール及びプール内の異なるキューにルーティングする。例えばいくつかの実施形態の方法は、ホスト装置の物理NICを介して、非VMアドレス指定可能なノード(例えば、データのエンドノード)のセットに対するデータトラフィックを監視する。方法は、この監視に基づいて少なくとも非VMアドレス指定可能なノードのセットに対するプールを指定し、プールにキューのセットを割り当てる。その後、方法は、宛先又は送信元MACフィルタリングを使用して、ホスト装置により受信又は送信される非VMアドレス指定可能なノードのセットに対するデータトラフィックを割り当て済みのキューのセットに向ける。
【0097】
その代わりに又はそれに加えて、方法は、監視に基づいて非VMアドレス指定可能なノードのセットに対するプールに割り当てられたキューのセットを変更できる。そのような変更の例は、プールのキューのうちの1つ以上が過剰に使用されるか又は十分に使用されない場合にプールにキューを追加するか又はプールからキューを除去することを含む。いくつかの実施形態において、方法は、例えば上述の優先的使用方法のうちの1つを使用して、別のプールのキューを優先的に使用することによりプールにキューを追加する。
【0098】
また、上述の動作の代わりに又はそれに加えて、方法は、監視に基づいて非VMアドレス指定可能なノード(例えば、データのエンドノード)に対するデータトラフィックをプール内の第1のキューからプール内の第2のキューに再割り当てできる。例えばいくつかの実施形態の方法は、監視に基づいて第1のキューを介する非VMアドレス指定可能なノードに対するトラフィックが最小閾値トラフィック量を下回る(例えば、ある期間の間)ことを検出する。この使用が十分ではないのため、方法は当該トラフィックを第2のキューに切り替える。この切り替えを行う前に、いくつかの実施形態の方法は、第2のキューを介するトラフィックが最大閾値トラフィック量を上回らないことを判定する。
【0099】
いくつかの実施形態の方法は、監視に基づいて第1のキューを介するトラフィックが最大閾値トラフィック量を上回る(例えば、ある期間の間)ことを検出する。この過剰な使用のため、方法は、非VMアドレス指定可能なノード(例えば、データのエンドノード)に対するトラフィックを第1のキューから第2のキューに切り替える。この場合も、この切り替えを行う前に、いくつかの実施形態の方法は、第2のキューを介するトラフィックが最大閾値トラフィック量を上回らないことを判定する。
【0100】
図13は、MACアドレスフィルタリングを使用して、ホスト装置上で実行するVM及び非VMデータアドレス指定可能なノードのデータトラフィックを異なるキュープール及びプール内の異なるキューにルーティングするいくつかの実施形態のキュー管理システム1300を示す。本システムは
図5のシステム500と同様であるが、システム500はVMエンドノードとの間のトラフィックのみを管理するのに対して、システム1300はVMとの間のトラフィック、並びにiSCSI(内部小型コンピュータシステムインタフェース)マウンタ1305、NFS(ネットワークファイル記憶装置)マウンタ1307及びVMマイグレータ1309等の非VMアドレス指定可能なノードとの間のトラフィックを管理する点が異なる。システム1300は、優先度の高いプールが特定の種類のアドレス指定可能なノードに対して確保される優先度の異なるプールにキューを分割する。また、システム1300は、各プール内のキューを動的に調整し(すなわち、プールのサイズを動的に調整し)、1つ以上の最適化基準(例えば、キューが十分に使用されていない又は過剰に使用されている場合に関する基準)に基づいてアドレス指定可能なノードをプール内の新しいキューに動的に再割り当てする。
【0101】
図13は、(1)ホスト(不図示)上で実行する複数のVM505、(2)2つのマウント済記憶ボリューム1320及び1325、(3)VMマイグレーションデータ1330、(4)VM及び非VMノードにより共有されるホストの物理NIC515、並びに(5)共有PNICを介するVMとの間のトラフィックを助長する仮想化レイヤ1310を示す。更に示すように、仮想化レイヤは、iSCSIマウンタ1305、NFSマウンタ1307及びVMマイグレータ1309等の非VM複数のアドレス指定可能なノードを含む。当該レイヤは、VM又は非VMアドレス指定可能なノードの各々に対するネットワークスタック1311、1313、1315、1317又は1319を更に含む。仮想化レイヤは、ソフトウェア転送要素535(例えば、ソフトウェアスイッチ)、キュー選択器518、動的負荷バランス調整器555、統計データ収集エンジン540及び統計データ記憶装置545を更に含む。
【0102】
いくつかの実施形態において、
図13のPNIC515は、上述した
図5のPNIC515と同一である。上述のように、PNICは、有線又は無線リンクから入力パケットを受信する受信側(RX)処理エンジン511を有する。RX処理エンジンは、宛先MACに基づいて(VM又は非VM)各アドレス指定可能なノードの入力トラフィックと1つのキューの対とを関連付けるように構成されるMACフィルタ514を有する。仮想化レイヤは、出力パケットに対する同様のフィルタ516を保持し、当該レイヤ内のキュー選択器518は、当該フィルタ内のデータを使用して、各アドレス指定可能なノードの出力トラフィックが入力トラフィックと同一のキューの対を使用するように構成する。いくつかの実施形態において、フィルタ516は、VM又はVNICの送信元MACアドレスを用いてアドレス指定可能なノードを指定するが、他の実施形態において、VMのVNICが接続するソフトウェア転送要素のポートIDを用いてVMを指定する。
図13のPNIC515が
図5のPNIC515と同一であるため、不必要な詳細により
図13の説明を不明瞭にしないために、これを更に説明しない。
【0103】
VM及び非VMアドレス指定可能なノードは、いくつかの実施形態において仮想化レイヤ1310を含むハイパーバイザ(不図示)上で実行する。VM及び非VMアドレス指定可能なノードは、ネットワークを介して送信されるパケットに対する送信元エンドノード及び宛先エンドノードである場合がある。上述のように、これらのノードは、VM505、ボリュームマウンタ1305及び1307、並びにVMマイグレータ1309を含む。iSCSIマウンタ1305は、ホスト上の記憶ボリューム1320をマウントする。この記憶ボリューム1320は、iSCSIプロトコルを介してアクセス可能な外部記憶装置(すなわち、記憶サーバ等のホストの外部の記憶装置)の一部又は全てである。同様に、NFSマウンタ1307は、ホスト上の記憶ボリューム1325をマウントする。この記憶ボリューム1325は、NFSプロトコルを介してアクセス可能な外部記憶装置(例えば、記憶サーバ)の一部又は全てである。その場合、マウント済ボリュームは、外部記憶装置がホスト上に常駐するかのようにホスト又は他の装置上で実行するモジュール(例えばVM)によりアクセス可能である。VMマイグレータ1309は、1つのホストから別のホストへのVMのライブマイグレーションを助長するために、ホスト上で実行する各VMに関するデータを収集する。そのようなVMマイグレータの1つの例は、VMware IncのESXハイパーバイザにおいて使用されるvMotionモジュールである。
【0104】
各アドレス指定可能なノードは、ネットワークスタック及び転送要素のポート(不図示)を介してソフトウェア転送要素535に接続する。いくつかの実施形態において、各VMのネットワークスタックは、
図5を参照して上述したように、VNICエミュレータ527及びI/Oチェーン529を含み、受信/送信スレッド531により管理される。いくつかの実施形態において、非VM各アドレス指定可能なノードのネットワークスタックは、ハイパーバイザカーネルネットワークインタフェース及び受信/送信スレッドを含む。いくつかの実施形態において、非VM各アドレス指定可能なノードのハイパーバイザカーネルネットワークインタフェース(例えば、VMware Incのvmknic)は、非VMアドレス指定可能なノードとの間で送受信されるTCP/IPパケットを処理するためのTCP/IPスタックを含む。例えばいくつかの実施形態において、非VM各アドレス指定可能なノードのネットワークは、(1)対応するマウント済ボリューム1320/1325又はマイグレーションデータ記憶装置1330から送出するパケットにTCP/IPパケットヘッダを付与し、(2)対応するマウント済ボリューム又はマイグレーションデータ記憶装置に格納するために、受信するパケットからTCP/IPパケットヘッダを除去する。
【0105】
いくつかの実施形態において、非VMアドレス指定可能なノード(例えば、VMマイグレータ1309)のハイパーバイザカーネルネットワークインタフェースは、TCP/IPスタックを含まず、RDMA(リモート直接メモリアクセス)パケット処理モジュール等の他のパケット処理モジュールを含む。また、いくつかの実施形態において、非VMアドレス指定可能なノードのネットワークスタックは、対応するボリューム又はデータ記憶装置との間で送受信されるパケットに対して他の変換動作を実行するための他のI/Oチェーンモジュールを含む。
図5の受信/送信スレッド531と同様に、非VM各アドレス指定可能なノードのネットワークスタックの受信/送信スレッドは、ネットワークスタック内のモジュールを管理し、スタックの非VMアドレス指定可能なノードと関連付けられるPNICキュー517と対話し、スタックのモジュールの動作に関する統計データを収集する。
【0106】
上述のように、仮想化レイヤは、統計データ収集エンジン540、統計データ記憶装置545及び動的負荷バランス調整器555を更に含む。統計データ収集エンジン540、負荷バランス調整器555及びRX/TXスレッド(不図示)は、いくつかの実施形態のキュー管理システムを部分的に形成する。統計データ収集エンジン540により収集される統計データは、プールにキューを割り当てるタイミング及びプールを調整するタイミングを判定するために必要な情報を負荷バランス調整器に提供する。
【0107】
異なる実施形態において、統計データ収集エンジンは異なるソースから統計データを取得する。例えばいくつかの実施形態において、当該エンジンは、CPUスケジューラ525(CPU使用量の場合)及びRX/TXスレッド(ネットワークトラフィックの場合)のいずれかから統計データをプルするか又はプッシュされた統計データを受信する。ネットワークトラフィックの場合、仮想化レイヤは、ネットワークスタックの各レイヤ(すなわち、RX/TXスレッドにより管理される各モジュール)を含む種々のソースから収集される統計データ(スループット、パケットレート、パケットドロップ等)を有する。
【0108】
いくつかの実施形態において、統計データ収集エンジンは、PNICのパケットレート、PNICのスループット、並びにRX/TXスレッド毎のCPU使用量であるネットワークの統計データを負荷バランス調整器のために収集する。いくつかの実施形態において、RX/TXスレッドが実際にPNICと通信し且つ正確な数値を有するスレッドであるため、CPUスケジューラはCPU使用量データを更新し、RX/TXスレッドはPNICのパケットレート及びスループットを更新する。いくつかの実施形態において、PNICドライバモジュールがキュー選択器の下位に存在する。当該PNICドライバは、PNICと通信し且つPNICの負荷の統計データを更新するモジュールである。また、いくつかの実施形態において、統計データ収集エンジンは、負荷バランス調整器のためにPNICの統計データを収集するのに加えて、VNICの統計データ又は非VMアドレス指定可能なノードにより収集される統計データを更に収集する。
【0109】
収集された統計データに依存することにより、負荷バランス調整器は、パケットレートが何らかの閾値を上回る場合又は同一のキューを共有する1つ以上の他のノードのスループットにより悪影響を受けている場合、待ち時間の影響を受けやすい(VM又は非VM)アドレス指定可能なノードを専用キュー又は優先度の高いプールに移動すると決定できる。更に一般的に、負荷バランス調整器555は収集された統計データを使用して、どのキューをどのアドレス指定可能なノードに割り当てるか、プールにキューを動的に割り当てるタイミング及びプールを動的に調整するタイミングを判定する。
【0110】
いくつかの実施形態において、負荷バランス調整器は、負荷バランス調整処理を周期的(例えば、数秒毎、数ミリ秒毎、数マイクロ秒毎等)に実行する。この処理は、統計データ収集エンジンが保持する「負荷統計データ」記憶装置545から統計データをプルし、これらの統計データに基づいて、アドレス指定可能なノードをキューに割り当てる必要があるか、プールのサイズを変更する必要があるか及び/又はキューを優先的に使用する必要があるかを判定する。負荷バランス調整器は、特定のキュー識別子と出力トラフィックの特定の送信元MACアドレス及び入力トラフィックの特定の宛先MACアドレスとを関連付けるようにPNIC及び仮想化レイヤのフィルタを構成することにより、ノードをキューに割り当てる。PNICのMACフィルタを構成するために、負荷バランス調整器は、PNICドライバのAPIを使用してキュー毎にフィルタ及びハードウェア特徴をプログラムする。
【0111】
図13に示すように、負荷バランス調整器は、プール561、キューバランス再調整器559及びプールバランス再調整器557である3つのモジュールを有する。プールは、負荷バランス調整器が定義するPNICキューのソフトウェアの抽象的グループ化である。負荷バランス調整器は、異なる処理を適用して異なる「プール」内のキューを管理する。そのため、各プールを同一の「特徴」を有するキューのセットであると見ることができる。この場合、特徴はハードウェア特徴(RSS/LRO等)と同様である。そのような特徴の例は、VMの要件(短い待ち時間又は低い割込み率等)を含む。
【0112】
異なる処理を適用して異なるプール内のキューを管理することにより、負荷バランス調整器は、異なるプールに対して異なる方法でキューの割り当て及びプールのサイズ変更を最適化できる。プールバランス再調整器557は、プールのリソース割り当て基準に基づいて各プールのサイズを変更し、必要に応じて他のプールのキューを優先的に使用する。そのようなリソース割り当て基準の例は、プールのキューの最大数/最小数、プールのCPU総使用量、プールのネットワークトラフィック、プールのサービス品質(QoS)制約等を含む。キューバランス再調整器559は、プールのバランス再調整基準に基づいて、同一プール内のキューのバランスを再調整する。そのようなプールのバランス再調整基準の例は、可能な限り少ないキューにアドレス指定可能なノードを集約すること(例えば、HLTプールの場合)、可能な限り多くのキューにアドレス指定可能なノードを分散すること(例えば、LLRプールの場合)等である。いくつかの実施形態において、負荷バランス調整器555は、上記の
図6〜
図9を参照して上述した処理と同様の処理を使用することにより、PNICキューを管理してVM及び非VMアドレス指定可能なノードを処理する。これらの実施形態のいくつかにおいて、これらの処理は、VMのトラフィックに加えて非VMアドレス指定可能なノードとの間のトラフィック(例えば、マウンタ1305及び1307、並びにマイグレータ1309との間のトラフィック)を監視し且つ管理するように変更される。
【0113】
B.異なる種類のパケットを区別するための別のフィルタリング
MACアドレスフィルタリングの代わりに、いくつかの実施形態は、例えば異なる種類のパケットのセットに対して異なるプールを定義し、各プールを異なる方法で管理し、プール内のキューを動的に変更し且つ異なる種類のデータトラフィックを動的に再割り当てするために、他のフィルタリング技術を使用して異なる種類のパケットを異なる方法で処理する。例えば非MACパケット識別子に基づいて、いくつかの実施形態の方法は、ホスト装置のNICを介する第1の種類のデータトラフィックを識別し且つ監視する。方法は、監視に基づいて第1の種類のデータトラフィックに対するプールを指定し、キューのセットをプールに割り当てる。その後、方法は、非MACアドレスフィルタリングを使用して、第1の種類のデータトラフィックを割り当てられたキューのセットに向ける。
【0114】
その代わりに又はそれに加えて、方法は、監視に基づいて非MACパケット識別子を介して識別される第1の種類のデータトラフィックに対するプールに割り当てられたキューのセットを変更できる。そのような変更の例は、プールのキューのうちの1つ以上が過剰に使用されるか又は十分に使用されない場合にプールにキューを追加するか又はプールからキューを除去することを含む。いくつかの実施形態において、方法は、例えば上述の優先的使用方法のうちの1つを使用して、別のプールのキューを優先的に使用することによりプールにキューを追加する。
【0115】
また、上述の動作の代わりに又はそれに加えて、方法は、監視に基づいて第1の種類のデータトラフィックをプール内の第1のキューからプール内の第2のキューに再割り当てできる。例えばいくつかの実施形態の方法は、監視に基づいて第1のキューを介する第1の種類のデータトラフィックが最小閾値トラフィック量を下回る(例えば、ある期間の間)ことを検出する。この使用が十分ではないため、方法は当該トラフィックを第2のキューに切り替える。この切り替えを行う前に、いくつかの実施形態の方法は、第2のキューを介するトラフィックが最大閾値トラフィック量を上回らないことを判定する。
【0116】
あるいは、いくつかの実施形態の方法は、監視に基づいて第1のキューを介する第1の種類のデータトラフィックが最大閾値トラフィック量を上回る(例えば、ある期間の間)ことを検出してもよい。この過剰な使用のため、方法は、第1の種類のデータトラフィックを第1のキューから第2のキューに切り替える。この場合も、この切り替えを行う前に、いくつかの実施形態の方法は、第2のキューを介するトラフィックが最大閾値トラフィック量を上回らないことを判定する。
【0117】
異なる実施形態は、異なる非MACフィルタリングを使用する。いくつかの実施形態は、パケットヘッダのデータを使用して、パケットのペイロードを複数の種類のうちの1つであると分類する。例えばいくつかの実施形態は、L3及びL4パケットヘッダ内の5タプルIPデータを使用して、パケットのペイロードを分類する。5タプルデータは、送信元ポート識別子、宛先ポート識別子、送信元IPアドレス、宛先IPアドレス及びプロトコルを含む。これらの5つの識別子を使用して、いくつかの実施形態のフィルタは、IPパケットがVOIPパケット、ビデオパケット、音声パケット、FTPパケット、HTTPパケット、HTTPSパケット、リモートデスクトップパケット(PCoIP、VNC、RDP)、管理パケット(認証、サーバの健康状態の監視、時刻同期)、電子メールパケット(POP3、SMTP)等の任意の数の異なる種類であると指定する。これらのプロトコルの全てが異なるトラフィックパターンを有するため、いくつかの実施形態は、それらのうちの1つ以上を異なるキュープールに分離し、異なる最適化基準を使用してデータトラフィックを各プール内のキューに割り当てる。
【0118】
以下に提供するリストは、プロトコル−src_ip−dst_ip−src_port−dest_portの表記を使用することにより、ウェブトラフィック、VoIP、ビデオストリーミング、リモートデスクトップ、管理、電子メールを区別するために5タプルを使用できる方法を示す。この場合、*はワイルドカード検索を表す。当該リストにおいて、VMはサーバからのサービス/データ/サービスを要求するクライアントであると仮定する。
・ウェブ(Web):TCP−*−*−*−80/443(HTTPの場合は80であり、HTTPSの場合は443である)
・VoIP(スカイプ):TCP/UDP−*−*−23399−*又はTCP/UDP−*−*−*−23399(入力及び出力トラフィック)
・ビデオストリーミング(MMS):TCP/UDP−*−*−*−1755
・リモートデスクトップ(PCoIP):TCP/UDP−*−*−*−4172
・認証(ケルベロス):TCP/UDP−*−*−*−88
・電子メール(POP3):TCP−*−*−*−110
【0119】
図14及び
図15は、いくつかの実施形態が5タプルフィルタを使用して、ビデオの提示中に仮想マシンにより送信又は受信されるVOIPパケット及びビデオパケットを区別することを示す例を示す。
図14は、VM1405により送信されているVOIPパケット及びビデオパケットを区別するために5タプルが使用される例を示す。本例において、動的負荷バランス調整器555は、VOIPパケットをVM1405から優先度の高いキュープール1420にルーティングするようにキュー選択器518内の1つの5タプルフィルタセット1410を設定し、ビデオパケットを当該VMから優先度の低いキュープール1425にルーティングするように別の5タプルフィルタセットを設定する。
【0120】
図15は、VM1405により受信されているVOIPパケット及びビデオパケットを区別するために5タプルが使用される例を示す。本例において、動的負荷バランス調整器555は、入力VOIPパケット(VM1405に対する)を優先度の高いキュープール1420にルーティングするようにPNIC515のRX処理エンジン511内の1つの5タプルフィルタセット1510を設定し、入力ビデオパケット(VM1405に対する)を優先度の低いキュープール1425にルーティングするように別の5タプルフィルタセットを設定する。
【0121】
負荷バランス調整器555は、キューをプールにグループ化するために5タプルフィルタを設定し、異なる基準に基づいてそれらを管理する。詳細には、統計データ記憶装置545内の収集された統計データに依存することにより、負荷バランス調整器555は、どのアドレス指定可能なノードをどのキューに割り当てるか、プールにキューを動的に割り当てるタイミング、プールからキューを動的に除去するタイミング、並びにアドレス指定可能なノードを新しいキューに動的に再割り当てするタイミングを判定できる。
【0122】
いくつかの実施形態において、負荷バランス調整器は、負荷バランス調整処理を周期的(例えば、数秒毎、数ミリ秒毎、数マイクロ秒毎等)に実行する。この処理は、統計データ収集エンジンが保持する「負荷統計データ」記憶装置545から統計データをプルし、これらの統計データに基づいて、アドレス指定可能なノードをキューに割り当てる必要があるか、プールのサイズを変更する必要があるか及び/又はキューを優先的に使用する必要があるかを判定する。負荷バランス調整器は、特定のキュー識別子と特定の5タプルフィルタとを関連付けるようにPNIC及び仮想化レイヤの5タプルフィルタを構成することにより、ノードをキューに割り当てる。PNICのフィルタを構成するために、負荷バランス調整器は、PNICドライバのAPIを使用してキュー毎にフィルタ及びハードウェア特徴をプログラムする。
【0123】
図5及び
図13を参照して上述したように、いくつかの実施形態において、
図14及び
図15の仮想化レイヤ内の負荷バランス調整器555は、3つのモジュール(不図示)を有する。これらの3つのモジュールは、(1)プール、それらに関連付けられたキューの識別子及び各キューに関連付けられたアドレス指定可能なノードを格納する記憶装置、(2)キューバランス再調整器、並びに(3)プールバランス再調整器である。
【0124】
図14及び
図15の負荷バランス調整器555は、異なる処理を適用して異なる「プール」内のキューを管理する。そのため、各プールを同一の「特徴」を有するキューのセットであると見ることができる。異なる処理を適用して異なるプール内のキューを管理することにより、負荷バランス調整器は、異なるプールに対して異なる方法でキューの割り当て及びプールのサイズ変更を最適化できる。プールバランス再調整器は、プールのリソース割り当て基準に基づいて各プールのサイズを変更し、必要に応じて他のプールのキューを優先的に使用する。そのようなリソース割り当て基準の例(例えば、プールのキューの最大数/最小数、プールのCPU総使用量、プールのネットワークトラフィック、プールのサービス品質(QoS)制約等)は上述した。
【0125】
キューバランス再調整器は、可能な限り少ないキューにアドレス指定可能なノードを集約すること(例えば、HLTプールの場合)、可能な限り多くのキューにアドレス指定可能なノードを分散すること(例えば、LLRプールの場合)等であるプールのバランス再調整基準に基づいて、同一プール内のキューのバランスを再調整する。いくつかの実施形態において、
図14及び
図15の負荷バランス調整器555は、上記の
図6〜
図9を参照して上述した処理と同様の処理を使用することにより、PNICキューを管理してVM及び非VMアドレス指定可能なノードを処理する。これらの実施形態のいくつかにおいて、これらの処理は、VMのトラフィックに加えて非VMアドレス指定可能なノードとの間のトラフィックを監視し且つ管理するように変更される。
【0126】
V.電子システム
上述の特徴及びアプリケーションの多くは、コンピュータ可読記憶媒体(コンピュータ可読媒体とも呼ぶ)に記録された命令セットとして指定されるソフトウェア処理として実現される。1つ以上の処理装置(例えば、1つ以上のプロセッサ、プロセッサのコア又は他の処理装置)により実行される場合、これらの命令は、命令において示される動作を処理装置に実行させる。コンピュータ可読媒体の例は、CD−ROM、フラッシュドライブ、RAMチップ、ハードドライブ、EPROM等を含むがそれらに限定されない。コンピュータ可読媒体は、無線又は有線接続を介する搬送波及び電子信号を含まない。
【0127】
本明細書において、用語「ソフトウェア」は、プロセッサにより処理するためにメモリに読み込み可能である読出し専用メモリに常駐するファームウェア又は磁気記憶装置に格納されたアプリケーションを含むことを意図する。また、いくつかの実施形態において、複数のソフトウェア発明は、残りの部分が異なるソフトウェア発明である大きいプログラムの一部として実現可能である。いくつかの実施形態において、複数のソフトウェア発明は、別個のプログラムとしても実現可能である。最後に、本明細書中で説明する処理を共に実現する別個のプログラムの何らかの組み合わせは、本発明の範囲内である。いくつかの実施形態において、1つ以上の電子システムにおいて動作するためにインストールされる場合、プログラムは、ソフトウェアプログラムの動作を実行する1つ以上の特定のマシンの実現を定義する。
【0128】
図16は、本発明のいくつかの実施形態が実現される電子システム1600を概念的に示す。電子システム1600は、上述のホスト装置のいずれかであってもよい。本システムは、上述の処理及び/又はキュー管理システムのうちのいずれかを実行する装置のいずれかであってもよい。電子システム1600は、コンピュータ(例えば、デスクトップコンピュータ、パーソナルコンピュータ、タブレットコンピュータ、サーバコンピュータ、大型コンピュータ、ブレードコンピュータ等)、電話、PDA又は他の何らかの種類の電子装置であってもよい。そのような電子システムは、種々のコンピュータ可読媒体と、種々の他のコンピュータ可読媒体に対するインタフェースとを含む。電子システム1600は、バス1605、処理装置1610、システムメモリ1625、読出し専用メモリ1630、固定記憶装置1635、入力装置1640及び出力装置1645を含む。
【0129】
バス1605は、電子システム1600の多くの内部装置を通信可能に接続する全てのシステムバス、周辺バス及びチップセットバスを一括して表す。例えばバス1605は、処理装置1610と、読出し専用メモリ1630、システムメモリ1625及び固定記憶装置1635とを通信可能に接続する。
【0130】
処理装置1610は、これらの種々の記憶装置から、本発明の処理を実行するために実行する命令及び処理するデータを検索する。異なる実施形態において、処理装置は単一のプロセッサであってもよく、あるいはマルチコアプロセッサであってもよい。
【0131】
読出し専用メモリ(ROM)1630は、処理装置1610及び電子システムの他のモジュールが必要とする静的データ及び命令を格納する。それに対して、固定記憶装置1635は、読出し書込み記憶装置である。当該装置は、電子システム1600の電源がオフである場合でも命令及びデータを格納する不揮発性記憶装置である。本発明のいくつかの実施形態は、固定記憶装置1635として大容量記憶装置(磁気ディスク又は光ディスク及びそれに対応するディスクドライブ等)を使用する。
【0132】
他の実施形態は、固定記憶装置として取外し可能記憶装置(フロッピディスク、フラッシュドライブ等)を使用する。固定記憶装置1635と同様に、システムメモリ1625は読出し書込み記憶装置である。しかし、記憶装置1635と異なり、システムメモリは、ランダムアクセスメモリ等の揮発性読出し書込みメモリである。システムメモリは、プロセッサが実行時に必要とする命令及びデータの一部を格納する。いくつかの実施形態において、本発明の処理は、システムメモリ1625、固定記憶装置1635及び/又は読出し専用メモリ1630に格納される。処理装置1610は、これらの種々の記憶装置から、いくつかの実施形態の処理を実行するために実行する命令及び処理するデータを検索する。
【0133】
バス1605は、入力装置1640及び出力装置1645に更に接続する。入力装置により、ユーザは電子システムに対して情報を通信し且つコマンドを選択できる。入力装置1640は、英数字キーボード及びポインティングデバイス(「カーソル制御装置」とも呼ぶ)を含む。出力装置1645は、電子システムにより生成される画像を表示する。出力装置は、プリンタ、並びにブラウン管(CRT)又は液晶ディスプレイ(LCD)等の表示装置を含む。いくつかの実施形態は、入力装置及び出力装置の双方として機能するタッチスクリーン等の装置を含む。
【0134】
最後に、
図16に示すように、バス1605は、ネットワークアダプタ(不図示)を介して電子システム1600をネットワーク1665に更に結合する。このように、コンピュータは、コンピュータのネットワーク(ローカルエリアネットワーク(「LAN」)、ワイドエリアネットワーク(「WAN」)又はイントラネット等)の一部であってもよく、あるいはインターネット等のネットワークのネットワークの一部であってもよい。電子システム1600のいずれか又は全ての構成要素が本発明に関連して使用されてもよい。
【0135】
いくつかの実施形態は、機械可読媒体又はコンピュータ可読媒体(あるいは、コンピュータ可読記憶媒体、機械可読媒体又は機械可読記憶媒体と呼ぶ)にコンピュータプログラム命令を格納するマイクロプロセッサ、記憶装置及びメモリ等の電子構成要素を含む。そのようなコンピュータ可読媒体のいくつかの例は、RAM、ROM、読出し専用コンパクトディスク(CD−ROM)、記録可能コンパクトディスク(CD−R)、書換え可能コンパクトディスク(CD−RW)、読出し専用デジタル汎用ディスク(例えば、DVD−ROM、2層式DVD−ROM)、種々の記録可能/書換え可能DVD(例えば、DVD−RAM、DVD−RW、DVD+RW等)、フラッシュメモリ(例えば、SDカード、ミニSDカード、マイクロSDカード等)、磁気ハードドライブ及び/又は固体ハードドライブ、読出し専用Blu−Ray(登録商標)ディスク及び記録可能Blu−Ray(登録商標)ディスク、超高密度光ディスク、他の何らかの光媒体又は磁気媒体、並びにフロッピディスクを含む。コンピュータ可読媒体は、少なくとも1つの処理装置により実行可能であり且つ種々の動作を実行するための命令セットを含むコンピュータプログラムを格納してもよい。コンピュータプログラム又はコンピュータコードの例は、コンパイラにより生成されるような機械コード、並びにインタープリタを使用するコンピュータ、電子構成要素又はマイクロプロセッサにより実行される高レベルコードを含むファイルを含む。
【0136】
上記の説明はソフトウェアを実行するマイクロプロセッサ又はマルチコアプロセッサを主に参照するが、いくつかの実施形態は、特定用途向け集積回路(ASIC)又はフィールドプログラマブルゲートアレイ(FPGA)等の1つ以上の集積回路により実行される。いくつかの実施形態において、そのような集積回路は、回路自体に格納される命令を実行する。
【0137】
本明細書中で使用される場合、用語「コンピュータ」、「サーバ」、「プロセッサ」及び「メモリ」は全て、電子装置又は他の技術装置を参照する。これらの用語は、人間又は人間のグループを含まない。本明細書の便宜上、用語「表示する」は、電子装置上に表示することを意味する。本明細書中で使用される場合、用語「コンピュータ可読媒体」及び「機械可読媒体」は全て、コンピュータが読み出せる形態で情報を格納する有形の物理物体に限定される。これらの用語は、無線信号、有線ダウンロード信号及び他の何らかの一時的な信号を含まない。
【0138】
多くの特定の詳細を参照して本発明を説明したが、本発明が本発明の主旨から逸脱せずに他の特定の形態で実現可能であることが当業者には認識されるだろう。更に、多くの図面(
図6〜
図9を含む)は処理を概念的に示す。これらの処理の特定の動作は、図示及び説明される正確な順序で実行されなくてもよい。特定の動作は、一連の連続する動作で実行される必要がなく、異なる実施形態において、異なる特定の動作が実行されてもよい。更に、処理は、複数のサブプロセスを使用して実現されてもよく、あるいは大きいマクロ処理の一部として実現されてもよい。
データトラフィックを監視するステップは、前記電子装置上で実行するアドレス指定可能なノードに関連付けられるデータトラフィックを監視するステップを含むことを特徴とする請求項1に記載の方法。
前記データトラフィックのサブセットを向けるステップは、前記キューのセットを介して前記データトラフィックのサブセットをルーティングする前記NIC内のフィルタセットを指定するステップを含み、
前記フィルタセットは、前記キューのセットを介する前記データトラフィックのサブセットを前記電子装置上で実行するアドレス指定可能宛先ノードのセットにルーティングすることを特徴とする請求項1に記載の方法。
前記データトラフィックのサブセットを向けるステップは、前記データトラフィックのサブセットを前記電子装置上で実行するアドレス指定可能送信元ノードのセットから前記キューのセットを介して前記電子装置の外部にルーティングするフィルタセットを指定するステップを含むことを特徴とする請求項1に記載の方法。
前記監視するステップ、前記指定するステップ及び前記向けるステップは、複数の異なる仮想モジュール間で前記電子装置上のネットワーキングリソースのセットを共有するネットワーク仮想化レイヤにより実行される動作であり、
前記フィルタセットは、異なる仮想モジュールからのデータトラフィックを前記複数のキューにおける異なるキューに割り当てるために前記ネットワーク仮想化レイヤにおいて定義されることを特徴とする請求項10に記載の方法。