(57)【要約】【課題】高速なシリアル相互接続に必要なスイッチング速度及びスケーラビリティをもたらすシステム及び論理装置を提供すること。【解決手段】本発明の特定の実施例では、スイッチングする環境でパケットを選別する方法が用意される。特定の実施例では、本方法はメモリ及び１つ以上の出力ポートを有するスイッチの入力ポートでパケットを受信する。本方法は、パケットの少なくとも一部をメモリに格納し、パケットがスイッチから伝送される際の１つ以上の出力ポートを確認する。本方法はパケットがスイッチから伝送される際の１つ以上の出力ポートを決定し始めた後に、パケットが正当でないパケットであるか否かを確認する。本方法は、パケットが正当でないパケットであった場合に、パケットをメモリから除外し、パケットが正当なパケットであった場合に、決定された１つ以上の出力ポートからパケットを伝送する。【選択図】図１
2008042915.tif 000002
【特許請求の範囲】
【請求項１】
スイッチングする環境でパケットを選別する方法であって、
メモリ及び１つ以上の出力ポートを有するスイッチの入力ポートでパケットを受信するステップと、
前記パケットの少なくとも一部を前記メモリに格納するステップと、
前記パケットが前記スイッチから伝送される際の１つ以上の出力ポートを確認するステップと、
前記パケットが前記スイッチから伝送される際の１つ以上の出力ポートを決定し始めた後に、前記パケットが正当でないパケットであるか否かを確認するステップと、
前記パケットが正当でないパケットであった場合に、前記パケットを前記メモリから除外するステップと、
前記パケットが正当なパケットであった場合に、前記決定された１つ以上の出力ポートから前記パケットを伝送するステップと、
を有する方法。
【請求項２】
前記メモリが複数のブロックに論理的に細分され、当該方法は到来するパケットの格納に備えて１つ以上のブロックを各入力ポートに割り当てるステップを更に有し、前記パケットを受信する前記入力ポートに割り当てられる１つ以上のブロックは、受信されたパケットを格納するために割り当てられる請求項１記載の方法。
【請求項３】
前記スイッチがドロップキューを更に有し、前記パケットを前記メモリから除外するステップが、
前記ドロップキューにドロップリクエストを送信するステップと、
前記ドロップキュー内のドロップリクエストに関連するパケットを格納するために割り当てられていたメモリ内のブロックを解放し、解放されたメモリのブロックを１つ以上の入力ポートに再び割り当てることを許可し、解放されたメモリのブロックで１つ以上の他のパケットの格納に備えるステップと、
を有する請求項２記載の方法。
【請求項４】
コンピュータ読取可能な媒体にエンコードされる論理装置であって、
メモリ及び１つ以上の出力ポートを有するスイッチの入力ポートでパケットを受信するステップと、
前記パケットの少なくとも一部を前記メモリに格納するステップと、
前記パケットが前記スイッチから伝送される際の１つ以上の出力ポートを確認するステップと、
前記パケットが前記スイッチから伝送される際の１つ以上の出力ポートを決定し始めた後に、前記パケットが正当でないパケットであるか否かを確認するステップと、
前記パケットが正当でないパケットであった場合に、前記パケットを前記メモリから除外するステップと、
前記パケットが正当なパケットであった場合に、前記決定された１つ以上の出力ポートから前記パケットを伝送するステップと、
をコンピュータに実行させる論理装置。
【請求項５】
スイッチングする環境でパケットを選別するシステムであって、
パケットを受信するスイッチの入力ポートであって、該入力ポートは入力ポートモジュールに関連する入力ポートと、
前記パケットの少なくとも一部を格納する前記スイッチのメモリと、
前記スイッチの１つ以上の出力ポートを決定する前記スイッチのルーティングモジュールであって、前記パケットは前記スイッチの前記１つ以上の出力ポートから伝送され、前記パケットが前記スイッチから伝送される際の前記１つ以上の出力ポートを前記ルーティングモジュールが決定し始めた後に、前記入力ポートモジュールは、前記パケットが正当でないパケットであるか否かを決定するルーティングモジュールと、
ドロップキューを有し、前記パケットが正当でないパケットであった場合に、前記メモリから前記パケットの少なくとも一部を除外する前記スイッチのセントラルエージェントと、
前記パケットが正当なパケットであり、前記１つ以上の出力ポートが前記ルーティングモジュールにより決定された場合に、前記スイッチから前記パケットを伝送する前記スイッチの１つ以上の出力ポートと、
を有するシステム。
【請求項６】
前記パケットが正当でないパケットであるか否かを確認することが、前記パケットは最低限必要なバイト数未満のバイトで構成されるか否かを確認することを含む請求項５記載のシステム。
【請求項７】
前記入力ポートモジュールは、前記パケットが正当でないパケットであるか否かを確認した後で、該パケットが正当でないパケットであるか否かを識別するフラグを発行し、前記ルーティングモジュールは、前記パケットが前記スイッチから伝送される際の前記１つ以上の出力ポートが決定されるまで、前記フラグをバッファリングし、前記ルーティングモジュールは、前記パケットを除去する又は前記パケットを前記決定された出力ポートから伝送するか否かを前記フラグを用いて確認する請求項５記載のシステム。
【請求項８】
前記メモリが複数のブロックに論理的に細分され、前記セントラルエージェントは、到来するパケットの格納に備えて１つ以上のブロックを各入力ポートに割り当て、前記パケットを受信する前記入力ポートに割り当てられる１つ以上のブロックは、受信されたパケットを格納するために割り当てられる請求項５記載のシステム。
【請求項９】
前記ルーティングモジュールは、前記パケットが正当でないパケットであった場合に  前記ドロップキューにドロップリクエストを送信し、前記メモリから前記パケットを除外することは、前記ドロップキュー内のドロップリクエストに関連するパケットを格納するために割り当てられていたメモリ内のブロックを解放し、解放されたメモリのブロックを１つ以上の入力ポートに再び割り当てることを許可し、解放されたメモリのブロックで１つ以上の他のパケットの格納に備える請求項８記載のシステム。
【請求項１０】
前記メモリが複数のブロックに論理的に細分され、前記セントラルエージェントは、メモリの少なくとも第１ブロック及び第２ブロックを、前記パケットを格納するために前記入力ポートに割り当て、前記パケットが正当でないパケットであった場合に、
前記ルーティングモジュールは、前記第１ブロックのドロップリクエストを前記ドロップキューに送信し、
前記入力ポートモジュールは、前記第２ブロックのドロップリクエストを前記ドロップキューに送信せずに、別のパケットを格納するために前記第２ブロックを再利用する請求項５記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般に通信システムに関連し、特にスイッチングする環境でパケットを選別することに関する。
【背景技術】
【０００２】
高速なシリアル相互接続が通信環境で益々一般化しつつある。その結果、これらの環境でスイッチが演じる役割は益々重要になってきている。しかしながら従来のスイッチは、これらの相互接続に一般に必要とされるスイッチング速度及びスケーラビリティを十分にもたらしてはいない。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
高速なシリアル相互接続に必要なスイッチング速度及びスケーラビリティをもたらすシステム及び論理装置を提供することである。
【課題を解決するための手段】
【０００４】
本発明の特定の実施例は、スイッチング環境で共有されるメモリリソースに付随する従来の欠点及び問題点を軽減又は解消する。
【０００５】
本発明の特定の実施例では、スイッチングする環境でパケットを選別する方法が用意される。特定の実施例では、本方法はメモリ及び１つ以上の出力ポートを有するスイッチの入力ポートでパケットを受信するステップを含む。本方法は、前記パケットの少なくとも一部を前記メモリに格納するステップと、前記パケットが前記スイッチから伝送される際の１つ以上の出力ポートを確認するステップとを含む。本方法は前記パケットが前記スイッチから伝送される際の１つ以上の出力ポートを決定し始めた後に、前記パケットが正当でないパケットであるか否かを確認するステップを更に有する。本方法は、前記パケットが正当でないパケットであった場合に、前記パケットを前記メモリから除外するステップと、前記パケットが正当なパケットであった場合に、前記決定された１つ以上の出力ポートから前記パケットを伝送するステップとを有する。
【発明を実施するための最良の形態】
【０００６】
本発明の特定の実施例は１つ以上の利点をもたらす。特定の実施例では、スイッチはショートパケットを選別し、そのショートパケットに割り当てられるメモリリソースの再割当を行い、それらのリソースをより効率的に活用するようにする。更に、特定の実施例はより効率的にパケットを選別し、それにより待ち時間(latency)を減らし、スイッチコアのスループットを増やす。特定の実施例は、スイッチのドロップキューをより効率的に利用することで待ち時間を減らしてもよい。ある実施例はこれらの利点の全部又は一部をもたらしてもよいし、全くもたらさなくてもよく、ある実施例は１つ以上の他の技術的利点をもたらし、これらのことは本願に含まれる明細書、特許請求の範囲及び図面から当業者に更に明白になるであろう。
【０００７】
本発明並びにその特徴及び利点の完全な理解を更に図るため、添付図面に関連する以下の詳細な説明が参照される。
【実施例１】
【０００８】
図１はシステムエリアネットワーク１０の一例を示し、システムエリアネットワークは、１つ以上のサーバーシステム１４の間で通信をサポートするシリアルな又は他の相互接続部１２と、１つ以上のストレージシステム１６と、１つ以上のネットワークシステム１８と、相互接続部１２を１つ以上の他のネットワークに接続する１つ以上のルーティングシステム２０とを含み、該１つ以上の他のネットワークは１つ以上のローカルエリアネットワーク(LAN)、広域ネットワーク(WAN)又は他のネットワークを含む。サーバーシステム１４各々は１つ以上の中央処理ユニット(CPU)及び１つ以上のメモリユニットを含む。ストレージシステム１６各々は１つ以上のチャネルアダプタ、１つ以上のディスクアダプタ及び１つ以上のCPUモジュールを含む。相互接続部１２は１つ以上のスイッチ２２を含み、そのスイッチは特定の実施例では以下で更に詳細に説明されるようなイーサーネットスイッチを含む。システムエリアネットワーク１０の構成要素は１つ以上のリンクを用いて互いに結合され、そのリンクの各々は１つ以上のコンピュータバス、ローカルエリアネットワーク(LAN)、メトロポリタンエリアネットワーク(MAN)、広域ネットワーク(WAN)、インターネット又は他の有線回線、光の、無線の若しくは他のリンクの一部を含んでもよい。システムエリアネットワーク１０は特定のコンフィギュレーションで互いに接続された特定の構成要素を含むように説明されるが、適切な如何なるコンフィギュレーションによってでも互いに結合された適切な如何なる構成要素も含んでよい適切な如何なるシステムエリアネットワークをも本発明は想定している。
【０００９】
図２はシステムエリアネットワーク１０のスイッチ２２の一例を示す。スイッチ２２は複数のポート２４及びスイッチコア２６を含む。ポート２４の各々はスイッチコア２６に及びシステムエリアネットワーク１０の構成要素（例えば、サーバーシステム１４、ストレージシステム１６、ネットワークシステム１８、ルーティングシステム２０又は別のスイッチ２２等）に結合される。第１ポート２４は、システムエリアネットワーク１０の第１構成要素からのパケットを受信し、そのパケットを第２ポートに切り替えるためにスイッチコア２６に伝送し、スイッチコアはシステムエリアネットワーク１０の第２構成要素にパケットを伝送する。パケットに関連するものは、パケット、データグラム、フレーム又は他のデータユニット等を適切に含んでもよい。スイッチコア２６は第１ポート２４からのパケットを受信し、以下で更に説明されるようにそのパケットを１つ以上の第２ポート２４に切り替える。特定の実施例では、スイッチ２２はイーサーネットスイッチを含む。特定の実施例では、スイッチ２２はワイヤの速度で又はその近辺でパケットを切り替えることができる。
【００１０】
図３は、スイッチ２２のスイッチコア２６の一例を示す。スイッチコア２６は、ポートモジュール２８、ストリームメモリ３０、タグメモリ３２、入力コントロールアンドセントラルエージェント(ICCA)３３、ルーティングモジュール３６及びスイッチングモジュール３７を含む。スイッチコア２６の構成要素は、バス又は他のリンクを用いて互いに結合される。特定の実施例ではスイッチコア２６が１つのICの中に組み込まれる。スイッチコア２６のデフォルトモードでは、システムエリアネットワーク１０の第１構成要素からスイッチコア２６によって受信されたパケットは、スイッチコア２６が全てのパケットを受信する前に、スイッチコア２６からシステムエリアネットワーク１０の１つ以上の第２構成要素に伝送可能である。特定の実施例では、カットスルーフォワーディング(cut-through  forwarding)は、ストアアンドフォワード(store-and-forward)法を上回る１つ以上の利点（例えば、短縮された待ち時間、削減されたメモリ制約及び増進したスループット等）をもたらす。スイッチコア２６は様々なアプリケーション用に構築可能である。非限定的な一例として、イーサーネットスイッチ２２（１０ギガビットイーサーネットスイッチ２２又は特定の実施例のイーサーネットスイッチ２２を含む）や、インフィニバンド(INFINIBAND)スイッチ２２や、3GIOスイッチ２２や、ハイパートランスポート(HYPERTRANSPORT)スイッチ２２や、ラピッド(RAPID)IOスイッチ２２や、ストレージシステム１６，ネットワークシステム１８又は双方のためのプロプリエタリバックボーンスイッチ２２や、他のスイッチ２２等に合わせてスイッチコア２６は構築可能である。スイッチコア２６は図示の例では１２個のポートモジュール２８を含んでいるが、スイッチコア２６は適切なポートモジュール２８をいくつでも含んでよいことに留意すべきである（例えば、２２個含んでもよい。）。
【００１１】
ポートモジュール２８はスイッチコア２６及びスイッチ２２のポート２４間のインターフェースをもたらす。ポートモジュール２８はポート２４、ストリームメモリ３０、タグメモリ３２、ICCA３３、ルーティングモジュール３６及びスイッチングモジュール３７に通信可能に結合される。特定の実施例では、ポートモジュール２８は入力ロジック（システムエリアネットワーク１０の構成要素からのパケットを受信するため及びパケットをストリームメモリ３０に書き込むために使用される）及び出力ロジック（ストリームメモリ３０からパケットを読み取るため及びパケットをシステムエリアネットワーク１０の構成要素に伝送するために使用される）の双方を含む。代替例として、特定の実施例では、ポートモジュール２８は入力ロジックのみを又は出力ロジックのみを含む。ポートモジュール２８に関連するものは、入力ロジック、出力ロジック又は双方を適切に含むポートモジュール２８を含んでもよい。ポートモジュール２８は到来するフロー(インバウンドフロー)制御用の入力バッファを含んでもよい。イーサーネットスイッチ２２では、インバウンドフロー制御にポーズ機能が使用可能であり、ポーズ機能は有効になるまで時間を稼ぐ。ポートモジュール２８の入力バッファはパケットの一時的なストレージに使用可能であり、そのパケットはポーズ機能が到来するパケットを止める前に送信される。インバウンドフロー制御用にクレジットが出される場合には入力バッファは必須ではないので、INFINIBANDスイッチ２２の場合のように、入力バッファは選択的になる。特定の実施例では、ストリームメモリ３０にポートモジュール２８を結合するリンクは２つのリンクを含み：その１つは書き込み処理用であり（ポートモジュール２８からストリームメモリ３０へデータが書き込まれる場合のスイッチコア２６の処理を含む）、もう１つは読取処理用である（ストリームメモリ３０からポートモジュール２８へデータが読み取られる場合のスイッチコア２６の処理を含む）。これらのリンクの各々は３６ビットを運ぶことができ、ポートモジュール２８及びストリームメモリ３０間のデータパスを双方向で３６ビット幅にする。
【００１２】
システムエリアネットワーク１０の第１構成要素から第１ポートモジュール２８により受信されたパケットは、第１ポートモジュール２８からストリームメモリ３０に書き込まれ、ストリームメモリ３０から１つ以上の第２ポートモジュール２８へ後に読み取られ、第２ポートモジュール２８からシステムエリアネットワーク１０の１つ以上の第２構成要素への伝送に備える。ポートモジュール２８により受信される又はそこから伝送されるパケットに関するものは、ポートモジュール２８により受信される又はそこから伝送されるパケット全体でもよいし、適切ならばポートモジュール２８により受信される又はそこから伝送されるパケットの一部分だけでもよい。同様に、ストリームメモリ３０に書き込まれる又はそこから読み取られるパケットに関連するものは、ストリームメモリ３０に書き込まれる又はそこから読み取られるパケット全体でもよいし、適切ならばストリームメモリ３０に書き込まれる又はそこから読み取られるパケットの一部分だけでもよい。入力ロジックを含む如何なるポートモジュール（入力ポートモジュール）２８もストリームメモリ３０に書き込み可能であり、出力ロジックを含む如何なるポートモジュール（入力ポートモジュール）２８もストリームメモリ３０から読み取り可能である。特定の実施例では、ポートモジュール２８は入力ロジック及び出力ロジック双方を含んでもよいし、入力ポートモジュール及び出力ポートモジュール双方を含んでもよい。特定の実施例では、ポートモジュール２８によりストリームメモリ３０を共有することはヘッドオブラインブロッキング(head-of-line  blocking)を排除し（これによりスイッチコア２６のスループットを増やし）、スイッチコア２６に関連するメモリの制約を減らし、ポートモジュール２８でスイッチコア２６がより効率的に負荷状態変化を取り扱えるようにする。
【００１３】
スイッチコア２６のシステムメモリ３０は論理的にブロック３８に分割され、図４に示されるようにワード４０に更に分割される。１つの行は１つのブロックを表し、行と列の交差点はブロック３８のワード４０を表す。特定の実施例では、ストリームメモリ３０は４０９６個のブロック３８に分割され、各ブロック３８は２４個のワード４０を含み、１ワード４０は７２ビットを含む。ストリームメモリ３０は特定数のブロック３８に分割され、ブロックは特定のビット数を含む特定数のワード４０に分割されるように説明及び図示されているが、ストリームメモリ３０が適切な如何なる数のブロック３８にも分割されてよく、ブロックは適切な如何なるビット数をも含む適切な如何なる数のワードに分割されてもよいことを本発明は想定している。パケットサイズはパケット毎に可変である。ブロック３８と同数の又はそれより少数のビットを含むパケットが１つのブロック３８に書き込まれてよいし、ブロック３８より多くのビットを含むパケットが１つより多くのブロック３８に書き込まれてもよい（ブロックが互いに隣接していることは必須でない。）。
【００１４】
ブロック３８に書き込む場合又はそこから読み出す場合、ポートモジュール２８はブロック３８のどのワード４０からでも開始可能であり、ブロック３８のワード４０から順番に書き込み又は読み出しを行うことができる。ポートモジュール２８は、ブロック３８に書き込む又はそこから読み出す場合に、最初のワード４０に向けて巡回することもできる。ブロック３８は或るアドレスを有し、そのアドレスは書込処理又は読取処理でブロック３８を特定するのに使用可能であり、書込処理又は読取処理でブロック３８中のワード４０を特定するために或るオフセットが使用されてもよい。一例として４１７６ビット長のパケットを考察する。パケットは５８個のワード４０（１ワード７２ビット）に書き込まれ、ブロック３８ａのワード４０ｆから始まり、ブロック３８ｂを除外し、ブロック３８ｄのワード４０ｋのワード４０ｋに続く。書込処理では、ブロック３８ａのワード４０ｆは第１アドレス及び第１オフセットで特定され、ブロック３８ｃのワード４０ｆは第２アドレス及び第２オフセットで特定され、ブロック３８ｄのワード４０ｆは第３アドレス及び第３オフセットで特定される。ブロック３８ａのワード４０ｆから始まり、ブロック３８ｂを除外し、ブロック３８ｄのワード４０ｋのワード４０ｋに続くストリームメモリ３０からパケットが読み出し可能である。読取処理でも、ブロック３８ａのワード４０ｆは第１アドレス及び第１オフセットで特定され、ブロック３８ｃのワード４０ｆは第２アドレス及び第２オフセットで特定され、ブロック３８ｄのワード４０ｆは第３アドレス及び第３オフセットで特定される。
【００１５】
タグメモリ３２はリンクした複数のリストを含み、例えば第１ポートモジュール２８が書込を行う次のブロック３８を決めるためにセントラル入力コントロールモジュール３５により、及び第２ポートモジュール２８が読取を行う次のブロック３８を決めるために例えば第２ポートモジュール２８により、その複数のリストの各々が使用可能である。以下で更に説明されるようにポートモジュール２８からストリームメモリ３０への書込処理に備えて、ポートモジュール２８にとって利用可能な次のブロック３８を、セントラルエージェント３４が決定するのに使用可能な連結したリストをタグメモリ３２は含む。タグメモリ３２は複数のエントリを含み、その複数のエントリの少なくともいくつかの各々はストリームメモリ３０のブロック３８に対応する。ストリームメモリ３０の各ブロック３８は、タグメモリ３２の中に対応するエントリを含む。タグメモリ３２の中のエントリは、タグメモリ３２内の別のエントリを指すポインタを含むことが可能であり、その結果リンクしたリストになる。
【００１６】
ポートモジュール２８からストリームメモリ３０への書込処理に備えて、ポートモジュール２８にとって利用可能なブロック３８に対応するタグメモリ３２内のエントリは、共にリンクすることが可能であり、ポートモジュール２８が書き込む次のブロック３８が、そのリンクしたエントリを用いて決定可能になるようにする。ポートモジュール２８からストリームメモリ３０への書込処理に備えて、あるブロック３８がポートモジュール２８にとって利用可能にされた場合、ブロック３８に対応するタグメモリ３２中のエントリは、ポートモジュール２８が書き込んでよい次のブロック３８を決定するのに使用されるリンクしたリストに追加可能である。
【００１７】
第１ポートモジュール２８が書き込んでよい次のブロック３８を決定するのに使用されるタグメモリ３２中のリンクしたリストは、次の読取元のブロック３８を決定するために１つ以上の第２ポートモジュール２８により使用可能でもある。一例として、上述のリンクしたリストを考察する。パケットの第１部分は第１ポートモジュール２８から第１ブロック３８へ書き込まれ、パケットの第２部分は第１ポートモジュール２８から第２ブロック３８へ書き込まれ、パケットの第３部分は第１ポートモジュール２８から第３ブロック３８へ書き込まれる。エンドマーク(終了の印)が第３ブロック３８に書き込まれ、パケットの最後の部分が第３ブロック３８に書き込まれていることを示してもよい。第２ポートモジュール２８は第１ブロック３８から読取を行い、第２ポートモジュール２８は第１ブロック３８から読取を行い、第１エントリ中のポインタを用いて次の読取元のブロック３８を決定してもよい。ポインタは第２ポートモジュール２８に第２ブロック３８を参照させ、第２ポートモジュール２８は第１ブロック３８からの読取を終了すると、第２ポートモジュール２８は第２ブロック３８から読取を行う。第２ポートモジュール２８が第２ブロック３８から読取を行っている間、第２ポートモジュール２８は第２エントリ内のポインタを用いて次に読み取るブロック３８を確認する。ポインタは第２ポートモジュール２８に第３ブロック３８を参照させ、第２ポートモジュール２８は第２ブロック３８からの読取を終了すると、第２ポートモジュール２８は第３ブロック３８から読取を行う。第２ポートモジュール２８は第３ブロック３８から読取を行い、第３ブロック３８内のエンドマークを用いて、パケットの最終部分が第３ブロックに書き込まれていることを確認する。タグメモリ３２内のリンクしたリストは、次に書き込むブロック３８を判定するために１つより多くの第１ポートモジュール２８で使用することはできないが、次に読み込むブロック３８を判定するために、リンクしたリストは１つより多くの第２ポートモジュール２８で使用することができる。
【００１８】
様々なパケットは様々な宛先を含むことができ、ストリームメモリ３０を介してパケットが進行する順序は先入れ先出し(FIFO)方式でなくてもよい。例えば、第２パケットが受信されて１つ以上の第２ブロックに書き込まれる前に、第１パケットが受信されて１つ以上の第１ブロックに書き込まれる場合を考える。第２パケットは第１パケットより先にストリームメモリ３０から読取可能であり、第２ブロック３８は第１ブロック３８より先に別の書込処理に利用可能になってもよい。特定の実施例では、パケットの指定されたポートモジュール２８である全てのポートモジュール２８によってパケットがブロック３８から読み取られた直後に、ポートモジュール２８からブロック３８への書込処理に備えて、パケットが書き込まれるストリームメモリ３０のブロックが、ポートモジュール２８にとって利用可能にされてもよい。パケットの指定されたポートモジュール２８は、システムエリアネットワーク１０の構成要素に結合されたポートモジュール２８を含み、その構成要素はスイッチコア２６より下流側にあり、パケットの最終的な又は中間的な宛先である。
【００１９】
書込処理を管理するのにクレジットを利用することは、特別な恩恵をもたらすかもしれない。例えば、クレジットを利用することはスイッチコア２６によるカットスルーフォワーディングを促し、レイテンシを減らし、スループットを増やし、スイッチコア２６に関連するメモリ制約条件を減らす。書込処理を管理するのにクレジットを利用することは、ヘッドオブラインブロッキングの問題も解消することができ、ポートモジュール２８での負荷条件変動に応じて、ポートモジュール２８間でメモリリソースを分配する際の多大な柔軟性をもたらす。クレジットは、ストリームメモリ３０のブロックに関連し、ブロック３８に書込を行うポートモジュール２８で利用可能である。クレジットは、クレジットのプール（クレジットプール）の中からポートモジュール２８に割り当てられることが可能であり、割当はセントラルエージェント３４によって管理される。ポートモジュール２８に割り当てられるクレジットに関連するものは、ポートモジュール２８からブロック３８へ及びその逆への書込動作用にポートモジュール２８に利用可能にされるクレジットに対応するブロック３８を含む。
【００２０】
クレジットプール中のクレジットは如何なるポートモジュール２８に割り当てられてもよく、何らかの特定のポートモジュール２８に割り当てられることは必須でない。ポートモジュール２８はポートモジュール２８にとって利用可能なクレジットのみを利用でき、別のポートモジュール２８に利用可能なクレジット又はクレジットプール中にある(未割当の)クレジットを利用できない。クレジットは、そのクレジットがポートモジュール２８に割り当てられ、ポートモジュール２８がそのクレジットを未だ使用してない場合にポートモジュール２８にとって利用可能である。ポートモジュール２８に割り当てられたクレジットは、ポートモジュール２８がそのクレジットを使用するまで、ポートモジュール２８にとって利用可能である。クレジットは一度に１つより多くのポートモジュール２８に割り当てられるはずはなく、クレジットは同時に１つより多くのポートモジュール２８に利用可能になるはずもない。特定の実施例では、第１ポートモジュール２８はクレジットに対応するブロック３８にパケットを書き込むためにクレジットを利用する場合、パケットの全ての指定されたポートモジュール２８がブロック３８からパケットを読み込んだ直後に、そのクレジットはクレジットプールに戻される。
【００２１】
ICCA３３はセントラルエージェント３４及びセントラル入力制御モジュール３５を含む。セントラルエージェント３４はクレジットプールからクレジットをポートモジュール２８に割り当てる。一例として、セントラルエージェント３４は、ポートモジュール２８に所定数のクレジットの初期割当を行うことができる。セントラルエージェント３４はポートモジュール２８に対するクレジットのこの初期割当を、例えばスイッチコア２６の起動時点で又はスイッチコア２６のリセットに応答して実行可能である。別の例として、セントラルエージェント３４は、ポートモジュール２８が使用したクレジットを、別のクレジットで置き換えるようにポートモジュール２８に割り当てることができる。特定の実施例では、ポートモジュール２８が第１クレジットを利用した場合、ポートモジュール２８がその第１クレジットを使用したことをポートモジュール２８がセントラルエージェント３４に通知し、ポートモジュール２８がその第１クレジットを使用したことをポートモジュール２８がセントラルエージェント３４に通知したことに応答して、セントラルエージェント３４は第２クレジットをポートモジュール２８に割り当ててその第１クレジットを置換し、例えばポートモジュール２８により使用されているブロック３８の数が適用可能な限界になっていない又はそれを越えていない場合に行われる。特定の実施例では、パケットの受領後ポートモジュール２８により要求されるまで、セントラルエージェント３４はICCA３３のセントラル入力制御モジュール３５にポート割当済みクレジットを格納することができる。
【００２２】
ポートモジュール２８で使用されているブロック３８に関連するものは或るブロックを含むことに留意すべきであり、そのブロックにパケットはポートモジュール２８から書き込まれ、そのブロックからは、パケットの指定された全てのポートモジュール２８はパケットを読み取ってないものである。適用可能な限界に至るまで、ポートモジュール２８で使用されるクレジットを置換することで、ポートモジュール２８に利用可能なクレジット数は比較的一定に維持され、ポートモジュール２８での負荷状態が変わった場合、ポートモジュール２８での負荷状態の増加に応じて、より多くのブロック３８がポートモジュール２８に供給可能である。ポートモジュール２８で使用される多数のブロックに或る状況で或る制限が適用され、ポートモジュールが過剰に多くのブロック３８を利用し、過剰に多くの共有メモリリソースを使用し尽くしてしまうことを防いでもよい。この制限はクレジットプール中のクレジット数に基づいて動的に制御されてもよい。クレジットプール中のクレジット数が減少すると、その制限も減少してよい。制限の計算や、クレジットがポートモジュール２８に割り当てられる際に従うプロセスは、スイッチコア２６を介するパケットのクリティカルパス以外で実行されてもよく、そうすることはスイッチコア２６のスイッチング速度の向上に寄与する。
【００２３】
タグメモリ３２内のリンクしたリストは、ポートモジュール２８に割当可能な次のクレジットを決めるのにセントラルエージェント３４で使用可能である。リンクしたリスト中の要素は、ブロック３８に対応するタグメモリ３２中のエントリを含むことができ、そのエントリはクレジットプール中のクレジットに対応する。一例として、クレジットプール中に４つのクレジットがあるとする。第１クレジットは第１ブロック３８に対応し、第２クレジットは第２ブロック３８に対応し、第３クレジットは第３ブロック３８に対応し、第４クレジットは第４ブロック３８に対応する。第１ブロック３８に対応するタグメモリ３２内の第１エントリは第２ブロック３８を指すポインタを含み、第２ブロック３８に対応するタグメモリ３２内の第２エントリは第３ブロック３８を指すポインタを含み、第３ブロック３８に対応するタグメモリ３２内の第３エントリは第４ブロック３８を指すポインタを含む。セントラルエージェント３４は第１クレジットをポートモジュール２８に割り当て、セントラルエージェント３４が第１クレジットをポートモジュール２８に割り当てる場合、第１エントリ中のポインタを利用して、ポートモジュール２８に割り当てる次のクレジットを確認する。ポインタはセントラルエージェント３４に第２ブロック３８を参照させ、セントラルエージェント３４が第１クレジットをポートモジュール２８に割り当て終えた場合に、セントラルエージェント３４は第２クレジットをポートモジュール２８に割り当てる。セントラルエージェント３４が第２クレジットをポートモジュール２８に割り当てる場合、セントラルエージェント３４は第２エントリ中のポインタを利用して、ポートモジュール２８に割り当てる次のクレジットを確認する。ポインタはセントラルエージェント３４に第３ブロック３８を参照させ、セントラルエージェント３４が第２クレジットをポートモジュール２８に割り当て終えた場合に、セントラルエージェントは第３クレジットをポートモジュール２８に割り当てる。セントラルエージェント３４が第３クレジットをポートモジュール２８に割り当てる場合、セントラルエージェント３４は第３エントリ中のポインタを利用して、ポートモジュール２８に割り当てる次のクレジットを確認する。ポインタはセントラルエージェント３４に第４ブロック３８を参照させ、セントラルエージェント３４が第３クレジットをポートモジュール２８に割り当て終えた場合に、セントラルエージェントは第４クレジットをポートモジュール２８に割り当てる。
【００２４】
ブロック３８に対応するクレジットがクレジットプールに戻された場合、ブロック３８に対応するタグメモリ３２中のエントリはリンクしたリストの最後に追加可能であり、セントラルエージェント３４はポートモジュール２８に割り当てる次のクレジットを決定するためにそのリストを利用する。一例として上記のリンクしたリストを考察する。第４エントリがリンクしたリストの最終要素であった場合、第５ブロック３８に対応する第５エントリがクレジットプールに追加されたならば、第５ブロック３８に対応するタグメモリ３２内の第５エントリを指すポインタを含めるように第４エントリが修正される。タグメモリ３２中のエントリ各々はストリームメモリ３０のブロック３８に対応するので、ブロック３８を指すポインタもタグメモリ３２内のエントリを指す。
【００２５】
ポートモジュール２８が到来するパケットを受信すると、そのパケットをストリームメモリ３０に書き込むのに十分なクレジットがポートモジュール２８にとって利用可能か否かをポートモジュール２８は判別する。ポートモジュール２８はそれを行うのに例えば、ポートモジュール２８が書込に利用可能なクレジット数を示すセントラルエージェント３４のカウンタを読んでもよい。或いは、ポートモジュール２８はセントラルエージェント３４から自動的にその情報を受信してもよい。特定の実施例では、パケットをストリームメモリ３０に書き込むのに十分なクレジットがポートモジュール２８に利用可能であったならば、ポートモジュール２８は１つ以上のクレジットを用いてパケットをストリームメモリ３０に書き込むことができる。特定の実施例では、パケットをストリームメモリ３０に書き込むのに十分なクレジットがポートモジュール２８に利用可能でなかったならば、ポートモジュール２８はそのパケットを入力バッファに書き込むことができ、後に、パケットをストリームメモリ３０に書き込むのに十分なクレジットがポートモジュール２８に利用可能になった場合に、１つ以上のクレジットを用いてパケットをストリームメモリ３０に書き込む。ポートモジュール２８がパケットを入力バッファに書き込む代替例として、ポートモジュール２８はそのパケットを落とす(ドロップする)こともできる。特定の実施例では、パケットの一部分のみをストリームメモリ３０に書き込む程度に十分なクレジットしかポートモジュール２８に利用可能でなかった場合、ポートモジュール２８は、１つ以上のクレジットを利用して、ストリームメモリ３０に書込可能なパケットのその部分をストリームメモリ３０に書き込み、パケットの１つ以上の他の部分を入力バッファに書き込んでもよい。後に、パケットの１つ以上の他の部分をストリームメモリ３０に書き込むのに十分なクレジットがポートモジュール２８に利用可能になった場合に、１つ以上のクレジットを用いて、ポートモジュール２８は１つ以上の他のパケットの部分をストリームメモリ３０に書き込む。特定の実施例では、カットスルーフォワーディングのような遅延したカットスルーフォワーディングが、ストアアンドフォワード法を上回る１つ以上の恩恵（例えば、レイテンシの短縮、メモリ制限の減少及びスループットの向上等）をもたらす。パケットをストリームメモリ３０に書き込むのに十分なクレジットがポートモジュール２８にとって利用可能な否かを判別するポートモジュール２８に関するものは、全てのパケットをストリームメモリ３０に書き込むこと、パケットの受信した部分のみをストリームメモリ３０に書き込むこと又はパケットの少なくとも一部分をストリームメモリ３０に書き込むことに十分なクレジットがポートモジュール２８にとって利用可能な否かを判別するポートモジュール２８を含む。
【００２６】
特定の実施例では、到来するパケットの長さは、パケット全体が受信されるまで知ることができない。このような例の場合、(適用可能な一群の規格に従って)最大送信単位(ユニット)が使用され、ポートモジュール２８で受信された到来パケットをストリームメモリ３０に書き込むのに十分なクレジットがポートモジュール２８にとって利用可能か否かを判別する。電気電子技術者協会(IEEE)で公表されている一群の規格(スタンダード)によると、イーサーネットフレームの最大送信ユニット(MTU)は１５１８バイトである。事実上の規格によれば、イーサーネットフレームのMTUは９０００バイトである。非限定的な具体例として、到来するパケットの一部しか受信できないポートモジュール２８を考察する。ポートモジュール２８は(適用可能な一群の規格に従う)MTUを利用し、パケット全体をストリームメモリ３０に書き込むのに十分なクレジットがポートモジュール２８に利用可能か否かを判別する。ポートモジュール２８は、MTUとポートモジュール２８に利用可能なクレジット数とを比較することでその判別を行ってもよい。パケット全体をストリームメモリ３０に書き込むのに十分なクレジットがポートモジュール２８に利用可能であった場合、ポートモジュール２８は、パケットの受信した部分を１つ以上のクレジットを用いてストリームメモリ３０に書き込み、ポートモジュール２８がパケットの１つ以上の他の部分を受信した場合に、１つ以上のクレジットを用いてパケットの１つ以上の他の部分をストリームメモリ３０に書き込んでもよい。
【００２７】
上述したように、セントラルエージェント３４は、ポートモジュール２８に利用可能なクレジット数をカウンタを使ってモニタすることができ、その情報を自動的に又はポートモジュール２８がその情報を要求した後で、ポートモジュール２８に提供することができる。セントラルエージェント３４がポートモジュール２８にクレジットを割り当てた場合、セントラルエージェント３４はカウンタを或る量だけ増やし、ポートモジュール２８がクレジットを使用したことをポートモジュール２８がセントラルエージェント３４に通知すると、セントラルエージェント３４はカウンタを或る量だけ減らす。カウンタの現在値はポートモジュール２８に利用可能な現在のクレジット数を反映し、セントラルエージェント３４は、１つ以上のクレジットをポートモジュール２８に割り当てるか否かを決めるためにそのカウンタを使用してもよい。セントラルエージェント３４は、ポートモジュール２８で使用されているブロック３８の数を第２カウンタを使ってモニタすることもできる。ポートモジュール２８がブロック３８に書き込んだことをポートモジュール２８がセントラルエージェント３４に通知した場合、セントラルエージェント３４は第２カウンタを所定量だけ増やし、ポートモジュール２８が書き込んだブロック３８が解放された場合であってブロック３８に対応するクレジットがクレジットプールに戻された場合、セントラルエージェントは第２カウンタを所定量だけ減らす。追加的に又は代替的に、セントラル入力制御モジュール３５は、ポートモジュール２８に利用可能なクレジット数を自身のカウンタを使ってモニタしてもよい。
【００２８】
ポートモジュール２８に利用可能なクレジット数は一定に維持されてもよいし、ポートモジュール２８に使用されているブロック３８の数は制限されてもよい。この制限は、ポートモジュール２８、１つ以上の他のポートモジュール２８又は双方での負荷状態の変動に応じて変わるかもしれない。特定の実施例では、ポートモジュール２８により使用されているブロック３８の数は、動的な閾値（クレジットプール中のクレジット数の関数である）に応じて制限される。アクティブなポートモジュール２８は、特定の実施例では、１つ以上のブロック３８を用いるポートモジュール２８を含む。ブロック３８を用いるポートモジュール２８に関するものは、（ストリームメモリ３０からパケットの指定された全てのポートモジュール２８へ読み取られていない）少なくとも１つのパケットをストリームメモリ３０に書き込むポートモジュール２８を含む。動的な閾値は、以下の数式を用いて計算されたクレジットプール中のクレジット数の割合を含み、αはアクティブなポートモジュール２８の数に等しく、ρはパラメータである：
【００２９】
【数１】
2008042915.tif 000003
ポートモジュール２８によりそれぞれ使用されるブロック３８の数が、適用される制限(上述の動的な閾値を含む)を越える場合、クレジットプール中のクレジット数が予約され、セントラルエージェント３４がクレジットをポートモジュール２８に割り当てることを防いでもよい。クレジットプール中の１つ以上のクレジットを予約することは、アクティブなポートモジュール２８の数の変化に関連する遷移期間での緩衝手段(クッション)をもたらす。予約されるクレジットの比率は、以下の数式を用いて計算され、αはアクティブなポートモジュール２８の数に等しく、ρはパラメータである：
【００３０】
【数２】
2008042915.tif 000004
上記の数式によれば、１つのポートモジュール２８がアクティブであってρが２の場合、セントラルエージェント３４は１／３のクレジットを予約し、高々２／３のクレジットをポートモジュール２８に割り当ててよい；２つのポートモジュール２８がアクティブであってρが１の場合、セントラルエージェント３４は１／３のクレジットを予約し、高々１／３のクレジットをアクティブなポートモジュール２８各々に割り当ててよい；そして、１２個のポートモジュール２８がアクティブであってρが0.5の場合、セントラルエージェント３４は２／１４のクレジットを予約し、高々１／１４のクレジットをアクティブなポートモジュール２８各々に割り当ててよい。ポートモジュール２８に使用される多数のブロック３８に適用される特定の制限が説明されたが、ポートモジュール２８に使用される多数のブロック３８に適用される適切な如何なる制限をも本発明は想定している。
【００３１】
特定の実施例では、ICCA３３のセントラル入力制御モジュール３５は、セントラルエージェント３４によって特定のポートモジュール２８に割り当てられたクレジットを格納し、リンクしたリストを用いてポート割当済みクレジットを管理することができる。ポートモジュール２８がセントラル入力制御モジュール３５からクレジットを要求した後に、セントラル入力制御モジュール３５は特定のイネーブルされたポートモジュール２８にポート割当済みクレジットを転送することができる。特定の実施例では、ポート割当済みクレジットは、スイッチングモジュール３７を介してセントラル入力制御モジュール３５により、イネーブルされたポートモジュール２８に転送される。ポートがディセーブルされると、セントラル入力制御モジュール３５及びスイッチングモジュール３７は、ディセーブルされたポートに割り当てられたクレジットを収集及び解放するように共に機能する。図示の例はICCA３３内にセントラル入力制御モジュール３５を含んでいるが、別の実施例では、セントラル入力制御モジュール３５は適切な如何なる場所に合ってもよく、例えばセントラルエージェント３４内でもよいし、ポートモジュール２８自身の中でもよい。
【００３２】
イネーブルされたポートに関連する第１ポートモジュール２８がパケットをストリームメモリ３０に書き込む場合、第１ポートモジュール２８はパケットヘッダからの情報（例えば、１つ以上の宛先アドレス）をスイッチングモジュール３７を介してルーティングモジュール３６に伝送することができ、ルーティングモジュール３６は、パケットの指定されたポートモジュールである１つ以上の第２ポートモジュール２８を特定するのにその情報を使用可能である。第１ポートモジュール２８は、パケットが書き込まれた第１ブロック３８のアドレスと、ストリームメモリ３０からパケットを読み取るために第２ポートモジュール２８により共に使用可能なオフセットとをルーティングモジュール３６に伝送する。このアドレスとオフセットの組み合わせ（又はパケットの内容が格納されている場所を特定する何らかの他の情報）は、「ポインタ」として言及される。ルーティングモジュール３６は、１つ以上のルーティングテーブルとパケットヘッダ中の情報とを利用して第２ポートモジュール２８を識別することができ、第２モジュール２８の特定後に、第１ブロック３８を指すポインタを各第２ポートモジュール２８に通知し、以下で更に詳細に説明されるように、第２ポートモジュール２８は出力キューに指示内容を追加することができる。特定の実施例では、ルーティングモジュール３６はICCA３３を介して第２ポートモジュール２８に情報を通知する。
【００３３】
特定の実施例では、スイッチングモジュール３７は、ポートモジュール２８とルーティングモジュール３６及びICCA３３双方との間を結合し、ポートがイネーブルされた場合にポートモジュール２８及びICCA３３又はルーティングモジュール３６の間での情報通信を促す。ポートがディセーブルされると、スイッチングモジュール３７は、ディセーブルされたポートに関するポート割当済みクレジットの収集及び解放を支援する。１つのスイッチングモジュール３７が描かれているが、スイッチングモジュール３７は適切なスイッチングモジュールをいくつでも表現してよいことに留意すべきである。更に、スイッチングモジュール３７は適切な如何なる数のポートモジュール２８で共有されてもよい。更に、スイッチングモジュール３７の機能は１つ又はそれ以上のスイッチの他の素子に組み込まれてもよい。
【００３４】
出力ポートモジュール２８は１つ以上の出力得キューを含むことができ、出力キューは、ストリームメモリ３０書き込まれるパケットのポインタを並べるのに使用され且つ関連するポートモジュール２８を介してスイッチコア２６から通知される。パケットがストリームメモリ３０に書き込まれる場合、ルーティングモジュール３６は指定されたポートモジュールを特定し、そのパケットに関連するポインタが各ポートモジュール２８の出力キューに追加され、そのポートモジュールからパケットが通知される。指定されたポートモジュール２８の出力キューは、多種多様な変数に対応してよい。
【００３５】
特定の実施例では、ポートモジュール２８は、１つ以上のリンクしたリストを含むメモリ構造を有し、ポートモジュール２８１つ以上のレジスタと共にそのリストを用いてストリームメモリ３０から読み取る次のパケットを決定する。メモリ構造は複数のエントリを含み、複数の内の少なくともいくつかの各々はストリームメモリ３０のブロック３８に対応する。ストリームメモリ３０の各ブロック３８は、そのメモリ構造中の対応するエントリを有する。メモリ構造中のエントリは、メモリ構造中の別のエントリを指すポインタを含み、その結果リンクしたリストが提供される。ポートモジュール２８は１つ以上のレジスタを含み、ポートモジュール２８はそのレジスタを利用してストリームメモリ３０から読み取る次のパケットを判別する。レジスタは読取ポインタ(リードポインタ)、書込ポインタ(ライトポインタ)及びオフセットを含む。読取ポインタは第１ブロックを指し、その第１ブロックに第１パケットが書き込まれており、書込ポインタは第１ブロックを指し、その第１ブロックに第２パケットが書き込まれており（第２パケットは、第１パケットと同じパケットでもよいし、或いは第１パケットと別のパケットでもよい。）、オフセットは第１ワード４０を示し、第２パケットがその第１ワードに書き込まれている。メモリ構造中のエントリ各々はストリームメモリ３０のブロック３８に対応するので、ブロック３８を指すポインタもメモリ構造中のエントリを指す。
【００３６】
ポートモジュール２８は、ストリームメモリ３０から読み取る次のパケットを決定するのにリードポインタを使用することができる（上記の「第１」パケットに対応する。）。ポートモジュール２８は、オフセットを書き込むメモリ構造中の次のエントリを決定するためにライトポインタを使用することができる。ポートモジュール２８はそのオフセットを用いてブロック３８のワード４０を決定し、以下に説明されるようにブロック３８のそのワードから読取を開始する。ポートモジュール２８は、リードポインタ及びライトポインタを用いて、１つより多くのパケットが出力キューにあるか否かを判定することもできる。出力キューが空でなく且つライトポインタ及びリードポインタ双方が同じブロック３８を指していた場合、その出力キューには唯１つのパケットしかない。出力キューの中に唯１つのパケットしか存在していなかった場合、ポートモジュール２８はストリームメモリ３０から読み取る次のパケットを確認することができ、メモリ構造にアクセスせずに、ストリームメモリ３０から次のパケットを読み取ることができる。
【００３７】
出力キューに一切パケットがなかった場合に、第１パケットが出力キューに追加されたならば、（１）レジスタ中のライトポインタは、第１パケットが書き込まれた第１ブロック３８を指すように修正され、（２）第１パケットが書き込まれた第１ワード４０を示すようにオフセットが修正され、（３）第１パケットが書き込まれた第１ブロック３８を指すようにリードポインタも修正される。ポートモジュール２８がストリームメモリ３０から第１パケットを読み出す前に、第２パケットが出力キューに追加されたならば、（１）第２パケットが書き込まれた第１ブロック３８を指すようにライトポインタが修正され、（２）第１パケットが書き込まれた第１ブロック３８に対応するメモリ構造中の第１エントリにオフセットが書き込まれ、そしてそのオフセットは、第２パケットが書き込まれた第１ワード４０を示すように修正され、（３）第１エントリ中のポインタは、第２パケットが書き込まれた第１ブロック３８を指すように修正される。リードポインタは不変のまま残され、第２パケットが出力キューに追加された後も、リードポインタは、第１パケットが書き込まれた第１ブロック３８を依然として指すようにする。以下で更に詳細に説明されるように、ストリームメモリ３０から出力キュー内のパケットをポートモジュール２８が読み込んだ場合に、リードポインタは変更される。第１パケット及び第２パケットをストリームメモリ３０からポートモジュール２８が読み込む前に、第３パケットが出力キューに追加された場合、（１）第３パケットが書き込まれた第１ブロック３８を指すようにライトポインタが修正され、（２）第２パケットが書き込まれた第１ブロック３８に対応するメモリ構造中の第２エントリにオフセットが書き込まれ、そしてそのオフセットは第３パケットが書き込まれた第１ワード４０を示すように修正され、（３）第２エントリ中のポインタは、第３パケットが書き込まれた第１ブロック３８を指すように修正される。再びリードポインタは不変のまま残され、第３パケットが出力キューに追加された後も、リードポインタは、第１パケットが書き込まれた第１ブロック３８を依然として指すようにする。ポートモジュール２８は、ストリームメモリ３０から読み出す次のパケットを決定するために出力キューを使用することができる。
【００３８】
ポートモジュール２８が１つ以上の出力キューを含む場合、出力キューの中で調停を行うアルゴリズムが使用されてもよい。複数の出力キューの中での調停(仲裁)は後続出力キューを決定することを含み、それはストリームメモリ３０から読み出す次のパケットを決めるのに使用するためのものである。複数の出力キューの中での調停は、第２出力キューを用いてストリームメモリ３０から読み出す次のパケットを決定する前にトリームメモリ３０から読み出す第１出力キュー内のパケット数を確認することを含む。本発明は複数の出力キュー内で調停を行う適切な如何なるアルゴリズムをも想定している。非限定的な具体例として、ポートモジュール２８の複数の出力キュー内の調停用アルゴリズムに従って、ポートモジュール２８は連続的な巡回形式で空でない出力キューにアクセスする。ある循環サイクルで、ポートモジュール２８は所定の順序で出力キューを連続的にアクセスし、ポートモジュール２８は、出力キューにアクセスすると、出力キュー内の１つ以上のパケットをストリームメモリ３０から読み出す。ポートモジュール２８が巡回形式で出力キューから読み出すパケット数は、ポートモジュール２８の１つ以上の他の出力キュー各々からポートモジュール２８が同じ巡回サイクルの中で読み出すパケット数と同じでもよいし異なっていてもよい。特定の実施例では、巡回形式で出力キューから読み出し可能なパケット数は、あるデータ量を決める量子化値に基づき、そのデータ量に応じて、出力キュー内に少数のパケットしかなかったならば出力キューから、より多くのパケットが読み出し可能であり、出力キュー内に多数のパケットがあったならば出力キューから、より少ないパケットしか読み出せず、この方法はポートモジュール２８の出力リンクの公平な共有を促すことができる。
【００３９】
上記の説明の多くは、スイッチで受信されるパケットがスイッチに格納され且つスイッチから送信されるのに正当なパケット(リーガルパケット)であることを仮定している。しかしながらいくつかのパケットは１つ以上の理由で不正(イリーガル)であるかもしれない。例えば、あるパケットは「短い」パケットかもしれないが、これらは所定の最小長さ未満の長さを有することに起因してイリーガルになる。別のパケットは別の何らかの理由でイリーガルになるかもしれない。一般に、イリーガルパケットを除くためにスイッチはパケットを選別することが望ましい。
【００４０】
多くの場合に、パケットはそれらのヘッダで長さ情報を伝送しないので、スイッチはパケットの最小長さを受信するまで(又は受信しないことが判明するまで)、スイッチは「短い」パケットを選別(フィルタリング)できない。これは例えばイーサーネットパケットの場合であり、そのパケットのヘッダで長さの情報は伝送されない。パケットをリーガルパケットとして処理を開始する前にパケットが短いか否かを確認することで、多くの一般的なスイッチは短いパケットを選別するように設計される。
【００４１】
図５は、パケットフィルタリングシステム１００の一例を示す。システム例１００は、ストアアンドフォワードバッファ(格納転送バッファ)１１０を有する入力ポートモジュール２８、ストリームメモリ３０、ルーティングモジュール３６における転送データベース１２０及び出力ポートモジュール２８を有する。入力ポートモジュール２８は到来するパケットを受信する。到来するパケットを受信した後に、入力ポートモジュール２８はパケットをバッファ１１０に格納し始め、バッファは特定の入力ポートモジュール２８に専用のメモリでもよい。（不図示の）カウンタを用いて、入力ポートモジュールは、受信された到来パケットのバイト数を勘定し始める。パケットが短いパケットであるか否かをポートモジュール２８が確認するまで、バッファ１１０は到来するパケットの少なくとも一部を格納する。所定の最小パケット長が受信されるより前にパケットのテール(末尾)が受信されたならば、そのパケットは短かったことをポートモジュール２８は判定する。所定の最小パケット長が受信されたならば、そのパケットは短くなかったことをポートモジュール２８は判定する。
【００４２】
イーサーネットの場合、最小パケット長は６４バイトに決められている。従ってパケットについて６４バイトが勘定される前にパケットのテールが受信されたならば、そのパケットは短かったことをポートモジュール２８は判定する。そのパケットについて６４バイトが勘定されたならば、そのパケットは短くなかったことをポートモジュール２８は判定する。イーサーネットの場合、ストアアンドフォワードバッファ１１０は、パケットの最初の６４バイトを格納するようにサイズが整えられてもよい。
【００４３】
受信したパケットが短いパケットであったならば、入力ポートモジュール２８はその受信したパケットをバッファ１１０から除外し、何らかの新たに到来するパケットを（ショートパケット選別の目的で）格納するようにバッファ１１０を再利用できるようにし、その受信したパケットを格納するためにストリームメモリ３０に転送することを入力ポートモジュール２８は行わない。到来したパケットが短くなかった場合、入力ポートモジュール２８は、その到来パケット（バッファ１１０で格納されたパケットの一部を含む）を、入力ポートモジュールの割当済みクレジットに対応するストリームメモリ３０の部分に転送する。到来パケットが短くなかった場合、入力ポートモジュール２８は、そのパケットに関する情報（例えば、ヘッダ情報）を、適切なルーティングに備えてルーティングモジュール３６内の転送データベース１２０へ送信する。転送データベース１２０はその情報を用いてパケットの送信元であるスイッチの出力ポートを特定し、特定された出力ポート各々について格納済みパケットに関する転送リクエスト(即ち、ポインタ)を生成する。このリクエストはルーティングモジュール３６から適切な出力ポートモジュールに転送されてもよい。出力ポートモジュール２８は、受信したリクエストを適切に整列させ、そのリクエストを用いて、リクエスト各自の関連するパケットをストリームメモリ３０から抽出し、そのパケットを適切な順序で送信する。
【００４４】
理解できるように、ストリームメモリ３０にパケットを格納し、転送バッファ１２０にアクセスする前に、ストアアンドフォワードバッファ１１０にパケットの一部を格納することで、待ち時間(レイテンシ)が生じる。レイテンシは、パケットの一部をバッファ１１０に書き込むのに必要な余分な時間である。言い換えれば、パケットを処理する前にパケットが短いか否かを検査することは、短くないパケットの送信を遅らせてしまう。従って、パケットをフィルタリングする、このレイテンシを削減できる特別なシステムが望まれている。
【００４５】
図６は、パケットフィルタリングシステム２００の別の例を示す図である。システム例２００は、入力ポートモジュール２８と、ストリームメモリ３０と、転送データベース２２０、SPF−FIFO２３０及びフィルタ２４０を有するルーティングモジュール３６と、ドロップキュー２５０を有するセントラルエージェント３４と、出力ポートモジュール２８とを有する。パケットが短かったことを確認するまではあたかもパケットがリーガルパケットであるように受信したパケットの処理を開始することで、システム２００はレイテンシを減らし、この点多くの一般的なスイッチと異なり、一般的なスイッチは、パケットをリーガルパケットとして処理を開始する前にパケットが短いか否かを判定する。
【００４６】
入力ポートモジュール２８は、スイッチの特定の入力ポートに入ってくる到来パケットを受信する。到来パケットの少なくとも一部を受信した後、入力ポートモジュール２８は、ストリームメモリ３０のブロックにパケットを直接的に格納し始める（ショートパケットを選別する目的により、ストアアンドフォワードバッファに最初からは格納しない。）。近似的に同じ時点で、入力ポートモジュール２８は、ショートパケットを選別するために、到来パケットのバイト数を（不図示のカウンタを用いて）カウントし始める。近似的に同じ時点で、入力ポートモジュール２８は、パケットに関連する情報（例えば、ヘッダ情報及び／又はストリームメモリ中のパケットの位置等）を、適切なルーティングに備えてルーティングモジュール３６内の転送データベース２２０に転送する。このように、ストリームメモリ３０での格納及びルーティングモジュール３６での処理は、ショートパケット判定がなされる前に開始可能である。例えば、所定の最小パケット長（例えば、イーサーネットパケットの場合は６４）を受信する前に、モジュール２８がパケットのテールを受信したならば、そのパケットは短かったことを入力ポートモジュール２８は確認してよい。ポートモジュール２８が少なくとも所定の最小パケット長を受信したならば、そのパケットは短くなかったことを入力ポートモジュール２８は判定してもよい。パケットは短かったことを入力ポートモジュール２８が確認した後、入力ポートモジュール２８は、そのパケットが短いパケット(ショートパケット)であるか否かを示すフラグを発行する。代替実施例では、スイッチ内の適切な何らかの構成要素が、パケットは無効である（即ち、ショートパケットである）か否かを確認し、フラグを発行してもよい。そのようなフラグは、後述されるように、パケットがリーガルであるか否かに依存してパケット転送処理を継続する或いは打ち切るために使用されてもよい。ポートモジュール２８は、以下に説明されるように、ルーティングモジュール３６内のSPF-FIFO２３０にフラグを送信する。
【００４７】
特定の実施例では、ショートパケット判定を行いつつ、入力ポートモジュール２８は、他の何らかの理由によりパケットがイリーガルになるか否かを確認してもよいことに留意すべきである。例えば、到来するインターネットプロトコル(IP)パケットについてショートパケット判定を行いつつ、入力ポートモジュール２８は、他のイリーガルな特徴についてパケットの最初の６４バイトの情報にアクセスしてよい。この情報は例えばパケットのプロトコルタイプ、ソースIPアドレス、宛先IPアドレス、ポートアドレス及び優先度(トラフィッククラス)を含んでもよい。特定の実施例では、ショートパケットの評価に加えてそのパケット情報の評価に基づいて、入力ポートモジュール２８はパケットがイリーガルであるか否かを示すフラグを発行する。
【００４８】
ルーティングモジュール３６は転送データベース２２０、SPF-FIFO２３０及びフィルタ２４０を有する。転送データベース２２０は、パケットに関連する情報をポートモジュール２８から受信し、その情報を用いて、パケットが送信されるポートになるスイッチの出力ポートを特定する。転送データベース２２０は例えばこれらの出力ポートを区別するテーブルを利用してもよい。転送データベース２２０は、確認された出力ポート各々について転送リクエスト（例えば、格納済みのパケットを指すポインタを含む）を生成し、その出力ポートからパケットは出力され、転送データベース２２０はこれらのリクエストをフィルタ２４０に送信する。図示の例では、転送データベース２２０はルーティングモジュール３６内にあるが、転送データベース２２０はスイッチの適切な如何なる場所にあってもよい。
【００４９】
SPF-FIFO２３０は、入力ポートモジュール２８から受信したフラグのタイミングに同期し、転送データベース２２０により生成されたリクエストを転送する適切な如何なるモジュールで構成されてもよい。多くの場合、（最小バイト数の格納後の）ショートパケット判定及びフラグ生成に要する時間は、転送リクエストを生成する時間よりも非常に短い。従ってこれらの場合に、フィルタ２４０がパケットに関する転送リクエストを受信するまで、SPF-FIFO２３０はパケットに関するフラグを一次記憶する(バッファリングする)。フィルタ２４０がデータベース２２０から関連する転送リクエストを受信する場合、SPF-FIFO２３０はフラグをフィルタ２４０に送信する。フィルタ２４０は、関連するフラグの値に基づいて転送リクエストを適切に処理してよい。あるいはフィルタ２４０は適切な何らかの方法でSPF-FIFO２３０内のフラグにアクセスしてよい。SPF-FIFO２３０は図示の例ではルーティングモジュール３６内にあるが、SPF-FIFO２３０は適切な如何なる場所にあってもよい。特定の実施例では、各入力ポートモジュール２８は、対応するSPF-FIFO２３０に関連付けられてよい。例えば、２２個の入力ポートモジュール２８を有するスイッチは、２２個のSPF-FIFO２３０を有し、入力ポートモジュール２８各々に１つのSPF-FIFO２３０があってよい。
【００５０】
フィルタ２４０はデータベース２２０から転送リクエストを及びSPF-FIFO２３０からフラグを受信する。特定の実施例では、各入力ポートモジュール２８は対応するSPF-FIFO２３０に関連付けられ、フィルタ２４０は、受信した転送リクエストに包含されているソースポート番号を使って、正しいSPF-FIFO２３０（特手のソースポートに関連するもの）を選択し、その正しいSPF-FIFOからフラグ（転送リクエストに対応するフラグ）を受信する。特定のパケットに関連するフラグ及び転送リクエストを受信した後に、転送リクエストを適切な出力ポートモジュールに送信したか否か又はパケットを伝送せずにパケットをスイッチから除外したか否かを確認するためにフィルタ２４０はフラグを利用する。パケットが短くなかったことをフラグが示す場合（リーガルだった場合）、フィルタ２４０は、パケットに関連する転送リクエストを適切な出力ポートモジュールに送信する。パケットが短かったことをフラグが示す場合(イリーガルだった場合)、フィルタ２４０はセントラルエージェント３４内のドロップキュー２５０にドロップリクエストを送信し、そのパケットを除外する。ドロップリクエストは、例えば、イリーガルパケットに割り当てられたストリームメモリ中のブロックを指すポインタを含んでよい。パケットを除外することは、概して、そのパケットを格納しているストリームメモリ３０のブロックを、利用可能なブロックのプールに解放することや、適切な何らかの入力ポートへの割り当てに備えて（到来パケットの格納に備えて）そのブロックを利用可能にすることに関連する。パケットがイリーガルであることに起因してパケットが除外される場合（即ち、パケットがショートパケットであった場合）、パケットは出力ポートモジュール２８に転送されなくてよい。フィルタ２４０はルーティングモジュール３６内にあるが、フィルタ２４０はスイッチ内の適切な如何なる場所にあってもよいことに留意すべきである。
【００５１】
ドロップキュー２５０はドロップリクエストをフィルタ２４０から受信する。これらのリクエストは例えば除外されるパケットを指すポインタでもよい。ドロップキュー２５０は、ドロップリクエストを整列させ、ドロップリクエストを選択し、選択したドロップリクエストに関するパケットを除外する。ドロップキュー２５０は、除外されたパケットに割り当てられていたブロックを、利用可能なブロックのプールに解放する。セントラルエージェント３４は例えばこのプールにアクセスし、何らかのブロックを適切な何らかの入力ポートに割り当て、新たな到来パケットの格納に備える。ドロップキュー２５０は図示の例ではセントラルエージェント３４内にあるが、ドロップキュー２５０はスイッチ内の適切な如何なる場所にあってもよい。
【００５２】
特定の場合には、除外されるパケットに割り当てられているブロックは、パケットが書き込まれたブロックより多くのブロックを含んでもよいことに留意すべきである。例えばパケットをストリームメモリ３０に書き込むために２つのブロックが割り当てられているが、パケットがイリーガルであることを確認する前に、入力ポートモジュール２８により第１ブロックのみが書き込まれるかもしれない。そのような状況では、パケットがイリーガルであったことの確認後に、入力ポートモジュール２８はそのパケットの書込を止め、パケットは除外されてもよい。特定の実施例では、図７に関して以下で更に説明されるように、（ドロップキュー２５０に最初から転送せずに）第１ブロックはドロップキュー２５０に転送され、第２ブロックは入力ポートモジュール２８により再利用されてもよい。
【００５３】
出力ポートモジュール２８は、リーガルパケットについてフィルタ２４０から転送リクエストを受信する。出力ポートモジュール２８は、これらのリクエストを処理し（例えば、ある待ち行列構造にそれらを置く処理を行い）、上述したような適切な何らかの方法でリクエストに関連するパケットを送信する。
【００５４】
動作時にあっては、入力ポートモジュール２８はスイッチの特定の入力ポートに入ってくる到来パケットを受信する。パケットが受信されると、入力ポートモジュール２８は、ストリームメモリ３０のブロックにパケットの少なくとも一部を格納し始める。近似的に同じ時点で、入力ポートモジュール２８は、ショートパケット選別に備えて到来波家とのバイト数をカウントし始め、パケットに関する情報をルーティングモジュール３６内の転送データベース２２０に転送し始める。このようにストリームメモリ３０での格納及びルーティングモジュール３６での処理は、ショートパケット判定がなされる前に始まる。パケットがリーガルパケットであるか否かを入力ポートモジュール２８が確認した後に、入力ポートモジュール２８はそのパケットがリーガルであるか否かを示すフラグを発行する。入力ポートモジュール２８はこのフラグをルーティングモジュール３６内のSPF-FIFO２３０に送信する。
【００５５】
転送データベース２２０は、パケットに関する情報を入力ポートモジュール２８から受信し、その情報を利用して、スイッチの出力ポートを確認し、その出力ポートからパケットは送信される。転送データベース２２０は、確認された出力ポート各々について転送リクエストを生成し、これらのリクエストをルーティングモジュール３６内のフィルタ２４０に送信する。多くの場合、（最小バイト数の格納後の）ショートパケット判定及びフラグ生成にかかる時間は、転送リクエストを生成するのにかかる時間よりも非常に少ない。これらの場合に、フィルタ２４０が転送リクエストをデータベース２２０から受信するまで例えばフラグをバッファリングすることで、SPF-FIFO２３０はフラグ及び転送リクエストを同期させる。フィルタ２４０が転送リクエストを受信すると、SPF-FIFO２３０はフラグをフィルタ２４０に送信する。或いは、フィルタ２４０は適切な何らかの方法でSPF-FIFO２３０内のフラグにアクセスしてもよい。
【００５６】
フィルタ２４０は転送リクエストをデータベース２２０から及びフラグをSPF-FIFO２３０から受信する。転送リクエストを適切な出力ポートモジュール２８に送信したか否か又はパケットを伝送せずにパケットをスイッチから除外したか否かを、フィルタ２４０はフラグを用いて確認する。パケットがリーガルであることをフラグが示すならば、フィルタ２４０は転送リクエストを適切な出力ポートモジュール２８に送信する。出力ポートモジュール２８は、転送リクエストをフィルタ２４０から受信し、そのリクエストを処理し、関連するパケットを関連する出力ポートから送信する。パケットがイリーガルであることをフラグが示すならば、フィルタ２４０はセントラルエージェント３４内のドロップキュー２５０にドロップリクエストを送信し、そのパケットを除外する。ドロップキュー２５０はドロップリクエストをフィルタ２４０から受信し、そのリクエストを整列させ、リクエストを選択した後に、選択したリクエストに関連するパケットを除外する。ドロップキュー２５０は、イリーガルパケットに割り当てられていたブロックを、利用可能なブロックのプールに解放する。ブロックがプールに解放された後、セントラルエージェント３４は、例えばプールにアクセスし、ブロックを適切な何らかの入力ポートに割り当て、新たに到来するパケットの格納に備える。
【００５７】
本開示範囲から逸脱せずに、修正、追加又は省略が説明済みのシステム及び方法になされてもよい。説明されたシステム及び方法の構成要素は、具体的なニーズに応じて統合されてもよいし分散されてもよい。更に説明されたシステム及び方法の処理は、本開示範囲から逸脱せずに、より多数の、より少数の又は他の構成要素により実行されてもよい。更にシステム２００は他の種類のイリーガルパケットを確認及び処理するのに使用されてもよい。
【００５８】
上述したように、スイッチは、ある時点で、イリーガルパケットを受信するかもしれない。その場合、イリーガルパケットを格納するのに割り当てられるストリームメモリ３０のブロック数は１より大きくてもよい。これは、例えばショートパケットに関し、メモリブロックのサイズが比較的小さかった場合かもしれない（即ち、６４バイト又は他の最小パケット長未満）。そのような場合、パケットが６４バイトを含んでいるか否かの確認がなされる前に及びショートパケットが除外される前に、１つより多くのメモリブロックがパケットを格納するのに（及び１つより多くのブロックがパケットを書き込むのに）割り当てられてもよい。複数のブロックが、そのようなイリーガルなパケットの除外される前に、他のタイプのイリーガルなパケットを格納するのに割り当てられてもよい。そのような他のタイプのイリーガルなパケットの具体例は、進入バイオレーション、進出バイオレーション又はポート状態バイオレーションのようなVLAN違反に関するパケットを含んでもよい。一般的なスイッチでは、これらのパケットを除外するために、パケットの割り当てられたブロック全てについてのドロップリクエストがドロップキューに設けられる。しかしながら、ドロップキュー内に多数のリクエストを用意することは、キュー内のリクエストに関連するブロックの解放及び再利用を遅らせる点で不利になるかもしれない。こうして、イリーガルパケットに割り当てられたブロックを再利用する別の方法が、この遅延を減らすために使用される。
【００５９】
図７は、イリーガルパケットに割り当てられたブロックを再利用する方法例３００を示すフローチャートである。方法３００はステップ３１０から始まり、到来するパケットがスイッチの入力ポートで受信される。ステップ３２０では、到来パケットがイリーガルであるか否かの確認がなされる前に、ストリームメモリ３０の２つ以上のブロック（即ち、第１ブロック及び第２ブロック）が到来パケットを格納するのに割り当てられる。到来パケットがイリーガルであるか否かの判定がなされる前に、パケットの一部が最初の割り当てブロックに書き込まれてもよい。しかしながら特定の実施例では、到来パケットがイリーガルであるか否かの確認がなされる前に、２番目に割り当てられたブロックに（より一般的には、割り当てられたブロックの少なくとも１つに）パケットが一切書き込まれないかもしれない。これは例えば不正の確認にかかる時間が第１ブロックに書き終えるまでの時間より短いような場合かもしれない。別の実施例では、受信したパケットの少なくとも一部が、パケットの不正判定のなされる前に、第２の割当済みブロックに（或いは、別の割当済みブロックに）書き込まれてもよい。
【００６０】
ステップ３３０，３４０では、パケットがイリーガルであるか否かの確認がなされる。例えば、入力ポートモジュール２８により、セントラルエージェント３４により、又は適切な他の何らかのスイッチ構成要素によりこの判定がなされてもよい。イリーガルパケットは、例えば、ショートパケット、イングレスバイオレーションに関するパケット、イグレスバイオレーションに関するパケット、ポート状態バイオレーションに関するパケット、又は他の種類の不正なパケットでもよい。ステップ３４２では、パケットがリーガルであった場合に、パケットは処理され、パケットは適切な出力ポートからスイッチにより送信される。パケットがイリーガルであった場合、そのイリーガルパケットを除外する旨の決定がなされる。この決定内容はドロップキューに（即ち、セントラルエージェント３４に）及びポートモジュール２８に転送され、そのポートモジュール２８はステップ３５０，３６０でイリーガルパケットを受信した（又は受信している）ものである。
【００６１】
ステップ３５０では、パケットがイリーガルであった場合に、そのパケットに割り当てられ書き込まれていた第１ブロックを除去するリクエストが、ドロップキューに設けられる。特定の実施例では、イリーガルパケットを格納するのに割り当てられた他のブロックを除去する他のリクエストはドロップキューに一切設けられず、他の割当済みブロックは、新たな到来パケットを格納するために入力ポートモジュール２８により直接的に再利用される（ステップ３６０で説明される。）。代替実施例では、パケットが割り当てられた（及び、選択的に書き込まれた）１つより多くのブロックを除去するリクエストは、１つ以上の他の割当済みブロックが入力ポートモジュール２８により直接的に再利用される限り、ドロップキュー内に設けられてよい。特定の実施例では、ドロップキュー内に設けられたリクエストは、例えばルーティングモジュール３６によりドロップキューに転送されてもよい。ショートパケットフィルタリングの特定の実施例では（図６に関して説明したように）、パケットをイリーガルとして識別するフラグをルーティングモジュール３６が入力ポートモジュール２８から受信した後で、ルーティングモジュール３６はリクエストをドロップキュー内に用意する。ステップ３５２では、ドロップキューは、ドロップリクエストの１つを選択し、選択されたドロップリクエストに関連するブロックを、利用可能なブロックのプールに解放する。ブロックはその後に例えばセントラルエージェント３４により同一の又は異なる入力ポートに割り当てられてもよい。
【００６２】
ステップ３６０はステップ３５０と同時になされてもよく、ステップ３６０ではイリーガルパケットを受信した（又は受信中の）入力ポートモジュール２８は、（ルーティングモジュール３６により通知することで）パケットがイリーガルであることを確認してもよい。パケットがイリーガルであることを確認した後で、入力ポートモジュール２８は、そのパケットが依然として受信されている最中であったならば、それ以上の如何なるイリーガルパケットもストリームメモリ３０に書き込むことを停止してよい。パケットがイリーガルであることを確認した後に、入力ポートモジュール２８は、イリーガルパケットが割り当てられていた１つ以上のブロックが、新たに到来するパケットを格納するのに備えて入力ポートモジュール２８により再利用されてよいことを（ルーティングモジュール３６により通知されることで）確認してもよい。特定の実施例では、再利用されるブロックは入力ポートモジュール２８により未だ書き込まれていないものである。代替実施例では、再利用される１つ以上のブロックは、イリーガルパケットの一部を格納するために入力ポートモジュール２８により書き込まれたものである。何れの場合にせよ、これらのブロックはドロップキュー内に最初に設けられたブロックによらず、入力ポートモジュール２８により再利用されてよい。ドロップキューの中でパケット毎に唯１つのブロックを用意し、入力ポートモジュール２８に残りのブロックを直接的に再利用することを許可することで、メモリブロックの再利用による遅延が削減される。
【００６３】
本開示範囲から逸脱せずに、修正、追加又は省略が説明済みのシステム及び方法になされてもよい。説明されたシステム及び方法の構成要素は、具体的なニーズに応じて統合されてもよいし分散されてもよい。更に説明されたシステム及び方法の処理は、本開示範囲から逸脱せずに、より多数の、より少数の又は他の構成要素により実行されてもよい。
【００６４】
以上本開示内容はいくつかの実施例と共に説明されてきたが、変更、置換、変形、代替及び修正の様々なものが当業者に示唆されるであろうし、本開示ではそのような変更、置換、変形、代替及び修正の全てを添付の特許請求の範囲内に包含することが意図される。
【００６５】
以下、本発明により教示される手段が例示的に列挙される。
【００６６】
（付記１）
スイッチングする環境でパケットを選別する方法であって、
メモリ及び１つ以上の出力ポートを有するスイッチの入力ポートでパケットを受信するステップと、
前記パケットの少なくとも一部を前記メモリに格納するステップと、
前記パケットが前記スイッチから伝送される際の１つ以上の出力ポートを確認するステップと、
前記パケットが前記スイッチから伝送される際の１つ以上の出力ポートを決定し始めた後に、前記パケットが正当でないパケットであるか否かを確認するステップと、
前記パケットが正当でないパケットであった場合に、前記パケットを前記メモリから除外するステップと、
前記パケットが正当なパケットであった場合に、前記決定された１つ以上の出力ポートから前記パケットを伝送するステップと、
を有する方法。
【００６７】
（付記２）
前記パケットが正当でないパケットであるか否かを確認するステップが、前記パケットは最低限必要なバイト数未満のバイトで構成されるか否かを確認するステップを有する付記１記載の方法。
【００６８】
（付記３）
前記パケットが正当でないパケットであるか否かを確認した後で、該パケットが正当でないパケットであるか否かを識別するフラグを発行するステップと、
前記パケットが前記スイッチから伝送される際の前記１つ以上の出力ポートが決定されるまで、前記フラグをバッファリングするステップと、
前記パケットを除去する又は前記パケットを前記決定された出力ポートから伝送するか否かを前記フラグを用いて確認するステップと、
を更に有する付記１記載の方法。
【００６９】
（付記４）
前記メモリが複数のブロックに論理的に細分され、当該方法は到来するパケットの格納に備えて１つ以上のブロックを各入力ポートに割り当てるステップを更に有し、前記パケットを受信する前記入力ポートに割り当てられる１つ以上のブロックは、受信されたパケットを格納するために割り当てられる付記１記載の方法。
【００７０】
（付記５）
前記スイッチがドロップキューを更に有し、前記パケットを前記メモリから除外するステップが、
前記ドロップキューにドロップリクエストを送信するステップと、
前記ドロップキュー内のドロップリクエストに関連するパケットを格納するために割り当てられていたメモリ内のブロックを解放し、解放されたメモリのブロックを１つ以上の入力ポートに再び割り当てることを許可し、解放されたメモリのブロックで１つ以上の他のパケットの格納に備えるステップと、
を有する付記４記載の方法。
【００７１】
（付記６）
前記スイッチがドロップキューを更に有し、前記メモリが複数のブロックに論理的に細分され、当該方法は、メモリの少なくとも第１ブロック及び第２ブロックを、前記パケットを格納するために前記入力ポートに割り当てるステップを更に有し、前記パケットを前記メモリから除外するステップが、
前記第１ブロックのドロップリクエストを前記ドロップキューに送信するステップと、
前記第２ブロックのドロップリクエストを前記ドロップキューに送信せずに、別のパケットを格納するために前記入力ポートで前記第２ブロックを再利用するステップと、
を有する付記１記載の方法。
【００７２】
（付記７）
コンピュータ読取可能な媒体にエンコードされる論理装置であって、
メモリ及び１つ以上の出力ポートを有するスイッチの入力ポートでパケットを受信するステップと、
前記パケットの少なくとも一部を前記メモリに格納するステップと、
前記パケットが前記スイッチから伝送される際の１つ以上の出力ポートを確認するステップと、
前記パケットが前記スイッチから伝送される際の１つ以上の出力ポートを決定し始めた後に、前記パケットが正当でないパケットであるか否かを確認するステップと、
前記パケットが正当でないパケットであった場合に、前記パケットを前記メモリから除外するステップと、
前記パケットが正当なパケットであった場合に、前記決定された１つ以上の出力ポートから前記パケットを伝送するステップと、
をコンピュータに実行させる論理装置。
【００７３】
（付記８）
前記パケットが正当でないパケットであるか否かを確認するステップが、前記パケットは最低限必要なバイト数未満のバイトで構成されるか否かを確認するステップを有する付記７記載の論理装置。
【００７４】
（付記９）
前記パケットが正当でないパケットであるか否かを確認した後で、該パケットが正当でないパケットであるか否かを識別するフラグを発行するステップと、
前記パケットが前記スイッチから伝送される際の前記１つ以上の出力ポートが決定されるまで、前記フラグをバッファリングするステップと、
前記パケットを除去する又は前記パケットを前記決定された出力ポートから伝送するか否かを前記フラグを用いて確認するステップと、
をコンピュータに更に実行させる付記７記載の論理装置。
【００７５】
（付記１０）
前記メモリが複数のブロックに論理的に細分され、当該論理装置は到来するパケットの格納に備えて１つ以上のブロックを各入力ポートに割り当てるステップを更に有し、前記パケットを受信する前記入力ポートに割り当てられる１つ以上のブロックは、受信されたパケットを格納するために割り当てられる付記７記載の論理装置。
【００７６】
（付記１１）
前記スイッチがドロップキューを更に有し、前記パケットを前記メモリから除外するステップが、
前記ドロップキューにドロップリクエストを送信するステップと、
前記ドロップキュー内のドロップリクエストに関連するパケットを格納するために割り当てられていたメモリ内のブロックを解放し、解放されたメモリのブロックを１つ以上の入力ポートに再び割り当てることを許可し、解放されたメモリのブロックで１つ以上の他のパケットの格納に備えるステップと、
を有する付記１０記載の論理装置。
【００７７】
（付記１２）
前記スイッチがドロップキューを更に有し、前記メモリが複数のブロックに論理的に細分され、当該論理装置は、メモリの少なくとも第１ブロック及び第２ブロックを、前記パケットを格納するために前記入力ポートに割り当てるステップを更に有し、前記パケットを前記メモリから除外するステップが、
前記第１ブロックのドロップリクエストを前記ドロップキューに送信するステップと、
前記第２ブロックのドロップリクエストを前記ドロップキューに送信せずに、別のパケットを格納するために前記入力ポートで前記第２ブロックを再利用するステップと、
を有する付記７記載の論理装置。
【００７８】
（付記１３）
スイッチングする環境でパケットを選別するシステムであって、
パケットを受信するスイッチの入力ポートであって、該入力ポートは入力ポートモジュールに関連する入力ポートと、
前記パケットの少なくとも一部を格納する前記スイッチのメモリと、
前記スイッチの１つ以上の出力ポートを決定する前記スイッチのルーティングモジュールであって、前記パケットは前記スイッチの前記１つ以上の出力ポートから伝送され、前記パケットが前記スイッチから伝送される際の前記１つ以上の出力ポートを前記ルーティングモジュールが決定し始めた後に、前記入力ポートモジュールは、前記パケットが正当でないパケットであるか否かを決定するルーティングモジュールと、
ドロップキューを有し、前記パケットが正当でないパケットであった場合に、前記メモリから前記パケットの少なくとも一部を除外する前記スイッチのセントラルエージェントと、
前記パケットが正当なパケットであり、前記１つ以上の出力ポートが前記ルーティングモジュールにより決定された場合に、前記スイッチから前記パケットを伝送する前記スイッチの１つ以上の出力ポートと、
を有するシステム。
【００７９】
（付記１４）
前記パケットが正当でないパケットであるか否かを確認することが、前記パケットは最低限必要なバイト数未満のバイトで構成されるか否かを確認することを含む付記１３記載のシステム。
【００８０】
（付記１５）
前記入力ポートモジュールは、前記パケットが正当でないパケットであるか否かを確認した後で、該パケットが正当でないパケットであるか否かを識別するフラグを発行し、前記ルーティングモジュールは、前記パケットが前記スイッチから伝送される際の前記１つ以上の出力ポートが決定されるまで、前記フラグをバッファリングし、前記ルーティングモジュールは、前記パケットを除去する又は前記パケットを前記決定された出力ポートから伝送するか否かを前記フラグを用いて確認する付記１３記載のシステム。
【００８１】
（付記１６）
前記メモリが複数のブロックに論理的に細分され、前記セントラルエージェントは、到来するパケットの格納に備えて１つ以上のブロックを各入力ポートに割り当て、前記パケットを受信する前記入力ポートに割り当てられる１つ以上のブロックは、受信されたパケットを格納するために割り当てられる付記１３記載のシステム。
【００８２】
（付記１７）
前記ルーティングモジュールは、前記パケットが正当でないパケットであった場合に前記ドロップキューにドロップリクエストを送信し、前記メモリから前記パケットを除外することは、前記ドロップキュー内のドロップリクエストに関連するパケットを格納するために割り当てられていたメモリ内のブロックを解放し、解放されたメモリのブロックを１つ以上の入力ポートに再び割り当てることを許可し、解放されたメモリのブロックで１つ以上の他のパケットの格納に備える付記１６記載のシステム。
【００８３】
（付記１８）
前記メモリが複数のブロックに論理的に細分され、前記セントラルエージェントは、メモリの少なくとも第１ブロック及び第２ブロックを、前記パケットを格納するために前記入力ポートに割り当て、前記パケットが正当でないパケットであった場合に、
前記ルーティングモジュールは、前記第１ブロックのドロップリクエストを前記ドロップキューに送信し、
前記入力ポートモジュールは、前記第２ブロックのドロップリクエストを前記ドロップキューに送信せずに、別のパケットを格納するために前記第２ブロックを再利用する付記１３記載のシステム。
【００８４】
（付記１９）
スイッチングする環境でパケットを選別するシステムであって、
パケットを受信するスイッチの入力ポートであって、該入力ポートは入力ポートモジュールに関連する入力ポートと、
複数のブロックに論理的に細分され、前記パケットの少なくとも一部を格納する前記スイッチのメモリと、
前記スイッチのルーティングモジュールであって、
前記スイッチの１つ以上の出力ポートを決定し、前記パケットは前記スイッチの前記１つ以上の出力ポートから伝送され、
前記パケットが前記スイッチから伝送される際の前記１つ以上の出力ポートを決定し始めた後に、前記パケットが正当でないパケットであるか否かを決定するルーティングモジュールと、
ドロップキューを有する前記スイッチのセントラルエージェントであって、メモリの少なくとも第１ブロック及び第２ブロックを、前記パケットを格納するために前記入力ポートに割り当て、前記パケットが正当でないパケットであった場合に、
前記ルーティングモジュールは、前記第１ブロックのドロップリクエストを前記ドロップキューに送信し、
前記入力ポートモジュールは、前記第２ブロックのドロップリクエストを前記ドロップキューに送信せずに、別のパケットを格納するために前記第２ブロックを再利用するセントラルエージェントと、
前記パケットが正当なパケットであり、前記１つ以上の出力ポートが前記ルーティングモジュールにより決定された場合に、前記スイッチから前記パケットを伝送する前記スイッチの１つ以上の出力ポートと、
を有するシステム。
【図面の簡単な説明】
【００８５】
【図１】システムエリアネットワーク例を示す図である。
【図２】システムエリアネットワークのスイッチの一例を示す図である。
【図３】スイッチのスイッチコアの一例を示す図である。
【図４】スイッチコアの論理的にブロックに分割されたストリームメモリの一例を示す図である。
【図５】パケットフィルタリングシステムの一例を示す図である。
【図６】パケットフィルタリングシステムの別の例を示す図である。
【図７】正当でないパケットに割り当てられたブロックを再利用する方法例を示すフローチャートである。
【符号の説明】
【００８６】
１０  システムエリアネットワーク
１２  相互接続部
１４  サーバーシステム
１６  ストレージシステム
１８  ネットワークシステム
２０  ルーティングシステム
２２  スイッチ
２４  ポート
２６  スイッチコア
２８  ポートモジュール
３０  ストリームメモリ
３２  タグメモリ
３３  入力コントロールアンドセントラルエージェント(ICCA)
３６  ルーティングモジュール
３７  スイッチングモジュール
１００  パケットフィルタリングシステム
１１０  ストアアンドフォワードバッファ
１２０  転送データベース
２００  システム
２２０  転送データベース
２３０  SPF-FIFO
２４０  フィルタ
２５０  ドロップキュー
【図１】
2008042915.tif 000005
【図２】
2008042915.tif 000006
【図３】
2008042915.tif 000007
【図４】
2008042915.tif 000008
【図５】
2008042915.tif 000009
【図６】
2008042915.tif 000010
【図７】
2008042915.tif 000011