(57)【特許請求の範囲】
【請求項１】
データをメモリバッファにキューイングする方法であって、
複数のパケットから、所与のパケットを選択する過程と、
前記選択されたパケットのデータトークンを受け取る過程と、
キュー手段が、バッファ管理手段に、前記データトークンの記憶用のアドレスへのポインタを要求する過程と、
前記バッファ管理手段がメモリリストにアクセスし、当該メモリリスト内にアドレスを割り当て、かつ、これら割り当てられたアドレスへのポインタを生成する過程であって、前記アクセスされるメモリリストが複数のリンクされるメモリリストを含み、前記複数のリンクされるメモリリストに追加のアドレスが割り当てられる、過程と、
前記アクセスされるメモリリストに、前記割り当てられたアドレスへの前記ポインタを書き込む過程であって、当該ポインタが、前記割り当てられたアドレスを数珠繋ぎにリンクする過程と、
前記選択されたパケットの後続のデータトークンを受け取ると、この後続のデータトークンの記憶用に追加のアドレスが割り当てられる他のメモリリストに移動し、当該他のメモリリストに前記割り当てられたアドレスを数珠繋ぎにリンクする追加のポインタであって、前記割り当てられたアドレスへのポインタを生成する過程と、
を含む、方法。
【請求項２】
請求項１に記載の方法において、前記複数のリンクされるメモリリストが、第１のメモリリスト、第２のメモリリスト、第３のメモリリストおよび第４のメモリリストを有する、方法。
【請求項３】
請求項２に記載の方法において、データトークンに割り当てられた複数のアドレスが、前記割り当てられたアドレスへのポインタにより、複数の並列処理可能な前記メモリリストにわたってリンクされる、方法。
【請求項４】
請求項３に記載の方法において、前記割り当てられた複数のアドレスが、前記割り当てられたアドレスへのポインタであって、前記バッファ管理手段により生成されるテイルポインタによってリンクされる、方法。
【請求項５】
請求項１に記載の方法において、前記キュー手段が、
前記リンクされるメモリリスト内の、前記割り当てられたアドレスに、データトークンをエンキューするエンキュー部、および
前記リンクされるメモリリスト内の、前記割り当てられたアドレスから、データトークンをデキューするデキュー部を含む、方法。
【請求項６】
請求項５に記載の方法において、前記エンキュー部が、前記バッファ管理手段に、複数のデータトークンを一度にエンキューする要求を生成し、当該複数のデータトークンのアドレスが、これらアドレスへのポインタによって、前記複数のメモリリストにわたってリンクされる、方法。
【請求項７】
請求項５に記載の方法において、前記デキュー部が、前記バッファ管理手段に、複数のデータトークンを一度にデキューする要求を生成し、当該複数のデータトークンが前記リンクされるメモリリスト内の前記割り当てられたアドレスからデキューされる際には、前記複数のデータトークンのアドレスが、これらアドレスへのポインタによって、前記複数のメモリリストにわたってリンクされている、方法。
【請求項８】
請求項１に記載の方法において、前記追加のアドレスは、前記複数のリンクされるメモリリストのうちの利用可能なメモリ位置に、動的に値の代入が行われて割り当てられる、方法。
【請求項９】
請求項８に記載の方法において、前記複数のリンクされるメモリリストに値の代入を行うことが、要求されたアドレスが全て前記利用可能なメモリ位置に割り当てられるまで、各メモリリストをとおしてラウンドロビン方式で連続的に実行される、方法。
【請求項１０】
データをメモリバッファにキューイングする装置であって、
複数のパケットから、所与のパケットを選択し、この選択されたパケットのデータトークンを受け取るセレクタ手段と、
前記データトークンの記憶用のアドレスへのポインタを要求する手段に応答する管理手段と、
前記管理手段に応答して、メモリリストにアクセスし、当該メモリリスト内にアドレスを割り当て、かつ、これら割り当てられたアドレスへのポインタを生成する割当て手段であって、前記アクセスされるメモリリストが複数のリンクされるメモリリストを含み、前記複数のリンクされるメモリリストに追加のアドレスが割り当てられる、割当て手段と、
を備え、
前記割当て手段が、前記アクセスされるメモリリストに、前記割り当てられたアドレスへの前記ポインタを書き込み、当該ポインタが、前記割り当てられたアドレスを数珠繋ぎにリンクするものであり、
前記割当て手段が、前記選択されたパケットの後続のデータトークンを受け取ると、この後続のデータトークンの記憶用に追加のアドレスが割り当てられる他のメモリリストに移動し、当該他のメモリリストに前記割り当てられたアドレスを数珠繋ぎにリンクする追加のポインタであって、前記割り当てられたアドレスへのポインタを生成する、
装置。
【請求項１１】
請求項１０に記載の装置において、前記複数のリンクされるメモリリストが、第１のメモリリスト、第２のメモリリスト、第３のメモリリストおよび第４のメモリリストを有する、装置。
【請求項１２】
請求項１１に記載の装置において、前記データトークンに割り当てられた複数のアドレスが、前記割り当てられたアドレスへのポインタにより、複数の並列処理可能な前記メモリリストにわたってリンクされる、装置。
【請求項１３】
請求項１２に記載の装置において、前記割り当てられた複数のアドレスが、前記割り当てられたアドレスへのポインタであって、前記バッファ管理手段により生成されるテイルポインタによってリンクされる、装置。
【請求項１４】
請求項１０に記載の装置において、前記キュー手段が、
前記リンクされるメモリリスト内の、前記割り当てられたアドレスに、データトークンをエンキューするエンキュー部、および
前記リンクされるメモリリスト内の、前記割り当てられたアドレスから、データトークンをデキューするデキュー部を含む、装置。
【請求項１５】
請求項１４に記載の装置において、前記エンキュー部が、前記バッファ管理手段に、複数のデータトークンを一度にエンキューする要求を生成し、当該複数のデータトークンのアドレスが、これらアドレスへのポインタによって、前記複数のメモリリストにわたってリンクされる、装置。
【請求項１６】
請求項１５に記載の装置において、前記デキュー部が、前記バッファ管理手段に、複数のデータトークンを一度にデキューする要求を生成し、当該複数のデータトークンが前記リンクされるメモリリスト内の前記割り当てられたアドレスからデキューされる際には、前記複数のデータトークンのアドレスが、これらアドレスへのポインタによって、前記複数のメモリリストにわたってリンクされている、装置。
【請求項１７】
請求項１０に記載の装置において、前記追加のアドレスは、前記複数のリンクされるメモリリストのうちの利用可能なメモリ位置に、動的に値の代入が行われて割り当てられる、装置。
【請求項１８】
請求項１７に記載の装置において、前記複数のリンクされるメモリリストが、要求されたアドレスが全て前記利用可能なメモリ位置に割り当てられるまで、各メモリリストをとおしてラウンドロビン方式で連続的に、値の代入が行われる、装置。
【請求項１９】
少なくとも１つのプロセッサと、
命令を有する少なくとも１つのコンピュータ読み取り可能な記憶装置と、を備えるシステムであって、
前記命令は、実行されると、データパケットをキューイングする方法を実施させ、当該方法は、
複数のパケットから、所与のパケットを選択する過程と、
前記選択されたパケットのデータトークンを受け取る過程と、
キュー手段が、バッファ管理手段に、前記データトークンの記憶用のアドレスへのポインタを要求する過程と、
前記バッファ管理手段がメモリリストにアクセスし、当該メモリリスト内にアドレスを割り当て、かつ、これら割り当てられたアドレスへのポインタを生成する過程であって、前記アクセスされるメモリリストが複数のリンクされるメモリリストを含み、前記複数のリンクされるメモリリストに追加のアドレスが割り当てられる、過程と、
前記アクセスされるメモリリストに、前記割り当てられたアドレスへの前記ポインタを書き込む過程であって、当該ポインタが、前記割り当てられたアドレスを数珠繋ぎにリンクする過程と、
前記選択されたパケットの後続のデータトークンを受け取ると、この後続のデータトークンの記憶用に追加のアドレスが割り当てられる他のメモリリストに移動し、当該他のメモリリストに前記割り当てられたアドレスを数珠繋ぎにリンクする追加のポインタであって、前記割り当てられたアドレスへのポインタを生成する過程と
を含む、システム。
【請求項２０】
請求項１９に記載のシステムにおいて、前記複数のリンクされるメモリリストが、第１のメモリリスト、第２のメモリリスト、第３のメモリリストおよび第４のメモリリストを有する、システム。
【請求項２１】
請求項１９に記載のシステムにおいて、前記データトークンに割り当てられた複数のアドレスが、前記割り当てられたアドレスへのポインタにより、複数の並列処理可能な前記メモリリストにわたってリンクされる、システム。
【請求項２２】
請求項２０に記載のシステムにおいて、前記割り当てられた複数のアドレスが、前記割り当てられたアドレスへのポインタであって、前記バッファ管理手段により生成されるテイルポインタによってリンクされる、システム。
【請求項２３】
請求項１９に記載のシステムにおいて、さらに、
前記リンクされるメモリリスト内の、前記割り当てられたアドレスに、データトークンをエンキューするエンキュー部と、
前記リンクされるメモリリスト内の、前記割り当てられたアドレスから、データトークンをデキューするデキュー部と、
を備える、システム。
【請求項２４】
請求項２３に記載のシステムにおいて、前記エンキュー部が、前記バッファ管理手段に、複数のデータトークンを一度にエンキューする要求を生成し、当該複数のデータトークンのアドレスが、これらアドレスへのポインタによって、前記複数のメモリリストにわたってリンクされる、システム。
【請求項２５】
請求項２３に記載のシステムにおいて、前記デキュー部が、前記バッファ管理手段に、複数のデータトークンを一度にデキューする要求を生成し、当該複数のデータトークンが前記リンクされるメモリリスト内の前記割り当てられたアドレスからデキューされる際には、前記複数のデータトークンのアドレスが、これらアドレスへのポインタによって、前記複数のメモリリストにわたってリンクされている、システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、ネットワークデータ通信の分野に関する。本発明は、詳細に述べると、選択されたキューからのデータのトークン（データトークン）のデキュー動作（キューにデータトークンを１つ入れる動作）およびエンキュー動作（キューからデータトークンを１つ取り出す動作）を実行するうえで、複数のメモリリストをリンク（連結）することにより、スイッチングネットワークのデータトークン送信のスループットを向上させるシステムおよび方法に関する。
【背景技術】
【０００２】
データスイッチングネットワークでは、データトラフィックが様々なフローに分類されて、バッファ内の多数のキューに蓄積される。ルータやその他のネットワーク構成要素においては、そのように蓄積された多数のキューが、共通の送出通信リンクすなわち送出側のポート（例えば、物理的な通信リンク、疑似回線など）を利用するのに競合するのが通例である。そのため、バッファリングされたキューが、送出側のポートでスケジューリングされる必要がある。つまり、ルータでは、送出側において、送信に先立ってトークン送信スケジューリング装置による処理を行い、どの待機パケット（キューイングされたパケットのうちのいずれのパケット）を次に送信するのかを選択しなければならない。
【０００３】
ルーティング時には、様々なソースポート（送信元ポート）からのデータトークンを、ソースポート、宛先ポートおよびトラフィック種別に基づいて分類するのが一般的である。次に、このようにして分類されたデータトークンを、バッファ内のそれぞれ異なるキューに振り分ける。すなわち、ルータ網（ルータのネットワーク）を通過するデータトークンおよび／またはルータ網により処理されるデータトークンは、少なくとも一時的にバッファメモリ内に保持されることになる。典型的には、リンクドリスト（リンクトリスト、連結リストとも称される）キューとして知られるメモリデータ構造を、バッファメモリと関連付けて保持する。リンクドリストキューには、上記バッファメモリ内における、各データトークンを記憶した各メモリ位置を指すポインタのリストが含まれる。従来のキュー構造では、バッファメモリ内に蓄積されている各データトークンに関連付けられた各ポインタを、順番どおりの連続するポインタの単一リストとして記憶するのが通例である。新たなデータトークンがキューに入るたびに、そのキューの状態が更新され、関連付けられたリンクリストポインタも更新される。キューからデータトークンをデキューする際には、スケジューラ（スケジューリング手段）が、出力ポートが利用可能であるか否かに基づいて、スケジューリングアルゴリズムを選択する。このようなキューの更新およびリンクドリストポインタの更新は、キューからデータトークンを取り出す際にも行われる。
【０００４】
マルチキャストトラフィックのデータパケットの処理時には（先述と同じくデータトークンの分類をソースポート、宛先ポートおよびトラフィック種別に基づいて実行するが）、レイテンシ時間がさらに増加する。具体的に述べると、まず、与えられたデータパケットについて、そのデータトークンを各種キューに振り分ける。各データトークンがそれぞれのキューに入り次第、当該キューの情報が更新される。次に、スケジューラが、ポートが利用可能であるか否かに基づいてスケジューリングアルゴリズムを選択し、バッファメモリ内の対応するキューから、データトークンをデキューする。しかし、送信したいどのデータトークンについても、ポートが利用可能になるまでの待機過程を繰り返す必要がある。また、データトークンのコピーを作成（複製）し、当該コピーを他のポートにも送信しなければならない場合、アルゴリズムによるクオリティオブサービス（ＱｏＳ）のチェックが必要になる。さらに、優先的な取扱いを保証しなければならないような場合、例えば高優先度トラフィック、制御用トラフィック、レイテンシに敏感な音声／映像用トラフィック等の場合、データトークンの送信時に、さらなるチェックが必要になることもある。これらのチェックは、送信時のレイテンシ時間をなおいっそう増加させる。
【０００５】
バッファ管理手段に関して言えば、データトークンのエンキュー処理動作およびデキュー処理動作時のパイプラインフローにより、その性能が制限される。また、バッファ管理手段は、バッファに空き領域がない場合、次のデータトークンをエンキューすることができないため、データトークンのデキュー動作まで待機しなければならない。ここでのレイテンシ時間を短縮する技術として、パラレルバッファを組み込むことにより、より多くのデータトークンをエンキュー可能にすることが考えられる。しかし、パラレルバッファを組み込んだ場合、必要なリソースや消費電力が増加する。さらには、ルータの何らかの動作でバッファメモリを処理するたびに、キューにアクセスすることやキューのアドレスを求めることが必要となるため、所望のデータトークンのポインタを取得することになる。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ルータやその他のパケットスイッチの処理速度が高速化の一途をたどる（例えば、１０Ｇｐｓ以上）につれて、入出力帯域幅、さらには、キュー保持用メモリのアクセスレイテンシの重要性が、ますます高まっている。つまり、データトークンへのポインタが要求されるたびキューにアクセスする従来の様式では、キュー用メモリが大きなボトルネックとなる。
【課題を解決するための手段】
【０００７】
以上に鑑みて、エンキュー動作及びデキュー動作の実行可能回数に限りがある現在の装置で、アドレスのリンクリスト（アドレスの連結されたリスト）を用いることによって上記回数を増加させることのできる、バッファメモリ管理技術を提供することは有利であろう。具体的に述べると、該バッファメモリ管理技術は、リンクリストに基づいた仮想キュー手法により、バッファへの／バッファからのデータトークンのエンキュー動作及びデキュー動作を多重で実行することができる。
【０００８】
本発明の実施形態では、仮想キューのリンクリストを、複数のリスト型サブキューによって形成する仕組み（メカニズム）を提供する。このようにサブキューのリストを複数実装することにより、多数のデータトークンの送信を、パラレルに（並列処理可能に）スケジューリングすることが可能になるため、ルータのスイッチング部のスループットを大幅に増加させることができる。
【０００９】
本発明の一実施形態は、データをメモリバッファにキューイングする方法に関する。この方法は、複数のキューから、所与のキューを選択する過程と、選択されたキューからデータトークンを受け取る過程と、を含む。キュー手段（キューモジュール）が、バッファ管理手段（バッファマネージャ）に、複数のアドレスおよび複数のポインタを要求する。前記複数のポインタは、前記バッファ管理手段によって前記データトークンの記憶用に割り当てられた複数のアドレスへのポインタである。次に、前記バッファ管理手段がメモリリストにアクセスし、当該メモリリスト内に、アドレスおよび割り当てられたアドレスへのポインタを生成する。アクセスされるメモリリストが、追加のアドレス割当て用の複数のリンクされるメモリリストを含む。さらに、前記アクセスされるメモリリストに、前記割り当てられたアドレスへの前記ポインタを書き込む。当該ポインタが、前記割り当てられたアドレスを数珠繋ぎにリンクする（鎖状に連結する）。前記方法は、さらに、前記選択されたキューから後続のデータトークンを受け取ると、追加のアドレス割当てのために他のメモリリストに移動し（移り（migrate））、前記割り当てられたアドレスを数珠繋ぎにリンクする追加のポインタを前記他のメモリリストに生成する過程、を含む。
【００１０】
本発明の他の実施形態は、データをメモリバッファにキューイングする装置に関する。この装置は、複数のキューから、所与のキューを選択し、選択されたキューからデータトークンを受け取るセレクタ手段、を備える。前記装置は、さらに、複数のアドレスおよび複数のポインタを要求する手段に応答する管理手段、を備える。前記複数のポインタは、前記管理手段によって前記データトークンの記憶用に割り当てられたアドレスへのポインタである。前記装置は、さらに、前記管理手段に応答して、メモリリストにアクセスし、当該メモリリスト内に、アドレスおよび前記割り当てられたアドレスへのポインタを生成する割当て手段、を備える。前記アクセスされるメモリリストは、追加のアドレス割当て用の複数のリンクされるメモリリストを含む。前記割当て手段は、前記アクセスされるメモリリストに、前記割り当てられたアドレスへの前記ポインタを書き込む。当該ポインタは、前記割り当てられたアドレスを数珠繋ぎにリンクするものである。次に、前記割当て手段は、前記選択されたキューから後続のデータトークンを受け取ると、追加のアドレス割当てのために他のメモリリストに移動し（移り（migrate））、前記割り当てられたアドレスを数珠繋ぎにリンクする追加のポインタを前記他のメモリリスト内に生成する。
【００１１】
本発明のさらなる他の実施形態において、前記キュー手段が、前記リンクされるメモリリスト内の、前記割り当てられたアドレスに、データトークンをエンキューするエンキュー部、および前記リンクされるメモリリスト内の、前記割り当てられたアドレスから、データトークンをデキューするデキュー部を含む。前記エンキュー部が、前記管理手段に、複数のデータトークンを一度にエンキューする要求を生成するものであってもよく、当該複数のデータトークンのアドレスが、ポインタによって、前記複数のメモリリストにわたってリンクされる。前記デキュー部が、前記管理手段に、複数のデータトークンを一度にデキューする要求を生成するものであってもよく、当該複数のデータトークンのアドレスは、ポインタによって、前記複数のメモリリストにわたってリンクされる。
【００１２】
上記の説明は、本発明を簡単に、一般化して、詳細を省略して説明したものに過ぎない。したがって、当業者であれば、上記の説明が例示に過ぎず、本発明を限定するものでないことを容易に理解するであろう。本発明は特許請求の範囲により定められるが、本発明のさらなる態様、構成および利点については、後述の詳細な説明（しかし、本発明を限定しない説明）から明らかになる。
【００１３】
具体的に述べると、本発明の各実施形態は、添付の図面を参照しながら行う、後述の詳細な説明から明らかになる。図面において、同一の符号は同一の構成又は構成要素を指す。
【図面の簡単な説明】
【００１４】
【図１】本発明の一実施形態における、一例としてのルータに設けられたバッファマネージャモジュール（バッファ管理手段）の構成を示すブロック図である。
【図２】本発明の一実施形態における、一例としてのルータに設けられたバッファ管理手段の、キューテイルポインタ部およびキューヘッドポインタ部の構成を示すブロック図である。
【図３】本発明の一実施形態における、仮想キューのリンクリスト構成の一例を示す図である。
【図４】本発明の一実施形態における、キューのリンクリスト構成の一例を示す図である。
【図５Ａ】本発明の一実施形態における、リンクリスト構造でのヘッドポインタおよびテイルポインタの一構成例を示すブロック図である。
【図５Ｂ】本発明の一実施形態における、リンクリスト構造でのヘッドポインタおよびテイルポインタの一構成例を示す他のブロック図である。
【図６Ａ】本発明の一実施形態における、複数のメモリリスト構造にわたってデータトークンが互いにリンクされている様子を示すブロック図である。
【図６Ｂ】本発明の一実施形態における、複数のメモリリスト構造にわたってデータトークンが互いにリンクされている様子を示すブロック図である。
【図７】本発明の一実施形態における、バッファ管理手段の、リンクリスト構造を用いた動作の一例を示すブローチャートである。
【図８】本発明の一実施形態における、一例としてのルータに設けられた例示的なバッファ管理手段の、キューテイルポインタ部およびキューヘッドポインタ部の構成を示すブロック図である。
【図９】本発明における、一例としてのルータに設けられたバッファマネージャモジュール（バッファ管理手段）の構成を示すブロック図である。
【発明を実施するための形態】
【００１５】
以下では、本発明の好ましい実施形態について詳細に説明する。図面には、そのような好ましい実施形態が幾つか例示されている。以下では、本発明を好ましい実施形態を参照しながら説明するが、本発明はこれらの実施形態に限定されない。むしろ、本発明は、それらの実施形態の変形例、変更および等価物を含んでおり、これらは添付の特許請求の範囲により定まる本発明の精神及び範囲に包含される。また、本発明の実施形態についての以下の詳細な説明では、本発明を徹底的に理解できるように多数の具体例を記載しているが、当業者であれば、そのような具体例を用いずとも本発明を実施できることを理解するであろう。また、周知の方法、周知の手順、周知の構成要素、周知の回路等については、本発明の実施形態の構成が不必要に不明瞭にならない範囲で、詳細な説明を省いている。本発明の実施形態を示す図面は、一部概略的に描かれており、必ずしも縮尺どおりではない。具体的に述べると、図中の寸法は、分かり易いように一部誇張して描いている場合がある。同様に、各図は、説明を分かり易くするために実質同じ向きで描かれているが、大抵の場合、これに大した意味はない。一般的に、本発明はどの向きでも動作可能である。
【００１６】
なお、前述した表現およびその他の同様の表現には、適切な物理的数量（物理量）がそれぞれ付随する点、さらに、これらの表現が当該物理的数量を表すためのその都度適した表現である点に留意されたい。以下の説明からも分かるように、特記しない限り、「処理」、「アクセス」、「実行」、「記憶」、「蓄積」、「表示（レンダリング）」等の表現を用いた説明は、本発明をとおして、コンピュータシステムまたはその他の同様の電子的コンピューティング装置による、そのシステムまたは装置のレジスタ内、メモリ内、あるいは、コンピュータ読取り可能な媒体内での、物理的（電子的）数量の形態で表される所与のデータを操作して、同じシステムもしくは装置のメモリ内、レジスタ内、その他の同様な情報記憶部内、あるいは、伝送系統内またはクライアントデバイス内での、同じく物理的数量の形態で表される別のデータに変換する動作や処理のことを指す。同じ構成要素が複数の実施形態に登場し、かつ、それに同じ符号が付されている場合には、最初に説明する実施形態での当該構成要素が、後続の実施形態においても同一の構成であることを意味する。
【００１７】
図１に、本発明を実装可能な、データトークン処理システム１００を示す。システム１００は、プロセッサ１１０を備える。このプロセッサ１１０は、複製処理・Ｑｏｓ・エンキュー処理手段（プロセッサ）１２０、バッファ管理手段（バッファマネージャ）１３０、スケジューリング・デキュー手段１４０およびバッファメモリ（メモリバッファ）１５０を有する。プロセッサ１１０は、各種データトークン（tokens of data and other tokens of data）を受け取るためのネットワークと、スケジューリング・デキュー手段１４０によって制御される出力ポート１６０との間のインターフェースを提供する。一例として、これら複製処理・Ｑｏｓ・エンキュー処理手段１２０、バッファ管理手段１３０、スケジューリング・デキュー手段１４０およびバッファメモリ１５０を有するプロセッサ１１０は、ルータまたはスイッチの、ラインカードまたはポートカードに実装された少なくとも１つの集積回路として実現することができる。「データトークン」とは、送信すべきパケットデータのうちの代表的な部分と見なすことができるが、必ずしもこれに限定されるわけではない。例えば、データパケットは、ペイロード部分とヘッダ部分とを有する。一般的に、「データトークン」は、データパケットのうちのヘッダ部分を含むか、あるいは、ヘッダ部分または当該データパケット全体と関連付けられたメタデータつまり特徴の集合を含む。また、ヘッダ部分が６４〜１２８ビットの場合、ネットワーク要求基準にもよるが、データトークンは４０〜５０ビットであってもよい。「データトークン」は、ポインタを用いることにより、対応するデータパケットと関連付けることができる。そして、このデータパケットは、前記データトークンに連結されたポインタにより参照可能な、外部のメモリブロックに記憶され得る。
【００１８】
図１には、システムの構成要素が特定の配置構成で描かれているが、これはあくまでも例示に過ぎない点に留意されたい。詳しく言えば、既述したように、本発明は、どのような種類のパケット処理の場合にも、どのような種類のトークン処理の場合にも実現可能であり、特定のパケット処理用途に限定されない。
【００１９】
図２に、本発明の一実施形態における、バッファメモリ管理手段（バッファ管理手段）２００、ならびに当該バッファ管理手段の演算部２１０での、キュー蓄積部（キューメモリ）内のキューテイルポインタ部（キューテイルポインタ蓄積部）２４０、キューヘッドポインタ部（キューヘッドポインタ蓄積部）２５０およびフリーポインタ部（フリーポインタ蓄積部）２６０を示す。これらリンクドリストポインタ２４０〜２６０は、バッファ管理手段１３０（図１）内にあり、複製処理・Ｑｏｓ・エンキュー処理手段（プロセッサ）１２０（図１）およびスケジューリング・デキュー手段１４０（図１）の制御下で保持され得る。全てのキューが、キューテイルポインタ（キューのテイルポインタ）２４０とキューヘッドポインタ（キューのヘッドポインタ）２５０とを有する。キューテイルポインタ２４０は書込み動作の位置を指定し、キューヘッドポインタ２５０は読出し動作の位置を指定する。具体的に述べると、読出し動作実行時のキューヘッドポインタ２５０は、次の読出し動作に移行する都度、キューに沿ってシフトする。同じく、キューテイルポインタ２４０は、次の書込み動作に移行する都度、キューに沿ってシフトする。つまり、最後のキューテイルポインタ２４０が、１つのサイクル（１つの書込み／読出しサイクル）内における最後の書込み動作を特定し、最後のキューヘッドポインタ２５０が、１つのサイクル（１つの書込み／読出しサイクル）内における最後の読出し動作を特定する。
【００２０】
図２に示すように、キューテイルポインタを要求する要求２２０により、特定のキューにアクセスする際には、新しいキューヘッドポインタ２５０および新しいキューテイルポインタ２４０が読み出される。そして、このキューに対してデータトークンの受け取りが行われる。そのデータトークンの受取りがなされた後は、ネクストヘッドポインタ（次のヘッドポインタ）の情報に対して、読出し及び処理のためのアクセスが可能となる。
【００２１】
図３に、選択されたＱ０に対して用いる、パラレルな（並列処理可能な）リンクリスト構成を示す。これらのリンクリストは、データトークンを受け取った順番に従ってキューイングする。最初に要求されるポインタは、キューヘッドポインタである場合もあれば、キューテイルポインタである場合もある。キューＱ０は、４つのリンクドリストＱ００〜Ｑ０３に分割される。つまり、１つのＱ０は、４つのメモリ領域（記憶位置）Ｑ００〜Ｑ０３に分割される。図３に示すように、１つのメモリ領域は、Ｑ’０００〜Ｑ’００３のリストからなる。したがって、リンクリストＱ００〜Ｑ０３のうちの１つのリストは、さらに、Ｑ００〜Ｑ０３の４つのサブリンクリストに細分される。これにより、Ｑ０についての１つの読出しサイクル内に、例えば４つのメモリ領域Ｑ００〜Ｑ０３のそれぞれに対して読出しを実行することが可能となる。すなわち、各Ｑ００〜Ｑ０３の読出し動作時に、１つの読出しサイクルをＮとすると、Ｎ／４を充てることになる。１つのＱ０に追加のＱ００〜Ｑ０３を互いに連結する構成により、Ｑ０の１つのクロックサイクル内に、追加のリンクリストを連結しない構成で通常受け取ることができるよりも多くのデータトークンセットを受け取ることができる。これに対し、追加のリンクリストを連結しない構成で同じ数のデータトークンセットを受け取るには、最大で４つのサイクルにわたって読出しを行わなければならない。
【００２２】
図４に、１つのＱ０についての読出しサイクルを示す。この読出しサイクルＮの１／４つまりＮ／４が、各Ｑ００、Ｑ０１、Ｑ１２…の読出しに充てられている。第１のクロックサイクル内には、Ｑ００、Ｑ０１、Ｑ１２およびＱ００が含まれる。次のクロックサイクルでは、Ｎ／４だけシフトさせて、Ｑ０１、Ｑ１２、Ｑ００およびＱ０１で開始する。後続のクロックサイクルでは、Ｑ１２…に、それぞれＮ／４だけシフトさせる。したがって、後続の読出しサイクルも書込みサイクルも、それぞれＮ／４時間だけシフトさせて実行する。つまり、１つのＱ０についてのクロック期間内において、最大で約４回のＮ／４レジスタシフトを行うので、レジスタシフト間の時間距離（period distance）を短縮することができる。
【００２３】
図５Ａを参照しながら、キューが選択された後に読出し要求が実行され、データトークン５０５をデキューすることが要求されている場合を考える。スケジューラ（スケジューリング手段）が、その読出し要求に応答して、前記選択されたキューの中から、一番先頭のデータトークン５０５をポップする。この要求されるデータトークン５０５は、バッファ管理手段により、複数のメモリバンクからなるメモリバンクセットのうちの、第１の利用可能なメモリ領域に記憶されている。この例では、メモリバンク０が、その要求されるデータトークン５０５の割当てアドレスとして指定されている。ヘッドポインタ５２０が、前記バッファ管理手段のリンクリスト型管理アプリケーションにより、要求されたデータトークン５０５の先頭を指すポインタとして選択される。このメモリ位置は、前記バッファ管理手段により、Ｑ０００とラベル付けされている。また、前記バッファ管理手段の内部クロックアプリケーションにより、要求されているデータトークン５０５について、４つのメモリ位置からなる組が割り当てられている。第１のデータトークン５０５を受け取った後に、第１のクロックサイクルＱ０の開始点を確認してもよい。この開始点は、最初のヘッドポインタ５１０が指す位置であると共に、最初のデータトークン５０５を要求する要求の読出し及び処理後に、再度認識される位置でもある。
【００２４】
メモリ位置Ｑ００Ｎのセットのそれぞれが、最大で４つのメモリ領域に割り当てられる。これらメモリ領域は、前記選択されたキューから受け取るデータトークンのためのものである。まず、メモリ位置Ｑ０００には、テイルポインタ５１５によって次のメモリ位置がリンクされている。ここで、前記バッファ管理手段が、次の読出し要求を送信して、前記選択されたキューからの第２のデータトークンを受け取る場合を考える。具体的に述べると、この第２のデータトークンは、メモリバンク１内の、利用可能なメモリ位置Ｑ００１に動的に割り当てられている。前記バッファ管理手段から受け取るネクストポインタ（次ポインタ）５１５が、そのメモリ位置Ｑ００１を指す、次のヘッドポインタ（数珠繋ぎにおけるリンク先を指すポインタ）となる。このようなデイジーチェーン連結により、２つのデータトークンのデキュー動作は、複数のメモリバンクをまたいだ２段階処理の形態で実行される。開始時の５１５および５５０における２つのデータトークンが、最初のデータトークンＱ０００５１５およびその次のデータトークンＱ００１５５０であるとする。これらデータトークンは、前記選択されたキューから要求されたものである。これらデータトークンＱ０００５１５，Ｑ００１５５０は、前述したような２段階処理でデキューされる。具体的に述べると、Ｑ０のヘッドポインタ５１０が最初に読み出されることで、メモリ位置Ｑ０００からのデータトークンが処理される。Ｑ０００の処理後、前記バッファ管理手段により、次ポインタであるテイルポインタ５１５の読出しおよび特定が可能となる。すなわち、Ｑ０の要求が実行されると、Ｑ０００が読み出され、このＱ０００および当該Ｑ０００に対応する（Ｑ０００が指す）データの受け取りが行われ、さらに、次のＱ００１への経路が特定される。このＱ００１から、Ｑ００２への経路に用いる次ポインタであるテイルポインタ５５０が特定され、さらに、その後に続く次ポインタ５６５が特定される。なお、Ｑ０の要求が発生した際に、このＱ０に関するオブジェクト又はデータのセットの送信先は既に判明している。また、図５Ａには、その他のデータトークンセット（データトークンのセット）５２５，５７０のリンク経路も、同様にデイジーチェーン連結されている様子が示されている。具体的に述べると、割り当てられたメモリ位置Ｑ０３０はＱ０３１にリンクされており、そのテイルポインタ５３５が、メモリバンク２内のアドレスＱ０３２５６０を指している。５７０に対するメモリリスト割当てのアドレスＱ０２０は、そのテイルポインタによってＱ０２１５４０に連結されている。図５Ａには、さらに、後続のサイクルにおいて追加でメモリリスト内に割り当てられるＱ０１Ｎ５４５も示されている。
【００２５】
前記バッファ管理手段からの読出し要求の送信が連続する際に、４つの互いにリンクされたメモリ位置からなるタプル又は組が形成される。具体的に述べると、前記バッファ管理手段は、４つの互いにリンクされたメモリ位置からなる第１の組が終わると、同じく４つの互いにリンクされたメモリ位置からなる次の組を開始するといった、４つの互いにリンクされたメモリ位置からなるタプル又は組を形成する過程を、前記選択されたキューから全てのデータトークンがポップされるまで続ける。データトークンの数が奇数であるか、または、４つの互いにリンクされたメモリ位置からなる最後の組を満たすのに不十分な数のデータトークンしか残っていないような場合、その最後のタプル又は組内に、空のメモリ位置が存在することになる。
【００２６】
第２のメモリ位置Ｑ００１には、テイルポインタ５５０によって第３のメモリ位置が連結されている。具体的に述べると、テイルポインタ５５０が、第３のメモリ位置Ｑ００２を指すヘッドポインタとなる。メモリバンク２内の、この第３のメモリ位置は、Ｑ００２と称される。各メモリ位置は、複数のメモリバンクをとおして、ラウンドロビン方式によって、又は周回方式の移動により、動的に指定および割当てが行われる。このラウンドロビン的な過程は、４つのメモリ位置がヘッドポインタ及びテイルポインタによって互いにリンクされてなる、全ての組の形成が終わるまで続けられる。このようにして形成される周回ループにより、所与の時間のあいだに前記選択されたキューから送出可能なデータ量、つまり、所与のネットワークスイッチングアルゴリズムにより所与のキューからデータをデキューすることのできる頻度が決まる。例えば図５Ａには、Ｑ０００５１５⇒Ｑ００１５５０⇒Ｑ００２５６５の周回構成が、複数のメモリバンクであるリスト１およびリスト２をリンクしている様子が示されている。具体的に述べると、全てのバンクリスト５１０，５３０，５５５がデータトークンＱ０００〜Ｑ０３Ｎを含み、これらデータトークンＱ０００〜Ｑ０３Ｎは、どのデータトークンも一連のＱ０に関連付けられるように、経路内で数珠繋ぎにリンクされている。
【００２７】
図５Ｂは、キューテイルポインタ５８５と、Ｑ００〜Ｑ０３のキューテイルポインタからなる関連サブブロック５９０を示すブロック図である。図５Ｂには、さらに、キューヘッドポインタ５８６と、Ｑ００〜Ｑ０３のキューヘッドポインタからなる関連サブブロック５９５が示されている。このようにキューテイルポインタが蓄積されてなるサブブロック５９０と、キューヘッドポインタが蓄積されてなるサブブロック５９５とのポインタ対のそれぞれは、図５Ａのバンク１およびバンク２で示されたパラレルの（並列処理可能な）リンクリストで数珠繋ぎにリンクされている。
【００２８】
図６Ａ及び図６Ｂは、４つのパラレルな（並列処理可能な）リンクリストで構成された、キュー１００についてのパラレルリンクリスト構成の一例を示すブロック図である。なお、図６Ａの例示的な実施形態における動的なリンクリストが、パラレルの（並列処理可能な）リンクリストを１つ以上追加又は削除するように変更されても、本発明の実施形態の根本的思想は変わらない点に留意されたい。
【００２９】
図６Ａは、４つのパラレルな（並列処理可能な）リンクリスト：Ｑ１００−０リンクリスト（第１のパラレルなリンクドリスト６０５）；Ｑ１００−１リンクリスト（第２のパラレルなリンクドリスト６１０）；Ｑ１００−２リンクリスト（第３のパラレルなリンクドリスト６１５）；およびＱ１００−３リンクリスト（第４のパラレルなリンクドリスト６２０）；で構成された、１つのキュー１００についてのパラレルリンクリスト構成の一例を示すブロック図６００である。サブリストブロック間を連結する、外部の仮想的なカップリング６２５，６３０が、それぞれ、リンクドリストＱ１００−０１⇒Ｑ１００−１１⇒Ｑ１００−２１⇒Ｑ１００−３１を経てＱ１００−０２に戻るループを構成する第１組のカップリングと、リンクドリストＱ１００−０２⇒Ｑ１００−１２⇒Ｑ１００−２２⇒Ｑ１００−３２を経てＱ１００−０３に戻るループを構成する第２組のカップリングとが設けられていることを表している。各組のカップリングには、４つのデータトークンからなる１つのデータトークンセットについて、これら４つのデータトークンを数珠繋ぎにリンクするテイルポインタおよびヘッドポインタに加えて、所与のデータトークンセットにおける最後のデータトークンのテイルポインタと次のデータトークンセットにおけるヘッドポインタとの両方の役割を果たす、末尾カップリング６２５，６３０も含まれる。Ｑ１００−０１⇒Ｑ１００−０２⇒Ｑ１００−０３間の内部カップリングは、順番どおりの各データトークンセットに対応した、個々のパラレルリストを表している。つまり、データトークンセット１の最後のテイルポインタは、データトークンセット２における次のトークンに接続され、セット１の最後のテイルポインタは、データトークンセット２の最初のヘッドポイントとしての役割を果たす。図６Ａの例では、リンクドリストＱ１００−０１⇒Ｑ１００−１１⇒Ｑ１００−２１⇒Ｑ１００−３１による１つの完全なデータトークンセット１と、リンクドリストＱ１００−０２⇒Ｑ１００−１２⇒Ｑ１００−２２⇒Ｑ１００−３２による１つの完全なデータトークンセット２との２組が設けられているので、テイルポインタ６２５，６３０により、データトークンセット２におけるヘッドポインタとデータトークンセット３におけるヘッドポインタとの、２つのヘッドポインタが生成されることになる。
【００３０】
図６Ａには、さらに、４つのデータトークンからなる各データトークンセットを、メモリリストに割り当てて埋めていくエンキュー動作、およびデータトークンセットを複数の割り当てられたメモリ位置からデキューするデキュー動作を行う、リンクリストのラウンドロビン的な又は周回的な過程の概要が示されている。図６Ａでは、サブリスト６０５，６１０，６１５，６２０間の、４つのデータトークンからなる第１のデータトークンセットにおける連結の様子が、「１−１−１−１」で表されている。前記バッファ管理手段は、内部カウンタ（計数部）アプリケーションを用いて、４つのデータトークンからなる各データトークンセットを追跡する。バッファメモリには、全てのカウンタ値を、対応するヘッドポインタおよびテイルポインタと共に記憶する仮想テーブルが生成される。また、４つの各サブリスト６０５，６１０，６１５，６２０内のデータトークンには、さらに、追加のデータセットに関連付けられた追加のポインタが設けられてもよい。このような追加のポインタにより、外部にデータを記憶することが可能になる。４つのデータトークンからなる最初のデータトークンセットが終わると、前記バッファ管理手段は、内部カウンタ（計数部）をインクリメントして、次のデータトークンセットを「２−２−２−２」と指定する。この過程は、前記選択されたキューから全てのデータトークンがエンキュー又はデキューされるまで繰り返される。具体的に述べると、前記バッファ管理手段は、内部カウンタ（計数部）アプリケーションを用いることにより、それぞれ４つのデータトークンからなる複数のデータトークンセットをＦＩＦＯ型の順序で並べて、図６Ａの例に示すように各データトークンセットを１⇒２⇒３の番号順で連結する。
【００３１】
図６Ｂは、特定の宛先（ポート４；トラフィッククラス４）（図示せず）用に生成された、所与のキュー１００についてのキューリストの一例を示すブロック図である。図６Ｂには、パラレルの（並列処理可能な）サブリスト６３５，６４０，６４５，６５０が示されている。例えば、メモリサブリスト６３５で、Ｑ１００のキューテイルポインタ記憶部がＱ１００−０であるとする。このキューテイルポインタ記憶部は、カレントポインタ（現ポインタ）１０００を記憶する。さらに、メモリからフリーポインタ１１００が読み出されて、そのキュー１００−０のキューテイル記憶部に書き込まれる。つまり、Ｑ１００−０についてのキューテイル記憶部は、カレントポインタ１０００およびネクストポインタ（リスト内の次ポインタ）１１００を記憶する。後に示す表１．１に、各「Ｑｔａｉｌ  Ｒｅｑ（キューテイル要求）」を、そのカレントポインタ１０００およびネクストポインタ１１００と共に列挙する。これらの各キューテイル要求、カレントポインタおよびネクストポインタにより、内部のパラレルな（並列処理可能な）リンクリストが構築される。Ｑ１００−０内のメモリ割当ては、利用可能であるか否かに基づいて、ランダムに且つ動的に選択される。つまり、メモリリスト内の順序（割当て順序）は、メモリ位置が利用可能であるか否かによって変化する。後に示す表１．２に、動的にリストを生成する様子を示す。具体的に述べると、このエンキュー過程において、前記バッファ管理手段は、４つのデータトークンからなる第１のデータトークンセットに対してカレントポインタ１０００を割り当て、その次に、４つのデータトークンからなる次のデータトークンセットに対してネクストポインタ１１００を割り当てる。図６Ｂには、内部カウンタ（計数部）が示されており、カレントポインタ１０００のカウンタは０である。第１のデータトークンセットにおける次のデータトークンへのネクストポインタ（数珠繋ぎにおけるリンク先を指すポインタ）は、１０００−０⇒２０００−１を表すテイルポインタによって連結されている。このとき、前記カウンタは「１」に更新されて、サブリストＱ１００−１のカレントポインタは「２０００」である。サブリストＱ１００−２では、カレントポインタは３０００であり、前記カウンタは「２」に設定される。サブリストＱ１００−３では、カレントポインタは４０００であり、前記カウンタは「３」に設定される。前記バッファ管理手段が各リストを移動して内部カウンタを更新するたびに、各サブリスト６３５〜６５０にカレントポインタが割り当てられる。このようにして、前記バッファ管理手段は、４つのデータトークンからなるデータトークンセットごとに、ヘッドポインタおよびテイルポインタのセットを生成していく。前記バッファ管理手段は、全てのサブリストを移動し終えると、符号６５５，６６０を介して再び戻り、フリーポインタを次のデータトークンセットのカレントポインタに設定する。このような周回的またはラウンドロビン的なアプローチを用いることにより、４つのデータトークンからなる各データトークンセットを、前のデータトークンセットにおける最後のテイルポインタが次のデータトークンセットにおける後続ヘ���ドポインタになるように全てのサブリストを使用して記憶することができる。したがって、最初のＱ１００−０リンクリスト６３５でのカウンタ値は、各データトークンセットに割り当てられるポインタのセットつまりポインタ数に対応して、０，４，８…の、各要素間の差分が４である整数集合となる。
【００３２】
【表１】
0006535253.tif 000002
【００３３】
図７は、図２のバッファ管理手段の動作によって実行される処理の一例を示すフローチャートである。図７のフローチャートのステップ（過程）は、キュー１００に関係した連続的なパケットトラフィックを表している。ステップ７０５では、データの宛先ポートおよびトラフィッククラスに基づいてキューが選択される。ステップ７１０では、エンキュー部１２０（図１）が、バッファ管理手段１３０（図１）に、前記データをバッファメモリ１５０（図１）に記憶するためのポインタを要求する。以下では、図６Ａ及び図６Ｂのように特定されたキュー１００を例に挙げて説明する。まず、前記エンキュー部が、キュー１００のポインタ位置を要求する。ステップ７１５では、前記バッファ管理手段が、前記特定されるキュー１００のキューテイルポインタ記憶部を確認し、カレントポインタをこの位置に設定する。さらに、前記バッファ管理手段は、フリーポインタ記憶部からフリーポインタを１つポップして、これを前記キューテイルポインタ記憶部に書き込み、このフリーポインタを前記エンキュー部に渡すネクストポインタとして特定する。
【００３４】
ステップ７２０では、前記エンキュー部が、前記カレントポインタを用いてデータトークンの書込みを行い、かつ、前記バッファメモリ内の次のメモリ位置を認識する。具体的には、前記エンキュー部は、既述の表１．１に示すようにそのメモリ位置１０００を用いてデータトークンの書込みを行い、かつ、メモリ位置１１００をネクストポインタの位置として認識する。さらに、前記エンキュー部は、次のキューテイル要求１００−１の際に、メモリ位置２０００のカレントポインタを使用し、かつ、ネクストポインタがメモリ位置２１００であることを認識する。後続のキューテイル要求、カレントポインタ位置およびネクストポインタ位置については、前記表１．１を参照されたい。
【００３５】
ステップ７２５では、キューのデキュー動作がスケジューリングされると、デキュー部が、前記バッファ管理手段に、そのキューのキューヘッドポインタを要求する。具体的には、例えばキュー１００のデキュー動作がスケジューリングされると、前記デキュー部が、前記バッファ管理手段に、キュー１００のヘッドポインタ１０００を送信するように要求する。ステップ７３０では、後述の表１．２に示すように、前記バッファ管理手段が、要求されたキューについて、ヘッドポインタ値＝１０００を割り当てる。
【００３６】
ステップ７３５では、前記デキュー部が、前記バッファメモリからそのパケットおよびネクストポインタを読み出した後、このネクストポインタをヘッドポインタ更新情報として前記バッファ管理手段に送信する。具体的に述べると、前記デキュー部が、前記バッファ内の位置１０００から読出しを行い、データトークンおよびネクストポインタ１１００を受け取る。そして、前記デキュー部は、この１１００を、キュー１００のヘッドポインタ更新要求として送信する。前記デキュー部は、このようにしてフリーポインタとなったポインタ１０００を、前記バッファ管理手段に送信する（デキュー動作の詳細については、以下の表１．２を参照されたい）。
【００３７】
【表２】
0006535253.tif 000003
【００３８】
キュー１００についてのスケジューリングされたデキュー動作は、前記デキュー部によって実行される。具体的には、スケジューラ（スケジューリング手段）が、各Ｑ０を複数のキューにわたって等分割するかたちで、４つのクロックサイクルで実行する。前記スケジューラは、キュー１００，１０１，１０２，１０３のヘッドポインタ情報を順番に要求する。これにより、前記スケジューラの要求の順番でデキュー動作が実行される。各Ｑ０についてのスケジューリングされたデキュー動作は、前記スケジューラが、合計４つのクロックで実行する。これは、１つのＱ０につき、４つの異なるパラレルな（並列処理可能な）リンクリストによって数珠繋ぎにリンクされたデータに同時にアクセスする動作とも見なせる。つまり、１つのパラレルなリンクリストにつき、デキュー動作が、１つのサイクルあたり１６クロックの最速で行えることを意味する。スループットやレイテンシの限界によっては、これらパラレルなリンクリストからのデキュー動作の１つのサイクルあたりのクロック数を、４から８またはそれ以上に増やしてもよい。
【００３９】
図８は、図２と同様のブロック図であり、エンキュー動作およびデキュー動作の過程を示している。図８では、まず、入来トークン（１）が受け取られて、エンキュー部８２０によって分類される。次に、出力（３）が、バッファメモリ８３０からの新しいキューテイルポインタを要求する。パラレルな（並列処理可能な）リンクリスト用のキューテイル記憶情報（２）を用いて、バッファメモリ８５０への書込み動作が行われる（４）。このようにして、データトークンがバッファメモリ８５０に書き込まれる。スケジューラ８４０は、Ｑ（Ｑ０）（５）を選んで、前記パラレルなリンクリストのキューヘッドポインタ（６）を要求する。前記バッファ管理手段がこのキューヘッドポインタを読み出し、このキューヘッドポインタを更新後ヘッドポインタとして使用し、この更新後ヘッドポインタを前記パラレルなリンクリストに書き込む。
【００４０】
図９は、本発明の一実施形態における、入来トークンが受け取られてＱ０に分類される際の、バッファ管理手段が実行する過程の一例を示す図である。新しいキューテイルポインタを要求する要求（３）が、キューテイルポインタ部９２０に送信される。パラレルなリンクリストの複数のキューテイルポインタが、要求ごとに生成される。これにより、トークンが受け取られると、そのトークンの前記バッファメモリへの書込み動作を実行することができる。スケジューラの動作については、Ｑ０が選ばれると、キューヘッドポインタ手段部９３０に、キューヘッドポインタ（６）を送信するように要求する要求が生成される。これにより、パラレルな各リンクリストのキューヘッドポインタが、それらパラレルな各リンクリストから送信される。この要求されたキューヘッドポインタが読み出されると、当該ヘッドポインタに関連付けられたデータトークンが、更新後キューヘッドポインタと共に送り出される。更新前のキューヘッドポインタである前記要求されたキューヘッドポインタは、使用済みフリーポインタになる。
【００４１】
本発明の例示的な実施形態から分かるように、４つのパラレルな（並列処理可能な）サブリンクリストを数珠繋ぎにリンクすることにより、選択されたＱ０について、所与のＮ時間におけるエンキュー書込み動作およびデキュー読出し動作を短縮することができる。さらに、本発明にかかるルーティングプロセスにより、エンキュー動作やデキュー動作でのバッファスペース割当てが限られていても、スループットを有利に向上させることができる。これにより、バッファ管理手段が、このボトルネック的な動作過程におけるレイテンシ時間を減少させることができる。キューの割当てを、エンキュー動作およびデキュー動作用の複数の仮想サブキューリストに分割することにより、バッファの物理的構成を大幅に変更することなく、データトークンの取出しおよび送信の高速化を実現し、さらには、エンキュー動作およびデキュー動作の総レイテンシ時間を減少させることができる。
【００４２】
本発明にかかるルータの回路は、特定用途向け集積回路（ＡＳＩＣ）、特定用途向け標準製品（ＡＳＳＰ）、システムオンチップ（ＳｏＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）等で実現可能である。また、ルータには、当該技術分野において周知であるその他の様々な機能や構成要素が設けられてもよい。
【００４３】
本明細書では特定の好ましい実施形態及び方法を開示しているが、本発明の精神及び範囲を逸脱しない範囲で、これらの実施形態及び方法に変形や変更を施せることは、以上の説明を踏まえれば当業者にとって明白である。なお、本明細書での開示範囲は、添付の特許請求の範囲並びに関係法令の規制及び基本理念に準じてのみ制限され得ることに留意されたい。
なお、本発明は、実施の態様として以下の内容を含む。
〔態様１〕
データをメモリバッファにキューイングする方法であって、
複数のキューから、所与のキューを選択する過程と、
選択されたキューからデータトークンを受け取る過程と、
キュー手段が、バッファ管理手段に、アドレスおよびポインタを要求する過程であって、前記ポインタが、当該バッファ管理手段によって前記データトークンの記憶用に割り当てられたアドレスへのポインタである、過程と、
前記バッファ管理手段がメモリリストにアクセスし、当該メモリリスト内に、アドレスおよび割り当てられたアドレスへのポインタを生成する過程であって、前記アクセスされるメモリリストが、追加のアドレス割当て用の複数のリンクされるメモリリストを含む、過程と、
前記アクセスされるメモリリストに、前記割り当てられたアドレスへの前記ポインタを書き込む過程であって、当該ポインタが、前記割り当てられたアドレスを数珠繋ぎにリンクする過程と、
前記選択されたキューから後続のデータトークンを受け取ると、追加のアドレス割当てのために他のメモリリストに移動し、前記割り当てられたアドレスを数珠繋ぎにリンクする追加のポインタを前記他のメモリリストに生成する過程と、
を含む、方法。
〔態様２〕
態様１に記載の方法において、前記複数のリンクされるメモリリストが、並列処理可能にリンクされる、第１のメモリリスト、第２のメモリリスト、第３のメモリリストおよび第４のメモリリストを有する、方法。
〔態様３〕
態様２に記載の方法において、データトークンに割り当てられた複数のアドレスが、ポインタにより、複数の並列処理可能な前記メモリリストにわたってリンクされる、方法。
〔態様４〕
態様３に記載の方法において、前記割り当てられた複数のアドレスが、前記バッファ管理手段により生成されるテイルポインタおよびヘッドポインタによってリンクされる、方法。
〔態様５〕
態様１に記載の方法において、前記キュー手段が、
前記リンクされるメモリリスト内の、前記割り当てられたアドレスに、データトークンをエンキューするエンキュー部、および
前記リンクされるメモリリスト内の、前記割り当てられたアドレスから、データトークンをデキューするデキュー部を含む、方法。
〔態様６〕
態様５に記載の方法において、前記エンキュー部が、前記バッファ管理手段に、複数のデータトークンを一度にエンキューする要求を生成し、当該複数のデータトークンのアドレスが、ポインタによって、前記複数のメモリリストにわたってリンクされる、方法。
〔態様７〕
態様５に記載の方法において、前記デキュー部が、前記バッファ管理手段に、複数のデータトークンを一度にデキューする要求を生成し、当該複数のデータトークンのアドレスが、ポインタによって、前記複数のメモリリストにわたってリンクされる、方法。
〔態様８〕
態様１に記載の方法において、追加のアドレス割当てのための前記複数のリンクされるメモリリストには、アドレスの利用可能性に従って動的に値の代入が行われる、方法。
〔態様９〕
態様８に記載の方法において、前記複数のリンクされるメモリリストに値の代入を行うことが、要求されたアドレスが全て割り当てられるまで、各メモリリストをとおしてラウンドロビン方式で連続的に実行される、方法。
〔態様１０〕
データをメモリバッファにキューイングする装置であって、
複数のキューから、所与のキューを選択し、選択されたキューからデータトークンを受け取るセレクタ手段と、
アドレスおよびポインタを要求する手段に応答する管理手段であって、前記ポインタが、当該管理手段によって前記データトークンの記憶用に割り当てられたアドレスへのポインタである、管理手段と、
前記管理手段に応答して、メモリリストにアクセスし、当該メモリリスト内に、アドレスおよび前記割り当てられたアドレスへのポインタを生成する割当て手段であって、前記アクセスされるメモリリストが、追加のアドレス割当て用の複数のリンクされるメモリリストを含む、割当て手段と、
を備え、
前記割当て手段が、前記アクセスされるメモリリストに、前記割り当てられたアドレスへの前記ポインタを書き込み、当該ポインタが、前記割り当てられたアドレスを数珠繋ぎにリンクするものであり、
前記割当て手段が、前記選択されたキューから後続のデータトークンを受け取ると、追加のアドレス割当てのために他のメモリリストに移動し、前記割り当てられたアドレスを数珠繋ぎにリンクする追加のポインタを前記他のメモリリストに生成する、
装置。
〔態様１１〕
態様１０に記載の装置において、前記複数のリンクされるメモリリストが、並列処理可能にリンクされる、第１のメモリリスト、第２のメモリリスト、第３のメモリリストおよび第４のメモリリストを有する、装置。
〔態様１２〕
態様１１に記載の装置において、前記データトークンに割り当てられた複数のアドレスが、ポインタにより、複数の並列処理可能な前記メモリリストにわたってリンクされる、装置。
〔態様１３〕
態様１２に記載の装置において、前記割り当てられた複数のアドレスが、前記バッファ管理手段により生成されるテイルポインタおよびヘッドポインタによってリンクされる、装置。
〔態様１４〕
態様１０に記載の装置において、前記キュー手段が、
前記リンクされるメモリリスト内の、前記割り当てられたアドレスに、データトークンをエンキューするエンキュー部、および
前記リンクされるメモリリスト内の、前記割り当てられたアドレスから、データトークンをデキューするデキュー部を含む、装置。
〔態様１５〕
態様１４に記載の装置において、前記エンキュー部が、前記バッファ管理手段に、複数のデータトークンを一度にエンキューする要求を生成し、当該複数のデータトークンのアドレスが、ポインタによって、前記複数のメモリリストにわたってリンクされる、装置。
〔態様１６〕
態様１５に記載の装置において、前記デキュー部が、前記バッファ管理手段に、複数のデータトークンを一度にデキューする要求を生成し、当該複数のデータトークンのアドレスが、ポインタによって、前記複数のメモリリストにわたってリンクされる、装置。
〔態様１７〕
態様１０に記載の装置において、追加のアドレス割当てのための前記複数のリンクされるメモリリストには、アドレスが利用可能性に従って動的に値の代入が行われる、装置。
〔態様１８〕
態様１０に記載の装置において、前記複数のリンクされるメモリリストが、要求されたアドレスが全て割り当てられるまで、各メモリリストをとおしてラウンドロビン方式で連続的に、値の代入が行われる、装置。
〔態様１９〕
少なくとも１つのプロセッサと、
命令を有する少なくとも１つのコンピュータ読み取り可能な記憶装置と、を備えるシステムであって、
前記命令は、実行されると、データパケットをキューイングする方法を実施させ、当該方法は、
複数のキューから、所与のキューを選択する過程と、
選択されたキューからデータトークンを受け取る過程と、
キュー手段が、バッファ管理手段に、アドレスおよびポインタを要求する過程であって、前記ポインタが、当該バッファ管理手段によって前記データトークンの記憶用に割り当てられたアドレスへのポインタである、過程と、
前記バッファ管理手段がメモリリストにアクセスし、当該メモリリスト内に、アドレスおよび割り当てられたアドレスへのポインタを生成する過程であって、前記アクセスされるメモリリストが、追加のアドレス割当て用の複数のリンクされるメモリリストを含む、過程と、
前記アクセスされるメモリリストに、前記割り当てられたアドレスへの前記ポインタを書き込む過程であって、当該ポインタが、前記割り当てられたアドレスを数珠繋ぎにリンクする過程と、
前記選択されたキューから後続のデータトークンを受け取ると、追加のアドレス割当てのために他のメモリリストに移動し、前記割り当てられたアドレスを数珠繋ぎにリンクする追加のポインタを前記他のメモリリストに生成する過程と
を含む、システム。
〔態様２０〕
態様１９に記載のシステムにおいて、前記複数のリンクされるメモリリストが、並列処理可能にリンクされる、第１のメモリリスト、第２のメモリリスト、第３のメモリリストおよび第４のメモリリストを有する、システム。
〔態様２１〕
態様１９に記載のシステムにおいて、前記データトークンに割り当てられた複数のアドレスが、ポインタにより、複数の並列処理可能な前記メモリリストにわたってリンクされる、システム。
〔態様２２〕
態様２０に記載のシステムにおいて、前記割り当てられた複数のアドレスが、前記バッファ管理手段により生成されるテイルポインタおよびヘッドポインタによってリンクされる、システム。
〔態様２３〕
態様１９に記載のシステムにおいて、さらに、
前記リンクされるメモリリスト内の、前記割り当てられたアドレスに、データトークンをエンキューするエンキュー部と、
前記リンクされるメモリリスト内の、前記割り当てられたアドレスから、データトークンをデキューするデキュー部と、
を備える、システム。
〔態様２４〕
態様２３に記載のシステムにおいて、前記エンキュー部が、前記バッファ管理手段に、複数のデータトークンを一度にエンキューする要求を生成し、当該複数のデータトークンのアドレスが、ポインタによって、前記複数のメモリリストにわたってリンクされる、システム。
〔態様２５〕
態様２３に記載のシステムにおいて、前記デキュー部が、前記バッファ管理手段に、複数のデータトークンを一度にデキューする要求を生成し、当該複数のデータトークンのアドレスが、ポインタによって、前記複数のメモリリストにわたってリンクされる、システム。
【符号の説明】
【００４４】
１３０，２００              管理手段
１５０                      メモリバッファ
Ｑ０                        所与のキュー
Ｑ００，Ｑ０１，Ｑ０２，Ｑ０３    メモリリスト
【図１】
0006535253.tif 000004
【図２】
0006535253.tif 000005
【図３】
0006535253.tif 000006
【図４】
0006535253.tif 000007
【図５Ａ】
0006535253.tif 000008
【図５Ｂ】
0006535253.tif 000009
【図６Ａ】
0006535253.tif 000010
【図６Ｂ】
0006535253.tif 000011
【図７】
0006535253.tif 000012
【図８】
0006535253.tif 000013
【図９】
0006535253.tif 000014