JP2015515702A - ピアツーピア(p2p)デバイスの間のスループットを向上させるためのスレッド優先度の調節 - Google Patents

ピアツーピア(p2p)デバイスの間のスループットを向上させるためのスレッド優先度の調節 Download PDF

Info

Publication number
JP2015515702A
JP2015515702A JP2015509086A JP2015509086A JP2015515702A JP 2015515702 A JP2015515702 A JP 2015515702A JP 2015509086 A JP2015509086 A JP 2015509086A JP 2015509086 A JP2015509086 A JP 2015509086A JP 2015515702 A JP2015515702 A JP 2015515702A
Authority
JP
Japan
Prior art keywords
priority
thread
pending
packets
current
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2015509086A
Other languages
English (en)
Other versions
JP6074779B2 (ja
Inventor
ジョウ、シァオ
ザオ、シュエミン
Original Assignee
マーベル ワールド トレード リミテッド
マーベル ワールド トレード リミテッド
ジョウ、シァオ
ザオ、シュエミン
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by マーベル ワールド トレード リミテッド, マーベル ワールド トレード リミテッド, ジョウ、シァオ, ザオ、シュエミン filed Critical マーベル ワールド トレード リミテッド
Publication of JP2015515702A publication Critical patent/JP2015515702A/ja
Application granted granted Critical
Publication of JP6074779B2 publication Critical patent/JP6074779B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5038Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration

Abstract

幾つかの実装例では、プロセッサが、2つのデバイス間で転送されるべく現在残っているデータのパケット数を表す現在のペンディングパケット数を受信し、現在のペンディングパケット数と、前のペンディングパケット数と、優先ペンディングパケット数とに基づいて、スレッド優先度を調節するかを決定し、スレッド優先度を調節するかの決定に基づいて、スレッド優先度を調節又は維持するよう構成されている。スレッドは、2つのデバイス間でデータのパケットの転送を実行するべくプロセッサによって実行されるものであり、前のペンディングパケット数は、2つのデバイス間で転送されるべく前に残っていたデータのパケット数を表し、優先ペンディングパケット数は、スレッドの現在の優先度に対応している。

Description

<関連出願への相互参照>
本開示は米国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)の優先権の恩恵を主張し、この開示の全体をここに参照により組み込むものとする。
本開示は、スレッド優先度を調節することに関し、より詳しくは、ピアツーピア(P2P)デバイス間のスループットを向上させるためにスレッド優先度を調節することに関する。
技術の急速な発展につれて、現代のプロセッサには、100Mbpsを超えるデータ送信速度のデバイスを実装することができる。高速デバイスにおいては、スレッドのスケジューリングが、送信スループットに影響を及ぼす場合がある。ワークロードが軽いシステムでは、スレッドは、該スレッドが最小でも30μsごとに実行されるようにスケジュールされてよい。しかしながらワークロードがより高いシステムでは、スレッドは実行までに100μsか又はそれより長く待つ必要がある場合もある。最低の優先度のスレッドに至っては、どのくらいの時間待つか不確定な場合もある。待ち時間を最小限にするためには、スレッドにより高い優先度が割り当てればよい。しかし、高い固定した優先度を割り当てられたスレッドは、スレッドがアイドルのときであっても(例えばスレッドが時間が重要なイベントに応答していないとき)、優先的にシステムリソースを占有し、利用しうる。
例えば、100Mbpsを超える速度でのデータ送信をサポートする高速インタフェース(HSI)を含むシステムがある。HSIは、1500バイトの送信制御プロトコル/インターネットプロトコル(TCP/IP)パケットの1250バイトを、HSIがシステムリソースを割り当てられている期間中(例えばタイムスライス)に転送してよい。HSIが、その次のタイムスライスのために100μsを超える時間待つ必要がある場合、待ち時間は、HSIのパフォーマンスに悪影響を及ぼす場合がある。待ち時間を最小限に抑えるためには、HSIに関連づけられたスレッドに、より高い優先度を割り当てても良い。しかしながら、HSIに関連付けられたスレッドに、より高い優先度を割り当てると、HSIは、HSIがデータ送信を行っていないときであっても、システムリソースを優先的に占有、利用してしまう場合がある。
本開示は、ピアツーピア(P2P)デバイス間のスループットを向上させるためにスレッド優先度を調節することに関するシステム及び技術を記載する。概して、一態様では、プロセッサが、2つのデバイス間で転送されるべく現在残っているデータのパケット数を表す現在のペンディングパケット数を受信し、現在のペンディングパケット数と、前のペンディングパケット数と、優先ペンディングパケット数とに基づいて、スレッド優先度を調節するかを決定し、スレッド優先度を調節するかの決定に基づいて、スレッド優先度を調節又は維持するよう構成される。スレッドは、2つのデバイス間でデータのパケットの転送を実行するべくプロセッサによって実行されるものであり、前のペンディングパケット数は、2つのデバイス間で転送されるべく前に残っていたデータのパケット数を表し、優先ペンディングパケット数は、スレッドの現在の優先度に対応しており、よう構成されている。
記載するシステム及び技術は、以下の利点の1又は複数を実現するために実装することができる。デバイス間で転送されるのを待つデータ量が増加したときには、データを、より高速レートで転送することができるようにデータ転送タスクの優先度を増加することにより、デバイス間の送信スループットを向上させることができる。転送されるのを待つデータ量が低減したときには、他のタスクをスケジュールすることを可能としつつ、デバイスの最小データ転送レートを満たすことができるよう、データ転送タスクの優先度を低減させることにより、システムワークロードが均衡化されてよい。
記載されるシステム及び技術は、電子回路、コンピュータハードウェア、ファームウェア、ソフトウェア、又はこれらの組み合わせ(例えば、本明細書に開示する構造的手段及びその構造的均等物等)に実装することができる。これは、1又は複数のデータ処理装置に、記載する動作を実行させるよう動作可能なプログラムを具現化する少なくとも1つのコンピュータ可読媒体を含むことができる。従って、プログラム実装は、開示した方法、システム、又は装置から実現することができ、装置実装は、開示したシステム、コンピュータ可読媒体、又は方法から実現することができる。同様に、方法実装は、開示したシステム、コンピュータ可読媒体、又は装置から実現することができ、システム実装は、開示した方法、コンピュータ可読媒体、又は装置から実現することができる。
1又は複数の実装の詳細を、添付図面と以下の記載において述べる。他の特徴、目的、及び利点は、記載、図面、及び請求項から明らかになるだろう。
P2Pデバイス間のスループットを向上させるためにスレッド優先度を調節することができるシステムの例を示すブロック図である。
データを転送するためにP2Pデバイス間で交換される信号の例を示す信号図である。
トランスミッタスレッドを実行するべくプロセッサによって実行される動作300の例を示すフローチャートである。
レシーバスレッドを実行するべくプロセッサによって実行される動作の例を示すフローチャートである。
データ転送を実行するスレッド優先度を調節又は維持するべくプロセッサによって実行されるスレッド優先度アルゴリズムの動作の例を示すフローチャートである。
スレッド優先度をアップグレードするべくプロセッサによって実行される動作の例を示すフローチャートである。
スレッド優先度を低下させるべくプロセッサによって実行される動作の例を示すフローチャートである。
スレッド優先度をアップグレード、低下、又は維持するための条件の例をグラフィックに示すチャートを示す。 スレッド優先度をアップグレード、低下、又は維持するための条件の例をグラフィックに示すチャートを示す。 スレッド優先度をアップグレード、低下、又は維持するための条件の例をグラフィックに示すチャートを示す。
スレッド優先度を調節するときにプロセッサによって実行される動作の例を示すフローチャートである。
バイト単位の異なるパケットサイズのためのMbps単位の転送データスループットレートの例を示すグラフである。
バイト単位の異なるパケットサイズのためのMbps単位の受信データスループットレートの例を示すグラフである。
本開示の様々な実装例を、データをピアツーピア(P2P)デバイス間で高速(例えば100Mbpsかそれ以上)で転送する高速インタフェース(HSI)を含むシステムの例を参照しながら以下で説明する。これらシステムの例は、ルータ、プロセッサ、メモリ、及びその他の埋め込みシステムを含んで良い。本開示に記載するシステム及び技術は、概して、データスループットを向上させてシステムワークロードを均衡化させるべくスレッド優先度を調節することが望ましいいずれのシステムに対しても適用可能である。故に、図1は、スレッド優先度を調節することができるシステムの幾つかの実装例に対応しており、他のシステム実装には、図1に示すものと異なるコンポーネントが含まれてよい。
図1は、スレッド優先度がP2Pデバイス102及び104の間のスループットを向上せるべく調節されてよいシステム100の例を示すブロック図である。P2Pデバイス102及び104は、例えば、アプリケーションプロセッサ及びメモリであってよい。デバイス102は、処理コア又はコントローラ110、及び、デバイス102がデータを高速で送信及び受信するHSI106を含む。デバイス104は、処理コア又はコントローラ112、及び、デバイス104がデータを高速で送信及び受信するHSI108を含む。
図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との間で交換される。
図3は、トランスミッタ(TX)スレッドを実行するプロセッサが実行する動作300の例を示すフローチャートである。動作300は、プログラムコード、ハードウェア、又は、プロセッサに実装されるハードウェア及びプログラムコードの組み合わせによって実行されてよい。
302で、TXスレッドはアイドルであり、データがピアデバイスに送信されていない。304で、TXスレッドは、スレッド優先度アルゴリズムを実行するが、これに関しては本開示で詳しく後述する。306で、TXスレッドは、保留パケット(suspension packet)とも称される任意のペンディングパケットが、ピアデバイスに送信するために残っているかを決定する。ペンディングパケットが残っていない場合には、TXスレッドは308でXミリ秒間スリープ状態に入り、この間TXスレッドはアイドル状態になる。幾つかの実装例では、TXスレッドがスリープ状態になるミリ秒の数Xは、異なるソフトウェア、ハードウェア、又はプロセッサ上のソフトウェア及びハードウェア構成の組み合わせに従ってユーザ定義されてよい。幾つかの実装例では、TXスレッドがスリープ状態になるミリ秒の数Xは、感度及び電力消費等の、システムのパフォーマンスに影響をもつ要素に基づいていて良い。
ペンディングパケットが送信するために残っている場合には、TXスレッドは、310でデータ転送を開始する。例えば、TXスレッドは、OPEN_CONN信号をピアデバイスに送信することによりデータ転送を開始してよい。
312で、TXスレッドが、データを送信可能か決定する。TXスレッドがデータを送信可能でないと決定する場合には、TXスレッドはエラー処理ルーチンを314で実行する。例えばTXスレッドは、ACK信号及びCONN_READY信号を受信した後にデータを送信可能であると決定してよい。ACK信号又はCONN_READY信号が、対応するタイムアウト期間の後にも受信されない場合、TXスレッドはエラー処理ルーチンを実行する。
データを送信可能であると決定した後で、318にてTXスレッドはデータユニット、例えばデータパケットを、ピアデバイスに送信する。TXスレッドは、データパケットの全てのデータが送信されるまで、1又は複数のタイムスライスで実行されてよい。
データパケットを送信した後で、TXスレッドは、320で、データの転送に成功したかを決定する。TXスレッドが、データの転送に成功しなかったと決定した場合には、TXスレッドは、314でエラー処理ルーチンを実行する。例えばTXスレッドは、データの転送に成功したかを、CONN_CLOSED信号が受信されたかを決定することで決定してよい。CONN_CLOSED信号が、タイムアウト期間の後にも受信されない場合には、TXスレッドはエラー処理ルーチンを実行する。データの転送に成功したと決定した後に、TXスレッドは、304でスレッド優先度アルゴリズムを実行する。
図4は、レシーバ(RX)スレッドを実行するプロセッサが実行する動作400の例を示すフローチャートである。動作400は、プログラムコード、ハードウェア、又は、プロセッサに実装されるハードウェア及びプログラムコードの組み合わせによって実行されてよい。
402で、RXスレッドはアイドルであり、データがピアデバイスに送信されていない。404で、RXスレッドは、データ転送要求が受信されたかを決定する。データ転送要求は、P2Pデバイス間のイベント、割り込み、又はその他のプロセス間通信(IPC)プロトコル信号であってよい。例えば、RXスレッドは、OPEN_CONN信号が受信されたかを決定することにより、データ転送要求が受信されたかを決定してよい。データ転送要求が受信されなかった場合には、402でRXスレッドがアイドル状態にとどまる。データ転送要求を受信した後で、RXスレッドは、406でスレッド優先度アルゴリズムを実行するが、これに関しては本開示で詳しく後述する。
408で、RXスレッドは、任意で、肯定応答信号、例えばACK信号、を、ピアデバイスに送信して、データ転送要求の受信を肯定応答してよい。410で、RXスレッドは、データの受信準備をしてよい。例えば、RXスレッドは、データを受信するためにメモリを割り当て、ダイナミックメモリアクセス(DMA)チャネルををリザーブ及び構成してよい。412で、RXスレッドは、接続準備済み信号、例えばCONN_READY信号、をピアデバイスに送信する。接続準備済み信号は、P2Pデバイス間のイベント、割り込み、又はその他のプロセス間通信(IPC)プロトコル信号であってよい。414で、RXスレッドは、データが受信されている間はアイドル状態になる。
416で、RXスレッドは、データの転送に成功したかを決定する。例えばRXスレッドは、データの転送に成功したかを、データ転送が完了したことを示す信号、例えばRX_DONE割り込み、が受信されたかを決定することで決定してよい。RXスレッドが、データの転送に成功しなかったと決定した場合には、RXスレッドは、418でエラー処理ルーチンを実行する。データの転送に成功したと決定した後で、RXスレッドは、接続終了信号、例えば、a connection closed signal, e.g., a CONN_CLOSED信号を、420でピアデバイスに送信する。422で、RXスレッドは、受信したデータを、アプリケーションが読み出すべきペンディングデータのリストに追加して、アプリケーションにデータを読み出すよう通知する。
図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は、スレッド優先度アルゴリズムへの入力パラメータである。
502において、プロセッサは、現在のペンディングパケット数Curr_p_numが、前のペンディングパケット数Pre_p_numより大きいか、及び、現在のペンディングパケット数Curr_p_numが、インデックスP_num[Index]が特定する優先ペンディングパケット数アレイの値より大きいかを決定する。Curr_p_numが、Pre_p_num及び P_num[Index]の両方より大きい場合、プロセッサは、504で、スレッド優先度をアップグレードする動作を行う。
図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)。
図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で、スレッド優先度を低下させる動作を実行する。
図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)。
図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]に設定する。
プロセッサが、Curr_p_numがPre_p_num及びP_num[index]の両方より小さくない又は大きくない(not less than or greater)と決定すると、プロセッサは518でスレッド優先度を維持する。
図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に保持することにより、維持させてよい。
図9は、スレッド優先度を調節するときにプロセッサが実行する動作900の例を示すフローチャートである。プロセッサは、現在の調節が、前の調節と合致するか、又は、その反対であるかに基づいて、優先度ステップを決定する(例えば前方ステップPre_f_step又は後方ステップPre_b_step)。現在の調節が前の調節と同じ方向にあるとき(前方又は後方いずれであっても)、現在の調節は、前の調節と合致する。現在の調節が前の調節と反対の方向にあるとき(例えば、前にスレッド優先度を上げた後でスレッド優先度を下げることで)、現在の調節は前の調節の反対である。
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が前に低減した後に低減したと示している場合には、現在の調節が前の調節と合致している。
現在の調節が前の調節と合致している場合には、906でプロセッサは合致しているステップを繰り返して良い(例えば前方ステップPre_f_step 又は後方ステップPre_b_step)。プロセッサは、合致しているステップを、調節を繰り返すか、合致するステップを二倍にすることで繰り返してよい(例えば図6の608及び図7の708に示すように)。図9に戻り、現在の調節が前の調節と反対である場合には、プロセッサは、908に示すように、反対のステップを0に設定し(例えば図6の602及び図7の702に示すように)、及び合致しているステップを1に設定する(図6の606及び図7の706に示すように)。
スレッド優先度アレイ及び優先ペンディングパケット数アレイは、異なるソフトウェア、ハードウェア、または、プロセッサ上のソフトウェアとハードウェア構成との組み合わせに従ってユーザ定義されてよい。前方ステップ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スレッドがより遅くスケジュールされ、同時に、依然としていずれのデータレート要件も満たされており、これにより、システムワークロードが均衡化される。
図10は、バイト単位の異なるパケットサイズのためのMbps単位の送信データスループットレートの例を示すグラフである。ライン1010は、スレッド優先度アルゴリズムをデータの送信中に利用するときの、異なるパケットサイズのための送信データスループットレートを表す。ライン1020は、スレッド優先度アルゴリズムをデータの送信中に利用しないときの、異なるパケットサイズのための送信データスループットレートを表す。
図11は、バイト単位の異なるパケットサイズのためのMbps単位の受信データスループットレートの例を示すグラフである。ライン1110は、スレッド優先度アルゴリズムがデータ受信中に利用されるときの異なるパケットサイズのための受信データスループットレートを表す。ライン1120は、スレッド優先度アルゴリズムがデータ受信中に利用されないときの異なるパケットサイズのための受信データスループットレートを表す。
幾つかの実装例を上述した通り記載してきたが、様々な修正例が可能である。開示した主題は、本明細書に記載した機能上の動作を含み、電子回路、コンピュータハードウェア、ファームウェア、ソフトウェア、またはこれらの組み合わせ、例えば、本明細書に開示している構造上の手段及びその構造的均等物、システムオンチップ(SoC)実装を含む、で実装することができる。
本明細書は多くの特定の例を含むが、これらは、請求されうるものの範囲を限定していると解釈されるべきではなく、むしろ、特定の実施形態特有でありうる特徴の記載としてとらえられるべきである。本明細書に記載されている、別個の実装のコンテキストにおける特定の特徴も、単一の実装例の組み合わせに実装可能である。逆に、単一の実装のコンテキストで記載された様々な特徴を、複数の実装に別々に実装したり、任意の適切なサブコンビネーションに実装したりすることもできる。更に、上述の説明において特徴は、特定の組み合わせで動作するものとして記載され、最初はそのように請求もされるが、請求されている組み合わせから1又は複数の特徴が場合によっては、組み合わせから削除されてもよく、請求される組み合わせを、サブコンビネーション又はサブコンビネーションの変形例としてもよい。
同様に、動作は図面では特定の順序で示されているが、これは、所望の結果を達成するために、該動作が示されている特定の順序もしくは順番に実行されねばならない、又は、全ての示されている動作を実行せねばならないものとして理解されるべきではない。特定の状況においては、マルチタスキング及び並列処理が有利な場合もあるだろう。更に、上述したような実装における様々なシステムコンポーネントの分離は、全ての実装においてこれらの分離を行わねばならない、として理解されるべきではない。他の実装も以下の請求項の範囲内に含まれる。

