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

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

▶ ナパテック アクティーゼルスカブの特許一覧

特許5749732キューの充填レベルの更新を制御することにより帯域幅を節約しながらデータを受信し記憶するアセンブリおよび方法
<>
  • 特許5749732-キューの充填レベルの更新を制御することにより帯域幅を節約しながらデータを受信し記憶するアセンブリおよび方法 図000002
  • 特許5749732-キューの充填レベルの更新を制御することにより帯域幅を節約しながらデータを受信し記憶するアセンブリおよび方法 図000003
  • 特許5749732-キューの充填レベルの更新を制御することにより帯域幅を節約しながらデータを受信し記憶するアセンブリおよび方法 図000004
  • 特許5749732-キューの充填レベルの更新を制御することにより帯域幅を節約しながらデータを受信し記憶するアセンブリおよび方法 図000005
  • 特許5749732-キューの充填レベルの更新を制御することにより帯域幅を節約しながらデータを受信し記憶するアセンブリおよび方法 図000006
  • 特許5749732-キューの充填レベルの更新を制御することにより帯域幅を節約しながらデータを受信し記憶するアセンブリおよび方法 図000007
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5749732
(24)【登録日】2015年5月22日
(45)【発行日】2015年7月15日
(54)【発明の名称】キューの充填レベルの更新を制御することにより帯域幅を節約しながらデータを受信し記憶するアセンブリおよび方法
(51)【国際特許分類】
   H04L 12/879 20130101AFI20150625BHJP
【FI】
   H04L12/879
