(57)【特許請求の範囲】
【請求項１】
パケット中継デバイスで使用する共用メモリ・マネージャであって、
共用メモリ内にバッファ使用度に関する情報を格納するように構成されているポインタ・メモリと、
ポインタ・メモリに結合されたエンコーダであって、複数の空きバッファを含むバッファの複数の組のうちの一組のバッファを示す出力を生成するように構成されているエンコーダと、
エンコーダに結合されているポインタ・ジェネレータであって、その一組のバッファ内の空きバッファを特定し、エンコーダの出力とその一組のバッファ内の空きバッファの位置に基づいて空きバッファへのポインタを生成するポインタ・ジェネレータと
を備え、
前記バッファ使用度に関する情報に複数のバッファのそれぞれの使用度カウントが含まれる、
共用メモリ・マネージャ。
【請求項２】
ポインタ・メモリがさらに使用度カウントを格納するように設定された複数のエントリーを含むカウント・アレイを備え、複数のエントリのそれぞれが複数のバッファのうちの１つに対応し、使用度カウントが対応するバッファへのポインタを保持するポートの数を表す、請求項１に記載の共用メモリ・マネージャ。
【請求項３】
カウント・アレイ内の与えられたエントリの位置が共用メモリ内の対応するバッファのアドレスを表す、請求項２に記載の共用メモリ・マネージャ。
【請求項４】
ポインタ・メモリがさらにカウント・アレイに結合されているタグ・アレイを備え、タグ・アレイはバッファの複数の組のうちの各組のバッファに対応する指示を含み、この指示が対応するバッファの組の複数のバッファが使用可能かどうかを示す請求項２に記載の共用メモリ・マネージャ。
【請求項５】
複数の空きバッファ・ポインタを決定することにより共用メモリ内に複数のバッファを動的に割り当てるステップであって、複数の空きバッファ・ポインタのそれぞれが複数のバッファのうちの１つに対応し、割り当ては共用メモリ内の複数のバッファの位置によって制約されないステップと、
第１の接続されているネットワーク・セグメントからパケットを受信するステップと、
複数のバッファにパケットを格納するステップと、
中継決定に基づいて入力ポートから複数の出力ポートに複数のバッファ・ポインタの所有権を移転するステップと、
複数のバッファからパケットを取り出すステップと、
パケットを第２の接続されているネットワーク・セグメントに送信するステップと
を含むパケット中継方法であって、
複数の空きバッファ・ポインタを決定することにより共用メモリ内に複数のバッファを動的に割り当てるステップがさらに、複数の空きバッファ・ポインタのそれぞれに対応する使用度カウントを更新するステップを含む、
パケット中継方法。
【請求項６】
空きバッファ・ポインタに対応する使用度カウントを更新するステップが使用度カウントの処理における潜在的競合状態に対処できるように予め設定されている値に使用度カウントを設定するステップを含む請求項５に記載の方法。
【請求項７】
複数の空きバッファ・ポインタを決定することにより共用メモリ内に複数のバッファを動的に割り当てるステップであって、複数の空きバッファ・ポインタのそれぞれが複数のバッファのうちの１つに対応し、割り当ては共用メモリ内の複数のバッファの位置によって制約されないステップと、
第１の接続されているネットワーク・セグメントからパケットを受信するステップと、
複数のバッファにパケットを格納するステップと、
中継決定に基づいて入力ポートから複数の出力ポートに複数のバッファ・ポインタの所有権を移転するステップと、
複数のバッファからパケットを取り出すステップと、
パケットを第２の接続されているネットワーク・セグメントに送信するステップと
を含むパケット中継方法であって、
中継決定に基づき入力ポートから複数の出力ポートに複数のバッファ・ポインタの所有権を移転するステップがさらに、
複数のバッファのバッファごとに、
キューから外す操作を実行して、入力キューから対応するバッファ・ポインタを除去するステップと、
キューに入れる操作を実行して、中継決定で指示されている複数の出力ポートの出力キューにバッファ・ポインタを挿入するステップと、
バッファ・ポインタが正常にキューに入れられた、出力ポートの個数を共用メモリ・マネージャに通知するステップと、
バッファ・ポインタに対応する使用度カウントを更新するステップと
を含むパケット中継方法。
【請求項８】
バッファ・ポインタに対応する使用度カウントを更新するステップが使用度カウントの現在値を決定するステップと、
入力ポートの個数を共用メモリ・マネージャに通知するステップを実行する前に解放されている可能性のあるバッファを考慮するように現在値を修正するステップと、
バッファ・ポインタのコピーを現在保持している出力ポートの数を反映する修正値で使用度カウントを置き換えるステップを含み、
競合状態の悪影響を、修正ステップで解放されている可能性のあるバッファを考慮することにより回避する請求項７に記載の方法。
【請求項９】
中継決定により複数の出力ポートからなるポートの組を識別し、この方法がさらに複数のバッファ・ポインタを伝送する先の複数の出力ポートの組のサブセットを決定するステップを含む請求項７に記載の方法。
【請求項１０】
さらに、複数の出力ポートでキュー状態指示を生成するステップを含み、
複数のバッファ・ポインタの伝送先の複数の出力ポートの組のサブセットを決定するステップが複数の出力ポートによって生成されるキュー状態指示に基づく請求項９に記載の方法。
【請求項１１】
命令シーケンスを表すデータを格納している機械読取り可能媒体であって、前記命令シーケンスがプロセッサによって実行されると、
複数の空きバッファ・ポインタを決定することにより共用メモリ内に複数のバッファを動的に割り当て、複数の空きバッファ・ポインタのそれぞれが複数のバッファの１つに対応し、割り当てが共用メモリ内の複数のバッファの位置によって制約されないステップと、
第１の接続されているネットワーク・セグメントからパケットを受信するステップと、
パケットを複数のバッファに格納するステップと、
中継決定に基づいて複数のバッファ・ポインタの所有権を入力ポートから複数の出力ポートに伝送するステップと、
複数のバッファからパケットを取り出すステップと、第２の接続されているネットワーク・セグメントにパケットを送信するステップと
を前記プロセッサが実行する、機械読取り可能媒体であって、
複数の空きバッファ・ポインタを決定することにより共用メモリ内に１つ以上のバッファを動的に割り当てるステップと、
複数の空きバッファ・ポインタのそれぞれに対応する使用度カウントを更新するステップと
を前記プロセッサがさらに実行する、機械読取り可能媒体。
【請求項１２】
命令シーケンスを表すデータを格納している機械読取り可能媒体であって、前記命令シーケンスがプロセッサによって実行されると、
複数の空きバッファ・ポインタを決定することにより共用メモリ内に複数のバッファを動的に割り当て、複数の空きバッファ・ポインタのそれぞれが複数のバッファの１つに対応し、割り当てが共用メモリ内の複数のバッファの位置によって制約されないステップと、
第１の接続されているネットワーク・セグメントからパケットを受信するステップと、
パケットを複数のバッファに格納するステップと、
中継決定に基づいて複数のバッファ・ポインタの所有権を入力ポートから複数の出力ポートに伝送するステップと、
複数のバッファからパケットを取り出すステップと、第２の接続されているネットワーク・セグメントにパケットを送信するステップと
を前記プロセッサが実行する、機械読取り可能媒体であって、
中継決定に基づき入力ポートから複数の出力ポートに複数のバッファ・ポインタの所有権を伝送するステップがさらに、
複数のバッファのバッファごとに、
キューから出る操作を実行して、入力キューから対応するバッファ・ポインタを除去するステップと、
キューに入る操作を実行して、中継決定で指示されている複数の出力ポートの出力キューにバッファ・ポインタを挿入するステップと、
バッファ・ポインタが正常にキューに入った、出力ポートの個数を共用メモリ・マネージャに通知するステップと、
バッファ・ポインタに対応する使用度カウントを更新するステップと
を含む、機械読取り可能媒体。
【発明の詳細な説明】
関連出願への相互参照
本出願は、１９９７年６月３０日出願の「Ｓｈａｒｅｄ  Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  ｉｎ  ａ  Ｓｗｉｔｃｈｅｄ  Ｎｅｔｗｏｒｋ  Ｅｌｅｍｅｎｔ」（整理番号０８２２２５．Ｐ２３５４）という名称の米国特許同時係属出願第０８／８８５，１１８号の一部継続出願である。
発明の分野
本発明は、一般に、コンピュータ・ネットワーク・デバイスにおけるパケット中継の分野に関するものである。より詳細には、本発明はスイッチ・ネットワーク要素における共用メモリ管理に関するものである。
発明の背景
ユーザが増え、たとえば、マルチメディア・アプリケーションを使ってインターネットやＷｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂにアクセスする機会が増えたことで、既存のネットワークの帯域幅を拡大しなければならなくなっている。したがって、将来のネットワークは非常に高い帯域幅と多数のユーザをサポートできなければならない。さらに、このようなネットワークでは、データ、音声、映像など、通常異なる帯域幅を必要とする複数のトラフィック・タイプをサポートできなければならない。
統計調査により、ネットワーク・ドメイン、つまり相互接続されたローカル・エリア・ネットワーク（ＬＡＮ）のグループは、それぞれのＬＡＮに接続された個々の端局の数とともに、将来急激に増大することがわかっている。したがって、こうした増加に対応するため、ネットワーク帯域幅を増やし、リソースの使用効率を高める必要がある。
従来のスイッチ・ネットワーク要素における非効率の共通の原因は、パケット・バッファリングのためのメモリ管理機構である。パケット・バッファリングは、通常、パケットの損失を防ぐためスイッチ・ネットワーク要素に必要なものである。輻輳の潜在的要因の１つに、入力ポートと出力ポートの間の速度の不整合がある。たとえば、高速な入力ポート（たとえば、１０００Ｍｂ／ｓ）から低速な出力ポート（たとえば、１０Ｍｂ／ｓ）へトラフィックを中継する場合、低速な出力ポートは、高速な入力ポートでのパケット受信速度でパケットをネットワークに送信することはできない。そのため、パケットをバッファリングしなければならず、さもないとパケットが取りこぼされることになる。特定のトラフィック・パターンもまた、輻輳の原因となりうる。スイッチ・ネットワーク要素を横断するトラフィック・パターンでは、たとえば、複数の入力ポートからデータを同じ出力ポートに中継する必要がある。その結果、出力ポートに一時的輻輳が発生することがある。さらに、複数の入力ポートに到着したマルチキャスト・トラフィックを多数の出力ポートに中継する必要がある場合もある。すると、トラフィックが増大し、複数の出力ポートで一時的輻輳が発生する可能性がある。最後に、共通リソースの競合も輻輳に寄与することがある。たとえば、パケット中継に必要な共通リソースにより、着信トラフィックが複数の入力ポートに滞留する場合がある。他の入力ポートが中継データベースなどの特定の共通リソースにアクセスしている最中にパケットを特定の入力ポートでバッファリングする必要がある。
通常、必要なパケット・バッファリングを実現するために２つの方法のうちの１つを用いる。第１の方法は、入力ポート・バッファリングであり、適切な出力ポートに中継できるようになるまで一時的にパケット・データを格納しておくためパケット（バッファ）メモリを入力ポート関連付けるというものである。第２の方法は、出力ポート・バッファリングであり、接続されているリンクに送信できるようになるまでパケットを一時的に格納しておくためパケット・メモリを出力ポートに関連付けるというものである。
高性能スイッチ・ネットワーク要素を実装するうえでのアーキテクチャ面の主要な問題点は、各ポートのパケット・バッファリングの正しい量を決定するということである。パケット・メモリの容量が不適切だと、複数のポートのうちの１つであっても、スイッチ全体に対し性能に重大な影響を及ぼすおそれがある。他方、バッファリングの容量があまり多すぎても、スイッチング構造のコストばかりが嵩み、メリットはまったくないということになる。ポートごとに必要なバッファリング容量を見積もるのは困難であるため、多くの実装が高価すぎたり、あまりよい性能を発揮しなかったり、あるいはその両方であったりする。
前記に基づき、効率改善の一候補として、ネットワーキング・デバイスのメモリ管理機構が挙げられる。さらに、リソース共用は本質的に効率がよいものだという点と、ネットワーク・トラフィックには爆発的に増大する性質があるという点を認識すると、動的なパケット・メモリ管理方式を使用して、パケット・バッファリングのためにすべての入出力ポート間の共通パケット・メモリの共用をしやすくすることが望ましい。
発明の概要
スイッチ・ネットワーク要素における共用メモリ管理の方法と装置について説明する。本発明の一様態によれば、パケット中継デバイス用の共用メモリ・マネージャは共用メモリ内の多数のバッファのそれぞれについてのバッファ使用度に関する情報を格納しているポインタ・メモリを備えている。ポインタ・メモリにはエンコーダが結合されている。エンコーダは、複数の空きバッファを含む一組のバッファを示す出力を生成するように設定されている。さらに共用メモリ・マネージャは、ポインタ・ジェネレータを備えている。ポインタ・ジェネレータは、エンコーダに結合され、その一組のバッファ内に空きバッファを配置するように設定されている。ポインタ・ジェネレータはさらに、エンコーダの出力とその一組のバッファ内の空きバッファの配置に基づいて空きバッファへのポインタを生成するように設定されている。
本発明の他の様態によれば、パケット中継デバイスには、パケットをネットワーク上に送信するための多数の出力ポートと、ネットワークからパケットを受信し、パケットをバッファリングし、パケットを複数の出力ポートに中継するための出力ポートに結合されている多数の入力ポートが備えられている。パケット中継デバイスはさらに、出力ポートと入力ポートに結合された共用メモリも備えている。共用メモリは、一時的にパケットをバッファリングするためいくつかのバッファにセグメント分割されている。しかし、与えられた任意の時点において、共用メモリに格納されるのは高々１つの与えられたパケットのコピーである。パケット中継デバイスはさらに、入力ポートと出力ポートに結合されている共用メモリ・マネージャも備えている。共用メモリ・マネージャは、入力ポートの代わりにバッファを動的に割り当てて、入力ポートと出力ポートが提供する情報に基づきそれぞれのバッファの所有カウントを追跡する。
本発明の他の様態により、パケット中継の方法が実現される。この方法には、共用メモリ内の複数のバッファを識別する複数のバッファ・ポインタを動的に割り当てる方法が含まれる。パケットを受信すると、パケットは複数のバッファ内に格納される。次に、中継決定に基づいて、バッファ・ポインタが伝送される。最後に、バッファからパケットを受信した後、パケットが送信される。
本発明の他の特徴は、添付の図面と後述の詳細な説明から明白である。
【図面の簡単な説明】
本発明について、限定的なものではなく、例示的なものとして、添付の図面の図で説明する。同じ参照番号は同じ要素を指している。
第１図は、本発明の一実施形態によるスイッチの図である。
第２図は、第１図のスイッチで使用できるスイッチング要素の例を示す簡単なブロック図である。
第３Ａ図は、本発明の一実施形態による第２図の共用メモリの論理図である。
第３Ｂ図は、本発明の一実施形態による第２図の共用メモリ・マネージャのブロック図である。
第４図は、本発明の一実施形態による第３Ｂ図のバッファ追跡プロセスのブロック図である。
第５図は、本発明の一実施形態によるバッファ割り当て処理を示す流れ図である。
第６図は、本発明の一実施形態によるバッファ所有伝送処理を示す流れ図である。
第７図は、本発明の一実施形態によるバッファ戻り処理を示す流れ図である。
詳細な説明
スイッチ・ネットワーク要素における共用メモリ管理のための方法と装置について説明する。以下の説明では、説明のため多数の具体的詳細を提示し、本発明が完璧に理解されるようにしている。ただし、当業者にとっては、本発明がこうした具体的詳細のいくつかがないとしても実施可能であることは明白である。他の場合については、よく知られている構造とデバイスをブロック図形式で示す。
本発明は多数のステップから成り立っており、以下の段ではこれについて説明する。本発明のステップは後述のハードウェア部品によって実行するのが好ましいが、それとは別に、メモリ、ＣＤ−ＲＯＭ、フロッピディスク、またはその他の記憶媒体などの機械読取り可能媒体に格納されている機械実行可能命令によって実現し、これらの命令を使ってプログラムされている汎用または専用プロセッサでこれらのステップを実行することもできる。さらに、本発明の実施形態について、高速イーサネット・スイッチに関して説明する。ただし、ここで説明する方法と装置は、他の種類のネットワーク・デバイスおよびプロトコルにも等しく適用可能である。
ネットワーク要素の例
本発明の教示に従って動作するネットワーク要素の一実施形態の概要が第１図に示されている。ネットワーク要素を使用して、さまざまな形態で多数のノードと端局を相互接続する。特に、多層分散ネットワーク要素（ＭＬＤＮＥ）の応用例では、イーサネットとも呼ばれるＩＥＥＥ８０２．３規格などの同種データ・リンク層上で定義済みプロトコルによりパケットを中継する。他のプロトコルも使用可能である。
ＭＬＤＮＥの分散アーキテクチャは、知られている、あるいは将来のさまざまな中継アルゴリズムに従ってメッセージ・トラフィックを中継するように設定することが可能である。好ましい実施形態では、ＭＬＤＮＥは、インターネット・プロトコル・スート、より詳細にはイーサネットＬＡＮ規格とメディア・アクセス制御（ＭＡＣ）データ・リンク層上の伝送制御プロトコル（ＴＣＰ）およびインターネット・プロトコル（ＩＰ）を使用してメッセージ・トラフィックを処理するように設定されている。ＴＣＰはここでは第４層プロトコルとも呼ばれ、ＩＰは第３層プロトコルと呼ばれる。説明のために、本発明で層といった場合には、通常、国際標準化機構（ＩＳＯ）によって策定された開放型システム相互接続（ＯＳＩ）７層モデルのことを意味する。
ＭＬＤＮＥの実施形態において、ネットワーク要素は分散方式でパケット中継機能を実施するように設定されている、つまり機能の異なる部分はＭＬＤＮＥの異なるサブシステムによって実行されるが、機能の最終結果はノードと端局の両方に対して透過的であるということである。以下の説明と、第１図の図からわかるように、ＭＬＤＮＥのアーキテクチャはスケーラブルであり、設計者は予測しながらサブシステムを追加して行くことで外部の接続数を増やすことができ、したがってＭＬＤＮＥをスタンドアローンのルータとしてかなり自由に定義することが可能である。
第１図のブロック図形式で示されているように、ＭＬＤＮＥ１０１は多数の内部リンク１４１を使用して相互接続されている多数のサブシステム１１０を含み、さらに大きなスイッチを構成する。一実施形態によれば、サブシステム１１０は２つのサブシステムの間に少なくとも１つの内部リンクを用意することにより完全にメッシュ化することができる。それぞれのサブシステム１１０は、中継データベースとも呼ばれる中継およびフィルタ処理メモリ１４０に結合されているスイッチング要素１００を備える。中継およびフィルタ処理データベースには、中継メモリ１１３および連想メモリ１１４を含めてもよい。中継メモリ（またはデータベース）１１３は、受信パケットのヘッダとの一致を調べるために使用されるアドレス表を格納する。連想メモリ（またはデータベース）は、ＭＬＤＮＥを介してパケットを中継する場合に中継属性を識別するのに使用される中継メモリ内の各エントリと関連付けられたデータを格納する。入力機能と出力機能を持つ多数の外部ポート（図には示されていない）が外部接続１１７とインタフェースする。一実施形態において、それぞれのサブシステムは複数のギガビット・イーサネット・ポート（ここで使用しているギガネット・イーサネットという用語はキャリア検知多重アクセス／衝突検出（ＣＳＭＡ／ＣＤ）をメディア・アクセス方法として採用しているネットワークに適用されるものであり、一般に、各種媒体上で１０００Ｍｂ／ｓの中継速度で動作し、イーサネット形式または電気電子技術者協会（ＩＥＥＥ）規格８０２．３形式のデータ・パケットを送信する）、高速イーサネットポート（ここで使用する高速イーサネットという用語は、ＣＳＭＡ／ＣＤをメディア・アクセス方式として採用しているネットワークに適用されるものであり、一般に、各種媒体上で１００Ｍｂ／ｓの中継速度で動作し、イーサネット形式またはＩＥＥＥ規格８０２．３形式のデータ・パケットを送信する）、およびイーサネット・ポート（ここで使用するイーサネットという用語は、ＣＳＭＡ／ＣＤをメディア・アクセス方式として採用しているネットワークに適用されるものであり、一般に、各種媒体上で１０Ｍｂ／ｓの転送速度で動作し、イーサネット形式またはＩＥＥＥ規格８０２．３形式のデータ・パケットを送信する）をサポートしている。内部リンク１４１を使用して、内部ポート（図には示されていない）を結合する。内部リンクを使用すると、ＭＬＤＮＥは複数のスイッチング要素同士を接続して、１つのマルチギガビット・スイッチを構成することができる。
ＭＬＤＮＥ１０１はさらに、Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔｓ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）などの通信バス１５１を介して個々のサブシステム１１０に結合されている中央処理システム（ＣＰＳ）１６０を備える。ＰＣＩは、単に通信バスの例として言及したものであり、当業者であればバスの種類は実装ごとに異なることがあることを理解できるであろう。ＣＰＳ１６０は、中央メモリ１６３に結合されている中央処理装置（ＣＰＵ）１６１を備える。中央メモリ１６３には、さまざまなサブシステム１１０の個々の中継メモリ１１３に格納されているデータのコピーが収められる。ＣＰＳ１６０は、各サブシステム１１０との直接制御および通信インタフェースを備えており、スイッチング要素１００の間の通信および制御を中央で一括して行うことができる。
スイッチング要素の例
第２図は、第１図のスイッチング要素のアーキテクチャ例を示す簡単なブロック図である。図のスイッチング要素１００は、中央処理装置（ＣＰＵ）インタフェース２１５、スイッチ構造ブロック２１０、ネットワーク・インタフェース２０５、カスケード・インタフェース２２５、および共用メモリ・マネージャ２２０を備える。
パケットは、これら３つのインタフェース２０５、２１５、および２２５のうちの１つを介してネットワーク・スイッチング要素１００を出入りする。簡単にいうと、ネットワーク・インタフェース２０５はイーサネットなどのネットワーク通信プロトコルによ従って動作し、ネットワーク（図には示されていない）からパケットを受信し、それぞれ複数の入力ポートおよび出力ポートを介してネットワーク上にパケットを送信する。スイッチング要素１００の相互接続のためオプションのカスケード・インタフェース２２５に複数の内部リンク２２６を装備して、さらに大きなスイッチを構成することができる。たとえば、それぞれのスイッチング要素１００を完全メッシュ・トポロジで他のスイッチング要素１００と接続して、上記の多層スイッチを構成することができる。それとは別に、スイッチにカスケード・インタフェース２２５を備える、あるいは備えない単一のスイッチング要素１００を装備することもできる。
ＣＰＵ１６１は、ＣＰＵインタフェース２１５を介してネットワーク・スイッチング要素１００にコマンドやパケットを送ることができる。この方法で、ＣＰＵ１６１上で動作している複数のソフトウェア・プロセスが、新規エントリの追加や不要なエントリの削除など、外部の中継およびフィルタ処理データベース１４０のエントリを管理することができる。しかし、他の実施形態では、ＣＰＵ１６１を中継およびフィルタ処理データベース１４０に直接アクセスできるようにすることもできる。いかなる場合も、パケット中継のために、ＣＰＵインタフェース２１５のＣＰＵポートはスイッチング要素１００への汎用ポートに似ており、単なる他の外部のネットワーク・インタフェース・ポートであるかのように取り扱うことができる。しかし、ＣＰＵポートへのアクセスはＰｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔｓ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）バスなどのバス上で発生するので、ＣＰＵポートはメディア・アクセス制御（ＭＡＣ）機能を必要としない。
ネットワーク・インタフェース２０５に戻り、入力パケット処理と出力パケット処理の主要な２つの作業について簡単に説明する。入力パケット処理はネットワーク・インタフェース２０５の複数の入力ポートで実行することができる。入力パケット処理には、（１）着信したイーサネットパケットを受信し確認する、（２）適切な場合にパケット・ヘッダを修正する、（３）着信パケットの格納のため共用メモリ・マネージャ２２０にバッファ・ポインタを要求する、（４）スイッチ構造ブロック２１０に中継決定を要求する、（５）外部の共用メモリ２３０に一時的に格納するため着信パケット・データを共用メモリ・マネージャ２２０に中継する、（６）中継決定を受信したら、中継決定によって指示されている出力ポート２０６にバッファ・ポインタを中継する、というステップが含まれる。出力パケット処理は、ネットワーク・インタフェース２０５の複数の出力ポート２０６によって実行できる。出力処理には、共用メモリ・マネージャ２２０にパケット・データを要求する、ネットワーク上にパケットを送信する、パケットの送信後バッファ割り当て解放を要求する、というステップを含めることができる。
ネットワーク・インタフェース２０５、ＣＰＵインタフェース２１５、およびカスケード・インタフェース２２５は、共用メモリ・マネージャ２２０とスイッチ構造ブロック２１０に結合されている。共用メモリ・マネージャ２２０は、着信パケットをバッファリングするため、外部の共用メモリ２３０との効率のよい中央インタフェースを用意している。スイッチ構造ブロック２１０は、ＣＰＵ１６１の助けを借りて中継およびフィルタ処理データベース１４０をサーチし保守するためのサーチ・エンジンおよび学習ロジックを備えている。
スイッチ構造ブロック２１０は、インタフェース２０５、２１５、または２２５の代わりに中継およびフィルタ処理データベース１４０にアクセスするためのサーチ・エンジンを備える。パケット・ヘッダ突合わせ検査、学習、パケット中継、フィルタ処理、および経過時間処理は、スイッチ構造ブロック２１０で実行可能な機能の例である。それぞれの入力ポート２０６は、受信パケットに対する中継決定を受信するためスイッチ構造ブロック２１０と結合されている。中継決定は、送出ポート（たとえば、外部のネットワーク・ポートまたは内部のカスケード・ポート）を指示し、これに基づいて対応するパケットを送信しなければならない。ＭＡＣ  ＤＡ交換のための新しいＭＡＣ受信者側アドレス（ＤＡ）などのハードウェア経路制御機能をサポートするため追加情報も中継決定に含めることができる。さらに、スイッチング要素１００を介してパケット・トラフィックの優先順位付けを簡単に行えるようにするため優先順位指示も中継決定に含めることができる。
本実施形態では、イーサネットパケットは共用メモリ・マネージャ２２０によって中央で一括してバッファリングされる。共用メモリ・マネージャ２２０は、すべての入力ポートおよび出力ポート２０６をインタフェースし、それぞれに代わって動的メモリ割り当ておよび解放を実行する。入力パケット処理中に、複数のバッファを外部共用メモリ２３０内で割り当て、共用メモリ・マネージャ２２０はたとえばネットワーク・インタフェース２０５から受信したコマンドに応答して着信パケットを格納する。その後、出力パケット処理中に、共用メモリマネージャ２２０は外部共用メモリ２３０からパケットを取り出して、使用されなくなったバッファを解放する。複数のポートが与えられたバッファを所有できるので、すべての出力ポート２０６が格納されているデータの送信を完了するまでバッファを解放しないようにするため、共用メモリ・マネージャ２２０はバッファの所有状況を追跡するのも好ましい。
パケット・スイッチングの概要
本発明の一実施形態によれば、本発明のスイッチング要素１００は、３つのインタフェース２１５、２０５、および２２５の間でイーサネット、高速イーサネット、ギガビット・イーサネットのパケットの経路制御および中継をワイヤ・スピードで行うことができる。「ワイヤ・スピード」は、与えられた入力ポート２０６上で受信したパケットの中継決定がつぎのパケットがその入力ポート２０６に到着する前に完了していることを意味する用語である。
中継は、入力ポートから出力ポート２０６にポインタを受け渡すことで実行される。共用メモリ・マネージャ２２０は、パケット・データ自体をローカルで格納するのではなくパケット・データを格納するバッファにポインタをローカルで格納することにより入力ポートおよび出力ポート２０６によって利用されるあるレベルのインダイレクションを実現する。たとえば、入力および出力キューは、入力および出力パケット処理中にポインタを一時的に格納するためにそれぞれ入力および出力ポート２０６で保持することができる。着信パケットをバッファリングするためのメモリをスイッチング要素１００のすべての入力ポートおよび出力ポート２０６によって共有されている共通メモリ・プール（たとえば共用メモリ２３０）から割り当てる。
簡単にいうと、パケット中継プロセスが始まると、まずスイッチング要素の入力ポート２０６のうちの１つでパケットを受信する。予め定められている個数のバッファ・ポインタを確保しておき受信パケット・データを即座に格納できるようにしておくことで、入力ポート２０６は常に次のパケットを受信する準備ができていることに注意することが重要である。スイッチング要素の１００初期化時にこれらのバッファ・ポインタを予め割り当て、その後、ポインタ数が予め定められているしきい値を下回ったらこれらのバッファ・ポインタを共用メモリ・マネージャ２２０に要求することができる。この例に戻り、受信パケットの一部を入力ポート２０６で一時的にバッファリングし、その一方で、パケットの中継先である出力ポート２０６に関して決定を下すことができる。したがって、フィルタ処理対象のパケットは共用メモリ２３０に格納する必要はない。
特定のパケットに関する中継決定を受信した後、入力２０６はパケットに対応する複数のバッファの所有権を適切な出力ポート２０６に伝送する。所有権の伝送には、入力ポート２０６がパケットを送信しなければならない出力ポート２０６の個数を共用メモリ・マネージャ２２０に通知すること、および入力ポート２０６が適切なポインタを出力ポート２０６に中継することが含まれる。
バッファ・ポインタを受信すると、出力ポート２０６は接続されているリンクに送信できるようになるまでポインタを出力キューに格納しておく。出力ポート２０６が特定のバッファからのパケット・データの送信を完了すると、バッファ操作の終了したことを共用メモリ・マネージャ２２０に通知する。次に共用メモリ・マネージャ２２０はバッファ所有者の数を追跡するために使用される内部カウントを更新し、適切であればバッファを空きプールに戻す（たとえば、バッファが出力キュー内に残っていない場合）。
上記の概要から、バッファ・ポインタを使用すると、中継は入力ポート２０６から複数の出力ポート２０６への複数のバッファ・ポインタの中継で済むようになることが理解されるであろう。さらに、パケット・データを複製する必要がないためマルチキャスト・パケットのブルード（一斉送り）と処理を効率よく行える。実際、特定のパケットを中継する出力ポートの数に関係なく、共用メモリ２３０にはパケット・データのコピーが１つだけ存在することになる。したがって、本実施形態の一利点として、バッファ・メモリを相応に増やすことなく増加するポート数に対応することによりアーキテクチャを徐々に拡張できるという点が挙げられる。
共用メモリの編成
従来のスイッチング要素では一定容量のメモリを各ポートと関連付けていた。その結果与えられたポートを介してトラフィックの実際の容量に関係しないメモり割り当ておよびバッファリングが非効率的なものとなっている場合がある。さらに、バッファ・メモリは分散するので、バッファ管理のロジックはポートごとに複製される。それとは対照的に、共用メモリ・マネージャ２２０では、着信パケットのバッファリング用の共有パケット・メモリ・プールへの効率のよい中央インタフェースを用意している。さらに、本発明で実現しているメモリ管理機構は、与えられたポートを介してトラフィックの量に比例するポートごとにバッファリングの効率的な割り当てを行うように設計されている。一実施形態によれば、この比例バッファリングは、動的バッファ割り当て方式と組み合わせて共用メモリ２３０を採用することで実現されている。共用メモリ２３０は、受入インタフェース（たとえば、ネットワーク・インタフェース２０５、カスケード・インタフェース２２５、またはＣＰＵインタフェース２１５内の入力ポート２０６）から複数の送出インタフェース（たとえば、ネットワーク・インタフェース２０５、カスケード・インタフェース２２５、またはＣＰＵインタフェース２１５内の出力ポート２０６）へ流れるパケット・データを一時的に格納するために使用されるバッファのプールである。本質的に、共用メモリ２３０は着信帯域幅条件と送信帯域幅条件との間で折り合いを付けるための伸び縮みするバッファとして使用される。
この時点で、バッファ・サイズ、アドレス空間、および出力／入力ポインタ・キュー・サイズなどのいくつかの共用メモリ・パラメータの間のトレードオフの関係について説明すると都合がよいと思われる。たとえば、バッファ・サイズが大きければ、パケットの一部ではなくパケット全体を収められる可能性が高くなる。しかし、パケット・サイズがバッファ・サイズの整数倍になっていないと、無駄になるバッファ・メモリが多くなる可能性がある。一方、バッファ・サイズが小さいと、分解度が細かくなるためこのような状況ではメモリの節約になる。しかし、バッファを一意的に識別するために多くのアドレスが必要になる場合があり、それぞれのパケットに対し格納用のバッファを増やす必要があると思われる。さらに、１パケットあたりのバッファ数を増やすと、入力ポートと出力ポート２０６の両方でさらに多くのポインタをキューに入れなければならなくなるかもしれない。さらに、環境が予めわかっていない場合には、プログラム可能なリソースを用意し、バッファ・サイズ、共用メモリ・サイズ、キュー・サイズ、およびその他のパラメータを特定の実装に合わせて最適化できるようにするのが望ましい。たとえば、イーサネット実装では、５１２バイトのバッファ・サイズでは通常、１パケットあたり３つのバッファのうちの１つを使用することになる。
本発明の一実施形態により、共用メモリ・マネージャ２２０はパケット・メモリの共有プールと動的バッファ割り当て方式を利用するバッファリング・アーキテクチャを備えている。この実施形態では、共用メモリ・マネージャ２２０は共用メモリ２３０内の空きバッファの共有プールを管理する役割を持つ。これは、バッファ消費者（たとえば、入力ポート２０６）およびバッファ提供者（たとえば、出力ポート２０６）という２つのカテゴリのクライアントを処理する。バッファ消費者は、着信パケットの受信中の適切な時期に共用メモリ・マネージャ２２０に空きバッファを要求する。次に、パケット中継処理中に、バッファ所有権が２つのクライアント・タイプの一方から他方に移る。最後に、パケット送信中の適切な時期に、バッファ提供者によってバッファが共用メモリ・マネージャ２２０に戻される。
そこで第３Ａ図に戻り、多数のバッファ内でパケット・データを格納している共用メモリ２３０の論理図を説明する。この例では、共用メモリ２３０はプログラム可能なサイズの多数のバッファ（ページ）に分割されている。バッファはすべて、同じサイズであってもよく、あるいはそれとは別に、個々のバッファ・サイズが異なっていてもよい。他の実施形態では、バッファはさらに多数のメモリ・ラインに分割することができる。それぞれのラインをパケット・データの格納に使用することができる。他の実施形態では、さらに制御情報をメモリ・ラインのそれぞれと関連付けることもできる。制御情報には、パケット・フィールドの終わりなどのパケット・データに効率よくアクセスするための情報を含めてもよい。制御情報とデータとを分離することで、共用メモリ２３０に対するアクセスの効率を高めることができる。
与えられたパケットのデータは、複数のバッファに格納することができる。この例では、パケット＃１は３つのバッファ３５０−３５２に分散され、パケット＃２のデータは３つのバッファ３６０−３６２に格納され、パケット＃３は１つのバッファ３７０内にまるまる収められている。この例ではさらに、特定のパケットのバッファとパケット自体が共用メモリ２３０内で特定の順序で並んでいる必要はないことがわかる。この方法により、特定のバッファが空いたら、それを次のバッファ要求に応えるために即座に使用することができる。さらに、特定のバッファ内に格納されるパケット・データを１つのパケットに制限すると都合がよい場合もある。つまり、１つのバッファ内に複数のパケットを混在させないようにすることで、実装が簡単になることがある。この実施形態ではパケットが複数のバッファのリストとして表されることが理解されるであろう。したがって、入力ポート２０６から出力ポート２０６にパケット＃１を中継した場合には、バッファ３５０−３５２へのポインタを入力ポートの入力キューから除去し、それらを出力ポート２０６の出力キューに伝送することが必要になる。
共用メモリ・マネージャの例
第３Ｂ図は、本発明の一実施形態による第２図の共用メモリ・マネージャのブロック図である。本実施形態によれば、共用メモリ・マネージャ２２０はバッファ追跡ユニット３２９と共用メモリ・インタフェース３３０を備えている。共用メモリ・インタフェース３３０は、共用メモリ２３０への効率のよい中央インタフェースを実現している。バッファ追跡ユニット３２９はさらに、バッファ・マネージャ３２５を備えている。バッファ・マネージャ３２５は、パケット・データ自体をキューに入れるのではなくパケット・データを含むバッファへのポインタをキューに入れることにより、入力ポートおよび出力ポート２０６によって利用されるあるレベルのインダイレクションを実現している。したがって、本発明で規定しているバッファリング機能は入力パケット・バッファリングや出力パケット・バッファリングなどの従来のバッファリング・カテゴリに入らない。むしろ、ここで説明したバッファリング・アーキテクチャは、たとえば、出力キューイング機能を持つ共用メモリ・バッファリングに最適である。ポインタはポートでキューに入れられるため、本実施形態による中継の動作は、入力ポート２０６から複数の出力ポート２０６の出力キューに複数のバッファ・ポインタを伝送するという形に簡素化されている。
さらに、この自由度の高い方法を用いると、共用メモリ２３０内の各バッファを異なる時点に複数の異なるポートで「所有」することができ、しかもパケット・データを複製しなくて済む。たとえば、マルチキャスト・パケットのバッファ・ポインタのコピーが複数の出力ポート・キュー内にあっても、パケット・データのコピーを１つだけ共用メモリ２３０内に置くだけでよい。
バッファ追跡ユニット３２９はさらに、ポインタ・ランダム・アクセス・メモリ（ＰＲＡＭ）３２０を備える。ＰＲＡＭ３２０は、共用メモリ２３０のバッファに対する使用度カウンタを格納するポインタ表であって、チップ内蔵でも外付けでもよい。本発明の譲受人はそれぞれのスイッチング要素１００を単一の特定用途向け集積回路（ＡＳＩＣ）として実装すると都合がよいことを見いだしているため、オンチップで保持し望ましい高い集積度の回路実装を容易にするためポインタ表をコンパクトに保つのが好ましい。
いかなる場合も、ＰＲＡＭ３２０を参照すると、与えられた時間でのバッファ所有者の数はバッファ・マネージャ３２５によって認識されており、バッファ・マネージャ３２５は動的バッファ割り当てに関してリアルタイムで効率よく空きバッファを判別し、最後の出力ポート２０６による解放後にバッファの解放処理を効率よく行える。メモリが使用可能な場合に、バッファ追跡ユニット３２９によって次の空きバッファを常に確保し、要求入力ポート２０６へ即座に送信できるようにすることが重要である。以下の段ではバッファの割り当て、バッファ所有権の伝送、バッファの解放に関わる処理について詳述する。
バッファ追跡プロセスの例
第４図は、本発明の一実施形態による第３Ｂ図のバッファ追跡ユニット３２９のブロック図である。説明する実施形態において、バッファ追跡ユニット３２９はアービタ４７０、アレイ・コントローラ４５０、アドレス／データ・ジェネレータ４６０、ＰＲＡＭ３２０、優先順位エンコーダ４１０、およびポインタ・ジェネレータ４４０を備えている。
本実施形態によれば、ＰＲＡＭ３２０はさらに、カウント・アレイ４３０とタグ・アレイ４２０を備えている。カウント・アレイ４３０は、共用メモリ２３０内の対応するバッファを現在使用しているポートの個数を表しているカウントを格納するメモリである。一実施形態では、カウント・アレイ４３０内の与えられたカウント・フィールドの位置は共用メモリ２３０内の対応するバッファの開始アドレスを表している。この方法では、同じポインタを使用して、バッファ所有権カウントを決定し、パケット・データの格納、取り出しを行うことができる。
一実施形態では、カウント・アレイ４３０を行と列に分割する。それぞれの行は、複数のカウント・フィールドのうち複数の組を格納することができる。この例では、タグ・アレイ４２０はカウント・アレイ４３０と同じ数の行を含み、カウント・アレイ４３０の対応する行においてバッファが使用可能かどうかを示すフィールドを備えるメモリである。つまり、たとえば、カウント・アレイ４３０の対応する行内のカウント・フィールドが０である、つまり所有者がいなければ、タグ・フィールドは１、つまりバッファが使用可能であるということである。このインデックス付け機構を使用して空きバッファのリアルタイム表示を行うようにすると都合がよい。他の構成について考察する。たとえば、他の実施形態では、カウント・アレイ４３０およびタグ・アレイ４２０は同じメモリを共有することができる。
アービタ４７０は入力ポートと出力ポート２０６との間のアービトレーションを行い、与えられた時間にＰＲＡＭ３２０にアクセスできるのはただ１つのポートに限られるようにする。アービタ４７０は、アレイ・コントローラ４５０に結合されており、選択された単一のポートがＰＲＡＭ３２０にアクセスすることができる。アレイ・コントローラ４５０は、ＰＲＡＭ３２０の読み書き動作をスケジュールし、タグ・アレイ４２０およびカウント・アレイ４３０の両方にアクセスできるようにする。
アドレス／データ・ジェネレータ４６０は、カウント・フィールドとタグ・フィールドの修正が簡単に行えるように、ＰＲＡＭ３２０で採用している特定の一つまたは複数のメモリのための制御信号を発生する。入力ポートおよび出力ポート２０６のハンドシェーク信号も、後述のようにアドレス／データ・ジェネレータ４６０によって生成される。さらに、アドレス／データ・ジェネレータ４６０は、バッファ・ポインタからカウント・アレイ４３０内の行アドレスに変換する機能を持つことができる。
優先順位エンコーダ４１０は、タグ・アレイ４２０の各要素に対応する入力を備えている。一実施形態では、これはタグ・アレイ４２０の第１の０でないタグ・ビットの位置を示す出力を生成する。優先順位エンコーダ４１０の出力は、ポインタ・ジェネレータ４４０への入力となっている。一実施形態によれば、ポインタ・ジェネレータ４４０は優先順位エンコーダ４１０によって指示されている行からのエントリを比較し、使用可能なバッファの位置を表すエンコーディングを追加して、入力ポート２０６の１つに対するバッファ・ポインタを生成する。
バッファ割り当て処理
第５図は、本発明の一実施形態によるバッファ割り当て処理を説明する流れ図である。ステップ５０５では、次の空きバッファ・ポインタがポインタ・ジェネレータ４４０によって生成される。一実施形態では、ポインタ・ジェネレータ４４０はバッファ要求を即時処理できるように複数のポインタを使用可能な状態に保持しようとする。
ステップ５１０で、生成されたポインタに対応するカウント・フィールドが更新される。一実施形態では、これは、最大値などの予め設定されている値をカウント・フィールドに書き込むことにより行われる。たとえば、４ビット・カウンタに対する最大値は１５つまり１１１１ｂである。
ステップ５１５で、ステップ５１０の更新後、カウント・フィールドの現在の行に空きバッファがない場合、ステップ５２０で、この行に対応するタグが更新され、そのように指示される。そうでない場合には、処理はステップ５２５を継続する。
ステップ５２５で、バッファ追記ユニット３２９は、複数の入力ポート２０６がバッファ・ポインタを要求するまで待つ。複数の要求を検出すると、処理はステップ５３０から継続する。
ステップ５３０で、バッファ追跡ユニット３２９による処理のため１つの入力ポート要求が選択される。一実施形態では、入力ポート要求はアービタ４７０が受信する。アービタ４７０はバッファ追跡ユニット３２９による処理に関する入力ポート要求の１つのを選択する。他の実施形態では、バッファ追跡ユニット３２９は高速なネットワーク・リンクに優先順位を設定することにより混合ポート速度をサポートできる。たとえば、各Ｎ回の高速なインタフェース（たとえば、ギガビット・イーサネット・ポート）の処理ごとに低速なインタフェース（たとえば高速イーサネットポートなど）を処理することにより高速なインタフェースに優先順位を付けるという優先順位付きラウンド・ロビン方式でアービタ４７０がバッファ・ポインタの間のアービトレーションを行うように設定することができる。
ステップ５３５で、３つのバッファ・ポインタが、ステップ５３０で選択された入力ポート２０６に戻される。バッファ割り当て処理は、ステップ５０５−５３５を繰り返すことで継続することができる。
バッファ所有権移転処理
第６図は、本発明の一実施形態によりバッファ所有権移転処理を説明する流れ図である。ステップ６１０で、入力ポート２０６によってスイッチ構造２１０から受信した中継決定に基づいてパケットが中継されるポートの個数を決定する。
パケットのデータが格納されているバッファごとに、入力ポート２０６はステップ６２０−６４０を実行する。ステップ６２０で、入力ポート２０６はバッファ・ポインタを中継決定指示されている出力ポート２０６に送る。ステップ６３０で、入力ポート２０６は、バッファが正常にバッファ・マネージャ３２５に伝送された出力ポートの個数を通知することにより入力ポート２０６から出力ポート２０６へのバッファの所有権移転をバッファ・マネージャ３２５に通知する。
ステップ６４０で、現在のバッファと関連するカウント・フィールドが更新され、バッファを送信する出力ポートの個数を反映する。本発明の発明者は、バッファ・アカウンティングを無競合にする必要のない方法で動作するようにここで説明した更新機構を設計したということが重要である。新規の更新機構を説明する前に、更新機構によって解決される競合状態について簡単に説明する。
容易にわかるように、入力ポート２０６が特定のバッファ・ポインタの伝送先の出力ポートの個数をバッファ・マネージャ３２５に通知する前に、入力ポート２０６は、たとえば出力キュー満杯通知を検査することにより、出力ポート２０６が追加バッファ・ポインタを受け入れるかどうかを判別する。入力ポート２０６が出力ポートの総数をバッファ・マネージャ３２５に通知する前に、複数の出力ポート２０６がバッファ・ポインタを受信し、そのバッファ・ポインタと関連するパケット・データを送信し、バッファ・カウントを更新することが可能である。
上述の競合状態を処理する更新機構について説明する。一実施形態によれば、バッファ・マネージャ３２５は、単にカウント・フィールドを入力ポート２０６で指示される数に設定するのではなく、カウント・フィールドに対して読込み／修正／書込みを実行するように設定することができる。一実施形態によれば、バッファ割り当てプロセスにおいて、カウント・フィールドはバッファ割り当て後カウント・フィールドの最大値（たとえば、Ｆｈ）などの予め定められている値に設定されることに注意されたい。したがって、バッファ所有権移転処理では、カウント・フィールドは更新され、適切なカウント・フィールドの現在の内容を読み込み、入力ポート２０６によって与えられた数値を現在の内容プラス予め設定された値に加えてバッファ・ポインタの割り当て時にバッファ追跡ユニット３２９によって書き込まれた初期値を補正し、結果をカウント・フィールドに書き戻すことによりバッファを送信する出力ポートの現在の個数を反映することができる。都合がよいのは、この方法で、カウント・フィールドが、以下の表１に示されているように複数の出力ポート２０６によってカウント・フィールドが予め減分されているかどうかに関係なくバッファ・ポインタの出力ポートの現在の個数を正確に反映するということである。表１は、第１の列内でのそれぞれのアクションの後のカウント・フィールドの値を示している。
0004091665.tif 000002
ステップ６５０で、パケットのすべてのバッファが処理されたかどうかを判別する。処理されていれば、このパケットの所有権移転は完了である。そうでない場合には、処理はステップ６２０から継続する。
バッファ戻し処理
第７図は、本発明の一実施形態によるバッファ戻り処理を説明する流れ図である。出力ポート２０６が特定のバッファの内容の送信を完了した後、出力ポート２０６はバッファ・ポインタを戻し、上述のバッファ割り当て処理で再利用できるようにする。
本実施形態では、ステップ７１０で、複数の出力ポート２０６がバッファを戻すよう要求する。ステップ７２０で、アービタ４７０は処理する要求を選択する。
ステップ７３０で、バッファ・カウントを更新して、１つ小さい出力ポート２０６がバッファを所有しているという事実を反映させる。たとえば、読込み／修正／書込み操作を実行してバッファ・カウントを減分することができる。
ステップ７４０で、バッファが現在空いている場合、処理はステップ７５０から継続する。このバッファへのポインタが出力キューのどれかで保留になっている出力ポート２０６がなければバッファは空いている。一実施形態では、バッファはカウント・フィールドが減分されて０になることに基づいて空いていると判断される。ただし、他の実施形態では、他の表示を使用することもできる。
ステップ７５０で、現在のバッファが属しているバッファの組に対応するタグが更新され、このバッファの組の中のバッファを使用できるかどうかを示す。一実施形態では、バッファの組ごとに単一のビットを格納するタグ・アレイを採用している。
共用メモリ管理のための方法と装置の例を説明してきたが、次に構成要素間のインタフェースについて説明する。
バッファ・マネージャ／入力ポート・インタフェース
一実施形態によれば、以下の信号を使用して、バッファ・マネージャ３２５と入力ポート２０６の間のハンドシェークを実現することができる。
（１）Ｂｒ＿Ｐｔｒ＿ＩＰ−入力ポート・バッファ・ポインタ・データ・バスのバス要求
この信号は、入力ポート２０６によってバッファ・マネージャ３２５に対しアサートされる。入力パケット受信中の適切な時期に、入力ポート２０６はこの信号をアサートして、バッファ・ポインタが必要であることをバッファ・マネージャ３２５に指示する。それへの応答としてバス要求肯定応答（以下のＢｒ＿Ｐｔｒ＿ＩＰ＿Ａｃｋを参照）がバッファ・マネージャ３２５によってアサートされることが期待される。
（２）Ｂｒ＿Ｐｔｒ＿ＩＰ＿Ａｃｋ−バッファ・ポインタ肯定応答
この信号は、バッファ・マネージャ３２５によってバッファ・ポインタを受信する入力ポート２０６に対しアサートされる（以下のＢｒ＿Ｐｔｒ＿Ｄａｔａ＿ＢＭ＿ｔｏ＿ＩＰ［Ｘ：０］を参照）。この信号は、バッファ・ポインタ要求に対し肯定応答を送るものである（上のＢｒ＿Ｐｔｒ＿ＩＰを参照）。バッファ・マネージャ３２５は、入力ポートのさまざまな要求のアービトレーションを行い、バス要求肯定応答とバッファ・ポインタを同じサイクルで駆動する。
（３）Ｂｒ＿Ｐｔｒ＿Ｄａｔａ＿ＢＭ＿ｔｏ＿ＩＰ［Ｘ：０］−バッファ・マネージャから入力ポート・バッファ・ポインタへのデータ・バス
このデータ・バスは、すべての入力ポート２０６によって共有されている。バス要求肯定応答（上のＢｒ＿Ｐｔｒ＿ＩＰ＿Ａｃｋを参照）を受信した入力ポート２０６にバッファ・ポインタを着信パケットに使用することを指示する。
（４）Ｂｒ＿Ｃｏｕｎｔ−カウント・データ・バスのバス要求
この信号は、入力ポート２０６によってバッファ・マネージャ３２５に対しアサートされる。入力ポート２０６は、スイッチ構造２１０から受信した中継決定に基づいてパケットを受信する出力ポートの個数を決定する。入力ポート２０６はこの信号をアサートして、バッファ・ポインタのポートの数が使用できる状態にあることをバッファ・マネージャ３２５に指示する。それへの応答としてバス要求肯定応答（下のＢｒ＿Ｃｏｕｎｔ＿Ａｃｋを参照）がバッファ・マネージャ３２５によってアサートされることが期待される。
（５）Ｂｒ＿Ｃｏｕｎｔ＿Ａｃｋ−バッファ・カウント肯定応答
この信号は、バッファ・マネージャ３２５によって、特定のバッファ・ポインタのポートの個数（以下のｎｔ［Ｙ：０］を参照）を与える入力ポート２０６に対しアサートされる（以下のＢｒ＿Ｐｔｒ＿Ｄａｔａ＿ＩＰ＿ｔｏ＿ＢＭ［Ｘ：０］を参照）。この信号は、カウント・データ・バス要求（上のＢｒ＿Ｃｏｕｎｔを参照）に対し肯定応答するものである。バス・マネージャ３２５は、入力ポートのさまざまな要求のアービトレーションを行い、アービトレーションによって選択された入力ポート２０６へのバス要求肯定応答を駆動する。
（６）Ｄｒｏｐｐｅｄ＿Ｐｔｒｓ−ポインタを受信できなかったポートの数
この信号は、入力ポート２０６によって、バッファ・マネージャ３２５に対してアサートされる。何らかの条件（たとえば、出力キューが満杯）により、入力ポート２０６がバッファ・ポインタを中継決定で指示されたすべての出力ポート２０６に送ることができない場合、入力ポート２０６はポートの数を伝送するときにこの情報をバッファ・マネージャ３２５に伝送する。バッファ・マネージャ３２５は、指示されているバッファ・ポインタを所有する出力ポートの個数を格納するときにこれを考慮する。
（７）Ｂｒ＿Ｐｔｒ＿Ｄａｔａ＿ＩＰ＿ｔｏ＿ＢＭ［Ｘ：０］−入力ポートからバッファ・マネージャ・バッファ・ポインタへのデータ・バス
このデータ・バスは、すべての入力ポート２０６によって共有される。これは、ポートの数（下のＣｎｔ［Ｙ：０］を参照）が伝送される際のバッファ・ポインタをバッファ・マネージャ３２５に指示する。
（８）Ｃｎｔ［Ｙ：０］−ポートのカウント
このデータは・バスは、すべての入力ポート２０６によって共有される。これは、バッファ・ポインタ（上のＢｒ＿Ｐｔｒ＿Ｄａｔａ＿ＩＰ＿ｔｏ＿ＢＭ［Ｘ：０］を参照）の転送先のポートの数をバッファ・マネージャに指示する。
バッファ・マネージャ／出力ポート・インタフェース
一実施形態によれば、次の信号を使用してバッファ・マネージャ３２５と出力ポート２０６との間のハンドシェークを実施することができる。
（１）Ｂｒ＿Ｐｔｒ＿ＯＰ−出力ポート・バッファ・ポインタ・データ・バスのバス要求
この信号は、出力ポート２０６によってバッファ・マネージャ３２５に対してアサートされる。出力パケット処理中の適切な時期に、出力ポート２０６はこの信号をアサートして、バッファ・ポインタが戻されていることをバッファ・マネージャ３２５に指示する。それへの応答としてバス要求肯定応答（下のＢｒ＿Ｐｔｒ＿ＯＰ＿Ａｃｋを参照）はバッファ・マネージャ３２５によってアサートされることが期待される。
（２）Ｂｒ＿Ｐｔｒ＿Ｄａｔａ＿ＯＰ＿ｔｏ＿ＢＭ［Ｘ：０］−出力ポートからバッファ・マネージャへのバッファ・ポインタ・データ・バス
このデータ・バスは、すべての出力ポート２０６によって共有されている。バッファ・ポインタが戻されていることをバッファ・マネージャ３２５に指示する。対応するバッファに格納されているデータを送信した後、出力ポート２０６はバッファ・ポインタを戻す。
（３）Ｂｒ＿Ｐｔｒ＿ＯＰ＿Ａｃｋ−バッファ要求肯定応答
この信号は、バッファ・マネージャ３２５によって、そのバッファ・ポインタを戻す出力ポート２０６に対してアサートされる（上のＢｒ＿Ｐｔｒ＿Ｄａｔａ＿ＯＰ＿ｔｏ＿ＢＭ［Ｘ：０］を参照）。この信号は、バス要求に対して肯定応答するものである（上のＢｒ＿Ｐｔｒ＿ＯＰを参照）。バッファ・マネージャ３２５は出力ポート２０６のさまざまな要求のアービトレーションを行い、アービトレーション・ロジックによって選択された出力ポート２０６へのバス要求肯定応答を駆動する。
入力ポート／出力ポート・インタフェース
一実施形態によれば、以下の信号を使用して入力ポート２０６から出力ポート２０６にパケット所有権を移転することができる。
（１）Ａｒｂ＿ＯＰ＿Ｐｔｒ−アービトレーションが行われた出力ポート・バッファ・ポインタ・データ・バス
この多重化データ・バスは、出力バス・アービタによって駆動される。これは、バッファ・ポインタ所有権情報の伝送のためすべての出力ポート２０６によって共有される。
（２）ＯＰ＿Ｑｕｅ＿Ｆｕｌｌ−出力ポート・キュー満杯
この信号は、出力ポート２０６によって入力ポート２０６に対してアサートされる。この信号は、パケット・ポインタをブロードキャストするときにフィルタ処理決定を下すために入力ポート２０６によって使用される。つまり、指定された出力ポート２０６にパケットを中継し、出力ポートのキューが満杯であることを中継決定が示している場合、パケット・ポインタはその出力ポート２０６には伝送されず、バッファ・マネージャ３２５に取りこぼしたパケット・ポインタ（上のＤｒｏｐｐｅｄ＿Ｐｔｒｓを参照）を通知することができる。それとは別に、バッファ・マネージャ３２５に対しては単に、特定のパケット・ポインタを与えられた出力ポートの総数を通知できるだけである。
例として、出力キューを１つだけ仮定している。ただし、他の実施形態では、複数の出力キューをそれぞれの出力ポート２０６について採用することもできる。この場合、追加出力キューごとにキュー満杯表示を用意することができる。
こうして、パケット・メモリの共有プールに受信パケットの一時記憶領域を確保し、与えられたポートを介するトラフィックの量に比例するポートごとのバッファリングを効率よく割り当てるバッファリング・アーキテクチャについて説明した。
明細書では、特定の実施形態に関して本発明を説明した。しかし、本発明の広範な精神と範囲から逸脱することなくさまざまな修正および変更を加えられることは明白であろう。したがって明細書と図面は、制限を目的とするものではなく説明を目的とするものであるとみなされる。
【図１】
0004091665.tif 000003
【図２】
0004091665.tif 000004
【図３Ａ】
0004091665.tif 000005
【図３Ｂ】
0004091665.tif 000006
【図４】
0004091665.tif 000007
【図５】
0004091665.tif 000008
【図６】
0004091665.tif 000009
【図７】
0004091665.tif 000010