特許第6074779号(P6074779)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ マーベル ワールド トレード リミテッドの特許一覧

特許6074779ピアツーピア(P2P)デバイスの間のスループットを向上させるためのスレッド優先度の調節
<>
  • 特許6074779-ピアツーピア(P2P)デバイスの間のスループットを向上させるためのスレッド優先度の調節 図000002
  • 特許6074779-ピアツーピア(P2P)デバイスの間のスループットを向上させるためのスレッド優先度の調節 図000003
  • 特許6074779-ピアツーピア(P2P)デバイスの間のスループットを向上させるためのスレッド優先度の調節 図000004
  • 特許6074779-ピアツーピア(P2P)デバイスの間のスループットを向上させるためのスレッド優先度の調節 図000005
  • 特許6074779-ピアツーピア(P2P)デバイスの間のスループットを向上させるためのスレッド優先度の調節 図000006
  • 特許6074779-ピアツーピア(P2P)デバイスの間のスループットを向上させるためのスレッド優先度の調節 図000007
  • 特許6074779-ピアツーピア(P2P)デバイスの間のスループットを向上させるためのスレッド優先度の調節 図000008
  • 特許6074779-ピアツーピア(P2P)デバイスの間のスループットを向上させるためのスレッド優先度の調節 図000009
  • 特許6074779-ピアツーピア(P2P)デバイスの間のスループットを向上させるためのスレッド優先度の調節 図000010
  • 特許6074779-ピアツーピア(P2P)デバイスの間のスループットを向上させるためのスレッド優先度の調節 図000011
  • 特許6074779-ピアツーピア(P2P)デバイスの間のスループットを向上させるためのスレッド優先度の調節 図000012
  • 特許6074779-ピアツーピア(P2P)デバイスの間のスループットを向上させるためのスレッド優先度の調節 図000013
  • 特許6074779-ピアツーピア(P2P)デバイスの間のスループットを向上させるためのスレッド優先度の調節 図000014
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6074779
(24)【登録日】2017年1月20日
(45)【発行日】2017年2月8日
(54)【発明の名称】ピアツーピア(P2P)デバイスの間のスループットを向上させるためのスレッド優先度の調節
(51)【国際特許分類】
   G06F 9/48 20060101AFI20170130BHJP
【FI】
   G06F9/46 452B
