いくつかの例において、高性能パケット処理アプリケーションのためのDPDKの実装は、インテル1G/10G/40G NIC等のネットワーク(NW)I/Oデバイスを構成し及び/又は動作させるポーリングモードドライバ(PMD)の展開を含んでもよい。これらの例では、PMDの展開は、DPDKベースのネットワークアプリケーションが、高性能及び低遅延の手法でパケットを受信し、処理し、そして送信するために、割り込みをトリガすることなく、最も高いプロセッサ/コア周波数又は最大のプロセッサ/コア周波数でNW I/Oデバイスの(例えば、受信(Rx)キュー及び送信(Tx)キュー等の)リソースにアクセスすることを可能としてもよい。しかしながら、データセンターネットワークにおいては、"潮汐効果"と呼ばれるよく知られた現象が発生する。潮汐効果は、時間期間にわたって複数の異なる地理的領域において生じるネットワークトラフィックパターンの有意な変化に起因する可能性がある。このようにして、ごく小さなネットワークトラフィックしか処理しない或いはネットワークトラフィックを全く処理しない期間の間、x86プロセッシングコアにおいて実行されているDPDKベースのアプリケーション("DPDKポーリングスレッド"( DPDK polling thread))は、依然として、(例えば、ネットワークパケットを処理するのではなく連続的にポーリングするといったように)待機でビジーとなっている可能性がある。ネットワークパケットを待っていると、かなりの量の電力のみならずかなりの量の計算資源を浪費する可能性がある。
オペレーティングシステム(OS)電力管理サブシステム又はモジュールは、(主として、OSカーネル空間でのパフォーマンス状態(P-state)及び電力状態(C-state)の制御等の)いくつかの技術を提供してもよく、それらのいくつかの技術は、ピークネットワークトラフィック又は低ネットワークトラフィックのいずれかの期間の間のプロセッサ電力を調整する。(例えば、Linux(登録商標)又はWindows(登録商標)等の)標準的なOSにおいては、OS電力管理モジュールは、CPU使用量を周期的にサンプリングすることにより、プロセッサ又はコアがとるべき適切なプロセッサ電圧及び/又は周波数、動作点(P-state)及びプロセッサアイドル状態(C-state)をそれぞれ決定してもよい。しかしながら、DPDKポーリングスレッドが実際にパケットを処理しているのか又は待機でビジーになっているのかをOS電力管理モジュールが判定することができないということに起因して、上記のアプローチは、DPDKポーリングスレッドを有するPMDベースのパケット処理アプリケーションには適していない。OS電力管理モジュールがDPDKポーリングスレッドの動作状態を決定することができないということは、"潮汐効果"の影響を受けるデータセンターネットワークにおける電力を節約するために、これらのDPDKポーリングスレッドをサポートするプロセッサ又はコアがとるべき適切な電力状態を決定する際に問題を生ずる可能性がある。本明細書で説明される複数の例が必要となるのは、これらの課題に関してである。
第1の複数の例によれば、受信したパケットをNW I/Oデバイスで処理することと関連する電力管理のための技術は、あるDPDKポーリングスレッドのための複数のポーリングの反復(polling iterations)にわたって、NW I/Oデバイスの受信キューで保持されている利用可能な受信したパケット記述子をモニタリングするステップを含んでもよい。これらの第1の複数の例は、各々のポーリングの反復の後に、受信キューで保持されている利用可能なパケット記述子に基づいて受信キューの充足のレベル(level of fullness)を決定し、受信キューの充足のレベルに基づいてトレンド計数(trend count)を増加させるステップを含んでもよい。これらの第1の複数の例は、トレンド計数がトレンド計数閾値を超えているか否かに基づいて、OS電力管理モジュールにパフォーマンス指標を送信するステップを含んでもよい。上記のパフォーマンス指標は、OS電力管理モジュールが、DPDKポーリングスレッドを実行している処理要素のパフォーマンス状態を増加させることを可能としてもよい。
第2の複数の例によれば、受信したパケットをNW I/Oデバイスで処理することと関連する電力管理のための技術は、そのDPDKポーリングスレッドのための複数のポーリングの反復にわたって、NW I/Oデバイスの受信キューで保持されている利用可能な受信したパケット記述子をモニタリングするステップを含んでもよい。これらの第2の複数の例は、各々のポーリングの反復の後に、受信キューで保持されている利用可能なパケット記述子に基づいて、各々のポーリングの反復について受信キューで受信されたパケットの数を決定し、連続的な閾値を超える連続的な数のポーリングの反復について受信したパケットの数が0である場合に、1である計数だけアイドル計数を増加させるステップを含んでもよい。これらの第2の複数の例は、アイドル計数が第1のアイドル計数閾値を超えるか又は第1のアイドル計数閾値よりも小さいかに基づいて、第1の時間期間又は第2の時間期間のうちの一方の間、DPDKポーリングスレッドをスリープ状態にさせるステップを含んでもよい。第2の時間期間は、第1の時間期間よりも長くてもよい。
図1は、例示的なシステム100を図示している。いくつかの例において、図1に示されているように、システム100は、NW I/Oデバイス110を含み、NW I/Oデバイス110は、NWトラフィック105に含まれるパケットを受信し又は送信するように構成される。プリフロー負荷バランサ120は、受信(Rx)キュー130-1乃至130-nにパケットを分配してもよく、"n"は、1よりも大きいいずれかの正の整数である。これらの例では、Rxキュー130-1乃至130-nは、それぞれDPDKポーリングスレッド140-1乃至140-nによる処理のために、受信したパケットを少なくとも一時的に保持するように構成されてもよい。各々のDPDKポーリングスレッド140-1乃至140-nは、これらには限定されないが、ファイアウォールアプリケーション、VPNアプリケーション、NATアプリケーション、DPIアプリケーション、又は負荷バランサアプリケーションを含むネットワークパケット処理アプリケーションの少なくとも複数の部分を実行することが可能であってもよい。各々のDPDKポーリングスレッド140-1乃至140-nは、それぞれのポーリングモードドライバ142-1乃至142-nを含んでもよく、プロセスを受信し又はNWトラフィック105において受信したパケットを送信するRxキュー130-1乃至130-nへのアクセスをあるポーリングモードの動作において割り込みなしで可能にする。
図1に示されているように、いくつかの例によれば、システム100は、ユーザ空間101で動作するように構成されるDPDK電力管理構成要素150及びカーネル空間102で動作するように構成されるOS電力管理モジュール160を含んでもよい。以下でより詳細に説明するように、DPDK電力管理構成要素150は、DPDKポーリングスレッド140-1乃至140-nによる処理のために、Rxキュー130-1乃至130-nで保持されている利用可能な受信したパケット記述子をモニタリングすることが可能であるロジック及び/又は特徴を含んでもよい。DPDK電力管理構成要素150におけるロジック及び/又は特徴は、DPDKポーリングスレッド140-1乃至140-nのためのスリープ時間又はアイドル時間をモニタリングしてもよい。
いくつかの例において、DPDK電力管理構成要素150の状態アルゴリズム154は、モニタリングされた情報を利用して、DPDKポーリングスレッド140-1乃至140-nが一時的なスリープ状態に置かれるようにし、(ワンショット(単発の)Rx割込みオンヒント180を介して)NW I/Oデバイス110に割込みターンオンヒンターメッセージを送信し、そして、ポーリングモードから割込みモードへと動作の変化を生じさせ、或いは、ライブラリ152がC-state(スリープ)ヒント又は指標或いはP-state(パフォーマンス)ヒント又は指標を送信するのを可能にする。図1に示されているように、これらの例では、OS電力管理モジュール160のプロセッサ要素(PE)アイドル162又はPE周波数164にC-stateヒント又はP-stateヒントを送信してもよい。OS電力管理モジュール160の複数の要素は、受信したC-stateヒント又はP-stateヒントに基づいて、1つ又は複数のプロセッサ170に含まれる1つ又は複数のPE172-1乃至172-nのC-state又はP-stateのいずれかへの変化を生じさせてもよい。統一拡張ファームウェアインターフェイス討論会(Unified Extensible Firmware Interface Forum)によって2014年6月に発行された拡張構成及び電力インターフェイス(ACPI)仕様書(Advanced Configuration and Power Interface (ACPI) Specification)改訂5.1版("ACPI仕様書")等の1つ又は複数のプロセッサ電力管理規格又は仕様書にしたがって、C-state又はP-stateを変化させ又は制御してもよい。
いくつかの例によれば、1つ又は複数のプロセッサ170は、マルチコアプロセッサを含んでもよく、PE172-1乃至172-nは、各々がマルチコアプロセッサのコアであってもよく、及び/又はマルチコアプロセッサの1つ又は複数のコアによってサポートされる仮想機械(VM)であってもよい。また、これらの例では、PE172-1乃至172-nによってDPDKポーリングスレッド140-1乃至140-nを実行することが可能であってもよい。1つ又は複数のプロセッサ170は、これらには限定されないが、AMD(登録商標)プロセッサ、Athlon(登録商標)プロセッサ、Duron(登録商標)プロセッサ、Phenom(登録商標)プロセッサ、及びOpteron(登録商標)プロセッサ、インテルAtom(登録商標)Coreプロセッサ、Celeron(登録商標)コア(2)プロセッサ、Duoコアi3プロセッサ、コアi5プロセッサ、コアi7プロセッサ、Pentium(登録商標)Xeon又はXeon Phi(登録商標)プロセッサを含むさまざまなタイプの商業的に利用可能なx86プロセッサを含んでもよい。
いくつかの例によれば、新たなAPI(NAPI)は、(例えば、Linux kernel等の)カーネル空間102において使用するための割込み軽減技術であってもよく、その割込み軽減技術は、DPDKポーリングスレッド140-1乃至140-nによるパケット処理をサポートしていてもよい。NAPIは、通常、OS及びNIC又はNW I/Oドライバのためのポーリングモード能力を取り入れることにより、高速ネットワーキングの性能を改善するように設計される。NAPIを使用すると、NW I/Oドライバは、ディフォルト設定で割込み駆動モードで動作してもよく、入来パケットのフローがある閾値をこえる場合に、ポーリングモードに切り替わるにすぎない。NAPIは、頻繁なモードの切り替えを可能にし、(例えば、サーバ又はパーソナルコンピュータ等の)ネットワーク端末エンドポイントは、厳格な低遅延要件及び厳格なジッタ要件を有していない可能性があるので、頻繁なモード切り替えは、これらの端末エンドポイントのためにうまく受け入れられてもよい。これに対して、(例えば、スイッチ、ルータ、及びL4乃至L7ネットワーク機器等の)あるタイプのネットワークデバイスは、厳格な遅延要件、厳格なジッタ要件及び厳格なパケット損失要件のもとで動作する可能性がある。これらのタイプのネットワークデバイスについて、頻繁なモードの切り替え、割込みを提供すること、及び停止中のスレッド又は中断しているスレッドをウェイクアップすること、或いはスレッドをスリープ状態にすることは、プロセッサリソース及び待ち時間ヒットの観点から代償の大きいものとなる可能性がある。これらのプロセッサリソース及び待ち時間ヒットは、データセンターネットワークにおけるような展開等においては、ネットワークデバイスにとっては受け入れることができないものとなる可能性がある。
いくつかの例によれば、DPDKポーリングスレッド140-1乃至140-nのポーリングモードドライバ142-1乃至142-nは、ディフォルト設定で、あるポーリングモードで動作するように設計され又は構成されてもよい。以下でより詳細に説明されるように、DPDK電力管理構成要素150がますます低下する傾向を有するネットワークトラフィックを検出する場合には、DPDK電力管理構成要素150は、1つ又は複数の時間期間の間、DPDKポーリングスレッド140-1乃至140-nをスリープ状態にしてもよく、また、OS電力管理モジュール160にヒントを送信してもよい。それらのヒントに基づいて、OS電力管理モジュール160は、PE172-1乃至172-nが、プロセッサの周波数をある割合に応じて減少させ、或いは、アイドル状態又はスリープ状態への遷移をある割合に応じて減少させて、電力を節約するようにさせてもよい。DPDK電力管理構成要素150がある継続時間閾値の間にいかなるトラフィックも検出しない場合には、ポーリングモードドライバ142-1乃至142-nは、ディフォルトのポーリングモードから割込みモードに切り替わってもよい。このような方法で、DPDKポーリングスレッド140-1乃至140-nは、パケットを処理する際に、パフォーマンス要件をより良く満足するために主としてポーリングモード環境で動作することができ、したがって、頻繁なモードの切り替えを避けることができる。
図2は、第1の論理フローの1つの例を図示している。図2に示されているように、例示的な第1の論理フローは、論理フロー200を含んでいる。いくつかの例によれば、論理フロー200は、(例えば、データセンターに位置している)NWデバイスのための受信パケットを処理することと関連する電力管理のための論理フローであってもよい。これらの例では、図1に示されているシステム100の少なくともいくつかの構成要素は、論理フロー200の複数の部分を実装することが可能であってもよい。しかしながら、例示的な論理フロー200は、図1において図示され又は説明されているシステム100の構成要素を使用することに限定されない。
図2に示されているように、いくつかの例では、ステップS202で、DPDK電力管理構成要素を初期化してもよい。これらの例では、(例えば、DPDKポーリングスレッド140-1等の)DPDKポーリングスレッドは、NW I/Oデバイスのための(例えば、Rxキュー130-1等の)Rxキューからのパケットをポーリングする継続的なループ(continuous loop)を開始してもよい。そのループは、以下で詳細に説明されるように、スリープ状態又は割込み状態に置かれることが生じるまで、継続してもよい。ステップS204において、(例えば、1乃至2[μs](マイクロ秒)ごとに)各々のポーリングの反復について、Rxキューに保持されている使用されそして制限のないパケット記述子の数を、DPDK電力管理構成要素によって取得してもよい。ステップS206において、ある与えられたポーリングの反復の間に受信したパケットが0個である場合に、ステップS208において、受信したパケットが0個であるポーリングの反復の数と、(例えば、5回の反復等の)連続的な数の閾値とを比較してもよい。いくつかの例では、連続的な数の閾値をこえなかった場合に、論理フローは、ステップS204に戻る。
いくつかの例によれば、受信したパケットの数が0個であるポーリングの反復の数に基づいて、ステップS210において、"アイドル"計数を1だけ増加させてもよい。ステップS212において、"アイドル"計数が閾値"THRESHOLD_1"を下回るか否か、すなわち、"アイドル"計数が閾値"THRESHOLD_1"よりも小さいか否かについての判定を行う。"アイドル"計数が閾値"THRESHOLD_1"よりも小さい場合には、ステップS214において、DPDKポーリングスレッドは、DPDK電力管理構成要素によって(例えば、数[μs]等の)短い期間の間、スリープ状態に置かれてもよい。ステップS216で、"アイドル"計数が閾値"THRESHOLD_2"よりも小さい場合には、ステップS218において、DPDKポーリングスレッドは、(例えば、数十[μs]等の)比較的長い期間の間、スリープ状態に置かれてもよい。
いくつかの例において、短いスリープ期間は、短い数[μs]のスリープ期間であってもよく、連続的なスピンループと比較して、電力消費を減少させてもよい。したがって、トラフィックの傾向がいまだに識別可能でない時間の間の高価なコンテキストスイッチの使用を、DPDKポーリングスレッドに回避させる。比較的長いスリープ期間は、より低いトラフィックの傾向がすでに識別されている場合のスリープ期間になっていてもよい。上記の場合には、DPDK電力管理構成要素は、DPDKポーリングスレッドを、より長い期間の間、スリープ状態にさせてもよく、OS電力管理モジュールに長いスリープ指標又はC-stateヒントを送信してもよい。OS電力管理モジュールは、その後、DPDKポーリングスレッドをサポートするPEが、ACPI C1電力状態となるようにしてもよい。上記のC1電力状態は、新たなNWトラフィックが到達した場合に、PEがC0電力状態まで迅速に給電するのを可能にする。また、新たなNWトラフィックが到達した場合には、"アイドル"計数は、0の係数にリセットされる。
いくつかの例によれば、閾値"THRESHOLD_1"は、閾値"THRESHOLD_2"と比較して数分の一の長さであってもよく、Rxキューにおけるパケットが0個の比較的短い期間の後に、DPDKポーリングスレッドをスリープ状態にさせてもよい。これに対して、"アイドル"計数が閾値"THRESHOLD_2"をこえる場合には、ステップS220において、ワンショット(単発の)Rx割込み(one-shot Rx interrupt)を有効にしてもよい。入来パケットがNW I/Oデバイスによって受信されると、ステップS222で、単発の割込みがトリガされ、単発の割込みは、中断されているDPDKポーリングスレッドを、割込みモードから再びポーリングモードに切り替わるようにさせてもよい。閾値"THRESHOLD_2"をこえる"アイドル"計数は、低速のネットワークトラフィック期間又はネットワークトラフィックが全くない期間を示してもよい。また、DPDKポーリングスレッドを中断させると、OS電力管理モジュールが、DPDKポーリングスレッドを実行するPEを、C1電力状態よりもより低い電力使用量を有するより深いC-stateにおくようにすることを可能にする。実際には、DPRKポーリングスレッドは、現時点で割込みモードで動作していてもよく、その割込みモードは、ネットワークトラフィックを再び受信したことに応答して、ポーリングモードに再び切り替わってもよい。
いくつかの例において、Rxキューでパケットを受信した場合には、Rxキューの充足のレベルを決定してもよい。例えば、ステップS224において、Rxキューが(例えば、25%乃至50%満たされているといったように)ほぼ空である場合には、ステップS226において、"トレンド"計数を小さな数だけ増加させてもよい。ステップS234において、Rxキューが(例えば、51%乃至75%満たされているといったように)半分満たされている場合には、ステップS236において、"トレンド"計数を大きな数だけ増加させてもよい。また、ステップS228で、"トレンド"計数がトレンド計数閾値をこえている場合には DPDK電力管理構成要素は、OS電力管理モジュールにパフォーマンス指標又はP-stateヒントを送信してもよい。パフォーマンス指標は、ステップS230で、OS電力管理モジュールが、DPDKポーリングスレッドを実行しているPEのための動作周波数を増加させるようにしてもよく、或いは、ACPI P-stateを上昇させるようにしてもよい。ネットワークトラフィックの漸増的な増加を検出することができ、かつ、ステップS232で、受信したパケットを処理しながら、PEのためのP-stateを緩やかに増加させて、電力節約とパフォーマンスとの間のバランスをとることが可能であるように、"トレンド"計数を設定してもよい。
いくつかの例によれば、ステップS238で、Rxキューが(例えば、76%よりも大きなパーセンテイジだけ満たされているといったように)ほぼ満たされている場合には、ステップS240で、Rxキューがほぼ満たされているポーリング反復の連続的な数と、(例えば、5回のポーリングの反復等の)連続的な閾値とを比較してもよい。これらの例では、上記の連続的な閾値をこえている場合には、DPDK電力管理構成要素は、OS電力管理モジュールに高いパフォーマンス指標又は高いP-stateヒントを送ってもよい。高いパフォーマンス指標は、ステップS242において、OS電力管理モジュールが、DPDKポーリングスレッドを実行しているPEのための動作周波数をある割合に応じて最も高い周波数に増加させることを可能にしてもよく、或いは、DPDKポーリングスレッドを実行しているPEのためのACPI P-stateを最も高いパフォーマンスP-stateに上昇させることを可能にしてもよい。ある割合に応じて最も高いパフォーマンスP-stateに増加させることは、OS電力管理モジュールが、高いネットワークトラフィック負荷に迅速に反応することを可能とし、したがって、受信したパケットをステップS232において処理しながら、DPDKポーリングスレッドを実行しているPEを、電力節約とパフォーマンスとの間のバランスから純粋にパフォーマンスベースの動作状態へと切り替えることを可能とする。
いくつかの例において、DPDK電力管理構成要素は、DPDKポーリングスレッドがスリープ状態にある時間長を周期的にモニタリングする。これらの例では、DPDK電力管理構成要素は、ステップS244において、周期的なタイマを初期化してもよく、ステップS244は、タイマ期間を開始させてもよく、DPDKポーリングスレッドのスリープ状態のモニタリングが、そのタイマ期間の間に行われてもよい。ステップS246でのタイマの終了に続いて、DPDK電力管理構成要素は、DPDKポーリングスレッドが、複数のポーリングの反復のうちの25%よりも長い間、スリープ状態に置かれているか否かということを判定してもよい。上記で説明したように、"アイドル"計数が閾値"THRESHOLD_1"よりも小さいか又は閾値"THRESHOLD_2"よりも小さいかに基づいて、DPDKポーリングスレッドは、さまざまな時間の間、スリープ状態に置かれ続けてもよい。DPDKポーリングスレッドが、複数のポーリングの反復のうちの25%よりも長い間、スリープ状態に置かれているということを、DPDK電力管理構成要素が見出した場合には、DPDK電力管理構成要素は、ステップS252において、OS電力管理モジュールにパフォーマンス指標又はP-stateヒントを送信してもよい。パフォーマンス指標の送信の結果、OS電力管理モジュールは、DPDKポーリングスレッドを実行しているPEが、低くされた又は減少させられた動作周波数で動作するようにさせてもよい。言い換えると、そのPEのためのACPI P-stateをより低いパフォーマンスP-stateに下げてもよい。
いくつかの例によれば、DPDKポーリングスレッドが、複数のポーリングの反復のうちの25%よりも長い間、スリープ状態に置かれていない場合には、DPDK電力管理構成要素は、ステップS250において、その時間期間の間に受信したパケットについての平均の反復ごとのパケット数が、予想される平均の反復ごとのパケット数の閾値よりも小さいか否かを判定してもよい。その時間期間の間に受信したパケットについての平均の反復ごとのパケット数が、予想される平均の反復ごとのパケット数の閾値を下回る場合には、DPDK電力管理構成要素は、ステップS252において、OS電力管理モジュールにパフォーマンス指標又はP-stateヒントを送信してもよい。DPDKポーリングスレッドが複数のポーリングの反復のうちの25%よりも長い間スリープ状態に置かれているということ、又はその時間期間の間に受信したパケットについての平均の反復ごとのパケット数が予想される平均の反復ごとのパケット数の閾値よりも小さいということに応答して、PEにそのPEのP-stateを下げさせるということは、モニタリングされている情報に基づいて電力を節約するためにパフォーマンス状態を一定の比率で下降させるある1つの方法であるということができ、そのモニタリングされている情報は、ネットワークトラフィック自体或いはネットワークトラフィックからのパケットを少なくとも処理することが低下しているということを示している。
図3は、第1のプロセス300の1つの例を図示している。図3に示されているように、第1のプロセスは、プロセス300を含んでいる。いくつかの例によれば、プロセス300は、システム100の複数の異なる要素が、図2について上記で説明された論理フロー200の複数の部分をいかにして実装することができるかを説明している。特に、これらの複数の部分は、DPDK電力管理構成要素(PMC)によってとられるスリープ動作、アイドル動作、又は割込み動作と関連している。これらの例では、図1に示されているシステム100の少なくともいくつかの構成要素が、プロセス300に関連付けられていてもよい。しかしながら、例示的なプロセス300は、図1において示され又は説明されているシステム100の構成要素を使用する実装には限定されない。
(パケットを受信する)プロセス3.1から開始して、NW I/Oデバイス110で複数のパケットを受信し、それらの複数のパケットをRxキュー130に少なくとも一時的に収納する。
(ポーリング及び処理)プロセス3.2に移り、DPDKポーリングスレッド140は、Rxキュー130のポーリングが可能であってもよく、パケットがRxキュー130で受信されている場合には、それらのパケットを処理してもよい。
(利用可能な受信したパケット記述子をモニタリングする)プロセス3.3に移り、DPDK電力管理構成要素150は、ロジック及び/又は特徴を含んでもよく、そのロジック及び/又は特徴は、複数のDPDKポーリングスレッド140のための複数のポーリングの反復にわたって、Rxキュー130で保持されている利用可能な受信したパケット記述子をモニタリングする。
(連続的な閾値を超える連続的な数のポーリングの反復について受信したパケットの数が0)プロセス3.4に移り、DPDK電力管理構成要素150は、ロジック及び/又は特徴を含んでもよく、そのロジック及び/又は特徴は、(例えば、5個のポーリングの反復等の)連続的な閾値をこえる数のポーリングの反復について受信されているパケットの数が0であるか否かを判定する。
(アイドル計数を増加させる)プロセス3.5に移り、DPDK電力管理構成要素150は、ロジック及び/又は特徴を含んでもよく、そのロジック及び/又は特徴は、連続的な閾値を超える連続的な数のポーリングの反復について受信したパケットの数が0である場合に、1である計数だけアイドル計数を増加させる。
(短い期間のスリープ)プロセス3.6Aに移り、DPDK電力管理構成要素150は、ロジック及び/又は特徴を含んでもよく、そのロジック及び/又は特徴は、増加したアイドル計数が(例えば、THRESHOLD_1等の)第1のアイドル計数閾値よりも小さいと考えられる場合には、(例えば、数[μs]等の)短い期間の間、DPDKポーリングスレッド140をスリープ状態に置く。上記のプロセスは、その後、終了してもよい。
(長い期間のスリープ)プロセス3.6Bにおける第1の代替処理に移り、DPDK電力管理構成要素150は、ロジック及び/又は特徴を含んでもよく、そのロジック及び/又は特徴は、増加したアイドル計数が、第1のアイドル計数閾値よりも大きいが第2のアイドル計数閾値(THRESHOLD_2)よりも小さいと考えられる場合には、(例えば、数十[μs]等の)比較的長いスリープ期間の間、DPDKポーリングスレッド140をスリープ状態に置く。
(長いスリープの指標)プロセス3.7Bに移り、DPDK電力管理構成要素150は、ロジック及び/又は特徴を含んでもよく、そのロジック及び/又は特徴は、OS電力管理モジュール(PMM)160に長いスリープの指標を送信し、DPDKポーリングスレッド140が、長いスリープ期間の間、スリープ状態に置かれていたということを示してもよい。
(長い期間の間のスリープモード)プロセス3.8Bに移り、OS電力管理モジュール160は、最大で長いスリープ期間までの間、1つ又は複数のPE172をスリープモードに置くようにしてもよい。いくつかの例において、スリープモードは、ACPI C1電力状態を含んでもよい。上記のプロセスは、その後、この第1の代替処理については終了してもよい。
(ワンショット(単発の)Rx割込みをオンにする)プロセス3.6Cにおける第2の代替処理に移り、DPDK電力管理構成要素150は、ロジック及び/又は特徴を含んでもよく、そのロジック及び/又は特徴は、アイドル計数が(例えば、THRESHOLD_2等の)第2のアイドル計数閾値をこえたことに基づいて、NW I/Oデバイス110に割込みターンオンヒンターメッセージを送信する。
(割り込みモードに切り替える)プロセス3.7Cに移ると、ポーリングモードドライバ142は、ポーリングモードでのNW I/Oデバイス110に対する動作から割り込みモードへと切り替わってもよい。上記のモード切替は、DPDKポーリングスレッド140を中断状態にさせてもよい。
(パケットを受信する)プロセス3.8Cに移ると、ネットワークトラフィック105は、この段階では、DPDKスレッド140による処理のためのパケットを含んでもよい。
(ポーリングモードへの切り替え)プロセス3.9Cに移ると、ポーリングモードドライバ142は、ポーリングモードでのNW I/Oデバイス110に対する動作に再び切り替わってもよく、プロセスは、その後、この第2の代替処理で終了してもよい。
図4は、第2のプロセス400の1つの例を図示している。図4に示されているように、第2のプロセスは、プロセス400を含んでいる。プロセス300と同様に、プロセス400は、図2について上記で説明された論理フロー200の複数の部分をシステム100の複数の異なる要素がいかに実装するかを説明してもよい。特に、これらの複数の部分は、DPDKポーリングスレッドのスリープ状態のパーセンテイジ又は平均の反復ごとのパケット数をモニタリングして、1つ又は複数のPE172のパフォーマンス状態を下げるか否かを決定することに関連している。これらの例では、図1に示されているシステム100の少なくともいくつかの構成要素が、プロセス400と関連していてもよい。しかしながら、例示的なプロセス400は、図1で説明されているシステム100の構成要素を使用する実装には限定されない。
(タイマを初期化する)プロセス4.1から開始して、DPDK電力管理構成要素150は、ロジック及び/又は特徴を含んでもよく、そのロジック及び/又は特徴は、あるタイマ期間を有するタイマを初期化し又は開始してもよい。いくつかの例において、そのタイマ期間は、およそ100[ms](ミリ秒)であってもよい。
(活動をモニタリングして、スリープ状態のパーセンテイジを決定する)プロセス4.2に移ると、DPDK電力管理構成要素150は、ロジック及び/又は特徴を含んでもよく、そのロジック及び/又は特徴は、DPDKポーリングスレッド140がスリープ状態に置かれた頻度をモニタリングする。
(タイマが終了する)プロセス4.3に移ると、タイマは、上記のタイマ期間の後に終了する。
(パフォーマンス指標(スリープ%))プロセス4.4Aに移ると、DPDK電力管理構成要素150は、ロジック及び/又は特徴を含んでもよく、そのロジック及び/又は特徴は、DPDKポーリングスレッド140が、タイマ期間の期間中にパーセンテイジ閾値を上回るパーセンテイジの時間の間スリープ状態にあったか否かを判定する。DPDKポーリングスレッド140がスリープ状態にあるパーセンテイジが上記のパーセンテイジ閾値を上回る又はこえている(例えば、25%より大きい)場合には、DPDK電力管理構成要素150は、OS電力管理モジュール160にパフォーマンス指標を送ってもよい。
(より低いパフォーマンス状態)プロセス4.5Aに移ると、OS電力管理モジュール160は、1つ又は複数のPE172がパフォーマンス状態又はP-stateを低くするようにさせてもよい。上記のプロセスは、その後、終了してもよい。
(パフォーマンス指標(平均の反復ごとのパケット数))プロセス4.4Bにおける第1の代替処理に移り、DPDK電力管理構成要素150は、ロジック及び/又は特徴を含んでもよく、そのロジック及び/又は特徴は、平均の反復ごとのパケット数がパケット平均閾値よりも大きいか又は小さいかを判定する。いくつかの例では、平均の反復ごとのパケット数がパケット平均閾値を下回る場合には、DPDK電力管理構成要素150は、OS電力管理モジュール160にパフォーマンス指標を送ってもよい。
(より低いパフォーマンス状態)プロセス4.5Bに移ると、OS電力管理モジュール160は、1つ又は複数のPE172がパフォーマンス状態又はP-stateを低くするようにさせてもよい。上記のプロセスは、この第1の代替処理で終了してもよい。
図5は、第3のプロセス500の1つの例を図示している。図5に示されているように、第3のプロセスは、プロセス500を含む。いくつかの例によれば、プロセス500は、図2について上記で説明された論理フロー200の複数の部分をシステム100の複数の異なる要素がいかにして実装するかを説明してもよい。特に、これらの部分は、Rxキューの充足のレベルをモニタリングして、1つ又は複数のPEのパフォーマンスを上げるべきであるか、そして、いつあげるべきであるのかを決定することと関連している。これらの例では、図1に示されているシステム100の少なくともいくつかの構成要素が、プロセス500に関連していてもよい。しかしながら、例示的なプロセス500は、図1で示され又は説明されているシステム100の構成要素を使用する実装には限定されない。
(パケットを受信する)プロセス5.1から開始して、NW I/Oデバイス100でパケットを受信して、Rxキュー130にそれらのパケットを少なくとも一時的に収納してもよい。
(ポーリング及び処理)プロセス5.2に移ると、DPDKポーリングスレッド140は、Rxキュー130をポーリングすることが可能であってもよく、パケットがRxキュー130で受信されている場合には、それらのパケットを処理してもよい。
(利用可能な受信したパケット記述子をモニタリングする)プロセス5.3に移ると、DPDK電力管理構成要素150は、ロジック及び/又は特徴を含んでもよく、そのロジック及び/又は特徴は、DPDKポーリングスレッド140のための複数のポーリングの反復にわたって、Rxキュー130で保持されている利用可能な受信したパケット記述子をモニタリングする。
(Rxキューの充足のレベルを決定する)プロセス5.4に移ると、DPDK電力管理構成要素150は、ロジック及び/又は特徴を含んでもよく、そのロジック及び/又は特徴は、各々のポーリングの反復の後に、Rxキュー130で保持されている利用可能なパケット記述子に基づいて、Rxキュー130の充足のレベルを決定する。
(トレンド計数を増加させる)プロセス5.5に移ると、DPDK電力管理構成要素150は、ロジック及び/又は特徴を含んでもよく、そのロジック及び/又は特徴は、図2に示されている論理フロー200について上記で説明されたようにRxキュー130の決定された充足のレベルに基づいて、単一の係数又はより大きな係数だけトレンド計数を増加させる。
(パフォーマンス指標)プロセス5.6Aに移ると、DPDK電力管理構成要素150は、ロジック及び/特徴を含んでもよく、そのロジック及び/又は特徴は、増加させられたトレンド計数がスレッド計数閾値をこえたことに基づいて、OS電力管理モジュール160にパフォーマンス指標を送ってもよい。
(動作周波数を漸増的に増加させる)プロセス5.7Aに移ると、OS電力管理モジュール160は、1つ又は複数のPE172がパフォーマンス状態又はP-stateを増加させてもよい。いくつかの例において、1つ又は複数のPE172のパフォーマンス状態を漸増的に又は単一のP-stateだけ上げてもよく、パフォーマンス状態を上げると、DPDKポーリングスレッド140を実行しているときに、1つ又は複数のPE172の動作周波数を増加させることができる。上記のプロセスは、その後、終了してもよい。
(高いパフォーマンス指標)プロセス5.6Bにおける第1の代替処理に移ると、DPDK電力管理構成要素150は、ロジック及び/又は特徴を含んでもよく、そのロジック及び/又は特徴は、Rxキュー130が(例えば、75%をこえるといったように)ほぼ充足していると判定される連続的な数のポーリングの反復に応答して、OS電力管理モジュール160に高いパフォーマンス指標を送る。
(動作周波数を最も高い周波数に増加させる)プロセス5.7Bに移ると、OS電力管理モジュール160は、1つ又は複数のPE172のパフォーマンス状態又はP-stateを最も高いP-state又は最大のP-stateに増加させてもよい。いくつかの例において、PE172のパフォーマンス状態又はP-stateを最も高いP-state又は最大のP-stateに上げることは、結果として、DPDKポーリングスレッド140を実行しているときに、1つ又は複数のPE172をそれらの最も高い動作周波数又は最大の動作周波数に上昇させる。上記のプロセスは、その後、この第1の代替処理で終了してもよい。
図6は、装置600のブロック図の1つの例を図示している。図6に示されている装置600は、ある1つの接続形態の限定された数の要素を有しているが、装置600は、ある与えられた実装について説明されたように代替的な接続形態のより多くの要素又はより少ない要素を含んでもよい。
いくつかの例によれば、装置600は、回路620によってサポートされていてもよく、回路620は、コンピューティングプラットフォーム又はネットワークデバイスにおいて又はコンピューティングプラットフォーム又はネットワークデバイスとして維持されていてもよく、データセンターの中にそれらのコンピューティングプラットフォーム又はネットワークデバイスを展開してもよい。ソフトウェアによって実装される又はファームウェアによって実装される1つ又は複数のモジュール又は構成要素622-aを実行するように、回路620を構成してもよい。本明細書で使用される"a"、"b"、"c"、及び同様の指定子は、いずれかの正の整数を表す変数であることを意図しているということに留意すべきである。したがって、例えば、ある実装がa=6として値を設定する場合には、複数の構成要素622-aのためのソフトウェア又はファームウェアの完全なセットは、構成要素622-1、622-2、622-3、622-4、622-5、及び622-6を含んでもよい。提示される複数の例は、上記の文脈には限定されず、明細書を通じて使用される複数の異なる変数が、同一の整数値又は複数の異なる整数値を表してもよい。また、これらの"構成要素"は、コンピュータ読み取り可能な記憶媒体に格納されるソフトウェア/ファームウェアであってもよく、それらの複数の構成要素は、図6に示されているように複数の個別のボックスとして示されているが、このことは、これらの構成要素を、(例えば、個別のメモリ等の)複数の異なるコンピュータ読み取り可能なメディアコンポーネントの中の記憶装置に限定するものではない。
いくつかの例によれば、回路620は、プロセッサ又はプロセッサ回路を含んでもよい。回路620は、これらには限定されないが、AMDプロセッサ、Athlonプロセッサ、Duronプロセッサ、Phenomプロセッサ、及びOpteronプロセッサ、Intel Atomプロセッサ、Celeronプロセッサ、Core(2) Duoプロセッサ、Core i3プロセッサ、Core i5プロセッサ、Core i7プロセッサ、Pentiumプロセッサ、Xeon又はXeon Phiプロセッサ等を含むさまざまな商業的に利用可能なプロセッサのいずれかであってもよい。いくつかの例によれば、回路620は、特定用途向け集積回路((ASIC))を含んでもよく、少なくともいくつかの例示的な構成要素622-aは、ASICのハードウェア構成要素として実装されてもよい。
いくつかの例において、装置600は、キュー構成要素622-1を含んでもよい。キュー構成要素622-1は、回路620によって実行されて、DPDKポーリングスレッドのための複数のポーリングの反復にわたって、NW I/Oデバイスのための受信キューにおいて保持されている利用可能な受信したパケット記述子をモニタリングしてもよい。その利用可能な受信したパケット記述子は、利用可能な受信したパケット記述子610の中に含まれていてもよく、(例えば、ルックアップテーブル(LUT)等のデータ構造の中でといったように)Rxキュー情報623-aの中でキュー構成要素622-1によって保持されていてもよい。キュー構成要素622-1は、各々のポーリングの反復の後に、受信キューにおいて保持されている利用可能なパケット記述子に基づいて、その受信キューについての充足のレベルを決定することが可能であってもよい。その充足のレベルは、Rxキュー情報623-aの中で保持されていてもよい。
いくつかの例において、キュー構成要素622-1は、Rxキュー情報623-aの中に含まれる情報に基づいて、各々のポーリングの反復の間に受信キューで受信したパケットの数を決定してもよい。
いくつかの例によれば、装置600は、増加構成要素622-2を含んでもよい。増加構成要素622-2は、回路620によって実行されて、各々のポーリングの反復の後に、その受信キューについての充足のレベルに基づいてトレンド計数を増加させてもよい。これらの例では、トレンド計数は、(例えば、LUTの中でといったように)トレンド計数624-bの中で増加構成要素622-2によって保持されていてもよい。連続的な閾値をこえる連続的な数のポーリングの反復について受信されているパケットの数が0であるということを、キュー構成要素622-1が決定した場合には、増加構成要素622-2は、少なくとも1である計数だけアイドル計数を増加させてもよい。アイドル計数は、(例えば、LUTの中でといったように)アイドル計数625-cの中で増加構成要素622-2によって保持されていてもよい。
いくつかの例において、装置600は、パフォーマンス構成要素622-3を含んでもよい。パフォーマンス構成要素622-3は、回路620によって実行されて、トレンド計数がトレンド計数閾値をこえているか否かに基づいて、OS電力管理モジュールにパフォーマンス指標640を送信してもよい。パフォーマンス指標640は、OS電力管理モジュールが、DPDKポーリングスレッドを実行する処理要素のパフォーマンス状態を増加させることを可能としてもよい。これらの例では、上記のトレンド計数閾値は、(例えば、LUTの中でといったように)トレンド計数閾値626-dの中でパフォーマンス構成要素622-3によって保持されていてもよい。
いくつかの例によれば、連続的な閾値をこえる連続的な数のポーリングの反復の間、その受信キューがほぼ充足しているとキュー構成要素622-1によって決定されたことに応答して、パフォーマンス構成要素622-3は、OS電力管理モジュールに高いパフォーマンス指標を送ってもよい。その高いパフォーマンス指標645は、OS電力管理モジュールが、処理要素の動作周波数を最も高い動作周波数に増加させることにより、その処理要素のパフォーマンス状態を最も高いパフォーマンス状態に増加させることを可能としてもよい。これらの例では、上記の連続的な閾値は、(例えば、LUTの中でといったように)連続的な閾値627-eの中でパフォーマンス構成要素622-3によって保持されていてもよい。
いくつかの例において、装置600は、スリープ構成要素622-4を含んでいてもよい。スリープ構成要素622-4は、回路620によって実行されてもよい。増加構成要素622-2によって増加されアイドル計数625-cによって保持されるアイドル計数が、(例えば、LUTの中でといったように)アイドル計数閾値630-hの中でスリープ構成要素622-4によって保持される第1のアイドル計数閾値をこえるか又は第1のアイドル計数閾値よりも小さいかに基づいて、スリープ構成要素622-4は、第1の時間期間又は第2の時間期間のうちの一方の間、DPDKポーリングスレッドをスリープ状態にさせてもよい。これらの例では、第2の時間期間は、第1の時間期間よりも長くてもよい。スリープ615は、DPDKポーリングスレッドをスリープ状態にさせる命令又はコマンドを含んでいてもよい。
いくつかの例によれば、スリープ構成要素622-4は、アイドル計数が第1のアイドル計数閾値をこえたことに基づいて、第2の時間期間の間、DPDKポーリングスレッドをスリープ状態にさせてもよく、OS電力管理モジュールに長いスリープ指標650を送ってもよい。長いスリープ指標650は、OS電力管理モジュールが、最大で第2の時間期間までの間、DPDKポーリングスレッドを実行する処理要素をスリープモードに置くことを可能としてもよい。
いくつかの例によれば、装置600は、割込み制御構成要素622-5を含んでもよい。割込み制御構成要素622-4は、回路620によって実行されて、増加構成要素622-2によって増加されたアイドル計数が、アイドル計数閾値630-hを用いてスリープ構成要素622-5によって保持されている第2のアイドル計数閾値をこえているか否かに基づいて、ワンショット(単発の)Rx割込みを有効にするように、NW I/Oデバイスにメッセージを送信してもよい。これらの例では、上記のメッセージは、ワンショットRx割込み635の中に含まれてもよい。
装置600は、タイマ構成要素622-6を含んでもよい。タイマ構成要素622-6は、回路620によって実行されて、(例えば、LUTの中でといったように)タイマ期間632-jの中でタイマ構成要素622-6によって保持されているタイマ期間を有するタイマを開始してもよい。
いくつかの例において、タイマ構成要素622-6によって開始されたタイマが終了したことに応答して、スリープ構成要素622-4は、そのタイマ期間の間にDPDKポーリングスレッドがスリープ状態にあった反復のパーセンテイジを決定してもよい。そのパーセンテイジは、スリープ情報631-iを使用してスリープ構成要素622-4によって保持されてもよい。これらの例では、上記のパーセンテイジがパーセンテイジ閾値よりも大きいか否かに基づいて、パフォーマンス構成要素622-3は、OS電力管理モジュールにパフォーマンス指標640を送ってもよい。パフォーマンス指標640は、OS電力管理モジュールが、処理要素のパフォーマンス状態を下げることを可能としてもよく、処理要素のパフォーマンス状態を下げることは、その処理要素の動作周波数を減少させること又はその処理要素の動作電圧を減少させることを含んでもよい。上記の決定に使用されるパーセンテイジ閾値は、(例えば、LUTの中でといったように)パーセンテイジ閾値628-fを使用してパフォーマンス構成要素622-3によって保持されてもよい。
いくつかの例によれば、タイマ構成要素622-6によって開始されたタイマが終了したことに応答して、キュー構成要素622-1は、そのタイマ期間の間に、受信キューで受信したパケットについての平均の反復ごとのパケット数を決定してもよい。キュー構成要素622-1によって決定されたその平均の反復ごとのパケット数は、Rxキュー情報623-aを使用して(の中で)保持されていてもよい。これらの例では、パフォーマンス構成要素622-3は、平均の反復ごとのパケット数がパケット平均閾値よりも大きいか否かに基づいて、OS電力管理モジュールにパフォーマンス指標640を送ってもよい。パフォーマンス指標640は、OS電力管理モジュールが、その処理要素のパフォーマンス状態を下げることを可能としてもよく、その処理要素のパフォーマンス状態を下げることは、その処理要素の動作周波数を減少させることを含んでもよい。パケット平均閾値は、(例えば、LUTの中でといったように)平均閾値629-gを使用してパフォーマンス構成要素622-3によって保持されてもよい。
装置600のさまざまな構成要素及び装置600を実装するデバイス、ノード、又は論理サーバは、さまざまなタイプの通信媒体によって互いに通信可能に接続され、複数の動作を調整してもよい。それらの調整は、情報の一方向性の交換又は双方向の交換を伴ってもよい。例えば、上記の構成要素は、通信媒体を介して通信される信号の形態で情報を通信してもよい。その情報は、さまざまな信号線に割り当てられた信号として実装されてもよい。そのような割り当てにおいては、各々のメッセージが信号そのものであってもよい。しかしながら、さらなる実施形態は、代替的に、データメッセージを採用してもよい。そのようなデータメッセージは、さまざまな接続を介して送られてもよい。例示的な接続は、パラレルインターフェイス、シリアルインターフェイス、及びバスインターフェイスを含んでもよい。
本明細書には、開示されたアーキテクチャの新しい態様を実行するための複数の例示的な方法を表す論理フローのセットが含まれている。説明を簡単にするために、1つ又は複数の方法が、一連の動作として示されまた説明されるが、当業者は、上記の1つ又は複数の方法がそれらの動作の順序によっては限定されないということを理解し正しく認識するであろう。上記のことにしたがって、これらの動作のうちのいくつかは、本明細書において示されそして説明された順序と異なる順序で行われてもよく、及び/又は他の動作と同時に行われてもよい。例えば、当業者は、ある方法が、状態図におけるように一連の相互に関連する状態又はイベントとして代替的にあらわされてもよいということを理解し正しく認識するであろう。さらに、ある方法の中で説明されたすべての動作が、新しい実装を必要としなくてもよい。
ある1つの論理フローは、ソフトウェア、ファームウェア、及び/又はハードウェアによって実装されてもよい。ソフトウェア及びファームウェアの実施形態においては、光記憶装置、磁気記憶装置、又は半導体記憶装置等の少なくとも1つの非一時的コンピュータ読み取り可能な媒体又は機械読み取り可能な媒体に格納されているコンピュータ実行可能な命令によって、ある1つの論理フローを実装してもよい。これらの実施形態は、上記の文脈には限定されない。
図7は、第2の論理フローの1つの例を図示している。図7に示されているように、第2の論理フローの例は、論理フロー700を含む。論理フロー700は、装置600等の本明細書で説明された1つ又は複数のロジック、特徴、又はデバイスによって実行される動作のいくつか又はすべてを表していてもよい。より具体的には、少なくとも、キュー構成要素622-1、増加構成要素622-2、又はパフォーマンス構成要素622-3によって論理フロー700を実装してもよい。
いくつかの例によれば、論理フロー700は、ブロック702において、DPDKポーリングスレッドのための複数のポーリングの反復にわたって、NW I/Oデバイスのための受信キューに保持されている利用可能な受信したパケット記述子をモニタリングしてもよい。これらの例では、キュー構成要素622-1が、その受信キューをモニタリングしてもよい。
いくつかの例において、論理フロー700は、ブロック704において、各々のポーリングの反復の後に、その受信キューに保持されている利用可能なパケット記述子に基づいて、その受信キューの充足のレベルを決定してもよい。これらの例では、キュー構成要素622-1が、充足のレベルを決定してもよい。
いくつかの例によれば、論理フロー700は、ブロック706において、その受信キューの充足のレベルに基づいて、トレンド計数を増加させてもよい。これらの例では、増加構成要素622-2が、トレンド計数を増加させてもよい。
いくつかの例において、論理フロー700は、ブロック708において、トレンド計数がトレンド計数閾値をこえているか否かに基づいて、OS電力管理モジュールにパフォーマンス指標を送ってもよく、そのパフォーマンス指標は、OS電力管理モジュールが、DPDKポーリングスレッドを実行する処理要素のパフォーマンス状態を増加させることを可能としてもよい。これらの例では、パフォーマンス構成要素622-3が、パフォーマンス指標を送ってもよい。
図8は、第3の論理フローの1つの例を図示している。図8に示されているように、第3の論理フローの上記の例は、論理フロー800を含んでいる。論理フロー800は、装置600等の本明細書で説明された1つ又は複数のロジック、特徴、又はデバイスによって実行される動作のいくつか又はすべてを表していてもよい。より具体的には、少なくとも、キュー構成要素622-1、増加構成要素622-2、又はスリープ構成要素622-4によって論理フロー800を実装してもよい。
いくつかの例によれば、論理フロー800は、ブロック802において、DPDKポーリングスレッドのための複数のポーリングの反復にわたって、NW I/Oデバイスのための受信キューに保持されている利用可能な受信したパケット記述子をモニタリングしてもよい。これらの例では、キュー構成要素622-1が、その受信キューをモニタリングしてもよい。
いくつかの例において、論理フロー800は、ブロック804において、各々のポーリングの反復の後に、その受信キューに保持されている利用可能なパケット記述子に基づいて、各々のポーリングの反復についてその受信キューで受信したパケットの数を決定してもよい。これらの例においては、キュー構成要素622-1が、その受信キューで受信したパケットの数を決定してもよい。
いくつかの例によれば、論理フロー800は、ブロック806において、連続的な閾値をこえる連続的な数のポーリングの反復について受信したパケットの数が0である場合には、1である計数だけアイドル計数を増加させてもよい。これらの例では、増加構成要素622-2が、そのアイドル計数を増加させてもよい。
いくつかの例において、論理フロー800は、ブロック808において、アイドル計数が第1のアイドル計数閾値を超えているか又は第1のアイドル計数閾値よりも小さいかに基づいて、第1の時間期間又は第2の時間期間のうちの一方の間、DPDKポーリングスレッドをスリープ状態にさせてもよく、第2の時間期間は、第1の時間期間よりも長い。これらの例では、スリープ構成要素622-4が、DPDKポーリングスレッドをスリープ状態にさせてもよい。
図9は、記憶媒体900の1つの例を図示している。図9に示されているように、第1の記憶媒体は、記憶媒体900を含む。記憶媒体900は、製品を含んでもよい。いくつかの例では、記憶媒体900は、光記憶装置、磁気記憶装置、又は半導体記憶装置等のいずれかの非一時的なコンピュータ読み取り可能な媒体又は機械読み取り可能な媒体を含んでもよい。記憶媒体900は、論理フロー700又は論理フロー800を実装するための命令等のさまざまなタイプのコンピュータ実行可能な命令を格納していてもよい。コンピュータ読み取り可能な記憶媒体又は機械読み取り可能な記憶媒体の例は、電子データを格納することが可能であるいずれかの有体的な媒体を含んでもよく、それらの有体的な媒体は、揮発性メモリ又は不揮発性メモリ、取り外し可能なメモリ又は取り外し可能でないメモリ、消去可能なメモリまたは消去可能でないメモリ、書き込み可能なメモリ又は再書き込み可能なメモリ等を含んでもよい。コンピュータ実行可能な命令の例は、ソースコード、コンパイルされたコード、解釈されたコード、実行可能なコード、スタティックコード、ダイナミックコード、オブジェクト指向のコード、視覚的コード等のいずれかの適切なタイプのコードを含んでもよい。これらの例は、上記の文脈には限定されない。
図10は、コンピューティングプラットフォーム1000の1つの例を図示している。いくつかの例では、図10に示されているように、コンピューティングプラットフォーム1000は、処理構成要素1040、他のプラットフォーム構成要素1050又は通信インターフェイス1060を含んでもよい。いくつかの例によれば、コンピューティングプラットフォーム1000は、(例えば、DPDK電力管理構成要素及びOS電力管理モジュール等の)電力管理要素及び/又はパフォーマンス管理要素を収容してもよく、これらの電力管理要素及び/又はパフォーマンス管理要素は、図1のシステム100等のDPDKポーリングスレッドを有するシステムに電力管理機能及び/又はパフォーマンス管理機能を提供してもよい。コンピューティングプラットフォーム1000は、単一の物理ネットワークデバイスであってもよく又は構成された論理ネットワークデバイスであってもよく、構成された論理ネットワークデバイスは、データセンターの中に展開されている構成可能なコンピューティングリソースの共有のプールから構成される複数の分散された物理的構成要素又は複数の要素の組み合わせを含んでもよい。
いくつかの例によれば、処理構成要素1040は、装置600及び/又は記憶媒体900のための処理動作又はロジックを実行してもよい。処理構成要素1040は、さまざまなハードウェア要素、ソフトウェア要素、又は双方の組み合わせを含んでもよい。ハードウェア要素の例は、デバイス、論理デバイス、構成要素、プロセッサ、マイクロプロセッサ、回路、プロセッサ回路、(例えば、トランジスタ、抵抗器、キャパシタンス、インダクタンス、その他同様の素子等の)回路素子、集積回路、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、ディジタル信号プロセッサ(DSP)、フィールドプログラマブルゲートアレイ(FPGA)、メモリユニット、論理ゲート、レジスタ、半導体デバイス、チップ、マイクロチップ、チップセット、及びその他同様のものを含んでもよい。ソフトウェア要素の例は、ソフトウェア構成要素、プログラム、アプリケーション、コンピュータプログラム、アプリケーションプログラム、デバイスドライバ、システムプログラム、ソフトウェア開発プログラム、機械プログラム、オペレーティングシステムソフトウェア、ミドルウェア、ファームウェア、ソフトウェアモジュール、ルーティン、サブルーティン、機能、方法、手順、ソフトウェアインターフェイス、アプリケーションプログラミングインターフェイス(API)、命令セット、コンピューティングコード、コンピュータコード、コードセグメント、コンピュータコードセグメント、ワード、値、シンボル、又はこれらのいずれかの組み合わせを含んでもよい。ある実施形態がハードウェア要素及び/又はソフトウェア要素を使用して実装されるべきか否かについての決定は、ある与えられた実装のための要求に応じて、望ましい計算速度、電力レベル、熱耐性、処理サイクル割当量、入力データレート、出力データレート、メモリリソース、データバス速度、及び他の設計上の制約又は性能上の制約等のある数の因子にしたがって変化してもよい。
いくつかの例においては、他のプラットフォーム構成要素1050は、1つ又は複数のプロセッサ、マルチコアプロセッサ、コプロセッサ、メモリユニット、チップセット、コントローラ、周辺機器、インターフェイス、発振器、タイミングデバイス、ビデオカード、オーディオカード、(例えば、ディジタルディスプレイ等の)マルチメディア入力/出力(I/O)構成要素、電源、及びその他同様のもの等の共通のコンピューティング要素を含んでもよい。メモリユニットの例は、これらに限定されるわけではないが、リードオンリーメモリ(ROM)、ランダムアクセスメモリ(RAM)、ダイナミックRAM(DRAM)、ダブルデータレートDRAM(DDRAM)、同期DRAM(SDRAM)、スタティックRAM(SRAM)、プログラマブルROM(PROM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、フラッシュメモリ、強誘電性高分子メモリ素子、オボニックメモリ、相変化又は強誘電性メモリ、シリコン−酸化物−窒化物−酸化物−シリコン(SONOS)構造を有するメモリ等の高分子メモリ素子、磁気カード又は光カード、個別ディスクからなる冗長アレイ(RAID)デバイス等のデバイスのアレイ、(例えば、USBメモリ、ソリッドステイトデバイス(SSD)等の)ソリッドステイトメモリデバイス、及び情報を格納するのに適しているいずれかの他のタイプの記憶媒体等の1つ又は複数の高速メモリユニットの形態のさまざまなタイプのコンピュータ読み取り可能な記憶媒体及び機械読み取り可能な記憶媒体を含んでもよい。
いくつかの例において、通信インターフェイス1060は、通信インターフェイスをサポートするロジック及び/又は特徴を含んでもよい。これらの例では、通信インターフェイス1060は、1つ又は複数の通信インターフェイスを含んでもよく、それらの1つ又は複数の通信インターフェイスは、さまざまな通信プロトコル又は通信規格にしたがって動作して、ネットワーク通信リンクを介して又は直接通信してもよい。直接通信は、複数の通信プロトコル又は通信規格を使用することにより行われてもよく、それらの通信プロトコル又は通信規格は、PCIe仕様と関連する業界標準等の(後継規格及び変更規格を含めて)1つ又は複数の業界標準の中で説明されている。ネットワーク通信は、複数の通信プロトコル又は通信規格を使用することにより行われてもよく、それらの通信プロトコル又は通信規格は、米国電気電子通信学会(IEEE)によって広められた1つ又は複数のイーサネット(登録商標)規格の中で説明されているプロトコル又は規格であってもよい。例えば、そのようなイーサネット規格のうちの1つは、IEEE802.3であってもよい。ネットワーク通信は、オープンフローハードウェア抽象化API仕様等の1つ又は複数のオープンフロー仕様に従って行われてもよい。ネットワーク通信は、インフィニバンドアーキテクチャ仕様又はTCP/IPプロトコルにしたがって行われてもよい。
上記のように、単一のネットワークデバイスの中で或いは論理的なネットワークデバイスの中でコンピューティングプラットフォーム1000を実装してもよく、論理的なネットワークデバイスは、構成可能なコンピューティングリソースの共有のプールから構成される複数の分散された物理構成要素又は複数の要素からなってもよい。したがって、物理ネットワークデバイス又は論理的なネットワークデバイスに対する適切な要求に応じて、コンピューティングプラットフォーム1000のさまざまな実施形態の中に、本明細書で説明されたコンピューティングプラットフォーム1000の機能及び/又は特定の構成を含めてもよく又は省略してもよい。
個別の回路、特定用途向け集積回路(ASIS)、ロジックゲート及び/又は単一チップアーキテクチャのいずれかの組み合わせを使用して、コンピューティングプラットフォーム1000の構成要素及び特徴を実装してもよい。さらに、マイクロコントローラ、プログラマブル論理アレイ、及び/又はマイクロプロセッサ、又は上記の構成要素のいずれかの組み合わせを使用して、コンピューティングプラットフォーム1000の特徴を実装してもよい。本明細書においては、ハードウェア要素、ファームウェア要素、及び/又はソフトウェア要素を、集合的に又は個々に、"ロジック"又は"回路"と称してもよいということに留意すべきである。
図10のブロック図で示される例示的なコンピューティングプラットフォーム1000は、多くの可能性のある実装のうちの機能的に説明される1つの例を表していてもよいということを理解すべきである。したがって、添付の図面に示されている複数のブロック機能を分割し、省略し、又は含めることは、これらの機能を実装するためのハードウェア構成要素、回路、ソフトウェア、及び/又は要素を、複数の実施形態において必然的に分割し、省略し、又は含めるであろうということを示唆するものではない。
少なくとも1つの機械読み取り可能な媒体に格納されている複数の表現的な命令によって、少なくとも1つの例の1つ又は複数の態様を実装してもよく、それらの複数の表現的な命令は、プロセッサの中でさまざまなロジックを表現し、機械、コンピューティングデバイス、又はシステムによって読み取られると、本明細書において説明された複数の技術を実行するロジックを、その機械、コンピューティングデバイス、又はシステムに構成させてもよい。"IPコア"として知られているそのような表現を、有体的な機械読み取り可能な媒体に格納してもよく、そして、それらの表現をさまざまな顧客の設備又は生産設備に提供して、製造機械にロードしてもよく、それらの製造機械は、上記のロジック又はプロセッサを実際に作成してもよい。
複数のハードウェア要素、ソフトウェア要素、又は双方の組み合わせを使用して、さまざまな例を実装してもよい。いくつかの例では、ハードウェア要素は、デバイス、構成要素、プロセッサ、マイクロプロセッサ、回路、(例えば、トランジスタ、抵抗器、キャパシタンス、インダクタンス、その他同様の素子等の)回路素子、集積回路、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、ディジタル信号プロセッサ(DSP)、フィールドプログラマブルゲートアレイ(FPGA)、メモリユニット、論理ゲート、レジスタ、半導体デバイス、チップ、マイクロチップ、チップセット、及びその他同様のものを含んでもよい。いくつかの例では、ソフトウェア要素は、ソフトウェア構成要素、プログラム、アプリケーション、コンピュータプログラム、アプリケーションプログラム、システムプログラム、機械プログラム、オペレーティングシステムソフトウェア、ミドルウェア、ファームウェア、ソフトウェアモジュール、ルーティン、サブルーティン、機能、方法、手順、ソフトウェアインターフェイス、アプリケーションプログラミングインターフェイス(API)、命令セット、コンピューティングコード、コンピュータコード、コードセグメント、コンピュータコードセグメント、ワード、値、シンボル、又はこれらのいずれかの組み合わせを含んでもよい。ある実施形態がハードウェア要素及び/又はソフトウェア要素を使用して実装されるべきか否かに関する決定は、ある与えられた実装のための要求に応じて、望ましい計算速度、電力レベル、熱耐性、処理サイクル割当量、入力データレート、出力データレート、メモリリソース、データバス速度、及び他の設計上の制約又は性能上の制約等のある数の因子にしたがって変化してもよい。
いくつかの例は、製品又は少なくとも1つのコンピュータ読み取り可能な媒体を含んでもよい。コンピュータ読み取り可能な媒体は、ロジックを格納する非一時的な記憶媒体を含んでもよい。いくつかの例では、非一時的な記憶媒体は、電子データを格納することが可能である1つ又は複数のタイプのコンピュータ読み取り可能な記憶媒体を含んでもよく、それらのコンピュータ読み取り可能な記憶媒体は、揮発性メモリ、不揮発性メモリ、取り外し可能なメモリ、取り外し可能でないメモリ、消去可能なメモリ、消去可能でないメモリ、書き込み可能なメモリ、又は再書き込み可能なメモリ等を含んでもよい。いくつかの例では、ロジックは、ソフトウェア構成要素、プログラム、アプリケーション、コンピュータプログラム、アプリケーションプログラム、システムプログラム、機械プログラム、オペレーティングシステムソフトウェア、ミドルウェア、ファームウェア、ソフトウェアモジュール、ルーティン、サブルーティン、機能、方法、手順、ソフトウェアインターフェイス、アプリケーションプログラミングインターフェイス(API)、命令セット、コンピューティングコード、コンピュータコード、コードセグメント、コンピュータコードセグメント、ワード、値、シンボル、又はこれらのいずれかの組み合わせ等のさまざまなソフトウェア要素を含んでもよい。
いくつかの例によれば、コンピュータ読み取り可能な記憶媒体は、非一時的な記憶媒体を含んでもよく、その非一時的な記憶媒体は、複数の命令を格納又は保持し、それらの複数の命令は、機械、コンピューティングデバイス、又はシステムによって実行されると、説明された複数の例に従って複数の方法及び/又は動作を、その機械、コンピューティングデバイス、又はシステムに実行させてもよい。これらの複数の命令は、ソースコード、コンパイルされたコード、解釈されたコード、実行可能なコード、スタティックコード、ダイナミックコード等のいずれかの適切なタイプのコードを含んでもよい。ある機能を実行するように機械、コンピューティングデバイス、又はシステムに指示するためのあらかじめ定義されたコンピュータ言語、様式、又は構文にしたがって、上記の複数の命令を実装してもよい。いずれかの適切なハイレベルプログラミング言語、低レベルプログラミング言語、オブジェクト指向のプログラミング言語、視覚的なプログラミング言語、コンパイルされたプログラミング言語、及び/又は解釈されたプログラミング言語を使用して、上記の複数の命令を実装してもよい。
"1つの例(one example)"又は"ある例(an example)"との表現とともにそれらの派生語を使用していくつかの例を説明してもよい。これらの語は、少なくとも1つの例の中に、その例に関連して説明されたある特定の特徴、構成、又は特性が含まれるということを意味する。本明細書の中のさまざまな場所で"1つの例において(in one example)"との記載が出現した場合には、必ずしも、これらのすべてが、その同一の例に言及しているわけではない。
"結合された(coupled)"及び"接続された(connected)"との表現とともにそれらの派生語を使用して、いくつかの例を説明してもよい。これらの語は、必ずしも、互いに対する同義語であると意図されているわけではない。例えば、"結合された"及び/又は"接続された"を使用する説明は、2つ又はそれ以上の要素が、互いに物理的な又は電気的な直接的な接触状態にあるということを示してもよい。しかしながら、"結合された"の語は、2つ又はそれ以上の要素が、互いに直接的な接触状態にはないが、互いと協働し又は相互作用をするということを意味してもよい。
以下の例は、本明細書で開示された複数の例のうちの追加的な例に関している。
例1:1つの例示的な装置は、ホストコンピューティングプラットフォームに位置する回路及びキュー構成要素を含んでもよく、そのキュー構成要素は、その回路によって実行されて、DPDKポーリングスレッドのための複数のポーリングの反復にわたって、NW I/Oデバイスのための受信キューに保持されている利用可能な受信したパケット記述子をモニタリングしてもよい。そのキュー構成要素は、各々のポーリングの反復の後に、その受信キューに保持されている利用可能なパケット記述子に基づいて、その受信キューについての充足のレベルを決定してもよい。上記の装置は、増加構成要素を含んでもよく、その増加構成要素は、上記の回路によって実行されて、各々のポーリングの反復の後に、その受信キューについての充足のレベルに基づいて、トレンド計数を増加させてもよい。上記の装置は、パフォーマンス構成要素を含んでもよく、そのパフォーマンス構成要素は、上記の回路によって実行されて、トレンド計数がトレンド計数閾値をこえるか否かに基づいて、OS電力管理モジュールにパフォーマンス指標を送ってもよい。パフォーマンス指標は、OS電力管理モジュールが、DPDKポーリングスレッドを実行している処理要素のパフォーマンス状態を増加させることを可能としてもよい。
例2:例1の装置において、OS電力管理モジュールが処理要素のパフォーマンス状態を増加させることが可能であるということは、そのOS電力管理モジュールが、その処理要素の動作周波数を増加させるようにすること可能であるということを含んでもよい。
例3:例1の装置において、キュー構成要素によって決定される充足のレベルは、ほぼ空、半分充足している、又はほぼ充足しているのうちの1つを含んでもよい。
例4:例3の装置において、増加構成要素は、キュー構成要素が充足のレベルをほぼ空であると決定した場合には、小さな数だけ、或いは、キュー構成要素が充足のレベルを半分充足していると決定した場合には、大きな数だけ、トレンド計数を増加させてもよく、大きな数は、小さな数の概ね100倍の数である。
例5:例3の装置は、キュー構成要素により受信キューがほぼ充足していると決定されるポーリングの反復の連続的な数が、連続的な閾値をこえるということに応答して、パフォーマンス構成要素が、OS電力管理モジュールに高いパフォーマンス指標を送ることを含んでもよい。高いパフォーマンス指標は、OS電力管理モジュールが、処理要素の動作周波数を最も高い動作周波数に増加させるようにすることによって、処理要素のパフォーマンス状態を最も高いパフォーマンス状態に増加させるようにすることを可能としてもよい。
例5-1:例3の装置において、ほぼ空であるは、25%乃至50%充足しているレベルであってもよく、半分充足しているは、51%乃至75%充足しているレベルであってもよく、ほぼ充足しているは、75%よりも大きなパーセンテイジ充足しているレベルであってもよい。
例6:例1の装置において、OS電力管理モジュールは、拡張構成及び電力インターフェイス(ACPI)仕様書改訂5.1版を含む1つ又は複数の業界標準にしたがって、処理要素のパフォーマンス状態を増加させることが可能であってもよい。これらの例では、OS電力管理モジュールは、処理要素のパフォーマンス状態をPn-1パフォーマンス状態に入るように増加させることが可能であってもよく、"n"は、結果として、処理要素の最も低い動作周波数につながる最も低いパフォーマンス状態を表している。
例7:例1の装置は、キュー構成要素が、各々のポーリングの反復の後に、受信キューに保持されている利用可能なパケット記述子に基づいて、各々のポーリングの反復について受信キューで受信したパケットの数を決定することを含んでもよい。連続的な閾値をこえる連続的な数のポーリングの反復の間に受信したパケットの数が0である場合に、増加構成要素は、アイドル計数を1である計数だけ増加させてもよい。当該装置は、スリープ構成要素を含んでもよく、スリープ構成要素は、回路によって実行され、アイドル計数が第1のアイドル計数閾値をこえるか又は第1のアイドル計数閾値よりも小さいかに基づいて、第1の時間期間又は第2の時間期間のうちの一方の間、DPDKポーリングスレッドをスリープ状態にさせてもよい。これらの例では、第2の時間期間は、第1の時間期間よりも長い。
例8:例7の装置は、割込み制御構成要素を含んでもよく、割込み制御構成要素は、回路によって実行され、アイドル計数が第2のアイドル計数閾値をこえるか否かに基づいて、NW I/Oデバイスに割込みターンオンメッセージを送ってもよく、割込みターンオンメッセージは、単発の受信(Rx)割込みを有効にしてもよい。
例9:例7の装置において、スリープ構成要素は、アイドル計数が第1のアイドル計数閾値をこえたことに基づいて、DPDKポーリングスレッドを第2の時間期間の間スリープ状態にさせ、OS電力管理モジュールに長いスリープ指標を送ってもよい。長いスリープ指標は、OS電力管理モジュールが、最大で第2の時間期間までの間、DPDKポーリングスレッドを実行する処理要素をスリープモードに置くようにさせることを可能としてもよい。
例10:例9の装置は、タイマ構成要素を含んでもよく、タイマ構成要素は、回路によって実行され、タイマ期間を有するタイマを開始してもよい。タイマが終了したことに応答して、スリープ構成要素は、タイマ期間の間にDPDKポーリングスレッドがスリープ状態であったポーリングの反復のパーセンテイジを決定してもよい。パーセンテイジがパーセンテイジ閾値よりも大きいか否かに基づいて、パフォーマンス構成要素は、OS電力管理モジュールにパフォーマンス指標を送ってもよい。パフォーマンス指標は、OS電力管理モジュールが、処理要素のパフォーマンス状態を下げることを可能としてもよく、処理要素のパフォーマンス状態を下げることは、処理要素の動作周波数を減少させること又は動作電圧を減少させることを含んでもよい。
例11:例9の装置は、タイマ構成要素を含んでもよく、タイマ構成要素は、回路によって実行され、タイマ期間を有するタイマを開始してもよい。タイマが終了したことに応答して、キュー構成要素は、タイマ期間の間に受信キューで受信したパケットについて平均の反復ごとのパケット数を決定してもよい。平均の反復ごとのパケット数がパケット平均閾値よりも小さいか否かに基づいて、パフォーマンス構成要素は、OS電力管理モジュールにパフォーマンス指標を送ってもよい。パフォーマンス指標は、OS電力管理モジュールが、処理要素のパフォーマンス状態を下げることを可能としてもよく、処理要素のパフォーマンス状態を下げることは、処理要素の動作周波数を下げることを含んでもよい。
例12:例9の装置において、OS電力管理モジュールは、拡張構成及び電力インターフェイス(ACPI)仕様書改訂5.0版を含む1つ又は複数の業界標準にしたがって、処理要素をスリープモードに置くことが可能であってもよい。これらの例では、OS電力管理モジュールは、スリープ指標に応答して、処理要素を少なくともC1プロセッサ電力状態にすることによって処理要素をスリープモードに置くようにしてもよい。
例13:例7の装置において、連続的な閾値は、5回の反復であってもよく、各々のポーリングの反復は、おおむね1[μs]ごとに行われてもよい。
例14:例13の装置において、スリープ指標は、アイドル計数が第1のアイドル計数閾値よりも小さいということを示し、スリープ指標は、DPDKポーリングスレッドを第1の時間期間の間スリープ状態にしてもよい。これらの例では、第1の時間期間は、おおむね5回のポーリングの反復の間持続してもよい。
例15:例13の装置において、スリープ指標は、アイドル計数が第1のアイドル計数閾値をこえているということを示し、スリープ指標は、DPDKポーリングスレッドを第2の時間期間の間スリープ状態にしてもよい。これらの例では、第2の時間期間は、おおむね50回のポーリングの反復の間持続してもよい。
例16:例1の装置において、処理要素は、マルチコアプロセッサのコア又はマルチコアプロセッサの1つ又は複数のコアによってサポートされる仮想機械のうちの一方を含んでもよい。
例17:例1の装置において、DPDKポーリングスレッドは、ネットワークパケット処理アプリケーションを実行することが可能であってもよく、ネットワークパケット処理アプリケーションは、NW I/Oデバイスで受信したパケットを処理してもよい。ネットワークパケット処理アプリケーションは、ファイアウォールアプリケーション、仮想私設ネットワーク(VPN)アプリケーション、ネットワークアドレス変換(NAT)アプリケーション、ディープパケットインスペクション(DPI)アプリケーション、又は負荷バランサアプリケーションのうちの1つを含んでもよい。
例18:例1の装置は、回路に接続され、ユーザインタフェイスビューを提示するディジタルディスプレイを含んでもよい。
例19:1つの例示的な方法は、DPDKポーリングスレッドのための複数のポーリングの反復にわたって、NW I/Oデバイスのための受信キューに保持されている利用可能な受信したパケット記述子をモニタリングするステップを含んでもよい。上記の方法は、また、各々のポーリングの反復の後に、受信キューに保持されている利用可能なパケット記述子に基づいて、受信キューについての充足のレベルを決定するステップを含んでもよい。上記の方法は、さらに、受信キューについての充足のレベルに基づいてトレンド計数を増加させるステップを含んでもよい。上記の方法は、さらに、トレンド計数がトレンド計数閾値をこえるか否かに基づいて、OS電力管理モジュールにパフォーマンス指標を送るステップとを含んでもよい。パフォーマンス指標は、OS電力管理モジュールが、DPDKポーリングスレッドを実行する処理要素のパフォーマンス状態を増加させることを可能としてもよい。
例20:例19の方法において、OS電力管理モジュールが処理要素のパフォーマンス状態を増加させることは、OS電力管理モジュールが処理要素の動作周波数を増加させることを可能とすることを含んでもよい。
例21:例19の方法において、充足のレベルは、ほぼ空である、半分充足している、又はほぼ充足しているのうちの1つを含んでもよい。
例22:例21の方法において、充足のレベルがほぼ空である場合には、小さな数だけ、或いは、充足のレベルが半分充足している場合には、大きな数だけ、トレンド計数を増加させるステップを含んでもよい。これらの例では、大きな数は、小さな数の概ね100倍の数であってもよい。
例23:例21の方法は、受信キューがほぼ充足していると決定されるポーリングの反復の連続的な数が連続的な閾値をこえるということに応答して、OS電力管理モジュールに高いパフォーマンス指標を送るステップを含んでもよい。高いパフォーマンス指標は、OS電力管理モジュールが、処理要素のパフォーマンス状態を最も高いパフォーマンス状態に増加させることを可能としてもよく、最も高いパフォーマンス状態に増加させることは、処理要素の動作周波数を最も高い動作周波数に増加させることを含んでもよい。
例24:例21の方法において、ほぼ空であるは、25%乃至50%充足しているレベルであってもよく、半分充足しているは、51%乃至75%充足しているレベルであってもよく、ほぼ充足しているは、75%よりも大きなパーセンテイジ充足しているレベルであってもよい。
例25:例19の方法において、OS電力管理モジュールは、拡張構成及び電力インターフェイス(ACPI)仕様書改訂5.0版を含む1つ又は複数の業界標準にしたがって、処理要素のパフォーマンス状態を増加させることが可能であってもよい。これらの例では、OS電力管理モジュールは、処理要素のパフォーマンス状態をPn-1パフォーマンス状態に入るように増加させることが可能であってもよく、"n"は、結果として、処理要素の最も低い動作周波数につながる最も低いパフォーマンス状態を表している。
例26:例17の方法において、処理要素は、マルチコアプロセッサのコア又はマルチコアプロセッサの1つ又は複数のコアによってサポートされる仮想機械のうちの一方を含んでもよい。
例27:例19の方法において、DPDKポーリングスレッドは、ネットワークパケット処理アプリケーションを実行することが可能であってもよく、ネットワークパケット処理アプリケーションは、NW I/Oデバイスで受信したパケットを処理してもよい。ネットワークパケット処理アプリケーションは、ファイアウォールアプリケーション、仮想私設ネットワーク(VPN)アプリケーション、ネットワークアドレス変換(NAT)アプリケーション、ディープパケットインスペクション(DPI)アプリケーション、又は負荷バランサアプリケーションのうちの1つを含んでもよい。
例28:少なくとも1つの機械読み取り可能な媒体の1つの例は、複数の命令を含んでもよく、それらの複数の命令は、システムによって実行されたことに応答して、例19乃至例27のうちのいずれか1つにしたがった方法をそのシステムに実行させてもよい。
例29:装置は、例19乃至例27のうちのいずれか1つの方法を実行する手段を含んでもよい。
例30:少なくとも1つの機械読み取り可能な媒体の1つの例は、複数の命令を含んでもよく、それらの複数の命令は、ホストコンピューティングプラットフォームに位置するシステムで実行されたことに応答して、そのシステムに、DPDKポーリングスレッドのための複数のポーリングの反復にわたって、NW I/Oデバイスのための受信キューに保持されている利用可能な受信したパケット記述子をモニタリングさせてもよい。上記の複数の命令は、さらに、各々のポーリングの反復の後に、受信キューに保持されている利用可能なパケット記述子に基づいて、そのシステムに、受信キューについての充足のレベルを決定させてもよい。上記の複数の命令は、また、そのシステムに、受信キューについての充足のレベルに基づいてトレンド計数を増加させ、そのトレンド計数がトレンド計数閾値をこえるか否かに基づいて、OS電力管理モジュールにパフォーマンス指標を送らせてもよい。パフォーマンス指標は、OS電力管理モジュールが、DPDKポーリングスレッドを実行する処理要素のパフォーマンス状態を増加させることを可能としてもよい。
例31:例30の少なくとも1つの機械読み取り可能な媒体において、OS電力管理モジュールが処理要素のパフォーマンス状態を増加させることは、OS電力管理モジュールが処理要素の動作周波数を増加させることを可能とすることを含んでもよい。
例32:例30の少なくとも1つの機械読み取り可能な媒体において、充足のレベルは、ほぼ空である、半分充足している、又はほぼ充足しているのうちの1つを含んでもよい。
例33:例32の少なくとも1つの機械読み取り可能な媒体において、上記の複数の命令は、システムに、充足のレベルがほぼ空である場合には、小さな数だけ、或いは、充足のレベルが半分充足している場合には、大きな数だけ、トレンド計数を増加させるようにしてもよい。これらの例では、大きな数は、小さな数の概ね100倍の数であってもよい。
例34:例32の少なくとも1つの機械読み取り可能な媒体において、上記の複数の命令は、さらに、受信キューがほぼ充足していると決定されるポーリングの反復の連続的な数が連続的な閾値をこえるということに応答して、システムが、OS電力管理モジュールに高いパフォーマンス指標を送るようにさせてもよい。これらの例では、高いパフォーマンス指標は、OS電力管理モジュールが、処理要素のパフォーマンス状態を最も高いパフォーマンス状態に増加させることを可能としてもよく、最も高いパフォーマンス状態に増加させることは、処理要素の動作周波数を最も高い動作周波数に増加させることを含んでもよい。
例35:例32の少なくとも1つの機械読み取り可能な媒体において、ほぼ空であるは、25%乃至50%充足しているレベルであってもよく、半分充足しているは、51%乃至75%充足しているレベルであってもよく、ほぼ充足しているは、75%よりも大きなパーセンテイジ充足しているレベルであってもよい。
例36:例30の少なくとも1つの機械読み取り可能な媒体において、OS電力管理モジュールは、拡張構成及び電力インターフェイス(ACPI)仕様書改訂5.0版を含む1つ又は複数の業界標準にしたがって、処理要素のパフォーマンス状態を増加させることが可能であってもよい。OS電力管理モジュールは、処理要素のパフォーマンス状態をPn-1パフォーマンス状態に入るように増加させることが可能であってもよく、"n"は、結果として、処理要素の最も低い動作周波数につながる最も低いパフォーマンス状態を表している。
例37:例30の少なくとも1つの機械読み取り可能な媒体において、処理要素は、マルチコアプロセッサのコア又はマルチコアプロセッサの1つ又は複数のコアによってサポートされる仮想機械のうちの一方を含んでもよい。
例38:例30の少なくとも1つの機械読み取り可能な媒体において、DPDKポーリングスレッドは、ネットワークパケット処理アプリケーションを実行することが可能であってもよく、ネットワークパケット処理アプリケーションは、NW I/Oデバイスで受信したパケットを処理してもよい。ネットワークパケット処理アプリケーションは、ファイアウォールアプリケーション、仮想私設ネットワーク(VPN)アプリケーション、ネットワークアドレス変換(NAT)アプリケーション、ディープパケットインスペクション(DPI)アプリケーション、又は負荷バランサアプリケーションのうちの1つを含んでもよい。
例39:例示的な方法は、DPDKポーリングスレッドのための複数のポーリングの反復にわたって、NW I/Oデバイスのための受信キューに保持されている利用可能な受信したパケット記述子をモニタリングするステップを含んでもよい。当該方法は、また、各々のポーリングの反復の後に、受信キューに保持されている利用可能なパケット記述子に基づいて、各々のポーリングの反復について受信キューで受信したパケットの数を決定するステップを含んでもよい。当該方法は、さらに、連続的な閾値をこえる連続的な数のポーリングの反復の間に受信したパケットの数が0である場合に、1である計数だけアイドル計数を増加させるステップを含んでもよい。当該方法は、また、アイドル計数が第1のアイドル計数閾値をこえるか又は第1のアイドル計数閾値よりも小さいかに基づいて、DPDKポーリングスレッドを第1の時間期間又は第2の時間期間のうちの一方の間スリープ状態にさせるステップを含んでもよい。第2の時間期間は、第1の時間期間よりも長くてもよい。
例40:例39の方法は、アイドル計数が第2のアイドル計数閾値をこえたことに基づいて、NW I/Oデバイスに割込みターンオンヒントを送り、DPDKポーリングスレッドを中断状態にさせるステップを含んでもよい。
例41:例39の方法は、アイドル計数が第1のアイドル計数閾値をこえたことに基づいて、DPDKポーリングスレッドが第2の時間期間の間スリープ状態になることを含んでもよい。当該方法は、OS電力管理モジュールに長いスリープ指標を送るステップを含んでもよい。長いスリープ指標は、OS電力管理モジュールが、最大で第2の時間期間までの間、DPDKポーリングスレッドを実行する処理要素をスリープモードに置くことを可能としてもよい。
例42:例41の方法は、タイマ期間を有するタイマを開始するステップを含んでもよい。当該方法は、タイマが終了したことに応答して、タイマ期間の間にDPDKポーリングスレッドがスリープ状態であったポーリングの反復のパーセンテイジを決定するステップを含んでもよい。当該方法は、パーセンテイジがパーセンテイジ閾値よりも大きいか否かに基づいて、OS電力管理モジュールにパフォーマンス指標を送るステップを含んでもよい。パフォーマンス指標は、OS電力管理モジュールが、処理要素のパフォーマンス状態を下げることを可能としてもよく、処理要素のパフォーマンス状態を下げることは、処理要素の動作周波数を減少させること又は動作電圧を減少させることを含んでもよい。
例43:例41の方法は、タイマ期間を有するタイマを開始するステップを含んでもよい。当該方法は、タイマが終了したことに応答して、タイマ期間の間に受信キューで受信したパケットについて平均の反復ごとのパケット数を決定するステップを含んでもよい。当該方法は、平均の反復ごとのパケット数がパケット平均閾値よりも小さいか否かに基づいて、OS電力管理モジュールにパフォーマンス指標を送るステップを含んでもよい。パフォーマンス指標は、OS電力管理モジュールが、処理要素のパフォーマンス状態を下げるようにし、処理要素のパフォーマンス状態を下げることは、処理要素の動作周波数を下げることを含んでもよい。
例44:例41の方法において、OS電力管理モジュールは、拡張構成及び電力インターフェイス(ACPI)仕様書改訂5.0版を含む1つ又は複数の業界標準にしたがって、処理要素をスリープモードに置くことが可能であってもよい。これらの例では、OS電力管理モジュールは、スリープ指標に応答して、処理要素を少なくともC1プロセッサ電力状態にすることによって処理要素をスリープモードに置くようにしてもよい。
例45:例41の方法において、処理要素は、マルチコアプロセッサのコア又はマルチコアプロセッサの1つ又は複数のコアによってサポートされる仮想機械のうちの一方を含んでもよい。
例46:例39の方法において、連続的な閾値は、5回の反復であってもよく、各々のポーリングの反復は、おおむね1[μs]ごとに行われてもよい。
例47:例46の方法において、スリープ指標は、アイドル計数が第1のアイドル計数閾値よりも小さいということを示してもよく、スリープ指標は、DPDKポーリングスレッドを第1の時間期間の間スリープ状態にしてもよい。第1の時間期間は、おおむね5回のポーリングの反復の間持続してもよい。
例48:例46の方法において、スリープ指標は、アイドル計数が第1のアイドル計数閾値をこえているということを示してもよく、スリープ指標は、DPDKポーリングスレッドを第2の時間期間の間スリープ状態にしてもよい。第2の時間期間は、おおむね50回のポーリングの反復の間持続してもよい。
例49:例39の方法において、DPDKポーリングスレッドは、ネットワークパケット処理アプリケーションを実行することが可能であってもよく、ネットワークパケット処理アプリケーションは、NW I/Oデバイスで受信したパケットを処理してもよい。ネットワークパケット処理アプリケーションは、ファイアウォールアプリケーション、仮想私設ネットワーク(VPN)アプリケーション、ネットワークアドレス変換(NAT)アプリケーション、ディープパケットインスペクション(DPI)アプリケーション、又は負荷バランサアプリケーションのうちの1つを含んでもよい。
例50:少なくとも1つの機械読み取り可能な媒体の1つの例は、複数の命令を含んでもよく、それらの複数の命令は、ホストコンピューティングプラットフォームに位置するシステムによって実行されたことに応答して、例39乃至例49のうちのいずれか1つにしたがった方法をそのシステムに実行させてもよい。
例51:例示的な装置は、例39乃至例49のうちのいずれか1つの方法を実行する手段を含んでもよい。
例52:少なくとも1つの機械読み取り可能な媒体の1つの例は、複数の命令を含んでもよく、それらの複数の命令は、ホストコンピューティングプラットフォームに位置するシステムで実行されたことに応答して、そのシステムに、DPDKポーリングスレッドのための複数のポーリングの反復にわたって、NW I/Oデバイスのための受信キューに保持されている利用可能な受信したパケット記述子をモニタリングさせてもよい。上記の複数の命令は、そのシステムに、各々のポーリングの反復の後に、受信キューに保持されている利用可能なパケット記述子に基づいて、各々のポーリングの反復について受信キューで受信したパケットの数を決定させてもよい。上記の複数の命令は、連続的な閾値をこえる連続的な数のポーリングの反復の間に受信したパケットの数が0である場合に、そのシステムに、1である計数だけアイドル計数を増加させてもよい。上記の複数の命令は、アイドル計数が第1のアイドル計数閾値をこえるか又は第1のアイドル計数閾値よりも小さいかに基づいて、そのシステムに、DPDKポーリングスレッドを第1の時間期間又は第2の時間期間のうちの一方の間スリープ状態にさせるようにさせてもよい。第2の時間期間は、第1の時間期間よりも長くてもよい。
例53:例52の少なくとも1つの機械読み取り可能な媒体において、上記の複数の命令は、アイドル計数が第2のアイドル計数閾値をこえたことに基づいて、そのシステムが、NW I/Oデバイスに割込みターンオンヒントを送り、DPDKポーリングスレッドを中断状態にさせるようにさせてもよい。
例54:例52の少なくとも1つの機械読み取り可能な媒体において、アイドル計数が第1のアイドル計数閾値をこえたことに基づいて、DPDKポーリングスレッドは、第2の時間期間の間スリープ状態になるように構成されてもよい。上記の複数の命令は、そのシステムが、OS電力管理モジュールに長いスリープ指標を送るようにさせてもよい。長いスリープ指標は、OS電力管理モジュールが、最大で第2の時間期間までの間、DPDKポーリングスレッドを実行する処理要素をスリープモードに置くようにさせることを可能としてもよい。
例55:例54の少なくとも1つの機械読み取り可能な媒体において、上記の複数の命令は、そのシステムに、タイマ期間を有するタイマを開始させ、タイマが終了したことに応答して、タイマ期間の間にDPDKポーリングスレッドがスリープ状態であったポーリングの反復のパーセンテイジを決定させてもよい。上記の複数の命令は、パーセンテイジがパーセンテイジ閾値よりも大きいか否かに基づいて、そのシステムが、OS電力管理モジュールにパフォーマンス指標を送るようにさせてもよい。パフォーマンス指標は、OS電力管理モジュールが、処理要素のパフォーマンス状態を下げることを可能としてもよく、処理要素のパフォーマンス状態を下げることは、処理要素の動作周波数を減少させること又は動作電圧を減少させることを含んでもよい。
例56:例54の少なくとも1つの機械読み取り可能な媒体において、上記の複数の命令は、そのシステムに、タイマ期間を有するタイマを開始させ、タイマが終了したことに応答して、タイマ期間の間に受信キューで受信したパケットについて平均の反復ごとのパケット数を決定させてもよい。上記の複数の命令は、平均の反復ごとのパケット数がパケット平均閾値よりも小さいか否かに基づいて、そのシステムが、OS電力管理モジュールにパフォーマンス指標を送るようにさせてもよい。パフォーマンス指標は、OS電力管理モジュールが、処理要素のパフォーマンス状態を下げるようにしてもよく、処理要素のパフォーマンス状態を下げることは、処理要素の動作周波数を減少させることを含んでもよい。
例57:例54の少なくとも1つの機械読み取り可能な媒体において、OS電力管理モジュールは、拡張構成及び電力インターフェイス(ACPI)仕様書改訂5.0版を含む1つ又は複数の業界標準にしたがって、処理要素をスリープモードに置くことが可能であってもよい。OS電力管理モジュールは、スリープ指標に応答して、処理要素を少なくともC1プロセッサ電力状態にすることによって処理要素をスリープモードに置くようにしてもよい。
例58:例54の少なくとも1つの機械読み取り可能な媒体において、処理要素は、マルチコアプロセッサのコア又はマルチコアプロセッサの1つ又は複数のコアによってサポートされる仮想機械のうちの一方を含んでもよい。
例59:例51の少なくとも1つの機械読み取り可能な媒体において、連続的な閾値は、5回の反復を含んでもよく、各々のポーリングの反復は、おおむね1[μs]ごとに行われてもよい。
例60:例59の少なくとも1つの機械読み取り可能な媒体において、スリープ指標は、アイドル計数が第1のアイドル計数閾値よりも小さいということを示してもよく、スリープ指標は、DPDKポーリングスレッドを第1の時間期間の間スリープ状態にしてもよい。第1の時間期間は、おおむね5回のポーリングの反復の間持続してもよい。
例61:例59の少なくとも1つの機械読み取り可能な媒体において、スリープ指標は、アイドル計数が第1のアイドル計数閾値をこえているということを示してもよく、スリープ指標は、DPDKポーリングスレッドを第2の時間期間の間スリープ状態にしてもよい。第2の時間期間は、おおむね50回のポーリングの反復の間持続してもよい。
例62:例52の少なくとも1つの機械読み取り可能な媒体において、DPDKポーリングスレッドは、ネットワークパケット処理アプリケーションを実行することが可能であってもよく、ネットワークパケット処理アプリケーションは、NW I/Oデバイスで受信したパケットを処理してもよい。ネットワークパケット処理アプリケーションは、ファイアウォールアプリケーション、仮想私設ネットワーク(VPN)アプリケーション、ネットワークアドレス変換(NAT)アプリケーション、ディープパケットインスペクション(DPI)アプリケーション、又は負荷バランサアプリケーションのうちの1つを含んでもよい。
要約書は、37C.F.R.§1.72(b)に適合するように記載され、37C.F.R.§1.72(b)は、読者が技術的な開示の性質を迅速に解明することができるようにすることを要約書に要求しているということを注記しておく。要約書が請求項に記載された発明の範囲又は意味を解釈する或いは限定するのに使用されないのは、要約書が理解のために提出されるからである。さらに、上記の発明を実施するための形態の中で、開示内容を効率的にする目的で、単一の実施形態の中にさまざまな特徴をグループとしてまとめてあるということが理解できるであろう。このような開示の手法は、実施形態のうちの請求項に係る発明の部分が、各請求項に明白に記載されている特徴よりもより多くの特徴を必要とするという意図を反映しているものとして解釈されるべきではない。むしろ、以下の特許請求の範囲が反映しているように、発明の主題は、開示されている単一の実施形態のすべての特徴よりもより少ない特徴の中に存在している。このようにして、以下の特許請求の範囲は、発明を実施するための形態の中に組み込まれ、各請求項は、個別の実施形態としてそれ自体で独立して存在している。添付の特許請求の範囲の中では、"including"及び"in which"といった語が、それぞれ、"comprising"及び"wherein"の平易な同義語として使用されることもある。さらに、序数的形容詞"第1の(first)"、"第2の(second)"、及び"第3の(third)"等は、ラベルとして使用されるにすぎず、それらの序数的形容詞の対象に数的な要件を付加することを意図するものではない。
本発明の主題が、構造的な特徴及び/又は方法の動作に特有の記載で説明されてきたが、添付の特許請求の範囲で規定される主題は、必ずしも、上記で説明されたその特有の特徴又は動作に限定されないということを理解すべきである。むしろ、上記で説明されたそれらの特有の特徴及び動作は、請求項に係る発明を実装する一例としての形態で開示されている。