(57)【要約】  幾つかの実装例では、プロセッサが、２つのデバイス間で転送されるべく現在残っているデータのパケット数を表す現在のペンディングパケット数を受信し、現在のペンディングパケット数と、前のペンディングパケット数と、優先ペンディングパケット数とに基づいて、スレッド優先度を調節するかを決定し、スレッド優先度を調節するかの決定に基づいて、スレッド優先度を調節又は維持するよう構成されている。スレッドは、２つのデバイス間でデータのパケットの転送を実行するべくプロセッサによって実行されるものであり、前のペンディングパケット数は、２つのデバイス間で転送されるべく前に残っていたデータのパケット数を表し、優先ペンディングパケット数は、スレッドの現在の優先度に対応している。
2015515702.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサによって、２つのデバイス間で転送されるべく現在残っているデータのパケット数を表す現在のペンディングパケット数を受信する段階と、
前記プロセッサによって、前記現在のペンディングパケット数と、前のペンディングパケット数と、優先ペンディングパケット数とに基づいて、スレッド優先度を調節するかを決定する段階であって、前記スレッドは、前記２つのデバイス間で前記データのパケットの転送を実行するべく前記プロセッサによって実行されるものであり、前記前のペンディングパケット数は、前記２つのデバイス間で転送されるべく前に残っていたデータのパケット数を表し、前記優先ペンディングパケット数は、前記スレッドの現在の優先度に対応している、前記決定する段階と、
前記プロセッサによって、前記決定する段階の結果に基づいて、前記スレッドの前記優先度を調節又は維持する段階と
を備える、方法。
【請求項２】
前記スレッドの前記優先度を調節するかを決定する段階は、
前記現在のペンディングパケット数と、前記前のペンディングパケット数とを比較する段階と、
前記現在のペンディングパケット数と、前記優先ペンディングパケット数とを比較する段階と、
前記現在のペンディングパケット数が前記前のペンディングパケット数より大きいか、又は小さい場合、及び、前記現在のペンディングパケット数が前記優先ペンディングパケット数より大きいか、又は小さい場合、前記スレッドの前記優先度を調節すると決定する段階と
を有する、請求項１に記載の方法。
【請求項３】
前記スレッドの前記優先度を調節又は維持する段階は、
前記現在のペンディングパケット数が前記前のペンディングパケット数より大きい場合、及び、前記現在のペンディングパケット数が前記優先ペンディングパケット数より大きい場合、前記スレッドの前記優先度をアップグレードする段階と、
前記現在のペンディングパケット数が前記前のペンディングパケット数より小さい場合、及び、前記現在のペンディングパケット数が前記優先ペンディングパケット数より小さい場合、前記スレッドの前記優先度を低下させる段階と、
さもなくば、前記スレッドの前記優先度を維持する段階と  
を有する、請求項１または２に記載の方法。
【請求項４】
前記２つのデバイスはピアツーピア（P2P）デバイスであり、
前記優先ペンディングパケット数は、前記スレッドに関連付けられているインデックスにあるペンディングパケット数アレイに格納されている値であり、
前記ペンディングパケット数アレイに格納される複数の値は、前記２つのP2Pデバイスのうちの１つのそれぞれ異なる複数の構成に従って定義される、請求項１から３の何れか１項に記載の方法。
【請求項５】
前記スレッドの前記優先度を調節する段階は、
前記スレッドに関連付けられている前記インデックスを調節する段階と、
前記スレッドの前記優先度を、前記スレッドに関連付けられている前記インデックスにあるスレッド優先度アレイに格納されている値に設定する段階と
を有し、
前記スレッド優先度アレイに格納される複数の値は、前記２つのP2Pデバイスのうちの前記１つのそれぞれ異なる複数の構成に従って定義される、請求項４に記載の方法。
【請求項６】
前記スレッドの前記優先度を調節する段階は、
前記スレッドの前記優先度に適用する調節量を表すステップに基づいて前記スレッドの前記優先度を調節する段階を有し、
前記ステップはユーザ定義される、請求項１から５の何れか１項に記載の方法。
【請求項７】
前記スレッドの前記優先度の前記調節が、前記スレッドの前記優先度の前の調節と合致していると判断する段階と、
前記ステップに基づいて前記スレッドの前記優先度の前記調節を繰り返す段階と
を更に備える、請求項６に記載の方法。
【請求項８】
高速インタフェースと、
前記高速インタフェースに連結されたプロセッサと
を備える装置であって、
前記プロセッサは、
２つのデバイス間で転送されるべく現在残っているデータのパケット数を表す現在のペンディングパケット数を受信し、
前記現在のペンディングパケット数と、前のペンディングパケット数と、優先ペンディングパケット数とに基づいて、スレッド優先度を調節するかを決定し、前記スレッドは、前記２つのデバイス間で前記データのパケットの転送を実行するべく前記プロセッサによって実行されるものであり、前記前のペンディングパケット数は、前記２つのデバイス間で転送されるべく前に残っていたデータのパケット数を表し、前記優先ペンディングパケット数は、前記スレッドの現在の優先度に対応しており、
前記決定の結果に基づいて、前記スレッドの前記優先度を調節又は維持する、装置。
【請求項９】
前記プロセッサは、
前記現在のペンディングパケット数と、前記前のペンディングパケット数とを比較し、
前記現在のペンディングパケット数と、前記優先ペンディングパケット数とを比較し、
前記現在のペンディングパケット数が前記前のペンディングパケット数より大きいか、又は小さい場合、及び、前記現在のペンディングパケット数が前記優先ペンディングパケット数より大きいか、又は小さい場合、前記スレッドの前記優先度を調節すると決定する、請求項８に記載の装置。
【請求項１０】
前記プロセッサは、
前記現在のペンディングパケット数が前記前のペンディングパケット数より大きい場合、及び、前記現在のペンディングパケット数が前記優先ペンディングパケット数より大きい場合、前記スレッドの前記優先度をアップグレードし、
前記現在のペンディングパケット数が前記前のペンディングパケット数より小さい場合、及び、前記現在のペンディングパケット数が前記優先ペンディングパケット数より小さい場合、前記スレッドの前記優先度を低下させ、
さもなくば、前記スレッドの前記優先度を維持する、請求項８または９に記載の装置。
【請求項１１】
前記２つのデバイスはピアツーピア（P2P）デバイスであり、
前記優先ペンディングパケット数は、前記スレッドに関連付けられているインデックスにあるペンディングパケット数アレイに格納されている値であり、
前記ペンディングパケット数アレイに格納される複数の値は、前記２つのP2Pデバイスのうちの１つのそれぞれ異なる複数の構成に従って定義される、請求項８から１０の何れか１項に記載の装置。
【請求項１２】
前記プロセッサは、
前記スレッドに関連付けられている前記インデックスを調節し、
前記スレッドの前記優先度を、前記スレッドに関連付けられている前記インデックスにあるスレッド優先度アレイに格納されている値に設定し、
前記スレッド優先度アレイに格納される複数の値は、前記２つのP2Pデバイスのうちの前記１つのそれぞれ異なる複数の構成に従って定義される、請求項１１に記載の装置。
【請求項１３】
前記プロセッサは、
前記スレッドの前記優先度に適用する調節量を表すステップに基づいて前記スレッドの前記優先度を調節し、
前記ステップはユーザ定義される、請求項８から１２の何れか１項に記載の装置。
【請求項１４】
前記プロセッサは、
前記スレッドの前記優先度の前記調節が、前記スレッドの前記優先度の前の調節と合致していると判断し、
前記ステップに基づいて前記スレッドの前記優先度の前記調節を繰り返す、請求項１３に記載の装置。
【請求項１５】
第１のデバイスと、
第２のデバイスと、
前記第１のデバイスと前記第２のデバイスとを連結する高速インタフェースと、
前記第２のデバイスに連結されたプロセッサと
を備えるシステムであって、
前記プロセッサは、
前記第１のデバイスと前記第２のデバイスとの間で転送されるべく現在残っているデータのパケット数を表す現在のペンディングパケット数を受信し、
前記現在のペンディングパケット数と、前のペンディングパケット数と、優先ペンディングパケット数とに基づいて、スレッド優先度を調節するかを決定し、前記スレッドは、前記第１のデバイスと前記第２のデバイスとの間で前記データのパケットの転送を実行するべく前記プロセッサによって実行されるものであり、前記前のペンディングパケット数は、前記第１のデバイスと前記第２のデバイスと間で転送されるべく前に残っていたデータのパケット数を表し、前記優先ペンディングパケット数は、前記スレッドの現在の優先度に対応しており、
前記決定の結果に基づいて、前記スレッドの前記優先度を調節又は維持する、システム。
【請求項１６】
前記プロセッサは、
前記現在のペンディングパケット数と、前記前のペンディングパケット数とを比較し、
前記現在のペンディングパケット数と、前記優先ペンディングパケット数とを比較し、
前記現在のペンディングパケット数が前記前のペンディングパケット数より大きいか、又は小さい場合、及び、前記現在のペンディングパケット数が前記優先ペンディングパケット数より大きいか、又は小さい場合、前記スレッドの前記優先度を調節すると決定する、請求項１５に記載のシステム。
【請求項１７】
前記プロセッサは、
前記現在のペンディングパケット数が前記前のペンディングパケット数より大きい場合、及び、前記現在のペンディングパケット数が前記優先ペンディングパケット数より大きい場合、前記スレッドの前記優先度をアップグレードし、
前記現在のペンディングパケット数が前記前のペンディングパケット数より小さい場合、及び、前記現在のペンディングパケット数が前記優先ペンディングパケット数より小さい場合、前記スレッドの前記優先度を低下させ、
さもなくば、前記スレッドの前記優先度を維持する、請求項１５または１６に記載のシステム。
【請求項１８】
前記高速インタフェースは、前記第１のデバイスと前記第２のデバイスとをピアツーピア（P2P）構成で連結し、
前記優先ペンディングパケット数は、前記スレッドに関連付けられているインデックスにあるペンディングパケット数アレイに格納されている値であり、
前記ペンディングパケット数アレイに格納される複数の値は、前記第２のデバイスのそれぞれ異なる複数の構成に従って定義される、請求項１５から１７の何れか１項に記載のシステム。
【請求項１９】
前記プロセッサは、
前記スレッドに関連付けられている前記インデックスを調節し、
前記スレッドの前記優先度を、前記スレッドに関連付けられている前記インデックスにあるスレッド優先度アレイに格納されている値に設定し、
前記スレッド優先度アレイに格納される複数の値は、前記第２のデバイスのそれぞれ異なる複数の構成に従って定義される、請求項１８に記載のシステム。
【請求項２０】
前記プロセッサは、
前記スレッドの前記優先度に適用する調節量を表すステップに基づいて前記スレッドの前記優先度を調節し、
前記ステップはユーザ定義される、請求項１５から１９の何れか１項に記載のシステム。
【請求項２１】
前記プロセッサは、
前記スレッドの前記優先度の前記調節が、前記スレッドの前記優先度の前の調節と合致していると判断し、
前記ステップに基づいて前記スレッドの前記優先度の前記調節を繰り返す、請求項２０に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
＜関連出願への相互参照＞
本開示は米国35 U.S.C.セクション119(e)条において、２０１２年４月２３日に提出された米国仮出願第61/636,899号（名称：Algorithm for Self-Adaptively Adjusting Thread Priority to Improve Throughput between P2P Devices）の優先権の恩恵を主張し、この開示の全体をここに参照により組み込むものとする。
【０００２】
本開示は、スレッド優先度を調節することに関し、より詳しくは、ピアツーピア（P2P）デバイス間のスループットを向上させるためにスレッド優先度を調節することに関する。
【背景技術】
【０００３】
技術の急速な発展につれて、現代のプロセッサには、１００Mbpsを超えるデータ送信速度のデバイスを実装することができる。高速デバイスにおいては、スレッドのスケジューリングが、送信スループットに影響を及ぼす場合がある。ワークロードが軽いシステムでは、スレッドは、該スレッドが最小でも３０μsごとに実行されるようにスケジュールされてよい。しかしながらワークロードがより高いシステムでは、スレッドは実行までに１００μsか又はそれより長く待つ必要がある場合もある。最低の優先度のスレッドに至っては、どのくらいの時間待つか不確定な場合もある。待ち時間を最小限にするためには、スレッドにより高い優先度が割り当てればよい。しかし、高い固定した優先度を割り当てられたスレッドは、スレッドがアイドルのときであっても（例えばスレッドが時間が重要なイベントに応答していないとき）、優先的にシステムリソースを占有し、利用しうる。
【０００４】
例えば、１００Mbpsを超える速度でのデータ送信をサポートする高速インタフェース（HSI）を含むシステムがある。HSIは、１５００バイトの送信制御プロトコル／インターネットプロトコル（TCP/IP）パケットの１２５０バイトを、HSIがシステムリソースを割り当てられている期間中（例えばタイムスライス）に転送してよい。HSIが、その次のタイムスライスのために１００μｓを超える時間待つ必要がある場合、待ち時間は、HSIのパフォーマンスに悪影響を及ぼす場合がある。待ち時間を最小限に抑えるためには、HSIに関連づけられたスレッドに、より高い優先度を割り当てても良い。しかしながら、HSIに関連付けられたスレッドに、より高い優先度を割り当てると、HSIは、HSIがデータ送信を行っていないときであっても、システムリソースを優先的に占有、利用してしまう場合がある。
【発明の概要】
【０００５】
本開示は、ピアツーピア（P2P）デバイス間のスループットを向上させるためにスレッド優先度を調節することに関するシステム及び技術を記載する。概して、一態様では、プロセッサが、２つのデバイス間で転送されるべく現在残っているデータのパケット数を表す現在のペンディングパケット数を受信し、現在のペンディングパケット数と、前のペンディングパケット数と、優先ペンディングパケット数とに基づいて、スレッド優先度を調節するかを決定し、スレッド優先度を調節するかの決定に基づいて、スレッド優先度を調節又は維持するよう構成される。スレッドは、２つのデバイス間でデータのパケットの転送を実行するべくプロセッサによって実行されるものであり、前のペンディングパケット数は、２つのデバイス間で転送されるべく前に残っていたデータのパケット数を表し、優先ペンディングパケット数は、スレッドの現在の優先度に対応しており、よう構成されている。
【０００６】
記載するシステム及び技術は、以下の利点の１又は複数を実現するために実装することができる。デバイス間で転送されるのを待つデータ量が増加したときには、データを、より高速レートで転送することができるようにデータ転送タスクの優先度を増加することにより、デバイス間の送信スループットを向上させることができる。転送されるのを待つデータ量が低減したときには、他のタスクをスケジュールすることを可能としつつ、デバイスの最小データ転送レートを満たすことができるよう、データ転送タスクの優先度を低減させることにより、システムワークロードが均衡化されてよい。
【０００７】
記載されるシステム及び技術は、電子回路、コンピュータハードウェア、ファームウェア、ソフトウェア、又はこれらの組み合わせ（例えば、本明細書に開示する構造的手段及びその構造的均等物等）に実装することができる。これは、１又は複数のデータ処理装置に、記載する動作を実行させるよう動作可能なプログラムを具現化する少なくとも１つのコンピュータ可読媒体を含むことができる。従って、プログラム実装は、開示した方法、システム、又は装置から実現することができ、装置実装は、開示したシステム、コンピュータ可読媒体、又は方法から実現することができる。同様に、方法実装は、開示したシステム、コンピュータ可読媒体、又は装置から実現することができ、システム実装は、開示した方法、コンピュータ可読媒体、又は装置から実現することができる。
【０００８】
１又は複数の実装の詳細を、添付図面と以下の記載において述べる。他の特徴、目的、及び利点は、記載、図面、及び請求項から明らかになるだろう。
【図面の簡単な説明】
【０００９】
【図１】P2Pデバイス間のスループットを向上させるためにスレッド優先度を調節することができるシステムの例を示すブロック図である。
【００１０】
【図２】データを転送するためにP2Pデバイス間で交換される信号の例を示す信号図である。
【００１１】
【図３】トランスミッタスレッドを実行するべくプロセッサによって実行される動作３００の例を示すフローチャートである。
【００１２】
【図４】レシーバスレッドを実行するべくプロセッサによって実行される動作の例を示すフローチャートである。
【００１３】
【図５】データ転送を実行するスレッド優先度を調節又は維持するべくプロセッサによって実行されるスレッド優先度アルゴリズムの動作の例を示すフローチャートである。
【００１４】
【図６】スレッド優先度をアップグレードするべくプロセッサによって実行される動作の例を示すフローチャートである。
【００１５】
【図７】スレッド優先度を低下させるべくプロセッサによって実行される動作の例を示すフローチャートである。
【００１６】
【図８ａ】スレッド優先度をアップグレード、低下、又は維持するための条件の例をグラフィックに示すチャートを示す。
【図８ｂ】スレッド優先度をアップグレード、低下、又は維持するための条件の例をグラフィックに示すチャートを示す。
【図８ｃ】スレッド優先度をアップグレード、低下、又は維持するための条件の例をグラフィックに示すチャートを示す。
【００１７】
【図９】スレッド優先度を調節するときにプロセッサによって実行される動作の例を示すフローチャートである。
【００１８】
【図１０】バイト単位の異なるパケットサイズのためのMbps単位の転送データスループットレートの例を示すグラフである。
【００１９】
【図１１】バイト単位の異なるパケットサイズのためのMbps単位の受信データスループットレートの例を示すグラフである。
【発明を実施するための形態】
【００２０】
本開示の様々な実装例を、データをピアツーピア（P2P）デバイス間で高速（例えば１００Mbpsかそれ以上）で転送する高速インタフェース（HSI）を含むシステムの例を参照しながら以下で説明する。これらシステムの例は、ルータ、プロセッサ、メモリ、及びその他の埋め込みシステムを含んで良い。本開示に記載するシステム及び技術は、概して、データスループットを向上させてシステムワークロードを均衡化させるべくスレッド優先度を調節することが望ましいいずれのシステムに対しても適用可能である。故に、図１は、スレッド優先度を調節することができるシステムの幾つかの実装例に対応しており、他のシステム実装には、図１に示すものと異なるコンポーネントが含まれてよい。
【００２１】
図１は、スレッド優先度がP2Pデバイス１０２及び１０４の間のスループットを向上せるべく調節されてよいシステム１００の例を示すブロック図である。P2Pデバイス１０２及び１０４は、例えば、アプリケーションプロセッサ及びメモリであってよい。デバイス１０２は、処理コア又はコントローラ１１０、及び、デバイス１０２がデータを高速で送信及び受信するHSI１０６を含む。デバイス１０４は、処理コア又はコントローラ１１２、及び、デバイス１０４がデータを高速で送信及び受信するHSI１０８を含む。
【００２２】
図２は、データを転送するべくP2Pデバイス間で交換される信号の例を示す信号図である。デバイスAは、例えばアプリケーションプロセッサであってよい。デバイスBは、例えばメモリコントローラであってよい。デバイスAは、オープン接続要求信号OPEN_CONNを、デバイスAとデバイスBとの間の制御チャネルを介してデバイスBに送信する。オープン接続要求は、P2Pデバイス間のイベント、割り込み、又はその他の適切なプロセス間通信（IPC）プロトコル信号であってよい。OPEN_CONN信号を受信することに応じて、デバイスBは、肯定応答信号ACKを、制御チャネルを介してデバイスAに送信する。デバイスBは、データ送信のために、リソース、例えばメモリ及びダイナミックメモリアクセス（DMA）チャネルを、割り当て、リザーブ、及び構成してよい。デバイスBは、接続準備済み信号CONN_READYを、制御チャネルを介してデバイスAに送信する。接続準備済み信号は、P2Pデバイス間のイベント、割り込み、又は他の適切なIPCプロトコル信号であってよい。CONN_READY信号を受信することに応じて、デバイスAは、プロトコルデータユニット（PDU）のデータ、例えばデータパケットを、データチャネルを介してデバイスBに送信する。データパケットを受信した後で、デバイスBは、デバイスAに、接続終了信号CONN_CLOSEDを送信する。デバイスBからデバイスAにデータを送信するために、同様の信号がデバイスAとデバイスBとの間で交換される。
【００２３】
図３は、トランスミッタ（TX）スレッドを実行するプロセッサが実行する動作３００の例を示すフローチャートである。動作３００は、プログラムコード、ハードウェア、又は、プロセッサに実装されるハードウェア及びプログラムコードの組み合わせによって実行されてよい。
【００２４】
３０２で、TXスレッドはアイドルであり、データがピアデバイスに送信されていない。３０４で、TXスレッドは、スレッド優先度アルゴリズムを実行するが、これに関しては本開示で詳しく後述する。３０６で、TXスレッドは、保留パケット（suspension packet）とも称される任意のペンディングパケットが、ピアデバイスに送信するために残っているかを決定する。ペンディングパケットが残っていない場合には、TXスレッドは３０８でXミリ秒間スリープ状態に入り、この間TXスレッドはアイドル状態になる。幾つかの実装例では、TXスレッドがスリープ状態になるミリ秒の数Xは、異なるソフトウェア、ハードウェア、又はプロセッサ上のソフトウェア及びハードウェア構成の組み合わせに従ってユーザ定義されてよい。幾つかの実装例では、TXスレッドがスリープ状態になるミリ秒の数Xは、感度及び電力消費等の、システムのパフォーマンスに影響をもつ要素に基づいていて良い。
【００２５】
ペンディングパケットが送信するために残っている場合には、TXスレッドは、３１０でデータ転送を開始する。例えば、TXスレッドは、OPEN_CONN信号をピアデバイスに送信することによりデータ転送を開始してよい。
【００２６】
３１２で、TXスレッドが、データを送信可能か決定する。TXスレッドがデータを送信可能でないと決定する場合には、TXスレッドはエラー処理ルーチンを３１４で実行する。例えばTXスレッドは、ACK信号及びCONN_READY信号を受信した後にデータを送信可能であると決定してよい。ACK信号又はCONN_READY信号が、対応するタイムアウト期間の後にも受信されない場合、TXスレッドはエラー処理ルーチンを実行する。
【００２７】
データを送信可能であると決定した後で、３１８にてTXスレッドはデータユニット、例えばデータパケットを、ピアデバイスに送信する。TXスレッドは、データパケットの全てのデータが送信されるまで、１又は複数のタイムスライスで実行されてよい。
【００２８】
データパケットを送信した後で、TXスレッドは、３２０で、データの転送に成功したかを決定する。TXスレッドが、データの転送に成功しなかったと決定した場合には、TXスレッドは、３１４でエラー処理ルーチンを実行する。例えばTXスレッドは、データの転送に成功したかを、CONN_CLOSED信号が受信されたかを決定することで決定してよい。CONN_CLOSED信号が、タイムアウト期間の後にも受信されない場合には、TXスレッドはエラー処理ルーチンを実行する。データの転送に成功したと決定した後に、TXスレッドは、３０４でスレッド優先度アルゴリズムを実行する。
【００２９】
図４は、レシーバ（RX）スレッドを実行するプロセッサが実行する動作４００の例を示すフローチャートである。動作４００は、プログラムコード、ハードウェア、又は、プロセッサに実装されるハードウェア及びプログラムコードの組み合わせによって実行されてよい。
【００３０】
４０２で、RXスレッドはアイドルであり、データがピアデバイスに送信されていない。４０４で、RXスレッドは、データ転送要求が受信されたかを決定する。データ転送要求は、P2Pデバイス間のイベント、割り込み、又はその他のプロセス間通信（IPC）プロトコル信号であってよい。例えば、RXスレッドは、OPEN_CONN信号が受信されたかを決定することにより、データ転送要求が受信されたかを決定してよい。データ転送要求が受信されなかった場合には、４０２でRXスレッドがアイドル状態にとどまる。データ転送要求を受信した後で、RXスレッドは、４０６でスレッド優先度アルゴリズムを実行するが、これに関しては本開示で詳しく後述する。
【００３１】
４０８で、RXスレッドは、任意で、肯定応答信号、例えばACK信号、を、ピアデバイスに送信して、データ転送要求の受信を肯定応答してよい。４１０で、RXスレッドは、データの受信準備をしてよい。例えば、RXスレッドは、データを受信するためにメモリを割り当て、ダイナミックメモリアクセス（DMA）チャネルををリザーブ及び構成してよい。４１２で、RXスレッドは、接続準備済み信号、例えばCONN_READY信号、をピアデバイスに送信する。接続準備済み信号は、P2Pデバイス間のイベント、割り込み、又はその他のプロセス間通信（IPC）プロトコル信号であってよい。４１４で、RXスレッドは、データが受信されている間はアイドル状態になる。
【００３２】
４１６で、RXスレッドは、データの転送に成功したかを決定する。例えばRXスレッドは、データの転送に成功したかを、データ転送が完了したことを示す信号、例えばRX_DONE割り込み、が受信されたかを決定することで決定してよい。RXスレッドが、データの転送に成功しなかったと決定した場合には、RXスレッドは、４１８でエラー処理ルーチンを実行する。データの転送に成功したと決定した後で、RXスレッドは、接続終了信号、例えば、a connection closed signal, e.g., a CONN_CLOSED信号を、４２０でピアデバイスに送信する。４２２で、RXスレッドは、受信したデータを、アプリケーションが読み出すべきペンディングデータのリストに追加して、アプリケーションにデータを読み出すよう通知する。
【００３３】
図５は、データ転送を実行するスレッド優先度を調節又は維持するべくプロセッサが実行するスレッド優先度アルゴリズムの動作５００の例を示すフローチャートである。スレッド優先度アルゴリズムのパラメータは、スレッド優先度アレイ、優先ペンディングパケット数アレイ、インデックス、前方ステップPre_f_step、後方ステップPre_b_step、前のペンディングパケット数Pre_p_num、及び現在のペンディングパケット数Curr_p_numを含む。スレッド優先度アレイは、Nのサイズと値Pri[]={pri_min, pri_1, . . . , pri_max}とを有する。優先ペンディングパケット数アレイは、Nのサイズと、値P_num[]={0, 1, . . . , num_max}とを有する。インデックスは、スレッド優先度アレイ及びペンディングパケット数アレイのインデックスを表す。前方ステップPre_f_stepは、前方の（アップグレード）方向にスレッド優先度に適用するための調節量を表す。後方ステップPre_b_stepは、後方の（低下）方向にスレッド優先度に適用するための調節量を表す。前のペンディングパケット数Pre_p_numは、ピアツーピアデバイス間に転送されるべく前に残っていたデータのパケットの数を表す。現在のペンディングパケット数Curr_p_numは、ピアツーピアデバイス間で転送されるべく現在残っているデータのパケット数を表す。スレッド優先度アルゴリズムが最初にスレッドについて初期化されたときには、インデックス、Pre_p_num, Pre_f_step, and及びPre_b_stepは０に設定される。現在のペンディングパケット数Curr_p_numは、スレッド優先度アルゴリズムへの入力パラメータである。
【００３４】
５０２において、プロセッサは、現在のペンディングパケット数Curr_p_numが、前のペンディングパケット数Pre_p_numより大きいか、及び、現在のペンディングパケット数Curr_p_numが、インデックスP_num[Index]が特定する優先ペンディングパケット数アレイの値より大きいかを決定する。Curr_p_numが、Pre_p_num及び P_num[Index]の両方より大きい場合、プロセッサは、５０４で、スレッド優先度をアップグレードする動作を行う。
【００３５】
図６は、スレッド優先度をアップグレードするべくプロセッサが実行する動作６００の例を示すフローチャートである。６０２で、プロセッサは後方ステップPre_b_stepを０に設定して（Pre_b_step = 0）、優先度がアップグレードされていることを示す。６０４で、プロセッサは、前方ステップPre_f_stepが０より大きいかを決定する。Pre_f_stepが０より大きくない場合、スレッドは前にアップグレードされていないので、６０６で、Pre_f_stepが１に設定される(Pre_f_step = 1)。Pre_f_stepが０より大きい場合、スレッドは前にアップグレードされているので、６０８でPre_f_step が二倍にされてよい(Pre_f_step = Pre_f_step * 2)。６１０で、プロセッサはインデックスを、Pre_f_step、増加させる(Index = Index + Pre_f_step)。
【００３６】
図５に戻り、Curr_p_numがPre_p_num及び P_num[Index]の両方より大きくない場合、プロセッサは、５０８で、Curr_p_numがPre_p_numより小さいか、及びCurr_p_numがP_num[Index]より小さいかを決定する。Curr_p_numがPre_p_num及びP_num[Index]の両方より小さい場合には、プロセッサは５１０で、スレッド優先度を低下させる動作を実行する。
【００３７】
図７は、スレッド優先度を低下させるためにプロセッサが実行する動作７００の例を示すフローチャートである。７０２で、プロセッサは、前方ステップPre_f_stepを０に設定して(Pre_f_step = 0)、優先度が低下されていることを示す。７０４で、プロセッサは、後方ステップPre_b_stepが０より大きいかを決定する。Pre_b_stepが０より大きくない場合、スレッドは前に低下されていないので、７０６でPre_b_stepが１に設定される（Pre_b_step = 1）。Pre_b_stepが０より大きい場合、スレッドは前に低下されているので、７０８でPre_b_step が二倍にされてよい(Pre_b_step = Pre_b_step * 2)。７１０で、プロセッサはインデックスを、Pre_b_step低減させる（インデックス=インデックス+ Pre_b_step）。
【００３８】
図５の５１２に戻ると、スレッド優先度をアップグレード又は低下させた後に、プロセッサは、インデックスが、スレッド優先度アレイ及び優先ペンディングパケット数アレイの有効なインデックスを特定しているかを決定する。インデックスが０より小さい場合（インデックス＜０）、プロセッサはインデックスを０に設定する（インデックス＝０）。インデックスがＮ−１より大きい場合（インデックス＞Ｎ−１）、プロセッサはインデックスをＮ−１に設定する（インデックス＝Ｎ−１）。５１４で、プロセッサはPre_p_numをCurr_p_numに設定する(Pre_p_num = Curr_p_num)。５１６で、プロセッサはスレッド優先度をPri[index]に設定する。
【００３９】
プロセッサが、Curr_p_numがPre_p_num及びP_num[index]の両方より小さくない又は大きくない（not less than or greater）と決定すると、プロセッサは５１８でスレッド優先度を維持する。
【００４０】
図８ａ、図８ｂ、図８ｃは、スレッド優先度をアップグレード（図８ａ）、低下（図８ｂ）又は維持（図８ｃ）するための条件の例をグラフィックに示すチャートを示す。図８ａ、図８ｂ、図８ｃでは、０からＮ−１へとインデックスが増加するとき、優先ペンディングパケット数が増加する。図８ａに示すように、Curr_p_num > P_num[m+1] > Pre_p_numのとき、スレッド優先度は、インデックスをレベル（又はグレード）mから、より高いレベル（又はグレード）に上げることにより、アップグレードさせることができる。図８ｂに示すように、Curr_p_num < P_num[m] < Pre_p_numのとき、スレッド優先度は、インデックスをレベルmから、より低いレベルに低下することにより低下させてよい。図８ｃに示すように、P_num[m] < Curr_p_num ≦P_num[m+1] 及びP_num[m] < Pre_p_num≦ P_num[m+1]のとき、スレッド優先度は、インデックスをレベルmに保持することにより、維持させてよい。
【００４１】
図９は、スレッド優先度を調節するときにプロセッサが実行する動作９００の例を示すフローチャートである。プロセッサは、現在の調節が、前の調節と合致するか、又は、その反対であるかに基づいて、優先度ステップを決定する（例えば前方ステップPre_f_step又は後方ステップPre_b_step）。現在の調節が前の調節と同じ方向にあるとき（前方又は後方いずれであっても）、現在の調節は、前の調節と合致する。現在の調節が前の調節と反対の方向にあるとき（例えば、前にスレッド優先度を上げた後でスレッド優先度を下げることで）、現在の調節は前の調節の反対である。
【００４２】
９０２で、プロセッサはCurr_p_numとPre_p_numとを比較する。比較に基づいて、プロセッサは、９０４で、現在の調節が、前の調節に合致するかを決定する。例えば、Curr_p_numとPre_p_numとの比較が、Curr_p_numが前に増加した後に増加したと示している場合には、現在の調節が前の調節と合致している。同様に、Curr_p_numとPre_p_numとの比較が、Curr_p_numが前に低減した後に低減したと示している場合には、現在の調節が前の調節と合致している。
【００４３】
現在の調節が前の調節と合致している場合には、９０６でプロセッサは合致しているステップを繰り返して良い（例えば前方ステップPre_f_step 又は後方ステップPre_b_step）。プロセッサは、合致しているステップを、調節を繰り返すか、合致するステップを二倍にすることで繰り返してよい（例えば図６の６０８及び図７の７０８に示すように）。図９に戻り、現在の調節が前の調節と反対である場合には、プロセッサは、９０８に示すように、反対のステップを０に設定し（例えば図６の６０２及び図７の７０２に示すように）、及び合致しているステップを１に設定する（図６の６０６及び図７の７０６に示すように）。
【００４４】
スレッド優先度アレイ及び優先ペンディングパケット数アレイは、異なるソフトウェア、ハードウェア、または、プロセッサ上のソフトウェアとハードウェア構成との組み合わせに従ってユーザ定義されてよい。前方ステップPre_f_step及び後方ステップPre_b_stepは、ユーザ定義されてよく、及び、上述した値とは他の適切な値であってもよい。
【００４５】
TXスレッドについて、現在のペンディングパケット数Curr_p_numが、P2Pデバイス間で送信されるべく現在残っているペンディングパケット数を表して良い。異なるアプリケーションまたはユーザのシナリオであれば、データ送信レートに関する異なる要件を持っていて良い。例えば、メモリがデータを書き込むデータレートが、HSIがデータを転送できるデータレートよりも早い場合、現在のペンディングパケット数はより高くなる場合がある。データパケットが送信される前に、TXスレッドが、現在のペンディングパケット数を検出して、優先度を調節するかを決定する。ペンディングパケット数が増加している場合には、TXスレッド優先度をアップグレードして、TXスレッドをより速くスケジュールすることができ、これによりデータを、より速いデータレートで送信する。ペンディングパケット数が低減している場合には、TXスレッド優先度を低下させて、TXスレッドを、より遅くスケジュールすることができるようにして、同時に、任意のデータレート要件を満たすようにして、システムワークロードを均衡化するようにする。
【００４６】
RXスレッドについては、現在のペンディングパケット数Curr_p_numが、データを要求したアプリケーションを実行するプロセッサが読み出すために現在残っているペンディングパケット数を表して良い。データ転送要求を受信した後に、RXスレッドは、現在のペンディングパケット数を決定して、優先度を調節するかを決定する。ペンディングパケット数が増加している場合には、RXスレッド優先度がアップグレードされ、RXスレッドが、より速くスケジュールされるようにして、これにより、データがより高いデータレートで受信さされるようにする。ペンディングパケット数が低減している場合には、RXスレッド優先度が低下されて、これによりRXスレッドがより遅くスケジュールされ、同時に、依然としていずれのデータレート要件も満たされており、これにより、システムワークロードが均衡化される。
【００４７】
図１０は、バイト単位の異なるパケットサイズのためのMbps単位の送信データスループットレートの例を示すグラフである。ライン１０１０は、スレッド優先度アルゴリズムをデータの送信中に利用するときの、異なるパケットサイズのための送信データスループットレートを表す。ライン１０２０は、スレッド優先度アルゴリズムをデータの送信中に利用しないときの、異なるパケットサイズのための送信データスループットレートを表す。
【００４８】
図１１は、バイト単位の異なるパケットサイズのためのMbps単位の受信データスループットレートの例を示すグラフである。ライン１１１０は、スレッド優先度アルゴリズムがデータ受信中に利用されるときの異なるパケットサイズのための受信データスループットレートを表す。ライン１１２０は、スレッド優先度アルゴリズムがデータ受信中に利用されないときの異なるパケットサイズのための受信データスループットレートを表す。
【００４９】
幾つかの実装例を上述した通り記載してきたが、様々な修正例が可能である。開示した主題は、本明細書に記載した機能上の動作を含み、電子回路、コンピュータハードウェア、ファームウェア、ソフトウェア、またはこれらの組み合わせ、例えば、本明細書に開示している構造上の手段及びその構造的均等物、システムオンチップ（SoC）実装を含む、で実装することができる。
【００５０】
本明細書は多くの特定の例を含むが、これらは、請求されうるものの範囲を限定していると解釈されるべきではなく、むしろ、特定の実施形態特有でありうる特徴の記載としてとらえられるべきである。本明細書に記載されている、別個の実装のコンテキストにおける特定の特徴も、単一の実装例の組み合わせに実装可能である。逆に、単一の実装のコンテキストで記載された様々な特徴を、複数の実装に別々に実装したり、任意の適切なサブコンビネーションに実装したりすることもできる。更に、上述の説明において特徴は、特定の組み合わせで動作するものとして記載され、最初はそのように請求もされるが、請求されている組み合わせから１又は複数の特徴が場合によっては、組み合わせから削除されてもよく、請求される組み合わせを、サブコンビネーション又はサブコンビネーションの変形例としてもよい。
【００５１】
同様に、動作は図面では特定の順序で示されているが、これは、所望の結果を達成するために、該動作が示されている特定の順序もしくは順番に実行されねばならない、又は、全ての示されている動作を実行せねばならないものとして理解されるべきではない。特定の状況においては、マルチタスキング及び並列処理が有利な場合もあるだろう。更に、上述したような実装における様々なシステムコンポーネントの分離は、全ての実装においてこれらの分離を行わねばならない、として理解されるべきではない。他の実装も以下の請求項の範囲内に含まれる。
【図１】
2015515702.tif 000003
【図２】
2015515702.tif 000004
【図３】
2015515702.tif 000005
【図４】
2015515702.tif 000006
【図５】
2015515702.tif 000007
【図６】
2015515702.tif 000008
【図７】
2015515702.tif 000009
【図８ａ】
2015515702.tif 000010
【図８ｂ】
2015515702.tif 000011
【図８ｃ】
2015515702.tif 000012
【図９】
2015515702.tif 000013
【図１０】
2015515702.tif 000014
【図１１】
2015515702.tif 000015
【国際調査報告】
2015515702.tif 000016
2015515702.tif 000017