(57)【特許請求の範囲】
【請求項１】
パケットをルーティングするためのスイッチであって、
それぞれが固定サイズの複数のキューバッファにそれぞれ関連付けられた複数のキューと、
共有バッファと、
前記複数のキューバッファと前記共有バッファとに連結されたキューポイントコントローラと、を備え、
前記キューポイントコントローラは、
前記複数のキューのうちの選択されたキューに宛てられたパケットの一部を送信ポイントから受信し、
前記選択されたキューに関連付けられた、前記複数のキューバッファのうちの選択されたキューバッファ内の利用可能な領域の量を判断し、
前記選択されたキューバッファ内の判断された前記利用可能な領域の量に基づいて、前記共有バッファの少なくとも一部を、前記選択されたキューに割り当て、
前記送信ポイントは、前記選択されたキューバッファの固定サイズを知らされている、スイッチ。
【請求項２】
前記キューポイントコントローラは、前記共有バッファの少なくとも一部が、前記選択されたキューに割り当てられると、前記送信ポイントに確認応答を送信する、請求項１に記載のスイッチ。
【請求項３】
前記選択されたキューバッファ内の判断された前記利用可能な領域の量に基づいて、前記共有バッファの少なくとも一部を、前記選択されたキューに割り当てることは、前記選択されたキューバッファ内の前記利用可能な領域の量が、利用可能な領域の閾値に等しいか、またはそれより小さいかに基づく、請求項１または２に記載のスイッチ。
【請求項４】
前記選択されたキューは、ネットワークの前記スイッチの１または複数の出力ポートに連結され、
前記パケットの前記一部は、前記１または複数の出力ポートのうちのある出力ポートに宛てられ、
前記キューポイントコントローラはさらに、
前記パケットの前記一部を前記共有バッファの前記少なくとも一部に格納し、
前記共有バッファの前記少なくとも一部が前記送信ポイントに対し不可視となり得るように、信号を前記送信ポイントに送信し、
前記信号は、
前記送信ポイントが、前記選択されたキューに関連付けられたクレジットカウンタをデクリメントすることを防止する、または
前記送信ポイントに、前記選択されたキューに関連付けられた前記クレジットカウンタをインクリメントさせる、請求項１から３のいずれか一項に記載のスイッチ。
【請求項５】
パケットをルーティングするためのスイッチであって、
複数のキューバッファにそれぞれ関連付けられた複数のキューと、
共有バッファと、
前記複数のキューバッファと前記共有バッファとに連結されたキューポイントコントローラと、を備え、
前記キューポイントコントローラは、
前記複数のキューのうちの選択されたキューに宛てられたパケットの一部を送信ポイントから受信し、
前記選択されたキューに関連付けられた、前記複数のキューバッファのうちの選択されたキューバッファ内の利用可能な領域の量を判断し、
前記選択されたキューバッファ内の判断された前記利用可能な領域の量に基づいて、前記共有バッファの少なくとも一部を、前記選択されたキューに割り当て、
前記共有バッファの前記少なくとも一部は前記送信ポイントに不可視であり、
前記選択されたキューは、ネットワークの前記スイッチの１または複数の出力ポートに連結され、
前記パケットの前記一部は、前記１または複数の出力ポートのうちのある出力ポートに宛てられ、
前記キューポイントコントローラはさらに、
前記パケットの前記一部を前記共有バッファの前記少なくとも一部に格納し、
前記共有バッファの前記少なくとも一部が前記送信ポイントに対し不可視となり得るように、信号を前記送信ポイントに送信し、
前記信号は、
前記送信ポイントが、前記選択されたキューに関連付けられたクレジットカウンタをデクリメントすることを防止する、または
前記送信ポイントに、前記選択されたキューに関連付けられた前記クレジットカウンタをインクリメントさせる、スイッチ。
【請求項６】
前記共有バッファの前記少なくとも一部のサイズは、前記パケットのサイズに基づく、請求項４または５に記載のスイッチ。
【請求項７】
前記クレジットカウンタは、前記スイッチのクレジットベースフロー制御メカニズムの一部であり、
前記信号は、前記送信ポイントに対し、データが前記選択されたキューから移動されたことを示す、請求項４から６のいずれか一項に記載のスイッチ。
【請求項８】
前記複数のキューバッファ、前記複数のキューおよび前記共有バッファは、キューポイントを形成し、予め定められた閾値は、前記送信ポイントと前記キューポイントとの間のラウンドトリップ送信時間に基づく、請求項４から７のいずれか一項に記載のスイッチ。
【請求項９】
前記クレジットカウンタは、前記送信ポイントが前記選択されたキューバッファ内の利用可能な領域の量をモニタリングできるようにする送信ポイントクレジットカウンタであり、前記スイッチはさらに、前記選択されたキューに関連付けられたローカルクレジットカウンタを有し、
前記キューポイントコントローラはさらに、前記ローカルクレジットカウンタに、前記送信ポイントクレジットカウンタを模倣させて、前記キューポイントコントローラが、前記信号を前記送信ポイントに送信するときを判断できるようにする、請求項４から８のいずれか一項に記載のスイッチ。
【請求項１０】
前記キューポイントコントローラはさらに、
前記共有バッファの前に割り当てられた部分が必要かを判断し、
前記割り当てられた部分がこれ以上必要ではないとの判断に応答して、前記共有バッファの前記前に割り当てられた部分を解放する、請求項９に記載のスイッチ。
【請求項１１】
前記共有バッファの前記前に割り当てられた部分がこれ以上必要ではないと判断することは、前記共有バッファの前記前に割り当てられた部分が空であることの指標、および、
前記選択されたキューバッファが空であることの指標、
前記共有バッファの前に割り当てられた別の部分が、予め定められた閾値より大きいか、またはそれに等しい利用可能な領域の量を有することの指標、または
前記共有バッファの前に割り当てられた別の部分が、ローカルカウンタの値に等しいか、またはそれより大きい利用可能な領域の量を有することの指標、に基づく、請求項１０に記載のスイッチ。
【請求項１２】
前記送信ポイントクレジットカウンタおよび前記ローカルクレジットカウンタは、前記スイッチのリセットに応答して、前記選択されたキューバッファのサイズにリセットされる、請求項１１に記載のスイッチ。
【請求項１３】
前記複数のキューバッファ、前記複数のキューおよび前記共有バッファは、キューポイントを形成し、前記送信ポイントは、前記スイッチの別のキューポイントである、請求項１から１２のいずれか一項に記載のスイッチ。
【請求項１４】
前記複数のキューバッファ、前記複数のキューおよび前記共有バッファは、キューポイントを形成し、前記キューポイントは、前記スイッチのサブスイッチの一部である、請求項１から１３のいずれか一項に記載のスイッチ。
【請求項１５】
前記スイッチは、１または複数のプロセッサをさらに有する、システムオンチップ（ＳｏＣ）である、請求項１から１４のいずれか一項に記載のスイッチ。
【請求項１６】
スイッチのキューポイントのキューポイントコントローラによって、パケットの少なくとも一部を送信ポイントから受信する段階と、
前記キューポイントコントローラによって、前記キューポイントのキューに関連付けられたキューバッファ内に前記パケットの前記少なくとも一部を格納する段階と、
前記キューポイントコントローラによって、前記キューバッファ内の利用可能な領域を判断する段階と、
前記キューポイントコントローラによって、前記キューバッファ内の前記利用可能な領域に基づいて、共有バッファの少なくとも一部を前記キューに割り当てる段階であって、前記共有バッファは、前記キューポイントの１または複数の追加のキューに関連付けられる、割り当てる段階と、
前記キューポイントコントローラによって、信号を前記送信ポイントに送信して、前記送信ポイントが前記キューに関連付けられたクレジットカウンタをデクリメントすることを防止する、または、前記送信ポイントに、前記キューに関連付けられた前記クレジットカウンタをインクリメントさせる段階と、を備える、スイッチを動作させる方法。
【請求項１７】
スイッチのキューポイントのキューポイントコントローラによって、パケットの少なくとも一部を送信ポイントから受信する段階と、
前記キューポイントコントローラによって、前記キューポイントのキューに関連付けられたキューバッファ内に前記パケットの前記少なくとも一部を格納する段階と、
前記キューポイントコントローラによって、前記キューバッファ内の利用可能な領域を判断する段階と、
前記キューポイントコントローラによって、前記キューバッファ内の前記利用可能な領域に基づいて、共有バッファの少なくとも一部を前記キューに割り当てる段階であって、前記共有バッファは、前記キューポイントの１または複数の追加のキューに関連付けられる、割り当てる段階と、
前記割り当てる段階に続いて、前記キューポイントコントローラによって、前記送信ポイントに確認応答を送信する段階と、を備える、スイッチを動作させる方法。
【請求項１８】
前記キューバッファ内の判断された前記利用可能な領域の量に基づいて割り当てる段階は、前記キューバッファ内の前記利用可能な領域の量が、利用可能な領域の予め定められた閾値に等しいか、またはそれより小さいかに基づく、請求項１６に記載の方法。
【請求項１９】
前記クレジットカウンタは、前記スイッチのクレジットベースフロー制御メカニズムの一部であり、
前記信号は、データが前記キューから移動されることを示す、請求項１８に記載の方法。
【請求項２０】
前記予め定められた閾値は、前記送信ポイントと前記キューポイントとの間のラウンドトリップ送信時間に基づく、請求項１８または１９に記載の方法。
【請求項２１】
前記クレジットカウンタは、前記送信ポイントが前記キューバッファ内の利用可能な領域の量をモニタリングできるようにする送信ポイントクレジットカウンタであり、前記方法はさらに、
前記キューポイントコントローラによって、ローカルクレジットカウンタに、前記送信ポイントクレジットカウンタを模倣させる段階と、
前記キューポイントコントローラによって、前記ローカルクレジットカウンタの値に少なくとも部分的に基づいて、前記信号を前記送信ポイントに送信するときを判断する段階と、を備える、請求項１８から２０のいずれか一項に記載の方法。
【請求項２２】
前記スイッチのリセットに応答して、前記ローカルクレジットカウンタを、前記キューバッファのサイズにリセットする段階をさらに備える、請求項２１に記載の方法。
【請求項２３】
スイッチのキューポイントのキューポイントコントローラに、
パケットの少なくとも一部を送信ポイントから受信する手順と、
前記キューポイントのキューに関連付けられたキューバッファ内に前記パケットの前記少なくとも一部を格納する手順と、
前記キューバッファ内の利用可能な領域の量に基づいて、共有バッファの少なくとも一部を前記キューに割り当てる手順であって、前記共有バッファは、前記キューポイントの１または複数の追加のキューに関連付けられている、割り当てる手順と、
信号を前記送信ポイントに送信して、前記送信ポイントが前記キューに関連付けられたクレジットカウンタをデクリメントすることを防止する、または、前記送信ポイントに、前記キューに関連付けられた前記クレジットカウンタをインクリメントさせる手順と、を実行させるためのプログラム。
【請求項２４】
スイッチのキューポイントのキューポイントコントローラに、
パケットの少なくとも一部を送信ポイントから受信する手順と、
前記キューポイントのキューに関連付けられたキューバッファ内に前記パケットの前記少なくとも一部を格納する手順と、
前記キューバッファ内の利用可能な領域の量に基づいて、共有バッファの少なくとも一部を前記キューに割り当てる手順であって、前記共有バッファは、前記キューポイントの１または複数の追加のキューに関連付けられている、割り当てる手順と、
前記割り当てる手順に続いて、前記送信ポイントに確認応答を送信する手順と、を実行させるためのプログラム。
【請求項２５】
前記キューバッファ内の前記利用可能な領域の量に基づいて割り当てる手順は、前記キューバッファ内の前記利用可能な領域の量が、利用可能な領域の予め定められた閾値に等しいか、またはそれより小さいかに基づく、請求項２３に記載のプログラム。
【請求項２６】
前記クレジットカウンタは、前記スイッチのクレジットベースフロー制御メカニズムの一部であり、
前記信号は、データが前記キューから移動されたことを示す、請求項２５に記載のプログラム。
【請求項２７】
前記予め定められた閾値は、前記送信ポイントと前記キューポイントとの間のラウンドトリップ送信時間に基づく、請求項２５または２６に記載のプログラム。
【請求項２８】
前記クレジットカウンタは、前記送信ポイントが、前記キューバッファ内の利用可能な領域の量をモニタリングできるようにする送信ポイントクレジットカウンタであり、
前記プログラムは、さらに、前記キューポイントコントローラに、
ローカルクレジットカウンタに、前記送信ポイントクレジットカウンタを模倣させる手順と、
前記ローカルクレジットカウンタの値に少なくとも部分的に基づいて、前記信号を前記送信ポイントに送信するときを判断する手順と、を実行させるための、請求項２５から２７のいずれか一項に記載のプログラム。
【請求項２９】
前記プログラムは、さらに、前記キューポイントコントローラに、
前記スイッチのリセットに応答して、前記ローカルクレジットカウンタを前記キューバッファのサイズにリセットする手順を実行させるための、請求項２８に記載のプログラム。
【請求項３０】
請求項２３から２９のいずれか一項に記載のプログラムを格納する１または複数のコンピュータ可読記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、ネットワーキングの分野に関する。具体的には、本開示は、スイッチ内のデータのバッファリングに関する。
【背景技術】
【０００２】
ここに記載された背景技術は、本開示の文脈を一般的に示す目的のものである。本明細書において別途の記載がない限り、この節に記載の内容は、本願の請求項に対する先行技術ではなく、この節に組み込まれることにより先行技術であるとは認められない。
【０００３】
レガシ入力キュースイッチは、ＨＯＬ（Ｈｅａｄ−ｏｆ−Ｌｉｎｅ）ブロッキングに起因する性能問題に遭遇することがある。ＨＯＬブロッキングとは、スイッチの１または複数のリソースに関する競合に起因して、キューの先頭にあるパケット（ヘッドパケット）がサービス提供を受けることができない状況を指してよい。当該パケットがサービス提供を受けることができないので、当該パケットはキューから転送されない可能性がある。結果的に、当該パケットは、同一キュー内の他の後続パケットをブロックする可能性があり、たとえ、それらの後続パケットが同様のリソース競合を有していなくても、キュー内の当該パケットの後方にある後続パケットのサービスを妨害する可能性がある。
【図面の簡単な説明】
【０００４】
以下の詳細な説明に、添付図面を組み合わせることで、実施形態は容易に理解されるであろう。本説明を容易にするため、同様の参照符号は同様の構造要素を指す。添付図面中、実施形態は限定ではなく例示として示されている。
【図１】本開示の実施形態による、本開示のバッファリングの教示に組み込まれるスイッチのブロック図を示す。
【図２】本開示の実施形態による、スイッチ内のデータをルーティングするための例示的な処理を示す。
【図３】本開示の実施形態による、本開示の様々な態様を実施するために好適に使用される例示的なコンピューティングシステムを示す。
【図４】開示された実施形態による、本明細書に記載の方法を実施するための命令を有する記録媒体を示す。
【発明を実施するための形態】
【０００５】
本明細書に、スイッチ内のデータのバッファリングに関連する装置、方法および記録媒体が提供される。実施形態において、スイッチは、複数の入力ポートおよび複数の出力ポートを含んでよい。スイッチは、デスティネーションノードにルーティングされるべき、パケットまたはパケットの一部を入力ポートにおいて受信してよい。スイッチは、１または複数のキューポイントを含んでよく、当該キューポイントにおいて、パケットまたはパケットの一部はバッファリングされてよい。これらのキューポイントは、複数のキューバッファおよび複数のキューを含んでよく、複数のキューは、複数の入力ポートのそれぞれに連結され、複数のキューバッファにそれぞれ関連付けられている。複数のキューバッファは、選択されたキューに関連付けられた、複数のキューバッファのうちの選択された１つに、ルーティングされるべきパケットまたはパケットの一部をバッファリングするための比較的小さな別個のバッファであってよい。実施形態において、選択されたキューは、パケットがデスティネーションノードに到達できるようにするために、スイッチの適切な出力ポートに関連付けられたキューであってよい。
【０００６】
いくつかの実施形態において、キューポイントはまた、共有バッファ、および上記複数のキューバッファと上記共有バッファとに連結されたキューポイントコントローラを含んでよい。キューポイントコントローラは、上記選択されたキューバッファ内の利用可能な領域の量を判断し、且つ、上記選択されたキューバッファ内の判断された上記利用可能な領域の量に基づいて、上記共有バッファの少なくとも一部を上記選択されたキューに割り当てるように構成されてよい。これにより、それぞれの選択されたキューに専用に割り当てられたより大きなバッファを有する必要なく、あたかも選択されたキューがそのようなより大きなバッファを有するかのように、上記選択されたキューが効果的に動作できるようにしてよい。結果的に、スイッチの集積回路コンポーネントにおける、より少ないスペースおよび／または電力の要件で、より効率的な処理が実現されてよい。
【０００７】
以下の詳細な説明においては、その一部を成す添付図面に対し参照がなされる。添付図面全体にわたり、同様の参照番号は同様の部材を指し、添付図面には、実施されてよい実施形態が例示として示されている。他の実施形態が利用されてよいこと、並びに本開示の範囲を逸脱することなく、構造的または論理的な変更がなされてよいことを理解されたい。従って、以下の詳細な説明は、限定的な意味に理解するのではなく、実施形態の範囲は、添付の特許請求の範囲およびその均等内容によって規定される。
【０００８】
本開示の複数の態様が、添付の詳細な説明に開示されている。本開示の代替的な実施形態およびその均等内容が、本開示の精神または範囲から離れることなく、考え出されてよい。以下に開示される同様の要素は、図面中、同様の参照符号によって示されることに留意されたい。
【０００９】
様々な処理が、特許請求された主題の理解に最も寄与する態様で、複数の別個の動作または処理として順番に記載されてよい。しかしながら、記載の順序は、これらの処理が必ず順序に依存するものであることを示唆するものとして解釈されるべきではない。特に、これらの処理は、提示の順序で実行されてなくてよい。記載の処理は、記載された実施形態とは異なる順序で実行されてよい。様々な追加の処理が実行されてよく、および／または記載された処理が追加の実施形態においては省略されてよい。
【００１０】
本開示の目的として、「Ａおよび／またはＢ」と言う文言は、（Ａ）、（Ｂ）、または（ＡおよびＢ）を意味する。本開示の目的として、「Ａ、Ｂ、および／またはＣ」という文言は、（Ａ）、（Ｂ）、（Ｃ）、（ＡおよびＢ）、（ＡおよびＣ）、（ＢおよびＣ）、または（Ａ、ＢおよびＣ）を意味する。
【００１１】
本説明は、「一実施形態において、」または「実施形態において、」という文言を使用することがあるが、これらはそれぞれ同一または異なる実施形態に係る１または複数を指してよい。さらに、本開示の実施形態に関し使用される「備える（ｃｏｍｐｒｉｓｉｎｇ）」、「含む（ｉｎｃｌｕｄｉｎｇ）」、「有する（ｈａｖｉｎｇ）」等の用語は、同義語である。
【００１２】
本明細書で使用される、「モジュール」という用語は、１または複数のソフトウェアプログラム若しくはファームウェアプログラムを実行する、特定用途向け集積回路（ＡＳＩＣ）、電子回路、プロセッサ（共有、専用、またはグループ）および／またはメモリ（共有、専用、またはグループ）、組み合わせ論理回路、並びに／または記載された機能を提供する他の好適なコンポーネントを指してよい、またはこれらの一部であってよい、またはこれらを含んでよい。
【００１３】
図１は、本開示の様々な実施形態によるスイッチ１００を示す。スイッチ１００は、複数の入力ポート１０２ａ〜１０２ｄおよび複数の出力ポート１２２ａ〜１２２ｄを含んでよい。スイッチ１００は、入力ポート１０２ａ〜１０２ｄにおいて受信されたパケット（例えば、データまたは制御パケット）を、出力ポート１２２ａ〜１２２ｄのうちの１つにルーティングするよう構成されてよい。いくつかの実施形態において、スイッチは、入力ポート１０２ａ〜１０２ｄのいずれかから、出力ポート１２２ａ〜１２２ｄのいずれかへとパケットをルーティングするためのクロスバー１１２を用いて構成されてよい。例示のために４つのポートを持つスイッチとして図示されているものの、本開示の範囲から逸脱することなく、任意の数のポートが利用されてよいことを理解されたい。また、いくつかの実施形態において、スイッチ１００は、より大型のスイッチのサブスイッチであってよく、またはマトリックススイッチの一部であってよい。
【００１４】
いくつかの実施形態において、スイッチ１００は、複数のプロセッサ（図３のプロセッサ３０２ａ〜３０２ｂ等）に連結されてよく、当該複数のプロセッサ間でデータをルーティングするために使用されてよい。いくつかの実施形態において、複数のスイッチ（例えば、スイッチ１００）が互いに連結され、このような複数のプロセッサ間でデータをルーティングするためのファブリックまたはネットワークを形成してよい。ファブリックまたはネットワークの複数のスイッチが相互接続され、このような複数のプロセッサのうちの任意の２つのプロセッサ間に複数のルーティングパスを提供してよい。
【００１５】
様々な実施形態において、さらに、スイッチ１００は１または複数のキューポイントを含んでよい。本明細書で使用されるとき、キューポイントはスイッチ内の任意の場所を示すべく使用されてよく、当該場所において、スイッチを通ってルーティングされているパケットまたはパケットの一部がバッファ内でキューに入れられてよい。実施形態において、このようなシナリオは、パケットまたはパケットの一部が、まだ処理のために利用可能ではないダウンストリームネイバーに送信されるときに生じてよい。本明細書で使用されるとき、ダウンストリームネイバーは、スイッチ内またはネットワーク内の次の場所を示すべく使用されてよく、パケットは最終デスティネーションに到達するために、当該次の場所にルーティングされる。同様に、アップストリームネイバーは、スイッチ内またはネットワーク内の直前の場所を示すべく使用されてよく、パケットは当該直前の場所を通ってルーティングされた。また、本明細書において、アップストリームネイバーは送信ポイントと称されてよい。
【００１６】
図示の通り、スイッチ１００は、入力キューポイント１２４および出力キューポイント１２６を有してよい。他の実施形態においては、スイッチ１００は追加の中間キューポイントを有してよく、このようものとしては、例えば、スイッチ１００がマトリックススイッチである実施形態が挙げられる。本明細書の説明は、このようないずれのキューポイントにも該当し得る。
【００１７】
実施形態において、入力キューポイント１２４は、複数の入力キュー１０６ａ〜１０６ｄを含んでよい。入力キュー１０６ａ〜１０６ｄはそれぞれ、対応する複数の入力バッファ１０８ａ〜１０８ｄに関連付けられてよい。入力バッファ１０８ａ〜１０８ｄは、パケットをそれぞれのダウンストリームネイバーに送信することに備えそれぞれのキューにルーティングされたパケットまたはパケットの一部を格納するよう構成されてよい。実施形態において、入力キューポイント１２４は、入力キュー共有バッファ１１０を含んでよい。入力キュー共有バッファ１１０は、入力キューポイント１２４に対し追加のバッファリング容量を提供してよい。また、入力キューポイント１２４は、入力キューポイントコントローラ１０４を含んでよい。入力キューポイントコントローラ１０４は、入力キューバッファ１０８ａ〜１０８ｄと、入力キュー共有バッファ１１０とに連結されてよい。
【００１８】
いくつかの実施形態において、さらに、複数の入力キュー１０６ａ〜１０６ｄは、複数の仮想レーンまたは仮想チャネルをサポートするように編成されてよい。このような実施形態においては、複数の入力バッファ１０８ａ〜１０８ｄは、仮想レーンの各々に関連付けられたブロックに編成されてよい。このような実施形態においては、個々のキューに関して本明細書で後述されるバッファリングは、仮想レーンベースで類似の態様で実行されてよい。
【００１９】
実施形態において、入力キューポイントコントローラ１０４は、パケットの一部（例えば、フリット）を送信ポイントから受信するよう構成されてよく、入力キューポイントコントローラ１０４は、当該パケットの一部が一時的に格納されてよい入力キュー（例えば、入力キュー１０６ａ）の入力バッファ（例えば、入力バッファ１０８ａ）内の利用可能な領域の量を判断してよい。実施形態において、当該パケットの一部および当該パケットの残部が、スイッチ１００の出力ポート（例えば、出力ポート１２２ｄ）に宛てられてよい。このような出力ポートは、パケットのヘッダ内に含まれるデスティネーション場所識別子（ＤＬＩＤ）、およびパケットの受信された部分をルーティングする先の適切な出力ポートを判断するための参照テーブルから判断されてよい。
【００２０】
いくつかの例において、出力ポート１２２ｄは、パケットにサービス提供するために解放されてよい。このような例においては、入力キュー１０６ａにおいて必要とされる受信された部分のバッファリングをほとんどせずに、または一切せずに、受信された部分は、出力ポート１２２ｄに連結された出力キュー１１６ｄに転送されてよい。他の例においては、出力ポート１２２ｄは、別のパケットにサービス提供していてビジーであってよい。このような例においては、出力ポート１２２ｄが受信された部分に関連付けられたパケットにサービス提供するために利用可能になるまで、受信された部分は入力キュー１０６ａの入力バッファ１０８ａにバッファリングされてよい。
【００２１】
受信された部分が入力バッファ１０８ａ内にバッファリングされると、パケットの追加の部分が、送信ポイントから受信されてよい。出力ポート１２２ｄが解放された場合、前に受信されたパケットの部分は、入力バッファ１０８ａから移動可能であってよく、出力キュー１１６ｄに送信されてよい。しかしながら、出力ポート１２２ｄが解放されていない場合、入力バッファ１０８ａ内に利用可能な領域が十分あれば、パケットの追加の部分は、前に受信されたパケットの部分と共に入力バッファ１０８ａ内にバッファリングされてよい。パケット全体が入力バッファ１０８ａ内にバッファリングされる、入力バッファ１０８ａがパケットの部分で最大容量に到達する、または出力ポート１２２ｄが解放され且つ入力バッファ１０８ａ内にバッファリングされていたパケットの部分の処理の開始に利用可能になる、までこのような処理が継続されてよい。パケット全体を入力バッファ１０８ａ内にバッファリングできる例においては、パケットを入力ポート１０２ａに送信する送信ポイントが、次のパケットの処理を開始できるように、パケット全体が送信ポイントから移動されてよい。同様に、出力ポート１２２ｄが解放される例においては、パケットのバッファリングされた部分は、入力キュー１０６ａから出力キュー１１６ｄへ移動を開始してよく、送信ポイントからのパケットの部分の流れは、妨げられない状態のままであってよい。しかしながら、パケット全体を受信する前に、または出力ポート１２２ｄが解放される前に、入力バッファ１０８ａが最大容量に到達した場合、送信ポイントによってこれから送信されることになるパケットの残り部分が、送信ポイントからの一切のさらなる送信をブロックしてよく、または別の送信ポイントアップストリームをブロックしてよい。いくつかの実施形態においては、入力バッファ１０８ａは、上記の受信されたパケットの部分に加え、１または複数の前に受信されたパケットを格納するのに十分な大きさであってよいことを理解されたい。本開示により、このような実施形態が企図されるものの、共有バッファから追加の領域を割り当てることに関する説明を過度に複雑にするのを避けるために、長くは説明しない。
【００２２】
送信ポイントのこのようなブロッキングを回避するために、いくつかの実施形態において、入力キューポイントコントローラ１０４は、入力キュー共有バッファ１１０の少なくとも一部を、入力キュー１０６ａに割り当てるよう構成されてよい。このような割り当てにより、パケット全体を送信ポイントから移動させることを可能にしてよく、また、送信ポイントが解放され、妨害されない状態のままであることを可能にしてよい。たとえ、出力ポート１２２ｄがブロックされ、出力ポート１２２ｄが入力バッファ１０８ａ内にバッファリングされたパケットの部分にサービス提供を開始できない場合であっても、このようであってよい。いくつかの実施形態においては、入力バッファ１０８ａ内の利用可能な領域の量、および入力バッファ１０８ａ内の利用可能な領域の量が利用可能な領域の予め定められた閾値に等しいかまたはそれより小さいかということに基づいて、入力キューポイントコントローラ１０４は、入力キュー共有バッファ１１０の当該少なくとも一部を入力キュー１０６ａに割り当てるよう構成されてよい。このような閾値についてさらに以下説明する。いくつかの実施形態において、入力キューポイントコントローラ１０４は、パケットのサイズを判断（例えば、パケットのヘッダから）するよう構成されてよく、入力キューポイントコントローラ１０４は、割り当てるべき入力キュー共有バッファ１１０の当該部分のサイズを判断する際、当該パケットのサイズを利用してよい。
【００２３】
いくつかの実施形態において、スイッチ１００は、スイッチ１００を通るデータフローを制御するための様々なフロー制御メカニズムを利用するよう構成されてよい。例えば、いくつかの実施形態において、スイッチ１００は、クレジットベースフロー制御メカニズムを利用するよう構成されてよい。このような実施形態においては、上記のような送信ポイントは、送信ポイントがデータを送信する先のキュー（例えば、入力キュー１０６ａ）のバッファ（例えば、入力バッファ１０８ａ）内の利用可能な領域をモニタリングするよう構成されたカウンタを含んでよい。このような実施形態においては、送信ポイントは、当該送信ポイントが存在するスイッチのリセットに応答して、入力キュー１０６ａの入力バッファ１０８ａ内の利用可能なスロットの既知量にカウンタをリセットするよう構成されてよい。これらのスロットの各々は、パケットの単一の固定サイズ部分（例えば、フリット）を格納するよう構成されてよい。送信ポイントが入力キュー１０６ａに送信するパケットのこれらの部分の各々に対し、カウンタは、入力バッファ１０８ａ内に残る利用可能なスロット数を示すべく、デクリメントされてよい。また、パケットの一部が、入力キュー１０６ａから次のダウンストリームネイバーへ移動されると、信号、すなわち確認応答が送信ポイントに送信され、カウンタをインクリメントさせてよい。結果的に、クレジットベースのフロー制御においては、バッファリングされたパケットの部分が、入力キュー１０６ａから次のダウンストリームネイバーへ移動を開始したという信号、すなわち確認応答が入力キュー１０６ａから受信されるまで、カウンタのこのデクリメントは、生じてよい。このような実施形態においては、カウンタが入力キュー１０６ａの入力バッファ１０８ａが利用可能なスロットをこれ以上有していないことを示す場合、送信ポイントはパケットの部分の送信を停止してよい。
【００２４】
パケットの各部分は、送信ポイントから入力キュー１０６ａへ移動するために、いくつかのクロックサイクルを費やしてよい。同様に、入力キュー１０６ａから送信される確認応答は、入力キュー１０６ａから送信ポイントに移動するために、いくつかのクロックサイクルを費やしてよい。結果的に、パケットの新しい部分はクロックサイクル毎に送信ポイントから送信されてよいので、確認応答が送信ポイントによって受信され得る前に送信されてよいパケットの部分の数は、ラウンドトリップ移動時間に依存してよい。本明細書において以降、ラウンドトリップ移動時間とは、送信ポイントと入力キュー１０６ａとの間のラウンドトリップ時間を指すことにする。例えば、１パケットが送信ポイントから入力キュー１０６ａへ移動するために４クロックサイクルかかり且つ確認応答が、入力キュー１０６ａから送信ポイントへ移動するために、対応する４クロックサイクルがかかる実施形態について検討してみよう。このような例においては、送信ポイントと入力キュー１０６ａとの間のラウンドトリップ時間は、２つの移動時間の合計、すなわち８クロックサイクルである。よって、この例においては、入力キュー１０６ａから確認応答を受信する前に、送信ポイントは、１パケットの８つの部分を送信してよい。
【００２５】
いくつかの実施形態において、送信ポイントは、入力キュー１０６ａにとっての利用可能な追加の領域を認識しなくてよい。このような実施形態においては、追加の領域が入力キュー１０６ａに割り当て可能であるときに、入力キューポイントコントローラ１０４は、上記の確認応答が送信されるようにしてよい。この確認応答は、カウンタの構成に応じて、カウンタがデクリメントすることを防止してよく、または、カウンタをインクリメントさせてよい。このようにして、入力キューポイントコントローラ１０４は、送信ポイントが入力キュー１０６ａにとっての利用可能な追加のバッファ領域を認識しなくても、送信ポイントから入力キュー１０６ａへの継続的なデータフローを可能にしてよい。よって、追加のバッファ領域は、送信ポイントからは不可視であってよい。
【００２６】
上記のラウンドトリップ時間を理由として、入力キューポイントコントローラ１０４は、入力バッファ１０８ａが最大容量に到達する前に、追加の領域の割り当てを試行してよい。入力バッファ１０８ａが入力キュー共有バッファ１１０内の追加の領域を割り当てるべき最大容量に到達するまで、入力キューポイントコントローラが待機する場合、ラウンドトリップ移動時間が、送信ポイントが確認応答を待機しつつブロックされる原因となってよい。よって、上記のラウンドトリップ時間の例においては、送信できたであろうはずのパケットの８つの部分が送信されなくてよい。結果的に、入力バッファ１０８ａ内の利用可能なスロット数が、閾値に等しいかまたはそれより小さい場合、入力キューポイントコントローラは、入力キュー共有バッファ１１０の一部を割り当てるよう構成されてよく、ここで閾値はラウンドトリップ時間に等しいかまたはそれより大きい。このような構成で、ラウンドトリップ時間の影響を防止または低減してよい。このような実施形態においては、入力キューポイントコントローラ１０４は、送信ポイントのカウンタを本質的に模倣するその独自のシャドウカウンタを維持するよう構成されてよく、入力キューポイントコントローラ１０４は、ひとたびこのカウンタが上記のラウンドトリップ移動時間閾値に到達するかまたはそれを下回ると、入力キュー共有バッファ１１０の一部を割り当てるよう構成されてよい。入力キュー共有バッファの一部が正常に割り当てられると、入力キューポイントコントローラ１０４は、送信ポイントに、パケットの部分が入力キュー１０６ａから次のダウンストリームネイバーへ移動していることを認識させるべく、上記の確認応答が送信ポイントに送信されるようにしてよい。
【００２７】
また、入力キューポイントコントローラ１０４は、入力キューポイント１２４の複数のキューのうちの１つに割り当てられた入力キュー共有バッファ１１０内の利用可能な領域の量をモニタリングしてよく、入力キューポイントコントローラ１０４は、利用可能な割り当てられた領域が、上記のような閾値に到達するか、またはそれを下回る場合に、入力キュー共有バッファの追加のブロックの割り当てを試行してよい。
【００２８】
また、いくつかの実施形態において、入力キューポイントコントローラ１０４は、ブロックがこれ以上必要とされなくてよいときを判断すべく、割り当てられた任意のブロックをモニタリングしてよい。このような実施形態においては、入力キューポイントコントローラ１０４は、これ以上必要ではないと判断された任意のブロックを空にするまたは解放してよい。いくつかの実施形態において、ブロックがこれ以上必要ではないときの判断は単純に、ブロックが空であるかに基づいてよい。ブロック内に格納された様々なパケットのすべての部分が、ブロックから次のダウンストリームネイバーへ移動された場合に、このような状況が発生し得る。他の実施形態においては、ブロックがこれ以上必要ではないときに関する判断はさらに、同一キューに割り当てられた別のブロック内の利用可能な領域の量が、上記の閾値に到達するか、またはそれを上回るかに基づいてよい。他の実施形態においては、ブロックがこれ以上必要ではないときに関する判断はさらに、同一キューに割り当てられた別のブロック内の利用可能な領域の量が、上記のシャドウカウンタによって示されるスロット数に到達するか、またはそれを上回るかに基づいてよい。
【００２９】
出力キューポイント１２６は、入力キューポイント１２４と類似の態様で構成されてよい。例えば、出力キューポイント１２６は、複数の出力キュー１１６ａ〜１１６ｄに連結された出力キューポイントコントローラ１１４および出力キュー共有バッファ１２０を含んでよい。出力キュー１１６ａ〜１１６ｄの各々は、出力キューバッファ１１８ａ〜１１８ｄのそれぞれに関連付けられてよい。実施形態において、出力キューポイント１２６は、上記の入力キューポイント１２４と類似の態様で機能するよう構成されてよい。よって、入力キューポイント１２４は、出力キューポイント１２６のための送信ポイントであってよい。
【００３０】
パケットが送信ポイントからキューポイントに移動すると、その後、当該キューポイントは次の送信ポイントになり、当該キューポイントからの次のダウンストリームネイバーは次のキューポイントになることを理解されたい。パケットが目的のデスティネーションに配信されるまで、このことが生じてよい。
【００３１】
いくつかの実施形態において、スイッチ１００は、本明細書に記載の処理に関する１または複数のオペレーションを実行するよう構成された計算ロジックを有するメモリと共にパッケージされた１または複数のプロセッサを含んでよい。このような実施形態においては、スイッチ１００は、システムオンチップ（ＳｏＣ）の形態を取ってよい。このようなＳｏＣが、任意の好適なコンピューティングデバイスにおいて、またはスタンドアロンのスイッチとして利用されてよい。
【００３２】
図２は、様々な実施形態による、スイッチ内のデータをバッファリングするための方法２００を示す。方法２００は、例えば、スイッチ１００の入力キューポイントコントローラ１０４または出力キューポイントコントローラ１１４のいずれかによって実行されてよい。いくつかの実施形態において、スイッチは、１または複数の非一時的コンピュータ可読媒体を含んでよく、または当該媒体へのアクセスを有してよく、当該媒体は、実行時にスイッチに対し、方法２００を実行させるための当該媒体上に格納された命令を有する。
【００３３】
方法２００のボックス２０２において、スイッチのキューポイントコントローラは、選択されたキューを介してデスティネーションノードにルーティングされるべきパケットまたはパケットの一部を受信してよい。パケットは、例えば、スイッチの入力ポートを介して受信されてよい。ボックス２０４において、スイッチのキューポイントコントローラが、選択されたキューのバッファ内に利用可能な領域が存在するかを判断してよい。選択されたキューのバッファ内に利用可能な領域が存在する場合、方法２００はボックス２０６に進んでよく、ボックス２０６で、パケットの受信された部分が、選択されたキューのバッファ内に格納されてよい。
【００３４】
ボックス２０８において、選択されたキューのバッファが、図１を参照して上記したような、利用可能な領域の予め定められた閾値に到達したか、またはそれを下回ったかに関する判断が、キューポイントコントローラによってなされてよい。キューポイントコントローラが、選択されたキューのバッファが、利用可能な領域の予め定められた閾値に到達していないか、またはそれを下回っていないと判断した場合、いくつかの実施形態において、方法２００はボックス２１０に進んでよく、ボックス２１０で、図１を参照して上記したシャドウカウンタ等のローカルカウンタが、パケットの一部を送信した送信ポイントのカウンタを模倣すべく、デクリメントされてよい。ローカルカウンタがデクリメントされると、方法２００は、ボックス２１２に進んでよく、ボックス２１２で処理は終了してよい。ボックス２１２は処理の終了を示すものの、キューポイントコントローラによって受信されるパケットの各追加の部分について、処理は反復されてよいことを理解されたい。
【００３５】
ボックス２０８に戻り、キューポイントコントローラが、選択されたキューのバッファが、利用可能な領域の予め定められた閾値に到達した、またはそれを下回ったと判断した場合、いくつかの実施形態において、方法２００はボックス２１４に進んでよい。ボックス２１４において、キューポイントコントローラは、共有バッファ（例えば、入力キュー共有バッファ１１０）のブロックまたはブロックの一部が、選択されたキューに割り当てられているかを判断してよい。このようなブロックが割り当てられている場合、処理はボックス２２０に進んでよく、ボックス２２０で、キューポイントコントローラは、図１を参照して上記したような確認応答が、送信ポイントに送信されるようにし、選択されたキューに関連付けられた送信ポイントのカウンタがデクリメントされるのを防止してよい。その後、方法２００は、ボックス２１２に進んでよく、ボックス２１２で、方法は終了してよい。
【００３６】
ボックス２１４に戻り、キューポイントコントローラが、共有バッファ（例えば、入力キュー共有バッファ１１０）のブロックが、選択されたキューに割り当てられていないと判断した場合、方法２００はボックス２１６に進んでよい。ボックス２１６において、共有バッファ内に利用可能な領域が存在するかどうかに関する判断がなされてよい。共有バッファ内に利用可能な領域が存在しない場合、方法２００はボックス２１０に進んでよく、ボックス２１０で、ローカルカウンタがデクリメントされ、その後、方法２００はボックス２１２に進んでよく、ボックス２１２で、方法２００は終了してよい。他方、共有バッファ内に利用可能な領域が存在する場合、方法２００は、ボックス２１８に進んでよく、ボックス２１８で、キューポイントコントローラは、共有バッファのブロックまたはブロックの一部を、選択されたキューに割り当ててよく、共有バッファのブロックまたはブロックの一部が選択されたキューのバッファの末尾に効果的に付加されてよい。いくつかの実施形態においては、ボックス２１８において、入力キューポイントコントローラは、パケットのサイズを（例えば、パケットのヘッダから）判断するよう構成されてよく、入力キューポイントコントローラは、割り当てるべき共有バッファ１１０のブロックまたはブロックの一部のサイズを判断する際、当該パケットのサイズを利用してよい。ブロックがキューに割り当てられると、方法２００はボックス２２０に進んでよく、ボックス２２０で、キューポイントコントローラは、図１を参照して上記したような確認応答が送信ポイントに送信されるようにし、選択されたキューに関連付けられた送信ポイントのカウンタがデクリメントされるのを防止してよい。その後、方法２００はボックス２１２に進んでよく、ボックス２１２で、方法は終了してよい。
【００３７】
ボックス２０４に戻り、選択されたキューのバッファ内に利用可能な領域が存在しない場合、方法２００はボックス２２２に進んでよく、ボックス２２２で、キューポイントコントローラは、共有バッファ（例えば、入力キュー共有バッファ１１０）のブロックまたはブロックの一部が、選択されたキューに割り当てられているかを判断してよい。このようなブロックが割り当てられていない場合、処理はボックス２１６に進んでよい。上記の通り、ボックス２１６において、共有バッファ内に利用可能な領域が存在するかどうかに関する判断がなされてよい。共有バッファ内に利用可能な領域が存在しない場合、方法２００はボックス２１０に進んでよく、ボックス２１０で、ローカルカウンタがデクリメントされた後、方法２００はボックス２１２に進んでよく、ボックス２１２で、方法２００は終了してよい。他方、共有バッファ内に利用可能な領域が存在する場合、方法２００は、ボックス２１８に進んでよく、ボックス２１８で、キューポイントコントローラは、共有バッファのブロックまたはブロックの一部を、選択されたキューに割り当ててよい。このような割り当てられたブロックまたはブロックの一部は、選択されたキューのバッファの末尾に効果的に付加されてよい。上記の通り、いくつかの実施形態においては、ブロック２１８において、入力キューポイントコントローラは、パケットのサイズを（例えば、パケットのヘッダから）判断するよう構成されてよく、入力キューポイントコントローラは、割り当てるべき共有バッファ１１０のブロックまたはブロックの一部のサイズを判断する際、当該パケットのサイズを利用してよい。ブロックが選択されたキューに割り当てられると、方法２００はボックス２２０に進んでよく、ボックス２２０で、キューポイントコントローラは、図１を参照して上記したような確認応答が、送信ポイントに送信されるようにし、選択されたキューに関連付けられた送信ポイントのカウンタがデクリメントされるのを防止してよい。その後、方法２００はボックス２１２に進んでよく、ボックス２１２で、方法は終了してよい。
【００３８】
ボックス２２２に戻り、キューポイントコントローラが、共有バッファ（例えば、入力キュー共有バッファ１１０）のブロックが、選択されたキューに割り当てられていると判断した場合、方法２００はボックス２２４に進んでよい。ボックス２２４において、キューポイントコントローラは、パケットの受信された部分が、共有バッファの割り当てられたブロック内に格納されるようにしてよい。その後、方法２００はボックス２２６に進んでよい。
【００３９】
ボックス２２６において、共有キューの割り当てられたブロックが、利用可能な領域の予め定められた閾値に到達したか、またはそれを下回ったかに関する判断が、キューポイントコントローラによってなされてよい。このような閾値は、上記のボックス２０８に関して説明した閾値と同一または異なってよい。キューポイントコントローラが、共有キューの割り当てられたブロックが、利用可能な領域の予め定められた閾値に到達していない、またはそれを下回っていないと判断した場合、方法２００は、ボックス２２０に進んでよく、ボックス２２０で、キューポイントコントローラは、図１を参照して上記したような確認応答が、送信ポイントに送信されるようにし、選択されたキューに関連付けられた送信ポイントのカウンタをインクリメントさせるか、または選択されたキューに関連付けられた送信ポイントのカウンタがデクリメントされるのを防止するかのいずれかを行ってよい。その後、方法２００はボックス２１２に進んでよく、ボックス２１２で、方法は終了してよい。
【００４０】
ボックス２２６に戻り、キューポイントコントローラが、選択されたキューの共有バッファの割り当てられたブロックが、利用可能な領域の予め定められた閾値に到達した、またはそれを下回ったと判断した場合、いくつかの実施形態において、方法２００はボックス２１６に進んでよい。上記の通り、ボックス２１６において、共有バッファ内に利用可能な領域が存在するかどうかに関する判断がなされてよい。共有バッファ内に利用可能な領域が存在しない場合、方法２００はボックス２１０に進んでよく、ボックス２１０で、ローカルカウンタがデクリメントされ、その後、方法２００はボックス２１２に進んでよく、ボックス２１２で、方法２００は終了してよい。他方、共有バッファ内に利用可能な領域が存在する場合、方法２００はボックス２１８に進んでよく、ボックス２１８で、キューポイントコントローラは、共有バッファの追加のブロックまたはブロックの一部を、選択されたキューに割り当ててよい。共有キューのこの追加のブロックまたはブロックの一部は、前に割り当てられたブロックまたはブロックの一部の末尾に効果的に付加されてよい。上記の通り、いくつかの実施形態においては、ブロック２１８において、入力キューポイントコントローラは、パケットのサイズを判断（例えば、パケットのヘッダから）するよう構成されてよく、入力キューポイントコントローラは、割り当てるべき共有バッファ１１０のブロックまたはブロックの一部のサイズを判断する際、当該パケットのサイズを利用してよい。ブロックがキューに割り当てられると、方法２００はボックス２２０に進んでよく、ボックス２２０で、キューポイントコントローラは、図１を参照して上記したような確認応答が、送信ポイントに送信されるようにし、選択されたキューに関連付けられた送信ポイントのカウンタがデクリメントされるのを防止してよい。その後、方法２００はボックス２１２に進んでよく、ボックス２１２で、方法は終了してよい。
【００４１】
上記の通り、いくつかの実施形態においては、割り当てられたブロックの閾値は、選択されたキューのバッファの閾値とは異なってよい。このような実施形態においては、割り当てられたブロックの閾値は、選択されたキューのバッファの閾値より大きくてよい。これらの実施形態においては、割り当てられたブロック内の利用可能な領域が、割り当てられたブロックの閾値に到達するか、またはそれを下回ると、キューポイントコントローラは、共有バッファ内の新しいブロックの割り当てをさらに試行してよい。しかしながら、割り当てられたブロック内の利用可能な領域の量がローカルカウンタの値に等しくなるまで、上記の確認応答がさらに送信されてよい。
【００４２】
いくつかの実施形態においては、パケットが送信ポイントから受信されない場合であっても、キューポイントコントローラは、上記の確認応答の送信ポイントへの送信を継続してよい。このような実施形態においては、共有バッファ内の割り当てられた利用可能な領域の量が、ローカルカウンタの値より大きい限り、確認応答がキューポイントコントローラによって、送信ポイントへ送信されてよい。このような実施形態においては、ひとたびローカルカウンタが、カウンタの最大値（例えば、選択されたキューバッファのサイズ）に到達するか、またはひとたびローカルカウンタが、共有バッファ内の割り当てられた利用可能な領域の量に到達すると、キューポイントコントローラは、確認応答の送信を終了してよい。これらの実施形態においては、ひとたびパケットの部分の受信が再び開始されると、キューポイントコントローラはまた、ローカルカウンタをデクリメントし、ローカルカウンタが送信ポイントのカウンタを模倣できるようにしてよいことを理解されたい。
【００４３】
図３は、本開示の選択された態様を実施するために好適に使用されてよい、例示的なコンピューティングシステム３００（以降、「システム３００」と言う）を示す。図示の通り、システム３００は、複数のコンピュータ３０１ａ〜３０１ｂおよび当該コンピュータに連結されたファブリックまたはネットワーク３２０を含んでよい。ファブリックまたはネットワーク３２０は、コンピュータ３０１ａ〜３０１ｂ間（例えば、コンピュータ３０１ａ〜３０１ｂのそれぞれのプロセッサ３０２ａ〜３０２ｂ間）でデータをルーティングするための互いに連結された複数のスイッチ３３０を含んでよい。スイッチ３３０のうちの１または複数は、本明細書に記載のスイッチ１００（キューポイント１２４および１２６に対応するキューポイント３４０を有する）に対応してよく、および／または本明細書に記載の方法２００を実行してよい。
【００４４】
コンピュータ３０１ａ〜３０１ｂは、複数のスイッチ３３０に連結され、当該２つのコンピュータ３０１ａ〜３０１ｂ間の複数のルーティングパスを提供してよい。図３には２つのコンピュータ３０１ａ〜３０１ｂのみが図示されているものの、ファブリック若しくはネットワーク３２０および／またはスイッチ３３０を使用して、３つ以上のコンピュータを含む、任意の好適な数のコンピュータ間でデータをルーティングしてよいことを理解されたい。スイッチは、本明細書に記載のバッファリング処理の１または複数の態様を実行すべく、図１を参照して上記したキューポイント等の１または複数のキューポイント３４０を含んでよい。いくつかの実施形態において、スイッチ３３０は、コンピュータ３０１ａ〜３０１ｂの通信インタフェース３１０ａ〜３１０ｂにそれぞれ連結されてよい。代替的にまたは追加的に、スイッチ３３０は、プロセッサ３０２ａ〜３０２ｂ間でデータをルーティングすべく、単一のコンピュータ３０１ａの複数のプロセッサ３０２ａ〜３０２ｂに連結されてもよい。
【００４５】
個々のコンピュータ３０１ａ〜３０１ｂは、１または複数のプロセッサまたはプロセッサコア３０２ａ〜３０２ｂ、およびシステムメモリ３０４ａ〜３０４ｂを含んでよい。特許請求の範囲を含む本願の目的において、「プロセッサ」および「プロセッサコア」という用語は、文脈が明らかに別のものを要求していない限り、同義語と考えられてよい。また、コンピュータ３０１ａ〜３０１ｂはそれぞれ大容量ストレージデバイス３０６ａ〜３０６ｂ（ディスケット、ハードドライブ、コンパクトディスクリードオンリメモリ（ＣＤ‐ＲＯＭ）等）、それぞれ入／出力デバイス３０８ａ〜３０８ｂ（ディスプレイ、キーボード、カーソル制御器等）、およびそれぞれ通信インタフェース３１０ａ〜３１０ｂ（ネットワークインタフェースカード、モデム等）を含んでよい。これらの要素は、それぞれシステムバス３１２ａ〜３１２ｂを介して互いに連結されてよく、システムバス３１２ａ〜３１２ｂは１または複数のバスを表わしてよい。複数のバスの場合、それらは１または複数のバスブリッジ（不図示）によってブリッジされてよい。これらの要素の各々は、当該技術分野で既知のその従来の機能を実行してよい。いくつかの実施形態において、コンピュータ３０１ａ〜３０１ｂは、据置デバイス、モバイルデバイス、またはサーバであってよい。
【００４６】
当業者に理解されるところであるが、本開示は、方法またはコンピュータプログラム製品として具現化されてよい。従って、本開示は、上記の通りハードウェアでの具現化に加え、完全にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコード等を含む）、またはソフトウェア態様とハードウェア態様とを組み合わせる実施形態の形を取ってよく、それらはすべて一般的に「回路」、「モジュール」若しくは「システム」と呼ばれてよい。さらに、本開示は、任意の有形または非一時的媒体の表現に具現化されたコンピュータプログラム製品の形を取ってもよく、当該媒体は当該媒体内に具現化されたコンピュータで使用可能なプログラムコードを有する。図４は、命令の格納に使用するために好適であってよい例示のコンピュータ可読非一時的記録媒体を示し、当該命令は、装置による命令の実行に応答して、装置に対し、本開示の選択された態様を実施させる。図示の通り、非一時的コンピュータ可読記録媒体４０２は、複数のプログラミング命令４０４を含んでよい。プログラミング命令４０４は、例えばスイッチ１００またはスイッチ３３０等のデバイスが、当該プログラミング命令の実行に応答して、本明細書に記載のバッファリング処理（例えば、図１を参照して説明したバッファリング処理または図２の方法２００）を実行することを可能にするように構成されてよい。代替的な実施形態においては、代わりに、プログラミング命令４０４は、複数のコンピュータ可読非一時的記録媒体４０２上に配置されてよい。代替的な実施形態においては、プログラミング命令４０４は、信号等のコンピュータ可読一時的記録媒体４０２上に配置されてよい。
【００４７】
１または複数のコンピュータで使用可能な媒体またはコンピュータ可読媒体の任意の組み合わせが利用されてよい。コンピュータで使用可能な媒体またはコンピュータ可読媒体は、例えば、限定はされないが、電子、磁気、光、電磁、赤外線または半導体のシステム、装置、デバイスまたは伝搬媒体であってよい。コンピュータ可読媒体のより具体的な例（非網羅的な列挙）としては、以下のもの、すなわち、１または複数の配線を有する電気的接続、ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリ（ＲＡＭ）、リードオンリメモリ（ＲＯＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭまたはフラッシュメモリ）、光ファイバ、ポータブルコンパクトディスクリードオンリメモリ（ＣＤ‐ＲＯＭ）、光ストレージデバイス、インターネット若しくはイントラネットをサポートするような送信媒体、または磁気ストレージデバイスが含まれるであろう。コンピュータで使用可能な媒体またはコンピュータ可読媒体は、プログラムが印刷される紙または別の好適な媒体ですらあってよいことに留意されたい。というのは、プログラムは、例えば、当該紙または他の媒体の光学的スキャンを介して電子的にキャプチャされた後、コンパイル、解釈または好適な態様でのそれら以外の処理が可能であり、必要な場合はその後にコンピュータメモリに格納可能であるからである。この文書の文脈では、コンピュータで使用可能な媒体またはコンピュータ可読媒体は、命令実行システム、装置またはデバイスによって、またはそれらとの連携で、使用するためのプログラムを包含、格納、通信、伝搬または転送できるいずれの媒体であってもよい。コンピュータで使用可能な媒体は、ベースバンドにおけるまたは搬送波の一部としての、伝搬されたデータ信号を含んでよく、当該データ信号はデータ信号と共に具現化されたコンピュータで使用可能なプログラムコードを備える。コンピュータで使用可能なプログラムコードは、限定はされないが、無線、電線、光ファイバケーブル、ＲＦ等を含む、任意の適切な媒体を使用して送信されてよい。
【００４８】
本開示の処理を実行するためのコンピュータプログラムコードは、１または複数のプログラミング言語を任意に組み合わせて記述されてよく、それらとしては、Ｊａｖａ（登録商標）、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋等のオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語または類似のプログラミング言語等の従来の手続型プログラミング言語が含まれる。プログラムコードは、ユーザのコンピュータ上で全体的に、ユーザのコンピュータ上で部分的に、スタンドアロンのソフトウェアパッケージとして、ユーザのコンピュータ上で部分的に且つリモートコンピュータ上で部分的に、あるいはリモートコンピュータ若しくはサーバ上で全体的に実行されてよい。後者のシナリオでは、リモートコンピュータはユーザのコンピュータに任意のタイプのネットワークを介して接続されてよく、それらとしては、ローカルエリアネットワーク（ＬＡＮ）またはワイドエリアネットワーク（ＷＡＮ）が含まれる。あるいは、接続は、外部のコンピュータ（例えば、インターネットサービスプロバイダを使用してインターネットを介して）に対しなされてよい。
【００４９】
本開示は、本開示の実施形態による方法、装置（システム）およびコンピュータプログラム製品に係るフロー図並びに／またはブロック図を参照して記載されている。フロー図および／またはブロック図の各ブロック、並びにフロー図および／またはブロック図のブロックの組み合わせが、コンピュータプログラム命令によって実装可能であることを理解されたい。これらのコンピュータプログラム命令は、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに供給され、機械を生成してよく、その結果、命令はコンピュータまたは他のプログラム可能なデータ処理装置のプロセッサを介して実行され、フローチャートおよび／またはブロック図の１つのブロック若しくは複数のブロックに示された機能／動作を実装するための手段を形成する。
【００５０】
また、これらのコンピュータプログラム命令は、コンピュータ可読媒体に格納されてよく、当該命令は、コンピュータまたは他のプログラム可能なデータ処理装置に対し、特定の方法で機能するよう命令可能であり、その結果、コンピュータ可読媒体内に格納された命令は、フローチャートおよび／またはブロック図の１つのブロック若しくは複数のブロックに示された機能／動作を実装する命令手段を含む製品を生成する。
【００５１】
また、コンピュータプログラム命令は、コンピュータまたは他のプログラム可能なデータ処理装置にロードされ、一連の処理ステップがコンピュータまたは他のプログラム可能な装置上で実行されるようにして、コンピュータで実装されるプロセスを生成してよく、その結果、コンピュータまたは他のプログラム可能な装置上で実行される命令は、フローチャートおよび／またはブロック図の１つのブロック若しくは複数のブロックに示された機能／動作を実装するためのプロセスをもたらす。
【００５２】
図面中のフローチャートおよびブロック図は、本開示の様々な実施形態による、システム、方法およびコンピュータプログラム製品の考え得る実装に関するアーキテクチャ、機能および処理を示す。この点において、フローチャートまたはブロック図の各ブロックは、モジュール、セグメントまたはコードの一部を表わしてよく、それらは示された論理機能を実装するための１または複数の実行可能な命令を含む。また、いくつかの代替的な実装においては、ブロックに示される機能は、図に示される順序とは異なって行われてよいことに留意されたい。例えば、連続して図示されている２つのブロックが実際には、実質的に同時に実行されてもよく、あるいは、当該ブロックは、関与する機能に応じて、逆順に実行される場合もあってよい。また、ブロック図および／またはフロー図の各ブロック、並びにブロック図および／またはフロー図のブロックの組み合わせが、示された機能または動作を実行する専用ハードウェアベースのシステム、または専用ハードウェアおよびコンピュータ命令の組み合わせによって実装可能であることにも留意されたい。
【００５３】
本明細書で使用される用語は、特定の実施形態の説明目的のためだけに使用されており、本開示を限定する意図ではない。本明細書で使用される、単数形の「ａ」、「ａｎ」および「ｔｈｅ」は、文脈が明示に別途の指定をしない限り、複数形も含む意図である。さらに、「備える（ｃｏｍｐｒｉｓｅｓ）」および／または「備え（ｃｏｍｐｒｉｓｉｎｇ）」という用語が本明細書で使用されるとき、記載された特徴、整数、手順、処理、要素および／またはコンポーネントの存在を指定するものの、１または複数の他の特徴、整数、手順、手順、処理、要素、コンポーネントおよび／またはそれらのグループの存在または追加を排除しないことを理解されたい。
【００５４】
実施形態は、コンピュータ処理、コンピューティングシステムとして、またはコンピュータ可読媒体に係るコンピュータプログラム製品等の製品として実装されてよい。コンピュータプログラム製品は、コンピュータシステムによって読み取り可能であり且つコンピュータ処理を実行するためのコンピュータプログラム命令でエンコーディングされたコンピュータ記録媒体であってよい。
【００５５】
以下の請求項における対応する構造、材料、動作、およびあらゆるミーンズプラスファンクション要素の均等内容は、具体的に特許請求された他の請求項の要素と組み合わされて機能を実行するための任意の構造、材料または動作を含む意図である。本開示の説明は、例示および説明の目的で示されているものの、網羅的であること、または開示された形態の開示内容に限定する意図はない。本開示の範囲および精神から逸脱することなく、多くの修正および変形が当業者にとって自明であろう。本開示の原理および実際の用途を説明するために、および当業者が実施形態の開示内容を理解できるために、想起される特定の使用に好適な様々な修正例と共に、本明細書に記載の実施形態は選択され、記載された。様々な実施形態に係るいくつかの非限定的な例を以下に示す。
【００５６】
例１は、パケットをルーティングするためのスイッチであって、複数のキューバッファと、上記複数のキューバッファにそれぞれ関連付けられた複数のキューと、共有バッファと、上記複数のキューバッファと上記共有バッファとに連結されたキューポイントコントローラと、を備え、上記キューポイントコントローラは、上記複数のキューのうちの選択されたキューに宛てられたパケットの一部を送信ポイントから受信し、上記選択されたキューに関連付けられた、上記複数のキューバッファのうちの選択されたキューバッファ内の利用可能な領域の量を判断し、上記選択されたキューバッファ内の判断された上記利用可能な領域の量に基づいて、上記共有バッファの少なくとも一部を、上記選択されたキューに割り当て、上記共有バッファの上記少なくとも一部は上記送信ポイントに不可視である、スイッチを含んでよい。
【００５７】
例２は、例１の主題を含んでよく、上記選択されたキューバッファ内の判断された上記利用可能な領域の量に基づいて、上記共有バッファの少なくとも一部を、上記選択されたキューに割り当てることは、上記選択されたキューバッファ内の上記利用可能な領域の量が、利用可能な領域の閾値に等しいか、またはそれより小さいかに基づく。
【００５８】
例３は、例１または２の主題を含んでよく、上記選択されたキューは、ネットワークの上記スイッチの１または複数の出力ポートに連結され、上記パケットの上記一部は、上記１または複数の出力ポートのうちのある出力ポートに宛てられ、上記キューポイントコントローラはさらに、上記パケットの上記一部を上記共有バッファの上記少なくとも一部に格納し、上記共有バッファの上記少なくとも一部が上記送信ポイントに対し不可視となり得るように、信号を上記送信ポイントに送信し、上記信号は、上記送信ポイントが、上記選択されたキューに関連付けられたクレジットカウンタをデクリメントすることを防止する、または上記送信ポイントに、上記選択されたキューに関連付けられた上記クレジットカウンタをインクリメントさせる。
【００５９】
例４は例３の主題を含んでよく、上記共有バッファの上記少なくとも一部のサイズは、上記パケットのサイズに基づく。
【００６０】
例５は、例３または４のいずれかの主題を含んでよく、上記クレジットカウンタは、上記スイッチのクレジットベースフロー制御メカニズムの一部であり、上記信号は、上記送信ポイントに対し、データが上記選択されたキューから移動されたことを示す。
【００６１】
例６は、例３から５のいずれかに係る主題を含んでよく、上記複数のキューバッファ、上記複数のキューおよび上記共有バッファは、キューポイントを形成し、上記予め定められた閾値は、上記送信ポイントと上記キューポイントとの間のラウンドトリップ送信時間に基づく。
【００６２】
例７は、例３から６のいずれかに係る主題を含んでよく、上記クレジットカウンタは、上記送信ポイントが上記選択されたキューバッファ内の利用可能な領域の量をモニタリングできるようにする送信ポイントクレジットカウンタであり、上記スイッチはさらに、上記選択されたキューに関連付けられたローカルクレジットカウンタを有し、上記キューポイントコントローラはさらに、上記ローカルクレジットカウンタに、上記送信ポイントクレジットカウンタを模倣させて、上記キューポイントコントローラが、上記信号を上記送信ポイントに送信するときを判断できるようにする。
【００６３】
例８は、例７の主題を含んでよく、上記キューポイントコントローラはさらに、上記共有バッファの前に割り当てられた部分が必要かを判断し、上記割り当てられた部分がこれ以上必要ではないとの判断に応答して、上記共有バッファの上記前に割り当てられた部分を解放する。
【００６４】
例９は、例８の主題を含んでよく、上記共有バッファの上記前に割り当てられた部分がこれ以上必要ではないと判断することは、上記共有バッファの上記前に割り当てられた部分が空であることの指標、および、上記選択されたキューバッファが空であることの指標、上記共有バッファの前に割り当てられた別の部分が、予め定められた閾値より大きいか、またはそれに等しい利用可能な領域の量を有することの指標、または上記共有バッファの前に割り当てられた別の部分が、上記ローカルカウンタの値に等しいか、またはそれより大きい利用可能な領域の量を有することの指標、に基づく。
【００６５】
例１０は、例９の主題を含んでよく、上記送信ポイントクレジットカウンタおよび上記ローカルクレジットカウンタは、上記スイッチのリセットに応答して、上記選択されたキューバッファのサイズにリセットされる。
【００６６】
例１１は、例１から１０のいずれかに係る主題を含んでよく、上記複数のキューバッファ、上記複数のキューおよび上記共有バッファは、キューポイントを形成し、上記送信ポイントは、上記スイッチの別のキューポイントである。
【００６７】
例１２は、例１から１１のいずれかに係る主題を含んでよく、上記複数のキューバッファ、上記複数のキューおよび上記共有バッファは、キューポイントを形成し、上記キューポイントは、上記スイッチのサブスイッチの一部である。
【００６８】
例１３は、例１から１２のいずれかに係る主題を含んでよく、上記スイッチは、１または複数のプロセッサをさらに有するシステムオンチップ（ＳｏＣ）である。
【００６９】
例１４は、スイッチを動作させる方法を含んでよく、当該方法は、スイッチのキューポイントのキューポイントコントローラによって、パケットの少なくとも一部を送信ポイントから受信する段階と、上記キューポイントコントローラによって、上記キューポイントのキューに関連付けられたキューバッファ内に上記パケットの上記少なくとも一部を格納する段階と、上記キューポイントコントローラによって、上記キューバッファ内の利用可能な領域を判断する段階と、上記キューポイントコントローラによって、上記キューバッファ内の上記利用可能な領域に基づいて、共有バッファの少なくとも一部を上記キューに割り当てる段階であって、上記共有バッファは、上記キューポイントの１または複数の追加のキューに関連付けられる、割り当てる段階と、上記キューポイントコントローラによって、信号を上記送信ポイントに送信して、上記送信ポイントが上記キューに関連付けられたクレジットカウンタをデクリメントすることを防止する、または、上記送信ポイントに、上記キューに関連付けられた上記クレジットカウンタをインクリメントさせる段階と、を備える。
【００７０】
例１５は、例１４の主題を含んでよく、上記キューバッファ内の判断された上記利用可能な領域の量に基づいて割り当てる段階は、上記キューバッファ内の上記利用可能な領域の量が、利用可能な領域の予め定められた閾値に等しいか、またはそれより小さいかに基づく。
【００７１】
例１６は、例１５の主題を含んでよく、上記クレジットカウンタは、上記スイッチのクレジットベースフロー制御メカニズムの一部であり、上記信号は、上記データが上記キューから移動されることを示す。
【００７２】
例１７は、例１５または１６のいずれかの主題を含んでよく、上記予め定められた閾値は、上記送信ポイントと上記キューポイントとの間のラウンドトリップ送信時間に基づく。
【００７３】
例１８は、例１５から１７のいずれかに係る主題を含んでよく、上記クレジットカウンタは、上記送信ポイントが上記キューバッファ内の利用可能な領域の量をモニタリングできるようにする送信ポイントクレジットカウンタであり、上記方法はさらに、上記キューポイントコントローラによって、ローカルクレジットカウンタに、上記送信ポイントクレジットカウンタを模倣させる段階と、上記キューポイントコントローラによって、上記ローカルカウンタの上記値に少なくとも部分的に基づいて、上記信号を上記送信ポイントに送信するときを判断する段階と、を備える。
【００７４】
例１９は、例１８の主題を含んでよく、上記スイッチのリセットに応答して、上記ローカルクレジットカウンタを、上記キューバッファのサイズにリセットする段階をさらに備える。
【００７５】
例２０は、１または複数の非一時的コンピュータ可読媒体であって、上記１または複数の非一時的コンピュータ可読媒体は自身に格納された命令を備え、上記命令は、スイッチのキューポイントのキューポイントコントローラに、上記キューポイントコントローラによる実行に応答して、パケットの少なくとも一部を送信ポイントから受信させ、上記キューポイントのキューに関連付けられたキューバッファ内に上記パケットの少なくとも一部を格納させ、上記キューバッファ内の利用可能な領域の量に基づいて、共有バッファの少なくとも一部を上記キューに割り当てさせ、上記共有バッファは、上記キューポイントの１または複数の追加のキューに関連付けられており、信号を上記送信ポイントに送信させ、上記送信ポイントが上記キューに関連付けられたクレジットカウンタをデクリメントすることを防止する、または、上記送信ポイントに、上記キューに関連付けられた上記クレジットカウンタをインクリメントさせる、１または複数の非一時的コンピュータ可読媒体を含んでよい。
【００７６】
例２１は、例２０の主題を含んでよく、上記キューバッファ内の上記利用可能な領域の量に基づいて割り当てさせることは、上記キューバッファ内の上記利用可能な領域の量が、利用可能な領域の予め定められた閾値に等しいか、またはそれより小さいかに基づく。
【００７７】
例２２は、例２１の主題を含んでよく、上記クレジットカウンタは、上記スイッチのクレジットベースフロー制御メカニズムの一部であり、上記信号は、データが上記キューから移動されたことを示す。
【００７８】
例２３は、例２１または２２のいずれかの主題を含んでよく、上記予め定められた閾値は、上記送信ポイントと上記キューポイントとの間のラウンドトリップ送信時間に基づく。
【００７９】
例２４は、例２１から２３のいずれかに係る主題を含んでよく、上記クレジットカウンタは、上記送信ポイントが、上記キューバッファ内の利用可能な領域の量をモニタリングできるようにする送信ポイントクレジットカウンタであり、上記命令は、上記キューポイントコントローラによる実行に応答して、さらに、上記キューポイントコントローラに、ローカルクレジットカウンタに、上記送信ポイントクレジットカウンタを模倣させるようにさせ、上記ローカルカウンタの上記値に少なくとも部分的に基づいて、上記信号を上記送信ポイントに送信するときを判断させる。
【００８０】
例２５は、例２４の主題を含んでよく、上記命令は、上記キューポイントコントローラによる実行に応答して、さらに、上記キューポイントコントローラに、上記スイッチのリセットに応答して、上記ローカルクレジットカウンタを上記キューバッファのサイズにリセットさせる。
【００８１】
例２６は、スイッチのキューポイントコントローラによって、パケットの少なくとも一部を送信ポイントから受信するための手段と、上記キューポイントコントローラによって、上記キューポイントのキューに関連付けられたキューバッファ内に上記パケットの上記少なくとも一部を格納するための手段であって、上記キューは上記パケットが送信される先の上記スイッチの出力ポートに関連付けられている、格納するための手段と、上記キューバッファ内の利用可能な領域を判断するための手段と、上記キューバッファ内の上記利用可能な領域に基づいて、上記共有バッファ内の少なくとも一部を上記キューに割り当てるための手段であって、上記共有バッファは上記キューポイントの１または複数の追加のキューに関連付けられている、割り当てるための手段と、信号を送信ポイントに送信して、上記送信ポイントが上記キューに関連付けられたクレジットカウンタをデクリメントすることを防止する、または、上記送信ポイントに上記キューに関連付けられた上記クレジットカウンタをインクリメントさせるための手段と、を備える、パケットをルーティングするためのスイッチを含んでよい。
【００８２】
例２７は、例２６の主題を含んでよく、上記キューバッファ内の判断された上記利用可能な領域の量に基づいて割り当てるための手段は、上記キューバッファ内の上記利用可能な領域の量が、利用可能な領域の予め定められた閾値に等しいか、またはそれより小さいかに基づく。
【００８３】
例２８は、例２７の主題を含んでよく、上記クレジットカウンタは、上記スイッチのクレジットベースフロー制御メカニズムの一部であり、上記信号は、データが上記キューから移動されたことを示す。
【００８４】
例２９は、例２７または２８のいずれかの主題を含んでよく、上記予め定められた閾値は、上記送信ポイントと上記キューポイントとの間のラウンドトリップ送信時間に基づく。
【００８５】
例３０は、例２７から２９のいずれかに係る主題を含んでよく、上記クレジットカウンタは、上記送信ポイントが、上記キューバッファ内の利用可能な領域の量をモニタリングできるようにする送信ポイントクレジットカウンタであり、上記スイッチはさらに、ローカルクレジットカウンタに、上記送信ポイントクレジットカウンタを模倣させるための手段と、上記ローカルカウンタの上記値に少なくとも部分的に基づいて、上記信号を上記送信ポイントに送信するときを判断させるための手段と、を備える。
【００８６】
例３１は、例３０の主題を含んでよく、上記スイッチのリセットに応答して、上記ローカルクレジットカウンタを上記キューバッファのサイズにリセットするための手段をさらに備える。
【００８７】
本開示の精神または範囲から逸脱することなく、様々な修正例および変形例が、開示されたデバイスおよび関連方法に係る開示の実施形態においてなされ得ることは当業者にとって自明なところである。故に、当該修正例および変形例がいずれかの請求項並びにそれらの均等内容の範囲に属する場合、本開示は上記開示の実施形態に係る当該修正例および変形例を包含する意図である。
（項目１）
パケットをルーティングするためのスイッチであって、
複数のキューバッファと、
上記複数のキューバッファにそれぞれ関連付けられた複数のキューと、
共有バッファと、
上記複数のキューバッファと上記共有バッファとに連結されたキューポイントコントローラと、を備え、
上記キューポイントコントローラは、
上記複数のキューのうちの選択されたキューに宛てられたパケットの一部を送信ポイントから受信し、
上記選択されたキューに関連付けられた、上記複数のキューバッファのうちの選択されたキューバッファ内の利用可能な領域の量を判断し、
上記選択されたキューバッファ内の判断された上記利用可能な領域の量に基づいて、上記共有バッファの少なくとも一部を、上記選択されたキューに割り当て、
上記共有バッファの上記少なくとも一部は上記送信ポイントに不可視である、スイッチ。
（項目２）
上記選択されたキューバッファ内の判断された上記利用可能な領域の量に基づいて、上記共有バッファの少なくとも一部を、上記選択されたキューに割り当てることは、上記選択されたキューバッファ内の上記利用可能な領域の量が、利用可能な領域の閾値に等しいか、またはそれより小さいかに基づく、項目１に記載のスイッチ。
（項目３）
上記選択されたキューは、ネットワークの上記スイッチの１または複数の出力ポートに連結され、
上記パケットの上記一部は、上記１または複数の出力ポートのうちのある出力ポートに宛てられ、
上記キューポイントコントローラはさらに、
上記パケットの上記一部を上記共有バッファの上記少なくとも一部に格納し、
上記共有バッファの上記少なくとも一部が上記送信ポイントに対し不可視となり得るように、信号を上記送信ポイントに送信し、
上記信号は、
上記送信ポイントが、上記選択されたキューに関連付けられたクレジットカウンタをデクリメントすることを防止する、または
上記送信ポイントに、上記選択されたキューに関連付けられた上記クレジットカウンタをインクリメントさせる、項目１に記載のスイッチ。
（項目４）
上記共有バッファの上記少なくとも一部のサイズは、上記パケットのサイズに基づく、項目３に記載のスイッチ。
（項目５）
上記クレジットカウンタは、上記スイッチのクレジットベースフロー制御メカニズムの一部であり、
上記信号は、上記送信ポイントに対し、データが上記選択されたキューから移動されたことを示す、項目３に記載のスイッチ。
（項目６）
上記複数のキューバッファ、上記複数のキューおよび上記共有バッファは、キューポイントを形成し、予め定められた閾値は、上記送信ポイントと上記キューポイントとの間のラウンドトリップ送信時間に基づく、項目３に記載のスイッチ。
（項目７）
上記クレジットカウンタは、上記送信ポイントが上記選択されたキューバッファ内の利用可能な領域の量をモニタリングできるようにする送信ポイントクレジットカウンタであり、上記スイッチはさらに、上記選択されたキューに関連付けられたローカルクレジットカウンタを有し、
上記キューポイントコントローラはさらに、上記ローカルクレジットカウンタに、上記送信ポイントクレジットカウンタを模倣させて、上記キューポイントコントローラが、上記信号を上記送信ポイントに送信するときを判断できるようにする、項目３に記載のスイッチ。
（項目８）
上記キューポイントコントローラはさらに、
上記共有バッファの前に割り当てられた部分が必要かを判断し、
上記割り当てられた部分がこれ以上必要ではないとの判断に応答して、上記共有バッファの上記前に割り当てられた部分を解放する、項目７に記載のスイッチ。
（項目９）
上記共有バッファの上記前に割り当てられた部分がこれ以上必要ではないと判断することは、上記共有バッファの上記前に割り当てられた部分が空であることの指標、および、
上記選択されたキューバッファが空であることの指標、
上記共有バッファの前に割り当てられた別の部分が、予め定められた閾値より大きいか、またはそれに等しい利用可能な領域の量を有することの指標、または
上記共有バッファの前に割り当てられた別の部分が、ローカルカウンタの値に等しいか、またはそれより大きい利用可能な領域の量を有することの指標、に基づく、項目８に記載のスイッチ。
（項目１０）
上記送信ポイントクレジットカウンタおよび上記ローカルクレジットカウンタは、上記スイッチのリセットに応答して、上記選択されたキューバッファのサイズにリセットされる、項目９に記載のスイッチ。
（項目１１）
上記複数のキューバッファ、上記複数のキューおよび上記共有バッファは、キューポイントを形成し、上記送信ポイントは、上記スイッチの別のキューポイントである、項目１に記載のスイッチ。
（項目１２）
上記複数のキューバッファ、上記複数のキューおよび上記共有バッファは、キューポイントを形成し、上記キューポイントは、上記スイッチのサブスイッチの一部である、項目１から１１のいずれか一項に記載のスイッチ。
（項目１３）
上記スイッチは、１または複数のプロセッサをさらに有する、システムオンチップ（ＳｏＣ）である、項目１から１１のいずれか一項に記載のスイッチ。
（項目１４）
スイッチのキューポイントのキューポイントコントローラによって、パケットの少なくとも一部を送信ポイントから受信する段階と、
上記キューポイントコントローラによって、上記キューポイントのキューに関連付けられたキューバッファ内に上記パケットの上記少なくとも一部を格納する段階と、
上記キューポイントコントローラによって、上記キューバッファ内の利用可能な領域を判断する段階と、
上記キューポイントコントローラによって、上記キューバッファ内の上記利用可能な領域に基づいて、共有バッファの少なくとも一部を上記キューに割り当てる段階であって、上記共有バッファは、上記キューポイントの１または複数の追加のキューに関連付けられる、割り当てる段階と、
上記キューポイントコントローラによって、信号を上記送信ポイントに送信して、上記送信ポイントが上記キューに関連付けられたクレジットカウンタをデクリメントすることを防止する、または、上記送信ポイントに、上記キューに関連付けられた上記クレジットカウンタをインクリメントさせる段階と、を備える、スイッチを動作させる方法。
（項目１５）
上記キューバッファ内の判断された上記利用可能な領域の量に基づいて割り当てる段階は、上記キューバッファ内の上記利用可能な領域の量が、利用可能な領域の予め定められた閾値に等しいか、またはそれより小さいかに基づく、項目１４に記載の方法。
（項目１６）
上記クレジットカウンタは、上記スイッチのクレジットベースフロー制御メカニズムの一部であり、
上記信号は、データが上記キューから移動されることを示す、項目１５に記載の方法。
（項目１７）
上記予め定められた閾値は、上記送信ポイントと上記キューポイントとの間のラウンドトリップ送信時間に基づく、項目１５に記載の方法。
（項目１８）
上記クレジットカウンタは、上記送信ポイントが上記キューバッファ内の利用可能な領域の量をモニタリングできるようにする送信ポイントクレジットカウンタであり、上記方法はさらに、
上記キューポイントコントローラによって、ローカルクレジットカウンタに、上記送信ポイントクレジットカウンタを模倣させる段階と、
上記キューポイントコントローラによって、上記ローカルクレジットカウンタの値に少なくとも部分的に基づいて、上記信号を上記送信ポイントに送信するときを判断する段階と、を備える、項目１５から１７のいずれか一項に記載の方法。
（項目１９）
上記スイッチのリセットに応答して、上記ローカルクレジットカウンタを、上記キューバッファのサイズにリセットする段階をさらに備える、項目１８に記載の方法。
（項目２０）
１または複数の非一時的コンピュータ可読媒体であって、上記１または複数の非一時的コンピュータ可読媒体は自身に格納された命令を備え、上記命令は、スイッチのキューポイントのキューポイントコントローラに、上記キューポイントコントローラによる実行に応答して、
パケットの少なくとも一部を送信ポイントから受信させ、
上記キューポイントのキューに関連付けられたキューバッファ内に上記パケットの上記少なくとも一部を格納させ、
上記キューバッファ内の利用可能な領域の量に基づいて、共有バッファの少なくとも一部を上記キューに割り当てさせ、上記共有バッファは、上記キューポイントの１または複数の追加のキューに関連付けられており、
信号を上記送信ポイントに送信させ、上記送信ポイントが上記キューに関連付けられたクレジットカウンタをデクリメントすることを防止する、または、上記送信ポイントに、上記キューに関連付けられた上記クレジットカウンタをインクリメントさせる、コンピュータ可読媒体。
（項目２１）
上記キューバッファ内の上記利用可能な領域の量に基づいて割り当てさせることは、上記キューバッファ内の上記利用可能な領域の量が、利用可能な領域の予め定められた閾値に等しいか、またはそれより小さいかに基づく、項目２０に記載のコンピュータ可読媒体。
（項目２２）
上記クレジットカウンタは、上記スイッチのクレジットベースフロー制御メカニズムの一部であり、
上記信号は、データが上記キューから移動されたことを示す、項目２１に記載のコンピュータ可読媒体。
（項目２３）
上記予め定められた閾値は、上記送信ポイントと上記キューポイントとの間のラウンドトリップ送信時間に基づく、項目２１に記載のコンピュータ可読媒体。
（項目２４）
上記クレジットカウンタは、上記送信ポイントが、上記キューバッファ内の利用可能な領域の量をモニタリングできるようにする送信ポイントクレジットカウンタであり、
上記命令は、上記キューポイントコントローラによる実行に応答して、さらに、上記キューポイントコントローラに、
ローカルクレジットカウンタに、上記送信ポイントクレジットカウンタを模倣させるようにさせ、
上記ローカルクレジットカウンタの値に少なくとも部分的に基づいて、上記信号を上記送信ポイントに送信するときを判断させる、項目２１から２３のいずれか一項に記載のコンピュータ可読媒体。
（項目２５）
上記命令は、上記キューポイントコントローラによる実行に応答して、さらに、上記キューポイントコントローラに、
上記スイッチのリセットに応答して、上記ローカルクレジットカウンタを上記キューバッファのサイズにリセットさせる、項目２４に記載のコンピュータ可読媒体。
【図１】
0006517934.tif 000002
【図２】
0006517934.tif 000003
【図３】
0006517934.tif 000004
【図４】
0006517934.tif 000005