以下、添付の図面を参照しながら、本発明による送信間隔制御装置の実施形態を説明する。以下の実施形態においては、携帯電話やAV機器に組み込まれるSoCのメインバスとしてNoCを使用する例を挙げて、送信間隔制御装置を説明する。
(実施形態1)
まず、回路網の構成を説明する。図4は、NoCバスを有するSoC100の構成例を示す。SoC100は、たとえば携帯電話やAV機器に組み込まれる。図4においては、最上段に記載されたイニシエータから、最下段に記載されたターゲットにデータが伝送される。または、当該イニシエータからの読み出し要求に応答して、ターゲットからイニシエータにデータが伝送される。
図4にはバスのイニシエータおよびターゲットの一例が示されている。すなわちバスのイニシエータとして、画面への表示処理を行うDMAC(Direct Memory Access Controller)、映像信号のMPEG(Motion Picture Expert Group)符号化を行うENC(Encoder)、映像信号のMPEG復号化を行うDEC(Decoder)、ウェブブラウザやユーザインタフェース処理などを行うCPU(Central Processing Unit)が含まれる。またターゲットとして、外部のDRAM1〜DRAM4(図示せず)に接続されたメモリコントローラMEM1(Memory Controller 1)からMEM4(Memory Controller 4)が含まれる。
各イニシエータおよび各ターゲットは、ネットワーク・インタフェース・コントローラNICn(n:1〜8の整数)と接続されている。そして、複数のネットワーク・インタフェース・コントローラの間は、ルータRk(k:1〜4の整数)によって接続されている。これにより、各イニシエータおよび各ターゲットが相互に通信可能に接続される。
以下では、SoC100におけるデータの基本的な処理およびデータの流れを概説する。
イニシエータは、まずターゲットへのアクセス要求である要求トランザクションを生成し、自身と接続されたNICx(x:1〜4の整数)に出力する。
イニシエータから要求トランザクションを受け取ったNICxは、受け取った要求トランザクションをパケット化し、ルータR1〜R4同士の接続によって構成されるネットワークバスに送出する。
メモリコントローラMEMy(y:1〜4の整数)に接続されたNIC(y+4)は、ルータR1〜R4を介してイニシエータ側から伝送されてきたパケットを受信し、そのパケットからイニシエータの要求トランザクションを構成する。そして当該NIC(y+4)は、得られた要求トランザクションを、自身と接続されたメモリコントローラMEMyに転送する。メモリコントローラMEMyは、要求トランザクションに従ってDRAMyへデータを書き込み(データライト)、または、DRAMyに格納されたデータを読み出す(データリード)。その結果は、そのメモリコントローラMEMyからNIC(y+4)に渡される。
メモリコントローラMEMyに接続されたNIC(y+4)は、メモリコントローラMEMyがDRAMyにリードまたはライトすることによって得られた結果である返信トランザクションをパケット化し、ルータRk(k:1〜4の整数)で構成されるネットワークバス上に送出する。
そしてイニシエータに接続されたNICxは、ターゲットから送られた返信パケットを受け取って脱パケット化し、返信トランザクションを構成して、アクセス結果としてイニシエータに通知する。
次に、上述の要求トランザクションおよび返信トランザクションの具体例を説明する。ここでは、DMACが要求トランザクション10を送信して、MEM1に格納されたデータを読み出す例を説明する。
図5は、DMACが生成した要求トランザクション10のデータ構造の例を示す。要求トランザクション10は、R/Wフィールド、ADDRフィールドおよびSIZEフィールドを有している。図5ではそれぞれ「R/W」、「ADDR」、「SIZE」と示されている。以下の図6〜8でも同様に記載する。
R/Wフィールドにはメモリからの読み出し動作を行うことを示す命令が記述される。ADDRフィールドにはデータの読み出しを行うDRAMのアドレスが記述される。またSIZEフィールドで読み出すべきデータのサイズが指定されている。
図6は、NIC1によってパケットヘッダPHが付加されてパケット化された要求トランザクション12を示している。パケットヘッダPHには、要求元(その要求を送信したイニシエータ)としてNIC1のノードのIDが格納される。またパケットヘッダPHには、要求の宛先としてNIC5のノードのIDが格納される。NIC5は、パケット化された要求トランザクション12からパケットヘッダを除去する処理(脱パケット化処理)を行って図5に示した要求トランザクション10を再構成し、その要求トランザクション10をMEM1に転送する。
MEM1は、要求トランザクション10に記述されたR/Wフィールドに基づいて読み出し動作であることを特定する。さらにMEM1は、ADDRフィールドおよびSIZEフィールドを読み取り、ADDRフィールドに指定されたDRAM上の番地から、SIZEフィールドに指定されたサイズのデータを読み出す。その後MEM1は、読み出した結果得られたデータを、NIC5に出力する。
図7は、NIC5がMEM1から受け取った返信トランザクション14のデータ構造の一例を示す。NIC5は返信トランザクションをパケット化し、ネットワークバスに転送する。
図8は、パケット化された返信トランザクション16および18のデータ構造の一例を示す。返信トランザクション16は、取得したデータにパケットヘッダPHを付して生成される。なお、返信するデータのサイズが大きい場合には、複数のパケットに分けて返信されてもよい。1つの返信パケット16または複数の返信パケット18を受け取った後、NIC1は、返信パケット16または18を脱パケット化処理することにより、図7に示す返信トランザクション14を再構築する。NIC1は、そのデータをDMACに転送することで、DMACのメモリアクセスが完了する。
次に、本実施形態によるSoC100の動作を説明する。
以下では、イニシエータであるDMACが映像を画面(図示せず)表示する処理を行うとする。ただし、SoC100上ではDMACのみが動作するのではなく、ENC、DEC、CPUも並列的に動作しつつ、データの授受を行う状況を想定する。
本実施形態では、DMACは画面への表示処理を行うため、表示画面のコマ落ちやフリーズの発生により製品のユーザ価値を低下させないためには、メモリアクセス時のレイテンシへの要求が厳しく、リアルタイム性の確保が重要となる。
一方、MPEGに代表される映像や音声の符号化と復号化のアルゴリズムを実行するENC及びDECは、その信号処理の過程で、バースト的なアクセスを発生させる。図9は、典型的なバーストアクセスの様子を示した例である。図9中の"Tb"はバーストが発生する周期である。MPEGのマクロブロック単位で信号処理を行うコーデックであれば、Tbは1マクロブロック時間に相当するサイクル数で表される。"Np"は1回のバーストで発生するアクセスの回数である。Npはバーストアクセスの開始に先立って、コーデックの処理アルゴリズムにより決定される。
またCPUは、ユーザとのインタラクション処理やインターネットのブラウジング処理などに用いられる。アクセスが発生するタイミングやアクセス量を事前に見積もることは困難であるが、他のイニシエータと比較すると、CPUの処理に関してはリアルタイム性に対する要求は厳しくない。
ネットワークバスを構成するルータは、パケットヘッダに格納された宛先に従って出力ポートを決定し、パケットの転送を行っていく。1パケットを転送するために必要なサイクル数Tpは、内部のハードウェア構成とパケットサイズとによって異なる。
図10は、DMAC、ENC、DECが同時にMEM1に対してアクセス要求を行った場合に、DMACのアクセスが遅延する様子を示す。図面の上からENC、DEC、DMAC、R1およびR3がパケットを出力していること、および、パケットを出力した時刻(サイクル)が示されている。なお図中で各パケットに振られた番号は、パケットを区別するための番号であり、説明の都合上付加したものに過ぎない。
図10の例では、ENCとDECが同一のタイミングでパケット1とパケット2のデータを送信し、続くサイクルでパケット3とパケット4を送信し、続くサイクルでパケット5とパケット6を送信している。そして、パケット5および6が出力されたタイミングと同一のタイミングでDMACがパケット7を送信している。
以下の説明では、ルータR1およびR3は、ENC、DECからの送信パケットとの干渉待合が発生しなければ、1パケットの転送に1サイクルを要すると仮定する。つまり、DMACから出力されたパケット7は2サイクル後に、MEM1に到着するものとする。
ENCとDMACが送信したパケットは、1サイクル後にルータR1に受信され、後段のルータR3へと中継される。一方、ENCからのパケット5の送信と同時にDMACから送信されたパケット7は、ENCからのパケット5と同時にルータR1を通過できない。そこで、たとえばパケット7はパケット5の後に中継される。このときパケット7には1サイクルの遅延が発生することになる。
一方、DECは、ENCの送信開始のタイミングと同一のタイミングでパケット2、パケット4、パケット6を順に送信している。パケット2、4、6はルータR2を経由してルータR3に送信される。ルータR3は、ルータR1の中継パケットと共にパケット2、4、6を中継する。ルータR3は、ルータR1からのパケットと、DECからのパケットを交互に出力する。
図10のルータR3のパケット出力タイミングによれば、ルータR3によって中継され、MEM1に到着するパケット7には、最速でMEM1に到達する2サイクルを基準として、4サイクル分の遅延が発生していることが分かる。この遅延はルータ網上でのパケット競合に起因している。したがって、ネットワークバスの段数が増えると遅延は更に大きくなり、DMACのメモリアクセスのレイテンシが許容時間を超える状況が発生する。
一方、図11は、DMAC、ENC、DECが送信間隔を調整しながらMEM1に対してアクセス要求を行った場合の、DMACのアクセスが遅延する様子を示す。図11に示すように、DMAC、ENC、DECが送信間隔を調整するとDMACのレイテンシは大幅に短縮される。ENCおよびDECは送信パケット間隔を空けてパケット1〜6を送信している。一方、DMACは、ENCおよびDECからパケットが送信されていないタイミングでパケット7を送信している。DMACが送信したパケット7は、ENCとDECからの送信パケットの間の空きサイクルを利用して最短のレイテンシである2サイクルでMEM1に到着している。
本実施形態では、ENC、DECは、アクセス負荷の状態とアクセスの進捗度合いを用いて動的にパケットの送信間隔を決定する。決定のタイミングは送信間隔の算出演算に要するサイクル数と演算ハードウェア資源及び稼働中のアクセスフローによって規定される最小のパケット転送サイクル数によって決定される。
図12は、イニシエータ側のNIC120の基本的な構成を示す。NIC120は、たとえば図4のNIC1〜4である。なお、以下に説明する機能に鑑みて、NIC120は「送信間隔制御装置」と呼ぶこともある。
NIC120は、パケット化部121と、脱パケット化部122と、パケットバッファ123と、パケット送受信部124と、送信間隔制御部125とを備えている。
パケット化部121は、イニシエータから送信されたデータを受け取り、そのデータにパケットヘッダを付加し、パケット化する。たとえば、パケット化部121は、イニシエータから送信された要求トランザクション10(図5)を受け取り、パケットヘッダPHを付加してパケット化された要求トランザクション12(図6)を生成する。この処理はパケット化処理とも呼ばれる。
脱パケット化部122は、パケット化部121の処理と逆の処理を行う。すなわち、脱パケット化部122は、ルータから受け取ったパケットからパケットヘッダを除去する。この処理は脱パケット化処理とも呼ばれる。
パケットバッファ123は、パケットを一時的に格納するために設けられたバッファである。
パケット送受信部124は、パケットの送受信に関連する処理を行う。パケットの送信時には、パケット送受信部124は、パケットバッファ123に格納されたパケットデータを送信データバス幅ごとに読み出して、パケットの送信処理を行う。パケットの受信時には、パケット送受信部124は、受信データバス幅毎に受信されたデータをパケットバッファ123に格納していくことでパケットを再構築する。
送信間隔制御部125の詳細は図13を参照しながら後に詳細に説明する。
パケット化部121、脱パケット化部122、パケットバッファ123およびパケット送受信部124は、一般的なNICに存在する機能である。これらの構成要素に基づくNIC120の処理を概説する。
パケット送信時の処理は以下のとおりである。パケット化部121はイニシエータからデータを受け取り、そのデータにパケットヘッダを付加してパケット化処理を行う。パケットバッファ123はそのパケットを一時的に格納する。パケット送受信部124はパケットバッファ123に保持されたパケットデータを送信データバス幅ごとに読み出してパケットの送信処理を行う。
パケットの受信時の処理は以下のとおりである。パケット送受信部124は受信データバス幅毎にデータを受信し、パケットバッファ123に格納する、これにより、パケットが再構築される。脱パケット化部122は、得られたパケットからパケットヘッダを除去し、残されたデータをイニシエータに出力する。
次に、送信間隔制御部125を説明する。
送信間隔制御部125は、本実施形態にかかるNIC120に固有の機能要素である。
図13は送信間隔制御部125の基本構成を示す。送信間隔制御部125は、許容遅延演算部131と、調整方法選択部132と、送信間隔決定部133とを有している。
許容遅延演算部131は、バーストアクセスの進捗情報に基づいて、リアルタイム性が確保可能な通信間隔の調整範囲(許容遅延量)を演算する。進捗情報は、許容遅延演算部131が保持する情報である。具体的には、進捗情報は、バーストアクセスの残数(アクセス残数)である。以下では主として「アクセス残数」という語を用いて説明する。
調整方法選択部132は、負荷情報に基づいて通信間隔の調整方法を選択し、間隔制御情報を生成する。
送信間隔決定部133は、調整範囲情報と間隔制御情報に基づいて通信間隔を決定し、データの送信許可情報を生成する。
ここで、送信間隔制御部125を含む、イニシエータ側のNIC120の処理の概要を説明する。
図14は、イニシエータ側のNIC120の処理の手順を示すフローチャートである。
ステップS100において、送信間隔制御部125は、最小パケットサイズaを示す情報を取得する。最小パケットサイズとは、データアクセスのためにターゲットに送信されるパケットの最小のサイズをいう。最小パケットサイズaは、データアクセスの種類やターゲットに応じて変動し得る。
ステップS102において、許容遅延演算部131は、最小パケットサイズa、許容遅延演算部131に設けられた除算回路の並列数Nおよび各除算回路が演算に要するサイクル数nに基づいて、制御間隔pを演算する。なお、並列数Nおよびサイクル数nは、後に図15を参照しながら説明するように許容遅延演算部131内に保持されている。
ステップS104において、許容遅延演算部131は、制御間隔pに基づくタイミングで、許容遅延Iを求める。この「制御間隔pに基づくタイミング」とは、p個のパケットを送信する毎に、という意味である。求められた許容遅延Iはパケット送信の遅延をどの程度許容できるかを示す調整範囲情報として利用される。
調整範囲情報が得られると、送信間隔決定部133はステップS106の処理を実行する。ステップS106において、送信間隔決定部133は、調整範囲情報およびネットワークバスの負荷(レイテンシ)の情報を受け取る。そして、調整範囲および負荷(レイテンシ)に応じてパケットの送信間隔を調整する。パケットの送信間隔に合致する場合には、送信間隔決定部133は、イニシエータからのデータ(アクセス要求に対応する要求トランザクション)の送信を許可するか禁止するかを決定し、その結果を示す情報を出力する。
ステップS108において、パケット化部121は、データの送信を許可されたイニシエータからデータを受け取り、パケット化する。
そしてステップS110において、パケット送受信部124は、生成されたパケットを送信する。
ステップS104からS110までの処理を具体的に説明すると以下のとおりである。
たとえば、制御間隔pに基づくタイミングで求められた許容遅延Iが負であるとする。これは、遅延は許容されないことを意味する。このとき、パケットの転送サイクルが完了する度に送信間隔決定部133はイニシエータからのデータの送信を許可し(ステップS108)、パケット送受信部124は、遅延なく次のデータ(パケット)を送信する(ステップS110)。
一方、許容遅延Iが0以上であるときは、調整方法選択部132はその時点でのネットワークバスの負荷(レイテンシ)に応じてパケットの通信間隔を決定する。負荷が比較的大きければ、ネットワークバスが混雑しているため、パケットの送信間隔を拡大する。一方、負荷が比較的小さければ、ネットワークバスは混雑していないため、パケットの送信間隔を縮小する。決定された通信間隔に応じて、送信間隔決定部133はデータの送信を許可または禁止する情報をイニシエータに出力する。
上述の説明から理解されるように、制御間隔pは、許容遅延Iを再計算するタイミングを示している。許容遅延Iが得られると、パケットの送信間隔を調整する処理が行われる。よって、制御間隔pは、パケットの送信間隔を調整するためのパラメータであるといえる。
図15は、許容遅延演算部131の基本構成を示す。許容遅延演算部131は、演算実行部141と、演算結果格納部142と、許容遅延算出部143と、制御間隔決定部144とを有している。
演算実行部141は、サイクル数を要する除算実行を予測的に並列処理する。本実施形態では、演算実行部141が並列的に設けられることを想定している。並列的に設けられる演算実行部141の数は、後に「N」という記号で表される。
演算結果格納部142は、演算結果を送信間隔の算出時点まで記憶する。
許容遅延算出部143は、送信間隔の調整範囲情報を算出する。
制御間隔決定部144は、イニシエータからアクセスされる最小のパケットサイズ、演算実行部の演算に費やされる処理サイクル数及びハードウェアの並列処理可能数から最適な制御間隔を決定する。
以下、図16を参照しながら、制御間隔決定部144の処理を説明する。
図16は、制御間隔決定部144の処理の手順を示すフローチャートである。
ステップS200において、制御間隔決定部144は制御間隔pを更新するか否かを判断する。最小パケットサイズaが変更された場合は、制御間隔決定部144は制御間隔pを更新すると判断する。更新すると判断しない場合には、制御間隔決定部144は次の処理に進まない。
なお、最小パケットサイズaを示す情報は、NIC120上のレジスタ(図示せず)に保持されている。最小パケットサイズaが変更されたか否かは、制御間隔決定部144が当該レジスタをモニタして検出すればよい。
ステップS202において、制御間隔決定部144は、後述する数8に示す天井関数を用いて、制御間隔pを求める。
ステップS204において、制御間隔決定部144は、求めた制御間隔pを内部メモリまたはレジスタ(図示せず)に保持する。
図17は、送信間隔制御部125が管理するパラメータを記録するためのレジスタ群の例を示す。以下、各レジスタに設定されるパラメータの意味を説明する。
Tbはバーストアクセスが発生する周期であり、Tpはトランザクションの転送に要するサイクル数である。たとえば、128バイトのトランザクションを64ビットバスで送信する場合であれば、サイクル数128/64*8=16サイクルとなる。
Npは単一のバースト周期内に生成されるアクセスの回数である。Sbはバースト周期の開始時刻のサイクル数を格納するためのレジスタであり、Rpはバースト周期内に生成されるべきアクセス数Npから既に生成されたアクセス数を差し引いたアクセスの残数である。RcはRp回のアクセスを完了するまでに残されたサイクル残数である。またGは次回のアクセスまでの送信間隔であり、Lは直近のレイテンシである。
パラメータTb、Tp、Npは、イニシエータから要求されるメモリアクセス特性を決定する。これらは、メモリへのアクセス開始に先立ってイニシエータによって各レジスタ上で初期化される。またパラメータSb、Rp、Rc、G、Lは、送信間隔制御部125が管理する内部パラメータを記録するために用いられる。チップの電源投入時またはリセット時に各レジスタ上でゼロクリアされる。また以下の説明で登場するTcは、サイクルカウンタの現在値であり、システム上での現在時刻を表す。サイクルカウンタは、チップの電源投入時またはリセット時にゼロにクリアされ、1クロックサイクル毎にインクリメントされるnビットのカウンタで良い。
以下、送信間隔制御部125の動作を説明する。
図18は、送信間隔制御部125の処理の手順を示すフローチャートである。この処理は、バーストアクセス区間中のアクセス要求毎に繰り返される。
まず、イニシエータからターゲットへのアクセス要求が発生し、NIC120がトランザクションを受け取ったことを、送信間隔制御部133が検出すると、処理が開始される。たとえば送信間隔制御部133は、パケットバッファ123(図12)をモニタしている。送信間隔制御部133は、トランザクションのデータの存在を検出することにより、上述のアクセス要求およびトランザクションの受信を検出する。または、送信間隔制御部133がパケット送受信部124またはパケット化部121から通知を受けることにより、上述の検出を行ってもよい。
上述のようにアクセス要求が検出されると処理が開始される。
ステップS2において、送信間隔制御部133は、アクセス残数レジスタRpを読み出す。アクセス残数レジスタRpがRp=0のときは処理はステップS4に進み、Rp=1のときは処理はステップS8に進み、Rpの値がそれら以外のときは処理はステップS6に進む。このように処理をアクセス残数レジスタRpの値に応じて変えている理由は、バーストアクセスの種類に応じて適切な処理を行うためである。
図19は、バーストアクセスの種類を示している。図19に示すように、Rp=0の場合には、バースト周期内での先頭アクセスであることを意味する。またRp=1の場合には、バースト周期内での最後尾(最終の)アクセスであることを意味する。Rpの値がそれら以外の場合には、バースト中のアクセス(中間アクセス)であることを意味する。適切な動作になるよう、本実施形態においてはそれぞれの場合で各部の行う処理内容を異ならせている。
再び図17を参照する。ステップS4は先頭アクセスの場合の処理である。許容遅延演算部131は、数2〜数5に従い、関連パラメータの初期化処理を行う。
数4におけるTb’はバースト周期Tbから時間余裕として確保するべきマージン量を差し引いた値である。イニシエータは、バースト周期内の全てのアクセスを完了した後にデータ処理を行うための時間マージンを必要とする。確保するべき時間マージンを決定する主な要因はその処理に要する最大のサイクル数である。データ格納用のメモリ領域とデータ処理用のメモリ領域が分離されているようなプログラムでは、Tb’およびTbを同じ値にすることができる。
ステップS4の処理が完了すると、処理はステップS32に進む。
次に、ステップS6の処理を説明する。ステップS6は中間アクセスの場合の処理である。
ステップS6において許容遅延演算部131は、数6に従い、サイクル残数Rcを更新する。
さらにステップS10において許容遅延演算部131は、数7に従い、許容遅延(または調整範囲)Iを計算する。
許容遅延演算部131は、許容遅延Iの値を調整範囲情報として調整方法選択部132および送信間隔決定部133に通知する。
許容遅延Iの値の計算は、大きく2つのフェーズに分離できる。第一のフェーズは1/Rpを算出するフェーズであり、第二のフェーズは、積和演算により許容遅延Iを算出するフェーズである。言うまでもなく、演算コストに関しては除算演算を含む第一のフェーズの方が高い。本実施形態では、第一のフェーズに要するサイクル数を9サイクル、第二のフェーズに要するサイクル数を2サイクルとして説明する。第一のフェーズは演算実行部141によって実行され、第二のフェーズは許容遅延算出部143によって実行される。
続いて、図20〜図24を参照する。これらの図面の説明に関連して、以下では「フリット」という概念を用いる。「1フリット」は、1バスクロック毎に転送が可能なデータの伝送単位である。1フリットのサイズは、1パケットのサイズ以下である。本実施形態では、1パケットは、複数のフリットに分割されて伝送されるとする。
なお、パケットサイズは、1パケットを転送するのに要するサイクル数と比例している。当該サイクル数が決まれば、1フリットのデータサイズとサイクル数との積によってパケットサイズを求めることができる。
図20は、イニシエータからのデータアクセスの最小パケットサイズが9フリットであるとしたときのタイミング図を示す。最上段の矩形波形はバスクロックの状態を示す。最上段に添えて記載されている記号tは、1バスクロック(1サイクル)を単位時間としたときの経過時間を示す。
二段目の各矩形はフリットを示している。各矩形には、たとえば「P0」、「F0」のような、PおよびFを用いた記号が示されている。1つのフリット内のPおよびFを、本明細書では便宜的に「P−F」のようにハイフンでつなげて表記する。たとえば最初のフリットは「P0−F0」のように表記する。
P0−F0は、0番目のパケット(パケット0)を構成する0番目のフリット(パケット0のヘッダフリット)、P0−F8は0番目のパケットの9番目のフリット(パケット0のトレイラーフリット)を示す。次のパケット1(P1)の送信が開始されるタイミングは、最短でt=10であることが分かる。したがって、t=10の時点で許容遅延Iの更新が完了していることが必要になる。
最下段は、演算等の処理に要する時間(サイクル)である。第一のフェーズである除算演算はt=8のタイミングで完了するよう、t=−1の時点において予測的に開始される。その後、第二のフェーズで積和演算が実行され、許容遅延Iが算出される。第二のフェーズである積和演算の完了は、許容遅延Iの算出完了(更新)を意味する。許容遅延Iの算出はt=10で完了する。よって、続くパケット1(P1)の送信間隔を決定するための調整範囲を制限時間内に算出できている。
続くパケット2(P2)の送信間隔を決定するための演算が開始される。パケット2が送信されるタイミングは、最短でt=19である。第一のフェーズである除算はt=8からt=17のサイクル期間中に実行され、第二のフェーズで2サイクルを消費した後、t=19で許容遅延Iを更新する。このような演算サイクルを確保できれば、続くパケット3の送信間隔を決定するための許容遅延(調整範囲)を制限時間内に算出することが可能である。
図21は、新たにイニシエータからパケットサイズが7フリットのデータアクセスが発生したとしたときのタイミング図を示す。パケット2(P2)に対する第一の演算フェーズはt=8のタイミングで完了し、第二のフェーズはt=10に完了する。よって、続くパケット2(P2)の送信間隔を決定するための調整範囲Iを、制限時間内に算出できているといえる。
しかしながら、パケットサイズが7フリットであるために、パケット3(P3)の送信タイミングは最短でt=17となる。第一の演算フェーズはt=17で完了するが、第二のフェーズが完了までにはさらに2サイクルかかり、処理遅延が生じる。よって、パケット3の送信が開始される最短タイミングまでには許容遅延Iの値を算出できず、リアルタイム性が確保できなくなってしまう。この例によれば、調整範囲Iを制限時間内に算出できるかどうかは、パケットサイズに依存することが分かる。
図22は、演算回路を2つの回路A及び回路Bを用いて並列化することにより、調整範囲を制限時間内に算出可能にしたときのタイミング図を示す。パケットサイズは図21の例と同じく、7フリットである。この構成例は、図15の演算実行部141の並列数が2のときの構成に対応する。
回路Aがt=8まで1/Rpの予測演算を行い、t=10で調整範囲Iを更新する間に、並列化された回路Bがt=6からt=17の間、1/Rpの予測演算を行い、調整範囲Iを更新する。このように第一の演算フェーズを実行する除算回路を2並列化することで、許容遅延Iの算出タイミングに遅延を生じず、リアルタイム性を確保できるようになる。この例によれば、調整範囲Iを制限時間内に算出できるかどうかは、演算回路が並列化されているか否かに依存することが分かる。
ここで、新たにイニシエータから1パケットが4フリットで構成されるデータのアクセスが発生した場合を考える。この場合、図22のような、並列化された演算回路が2つ設けられていたとしても、リアルタイム性を守ることができない。
このようなデータアクセスが発生し得る場合には、第一の演算フェーズを実行する除算回路の更なる並列化を必要とする。これは結果として、回路面積を増大させてしまう。しかしながら、NoCが実装される製品の仕様によっては、演算回路の更なる並列化が許容される場合も考えられる。
そこで本実施形態では、回路面積制約を受けつつも実装された、第一のフェーズを実行する除算回路の並列数Nに合わせて、調整範囲Iの更新間隔pを、イニシエータが送信する最小パケットサイズaに応じて制御する構成を示す。これにより、リアルタイム性を確保することが可能になる。各除算回路の演算に要するサイクル数はnとする。
図23は、並列数N=3、最小パケットサイズa=2、除算回路の演算に要するサイクル数n=9のときのタイミング図を示す。このとき、制御間隔決定部144は、制御間隔pを、天井関数を用いた以下の式により決定する。
天井関数は、実数xに対してx以上の最小の整数を与える関数である。上述の条件下では、n/Naは1.5であるため、制御間隔pは2と算出される。このとき、送信間隔制御部125は、パケットバッファ123を監視し、2つのパケットが送信される度に、送信間隔を更新する。なお図23では、予測演算の開始を2つ目のパケットを構成する2つのフリットのうち、最初のフリットが送信された時点で予測演算を開始している。このように許容遅延Iを一定のパケット数送信毎に更新し、その許容遅延Iを用いて送信間隔の拡大や縮小を制御する(図18)。これにより、アクセス残数Rpは単調減少となり、1/Rpを予測的に演算することが可能となる。
図24は、たとえば図23に示す条件下で動作中に、イニシエータが送信する最小パケットサイズが2フリット(a=2)から4フリット(a=4)に変更されたときのタイミング図を示す。
一般にN、a、nの値はNIC上のレジスタ等に格納される。イニシエータは最小パケットサイズに変更が生じた際に、レジスタを更新する。これにより、送信間隔制御部144は、上述の条件の変更に関する通知をイニシエータまたはNICから受けることができる。
送信間隔制御部144は、aの値を格納するレジスタが変更を受けたことを検出すると、または、変更されたとの通知を受信すると、再度(数8)によって、制御間隔pを再計算して更新する。このとき、p=1となるため、1パケット毎に送信間隔が再計算されており、バスの混雑状態への追従性が向上する。このように実装上限られた並列処理数の演算回路を用いて、最も追従性の良い制御間隔を動的に計算することで、リアルタイム性を確保する上で、効率の良い制御を実現可能となる。
再び図17を参照する。ステップS12において調整方法選択部132は、調整範囲情報のIの値が非負か負かを判定する。非負の場合には処理はステップS14に進み、負の場合には処理はステップS16に進む。
ステップS14において、許容遅延演算部131は、現在のネットワークバスの負荷状況を推定するため、負荷情報を取得する。負荷の把握に利用する情報として、直近のトランザクション処理に要したレイテンシの値Lを用いることができる。レイテンシは、要求を出してから応答が帰ってくるまでの時間である。
レイテンシの値Lの具体的な求め方の一例は以下のとおりである。まず、パケット送受信部124は要求トランザクションをネットワークバスに送出する時点におけるサイクルカウンタTcの値をパケットヘッダ内に記録しておく。ターゲット側のNICは返信トランザクションを送出する際に、先に受信していたパケットのパケットヘッダ内に記録されていたサイクルカウンタの値を、送出しようとする返信トランザクションのパケットのパケットヘッダ内に記録(コピー)する。そして許容遅延演算部131は、イニシエータ側のNICに返信トランザクションのパケットが到着した時点でのサイクルカウンタの値を、コピーされたサイクルカウンタの値(=要求トランザクション送出時点でのサイクルカウンタの値)から差し引くことによって求めてもよい。
上述の説明では、イニシエータ側のNIC120が要求トランザクションをネットワークバスに送出する時点を起点とし、その起点からの経過時間をレイテンシとして計測した。しかしながら、たとえばイニシエータからの要求トランザクションの受信時を起点とし、当該イニシエータが要求を出してから応答が帰ってくるまでの時間をレイテンシとして計測してもよい。
また、複数のイニシエータが相互に直接通信する場合も想定され得る。その場合には、イニシエータからの要求トランザクションの受信時を起点とし、当該イニシエータが他のイニシエータに要求を出してから応答が帰ってくるまでの時間をレイテンシとして計測してもよい。
次のステップS18において、調整方法選択部132は、算出したレイテンシの値Lの値を予め設定された閾値L1およびL2(L1<L2)とを比較し、調整方法を選択する。L>L2に該当するときは、負荷が大きい、つまり伝送されているパケット数が多いことを意味する。よって、送信間隔を増加させ、パケットの密度を減少させる必要がある。一方、L≦L1に該当するときは、負荷が小さい、つまり伝送されているパケット数が少ないことを意味する。このときは、送信間隔を縮小させ、パケットの密度を増加させることができる。L2>L≧L1に該当するときは、負荷が中程度であると言える。
L2>L≧L1の場合には、処理はステップS20に進み、送信間隔決定部133は、段階的に送信間隔を拡大する調整を行う。送信間隔Gは、G+K1により求められる。
この定義によると、バースト周期内でデータ送信を行うサイクルの割合が小さいイニシエータほど、送信間隔の調整幅は大きくすることができる。なお、kは調整パラメータであり、シミュレーションなどにより決定される定数である。
数8をより詳しく説明する。数8に含まれる(Np・Tp)は、単一のバースト周期内に生成されるアクセス回数Npと1パケットを転送するために必要なサイクル数Tpとの積であるから、1バースト周期内において必要とされるサイクル数である。よって、バースト周期Tbを(Np・Tp)で除算すると、バーストアクセス期間中における、1サイクル当たりの時間長が得られる。本願明細書では、このように得られた値を「バーストアクセスの密度」と呼ぶ。数8のK1は、当該バーストアクセスの密度に調整パラメータkを乗じて得られる値であり、バーストアクセスの密度に応じた値である。
L≦L1の場合には、処理はステップS22に進み、送信間隔決定部133は、段階的に送信間隔を縮小する調整を行う。送信間隔Gは、G−K2により求められる。
K2は段階調整幅であり、K2=1としてもよいし、数8のK1をK2としてK1と同じように定義してもよい。
そしてL>L2の場合には、処理はステップS24に進み、調整方法選択部132は、非段階的に送信間隔を拡大する調整を行う。
ステップS24においては、送信間隔決定部133は、数9に従い、送信間隔Gを更新する。
なお図17のステップS24では、a=0と表している。
非段階的な調整は、必須ではないが、段階的な調整でレイテンシが改善しないような過負荷な状態から、速やかに脱却できる可能性がある。aは乱数の発生区間の下限であり、a=I/2などとしてもよいし、a=K1などとしてもよい。また乱数の確率分布は一様分布を用いてもよい。
調整方法選択部132は、決定された調整方法を間隔制御情報として、送信間隔決定部133に通知する。その後、処理はステップS26およびS28に進む。
ステップS26において、送信間隔決定部133は送信間隔Gと許容遅延Iとを比較する。送信間隔Gが許容遅延Iより小さいときには、ステップS30に進み、その送信間隔Gを記録する。送信間隔Gが許容遅延I以上のときには、ステップS28に進み、許容遅延Iをその送信間隔Gとして設定する。そしてステップS30において、その送信間隔Gを記録する。
なお、この例においては閾値L1およびL2を2つ設けたが、これは一例である。閾値はL1のみであってもよい。このときは、L>L1の場合には、段階的に送信間隔を拡大する調整を行い、L≦L1の場合には、段階的に送信間隔を縮小する調整を行ってもよい。
このとき、送信間隔Gは以下の処理により求めることができる。
まず段階的に送信間隔を拡大する場合(L>L1)には、送信間隔決定部133は、数10に従い、送信間隔Gを更新する。
K1は上述の数9に示す通りである。
また、段階的に送信間隔を縮小する場合(L≦L1)には、送信間隔決定部133は、数12に従い、送信間隔Gを更新する。
K2=1としてもよいし、数9のように定義してもよい。
なお、数11および数12の”min”は、図17のステップS26およびS28の処理を包含していることに留意されたい。
送信間隔決定部133は、内部にデクリメントカウンタを持ち、デクリメントカウンタの保持する値が、ゼロの場合だけ、送信許可信号をアサート(Assert)して、イニシエータが要求トランザクションを発行可能な状態にする。デクリメントカウンタにゼロ以外の値が書き込まれると、送信許可信号はネゲート(Negate)され、イニシエータは新たな要求トランザクションが発行可能な状態となるまで、メモリアクセスを待機させる。デクリメントカウンタの値は、サイクルカウンタがインクリメントされる度にデクリメントされることで次第にゼロに近づく。
先頭アクセスの場合に実行されるステップS32では、アクセス残数Rpをデクリメントし(Rp=Rp−1)、ステップS34においてTp+Gをデクリメントカウンタに書き込む。そしてステップS38において、送信間隔決定部133は送信許可信号を”DISABLE”に設定する。これによりTp+Gサイクル以内のイニシエータからの要求トランザクションの発行が禁止される。
中間アクセスの場合に実行されるステップS16において、送信間隔決定部133は、調整範囲情報により許容遅延Iの値が負であることを検出した場合には、イニシエータが行う処理のリアルタイム性を確保するため、送信間隔GをG=0に更新する。その後処理はステップS30に進んで送信間隔Gの値が記録される。次のステップS32ではアクセス残数Rpをデクリメントし(Rp=Rp−1)、ステップS34においてデクリメントカウンタにTp+Gを書き込む。そしてステップS38において、送信間隔決定部133は送信許可信号を”DISABLE”に設定する。これによりTp+Gサイクル以内のイニシエータからの要求トランザクションの発行が禁止される。
最後尾アクセスの場合に実行されるステップS8において、送信間隔決定部133は、アクセス残数Rpをゼロクリアし、ステップS36においてデクリメントカウンタにSb+Tbを書き込む。そしてステップS38において、送信間隔決定部133は送信許可信号を”DISABLE”に設定する。これによりTp+Sbサイクル以内のイニシエータからの要求トランザクションの発行が禁止される。
その後、ステップS40においてカウンタがリセットされたことを検出すると、ステップS42において送信間隔決定部133は送信許可信号を”ENABLE”に設定する。これにより、イニシエータからの要求トランザクションの発行が許可される。
送信間隔の拡大だけでなく縮小を行うことにより、Np回のアクセスを早期に完了させ、後から発生するであろう他のイニシエータのアクセスを可能な限りバスの帯域内に収容することができる。例えば図4のCPUは、ユーザとのインタラクションやインターネットのブラウジングなどに利用されるため、ユーザの指定した処理を実行するために発生するメモリアクセス量は、事前に予測することが困難である。そのような場合でも、送信間隔の縮小により、各イニシエータが早期に全てのメモリアクセスを完了していれば、ユーザによって起動されたCPU処理のアクセスをバス帯域内に収容することができ、バス帯域の利用効率が向上する。
以上のように送信間隔制御部125が働くことにより、イニシエータ間でリンクを共用するネットワークバス上でのリアルタイム性の確保が可能となるとともに、バス帯域の利用効率も向上させることができる。図25及び図26は、ENC、DEC、DMACのアクセスをモデル化し、ソフトウェアシミュレータにより、レイテンシの大きさを比較評価したものである。横軸は時間(サイクルクロックの値)を、縦軸はレイテンシの値(単位はサイクル)を示している。使用した3種類のイニシエータのアクセスモデルは以下のように条件設定した。
ENC: Tb=4000、Np=250、Tp=4 (灰色)
DEC: Tb=4000、Np=250、Tp=4 (灰色)
DMAC:Tb=400、 Np=4、 Tp=4 (黒色)
図25は送信間隔制御を行わない場合のパケットのレイテンシの結果を示す。0サイクルからENCとDECのバーストアクセスが開始されると、レイテンシは一定の傾斜で大きくなっていき、850サイクル程度まで増加していることが分かる。バーストアクセスによりバスが過負荷となっている間に行われたDMACのメモリアクセスも、バーストアクセスの影響でレイテンシが同様に伸びている。
一方、図26は本実施形態による送信間隔制御を行った場合のパケットのレイテンシの結果を示す。0サイクルから開始されたENCとDECのバーストアクセスは、レイテンシの増加とともに、送信間隔が制御され、50サイクル程度のレイテンシに抑制されている。またこのため、DMACのアクセスも送信間隔制御されたためにできた空きサイクルにより、低レイテンシでアクセスが完了していることが分かる。また送信間隔が縮小される制御が入っているため、0から4000サイクルの間で実行されるべきENC及びDECの各4000回のアクセスは、2000サイクル迄の間で全て完了していることが分かる。このように、各イニシエータ毎のリアルタイム性の確保とバス帯域の利用効率向上がなされることがシミュレーションで確認できる。
本実施形態では、送信間隔制御部はイニシエータ側のNICの一部として説明したが、NIC機能ブロックの外部に位置していてもよい。またイニシエータとターゲット間を接続するネットワークバスのトポロジーとして、フライ網を仮定したが、メッシュ網やトーラス網などの他のトポロジーであってもよい。また本実施形態では、ターゲットが複数存在する場合を説明しているが、ターゲットは単一でも良い。
(実施形態2)
本実施形態では、実施形態1において説明した第一の演算フェーズを実行するのに要する演算サイクル数n、イニシエータが送信する最小パケットサイズa、必要とされる制御粒度を示す制御間隔pを、回路設計時における要求仕様として定義する。これにより、(数13)に示す関係式から、必要な演算回路の並列数を決定することができる。
Nによって、回路の実装規模や実装面積が決定されるため、設計時における回路規模の見積りに利用することができると共に、設計手法または設計ツールとして用いることも可能である。
たとえば、設計者にとっては、1パケットの送信毎に送信間隔を制御したいという要求は強いと考えられる。その場合には、制御間隔pを1に固定すればよい。このように、pの値が変化しない条件下でも、最適な数の並列演算回路を有する送信間隔制御装置を設計することが可能になる。
本願発明は、チップ(NoC)上に実装されるNICまたは送信間隔制御装置として実施されるだけでなく、チップ上に実装するための設計及び検証を行うシミュレーションプログラムとしても実施される。そのようなシミュレーションプログラムは、コンピュータによって実行される。本実施形態においては、図12、図13、図15に示される各構成要素は、シミュレーションプログラム上のオブジェクト化されたクラスとして実装される。各クラスは、予め定められたシミュレーションシナリオを読み込むことにより、上述した実施形態の各構成要素に対応する動作をコンピュータ上で実現する。言い換えると、各構成要素に対応する動作は、コンピュータの処理ステップとして直列的または並列的に実行される。
たとえば、並列演算回路の最適な並列数Nを求めるためには、使用者は、上述のコンピュータに、予め定めた制御間隔pの値を入力し、予め想定される、イニシエータが送信する最小のパケットサイズaおよび並列演算回路の演算実行の要処理時間nを入力すればよい。コンピュータは、上述の数13にそれらを代入することにより、最適な並列演算回路数Nを求めることが可能になる。