【請求項の数】13
【全頁数】23
(21)【出願番号】特願2012-541531(P2012-541531)
(86)(22)【出願日】2010年12月6日
(65)【公表番号】特表2013-513273(P2013-513273A)
(43)【公表日】2013年4月18日
(86)【国際出願番号】EP2010068967
(87)【国際公開番号】WO2011067409
(87)【国際公開日】20110609
【審査請求日】2013年11月20日
(31)【優先権主張番号】61/266,811
(32)【優先日】2009年12月4日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】512064675
【氏名又は名称】ナパテック アクティーゼルスカブ
(74)【代理人】
【識別番号】100099759
【弁理士】
【氏名又は名称】青木 篤
(74)【代理人】
【識別番号】100092624
【弁理士】
【氏名又は名称】鶴田 準一
(74)【代理人】
【識別番号】100114018
【弁理士】
【氏名又は名称】南山 知広
(74)【代理人】
【識別番号】100119987
【弁理士】
【氏名又は名称】伊坪 公一
(74)【代理人】
【識別番号】100161089
【弁理士】
【氏名又は名称】萩原 良一
(74)【代理人】
【識別番号】100114177
【弁理士】
【氏名又は名称】小林 龍
(72)【発明者】
【氏名】ペーター コルガー
【審査官】 浦口 幸宏
(56)【参考文献】
【文献】 特開2009−170976(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
H04L12/00−12/26
12/50−12/955
(57)【特許請求の範囲】
【請求項1】
データパケットを受信し送信するためのアセンブリであって、
・ データを記憶し得る複数のアドレスを含む記憶領域と、
・ データ受信・記憶装置であって、
− データパケットを受信するかまたはデータパケットにアクセスするための手段、
− アドレスを決定するための手段、および
− 前記記憶領域の決定された前記アドレスに、前記データパケットの少なくとも一部が記憶さるための手段
を備えるデータ受信・記憶装置と、
・ 前記記憶領域からデータを読み取るかまたはデキューイングするための手段であって、前記記憶領域の1つまたは複数のアドレスであり前記データが読み取られた/デキューイングされたアドレスに関する第1の情報を出力するための手段を備える手段と、
を備え、
前記決定手段が、
・ 決定された前記アドレスに基づいて、前記記憶領域の1つまたは複数のアドレスのグループの充填レベルに関する情報を導出し、
・ 前記充填レベルが予め定められたレベルを超える場合に、前記読取り/デキューイング手段に前記第1の情報を出力するように指示し
前記第1の情報に基づいて前記充填レベルの情報を再び導出
ように構成されているアセンブリ。
【請求項2】
決定された前記アドレスに関する第2の情報を出力するように前記決定手段が構成され、前記第2の情報に基づいてデータを読み取る/デキューイングするように前記読取り/デキューイング手段が構成されている、請求項1に記載のアセンブリ。
【請求項3】
前記記憶領域内で定められた複数のキューのうちの1つを前記1つまたは複数のアドレスのグループのそれぞれが定め、それぞれのキューが複数の連続したアドレスにより定められ、前記キュー同士のすべてのアドレスは重なり合わず、前記キューの前記充填レベルを導出するように前記決定手段が構成されている、請求項1または2に記載のアセンブリ。
【請求項4】
各キューについて、データを加える次のアドレスを識別する書出しポインタと、前記キューから読み取られる/デキューイングされる次のアドレスを識別する読取りポインタとを保持するように前記決定手段が構成され、
アドレスが決定されたときに、決定された前記アドレスが関係する前記キューの前記書出しポインタを更新するように、前記決定手段が構成され、
前記第1の情報に基づいて、データがデキューイングされた前記キューの前記読取りポインタを更新するように、前記決定手段が構成され、
前記キューの前記読取りポインタおよび前記書出しポインタに基づいて、キューの前記充填レベルを決定するように、前記決定手段が構成されている、請求項3に記載のアセンブリ。
【請求項5】
前記データ受信・記憶装置が、
・ 受信/アクセス手段および記憶手段をそれぞれが備える複数のデータ受信・記憶要素と、
・ 前記データパケットの少なくとも一部を記憶する前記アドレスを決定するための前記手段を備える制御部と、
を備え、
・ 受信された前記データパケットに関する情報を前記制御部に送信するための手段を前記データ受信・記憶要素のそれぞれがさらに備え、
・ 送信された前記情報にも基づいて前記アドレスを決定するように前記制御部の前記決定手段が構成され、
・ 関係する前記データ受信・記憶要素に前記アドレスを戻すための手段を前記決定手段が備える、請求項1から4のいずれか1項に記載のアセンブリ。
【請求項6】
前記読取り/デキューイング手段が複数のプロセッサまたはプロセスを備え、それぞれのプロセッサまたはプロセスが前記キューの第1のグループの1つからデータをデキューイングするように構成され、個々の前記第1のグループの前記キュー同士のすべてのアドレスが重なり合わず、
・ 受信された/アクセスされたデータパケットについて、ューの第1のグループのそれぞれからの1つずつのキューをそれぞれが含むューの複数の第2のグループであって、記キュー同士のすべてのアドレスが重なり合わない複数の第2のループの1つを決定し、
・ 決定された前記第2のグループの現在選択されている第1のキューの前記充填レベルが予め定められたレベルを超えるならば、決定された前記第2のグループの第2のキューを識別かつ選択し、
・ 前記アドレスを、識別された前記第2のキューのアドレスとして選択する
ことによって前記アドレスを選択するように前記決定手段が構成され、
識別かつ選択された前記第2のキューに関する前記プロセス/プロセッサに、前記予め定められたレベルを超過した前記第1のキューが空になるまでこの第2のキューを処理しないように指示するための手段をさらに備える、請求項3または4に記載のアセンブリ。
【請求項7】
請求項1から6のいずれか1項に記載のアセンブリ用のデータ受信・記憶装置。
【請求項8】
請求項1に記載のアセンブリを動作させる方法であって、
・ 前記記憶領域内の複数のアドレスにデータを記憶するステップと、
・ 前記データ受信・記憶装置が、
− データパケットを受信するかまたはデータパケットにアクセスするステップと、
− アドレスを決定するステップと、
− 前記記憶領域の決定された前記アドレスに、前記データパケットの少なくとも一部が記憶さるステップと、
・ 前記記憶領域からデータを読み取るかまたはデキューイングするステップであって、前記データが読み取られた/デキューイングされた1つまたは複数のアドレスに関する第1の情報を出力することを含むステップと、
を含み、
決定するステップが、
・ 決定された前記アドレスに基づいて、前記記憶領域の1つまたは複数のアドレスのグループの充填レベルに関する情報を導出し、
・ 前記充填レベルが予め定められたレベルを超える場合に、前記読取り/デキューイングするテップで前記第1の情報を出力するように指示し
前記第1の情報に基づいて前記充填レベルの情報を再び導出
ことを含む方法。
【請求項9】
決定された前記アドレスに関する第2の情報を出力することを前記決定するステップが含み、前記第2の情報に基づいてデータを読み取る/デキューイングすることを前記読取り/デキューイングするステップが含む、請求項8に記載の方法。
【請求項10】
前記記憶領域内で定められた複数のキューのうちの1つを前記1つまたは複数のアドレスのグループのそれぞれが定め、それぞれのキューが複数の連続したアドレスにより定められ、前記キュー同士のすべてのアドレスは重なり合わず、前記キューの前記充填レベルを導出することを前記決定するステップが含む、請求項8または9に記載の方法。
【請求項11】
各キューについて、データを加える次のアドレスを識別する書出しポインタと、前記キューから読み取られる/デキューイングされる次のアドレスを識別する読取りポインタとを決定することを前記決定するステップが含み、アドレスが決定されたときに、決定された前記アドレスが関係する前記キューの前記書出しポインタを更新することを、前記決定するステップが含み、
前記第1の情報に基づいて、データがデキューイングされた前記キューの前記読取りポインタを更新することを、前記決定するステップが含み、
前記キューの前記読取りポインタおよび前記書出しポインタに基づいて、キューの前記充填レベルを決定することを、前記決定するステップが含む、請求項10に記載の方法。
【請求項12】
前記データ受信・記憶装置が、
・ 受信/アクセス手段および記憶手段をそれぞれが備える複数のデータ受信・記憶要素と、
・ 前記データパケットの少なくとも一部を記憶する前記アドレスを決定するための前記手段を備える制御部と、
を備え、
前記決定するステップが、
・ 受信された前記データパケットに関する情報を前記データ受信・記憶要素のそれぞれが前記制御部に送信し、
・ 送信された前記情報にも基づいて前記制御部の前記決定手段が前記アドレスを決定し、
・ 関係する前記データ受信・記憶要素に前記決定手段が前記アドレスを戻す
ことを含む、請求項8から11のいずれか1項に記載の方法。
【請求項13】
前記読取り/デキューイングするステップが複数のプロセッサまたはプロセスを含み、それぞれのプロセッサ/プロセスが前記キューの第1のグループの1つからデータを読み取り/デキューイングし、個々の前記第1のグループの前記キュー同士のすべてのアドレスが重なり合わず、
・ 受信された/アクセスされたデータパケットについて、ューの第1のグループのそれぞれからの1つずつのキューをそれぞれが含むューの複数の第2のグループであって、記キュー同士のすべてのアドレスが重なり合わない複数の第2のループの1つを決定し、
・ 決定された前記第2のグループの現在選択されている第1のキューの前記充填レベルが予め定められたレベルを超えるならば、決定された前記第2のグループの第2のキューを識別かつ選択し、
・ 前記アドレスを、識別された前記第2のキューのアドレスとして選択する
ことによって前記アドレスを決定することを前記決定するステップが含み、
識別かつ選択された前記第2のキューに関する前記プロセス/プロセッサに、前記予め定められたレベルを超過した前記第1のキューが空になるまでこの第2のキューを処理しないように指示するステップをさらに含む、請求項10または11に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データパケットを受信/にアクセスし、これらを記憶領域に、かつ記憶領域の充填レベルを考慮したアドレスに記憶するやり方に関する。特に、本発明は、記憶されるデータが送信されるデータ経路上の帯域幅をふさぎすぎないようにするために、記憶領域内の占有されたアドレスを記述する情報を十分に遅いレートで更新するやり方に関する。
【発明の概要】
【0002】
第1の態様では、本発明は、データパケットを受信し送信するためのアセンブリであって、
・ データを記憶し得る複数のアドレスを含む記憶領域と、
・ データ受信・記憶装置であって、
− データパケットを受信するかまたはデータパケットにアクセスするための手段、
− アドレスを決定するための手段、および
− 記憶領域の決定されたアドレスに、データパケットの少なくとも一部が記憶されることを円滑化するための手段
を備えるデータ受信・記憶装置と、
・ 記憶領域からデータを読み取るかまたはデキューイングするための手段であって、記憶手段の1つまたは複数のアドレスでありデータが読み取られた/デキューイングされたアドレスに関する第1の情報を出力するための手段を備える手段と、
を備え、
決定手段が、
・ 決定されたアドレスに基づいて、記憶領域の1つまたは複数のアドレスのグループの充填レベルに関する情報を導出し、
・ 充填レベルが予め定められたレベルを超える場合に、読取り/デキューイング手段に第1の情報を出力させ、第1の情報に基づいて充填レベルの情報を再び導出させることを指示する
ように構成されているアセンブリに関する。
【0003】
こういった意味合いで、そのアセンブリおよび/または読取り/デキューイング手段および/または受信/記憶装置は、1個の筺体内の1個のハードウェアでもよいし、または、受信/記憶部とは別個の記憶部および/または制御部などの、いくつかの別個の要素により構成してもよいが、データを交換できるようにするため、取り外しができるように相互に接続される。最後の状況では、そのアセンブリは、要求または要件に適合させるようにより多くのまたはより少ない受信/記憶部を付け加えることができるという点で、極めて柔軟なものでもよい。この交換は、TCPや、イーサネット(登録商標)、ブルートゥースなどの任意のデータ転送プロトコルのもとで行ってもよく、任意の種類のデータ転送を用いてもよく、有線または無線でもよい。
【0004】
データパケットは、ネットワークや、データケーブル、データバス、トランクなどの上で伝送されるかまたはそれらにより搬送される、任意の種類のデータ単位でもよい。通常、データ単位は、UDPやTCPのデータパケットといったいくつかの異なる規格またはデータパケットの種類がその傘下にあるイーサネット(登録商標)規格などの、1つまたは複数のデータ規格に従う。データパケットは、通常、アドレスデータやペイロードなどのいくつかの異なる情報項目または種類をもち、それらはそれぞれ、データパケット内のよく定められたまたは知られた位置に配置されている。そうした位置や種類は、典型的にはデータパケットの種類ごとに異なるが、通常、データパケットの種類、したがってその個々の内容の位置は、実際のデータパケットから決定してもよく、その際は、アドレスデータおよび/またはペイロードなどの個々のデータ項目を、後で導出し、変更し、かつ/または解析に使用してもよい。その種類または規格は、パケットの特定のデータ項目により種類/規格が識別されるときなどにデータパケットから直接導出してもよく、または、データパケットのデータ項目の種類や位置を認識しその後にそうしたデータがそうした(1つまたは複数の)位置で見つかるであろうデータパケットの(1つまたは複数の)種類もしくは規格を決定することに基づくなどして、データパケットから導出されたデータから導出してもよい。
【0005】
データパケットの任意の部分を記憶してもよい。データパケットを再度出力する必要がなければ、場所を取らないようにするために、例えばその中のアドレス指定情報を削除してもよい。
【0006】
データパケットは並べ替えてもよく、その場合は、多数のやり方で、いくつかの理由により並べ替える。通常、コンピュータ間のデータ交換はファイル転送や、TCP転送、VoIPなどであり、その際は、個々のパケットの順序が重要である。通常、そうした転送のことをストリームと呼ぶ。
【0007】
通常、データパケットのストリームは、単一の送信機から1つまたは複数の受信機に伝送されるデータパケットの列である。これらのデータパケットは、例えば、パケットのペイロードである、より小さな部分で伝送される単一のファイルなどに関する。そして、送信機と受信機、または中間の任意のネットワーク要素は、通常、パケット内でも表されるアドレスをもつ。加えて、個々のデータパケットの規格に応じて、データパケット中に他のストリーム識別情報があることもある。
【0008】
したがって、例えばアドレスおよび/またはストリーム識別情報に基づいてストリームを識別してもよく、それによって、矛盾なく用いられるならば同じ情報を導出してもよく、後続する任意のプロセスでは単にその情報からストリームを識別してもよい。別の状況では、データパケットの中に、その順序を決定するシーケンス番号またはタイムスタンプなどの情報を与えてもよい。したがって、記憶領域に記憶されるときなどに、この情報をパケットの並べ替えに用いてもよい。
【0009】
好ましくは、記憶領域はいくつかのキューを含み、各キューは、いくつかのアドレスおよび/またはアドレスによりそれぞれが定められるいくつかの記憶部を含む。通常、1つの記憶領域は個別にアドレス指定可能な複数の要素をもち、そうした要素のいくつかによりキューを構成してもよい。
【0010】
データパケットは、異なるサイズをもってもよく、様々な個数のアドレスを占めてもよい。
【0011】
もちろん、記憶領域は、一体構造の記憶部か、または間隔を空けたいくつかの記憶要素により構成されるものなどの、任意の形態の記憶部でもよい。通常の記憶技術は、ハードドライブや、フロッピー(登録商標)ディスク、RAM、ROM、PROM、EPROM、EEPROM、フラッシュ、メモリカード、CD−ROM、DVD、メモリカードなどに基づいている。
【0012】
別個の記憶部を設けるならば、アドレスは、実際の記憶部とその中の「ローカルアドレス」の両方の識別情報を記述することになる。
【0013】
充填レベルは、記憶領域についての全体の充填レベルでもよく、または定められたキューのグループについての充填レベルを決定してもよく、または個々のアドレスのグループについて充填レベルをそれぞれ決定してもよい。もちろん、異なるグループ/キューが異なる充填レベルをもってもよい。充填レベルは5%、10%、15%、20%、またはそれ以上などの任意のパーセンテージでもよく、またはアドレスもしくはアドレス指定可能な要素の総数は1000、10000、またはそれ以上などでもよく、いくつかのアドレス指定可能な要素はいくつかの巨大なパケット、すなわち総量が1kBや1MBなどのデータを記憶することができてもよい。
【0014】
アクセス/受信手段は、実際にデータまたはデータパケットを受信かつ/または記憶してもよい。あるいは、他の位置で、または受信/記憶装置がそれを用いて通信する装置で、データパケットを受信または記憶してもよく、それによって、データパケットのデータをリモートで読み取ることによりそのデータにアクセスするとともに、そのデータを他の装置に記憶する。後者の場合は、データパケットにリモートでアクセスするため、通常、処理が遅くなる。
【0015】
あまり好ましくはないが、受信されたアドレスは、データパケットが記憶される、記憶部内の実際のアドレスでなくてもよい。あるいは、このアドレスを導出することができる情報を受信してもよい。
【0016】
好ましくは、データパケットの記憶領域への記憶はDMAにより行われる。これは、記憶部にデータを記憶する最も速いやり方である。
【0017】
円滑化手段は、データ接続を介するなどして、データパケットの少なくとも一部を記憶領域に直接記憶してもよく、または、別の場所に記憶する場合には、データパケットの記憶を円滑化してもよい。そのとき、アドレスをこの別の場所に転送してもよく、そこでデータパケットの記憶が行われる。
【0018】
もちろん、受信手段、送信手段および円滑化手段は、この動作を処理し必要に応じてデータを伝達するのに必要なドライバやコネクタなどを備えてもよい。
【0019】
アドレスの決定は、データパケットから導出される情報に基づくなどの、任意の所望のやり方で行うことができる。上記のように、データパケットはストリームまたは所与の種類の一部であると判断することができ、その記憶はこの情報に従って行うことが望ましいであろう。ある種類のデータまたはストリームを容易にまたは迅速に読み取るなどのために、特定の順序で、または特定のグループもしくはキューにデータを記憶することが望ましいであろう。
【0020】
本発明によれば、アセンブリは、記憶領域からデータを読み取るかまたはデキューイングするための手段を備える。これらの手段は、1つまたは複数のプロセッサまたはプロセスでもよい。
【0021】
この意味合いで、プロセッサまたはプロセスは、データのデキューイングおよび場合によってはその処理を円滑化するように構成された、任意の種類の回路または要素でもよい。この処理は、データトラフィックの監視や、データパケットを異なる受信先などに分割することなどの、任意の種類の処理でもよい。また、その処理は、データパケットをアセンブリから出力し、サーバなどの後続するネットワーク要素に送信することでもよい。
【0022】
読取り/デキューイング手段は、しかるべく指示されたときだけ、かつ/または例えば最後の出力から最大期間が経過したときだけ、第1の情報を出力してもよい。第1の情報は、最後に第1の情報が出力されたときなどからデキューイングされた、またはこれからデキューイングされるすべてのアドレスに関する情報を含んでもよい。
【0023】
この点で、第1の情報は、多数のアドレスより単純なものでもよい。これは、特に、連続的なアドレスを含むいくつかのキューを記憶領域が含む場合である。これについては、以下でさらに詳細に記載する。
【0024】
第1の情報を受信せずにデータパケットが記憶領域に記憶されると、記憶領域はデータで満たされるように見えるであろう。データが見かけ上読み取られる/デキューイングされることなく、アドレスが決定され、データが記憶領域に加えられる。
【0025】
したがって、予め定められた限界を充填レベルが超えると、第1の情報を考慮するために充填レベルが更新され、こうしてアドレスが読み取られる/デキューイングされる。
【0026】
必要なときだけ第1の情報を出力することの利点は、読取り/デキューイング手段および/または記憶領域へのならびにそこからのデータ搬送の帯域幅を、第1の情報の伝送により過度に用いすぎないようにすることである。したがって、記憶領域へのデータの記憶および/または記憶領域からのデータの読取り/デキューイングに、この帯域幅を用いることができる。
【0027】
限界に到達したことによる更新が所与の最大期間内に起こらなければ、第1の情報を更新する命令はタイムアウトしてもよい。
【0028】
好ましい実施形態では、決定されたアドレスに関する第2の情報を出力するように決定手段が構成され、第2の情報に基づいてデータを読み取る/デキューイングするように読取り/デキューイング手段が構成される。そして、第2の情報により、読取り/デキューイング手段に、データが新たに加えられたアドレスが通知される。どのアドレスが占有されているかに関する情報で、確実に読取り/デキューイング手段を頻繁にまたは絶えず更新して、読取り/デキューイング手段が空いた状態とならないことを保証することができる。占有されているアドレスが読取り/デキューイング手段に通知されない状態が続いた場合は、記憶領域またはアドレスグループが空であると読取り/デキューイング手段が誤解するおそれがある。したがって、決定手段は、決定されたアドレスに関する第2の情報を読取り/デキューイング手段に出力してもよい。
【0029】
一実施形態では、記憶領域内で定められた複数のキューのうちの1つを1つまたは複数のアドレスのグループのそれぞれが定め、それぞれのキューが複数の連続した/連続的なアドレスにより定められ、キューのすべてのアドレスは重なり合わず、(1つまたは複数の)キューの(通常それぞれの)充填レベルを導出するように決定手段が構成される。
【0030】
この状況では、各キューについて、データを加える次のアドレスまたはデータが加えられた最後のアドレスを識別する書出しポインタと、キューから読み取られる/デキューイングされる次のアドレスまたは読み取られた/デキューイングされた最後のアドレスを識別する読取りポインタとを保持するように決定手段が構成され、アドレスが決定されたときに、決定されたアドレスが関係するキューの書出しポインタを第2の情報の中などで更新するように、決定手段が構成され、第1の情報に基づいて、データがデキューイングされたキューの読取りポインタを更新するように、決定手段が構成され、(1つまたは複数の)キューの読取りポインタおよび書出しポインタに基づいて、キューの充填レベルを決定するように、決定手段が構成されると、特に好ましい。
【0031】
連続したアドレスとしてキューを実現すると、第1の情報の出力を単にポインタまたはアドレスとすることができる。したがって、他の終点ポインタに加えて、この新しいポインタまたはアドレスにより、キューのどのアドレスが占有されており、どのアドレスが占有されていないかという、すべての必要とされる情報が提供されることになる。2つのポインタの間のアドレスは、データで占有されていてもよい。もちろん、キューのアドレスを円形のリストとして用いてもよく、したがって、ポインタは、アドレスのグループの終端に達したときに折り返して先頭に戻ってもよい。
【0032】
ふさがれるアドレスの個数(例えば充填レベルの指標)は、一方のポインタから他方のポインタを引き算することにより簡単に導出することができる。
【0033】
異なるサイズのデータは異なる量の空き領域を、したがって異なる個数のアドレスを占めることがあるため、書出しポインタを更新するには、記憶されるデータパケットまたはその一部のサイズがわかっていることが必要な場合がある。
【0034】
読取りポインタの更新は、データが読み取られた/デキューイングされたすべてのアドレスのリストか、または単に最新のまだデータを含むアドレスもしくは最初に解放されたアドレスに基づいて行うことができる。
【0035】
しかしながら、多数の連続的なアドレスを設けることは、現実のシステムでは問題となるおそれがある。標準の記憶領域システムでは、最大サイズが例えば4MBであるブロックまたはセグメントが割り当てられる。アドレスは、セグメント/ブロック内では連続的であるが、セグメント/ブロックがメモリ内でランダムに割り当てられることもあるため、完全なアドレスでないことがある。
【0036】
そうした状況では、予め定められた個数の物理アドレスのグループに記憶領域のキューのアドレスが分けられ、グループが不連続に配置される。この点で、「不連続に」とは、記憶領域の空間でそのグループは近接して配置されない(グループの境界を越えて連続するアドレスをもたない)ことを意味する。そして、好ましくは、キューを実現するアドレスが、連続するアドレスとして定められた仮想アドレスであり、仮想アドレスと物理アドレスの間の変換を行うための手段を制御部がさらに備える。
【0037】
したがって、任意の個数の連続的な仮想アドレスを割り当ててもよく、それらはその後、実際の物理アドレスに変換される。
【0038】
これを得る1つのやり方は、いくつかの割り当て可能なセグメント/ブロックを記憶部が有し、割り当て可能なブロック/セグメントの1つの中のアドレスを各グループの物理アドレスが定め、第1の個数のビットのアドレスで各ブロック/セグメントが特定可能であり、第2の個数のビットを用いてブロック/セグメントの中のすべてのアドレスがアドレス指定可能であり、第1の個数のビットと第2の個数のビットの和に対応するいくつかのビットを物理アドレスが有し、少なくとも第1の個数のビットをもつ第1の部分と、少なくとも第2の個数のビットをもつ第2の部分とを仮想アドレスのそれぞれが含み、仮想アドレスの第1の部分を第1の個数のビットをもつ第3の部分に変換し、割り当てられたブロック/セグメントを識別し、第3の部分と第1の部分をもつアドレスとして物理アドレスを生成するように変換手段が構成されるというものである。
【0039】
好ましい実施形態では、データ受信・記憶装置が、
・ 受信/アクセス手段および記憶手段をそれぞれが備える複数のデータ受信・記憶要素と、
・ データパケットの少なくとも一部を記憶するアドレスを決定するための手段を備える制御部と、
を備え、
・ 受信されたデータパケットに関する情報を制御部に送信するための手段をデータ受信・記憶要素のそれぞれがさらに備え、
・ 送信された情報にも基づいてアドレスを決定するように制御部の決定手段が構成され、
・ 関係する受信/記憶要素にアドレスを戻すための手段を決定手段が備える。
【0040】
もちろん、受信/記憶部は、それぞれが別個のPCBや、プロセッサ、FPGAなどにより実現されるいくつかの別個のハードウェアとして設けてもよい。あるいは、同じPCB/プロセッサ/FPGAにより多数の受信/記憶部を構成してもよい。制御部は受信/記憶部とは分かれていてもよく、または1つまたは複数の受信/記憶部のうちの一部を構成してもよい。
【0041】
もちろん、プロセッサや、ソフトウェアにより制御されるかまたは物理的に組み込まれたもの、FPGA、特定用途向け回路、ASICSなどの個々の要素として、受信/記憶要素の個々の手段を調達または成形してもよい。あるいは、複数のそうした手段を組み合わせて1個のそうしたプロセッサなどにしてもよい。
【0042】
また、任意の個数の受信/記憶要素を用いてもよい。複数の受信/記憶要素を用いるときは、パラレルの受信と記憶を行ってもよい。2,3,4,5,6,7,8,10,15,20個などか、またはそれより多い任意の個数の受信/記憶要素を用いてもよい。以下でさらに記載するように、これらの受信/記憶要素はすべて同一またはほぼ同一のものでよく、または様々な動作をする様々な回路として具体化、すなわち作成してもよい。各受信/記憶要素が制御部をもってもよいが、必要なのは1つだけである。別の状況では、ただ1つの受信/記憶要素が制御部を備えるが、その受信/記憶要素は他の点では残りの受信/記憶要素と同一である。
【0043】
制御部は、任意の種類のプロセッサや、物理的に組み込まれるかもしくはソフトウェアにより制御されるものなどで構成してもよく、または、特定用途向け回路でもよい。制御部の動作は、個々のデータパケットについてのアドレスを決定することである。このやり方では、必要があれば例えばデータパケットの順序を取得してもよい。
【0044】
制御部は、キューの充填レベルを決定することが可能である。こういった意味合いで、充填レベルは、キューにあるいくつかのデータパケットまたはキューによりふさがれるいくつかのアドレス指定可能な要素に関係し得る。この充填レベルは、データ/パケット/アドレスの量/個数またはパーセンテージ(そのときはこの個数/量を最大の個数/量と比較する)により表してもよい。
【0045】
受信/記憶要素と制御部の間では、イーサネット(登録商標)やブルートゥースなど、パラレルまたはシリアルの通信、有線または無線の通信といった、任意の種類のデータ通信を用いてもよい。
【0046】
上記のように、読取り/デキューイング手段は複数のプロセッサまたはプロセスを備えてもよい。この状況では、異なるプロセス/プロセッサが異なる能力または異なる作業負荷をもつことがあるため、負荷分散をすることが望ましいであろう。
【0047】
この状況では、好ましくは、それぞれのプロセッサまたはプロセスがキューの第1のグループの1つからデータをデキューイングするように構成され、個々の第1のグループのキューが重なり合わず、
・ 受信された/アクセスされたデータパケットについて、第1のキューのグループのそれぞれからの1つのキューをそれぞれが含む第2のキューのグループであって、第2のキューのグループ同士のキューが重なり合わない第2のキューのグループの1つを決定し、
・ 決定された第2のグループの現在選択されている第1のキューの充填レベルが予め定められたレベルを超えるならば、決定された第2のグループの第2のキューを識別かつ選択し、
・ アドレスを、識別された第2のキューのアドレスとして選択する
ことによってアドレスを選択するように決定手段が構成され、
識別かつ選択された第2のキューに関するプロセス/プロセッサに、予め定められたレベルを超過した第1のキューが空になるまでこの第2のキューを処理しないように指示するための手段を、アセンブリがさらに備える。
【0048】
本実施形態では、任意の第2のグループの中でパケットを処理/デキューイングする際に順序を維持しながら、プロセス/プロセッサ間の負荷分散をしてもよい。
【0049】
記憶された(少なくとも一部の)データパケットをデキューイングかつ/または解析/処理する場合にこれらの順序が重要なときは特に、一度読取り/デキューイング手段がこれらをデキューイング/処理し始めると、そうしたデータパケットを別の読取り/デキューイング手段に割り当てることは困難である。本実施形態を用いて、そうしたデータパケットのグループ(通常はストリーム)のそれぞれを、読取り/デキューイング手段のうちの別々の手段によりデキューイング/処理された別個のキューをそれぞれがもつ第2のキューのグループに割り当てる。こうして、データパケットが現在記憶されており第1の読取り/デキューイング手段によりデキューイングされるキューが長くなりすぎるならば、すなわち第1の読取り/デキューイング手段が込みすぎているならば、第2の読取り/デキューイング手段によりデキューイングされる別のキューを同じ第2のグループから識別するが、第1の読取り/デキューイング手段が関係する第2のグループ内のそのキューからすべてのデータパケットをデキューイングする前に第2の読取り/デキューイング手段がデータパケットをデキューイングできないように決める。このやり方では、読取り/デキューイング手段の全体でデータパケットのデキューイングの順序が維持される。
【0050】
第2の態様では、本発明は、本発明の第1の態様によるアセンブリ用のデータ受信・記憶装置に関する。この装置は、上記の手段と能力をもってもよい。
【0051】
本発明の第3の態様は、第1の態様によるアセンブリを動作させる方法であって、
・ 記憶領域内の複数のアドレスにデータを記憶するステップと、
・ データ受信・記憶装置が、
− データパケットを受信するかまたはデータパケットにアクセスするステップと、
− アドレスを決定するステップと、
− 記憶領域の決定されたアドレスに、データパケットの少なくとも一部が、好ましくは直接記憶されることを円滑化するステップと、
・ 記憶領域からデータを読み取るかまたはデキューイングするステップであって、データが読み取られた/デキューイングされたかまたは読み取られる/デキューイングされる1つまたは複数のアドレスに関する第1の情報を出力することを含むステップと、
を含み、
決定するステップが、
・ 決定されたアドレスに基づいて、記憶領域の1つまたは複数のアドレスのグループの充填レベルに関する情報を導出し、
・ 充填レベルが予め定められたレベルを超える場合に、読取り/デキューイングするステップで第1の情報を出力させ、第1の情報に基づいて充填レベルの情報を再び導出させることを指示する
ことを含む方法に関する。
【0052】
第1の情報は、出力するように指示されなければ出力されないことが好ましい。そして、第1の情報は、そのレベルを充填レベルが超えるときだけ伝送される。
【0053】
一実施形態では、決定されたアドレスに関する第2の情報を出力することを、決定するステップが含み、第2の情報に基づいてデータを読み取る/デキューイングすることを、読取り/デキューイングするステップが含む。決定されたアドレスを読取り/デキューイング手段が通知され続けるようにするため、第2の情報は、第1の情報とは反対に、アドレスが決定されるなどのたびに、頻繁にまたはほとんど絶えず伝送されることが好ましい。
【0054】
ある状況では、記憶手段内で定められた複数のキューのうちの1つを1つまたは複数のアドレスのグループのそれぞれが定め、それぞれのキューが複数の連続したアドレスにより定められ、キューのすべてのアドレスは重なり合わず、キューの(通常それぞれの)充填レベルを導出することを、決定するステップが含む。
【0055】
この状況では、各キューについて、データを加える次のアドレスまたはデータが加えられた最後のアドレスを識別する書出しポインタと、キューから読み取られる/デキューイングされる次のアドレスまたは読み取られた/デキューイングされた最後のアドレスを識別する読取りポインタとを決定することを、決定するステップが含み、アドレスが決定されたときに、決定されたアドレスが関係するキューの書出しポインタを更新することを、決定するステップが含み、第1の情報に基づいて、データがデキューイングされたキューの読取りポインタを更新することを、決定するステップが含み、キューの読取りポインタおよび書出しポインタに基づいて、キューの充填レベルを決定することを、決定するステップが含むと、特に好ましい。
【0056】
各キューの占有されたアドレスの外側の限界がポインタにより識別されるときは、充填レベルのこの決定を簡単にすることができる。
【0057】
また、データ受信・記憶装置は、
・ 受信/アクセス手段および記憶手段をそれぞれが備える複数のデータ受信・記憶要素と、
・ データパケットの少なくとも一部を記憶するアドレスを決定するための手段を備える制御部と、
を備えてもよく、
決定するステップが、
・ 受信されたデータパケットに関する情報をデータ受信・記憶要素のそれぞれが制御部に送信し、
・ 送信された情報にも基づいて制御部の決定手段がアドレスを決定し、
・ 関係する受信/記憶要素に決定手段がアドレスを戻す
ことを含む。
【0058】
好ましい実施形態では、読み取る/デキューイングするステップが複数のプロセッサまたはプロセスを含み、それぞれのプロセッサ/プロセスがキューの第1のグループの1つからデータを読み取り/デキューイングし、個々の第1のグループのキューが重なり合わず、
・ 受信された/アクセスされたデータパケットについて、第1のキューのグループのそれぞれからの1つのキューをそれぞれが含む第2のキューのグループであって、第2のグループ同士のキューが重なり合わない第2のキューのグループの1つを決定し、
・ 決定された第2のグループの現在選択されている第1のキューの充填レベルが予め定められたレベルを超えるならば、決定された第2のグループの第2のキューを識別かつ選択し、
・ アドレスを、識別された第2のキューのアドレスとして選択する
ことによってアドレスを決定することを、決定するステップが含み、
識別かつ選択された第2のキューに関するプロセス/プロセッサに、予め定められたレベルを超過した第1のキューが空になるまで、この第2のキューを処理しないように指示するステップをさらに含む。
【0059】
以下では、図面を参照して、本発明の好ましい実施形態について記載する。
【図面の簡単な説明】
【0060】
図1】本発明による第1の実施形態を示す。
図2】仮想アドレスから物理アドレスへの変換を示す。
図3図1のアロケータとアダプタの間でのクロックの同期を示す。
図4】時系列でランダムに受信されたパケットを並べ替えるやり方を示す。
図5】データパケット間の順序を維持しながらプロセッサ間で負荷分散することを示す。
図6】アダプタ内の負荷分散を示す。
【発明を実施するための形態】
【0061】
図1に、それぞれがWWWなどのネットワークに接続され、そこからデータを受信するいくつかのアダプタ12をもつ、データフレームを解析し送信するための装置の実施形態10を示す。
【0062】
一般に、この種類のシステムは、多数のデータパケットを受信し、その記憶および/または送信を適当なやり方で円滑化するために用いることができる。通常、これらのデータパケットは、本システムによりモニタリングされるデータ接続上を、コンピュータの組またはネットワークの間で伝送される。したがって、通常、データパケットは本システム用のものではなく、本システムに向けた、またはそこからのものでもない。
【0063】
このデータは、記憶されたときに、1つまたは複数の後続するプロセスまたはプロセッサ(図示せず)により処理してもよい。非常に大量のデータを扱うことを可能にするためには、迅速だが構造化されたデータの検索が実現されるように、構造化して記憶することが望ましい。また、単一のプロセッサで十分でないときは複数のプロセッサを設けて、それにより、プロセッサごとにデータを別々に記憶することが望ましい。
【0064】
そのプロセッサは、データトラフィックを解析し、データを記憶し、かつ/または、プロセッサでの処理の結果に応じて他のネットワーク要素やコンピュータなどにデータを伝送するために、用いることができる。
【0065】
代わりに、または付加的に、その後再度データを出力することも望ましく、しかも、または代わりに、それによって、そのように出力することが望ましいやり方または順番でデータを記憶することも望ましいであろう。
【0066】
通常、データパケットは、データパケットのストリームの部分である。2つのプロセッサまたはコンピュータが対話するときに、データパケットのストリームが交換される。このストリームは、ファイルの転送か、またはVoice over IPなどの音声/映像の交換でもよい。ストリームは同様のデータパケットの列であり、データパケットのストリームへの帰属が決定可能であり、ストリームのすべてのデータパケットが所望の順序で一緒に記憶され、その後で同じプロセスまたはプロセッサにより扱われ、かつ/またはその順序で出力されることが望ましい。
【0067】
受信されたデータフレームのストリームへの帰属は、フレームを解析することで決定される。この解析について、以下でさらに詳細に記載する。
【0068】
本実施形態は、フレーム/パッケージを解析し、かつ/またはこれらを記憶するタスクを多数のアダプタ12で分割するセットアップを実現することを意図している。
【0069】
より詳細には、WWWや任意の適当な種類のトランクまたはネットワークなどのネットワーク14から、アダプタ12はデータフレームを受信する。各アダプタ12は、他のアダプタ12とは無関係に複数のフレームを受信する。
【0070】
好ましくは、すべての(場合によっては1つを除く)アダプタは同じものであり、それぞれ、ネットワークまたはデータケーブルからデータフレームを受信するように構成された要素であるいわゆるPHY20と、受信されたフレームを例えばコンピュータ上のデータバス上で通常用いられる規格に変換するいわゆるMAC回路22とを備える。
【0071】
データフレームが受信されると、そのフレームは、回路24でタイムスタンプが与えられ、その後、解析回路26に供給される。解析回路26は、そのフレームが準拠する規格に関するデータ(VLANであるかどうか、かつ/またはMPLSのタグが付されているかどうかなど)や、場合によってはそこからのアドレスデータなどの、データフレームに関するデータを導出する。複数の異なる種類の規格が知られており、それらはそれぞれ、どの種類のデータ(アドレス、カプセル化、ペイロード、誤り訂正など)がフレーム内にあり、どこにそうしたデータがあるかを定める。特定の種類のパケットに応じて、異なる種類のデータを導出してもよい。
【0072】
回路26は、データフレームのデータパケットストリームへの帰属や、中央記憶領域内のキューなどの、データフレームを識別するデータを出力する。そして、データフレームの長さ、ID/キューの識別情報およびデータフレームのタイムスタンプが、要求回路28内で、中央サーバメモリアロケータ、すなわち制御装置16に伝送され、その制御装置16は、データフレームが記憶される記憶領域18内のアドレスを返す。このアドレスは、やはりデータフレームを受信する転送回路30に返され、その後、その転送回路30は、共通のデータバス32を介して、PCI Express(PCIe)プロトコルを実行するなどして、識別されたアドレスにデータフレームを伝送する。この記憶にはダイレクトメモリアクセスを用いてもよく、そのことは、フレームが所望のアドレスに直接記憶され、さらなる解析が必要ないことを意味する。これはデータ記憶領域にデータを記憶する最も速いやり方であるが、物理アドレスがわかっている必要がある。
【0073】
もちろん、代わりに、回路28は、タイムスタンプやパケットの長さと一緒に、またはそれらを伴わずに、フレームを識別する(種類やアドレスなどの)他の情報を出力してもよく、それによって、アロケータ自体が、フレームが加えられるキューを決定し、したがってフレームが記憶されるアドレスを導出することになる。
【0074】
アロケータ16とアダプタ12の間における「帯域外」の通信は、低帯域幅の固定通信か、デイジーチェーンのトポロジーか、またはリング型のトポロジーでもよい。以下でさらに記載するように、この通信は、タイムスタンプ回路24のクロックを同期させるためにも用いられる。この通信に適したプロトコルは、10Gbpsのイーサネット(登録商標)のフロントポート(PHY)の帯域幅につきほぼ1Gbpsの全二重の帯域幅を要する標準の64b/66bコーデックでもよい。
【0075】
上記の実施形態10では、記憶領域18内の任意の個数のキューにデータフレームを記憶してもよいことに留意されたい。どのキューにデータパケットを送信するかは、フレームのその後の運命に依存してもよい。フレームが1つまたは複数のプロセッサにより解析されるならば、プロセッサごとに1つのキューを設けてもよく、パケットを加える前のキューの長さがどのくらいかに応じてフレームをキューに送信してもよい。キューが長ければ、したがってプロセッサが込んでいれば、キューがより短い、したがってあまり込んでいないプロセッサにパケットを与えてもよい。
【0076】
ほとんどのデータフレームがストリームに関するならば、同じストリームに関するフレームを異なるプロセッサにより解析するために異なるキューに伝送するのは望ましくないかもしれないことに留意されたい。このやり方では、好ましくは、新たに開始されるストリームからのその後のフレームをすべて、「欠乏状態の」プロセッサに割り当てることにより、プロセッサ間で任意の負荷分散を実行する。この負荷分散と同様に、この代替案について、以下でさらに記載する。
【0077】
また、フレームが後の時点で記憶領域18から出力されるならば、出力されるフレームを、特定のキューに、フレームが出力される順序で与えてもよい。そうした出力について、以下でさらに記載する。
【0078】
ある一定のサービスの品質が要求されるならば、任意のキューを、優先度が異なるいくつかのキューに分割して、より優先度の高いフレームがより優先度の低いフレームを追い越し、より迅速に扱われる(処理される、出力される、解析されるなど)ようにしてもよい。
【0079】
アダプタ12内の負荷分散
図6では、アダプタ12のPHY20や、MAC22、タイムスタンプ割当て24などの一部の要素を、解析器26や、要求元28、転送回路30などの他の要素より高速に動かしてもよいことがわかる。この状況では、要素20〜24から受信しタイムスタンプを記録したデータパケットのフローを多数のパラレルなフローに分割するために、これらのより遅い要素の様々な「具体化」を行うことができる。図6では、単一のPHY20で受信されたデータパケットが、4つのパラレルなフローに分割されている。要素20〜30は直接図示していないが、それらの位置はフロー中に示している。
【0080】
もちろん、必要があれば、個々のフローの間に負荷分散を実行してもよい。
【0081】
図6の下側の線は代替案を示し、そこでは、アダプタ12内の単一のフローで取り扱われるデータパケットを、高速のPHY20により受信する。
【0082】
多数のキューを用いた外部のプロセスまたはプロセッサの負荷分散
記憶領域18のキューからデータを読み取るプロセッサまたはプロセス(図示せず)の負荷分散を、いくつかのやり方で行うことができる。ストリームなどでのデータパケットの順序(受信の順序か、または個々のデータパケット内のデータにより定められる順序)に関連性がないならば、プロセッサごとに単一のキューを設けてもよい。1つのプロセッサキューが一杯になった(これをどのように決定できるかは、以下でさらに記載する)場合は、アロケータ16により、単により多くのデータパケットが(1つまたは複数の)他のキューに伝送されるようにしてもよい。
【0083】
サービスの品質が要求されるならば、異なる優先度について異なるキューを用いてもよい。
【0084】
例えばストリームのデータパケットの順序が望み通りに維持された場合については、あるスキームを図5に示しており、そこでは、全体で4つのデータフロー/ストリームを受信する2つのアダプタ12を図示している。
【0085】
アダプタ12は、記憶領域18に記憶された全体で8つのキュー(no.#0〜#7)にデータパケットを伝送し、それについて、2つのプロセッサ(no.#0,#1)によって、キュー#0〜#3をプロセッサ#0により扱い、キュー#4〜#7をプロセッサ#1により扱うというスキームを用いてデキューイングをする。また、一般に、キュー#0および#4はストリーム#0に用いられ、キュー#1および#5はストリーム#1に用いられ、その他も同様である。
【0086】
最初に、ストリーム#0のデータパケットがキュー#0に伝送されるが、このキューが次第に一杯になると、アロケータ16は、ストリーム#0からのデータパケットをキュー#4に伝送し始める。しかしながら、プロセッサ#0がキュー#0を空にするまで、プロセッサ#1はそうしたパケットをデキューイングし解析することができない。これを制御するために、ストリームごとに1ビットの4ビットが割り当てられ、その値により、各キューからのパケットをどのプロセッサが扱えるかを決定する。図5では、一番上のビットがストリーム#0へのアクセスを制御しており、その値は「0」なので、これは、プロセッサ#0がこのキューを扱うことができ、したがってキュー#0からのパケットをデキューイングできるということを意味する。
【0087】
下部の2ビットが「1」であり、プロセッサ#1がストリーム#2および#3を取り扱うことができ、したがってキュー#6および#7からデキューイングできることを示しているとわかる。プロセッサが1つより多くのキューを処理することが可能なときは、ラウンドロビンや、優先度、キューの長さなどの任意の適当なやり方で、次に処理すべきキューを選択してもよい。
【0088】
その4ビットはプロセッサにより制御され、記憶領域18に記憶される。2つより多くのプロセッサを用いるときは、プロセッサ#1がキューを空にしたら、プロセッサ#1が(1つまたは複数の)対応するビットを変更するか、またはプロセッサ#2が、プロセッサ#1のキューが空であることを認識し、(1つまたは複数の)対応するビットを変更し、次いでその対応するキューのデキューイングを開始するように、プロセッサの順序または順番を決める。制御装置により、同じ順序を用いて、1つのキューが一杯ならばどのキューに次のデータを加えるかを決定する。
【0089】
そして、キュー内のデータの順序を維持するために、キューを変える場合は、空である新しいキューをアロケータ16が常に選択することになる。
【0090】
もちろん、2つより多くのプロセッサが単一のキューを取り扱うことができれば、より多くのビットを用いて、フローごとに、どのプロセッサが現在そのフローを処理できるかを示す。
【0091】
仮想アドレス−物理アドレス
そのセットアップを異なるシステムにより容易に適合させるためには、要求回路28や、転送回路30、アロケータ16だけでなく、記憶領域18内の、またはそれに接続された任意のデキューイング回路構成が仮想アドレス空間で動作することが好ましい。
【0092】
所与の最大ブロックサイズだけがDMA用に割り当てられるという標準の要件のため、かつそうした割り当てられたブロックが、異なるシステムの、または動作の折に触れて同じ装置のメモリ内の異なるまたはランダムな位置に配置されることがあるという理由で、物理アドレスを用いた直接的な操作は厄介になる。したがって、仮想アドレスが好ましい。
【0093】
現在、全体の長さが32ビットのアドレス(図2を参照)が2つの部分に分割され、そのうちの一方の部分が、割当て可能な最大サイズのブロック内のすべてのアドレスを指定するように構成されたいくつかのビットをもつ。この例では、最大サイズのブロックまたはセグメントのサイズは4MBであり、アドレスを指定するには22ビットが必要である。仮想アドレスと物理アドレスのこの部分は同じであり、単一のブロック/セグメント内でアドレス指定するのに用いられる。
【0094】
物理的なブロック/セグメントが記憶領域18内の様々なアドレスに配置されることを避けるために、これらが異なるブロック/セグメントに配置されるかも知れないということにかかわらず、少なくとも各キューについて、仮想アドレスをすべて連続的なアドレスとして定める。したがって、その32ビットは、複数の連続的なアドレスとして解釈されることになる。これは、さらにいくつかの4Mバイトのブロック/セグメントに分割してもよいが、仮想的には連続して配置される。したがって、仮想アドレスは、最初の10ビットの部分が連続的な仮想ブロック/セグメントのうちの1つを示し、最後の22ビットがこのブロック/セグメント内の内部アドレスを指定するものと見ることができる。
【0095】
物理的な実体の記憶領域18では、セグメント/ブロック内の最後の22ビットのアドレス指定は維持することができるが、仮想アドレスの最初の10ビットの部分は、物理的に割り当てられたブロック/セグメントのうちの1つのアドレス指定または識別情報に単に変換される。
【0096】
この用途で、仮想アドレスの最初の10ビットを、実際に割り当てられるブロック/セグメントの実際の識別情報(すなわち10ビットのアドレス)に翻訳するために、ルックアップテーブルを設ける。このルックアップテーブル(LUT)は、本実施形態の初期化時に設定してもよい。これを図2に示す。
【0097】
仮想アドレスを連続したアドレスとして定めるときに、以下で記載する読取り/書出しポインタも仮想アドレス空間内で用いることができる(これによってもやはり、例えばキューの長さの決定がより容易になる)ことに留意されたい。
【0098】
もちろん、さらに以下でわかるように、プロセス/プロセッサがデータ項目を記憶領域18からデキューイングするならば、そのアドレスとサイズ(または、ふさがれるアドレス指定可能な要素の個数)を、物理アドレスまたは仮想アドレスとしてアロケータ16に戻してもよい。いずれの場合でも、それに応じてアロケータ16は仮想アドレスを決定し、ポインタを更新することができる。
【0099】
タイミング−アロケータ16とアダプタ12の間におけるクロックの同期
受信されたフレームについてのタイムスタンプを信頼性があり比較可能なものにするためには、アダプタ12とアロケータ16でクロックを同期させることが望ましい。
【0100】
現在、クロックの位相同期は、当技術分野で通常行われるように、転送されるデータ内に符号化されるが復元可能なクロック信号を、アロケータ16から転送回路30に転送されるデータとともに送信することにより得られる。図3に示すように、このクロック信号を導出し転送回路30と要求回路28の両方で用いるように、アダプタ12は構成される。
【0101】
位相の同期をとってから、実際のクロック時間は2つのステップで同期がとられる。ステップ1では、アロケータ16にメッセージを伝送する指示をアロケータ16が各アダプタ12に伝送し、次いでアロケータ16は、そのメッセージを受信するときの全体の往復時間を決定する。ステップ2では、アロケータ16は、その時間をアロケータ16のクロック時間に適合させるように、アダプタ12に指示する。
【0102】
より詳細には、ステップ1は、ローカルのアロケータ伝送時間のログを取りながら、アロケータ16が個々のアダプタ12に指示を伝送することを含む。その指示を受信すると、アダプタ12は直ちにメッセージをアロケータ16に伝送し、アロケータ16は受信時刻のログを取る。その指示とメッセージの内容は重要ではない。さて、アロケータ16は受信時刻から伝送時刻を引き算し、往復時間を導出する。この時間の半分が、アロケータ16と関係するアダプタ12の間におけるデータ伝送の時間遅延とみなされる。もちろん、アロケータ16と様々なアダプタ12の間には、異なる時間遅延がある場合もある。
【0103】
ステップ2では、決定された時間遅延をアロケータ16の現在のローカル時刻に加えた値をローカルアダプタ時間に設定する指示が、アロケータ16からアダプタ12に伝送される。したがって、アダプタ12がこの指示を受信すると、その間にアロケータ16でのローカル時間が進んだ時刻に、そのローカル時間が設定されることになる。次いで、クロック信号のクロックサイクル内で、アロケータ16とアダプタ12のクロック時間の同期がとられる。位相またはクロックパルスも同期がとられるため、クロックは同期されたままになる。
【0104】
次いで、この回復されたクロックも、受信されたデータパケットのタイムスタンプの記録に用いられる。したがって、すべてのタイムスタンプは、クロックサイクル内に同期がとられる。
【0105】
いくつかの指示がアロケータ16とアダプタ12のいずれかとの間で待ち状態になることもあるため、それぞれの指示/要求に識別子が与えられる。現在、その識別子は、クロックと同期してシフトされ、折り返して先頭に戻る0と7の間(3ビット)のタイムスタンプである。したがって、アロケータ16は、指示を送るときにそのタイムスタンプを加え、アダプタ12は、その指示に応答するときに、その応答がどの指示に関するものかをアロケータ16が決定できるように、その応答の中にそのタイムスタンプをコピーすることになる。
【0106】
もちろん、アロケータ16に対するアダプタ12のこの同期は、任意の個数のアダプタ12について行ってもよい。アダプタ12は、すべてのアダプタ12がアロケータ16と直接通信するスター型の構成か、リング型のトポロジーか、または1列のアダプタ12の端部にアロケータ16がありアダプタ12が1つまたは複数の他のアダプタ12を介してアロケータと通信するデイジーチェーンの構成で、アロケータ16に接続してもよい。
【0107】
アロケータ16の動作
記憶領域18のそれぞれのキューについて、アロケータ16は、RIFO(Random In First Out)キューと、FIRO(First In Random Out)キューの2つのキューをもつ(図4を参照)。
【0108】
FIROキューは、すべてのアダプタ12からの、記憶領域18の関係するキューに関する待ち状態の要求を保持する。書出しポインタがFIROキューの次の空いている位置を指し示す。アダプタ12から受信された要求は、この位置で受信され与えられる。
【0109】
RIFOキューは、記憶領域のキューについてのフレームがいつ出力されるべきかに関する情報を、その順序とともに保持する。RIFOキュー内の各エントリはクロックの時点に関し、読取りポインタがRIFOキューの現在の時点を指し示す。
【0110】
要求が受信されると、そのタイムスタンプが導出され、RIFOキューの対応する位置または時点に識別子が与えられる。あるアダプタ12からの情報またはそうしたアダプタ12での処理が他のアダプタからの情報/他のアダプタでの処理より時間がかかることがあるという理由で、この位置または時点は、同じ記憶領域のキューについての他のフレームより早い可能性があるということに留意されたい。
【0111】
図4では、FIROキューの最初のフレームの伝送時刻が次のフレームより後であることがわかる。
【0112】
RIFOキューの読取りポインタはクロックサイクルごとに1回進み、読取りポインタの新しい位置に識別子が見られるならば、FIROキューの対応する位置がアドレス指定され、伝送指示が関係するアダプタ12に伝送される。次いで、FIROキューの対応するエントリが取り除かれる(または、エンドポインタがこの位置に進む)。
【0113】
もちろん、FIROキューとRIFOキューを円形のキューとして実装してもよい。
【0114】
アダプタ12とアロケータ16の間の例えばデータ伝送による任意の時間遅延や、アダプタ12での処理時間を考慮するために、読取りポインタは、同期をとったクロックにより定められる、フレームのタイムスタンプ(それもFIRO内に記憶された要求内で送信される)を与えるのに用いられる実際の時点に対し、遅れた時点に関することが好ましい。この点に関して、RIFOキュー内の正しい位置にエントリが与えられると、関連した要求のタイムスタンプはもはや必要なくなり、テーブル内で場所を取らないようにするために捨てられる。
【0115】
したがって、読取りポインタの時刻は、3,4,5,6,7,8,9,10などのいくつかの、またはそれより多くのクロックサイクルだけ、実際のクロックより遅れていることがある。そして、例えば時刻120でタイムスタンプが記録されたフレームを、FIROキューに送信し、時刻120でRIFOキューの中に入れてもよく、そこが時刻130でアドレス指定される(読取りポインタがその位置に進む)。
【0116】
すべての時刻で、記憶領域18内のキューごとに、アロケータ16は、アダプタ12からの次のフレームが記憶される次のアドレスを識別する書出しポインタと、さらなる解析や送信などのためにデキューイングされるこのキューの次に記憶されるフレームのアドレスを識別する読取りポインタとの2つのポインタをもつ。新しいフレームが記憶されるときに、書出しのアドレスが関係する転送回路30に送信され、すなわち、送信されるその物理アドレスに次の仮想アドレスが変換され、次いで転送回路30がフレームの記憶を円滑化する。同時に、アロケータ16が、フレームのサイズに対応する値だけ、関係する書出しポインタを増加させる。
【0117】
例えばプロセッサがさらに解析するフレームを1つまたは複数のキューが保持している状況では、そうしたキューのフレームの個数またはそのキューの充填レベルにより、このプロセッサがどのくらい込んでいるかが示される。これは、仮想アドレスを用いるときに、キューの書出しポインタと読取りポインタの間におけるアドレスの差により簡単に決定される。
【0118】
記憶領域18からのフレームのデキューイングを、記憶領域に接続されたものなどの任意の装置またはプロセス/プロセッサにより、円滑化してもよい。記憶領域18からフレームをデキューイングすることにより、この装置/プロセス/プロセッサは、それに対応してこのキューの読取りポインタを変化させる。
【0119】
一般に、フレームを記憶領域18に加えるとアロケータ16は書出しポインタを変化させ、フレームをデキューイングするとプロセス/プロセッサは読取りポインタを変化させる。もちろん、この情報は交換されることが望ましい。いくつかの方法やスキームがある。
【0120】
ある状況では、データパケット交換用にDMAバス上の帯域幅を残すために、このデータをあまり頻繁に交換しないことが望ましい。この状況では、アロケータ16によりミラーリングまたは同期が開始される。データパケットが記憶領域18に書かれるたびに、アロケータ16は書出しポインタを更新してもよく、それによって、読取りポインタが更新されないため、アロケータ16には、個々のキュー(のデータフレームの個数または充填レベル)が増加するように見える。
【0121】
もちろん、更新された書出しポインタを時々交換してもよいが、キューのサイズが予め定められた限界を超えるまでこれらのポインタを更新しないことが好ましい。このとき、アロケータ16は、キューの実際のサイズについての、したがって(1つまたは複数の)プロセス/プロセッサがどのくらい込んでいるかについての更新されたデータを取得するために、記憶領域18または(1つまたは複数の)プロセス/プロセッサからの読取りポインタを更新する。
【0122】
ある状況では、更新された書出しポインタを(1つまたは複数の)プロセス/プロセッサが同時に受信してもよい。このやり方では、(1つまたは複数の)プロセス/プロセッサは、追加のパケットが記憶され、解析/デキューイングの準備ができたという情報がくる前にすべてのキューを空にした場合は、欠乏状態になり得る。これは、アロケータ16で書出しポインタを更新するときに、プロセス/プロセッサまたは記憶領域18で書出しポインタを更新することにより、避けることができる。そして、プロセス/プロセッサはキュー情報を更新し、データパケットがある限り動作し続ける。
【0123】
あるいは、アロケータ16と(1つまたは複数の)プロセス/プロセッサがよりよく「通知された」状態を保つために、読取りポインタもより頻繁に更新してもよい。書出し/読取りポインタのこの同期は、バス32が込んでいないときに、または例えば最後の同期から最大遅延が経過したときに、行うことができる。
【0124】
もちろん、キューまたは記憶領域18は円形でもよく、必要があれば特定の空き領域にキューを割り当ててもよい。
【0125】
もちろん、1つのアダプタ12が同じストリームに関する多数のデータフレームを続けざまに受信する場合は、その後アロケータ16がRIFOキュー内の関連した位置で与えることになるいくつかの要求を、要求回路28が伝送する。関連するアダプタ12がRIFOキューの各エントリで識別される場合は、同じアダプタ12に関し、したがってこのアダプタ12だけに戻るRIFO内の多数の近接したエントリを、アロケータ16が識別してもよく、転送回路30が、この単純な要求に基づいて、キュー(アドレスデータ)だけでなく送信されるパケットの個数も識別する。
【0126】
アダプタ12を介した記憶領域18からのデータの伝送
もちろん、記憶領域18内の1つまたは複数のキューに記憶されたデータパケットをデキューイングし、バス32を介して伝送し、アダプタ12を介して出力してもよい。記憶領域18に記憶されるデータパケットを記憶する場合と同様に、これはDMAを介して行ってもよく、それによって、例えば記憶領域18のプロセッサから介入されることなく、アダプタ12は記憶領域18内のデータパケットを直接読み取る。
【0127】
パケットをデキューイングするスキームは、記憶領域18へのパケットの記憶について上述したものと同様である。
【0128】
記憶領域18内のいくつかのキューからのデータパケットを、同じアダプタ12を介して出力してもよい。これらは、ラウンドロビンや、優先度、または任意の他の優先順位付けなどの任意の所望のスキームを用いて決めてもよい。アダプタ12では、異なるフローや、キュー、優先度などについて任意の個数のTxポートかまたはFIFOを設けてもよく、これらからのパケットを、単一のPHYかまたは様々なPHYを介して出力してもよい。
【0129】
ある状況では、記憶領域18にデータを記憶するときと同様に、キューの読取り/書出しポインタが記憶領域18に記憶される。同じやり方で、アダプタ12は、読取り/書出しポインタをミラーリングし、データがあるように見える限りキューからデータをデキューイングし続けてもよい。ミラーリングは、上記のように、キューが詰まりすぎているかまたは空きすぎているように見えるときなどに、既定の最大時間間隔で行ってもよい。
【0130】
プロセス/プロセッサは、読取りポインタと書出しポインタを常時監視してもよく、上記のように、アダプタ12が込みすぎているので(1つまたは複数の)関係するキューについてのデータパケットを別のキューと別のアダプタ12に送信すべきかどうかということを決定してもよい。
【0131】
別の状況では、プロセッサまたはプロセスは、アダプタ12を介してどのデータパケットまたはアドレスを出力すべきかを定めてもよく、そうしたアドレスの指示をアダプタ12に送信してもよい。
【0132】
1つのやり方は、プロセスまたはプロセッサが、プロセス/プロセッサにより更新された読取り/書出しポインタの特定の組を用いて、アダプタによりデキューイングされる特定のキューにそうしたパケットをコピーし、それをアダプタ12にミラーリングすることである。
【0133】
別のやり方は、データパケットをコピーしないことに着目する。この状況では、データパケットが元のキューに維持されるが、データパケットのデキューイング用に別の組の読取り/書出しポインタを設けてもよい。実際、キューの元の読取り/書出しポインタが維持されるならば、もう1つのポインタが必要になる。その追加のポインタは、解析中にプロセス/プロセッサがキューの中のどこに来たかということを、したがって、読取りポインタと書出しポインタの間のアドレスのうちのどれをデキューイングしてよいかということを示す。この追加のポインタは、プロセッサ/プロセスにより維持され、アダプタに送信されるかまたは例えばDMAを用いてアダプタにより読み取られ、いつアドレスがデキューイングされたかを関係するアダプタがプロセッサ/プロセスまたは制御回路16に通知する。
図1
図2
図3
図4
図5
図6