Claims (21)

  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に記載のシステム。
JP2015509086A 2012-04-23 2013-04-23 ピアツーピア(p2p)デバイスの間のスループットを向上させるためのスレッド優先度の調節 Expired - Fee Related JP6074779B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201261636899P 2012-04-23 2012-04-23
US61/636,899 2012-04-23
PCT/US2013/037854 WO2013163223A1 (en) 2012-04-23 2013-04-23 ADJUSTING THREAD PRIORITY TO IMPROVE THROUGHPUT BETWEEN Peer-to-peer (P2P) DEVICES

Publications (2)

Publication Number Publication Date
JP2015515702A true JP2015515702A (ja) 2015-05-28
JP6074779B2 JP6074779B2 (ja) 2017-02-08

Family

ID=49381378

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015509086A Expired - Fee Related JP6074779B2 (ja) 2012-04-23 2013-04-23 ピアツーピア(p2p)デバイスの間のスループットを向上させるためのスレッド優先度の調節

Country Status (6)

Country Link
US (1) US9152459B2 (ja)
EP (1) EP2842281A4 (ja)
JP (1) JP6074779B2 (ja)
KR (1) KR101978457B1 (ja)
CN (1) CN104904169B (ja)
WO (1) WO2013163223A1 (ja)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9569260B2 (en) * 2013-05-31 2017-02-14 Microsoft Technology Licensing, Llc Efficient priority-aware thread scheduling
US10116740B2 (en) * 2013-12-27 2018-10-30 Microsoft Technology Licensing, Llc Peer-to-peer network prioritizing propagation of objects through the network
US9645980B1 (en) 2014-03-19 2017-05-09 Google Inc. Verification of native applications for indexing
US9524347B1 (en) 2014-04-01 2016-12-20 Google Inc. Automatically implementing an application in response to a search query
US9513961B1 (en) * 2014-04-02 2016-12-06 Google Inc. Monitoring application loading
US10713188B2 (en) * 2016-07-06 2020-07-14 Atmel Corporation Inter-process signaling system and method
CN109788509B (zh) 2017-11-15 2023-03-10 华为技术有限公司 连续数据包传输失败的规避方法及装置
CN110502320B (zh) * 2018-05-18 2022-03-04 杭州海康威视数字技术股份有限公司 线程优先级调整方法、装置、电子设备及存储介质
KR20220053151A (ko) 2020-10-22 2022-04-29 삼성에스디에스 주식회사 P2p 연결 제어 방법 및 장치
KR20220070781A (ko) 2020-11-23 2022-05-31 삼성에스디에스 주식회사 P2p 연결 제어 방법, 장치 및 시스템

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000047881A (ja) * 1998-07-28 2000-02-18 Hitachi Ltd リアルタイムシステム
JP2004287883A (ja) * 2003-03-24 2004-10-14 Toshiba Corp プロセッサ、計算機及び優先度決定方法
JP2005092875A (ja) * 2003-08-29 2005-04-07 Microsoft Corp スレッドスケジューリングを使用してデータスループットを向上させるためのシステムおよび方法
US20060288350A1 (en) * 2005-06-20 2006-12-21 Microsoft Corporation Multi-thread multimedia processing
US7900207B2 (en) * 1998-12-16 2011-03-01 Mips Technologies, Inc. Interrupt and exception handling for multi-streaming digital processors

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5260942A (en) 1992-03-06 1993-11-09 International Business Machines Corporation Method and apparatus for batching the receipt of data packets
US20060069800A1 (en) * 2004-09-03 2006-03-30 Microsoft Corporation System and method for erasure coding of streaming media
US7460476B1 (en) * 2004-10-18 2008-12-02 Ubicom, Inc. Automatic adaptive network traffic prioritization and shaping
US9462333B2 (en) * 2010-09-27 2016-10-04 Intel Corporation Method for processing multimedia streams
US7573820B2 (en) * 2005-06-29 2009-08-11 Intel Corporation Techniques to control data transmission for a wireless system
EP1929401B1 (en) * 2005-09-29 2010-09-22 Teamon Systems, Inc. Email server for processing a threshold number of email jobs for a given user and related methods
KR101157268B1 (ko) * 2005-11-28 2012-06-15 주식회사 케이티 인터넷 프로토콜 패킷특성 분석 시스템 및 그 방법
KR100949808B1 (ko) * 2007-12-07 2010-03-30 한국전자통신연구원 P2p 트래픽 관리 장치 및 그 방법
CN101252451B (zh) * 2008-03-22 2011-04-20 桂林电子科技大学 保证服务质量的Web服务器系统请求区分服务方法与中间件
CN101436146B (zh) * 2008-12-15 2012-05-09 中兴通讯股份有限公司 动态调节远程设备管理进程的优先级的方法及系统
US8285290B2 (en) 2009-11-18 2012-10-09 Research In Motion Limited Optimized resource allocation for wireless device in packet transfer mode
US8660132B2 (en) * 2010-06-28 2014-02-25 Avaya Inc. Control plane packet processing and latency control

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000047881A (ja) * 1998-07-28 2000-02-18 Hitachi Ltd リアルタイムシステム
US7900207B2 (en) * 1998-12-16 2011-03-01 Mips Technologies, Inc. Interrupt and exception handling for multi-streaming digital processors
JP2004287883A (ja) * 2003-03-24 2004-10-14 Toshiba Corp プロセッサ、計算機及び優先度決定方法
JP2005092875A (ja) * 2003-08-29 2005-04-07 Microsoft Corp スレッドスケジューリングを使用してデータスループットを向上させるためのシステムおよび方法
US20060288350A1 (en) * 2005-06-20 2006-12-21 Microsoft Corporation Multi-thread multimedia processing

