(57)【要約】【課題】高速なシリアル相互接続に必要なスイッチング速度及びスケーラビリティをもたらすシステム及び論理装置を提供すること。【解決手段】本発明の特定の実施例では、スイッチの出力キュー構造をバイパスする方法が使用される。特定の実施例における本方法は、スイッチの入力ポートでパケットを受信すること、スイッチのメモリにパケットを格納すること、格納されたパケットに及びスイッチの特定の出力ポートに関連し、格納されたパケットのメモリ内の場所を特定する転送リクエストを生成することを含む。本方法は、特定の出力ポートに関連する出力キュー構造をバイパスすることを転送リクエストにより引き起こすか否かを決定することも含む。本方法は、転送リクエストを用いて、該転送リクエストに関連するパケットをメモリから抽出すること、抽出したパケットを特定の出力ポートから送信することを含む。  【選択図】図１
2008042916.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)で公表されている一群の規格(スタンダード)によると、イーサーネットフレームの最大サイズは１５１８バイトである。事実上の規格によれば、イーサーネットフレームの最大サイズは９０００バイトである。非限定的な具体例として、到来するパケットの一部しか受信できないポートモジュール２８を考察する。ポートモジュール２８は(適用可能な一群の規格に従う)最大パケットサイズを利用し、パケット全体をストリームメモリ３０に書き込むのに十分なクレジットがポートモジュール２８に利用可能か否かを判別する。ポートモジュール２８は、サイダパケットサイズとポートモジュール２８に利用可能なクレジット数とを比較することでその判別を行ってもよい。パケット全体をストリームメモリ３０に書き込むのに十分なクレジットがポートモジュール２８に利用可能であった場合、ポートモジュール２８は、パケットの受信した部分を１つ以上のクレジットを用いてストリームメモリ３０に書き込み、ポートモジュール２８がパケットの１つ以上の他の部分を受信した場合に、１つ以上のクレジットを用いてパケットの１つ以上の他の部分をストリームメモリ３０に書き込んでもよい。
【００２７】
上述したように、セントラルエージェント３４は、ポートモジュール２８に利用可能なクレジット数をカウンタを使ってモニタすることができ、その情報を自動的に又はポートモジュール２８がその情報を要求した後で、ポートモジュール２８に提供することができる。セントラルエージェント３４がポートモジュール２８にクレジットを割り当てた場合、セントラルエージェント３４はカウンタを或る量だけ増やし、ポートモジュール２８がクレジットを使用したことをポートモジュール２８がセントラルエージェント３４に通知すると、セントラルエージェント３４はカウンタを或る量だけ減らす。カウンタの現在値はポートモジュール２８に利用可能な現在のクレジット数を反映し、セントラルエージェント３４は、１つ以上のクレジットをポートモジュール２８に割り当てるか否かを決めるためにそのカウンタを使用してもよい。セントラルエージェント３４は、ポートモジュール２８で使用されているブロック３８の数を第２カウンタを使ってモニタすることもできる。ポートモジュール２８がブロック３８に書き込んだことをポートモジュール２８がセントラルエージェント３４に通知した場合、セントラルエージェント３４は第２カウンタを所定量だけ増やし、ポートモジュール２８が書き込んだブロック３８が解放された場合であってブロック３８に対応するクレジットがクレジットプールに戻された場合、セントラルエージェントは第２カウンタを所定量だけ減らす。追加的に又は代替的に、セントラル入力制御モジュール３５は、ポートモジュール２８に利用可能なクレジット数を自身のカウンタを使ってモニタしてもよい。
【００２８】
ポートモジュール２８に利用可能なクレジット数は一定に維持されてもよいし、ポートモジュール２８に使用されているブロック３８の数は制限されてもよい。この制限は、ポートモジュール２８、１つ以上の他のポートモジュール２８又は双方での負荷状態の変動に応じて変わるかもしれない。特定の実施例では、ポートモジュール２８により使用されているブロック３８の数は、動的な閾値（クレジットプール中のクレジット数の関数である）に応じて制限される。アクティブなポートモジュール２８は、特定の実施例では、１つ以上のブロック３８を用いるポートモジュール２８を含む。ブロック３８を用いるポートモジュール２８に関するものは、（ストリームメモリ３０からパケットの指定された全てのポートモジュール２８へ読み取られていない）少なくとも１つのパケットをストリームメモリ３０に書き込むポートモジュール２８を含む。動的な閾値は、以下の数式を用いて計算されたクレジットプール中のクレジット数の割合を含み、αはアクティブなポートモジュール２８の数に等しく、ρはパラメータである：
【００２９】
【数１】
2008042916.tif 000003
ポートモジュール２８によりそれぞれ使用されるブロック３８の数が、適用される制限(上述の動的な閾値を含む)を越える場合、クレジットプール中のクレジット数が予約され、セントラルエージェント３４がクレジットをポートモジュール２８に割り当てることを防いでもよい。クレジットプール中の１つ以上のクレジットを予約することは、アクティブなポートモジュール２８の数の変化に関連する遷移期間での緩衝手段(クッション)をもたらす。予約されるクレジットの比率は、以下の数式を用いて計算され、αはアクティブなポートモジュール２８の数に等しく、ρはパラメータである：
【００３０】
【数２】
2008042916.tif 000004
上記の数式によれば、１つのポートモジュール２８がアクティブであってρが２の場合、セントラルエージェント３４は１／３のクレジットを予約し、高々２／３のクレジットをポートモジュール２８に割り当ててよい；２つのポートモジュール２８がアクティブであってρが１の場合、セントラルエージェント３４は１／３のクレジットを予約し、高々１／３のクレジットをアクティブなポートモジュール２８各々に割り当ててよい；そして、１２個のポートモジュール２８がアクティブであってρが0.5の場合、セントラルエージェント３４は２／１４のクレジットを予約し、高々１／１４のクレジットをアクティブなポートモジュール２８各々に割り当ててよい。ポートモジュール２８に使用される多数のブロック３８に適用される特定の制限が説明されたが、ポートモジュール２８に使用される多数のブロック３８に適用される適切な如何なる制限をも本発明は想定している。
【００３１】
特定の実施例では、ICCA３３のセントラル入力制御モジュール３５は、セントラルエージェント３４によって特定のポートモジュール２８に割り当てられたクレジットを格納し、リンクしたリストを用いてポート割当済みクレジットを管理することができる。ポートモジュール２８がセントラル入力制御モジュール３５からクレジットを要求した後に、セントラル入力制御モジュール３５は特定のイネーブルされたポートモジュール２８にポート割当済みクレジットを転送することができる。特定の実施例では、ポート割当済みクレジットは、スイッチングモジュール３７を介してセントラル入力制御モジュール３５により、イネーブルされたポートモジュール２８に転送される。ポートがディセーブルされると、セントラル入力制御モジュール３５及びスイッチングモジュール３７は、ディセーブルされたポートに割り当てられたクレジットを収集及び解放するように共に機能する。図示の例はICCA３３内にセントラル入力制御モジュール３５を含んでいるが、別の実施例では、セントラル入力制御モジュール３５は適切な如何なる場所に合ってもよく、例えばセントラルエージェント３４内でもよいし、ポートモジュール２８自身の中でもよい。
【００３２】
イネーブルされたポートに関連する第１ポートモジュール２８がパケットをストリームメモリ３０に書き込む場合、第１ポートモジュール２８はパケットヘッダからの情報（例えば、１つ以上の宛先アドレス）をスイッチングモジュール３７を介してルーティングモジュール３６に伝送することができ、ルーティングモジュール３６は、パケットの指定されたポートモジュールである１つ以上の第２ポートモジュール２８を特定するのにその情報を使用可能である。第１ポートモジュール２８は、パケットが書き込まれた第１ブロック３８のアドレスと、ストリームメモリ３０からパケットを読み取るために第２ポートモジュール２８により共に使用可能なオフセットとをルーティングモジュール３６に伝送する。このアドレスとオフセットの組み合わせ（又はパケットの内容が格納されている場所を特定する何らかの他の情報）は、「ポインタ」として言及される。ルーティングモジュール３６は、１つ以上のルーティングテーブルとパケットヘッダ中の情報とを利用して第２ポートモジュール２８を識別することができ、第２モジュール２８の特定後に、第１ブロック３８を指すポインタを各第２ポートモジュール２８に通知し、以下で更に詳細に説明されるように、第２ポートモジュール２８は出力キューに指示内容を追加することができる。特定の実施例では、ルーティングモジュール３６はICCA３３を介して第２ポートモジュール２８に情報を通知する。
【００３３】
特定の実施例では、スイッチングモジュール３７は、ポートモジュール２８とルーティングモジュール３６及びICCA３３双方との間を結合し、ポートがイネーブルされた場合にポートモジュール２８及びICCA３３又はルーティングモジュール３６の間での情報通信を促す。ポートがディセーブルされると、スイッチングモジュール３７は、ディセーブルされたポートに関するポート割当済みクレジットの収集及び解放を支援する。１つのスイッチングモジュール３７が描かれているが、スイッチングモジュール３７は適切なスイッチングモジュールをいくつでも表現してよいことに留意すべきである。更に、スイッチングモジュール３７は適切な如何なる数のポートモジュール２８で共有されてもよい。更に、スイッチングモジュール３７の機能は１つ又はそれ以上のスイッチの他の素子に組み込まれてもよい。
【００３４】
出力ポートモジュール２８は１つ以上の出力得キューを含むことができ、出力キューは、ストリームメモリ３０書き込まれるパケットのポインタを並べるのに使用され且つ関連するポートモジュール２８を介してスイッチコア２６から通知される。パケットがストリームメモリ３０に書き込まれると、パケットに関連するポインタが各ポートモジュール２８の出力キューに追加され、そのポートモジュールからパケットが通知される。図６Ａ，６Ｂに関連して以下で説明されるように、指定されたポートモジュール２８の出力キュー構造は、状況によってはバイパスされてもよい。
【００３５】
特定の実施例では、ポートモジュール２８は、１つ以上のリンクしたリストを含むメモリ構造を有し、ポートモジュール２８１つ以上のレジスタと共にそのリストを用いてストリームメモリ３０から読み取る次のパケットを決定する。メモリ構造は複数のエントリを含み、複数の内の少なくともいくつかの各々はストリームメモリ３０のブロック３８に対応する。ストリームメモリ３０の各ブロック３８は、そのメモリ構造中の対応するエントリを有する。メモリ構造中のエントリは、メモリ構造中の別のエントリを指すポインタを含み、その結果リンクしたリストが提供される。ポートモジュール２８は１つ以上のレジスタを含み、ポートモジュール２８はそのレジスタを利用してストリームメモリ３０から読み取る次のパケットを判別する。レジスタは書込ポインタ(ライトポインタ)、オフセット及び読取ポインタ(リードポインタ)を含む。書込ポインタは第１ブロックを指し、その第１ブロックに第１パケットが書き込まれており、オフセットは第１ワード４０を示し、第１パケットがその第１ワードに書き込まれており、読取ポインタは第１ブロック３８を指し、その第１ブロックに第２パケットが書き込まれている（第２パケットは、第１パケットと同じパケットでもよいし、或いは第１パケットと別のパケットでもよい。）。メモリ構造中のエントリ各々はストリームメモリ３０のブロック３８に対応するので、ブロック３８を指すポインタもメモリ構造中のエントリを指す。
【００３６】
ポートモジュール２８は、ストリームメモリ３０から読み取る次のパケットを決定するのにリードポインタを使用することができる（上記の「第１」パケットに対応する。）。ポートモジュール２８は、オフセットを書き込むメモリ構造中の次のエントリを決定するためにライトポインタを使用することができる。ポートモジュール２８はそのオフセットを用いてブロック３８のワード４０を決定し、以下に説明されるようにブロック３８のそのワードから読取を開始する。ポートモジュール２８は、リードポインタ及びライトポインタを用いて、１つより多くのパケットが出力キューにあるか否かを判定することもできる。出力キューが空でなく且つライトポインタ及びリードポインタ双方が同じブロック３８を指していた場合、その出力キューには唯１つのパケットしかない。出力キューの中に唯１つのパケットしか存在していなかった場合、ポートモジュール２８はストリームメモリ３０から読み取る次のパケットを確認することができ、メモリ構造にアクセスせずに、ストリームメモリ３０から次のパケットを読み取ることができる。
【００３７】
出力キューに一切パケットがなかった場合に、第１パケットが出力キューに追加されたならば、（１）レジスタ中のライトポインタは、第１パケットが書き込まれた第１ブロック３８を指すように修正され、（２）第１パケットが書き込まれた第１ワード４０を示すようにオフセットが修正され、（３）第１パケットが書き込まれた第１ブロック３８を指すようにリードポインタも修正される。ポートモジュール２８がストリームメモリ３０から第１パケットを読み出す前に、第２パケットが出力キューに追加されたならば、（１）第２パケットが書き込まれた第１ブロック３８を指すようにライトポインタが修正され、（２）第１パケットが書き込まれた第１ブロック３８に対応するメモリ構造中の第１エントリにオフセットが書き込まれ、そしてそのオフセットは、第２パケットが書き込まれた第１ワード４０を示すように修正され、（３）第１エントリ中のポインタは、第２パケットが書き込まれた第１ブロック３８を指すように修正される。リードポインタは不変のまま残され、第２パケットが出力キューに追加された後も、リードポインタは、第１パケットが書き込まれた第１ブロック３８を依然として指すようにする。以下で更に詳細に説明されるように、ストリームメモリ３０から出力キュー内のパケットをポートモジュール２８が読み込んだ場合に、リードポインタは変更される。第１パケット及び第２パケットをストリームメモリ３０からポートモジュール２８が読み込む前に、第３パケットが出力キューに追加された場合、（１）第３パケットが書き込まれた第１ブロック３８を指すようにライトポインタが修正され、（２）第２パケットが書き込まれた第１ブロック３８に対応するメモリ構造中の第２エントリにオフセットが書き込まれ、そしてそのオフセットは第３パケットが書き込まれた第１ワード４０を示すように修正され、（３）第２エントリ中のポインタは、第３パケットが書き込まれた第１ブロック３８を指すように修正される。再びリードポインタは不変のまま残され、第３パケットが出力キューに追加された後も、リードポインタは、第１パケットが書き込まれた第１ブロック３８を依然として指すようにする。ポートモジュール２８は、ストリームメモリ３０から読み出す次のパケットを決定するために出力キューを使用することができる。
【００３８】
ポートモジュール２８が１つ以上の出力キューを含む場合、出力キューの中で調停を行うアルゴリズムが使用されてもよい。複数の出力キューの中での調停(仲裁)は後続出力キューを決定することを含み、それはストリームメモリ３０から読み出す次のパケットを決めるのに使用するためのものである。複数の出力キューの中での調停は、第２出力キューを用いてストリームメモリ３０から読み出す次のパケットを決定する前にトリームメモリ３０から読み出す第１出力キュー内のパケット数を確認することを含む。本発明は複数の出力キュー内で調停を行う適切な如何なるアルゴリズムをも想定している。非限定的な具体例として、ポートモジュール２８の複数の出力キュー内の調停用アルゴリズムに従って、ポートモジュール２８は連続的な巡回形式で空でない出力キューにアクセスする。ある循環サイクルで、ポートモジュール２８は所定の順序で出力キューを連続的にアクセスし、ポートモジュール２８は、出力キューにアクセスすると、出力キュー内の１つ以上のパケットをストリームメモリ３０から読み出す。ポートモジュール２８が巡回形式で出力キューから読み出すパケット数は、ポートモジュール２８の１つ以上の他の出力キュー各々からポートモジュール２８が同じ巡回サイクルの中で読み出すパケット数と同じでもよいし異なっていてもよい。特定の実施例では、巡回形式で出力キューから読み出し可能なパケット数は、あるデータ量を決める量子化値に基づき、そのデータ量に応じて、出力キュー内に少数のパケットしかなかったならば出力キューから、より多くのパケットが読み出し可能であり、出力キュー内に多数のパケットがあったならば出力キューから、より少ないパケットしか読み出せず、この方法はポートモジュール２８の出力リンクの公平な共有を促すことができる。
【００３９】
図５は出力モジュール１００の一例を示すブロック図である。出力モジュール１００はパケットを出力する多くの一般的なスイッチで使用される。出力モジュール１００は、転送リクエストデータベース１１０、出力キュー構造１２０、メモリアクセスユニット１３０及びストリームメモリ３０を有する。転送リクエストデータベース１１０は、パケットを受信した入力ポートモジュール２８からそのパケットに関する情報を受信する。転送リクエストデータベース１１０はその情報を用いて出力ポートを特定し、その出力ポートによりパケットはスイッチから伝送される。転送リクエストデータベース１１０は転送リクエストを収集し、それを適切な出力キュー構造１２０に送信し、出力キュー構造は例えば出力ポートモジュール２８にあってもよい。転送リクエストはストリームメモリに格納されたパケットを指す又は適切な他の何らかの身元を指すポインタを含み、ポインタは特定の出力ポートから伝送されるものであり且つその特定の出力ポートによりアクセスも出力もされていないものである。転送リクエストデータベース１１０はスイッチコア２６の適切な如何なる場所にあってもよい。特定の実施例では転送リクエストデータベース１１０はルーティングモジュール３６内にあってもよい。別の実施例では転送リクエストデータベース１１０は特定の出力ポートモジュール２８内にあってもよい。
【００４０】
転送リクエストデータベース１１０から転送リクエストを受信した後で、出力キュー構造１２０は転送リクエストを整列させ、並んだリクエストの中で調停を行い、メモリアクセスユニット１３０に送信する転送リクエストを選択する。出力キュー構造１２０は１つ以上の変数(例えば、QoS)に対応する適切な如何なる数のキューを含んでいてもよい。出力キュー構造１２０は、スイッチコア２６内の適切な如何なる場所にあってもよく、例えば出力ポートモジュール２８内にあってもよい。或いは、出力キュー構造１２０は中枢的に例えばセントラルエージェント３４内にあってもよい。
【００４１】
メモリアクセスユニット１３０は、出力キュー構造１２０から選択された転送リクエストを受信し、選択された転送リクエストに関連するパケット(ストリームメモリ３０中のパケット)にアクセスし、それらのパケットを関連する出力ポートから出力する。メモリアクセスユニット１３０はスイッチコア２６の適切な如何なる場所にあってもよく、例えば関連する出力ポートモジュール２８内にあってもよい。代替的に、メモリアクセスユニット１３０は中枢的に例えばセントラルエージェント３４内にあってもよい。矢印１４０はスイッチから出力されるパケットを表現する。パケットは、関連する出力ポートから伝送される前に、ストリームメモリ３０からメモリアクセスユニット１３０を介して伝搬する。
【００４２】
動作時にあっては、スイッチのポートモジュール２８はパケットを受信し、そのパケットをストリームメモリ３０に格納する。ポートモジュール２８はパケットに関連する情報（例えば、宛先アドレス）を転送リクエストデータベース１１０に転送し、そのデータベースは例えばルーティングモジュール３６内にあってもよい。転送リクエストデータベース１１０はその情報を用いて出力ポートを確認し、その出力ポートからパケットは転送される。出力キューを確認した後で、転送リクエストデータベース１１０は転送リクエストを収集し、確認された出力ポートに関連する出力キュー構造に転送する。出力キュー構造は例えば確認された出力ポートに関連する出力ポートモジュール２８にあってもよい。出力キュー構造１２０は、受信した転送リクエストを適切なキューに並べ、様々なキューに並べられたリクエストの中で調停を行って転送リクエストを選択し、メモリアクセスユニット１３０に送信する。メモリアクセスユニット１３０は、選択された転送リクエストを出力キュー構造１２０から受信し、選択された転送リクエストに関連するパケットにメモリアクセスユニット１３０内でアクセスする。メモリアクセスユニット１３０は関連する出力ポートを介してこれらのパケットを出力する。
【００４３】
一般的な出力モジュール１００を利用する利点は、出力キュー優先度の厳格な遵守を含む。しかしながら出力キュー優先度を厳格に遵守することによる利点が、出力キュー構造を用いることで生じるレイテンシの増加に負けてしまう状況があるかもしれない。例えば、比較的少数のパケットがポートからの伝送に関わっている場合、キュー構造を迂回することでレイテンシの短縮が達成されるかもしれない。（係属しているパケット数によらず）レイテンシの短縮が厳格に優先度を遵守するよりも重要な別の状況も存在するかもしれない。これらの何からの状況では、一例の出力モジュール１００は、パケットに関する全てのリクエストをキューに並べることを要するので、パケットを処理する観点からは非効率的な方法になり、レイテンシを増やすかもしれない。
【００４４】
図６は本発明の一実施例による別の出力モジュールの一例を示すブロック図である。出力モジュール２００は、特定の状況では出力キュー構造２３０のバイパスを促すことで、スイッチを介するパケットのレイテンシを減らす。特定の実施例では、厳格な優先度処理が望まれる場合には、出力キュー構造２３０のバイパスはディセーブルにされる。
【００４５】
出力モジュール２００は転送リクエストデータベース２１０、メモリアクセスユニット２２０、出力キュー構造２３０及びストリームメモリ３０を有する。図５の転送リクエストデータベース１１０と同様に、転送リクエストデータベース２１０はパケットに関連する情報（例えば、パケットの宛先アドレスのような情報）をそのパケットを受信した入力ポートモジュール２８から受信する。転送リクエストデータベース２１０はこの情報を使って出力ポートを特定し、その出力ポートによりパケットはスイッチから伝送される。転送リクエストデータベース２１０は転送リクエストを生成し、適切なメモリアクセスユニット２２０に送信し、メモリアクセスユニットは例えば出力ポートモジュール２８内にあってもよい。転送リクエストデータベース２１０は、スイッチコア２６内の適切な如何なる場所にあってもよい。特定の実施例では転送リクエストデータベース２１０はルーティングモジュール３６内にあるかもしれない。代替実施例では、転送リクエストデータベース２１０は特定の出力ポートモジュール２８内にあるかもしれない。
【００４６】
メモリアクセスユニット２２０は、適切な何らかのメモリアクセスユニットで構成され、転送リクエストデータベース２１０から新たな転送リクエストを直接的に受信し、新たな転送リクエストが出力キュー構造２３０をバイパスすべきか否かを管理する。出力キュー構造２３０のバイパスを管理するために、メモリアクセスユニット２２０は、新たな転送リクエストを出力キュー構造２３０に選択的に転送し又はそれらを自身のリクエストバッファ（図示せず）に置く。メモリアクセスユニットは、出力キュー構造２３０との相互作用で時々生じる、受信した転送リクエストの消費を促す。メモリアクセスユニット２２０が出力キュー構造２３０のバイパスを管理する方法は、図７に関連して以下で更に説明される。メモリアクセスユニット２２０及び出力キュー構造２３０が相互作用し、受信した転送リクエストを消費する方法は、図８に関連して以下で更に説明される。
【００４７】
メモリアクセスユニット２２０は、リクエストバッファ（図示せず）、出力キュー構造２３０に関わっているリクエストについてのリクエストカウンタ２２２、及びメモリアクセスユニット２２０に関わっているリクエストについてのリクエストカウンタ２２４を有する。リクエストバッファは、転送リクエストデータベース２１０から直接的に送信された又は出力キュー構造２３０から抽出された転送リクエストを格納する。リクエストバッファ中のリクエストは、メモリアクセスユニット２２０により適切な如何なる方法で並べられてもよい。例えば、リクエストは先入れ先出し(FIFO)方式で又は他の適切な方法で並べられてもよい。出力キュー構造２３０を迂回する場合、メモリアクセスユニット２２０はリクエストバッファを用いてリクエストをかなり速やかに処理するかもしれない。しかしながらリクエストバッファは出力キュー構造２３０よりもかなり小さいので、出力キュー構造２３０は特定の状況でしか迂回されないかもしれない（即ち、係属中のリクエスト数が比較的少数の場合である。）。
【００４８】
リクエストカウンタ２２２は、出力キュー構造２３０に係属している転送リクエスト数の勘定を維持する適切な如何なるカウンタで構成されてよい。メモリアクセスユニット２２０は、メモリアクセスユニット２２０が新たなリクエストを出力キュー構造２３０に転送する場合にカウンタ２２２を増やし、メモリアクセスユニット２２０が出力キュー構造２３０からキューに並んだリクエストを受信する場合にカウンタ２２２を減らす。  留意すべきである。リクエストカウンタ２２２は、出力キュー構造２３０に係属しているリクエスト数の勘定を維持する適切な如何なるカウンタで置換されてもよいことに留意すべきである。
【００４９】
リクエストカウンタ２２４は、メモリアクセスユニット２２０のリクエストバッファに係属している転送リクエスト数の勘定を維持する適切な如何なるカウンタで構成されてよい。メモリアクセスユニット２２０が転送リクエストデータベース２１０から新たなリクエストを及び出力キュー構造２３０からキューに並んだリクエストを受信した場合に、メモリアクセスユニット２２０はカウンタ２２４を増やす。メモリアクセスユニット２２０が出力キュー構造２３０に新たなリクエストを転送する場合及びメモリアクセスユニット２２０がリクエストを消費する場合に、メモリアクセスユニット２２０はカウンタ２２４を減らす。このように、メモリアクセスユニット２２０のリクエストバッファ中の転送リクエスト数が或る閾値を下回るか否か（即ち、リクエストバッファにより格納可能な最大数に又は何らかの他の低い閾値に、転送リクエスト数が達したか否か）をカウンタ２２４は示す。メモリアクセスユニット２２０のリクエストバッファ中の転送リクエスト数が所定の閾値を下回るか否か（即ち、リクエストバッファが一杯であるか否か又は何らかの他の低い閾値に達したか否か）を示す適切な他の如何なる構成要素でカウンタ２２４は置換されてもよいことに留意すべきである。リクエストを「消費する(consuming)」ということは、ストリームメモリ３０内の関連するパケットにアクセスし、関連する出力ポートからパケットを転送することに関連することに更に留意すべきである。
【００５０】
リクエストバッファに受信したパケットを格納し及び整列させた後で、メモリアクセスユニット２２０は、リクエストバッファで決定された特定の順序でストリームメモリ３０に格納された関連するパケットにアクセスする。メモリアクセスユニット２２０は関連するパケットを関連する出力ポートから転送する。矢印２４０はスイッチから出力されるパケットを表現する。関連する出力ポートから伝送される前に、パケットはストリームメモリ３０からメモリアクセスユニット２２０を介して進行する。
【００５１】
出力キュー構造２３０は適切な如何なる出力キュー構造で構成されてもよく、メモリアクセスユニット２２０から転送リクエストを受信し、適切な何らかの優先制御法を用いて受信した転送リクエストを適切なキューに並べ、適切な何らかの調停法を用いてキューに並んだリクエストの中で調停を行う。出力キュー構造２３０は、１つ以上の変数(例えば、QoS)に対応する適切な如何なる数のキューを含んでもよい。出力キュー構造２３０はスイッチコア２６内の適切な如何なる場所にあってもよく、例えば出力ポートモジュール２８内にあってもよい。或いは出力キュー構造２３０は中枢的に例えばセントラルエージェント３４内にあってもよい。
【００５２】
動作時にあっては、スイッチのポートモジュール２８はパケットを受信し、そのパケットをストリームメモリ３０に格納する。ポートモジュール２８はパケットに関連する情報(例えば、宛先アドレス)を転送リクエストデータベース２１０に転送する。転送リクエストデータベース２１０はこの情報を用いて出力ポートを特定し、その出力ポートからパケットが転送される。出力ポートを特定した後で、転送リクエストデータベース２１０は転送リクエストを収集し、確認された出力ポートに関連するメモリアクセスユニット２２０に送信する。図７に関連して以下で更に詳細に説明されるように、メモリアクセスユニット２２０は、転送リクエストデータベース２１０から新たな転送リクエストを受信し、カウンタ２２２，２２４を用いて出力キュー構造２３０のバイパスを管理する。概して、リクエストバッファ内の転送リクエスト数が或る第１閾値（即ち、リクエストバッファに格納可能な最大数又は他の何らかのより少ない数）未満であることがカウンタ２２４を用いて確認された場合、及び出力キュー構造２３０内の転送リクエスト数が或る第２閾値（即ち、構造２３０が空であるような場合の閾値は１）未満であることがカウンタ２２２を用いて確認された場合、メモリアクセスユニット２２０はリクエストバッファに新たな転送リクエストを設ける。リクエストバッファが一杯であった場合又は出力キュー構造２３０が空でなかった場合、メモリアクセスユニット２２０は新たな転送リクエストを出力キュー構造２３０に転送する。出力キュー構造２３０が迂回されない場合、出力キュー構造２３０は受信したリクエストを適切にキューに並べ、キューに並んだリクエストから選択を行う。メモリアクセスユニット２２０は選択された転送リクエストを出力キュー構造２３０から抽出し、（リクエストバッファが一杯でなかった場合）リクエストバッファ内に置く。出力キュー構造がバイパスされてもされなくても、リクエストバッファ中の転送リクエストは適切に整列させられ、リクエストバッファ中のその順序に従って処理される。
【００５３】
出力キュー構造のバイパスがディセーブルされる場合、メモリアクセスユニット２２０は、転送リクエストデータベース２１０から転送リクエストを受信し、これらのリクエストを出力キュー構造２３０に転送し、出力キュー構造２３０で決定された順序でリクエストを受信し、出力キュー構造２３０から受信したリクエストをリクエストバッファ内に置き、出力キュー構造２３０で決定された順序で、関連するパケットの送信を支援する。例えば、係属中の転送リクエスト数が閾値を越えた場合（即ち、レイテンシがかなり少ないとはもはや言えなくなった場合）又は厳密な優先度規則が強制される等の場合に、出力キュー構造のバイパスはディセーブルされるかもしれない。バイパスのイネーブル及びディセーブルは、適切な如何なる方法で生じてもよく、例えば動的に引き起こすことも含まれる。例えばセントラルエージェント３４のような適切な如何なる構成要素がバイパスをイネーブルに又はディセーブルにしてもよい。バイパスのディセーブル又はイネーブルが、出力キュー構造２３０、転送リクエストデータベース２１０又はメモリアクセスユニット２２０で係属中のリクエスト数に基づく場合、これらの構成要素の１つ以上から、バイパスをディセーブルに又はイネーブルにする構成要素に適切な情報が通知され、バイパスを適切にイネーブルに又はディセーブルにする。
【００５４】
図７は出力キュー構造のバイパスを管理する本発明の特定の実施例による方法例を示すフローチャートである。特定の実施例では方法３００は例えば上述のメモリアクセスユニット２２０のようなスイッチ内のメモリアクセスユニット２２０で実行されてもよい。或いは方法３００は適切な如何なる構成要素によって又は構成要素の組み合わせによって実行されてもよい。概して、リクエストバッファ内の転送リクエスト数（上述）が或る第１閾値未満であった場合（即ち、リクエストバッファに格納可能な最大数のような適切な何らかの数未満であり、リクエストバッファは一杯でなかった場合）、及び出力キュー構造中の転送リクエスト数が所定の第２閾値未満であった場合（即ち、閾値１未満であり、出力キュー構造は空であった場合）、メモリアクセスユニットはリクエストバッファに新たな転送リクエストを用意し、出力キュー構造をバイパスする。リクエストバッファが第１閾値であった又はそれより大きかった場合（即ち、バッファが一杯であった場合）、又は出力キュー構造２３０が第２閾値であった又はそれより大きかった場合（即ち、構造が空でなかった場合）、メモリアクセスユニットは新たな転送リクエストを出力キュー構造に転送する。代替実施例では出力キュー構造のバイパスが適切な他の何らかの方法で管理されてもよい。
【００５５】
方法３００はステップ３１０から始まり、新たな転送リクエストが受信される。新たな転送リクエストは、例えば、転送リクエストデータベース（即ち、データベース２１０）からメモリアクセスユニット（即ち、ユニット２２０）で受信されてもよい。メモリアクセスユニットはフローチャートでは「MAU」と表現され、転送リクエストデータベースはフローチャートでは「FWD」と表現される。
【００５６】
ステップ３２０では、メモリアクセスユニットのリクエストバッファが一杯であるか否かの判定がなされる。リクエストバッファは、例えば、図６に関して説明されたようなリクエストバッファでもよい。リクエストバッファが一杯であるか否かの上記の判定は、特定の実施例ではカウンタ(即ち、カウンタ２２４)を用いて実行されてもよい。代替実施例ではその判定は適切な如何なる方法でなされてもよい。
【００５７】
メモリアクセスユニットのリクエストバッファが一杯であったならば、本方法はステップ３３０に進む。ステップ３３０では、新たな転送リクエストが出力キュー構造（即ち、構造２３０）に送信される。そして出力キュー構造は新たな転送リクエストを抽出する。例えば、メモリアクセスユニットが、リクエストバッファ内の転送リクエストを消費し、新たな転送リクエストより先にキューに並んだ出力キュー構造内の他の何らかの転送リクエストを抽出した後に、メモリアクセスユニットは出力キュー構造から新たな転送リクエストを抽出する。メモリアクセスユニット及び出力キュー構造が、受信した転送リクエストを消費するように関わる方法は、図８に関連して以下で更に説明される。
【００５８】
ステップ３２０でメモリアクセスユニットのリクエストバッファが一杯でないことが確認されると、ステップ３４０で出力キュー構造が空であるか否かが確認される。出力キュー構造が空であるか否かについての判定は、特定の実施例ではカウンタ（即ち、メモリアクセスユニット２２０のカウンタ２２２）を用いてなされてもよい。代替実施例ではその判定は適切な如何なる方法でなされてもよい。
【００５９】
出力キュー構造が空であった場合、本方法はステップ３５０に進む。ステップ３５０では新たな転送リクエストがメモリアクセスユニットのリクエストバッファに置かれる。転送リクエストはリクエストバッファの適切な何らかの方法で並べられる（FIFO方式であるとは限らない）。図８に関して更に後述されるように、メモリアクセスユニットは、リクエストバッファで決定された順序でリクエストバッファ内の転送リクエストを消費する。ステップ３４０で出力キュー構造が空でないことが確認されると、本方法は上述したようにステップ３３０に進む。本方法では転送リクエストが出力キュー構造内に残っていた場合、新たなリクエストは出力キュー構造をバイパスしない。メモリアクセスユニット内のリクエストバッファが一杯であった場合も、新たなリクエストは出力キュー構造をバイパスしない。
【００６０】
図８は転送リクエストの消費を管理する本発明の特定の実施例による方法例を示すフローチャートである。特定の実施例では、メモリアクセスユニット(即ち、ユニット２２０)及び／又は出力キュー構造(即ち、ユニット２３０)内の転送リクエストの消費が管理される。方法４００は、（リクエストバッファが一杯でなかった場合に）出力キュー構造から選択された何らかの転送リクエストを抽出してリクエストバッファに置くことをメモリアクセスユニットに許容し、リクエストバッファ内でそれらの順序に従ってリクエストバッファ内の転送リクエストを消費することをメモリアクセスユニットに許可する。方法４００は方法３００が実行される前に、途中で又は後で適切に使用されてよい。
【００６１】
方法４００はステップ４１０から始まり、メモリアクセスユニットのリクエストバッファが空であるか否かの判定がなされる。リクエストバッファが空であるか否かについての判定は、例えばカウンタ(即ち、カウンタ２２４)を用いてなされてもよい。代替実施例ではその判定は適切な他の如何なる方法でなされてもよい。
【００６２】
リクエストバッファが空であった場合、リクエストバッファ内の次の転送リクエストがステップ４２０で消費される。方法４００はステップ４３０に進む。上述したように、概して転送リクエストを消費するということは、ストリームメモリ３０内で関連するパケットにアクセスし、そのパケットを関連する出力ポートに転送することに関する。
【００６３】
ステップ４１０でリクエストバッファが空であったことが確認されると（又はステップ４２０の後で）、本方法４００はステップ４３０に進む。ステップ４３０では出力キュー構造が空であるか否かの判定がなされる。出力キュー構造が空であったか否かについての判定は、例えばカウンタ（即ち、カウンタ２２２）を用いてなされてもよい。代替実施例ではその判定は適切な他の如何なる方法でなされてもよい。
【００６４】
出力キュー構造が空であったことがステップ４３０で確認された場合、本方法４００はステップ４１０に戻る。出力キュー構造が空でなかったことがステップ４３０で確認された場合、本方法４００はステップ４４０に進む。ステップ４４０では、出力キュー構造内の次の転送リクエストがメモリアクセスユニットにより抽出される。出力キュー構造内の次のリクエストは、例えば、（適切に処理された後の）キュー構造から選択された転送リクエストでもよい。
【００６５】
ステップ４４０の後、本方法４００はステップ４５０に進み、抽出されたリクエストがメモリアクセスユニットのリクエストバッファ内に置かれる。抽出されたリクエストは、適切な何らかの方法でリクエストバッファ内で並べられ、リクエストバッファで決定された順序に従って消費される。この方法で方法４００は、（リクエストバッファが一杯でなかった場合に）選択された何らかの転送リクエストを出力キュー構造から抽出してリクエストバッファに置くことをメモリアクセスユニットに許可し、リクエストバッファでそれらの順序に従ってリクエストバッファ内の転送リクエストを消費することをメモリアクセスユニットに許可する。
【００６６】
本開示範囲から逸脱せずに、修正、追加又は省略が説明済みのシステム及び方法になされてもよい。説明されたシステム及び方法の構成要素は、具体的なニーズに応じて統合されてもよいし分散されてもよい。更に、説明されたシステム及び方法の処理は、本開示範囲から逸脱せずに、より多数の、より少数の又は他の構成要素により実行されてもよい。
【００６７】
図９は本発明の別の実施例による別の出力モジュール５００の一例を示すブロック図である。出力モジュール２００と同様に、出力モジュール５００は、特定の状況で出力キュー構造５３０のバイパスを支援することで、スイッチを介するパケットの待ち時間を削減する。厳格な優先制御が望まれる場合、特定の実施例では出力キュー構造５３０のバイパスはディセーブルにされる。
【００６８】
出力モジュール５００は転送リクエストデータベース５１０、メモリアクセスユニット５２０、出力キュー構造５３０及びストリームメモリ３０を有する。転送リクエストデータベース５１０は、スイッチコア２６の中核的な場所にあってもよいし（即ち、ルーティングモジュール３６）、或いは特定の出力ポートモジュール２８にあってもよい。図６の転送リクエストデータベース２１０と同様に、転送リクエストデータベース５１０はパケットに関する情報（例えば、パケットの宛先アドレスのような情報）を、パケットを受信した入力ポートモジュール２８から受信する。転送リクエストデータベース５１０は、その情報を用いて出力ポートを特定し、その出力ポートによりパケットはスイッチから伝送される。この情報を利用して、転送リクエストデータベース５１０は新たな転送リクエストを生成する。
【００６９】
転送リクエストデータベース２１０とは異なり、転送リクエストデータベース５１０は、メモリアクセスユニット５２０に直接的に又は出力キュー構造５３０に直接的に、新たな転送リクエストを選択的に送信し、これにより出力キュー構造５３０のバイパスを管理する。転送リクエストデータベース５１０は、以下で図１０に関して説明される方法で出力キュー構造５３０のバイパスを管理する。特定の実施例では、メモリアクセスユニット５２０内のリクエストバッファ内の転送リクエスト数が或る第１閾値（即ち、リクエストバッファに格納可能な最大数のような適切な何らかの数）未満であることがカウンタ５２２（後述）にアクセスすることで確認された場合、及び出力キュー構造５３０内の転送リクエスト数が或る第２閾値（即ち、構造５３０が空であるような場合の閾値は１）未満であることがカウンタ５１２（後述）を用いて確認された場合、転送リクエストデータベース５１０は、メモリアクセスユニット５２０に直接的に新たな転送リクエストを送信する（リクエストバッファ内に置かれる。）。リクエストバッファが所定の第１閾値以上であった場合（即ち、バッファが一杯であった場合）又は出力キュー構造５３０が所定の第２閾値以上であった場合（即ち、構造５３０が空でなかった場合）、転送リクエストデータベース５１０は新たな転送リクエストを出力キュー構造５３０に送信する。代替実施例では、出力キュー構造のバイパスは、適切な他の何らかの方法で管理されてもよい。図８に関して上述されたように、転送リクエストの消費は方法４００に従って管理されてもよい。
【００７０】
転送リクエストデータベース２１０とは異なり、リクエストカウンタ５１２は、出力キュー構造５３０に係属中の転送リクエスト数の勘定を維持する適切な如何なるカウンタで構成されてもよい。転送リクエストデータベース５１０が新たな転送リクエストを出力キュー構造５３０に送信する場合、転送リクエストデータベース５１０はカウンタ５１２を増やす（インクリメントする）。メモリアクセスユニットが出力キュー構造５３０から転送リクエストを抽出したことの通知を転送リクエストデータベース５１０がメモリアクセスユニット２２０から受けた場合（又は、転送リクエストデータベース５１０が出力キュー構造５３０からその情報に直接的にアクセスする場合）、転送リクエストデータベース５１０はカウンタ５１２を減らす（デクリメントする）。リクエストカウンタ５１２は、出力キュー構造５３０に係属中のリクエスト数の勘定を維持する適切な如何なる構成要素で置換されてもよいことに留意すべきである。特定の実施例では、転送リクエストデータベース５１０はメモリアクセスユニット５２０のカウンタ５２２（後述）にアクセスし、メモリアクセスユニット５２０内のリクエストバッファが一杯であるか否かを確認することに留意すべきである。或いは、転送リクエストデータベース５１０は、適切な何らかの方法で適切な何らかの他の構成要素を用いてリクエストバッファが一杯であるか否かを確認してもよい。
【００７１】
メモリアクセスユニット５２０は適切な如何なるメモリアクセスユニットで構成されてもよく、転送リクエストデータベース５１０から直接的に転送リクエストを受信し、出力キュー構造５３０から直接的に転送リクエストを抽出し、図８に関連して上述した方法４００に従って受信及び抽出された転送リクエストの消費を管理する。しかしながら、図８のステップ４３０では、転送リクエストデータベース５１０内のカウンタ５１２にアクセスすることで出力キュー構造５３０が空であるか否かの判定をメモリアクセスユニット５２０が行ってよいことに留意すべきである。メモリアクセスユニット５２０はこの判定を適切な他の如何なる方法で行ってもよい。
【００７２】
メモリアクセスユニット５２０は、（不図示の）リクエストバッファ及びリクエストカウンタで構成され、リクエストカウンタはリクエストバッファに係属中のリクエストを数える。リクエストバッファは、転送リクエストデータベース５１０から直接的に送信された転送リクエスト又は出力キュー構造５３０から抽出された転送リクエストを格納する。リクエストバッファ中のリクエストは、メモリアクセスユニット５２０により適切な何らかの順序に並べられる。例えばリクエストは先入れ先出し(FIFO)方式で又は他の適切な方式で並べられてもよい。出力キュー構造５３０がバイパスされる場合、転送リクエストは、リクエストバッファのみを用いてより一層かなり速やかに処理される。しかしながら、リクエストバッファは出力キュー構造５３０よりもかなり小さいかもしれないので、出力キュー構造５３０は特定の状況でのみバイパスされる（即ち、係属中のリクエスト数がリクエストバッファのサイズ以下であった場合である。）。
【００７３】
リクエストカウンタ５２２は適切な如何なるカウンタで構成されてもよく、メモリアクセスユニット５２０内のリクエストバッファに係属中の転送リクエスト数の勘定を維持する。メモリアクセスユニット５２０が転送リクエストデータベース５１０から新たなリクエストを受信し、出力キュー構造５３０からリクエストを抽出すると、メモリアクセスユニット５２０はカウンタ５２２をインクリメントする。メモリアクセスユニット５２０は、メモリアクセスユニット５２０がリクエストを消費した場合にカウンタ５２２をデクリメントする。このようにカウンタ５２２は、メモリアクセスユニット５２０のリクエストバッファが一杯であるか否かを示す。この情報は、メモリアクセスユニット５２０により及び転送リクエストデータベース５１０によりアクセスされ使用される。メモリアクセスユニット５２０内のリクエストバッファが一杯であるか否かを示す適切な他の如何なる構成要素でカウンタ５２２が置換されてもよいことに留意すべきである。
【００７４】
受信したリクエストをリクエストバッファに格納して順序付けた後に、メモリアクセスユニット５２０は、リクエストバッファにより決定された特定の順序でストリームメモリ３０に格納された関連するパケットにアクセスする。メモリアクセスユニット５２０は関連するパケットを関連する出力ポートから転送する。矢印５４０はスイッチから出力されるパケットを表現する。関連する出力ポートから伝送される前に、パケットはストリームメモリ３０からメモリアクセスユニット５２０を介して進行する。
【００７５】
出力キュー構造５３０は適切な如何なる出力キュー構造で構成されてよく、転送リクエストデータベース５１０から新たな転送リクエストを受信し、適切な何らかの優先制御法を用いて、受信した転送リクエスト適切なキューに並べ、適切な何らかの調停法を用いて、キューに並べられたリクエストの間で調停を行う。出力キュー構造５３０は、１つ以上の変数(例えば、QoS)に関連する適切な如何なる数のキューを含んでもよい。出力キュー構造５３０で送信に備えて選択された転送リクエストは、メモリアクセスユニット５２０により適切な何らかの方法で抽出される。出力キュー構造５３０はスイッチコア２６内の適切な如何なる場所にあってもよく、例えば出力ポートモジュール２８内にあってもよい。或いは、出力キュー構造５３０は例えばセントラルエージェント３４内のように中枢的な場所にあってもよい。
【００７６】
動作時にあっては、スイッチのポートモジュール２８はパケットを受信し、そのパケットをストリームメモリ３０に格納する。ポートモジュール２８はパケットに関連する情報(例えば、宛先アドレスのような情報)を転送リクエストデータベース５１０に転送する。転送リクエストデータベース５１０はこの情報を用いて出力ポートを特定し、その出力ポートからパケットが転送される。出力ポートを特定した後で、転送リクエストデータベース５１０は転送リクエストを収集し、出力ポートに送信する。転送リクエストデータベース５１０は、確認された出力ポートに関連する出力キュー構造５３０に直接的に又はメモリアクセスユニット５２０に直接的に転送リクエストを選択的に送信し、それにより出力キュー構造５３０のバイパスを管理する。特定の実施例では、メモリアクセスユニット５２０５２０のリクエストバッファ内の転送リクエスト数が或る第１閾値未満であったことがカウンタ５２２にアクセスすることで確認された場合（即ち、リクエストバッファが一杯でなかった場合）、及び出力キュー構造５３０内の転送リクエスト数が或る第２閾値未満であったことがカウンタ５１２を用いて確認された場合（即ち、出力キュー構造５３０が空であった場合）、転送リクエストデータベース５１０は、メモリアクセスユニット５２０に新たな転送リクエストを送信する（リクエストバッファに用意される）。リクエストバッファ内の転送リクエスト数が或る第１閾値以上であった場合（即ち、リクエストバッファが一杯であったような場合）又は出力キュー構造５３０が或る第２閾値以上であった場合（即ち、出力キュー構造が空でなかったような場合）、転送リクエストデータベース５１０は新たな転送リクエストを出力キュー構造５３０に送信する。出力キュー構造５３０は受信した転送リクエストを適切な何らかの方法で処理する。メモリアクセスユニット５２０は、転送リクエストデータベース５１０から直接的に転送リクエストを受信し、出力キュー構造５３０から直接的に転送リクエストを抽出し、受信及び抽出した転送リクエストを適切な何らかの順序でリクエストバッファ内に置き、受信及び抽出した転送リクエストの消費を、図８に関連して上述した方法４００に従って管理する。しかしながら図８のステップ４３０では、転送リクエストデータベース５１０内のカウンタ５１２にアクセスすることで出力キュー構造５３０が空であるか否かの確認をメモリアクセスユニット５２０が行ってよいことに留意すべきである。
【００７７】
出力キュー構造のバイパスがディセーブルされる場合、転送リクエストデータベース５１０は、全ての転送リクエストを出力キュー５３０に直接的に送信する。メモリアクセスユニット５２０は、出力キュー５３０で決定された順序で出力キュー５３０から転送リクエストを抽出し、抽出したリクエストをリクエストバッファ内に置き、出力キュー５３０により決定した順序で関連するパケットの送信を支援する。例えば、係属中の転送リクエスト数が閾値を越えて増加する場合（即ち、レイテンシがかなり少ないとはもはや言えなくなった場合）又は厳密な優先度規則が強制される等の場合に、出力キュー構造のバイパスはディセーブルされるかもしれない。バイパスのイネーブル及びディセーブルは、適切な如何なる方法で生じてもよく、例えば動的に引き起こすことも含まれる。例えばセントラルエージェント３４のような適切な如何なる構成要素がバイパスをイネーブルに又はディセーブルにしてもよい。バイパスのディセーブル又はイネーブルが、出力キュー構造５３０、転送リクエストデータベース５１０又はメモリアクセスユニット５２０で係属中のリクエスト数に基づく場合、これらの構成要素の１つ以上から、バイパスをディセーブルに又はイネーブルにする構成要素に適切な情報が通知され、バイパスを適切にイネーブルに又はディセーブルにする。
【００７８】
図１０は出力キュー構造のバイパスを管理する本発明の特定の実施例による別の方法例６００を示すフローチャートである。特定の実施例では、方法６００は例えば上述の転送リクエストデータベース５１０のようなスイッチ内の転送リクエストデータベースにより実行されてよい。或いは方法６００は適切な如何なる構成要素により又は構成要素の組み合わせにより実行されてもよい。概してメモリアクセスユニット内の(上述の)リクエストバッファが一杯でなく且つ出力キュー構造が空であったならば、転送リクエストデータベースは、新たな転送リクエストをメモリアクセスユニット内のリクエストバッファに送信し、出力キュー構造をバイパスする。リクエストバッファが一杯であった場合又は出力キュー構造が空でなかった場合、転送リクエストデータベースは新たな転送リクエストを出力キュー構造に送信する。代替実施例では出力キュー構造のバイパスは適切な他の何らかの方法で管理されもよい。
【００７９】
方法６００はステップ６１０，６２０から始まり、メモリアクセスユニット内のリクエストバッファが一杯であるか否かを確認することで、新たな転送リクエストを送信することについての判定がなされる。新たな転送リクエストを送信することについての判定は、転送リクエストデータベース（即ち、データベース５１０）によりなされてもよい。リクエストバッファは、例えば、図９に関して上述したリクエストバッファでもよい。特定の実施例では、メモリアクセスユニット内のリクエストバッファが一杯であるか否かについての判定は、適切なカウンタ（即ち、メモリアクセスユニット５２０内のカウンタ５２２）にアクセスすることでなされてもよい。代替実施例では、その判定は適切な他の何らかの方法でなされてもよい。
【００８０】
メモリアクセスユニット内のリクエストバッファが一杯であった場合、本方法はステップ６３０に進む。ステップ６３０では新たな転送リクエストが出力キュー構造（即ち、構造５３０）に送信される。出力キュー構造は新たな転送リクエストを適切に処理してもよい。例えばメモリアクセスユニットが、リクエストバッファ内の転送バッファを消費し、新たな転送リクエストより先にキューに並べられた出力キュー構造中の他の何らかの転送リクエストを処理した後で、メモリアクセスユニットは新たな転送リクエストを出力キュー構造から抽出してよい。メモリアクセスユニット及び出力キュー構造が、受信した転送リクエストを消費するために行う方法は、図８に関して説明済みである。しかしながら図８のステップ４３０では、転送リクエストデータベースのカウンタ（即ち、カウンタ５１２）にアクセスすることで、出力キュー構造が空であるか否かの判定をメモリアクセスユニットが行ってよいことに留意すべきである。
【００８１】
ステップ６２０でメモリアクセスユニットのリクエストバッファが一杯でないことが確認された場合、出力キュー構造が空であるか否かの判定がステップ６４０でなされる。出力キュー構造が空であるか否かについての判定は、特定の実施例ではカウンタ（即ち、転送リクエストデータベース５１０内のカウンタ）を用いてなされてもよい。代替実施例では、その判定は適切な如何なる方法でなされてもよい。
【００８２】
出力キュー構造が空であった場合、本方法はステップ６５０に進む。ステップ６５０では新たな転送リクエストがメモリアクセスユニットに送信され、メモリアクセスユニットのリクエストバッファ内に置かれる。転送リクエストはリクエストバッファで適切な何らかの方法で並べられる（必ずしもFIFO方式ではない。）。図８に関して上述したように、メモリアクセスユニットは、リクエストバッファで決定された順序でリクエストバッファ内の転送リクエストを消費する。ステップ６４０で出力キュー構造が空でなかったことが確認された場合、本方法は上述のステップ６３０に進む。この方法では、転送リクエストが出力キュー構造内に残っている場合には、新たなリクエストは出力キュー構造をバイパスしない。メモリアクセスユニット内のリクエストバッファが一杯であった場合も、新たなリクエストは出力キュー構造をバイパスしない。特定の実施例では、方法６００は方法４００の前に、途中に又は後に適切に使用されてよい。
【００８３】
本開示範囲から逸脱せずに、修正、追加又は省略が説明済みのシステム及び方法になされてもよい。説明されたシステム及び方法の構成要素は、具体的なニーズに応じて統合されてもよいし分散されてもよい。更に説明されたシステム及び方法の処理は、本開示範囲から逸脱せずに、より多数の、より少数の又は他の構成要素により実行されてもよい。更にシステム２００は他の種類のイリーガルパケットを確認及び処理するのに使用されてもよい。
【００８４】
以上本開示内容はいくつかの実施例と共に説明されてきたが、変更、置換、変形、代替及び修正の様々なものが当業者に示唆されるであろうし、本開示ではそのような変更、置換、変形、代替及び修正の全てを添付の特許請求の範囲内に包含することが意図される。
【００８５】
以下、本発明により教示される手段が例示的に列挙される。
【００８６】
（付記１）
スイッチの出力キュー構造をバイパスする方法であって、
スイッチの入力ポートでパケットを受信するステップと、
前記スイッチのメモリに前記パケットを格納するステップと、
格納されたパケットに及び前記スイッチの特定の出力ポートに関連し、前記格納されたパケットの前記メモリ内の場所を特定する転送リクエストを生成するステップと、
前記特定の出力ポートに関連する出力キュー構造をバイパスすることを前記転送リクエストにより引き起こすか否かを決定するステップと、
前記転送リクエストを用いて、該転送リクエストに関連する前記パケットを前記メモリから抽出するステップと、
抽出したパケットを前記特定の出力ポートから送信するステップと、
を有する方法。
【００８７】
（付記２）
前記出力キュー構造をバイパスすることを前記転送リクエストにより引き起こすか否かを決定するステップが、前記特定の出力ポートに関連するメモリアクセスユニットのリクエストバッファで未処理の転送リクエスト数を判定するステップを有し、
当該方法は、前記リクエストバッファで未処理の転送リクエスト数が第１閾値未満であった場合に、前記転送リクエストが前記出力キュー構造をバイパスすることを引き起こすステップを更に有する付記１記載の方法。
【００８８】
（付記３）
前記第１閾値が、前記リクエストバッファに格納可能な転送リクエストの最大数以下である付記２記載の方法。
【００８９】
（付記４）
前記出力キュー構造をバイパスすることを前記転送リクエストにより引き起こすか否かを決定するステップが、前記出力キュー構造で未処理の転送リクエスト数を判定するステップを有し、
当該方法は、前記出力キュー構造で未処理の転送リクエスト数が第２閾値未満であった場合に、前記転送リクエストが前記出力キュー構造をバイパスすることを引き起こすステップを更に有する付記２記載の方法。
【００９０】
（付記５）
前記第２閾値が１である付記４記載の方法。
【００９１】
（付記６）
前記転送リクエストにより前記出力キュー構造をバイパスしないように判定がなされ、当該方法は、
前記出力キュー構造に前記転送リクエストを送信するステップと、  
前記出力キュー構造内の前記転送リクエストを処理するステップと、
前記出力キュー構造で前記転送リクエストを選択するステップと、
を更に有する付記１記載の方法。
【００９２】
（付記７）
前記転送リクエストに関連するパケットを前記メモリから抽出する前に、前記特定の出力ポートに関連するメモリアクセスユニットのリクエストバッファに前記転送リクエストを置くステップを更に有し、前記リクエストバッファは複数の転送リクエストを有し、当該方法は、
前記リクエストバッファで前記複数の転送リクエストを整列させるステップと、
前記転送リクエストを前記リクエストバッファで選択するステップと、
を有する付記１記載の方法。
【００９３】
（付記８）
前記転送リクエストに関連するパケットを前記メモリから抽出する前に、前記特定の出力ポートに関連するメモリアクセスユニットのリクエストバッファに前記転送リクエストを置くステップを更に有し、前記リクエストバッファは複数の転送リクエストを有し、当該方法は、
前記複数の転送リクエストを前記リクエストバッファで先入れ先出し方式で処理するステップと、
前記転送リクエストを前記リクエストバッファで選択するステップと、
を有する付記１記載の方法。
【００９４】
（付記９）
コンピュータ読取可能な媒体にエンコードされた論理装置であって、
スイッチの入力ポートでパケットを受信するステップと、
前記スイッチのメモリに前記パケットを格納するステップと、
格納されたパケットに及び前記スイッチの特定の出力ポートに関連し、前記格納されたパケットの前記メモリ内の場所を特定する転送リクエストを生成するステップと、
前記特定の出力ポートに関連する出力キュー構造をバイパスすることを前記転送リクエストにより引き起こすか否かを決定するステップと、
前記転送リクエストを用いて、該転送リクエストに関連する前記パケットを前記メモリから抽出するステップと、
抽出したパケットを前記特定の出力ポートから送信するステップと、
をコンピュータに実行させる論理装置。
【００９５】
（付記１０）
前記出力キュー構造をバイパスすることを前記転送リクエストにより引き起こすか否かを決定するステップが、前記特定の出力ポートに関連するメモリアクセスユニットのリクエストバッファで未処理の転送リクエスト数を判定するステップを有し、
当該論理装置は、前記リクエストバッファで未処理の転送リクエスト数が第１閾値未満であった場合に、前記転送リクエストが前記出力キュー構造をバイパスすることを引き起こすステップを更にコンピュータに実行させる付記９記載の論理装置。
【００９６】
（付記１１）
前記第１閾値が、前記リクエストバッファに格納可能な転送リクエストの最大数以下である付記１０記載の論理装置。
【００９７】
（付記１２）
前記出力キュー構造をバイパスすることを前記転送リクエストにより引き起こすか否かを決定するステップが、前記出力キュー構造で未処理の転送リクエスト数を判定するステップを有し、
当該論理装置は、前記出力キュー構造で未処理の転送リクエスト数が第２閾値未満であった場合に、前記転送リクエストが前記出力キュー構造をバイパスすることを引き起こすステップを更にコンピュータに実行させる付記１０記載の論理装置。
【００９８】
（付記１３）
前記第２閾値が１である付記１２記載の論理装置。
【００９９】
（付記１４）
前記転送リクエストにより前記出力キュー構造をバイパスしないように判定がなされ、当該論理装置は、
前記出力キュー構造に前記転送リクエストを送信するステップと、
前記出力キュー構造内の前記転送リクエストを処理するステップと、
前記出力キュー構造で前記転送リクエストを選択するステップと、
をコンピュータに更に実行させる付記９記載の論理装置。
【０１００】
（付記１５）
前記転送リクエストに関連するパケットを前記メモリから抽出する前に、前記特定の出力ポートに関連するメモリアクセスユニットのリクエストバッファに前記転送リクエストを置くステップを更に有し、前記リクエストバッファは複数の転送リクエストを有し、当該論理装置は、
前記リクエストバッファで前記複数の転送リクエストを整列させるステップと、
前記転送リクエストを前記リクエストバッファで選択するステップと、
をコンピュータに更に実行させる付記９記載の論理装置。
【０１０１】
（付記１６）
前記転送リクエストに関連するパケットを前記メモリから抽出する前に、前記特定の出力ポートに関連するメモリアクセスユニットのリクエストバッファに前記転送リクエストを置くステップを更に有し、前記リクエストバッファは複数の転送リクエストを有し、当該論理装置は、
前記複数の転送リクエストを前記リクエストバッファで先入れ先出し方式で処理するステップと、
前記転送リクエストを前記リクエストバッファで選択するステップと、
をコンピュータに更に実行させる付記９記載の論理装置。
【０１０２】
（付記１７）
スイッチの出力キュー構造をバイパスするシステムであって、
パケットを受信するためのスイッチの入力ポートと、
受信したパケットを格納する前記スイッチのメモリと、
転送リクエストデータベースを有するルーティングモジュールであって、格納されたパケットに及び前記スイッチの特定の出力ポートに関連し、前記格納されたパケットの前記メモリ内の場所を特定する転送リクエストを生成し、前記転送リクエストをメモリアクセスユニットに送信するルーティングモジュールと、
前記特定の出力ポートに関連するメモリアクセスユニットであって、前記ルーティングモジュールから前記転送リクエストを受信し、前記特定の出力ポートに関連する出力キュー構造をバイパスすることを前記転送リクエストにより引き起こすか否かを決定し、
前記転送リクエストを用いて、該転送リクエストに関連する前記パケットを前記メモリから抽出し、抽出したパケットを前記特定の出力ポートから送信するメモリアクセスユニットと、
を有するシステム。
【０１０３】
（付記１８）
前記メモリアクセスユニットがリクエストバッファを有し、
前記出力キュー構造をバイパスすることを前記転送リクエストにより引き起こすか否かを決定することが、前記特定の出力ポートに関連するメモリアクセスユニットのリクエストバッファで未処理の転送リクエスト数を判定することを含み、
前記メモリアクセスユニットは、前記リクエストバッファで未処理の転送リクエスト数が第１閾値未満であった場合に、前記転送リクエストが前記出力キュー構造をバイパスすることを引き起こす付記１７記載のシステム。
【０１０４】
（付記１９）
前記第１閾値が、前記リクエストバッファに格納可能な転送リクエストの最大数以下である付記１８記載のシステム。
【０１０５】
（付記２０）
前記出力キュー構造をバイパスすることを前記転送リクエストにより引き起こすか否かを決定することが、前記出力キュー構造で未処理の転送リクエスト数を判定することを含み、
前記メモリアクセスユニットは、前記出力キュー構造で未処理の転送リクエスト数が第２閾値未満であった場合に、前記転送リクエストが前記出力キュー構造をバイパスすることを引き起こす付記１８記載のシステム。
【０１０６】
（付記２１）
前記第２閾値が１である付記２０記載のシステム。
【０１０７】
（付記２２）
前記転送リクエストにより前記出力キュー構造をバイパスしないように判定がなされ、
前記メモリアクセスユニットは、前記出力キュー構造に前記転送リクエストを送信し、
当該システムは、前記特手の出力ポートに関連する出力キュー構造を更に有し、前記転送リクエストを処理し、前記転送リクエストを選択する付記１７記載のシステム。
【０１０８】
（付記２３）
前記メモリアクセスユニットがリクエストバッファを有し、前記メモリアクセスユニットは、
前記転送リクエストに関連するパケットを前記メモリから抽出する前に、前記特定の出力ポートに関連するメモリアクセスユニットのリクエストバッファに前記転送リクエストを置き、前記リクエストバッファは複数の転送リクエストを有し、前記複数の転送リクエストを整列させ、前記転送リクエストを選択する付記１７記載のシステム。
【０１０９】
（付記２４）
前記メモリアクセスユニットがリクエストバッファを有し、前記メモリアクセスユニットは、
前記転送リクエストに関連するパケットを前記メモリから抽出する前に、前記特定の出力ポートに関連するメモリアクセスユニットのリクエストバッファに前記転送リクエストを置器、前記リクエストバッファは複数の転送リクエストを有し、前記複数の転送リクエストを先入れ先出し方式で処理し、前記転送リクエストを選択する付記１７記載のシステム。
【０１１０】
（付記２５）
スイッチの出力キュー構造をバイパスするシステムであって、
パケットを受信するためのスイッチの入力ポートと、
受信したパケットを格納する前記スイッチのメモリと、
転送リクエストデータベースを有するルーティングモジュールであって、格納されたパケットに及び前記スイッチの特定の出力ポートに関連し、前記格納されたパケットの前記メモリ内の場所を特定する転送リクエストを生成し、前記特定の出力ポートに関連する出力キュー構造をバイパスすることを前記転送リクエストにより引き起こすか否かを決定するルーティングモジュールと、
前記特定の出力ポートに関連するメモリアクセスユニットであって、前記転送リクエストを受信し、前記転送リクエストを用いて、該転送リクエストに関連する前記パケットを前記メモリから抽出し、受信したパケットを前記特定の出力ポートから送信するメモリアクセスユニットと、
を有するシステム。
【０１１１】
（付記２６）
前記メモリアクセスユニットがリクエストバッファを有し、
前記出力キュー構造をバイパスすることを前記転送リクエストにより引き起こすか否かを決定することが、前記特定の出力ポートに関連するメモリアクセスユニットのリクエストバッファで未処理の転送リクエスト数を判定することを含み、
前記ルーティングモジュールは、前記リクエストバッファで未処理の転送リクエスト数が第１閾値未満であった場合に、前記転送リクエストが前記出力キュー構造をバイパスすることを引き起こす付記２５記載のシステム。
【０１１２】
（付記２７）
前記第１閾値が、前記リクエストバッファに格納可能な転送リクエストの最大数以下である付記２５記載のシステム。
【０１１３】
（付記２８）
前記出力キュー構造をバイパスすることを前記転送リクエストにより引き起こすか否かを決定することが、前記出力キュー構造で未処理の転送リクエスト数を判定することを含み、
前記ルーティングモジュールは、前記出力キュー構造で未処理の転送リクエスト数が第２閾値未満であった場合に、前記転送リクエストが前記出力キュー構造をバイパスすることを引き起こす付記２６記載のシステム。
【０１１４】
（付記２９）
前記第２閾値が１である付記２８記載のシステム。
【０１１５】
（付記３０）
前記転送リクエストにより前記出力キュー構造をバイパスしないように判定がなされ、  
前記ルーティングモジュールは、前記出力キュー構造に前記転送リクエストを送信し、
当該システムは、前記特手の出力ポートに関連する出力キュー構造を更に有し、前記転送リクエストを処理し、前記転送リクエストを選択する付記２５記載のシステム。
【０１１６】
（付記３１）
前記メモリアクセスユニットがリクエストバッファを有し、前記メモリアクセスユニットは、
前記転送リクエストに関連するパケットを前記メモリから抽出する前に、前記特定の出力ポートに関連するメモリアクセスユニットのリクエストバッファに前記転送リクエストを置き、前記リクエストバッファは複数の転送リクエストを有し、前記複数の転送リクエストを整列させ、前記転送リクエストを選択する付記２５記載のシステム。
【０１１７】
（付記３２）
前記メモリアクセスユニットがリクエストバッファを有し、前記メモリアクセスユニットは、
前記転送リクエストに関連するパケットを前記メモリから抽出する前に、前記特定の出力ポートに関連するメモリアクセスユニットのリクエストバッファに前記転送リクエストを置器、前記リクエストバッファは複数の転送リクエストを有し、前記複数の転送リクエストを先入れ先出し方式で処理し、前記転送リクエストを選択する付記２５記載のシステム。
【図面の簡単な説明】
【０１１８】
【図１】システムエリアネットワーク例を示す図である。
【図２】システムエリアネットワークのスイッチの一例を示す図である。
【図３】スイッチのスイッチコアの一例を示す図である。
【図４】スイッチコアの論理的にブロックに分割されたストリームメモリの一例を示す図である。
【図５】出力モジュールの一例を示すブロック図である。
【図６】本発明の一実施例による別の出力モジュールの一例を示すブロック図である。
【図７】出力キュー構造のバイパスを管理する本発明の特定の実施例による方法例を示すフローチャートである。
【図８】転送リクエストの消費を管理する本発明の特定の実施例による方法例を示すフローチャートである。
【図９】本発明の別の実施例による別の出力モジュールの一例を示すブロック図である。
【図１０】出力キュー構造のバイパスを管理する本発明の特定の実施例による別の方法例を示すフローチャートである。
【符号の説明】
【０１１９】
１０  システムエリアネットワーク
１２  相互接続部
１４  サーバーシステム
１６  ストレージシステム
１８  ネットワークシステム
２０  ルーティングシステム
２２  スイッチ
２４  ポート
２６  スイッチコア
２８  ポートモジュール
３０  ストリームメモリ
３２  タグメモリ
３３  入力コントロールアンドセントラルエージェント(ICCA)
３６  ルーティングモジュール
３７  スイッチングモジュール
１００  出力モジュール
１１０  転送リクエストデータベース
１２０  出力キュー構造
１３０  メモリアクセスユニット
２００  出力モジュール
２１０  転送リクエストデータベース
２２０  メモリアクセスユニット
２３０  出力キュー構造
２２２，２２４  リクエストカウンタ
５００  出力モジュール
５１０  転送リクエストデータベース
５２０  メモリアクセスユニット
５１２，５２２  カウンタ
５３０  出力キュー構造
【図１】
2008042916.tif 000005
【図２】
2008042916.tif 000006
【図３】
2008042916.tif 000007
【図４】
2008042916.tif 000008
【図５】
2008042916.tif 000009
【図６】
2008042916.tif 000010
【図７】
2008042916.tif 000011
【図８】
2008042916.tif 000012
【図９】
2008042916.tif 000013
【図１０】
2008042916.tif 000014