【請求項の数】21
【全頁数】16
(21)【出願番号】特願2015-509086(P2015-509086)
(86)(22)【出願日】2013年4月23日
(65)【公表番号】特表2015-515702(P2015-515702A)
(43)【公表日】2015年5月28日
(86)【国際出願番号】US2013037854
(87)【国際公開番号】WO2013163223
(87)【国際公開日】20131031
【審査請求日】2015年10月28日
(31)【優先権主張番号】61/636,899
(32)【優先日】2012年4月23日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】502188642
【氏名又は名称】マーベル ワールド トレード リミテッド
(74)【代理人】
【識別番号】110000877
【氏名又は名称】龍華国際特許業務法人
(72)【発明者】
【氏名】ジョウ、シァオ
(72)【発明者】
【氏名】ザオ、シュエミン
【審査官】 田中 幸雄
(56)【参考文献】
【文献】 特開2005−92875(JP,A)
【文献】 特開2004−287883(JP,A)
【文献】 特開2000−47881(JP,A)
【文献】 米国特許第7900207(US,B1)
【文献】 米国特許出願公開第2006/0288350(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/48
(57)【特許請求の範囲】
【請求項1】
プロセッサによって、2つのデバイス間で転送されるべく現在残っているデータのパケット数を表す現在のペンディングパケット数を受信する段階と、
前記プロセッサによって、前記現在のペンディングパケット数と、前のペンディングパケット数と、優先ペンディングパケット数とに基づいて、スレッド優先度を調節するかを決定する段階であって、前記スレッドは、前記2つのデバイス間で前記データのパケットの転送を実行するべく前記プロセッサによって実行されるものであり、前記前のペンディングパケット数は、前記2つのデバイス間で転送されるべく前に残っていたデータのパケット数を表し、前記優先ペンディングパケット数は、前記スレッドの現在の優先度に対応している、前記決定する段階と、
前記プロセッサによって、前記決定する段階の結果に基づいて、前記スレッドの前記優先度を調節又は維持する段階と
を備える、方法。
【請求項2】
前記スレッドの前記優先度を調節するかを決定する段階は、
前記現在のペンディングパケット数と、前記前のペンディングパケット数とを比較する段階と、
前記現在のペンディングパケット数と、前記優先ペンディングパケット数とを比較する段階と、
前記現在のペンディングパケット数が前記前のペンディングパケット数より大きいか、又は小さい場合、及び、前記現在のペンディングパケット数が前記優先ペンディングパケット数より大きいか、又は小さい場合、前記スレッドの前記優先度を調節すると決定する段階と
を有する、請求項1に記載の方法。
【請求項3】
前記スレッドの前記優先度を調節又は維持する段階は、
前記現在のペンディングパケット数が前記前のペンディングパケット数より大きい場合、及び、前記現在のペンディングパケット数が前記優先ペンディングパケット数より大きい場合、前記スレッドの前記優先度をアップグレードする段階と、
前記現在のペンディングパケット数が前記前のペンディングパケット数より小さい場合、及び、前記現在のペンディングパケット数が前記優先ペンディングパケット数より小さい場合、前記スレッドの前記優先度を低下させる段階と、
さもなくば、前記スレッドの前記優先度を維持する段階と
を有する、請求項1または2に記載の方法。
【請求項4】
前記2つのデバイスはピアツーピア(P2P)デバイスであり、
前記優先ペンディングパケット数は、前記スレッドに関連付けられているインデックスにあるペンディングパケット数アレイに格納されている値であり、
前記ペンディングパケット数アレイに格納される複数の値は、前記2つのP2Pデバイスのうちの1つのそれぞれ異なる複数の構成に従って定義される、請求項1から3の何れか1項に記載の方法。
【請求項5】
前記スレッドの前記優先度を調節する段階は、
前記スレッドに関連付けられている前記インデックスを調節する段階と、
前記スレッドの前記優先度を、前記スレッドに関連付けられている前記インデックスにあるスレッド優先度アレイに格納されている値に設定する段階と
を有し、
前記スレッド優先度アレイに格納される複数の値は、前記2つのP2Pデバイスのうちの前記1つのそれぞれ異なる複数の構成に従って定義される、請求項4に記載の方法。
【請求項6】
前記スレッドの前記優先度を調節する段階は、
前記スレッドの前記優先度に適用する調節量を表すステップに基づいて前記スレッドの前記優先度を調節する段階を有し、
前記ステップはユーザ定義される、請求項1から5の何れか1項に記載の方法。
【請求項7】
前記スレッドの前記優先度の前記調節が、前記スレッドの前記優先度の前の調節と合致していると判断する段階と、
前記ステップに基づいて前記スレッドの前記優先度の前記調節を繰り返す段階と
を更に備える、請求項6に記載の方法。
【請求項8】
高速インタフェースと、
前記高速インタフェースに連結されたプロセッサと
を備える装置であって、
前記プロセッサは、
2つのデバイス間で転送されるべく現在残っているデータのパケット数を表す現在のペンディングパケット数を受信し、
前記現在のペンディングパケット数と、前のペンディングパケット数と、優先ペンディングパケット数とに基づいて、スレッド優先度を調節するかを決定し、前記スレッドは、前記2つのデバイス間で前記データのパケットの転送を実行するべく前記プロセッサによって実行されるものであり、前記前のペンディングパケット数は、前記2つのデバイス間で転送されるべく前に残っていたデータのパケット数を表し、前記優先ペンディングパケット数は、前記スレッドの現在の優先度に対応しており、
前記決定の結果に基づいて、前記スレッドの前記優先度を調節又は維持する、装置。
【請求項9】
前記プロセッサは、
前記現在のペンディングパケット数と、前記前のペンディングパケット数とを比較し、
前記現在のペンディングパケット数と、前記優先ペンディングパケット数とを比較し、
前記現在のペンディングパケット数が前記前のペンディングパケット数より大きいか、又は小さい場合、及び、前記現在のペンディングパケット数が前記優先ペンディングパケット数より大きいか、又は小さい場合、前記スレッドの前記優先度を調節すると決定する、請求項8に記載の装置。
【請求項10】
前記プロセッサは、
前記現在のペンディングパケット数が前記前のペンディングパケット数より大きい場合、及び、前記現在のペンディングパケット数が前記優先ペンディングパケット数より大きい場合、前記スレッドの前記優先度をアップグレードし、
前記現在のペンディングパケット数が前記前のペンディングパケット数より小さい場合、及び、前記現在のペンディングパケット数が前記優先ペンディングパケット数より小さい場合、前記スレッドの前記優先度を低下させ、
さもなくば、前記スレッドの前記優先度を維持する、請求項8または9に記載の装置。
【請求項11】
前記2つのデバイスはピアツーピア(P2P)デバイスであり、
前記優先ペンディングパケット数は、前記スレッドに関連付けられているインデックスにあるペンディングパケット数アレイに格納されている値であり、
前記ペンディングパケット数アレイに格納される複数の値は、前記2つのP2Pデバイスのうちの1つのそれぞれ異なる複数の構成に従って定義される、請求項8から10の何れか1項に記載の装置。
【請求項12】
前記プロセッサは、
前記スレッドに関連付けられている前記インデックスを調節し、
前記スレッドの前記優先度を、前記スレッドに関連付けられている前記インデックスにあるスレッド優先度アレイに格納されている値に設定し、
前記スレッド優先度アレイに格納される複数の値は、前記2つのP2Pデバイスのうちの前記1つのそれぞれ異なる複数の構成に従って定義される、請求項11に記載の装置。
【請求項13】
前記プロセッサは、
前記スレッドの前記優先度に適用する調節量を表すステップに基づいて前記スレッドの前記優先度を調節し、
前記ステップはユーザ定義される、請求項8から12の何れか1項に記載の装置。
【請求項14】
前記プロセッサは、
前記スレッドの前記優先度の前記調節が、前記スレッドの前記優先度の前の調節と合致していると判断し、
前記ステップに基づいて前記スレッドの前記優先度の前記調節を繰り返す、請求項13に記載の装置。
【請求項15】
第1のデバイスと、
第2のデバイスと、
前記第1のデバイスと前記第2のデバイスとを連結する高速インタフェースと、
前記第2のデバイスに連結されたプロセッサと
を備えるシステムであって、
前記プロセッサは、
前記第1のデバイスと前記第2のデバイスとの間で転送されるべく現在残っているデータのパケット数を表す現在のペンディングパケット数を受信し、
前記現在のペンディングパケット数と、前のペンディングパケット数と、優先ペンディングパケット数とに基づいて、スレッド優先度を調節するかを決定し、前記スレッドは、前記第1のデバイスと前記第2のデバイスとの間で前記データのパケットの転送を実行するべく前記プロセッサによって実行されるものであり、前記前のペンディングパケット数は、前記第1のデバイスと前記第2のデバイスと間で転送されるべく前に残っていたデータのパケット数を表し、前記優先ペンディングパケット数は、前記スレッドの現在の優先度に対応しており、
前記決定の結果に基づいて、前記スレッドの前記優先度を調節又は維持する、システム。
【請求項16】
前記プロセッサは、
前記現在のペンディングパケット数と、前記前のペンディングパケット数とを比較し、
前記現在のペンディングパケット数と、前記優先ペンディングパケット数とを比較し、
前記現在のペンディングパケット数が前記前のペンディングパケット数より大きいか、又は小さい場合、及び、前記現在のペンディングパケット数が前記優先ペンディングパケット数より大きいか、又は小さい場合、前記スレッドの前記優先度を調節すると決定する、請求項15に記載のシステム。
【請求項17】
前記プロセッサは、
前記現在のペンディングパケット数が前記前のペンディングパケット数より大きい場合、及び、前記現在のペンディングパケット数が前記優先ペンディングパケット数より大きい場合、前記スレッドの前記優先度をアップグレードし、
前記現在のペンディングパケット数が前記前のペンディングパケット数より小さい場合、及び、前記現在のペンディングパケット数が前記優先ペンディングパケット数より小さい場合、前記スレッドの前記優先度を低下させ、
さもなくば、前記スレッドの前記優先度を維持する、請求項15または16に記載のシステム。
【請求項18】
前記高速インタフェースは、前記第1のデバイスと前記第2のデバイスとをピアツーピア(P2P)構成で連結し、
前記優先ペンディングパケット数は、前記スレッドに関連付けられているインデックスにあるペンディングパケット数アレイに格納されている値であり、
前記ペンディングパケット数アレイに格納される複数の値は、前記第2のデバイスのそれぞれ異なる複数の構成に従って定義される、請求項15から17の何れか1項に記載のシステム。
【請求項19】
前記プロセッサは、
前記スレッドに関連付けられている前記インデックスを調節し、
前記スレッドの前記優先度を、前記スレッドに関連付けられている前記インデックスにあるスレッド優先度アレイに格納されている値に設定し、
前記スレッド優先度アレイに格納される複数の値は、前記第2のデバイスのそれぞれ異なる複数の構成に従って定義される、請求項18に記載のシステム。
【請求項20】
前記プロセッサは、
前記スレッドの前記優先度に適用する調節量を表すステップに基づいて前記スレッドの前記優先度を調節し、
前記ステップはユーザ定義される、請求項15から19の何れか1項に記載のシステム。
【請求項21】
前記プロセッサは、
前記スレッドの前記優先度の前記調節が、前記スレッドの前記優先度の前の調節と合致していると判断し、
前記ステップに基づいて前記スレッドの前記優先度の前記調節を繰り返す、請求項20に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
<関連出願への相互参照>
本開示は米国35 U.S.C.セクション119(e)条において、2012年4月23日に提出された米国仮出願第61/636,899号(名称:Algorithm for Self-Adaptively Adjusting Thread Priority to Improve Throughput between P2P Devices)の優先権の恩恵を主張し、この開示の全体をここに参照により組み込むものとする。
【0002】
本開示は、スレッド優先度を調節することに関し、より詳しくは、ピアツーピア(P2P)デバイス間のスループットを向上させるためにスレッド優先度を調節することに関する。
【背景技術】
【0003】
技術の急速な発展につれて、現代のプロセッサには、100Mbpsを超えるデータ送信速度のデバイスを実装することができる。高速デバイスにおいては、スレッドのスケジューリングが、送信スループットに影響を及ぼす場合がある。ワークロードが軽いシステムでは、スレッドは、該スレッドが最小でも30μsごとに実行されるようにスケジュールされてよい。しかしながらワークロードがより高いシステムでは、スレッドは実行までに100μsか又はそれより長く待つ必要がある場合もある。最低の優先度のスレッドに至っては、どのくらいの時間待つか不確定な場合もある。待ち時間を最小限にするためには、スレッドにより高い優先度が割り当てればよい。しかし、高い固定した優先度を割り当てられたスレッドは、スレッドがアイドルのときであっても(例えばスレッドが時間が重要なイベントに応答していないとき)、優先的にシステムリソースを占有し、利用しうる。
【0004】
例えば、100Mbpsを超える速度でのデータ送信をサポートする高速インタフェース(HSI)を含むシステムがある。HSIは、1500バイトの送信制御プロトコル/インターネットプロトコル(TCP/IP)パケットの1250バイトを、HSIがシステムリソースを割り当てられている期間中(例えばタイムスライス)に転送してよい。HSIが、その次のタイムスライスのために100μsを超える時間待つ必要がある場合、待ち時間は、HSIのパフォーマンスに悪影響を及ぼす場合がある。待ち時間を最小限に抑えるためには、HSIに関連づけられたスレッドに、より高い優先度を割り当てても良い。しかしながら、HSIに関連付けられたスレッドに、より高い優先度を割り当てると、HSIは、HSIがデータ送信を行っていないときであっても、システムリソースを優先的に占有、利用してしまう場合がある。
【発明の概要】
【0005】
本開示は、ピアツーピア(P2P)デバイス間のスループットを向上させるためにスレッド優先度を調節することに関するシステム及び技術を記載する。概して、一態様では、プロセッサが、2つのデバイス間で転送されるべく現在残っているデータのパケット数を表す現在のペンディングパケット数を受信し、現在のペンディングパケット数と、前のペンディングパケット数と、優先ペンディングパケット数とに基づいて、スレッド優先度を調節するかを決定し、スレッド優先度を調節するかの決定に基づいて、スレッド優先度を調節又は維持するよう構成される。スレッドは、2つのデバイス間でデータのパケットの転送を実行するべくプロセッサによって実行されるものであり、前のペンディングパケット数は、2つのデバイス間で転送されるべく前に残っていたデータのパケット数を表し、優先ペンディングパケット数は、スレッドの現在の優先度に対応しており、よう構成されている。
【0006】
記載するシステム及び技術は、以下の利点の1又は複数を実現するために実装することができる。デバイス間で転送されるのを待つデータ量が増加したときには、データを、より高速レートで転送することができるようにデータ転送タスクの優先度を増加することにより、デバイス間の送信スループットを向上させることができる。転送されるのを待つデータ量が低減したときには、他のタスクをスケジュールすることを可能としつつ、デバイスの最小データ転送レートを満たすことができるよう、データ転送タスクの優先度を低減させることにより、システムワークロードが均衡化されてよい。
【0007】
記載されるシステム及び技術は、電子回路、コンピュータハードウェア、ファームウェア、ソフトウェア、又はこれらの組み合わせ(例えば、本明細書に開示する構造的手段及びその構造的均等物等)に実装することができる。これは、1又は複数のデータ処理装置に、記載する動作を実行させるよう動作可能なプログラムを具現化する少なくとも1つのコンピュータ可読媒体を含むことができる。従って、プログラム実装は、開示した方法、システム、又は装置から実現することができ、装置実装は、開示したシステム、コンピュータ可読媒体、又は方法から実現することができる。同様に、方法実装は、開示したシステム、コンピュータ可読媒体、又は装置から実現することができ、システム実装は、開示した方法、コンピュータ可読媒体、又は装置から実現することができる。
【0008】
1又は複数の実装の詳細を、添付図面と以下の記載において述べる。他の特徴、目的、及び利点は、記載、図面、及び請求項から明らかになるだろう。
【図面の簡単な説明】
【0009】
図1】P2Pデバイス間のスループットを向上させるためにスレッド優先度を調節することができるシステムの例を示すブロック図である。
【0010】
図2】データを転送するためにP2Pデバイス間で交換される信号の例を示す信号図である。
【0011】
図3】トランスミッタスレッドを実行するべくプロセッサによって実行される動作300の例を示すフローチャートである。
【0012】
図4】レシーバスレッドを実行するべくプロセッサによって実行される動作の例を示すフローチャートである。
【0013】
図5】データ転送を実行するスレッド優先度を調節又は維持するべくプロセッサによって実行されるスレッド優先度アルゴリズムの動作の例を示すフローチャートである。
【0014】
図6】スレッド優先度をアップグレードするべくプロセッサによって実行される動作の例を示すフローチャートである。
【0015】
図7】スレッド優先度を低下させるべくプロセッサによって実行される動作の例を示すフローチャートである。
【0016】
図8a】スレッド優先度をアップグレード、低下、又は維持するための条件の例をグラフィックに示すチャートを示す。
図8b】スレッド優先度をアップグレード、低下、又は維持するための条件の例をグラフィックに示すチャートを示す。
図8c】スレッド優先度をアップグレード、低下、又は維持するための条件の例をグラフィックに示すチャートを示す。
【0017】
図9】スレッド優先度を調節するときにプロセッサによって実行される動作の例を示すフローチャートである。
【0018】
図10】バイト単位の異なるパケットサイズのためのMbps単位の転送データスループットレートの例を示すグラフである。
【0019】
図11】バイト単位の異なるパケットサイズのためのMbps単位の受信データスループットレートの例を示すグラフである。
【発明を実施するための形態】
【0020】
本開示の様々な実装例を、データをピアツーピア(P2P)デバイス間で高速(例えば100Mbpsかそれ以上)で転送する高速インタフェース(HSI)を含むシステムの例を参照しながら以下で説明する。これらシステムの例は、ルータ、プロセッサ、メモリ、及びその他の埋め込みシステムを含んで良い。本開示に記載するシステム及び技術は、概して、データスループットを向上させてシステムワークロードを均衡化させるべくスレッド優先度を調節することが望ましいいずれのシステムに対しても適用可能である。故に、図1は、スレッド優先度を調節することができるシステムの幾つかの実装例に対応しており、他のシステム実装には、図1に示すものと異なるコンポーネントが含まれてよい。
【0021】
図1は、スレッド優先度がP2Pデバイス102及び104の間のスループットを向上せるべく調節されてよいシステム100の例を示すブロック図である。P2Pデバイス102及び104は、例えば、アプリケーションプロセッサ及びメモリであってよい。デバイス102は、処理コア又はコントローラ110、及び、デバイス102がデータを高速で送信及び受信するHSI106を含む。デバイス104は、処理コア又はコントローラ112、及び、デバイス104がデータを高速で送信及び受信するHSI108を含む。
【0022】
図2は、データを転送するべく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との間で交換される。
【0023】
図3は、トランスミッタ(TX)スレッドを実行するプロセッサが実行する動作300の例を示すフローチャートである。動作300は、プログラムコード、ハードウェア、又は、プロセッサに実装されるハードウェア及びプログラムコードの組み合わせによって実行されてよい。
【0024】
302で、TXスレッドはアイドルであり、データがピアデバイスに送信されていない。304で、TXスレッドは、スレッド優先度アルゴリズムを実行するが、これに関しては本開示で詳しく後述する。306で、TXスレッドは、保留パケット(suspension packet)とも称される任意のペンディングパケットが、ピアデバイスに送信するために残っているかを決定する。ペンディングパケットが残っていない場合には、TXスレッドは308でXミリ秒間スリープ状態に入り、この間TXスレッドはアイドル状態になる。幾つかの実装例では、TXスレッドがスリープ状態になるミリ秒の数Xは、異なるソフトウェア、ハードウェア、又はプロセッサ上のソフトウェア及びハードウェア構成の組み合わせに従ってユーザ定義されてよい。幾つかの実装例では、TXスレッドがスリープ状態になるミリ秒の数Xは、感度及び電力消費等の、システムのパフォーマンスに影響をもつ要素に基づいていて良い。
【0025】
ペンディングパケットが送信するために残っている場合には、TXスレッドは、310でデータ転送を開始する。例えば、TXスレッドは、OPEN_CONN信号をピアデバイスに送信することによりデータ転送を開始してよい。
【0026】
312で、TXスレッドが、データを送信可能か決定する。TXスレッドがデータを送信可能でないと決定する場合には、TXスレッドはエラー処理ルーチンを314で実行する。例えばTXスレッドは、ACK信号及びCONN_READY信号を受信した後にデータを送信可能であると決定してよい。ACK信号又はCONN_READY信号が、対応するタイムアウト期間の後にも受信されない場合、TXスレッドはエラー処理ルーチンを実行する。
【0027】
データを送信可能であると決定した後で、318にてTXスレッドはデータユニット、例えばデータパケットを、ピアデバイスに送信する。TXスレッドは、データパケットの全てのデータが送信されるまで、1又は複数のタイムスライスで実行されてよい。
【0028】
データパケットを送信した後で、TXスレッドは、320で、データの転送に成功したかを決定する。TXスレッドが、データの転送に成功しなかったと決定した場合には、TXスレッドは、314でエラー処理ルーチンを実行する。例えばTXスレッドは、データの転送に成功したかを、CONN_CLOSED信号が受信されたかを決定することで決定してよい。CONN_CLOSED信号が、タイムアウト期間の後にも受信されない場合には、TXスレッドはエラー処理ルーチンを実行する。データの転送に成功したと決定した後に、TXスレッドは、304でスレッド優先度アルゴリズムを実行する。
【0029】
図4は、レシーバ(RX)スレッドを実行するプロセッサが実行する動作400の例を示すフローチャートである。動作400は、プログラムコード、ハードウェア、又は、プロセッサに実装されるハードウェア及びプログラムコードの組み合わせによって実行されてよい。
【0030】
402で、RXスレッドはアイドルであり、データがピアデバイスに送信されていない。404で、RXスレッドは、データ転送要求が受信されたかを決定する。データ転送要求は、P2Pデバイス間のイベント、割り込み、又はその他のプロセス間通信(IPC)プロトコル信号であってよい。例えば、RXスレッドは、OPEN_CONN信号が受信されたかを決定することにより、データ転送要求が受信されたかを決定してよい。データ転送要求が受信されなかった場合には、402でRXスレッドがアイドル状態にとどまる。データ転送要求を受信した後で、RXスレッドは、406でスレッド優先度アルゴリズムを実行するが、これに関しては本開示で詳しく後述する。
【0031】
408で、RXスレッドは、任意で、肯定応答信号、例えばACK信号、を、ピアデバイスに送信して、データ転送要求の受信を肯定応答してよい。410で、RXスレッドは、データの受信準備をしてよい。例えば、RXスレッドは、データを受信するためにメモリを割り当て、ダイナミックメモリアクセス(DMA)チャネルををリザーブ及び構成してよい。412で、RXスレッドは、接続準備済み信号、例えばCONN_READY信号、をピアデバイスに送信する。接続準備済み信号は、P2Pデバイス間のイベント、割り込み、又はその他のプロセス間通信(IPC)プロトコル信号であってよい。414で、RXスレッドは、データが受信されている間はアイドル状態になる。
【0032】
416で、RXスレッドは、データの転送に成功したかを決定する。例えばRXスレッドは、データの転送に成功したかを、データ転送が完了したことを示す信号、例えばRX_DONE割り込み、が受信されたかを決定することで決定してよい。RXスレッドが、データの転送に成功しなかったと決定した場合には、RXスレッドは、418でエラー処理ルーチンを実行する。データの転送に成功したと決定した後で、RXスレッドは、接続終了信号、例えば、a connection closed signal, e.g., a CONN_CLOSED信号を、420でピアデバイスに送信する。422で、RXスレッドは、受信したデータを、アプリケーションが読み出すべきペンディングデータのリストに追加して、アプリケーションにデータを読み出すよう通知する。
【0033】
図5は、データ転送を実行するスレッド優先度を調節又は維持するべくプロセッサが実行するスレッド優先度アルゴリズムの動作500の例を示すフローチャートである。スレッド優先度アルゴリズムのパラメータは、スレッド優先度アレイ、優先ペンディングパケット数アレイ、インデックス、前方ステップ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は0に設定される。現在のペンディングパケット数Curr_p_numは、スレッド優先度アルゴリズムへの入力パラメータである。
【0034】
502において、プロセッサは、現在のペンディングパケット数Curr_p_numが、前のペンディングパケット数Pre_p_numより大きいか、及び、現在のペンディングパケット数Curr_p_numが、インデックスP_num[Index]が特定する優先ペンディングパケット数アレイの値より大きいかを決定する。Curr_p_numが、Pre_p_num及び P_num[Index]の両方より大きい場合、プロセッサは、504で、スレッド優先度をアップグレードする動作を行う。
【0035】
図6は、スレッド優先度をアップグレードするべくプロセッサが実行する動作600の例を示すフローチャートである。602で、プロセッサは後方ステップPre_b_stepを0に設定して(Pre_b_step = 0)、優先度がアップグレードされていることを示す。604で、プロセッサは、前方ステップPre_f_stepが0より大きいかを決定する。Pre_f_stepが0より大きくない場合、スレッドは前にアップグレードされていないので、606で、Pre_f_stepが1に設定される(Pre_f_step = 1)。Pre_f_stepが0より大きい場合、スレッドは前にアップグレードされているので、608でPre_f_step が二倍にされてよい(Pre_f_step = Pre_f_step * 2)。610で、プロセッサはインデックスを、Pre_f_step、増加させる(Index = Index + Pre_f_step)。
【0036】
図5に戻り、Curr_p_numがPre_p_num及び P_num[Index]の両方より大きくない場合、プロセッサは、508で、Curr_p_numがPre_p_numより小さいか、及びCurr_p_numがP_num[Index]より小さいかを決定する。Curr_p_numがPre_p_num及びP_num[Index]の両方より小さい場合には、プロセッサは510で、スレッド優先度を低下させる動作を実行する。
【0037】
図7は、スレッド優先度を低下させるためにプロセッサが実行する動作700の例を示すフローチャートである。702で、プロセッサは、前方ステップPre_f_stepを0に設定して(Pre_f_step = 0)、優先度が低下されていることを示す。704で、プロセッサは、後方ステップPre_b_stepが0より大きいかを決定する。Pre_b_stepが0より大きくない場合、スレッドは前に低下されていないので、706でPre_b_stepが1に設定される(Pre_b_step = 1)。Pre_b_stepが0より大きい場合、スレッドは前に低下されているので、708でPre_b_step が二倍にされてよい(Pre_b_step = Pre_b_step * 2)。710で、プロセッサはインデックスを、Pre_b_step低減させる(インデックス=インデックス+ Pre_b_step)。
【0038】
図5の512に戻ると、スレッド優先度をアップグレード又は低下させた後に、プロセッサは、インデックスが、スレッド優先度アレイ及び優先ペンディングパケット数アレイの有効なインデックスを特定しているかを決定する。インデックスが0より小さい場合(インデックス<0)、プロセッサはインデックスを0に設定する(インデックス=0)。インデックスがN−1より大きい場合(インデックス>N−1)、プロセッサはインデックスをN−1に設定する(インデックス=N−1)。514で、プロセッサはPre_p_numをCurr_p_numに設定する(Pre_p_num = Curr_p_num)。516で、プロセッサはスレッド優先度をPri[index]に設定する。
【0039】
プロセッサが、Curr_p_numがPre_p_num及びP_num[index]の両方より小さくない又は大きくない(not less than or greater)と決定すると、プロセッサは518でスレッド優先度を維持する。
【0040】
図8a、図8b、図8cは、スレッド優先度をアップグレード(図8a)、低下(図8b)又は維持(図8c)するための条件の例をグラフィックに示すチャートを示す。図8a、図8b、図8cでは、0からN−1へとインデックスが増加するとき、優先ペンディングパケット数が増加する。図8aに示すように、Curr_p_num > P_num[m+1] > Pre_p_numのとき、スレッド優先度は、インデックスをレベル(又はグレード)mから、より高いレベル(又はグレード)に上げることにより、アップグレードさせることができる。図8bに示すように、Curr_p_num < P_num[m] < Pre_p_numのとき、スレッド優先度は、インデックスをレベルmから、より低いレベルに低下することにより低下させてよい。図8cに示すように、P_num[m] < Curr_p_num ≦P_num[m+1] 及びP_num[m] < Pre_p_num≦ P_num[m+1]のとき、スレッド優先度は、インデックスをレベルmに保持することにより、維持させてよい。
【0041】
図9は、スレッド優先度を調節するときにプロセッサが実行する動作900の例を示すフローチャートである。プロセッサは、現在の調節が、前の調節と合致するか、又は、その反対であるかに基づいて、優先度ステップを決定する(例えば前方ステップPre_f_step又は後方ステップPre_b_step)。現在の調節が前の調節と同じ方向にあるとき(前方又は後方いずれであっても)、現在の調節は、前の調節と合致する。現在の調節が前の調節と反対の方向にあるとき(例えば、前にスレッド優先度を上げた後でスレッド優先度を下げることで)、現在の調節は前の調節の反対である。
【0042】
902で、プロセッサはCurr_p_numとPre_p_numとを比較する。比較に基づいて、プロセッサは、904で、現在の調節が、前の調節に合致するかを決定する。例えば、Curr_p_numとPre_p_numとの比較が、Curr_p_numが前に増加した後に増加したと示している場合には、現在の調節が前の調節と合致している。同様に、Curr_p_numとPre_p_numとの比較が、Curr_p_numが前に低減した後に低減したと示している場合には、現在の調節が前の調節と合致している。
【0043】
現在の調節が前の調節と合致している場合には、906でプロセッサは合致しているステップを繰り返して良い(例えば前方ステップPre_f_step 又は後方ステップPre_b_step)。プロセッサは、合致しているステップを、調節を繰り返すか、合致するステップを二倍にすることで繰り返してよい(例えば図6の608及び図7の708に示すように)。図9に戻り、現在の調節が前の調節と反対である場合には、プロセッサは、908に示すように、反対のステップを0に設定し(例えば図6の602及び図7の702に示すように)、及び合致しているステップを1に設定する(図6の606及び図7の706に示すように)。
【0044】
スレッド優先度アレイ及び優先ペンディングパケット数アレイは、異なるソフトウェア、ハードウェア、または、プロセッサ上のソフトウェアとハードウェア構成との組み合わせに従ってユーザ定義されてよい。前方ステップPre_f_step及び後方ステップPre_b_stepは、ユーザ定義されてよく、及び、上述した値とは他の適切な値であってもよい。
【0045】
TXスレッドについて、現在のペンディングパケット数Curr_p_numが、P2Pデバイス間で送信されるべく現在残っているペンディングパケット数を表して良い。異なるアプリケーションまたはユーザのシナリオであれば、データ送信レートに関する異なる要件を持っていて良い。例えば、メモリがデータを書き込むデータレートが、HSIがデータを転送できるデータレートよりも早い場合、現在のペンディングパケット数はより高くなる場合がある。データパケットが送信される前に、TXスレッドが、現在のペンディングパケット数を検出して、優先度を調節するかを決定する。ペンディングパケット数が増加している場合には、TXスレッド優先度をアップグレードして、TXスレッドをより速くスケジュールすることができ、これによりデータを、より速いデータレートで送信する。ペンディングパケット数が低減している場合には、TXスレッド優先度を低下させて、TXスレッドを、より遅くスケジュールすることができるようにして、同時に、任意のデータレート要件を満たすようにして、システムワークロードを均衡化するようにする。
【0046】
RXスレッドについては、現在のペンディングパケット数Curr_p_numが、データを要求したアプリケーションを実行するプロセッサが読み出すために現在残っているペンディングパケット数を表して良い。データ転送要求を受信した後に、RXスレッドは、現在のペンディングパケット数を決定して、優先度を調節するかを決定する。ペンディングパケット数が増加している場合には、RXスレッド優先度がアップグレードされ、RXスレッドが、より速くスケジュールされるようにして、これにより、データがより高いデータレートで受信さされるようにする。ペンディングパケット数が低減している場合には、RXスレッド優先度が低下されて、これによりRXスレッドがより遅くスケジュールされ、同時に、依然としていずれのデータレート要件も満たされており、これにより、システムワークロードが均衡化される。
【0047】
図10は、バイト単位の異なるパケットサイズのためのMbps単位の送信データスループットレートの例を示すグラフである。ライン1010は、スレッド優先度アルゴリズムをデータの送信中に利用するときの、異なるパケットサイズのための送信データスループットレートを表す。ライン1020は、スレッド優先度アルゴリズムをデータの送信中に利用しないときの、異なるパケットサイズのための送信データスループットレートを表す。
【0048】
図11は、バイト単位の異なるパケットサイズのためのMbps単位の受信データスループットレートの例を示すグラフである。ライン1110は、スレッド優先度アルゴリズムがデータ受信中に利用されるときの異なるパケットサイズのための受信データスループットレートを表す。ライン1120は、スレッド優先度アルゴリズムがデータ受信中に利用されないときの異なるパケットサイズのための受信データスループットレートを表す。
【0049】
幾つかの実装例を上述した通り記載してきたが、様々な修正例が可能である。開示した主題は、本明細書に記載した機能上の動作を含み、電子回路、コンピュータハードウェア、ファームウェア、ソフトウェア、またはこれらの組み合わせ、例えば、本明細書に開示している構造上の手段及びその構造的均等物、システムオンチップ(SoC)実装を含む、で実装することができる。
【0050】
本明細書は多くの特定の例を含むが、これらは、請求されうるものの範囲を限定していると解釈されるべきではなく、むしろ、特定の実施形態特有でありうる特徴の記載としてとらえられるべきである。本明細書に記載されている、別個の実装のコンテキストにおける特定の特徴も、単一の実装例の組み合わせに実装可能である。逆に、単一の実装のコンテキストで記載された様々な特徴を、複数の実装に別々に実装したり、任意の適切なサブコンビネーションに実装したりすることもできる。更に、上述の説明において特徴は、特定の組み合わせで動作するものとして記載され、最初はそのように請求もされるが、請求されている組み合わせから1又は複数の特徴が場合によっては、組み合わせから削除されてもよく、請求される組み合わせを、サブコンビネーション又はサブコンビネーションの変形例としてもよい。
【0051】
同様に、動作は図面では特定の順序で示されているが、これは、所望の結果を達成するために、該動作が示されている特定の順序もしくは順番に実行されねばならない、又は、全ての示されている動作を実行せねばならないものとして理解されるべきではない。特定の状況においては、マルチタスキング及び並列処理が有利な場合もあるだろう。更に、上述したような実装における様々なシステムコンポーネントの分離は、全ての実装においてこれらの分離を行わねばならない、として理解されるべきではない。他の実装も以下の請求項の範囲内に含まれる。
図1
図2
図3
図4
図5
図6
図7
図8a
図8b
図8c
図9
図10
図11