Also Published As

Publication number Publication date
US20130283285A1 (en) 2013-10-24
CN104904169A (zh) 2015-09-09
KR101978457B1 (ko) 2019-05-14
KR20150060603A (ko) 2015-06-03
US9152459B2 (en) 2015-10-06
EP2842281A4 (en) 2015-12-30
EP2842281A1 (en) 2015-03-04
WO2013163223A1 (en) 2013-10-31
JP6074779B2 (ja) 2017-02-08
CN104904169B (zh) 2018-01-26

Similar Documents

Publication Publication Date Title
JP6074779B2 (ja) ピアツーピア(p2p)デバイスの間のスループットを向上させるためのスレッド優先度の調節
US10789198B2 (en) Methods and apparatus for reduced-latency data transmission with an inter-processor communication link between independently operable processors
US9237107B2 (en) Fair quantized congestion notification (FQCN) to mitigate transport control protocol (TCP) throughput collapse in data center networks
EP3075105B1 (en) Transferring data between a first network node and a second network node
US8214552B2 (en) Transmission apparatus, transmission method, communication apparatus, and program
US8423688B2 (en) Multi-thread file input and output system and multi-thread file input and output program
US10735554B1 (en) System for controlling use of a network
JP2018513451A (ja) ユニバーサルシリアルバス用のプロトコルアダプテーションレイヤデータフロー制御
US10965613B2 (en) Multi-pipe bandwidth control in hosted systems
WO2015149460A1 (zh) 以太网光纤通道的流量控制方法、装置及系统
US20140223026A1 (en) Flow control mechanism for a storage server
CN116868553A (zh) 用于管理端点资源和拥塞缓解的数据中心网络上的动态网络接收器驱动的数据调度
KR20150050085A (ko) 무선 환경에서 usb 통신을 위한 버퍼 관리 방법 및 장치
US8004991B1 (en) Method and system for processing network information
US11481341B2 (en) System and method for dynamically adjusting priority-based allocation of storage system resources
JP5772132B2 (ja) データ転送装置、データ転送方法および情報処理装置
CN112152938B (zh) 一种云虚拟环境中往返时延的确定方法
KR20070078656A (ko) 휴대 단말기의 전송 제어 방법 및 장치
US20110055421A1 (en) Information processing apparatus, method for controlling information processing apparatus, and program
US7996845B2 (en) Methods and apparatus to control application execution resource with a variable delay
WO2017051860A1 (ja) データ通信装置、データ通信制御方法及びプログラム
KR20150124796A (ko) 무선 환경에서 usb 통신을 위한 데이터 전송을 제어하는 방법 및 장치

Legal Events

Date Code Title Description
A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20150402

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20150402

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20151028

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20161128

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20161213

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20161220

R150 Certificate of patent or registration of utility model

Ref document number: 6074779

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R371 Transfer withdrawn

Free format text: JAPANESE INTERMEDIATE CODE: R371

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees