(57)【要約】   【課題】  本発明に係るスイッチは、メモリの格納効率を落とすことなくレイテンシを短縮して高速に伝送可能とすることを目的とする。【解決手段】本発明に係る共有メモリシステムの一側面によれば、複数のデータを並行して共有メモリに格納可能な共有メモリシステムにおいて、該共有メモリを共有し、該複数のデータをそれぞれ受信する複数のポートと、該複数のポートから転送される複数のデータをそれぞれ所定のブロック単位で保持する複数のバッファと、該ポートから該バッファへのデータ転送速度と該バッファから該共有メモリへのデータ転送速度の差に応じて、該データの転送を該所定のブロック単位で一旦停止し、該複数のブロックごとに該共有メモリにデータ転送を開始する制御部とを有することを特徴とする。 【選択図】  図３
2010067091.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータを並行して共有メモリに格納可能な共有メモリシステムにおいて、
該共有メモリを共有し、該複数のデータをそれぞれ受信する複数のポートと、
該複数のポートから転送される複数のデータをそれぞれ所定のブロック単位で保持する複数のバッファと、
該ポートから該バッファへのデータ転送速度と該バッファから該共有メモリへのデータ転送速度の差に応じて、該データの転送を該所定のブロック単位で一旦停止し、該複数のブロックごとに該共有メモリにデータ転送を開始する制御部と、
を有することを特徴とする共有メモリシステム。
【請求項２】
請求項１に記載の共有メモリシステムはさらに、
該共有メモリから転送される該所定のブロック単位の複数のデータを保持する複数の他のバッファを有し、
該制御部は、該他のバッファに該共有メモリからデータを転送する際にデータを所定のブロック単位で分割して転送を一旦停止し、該複数のブロックごとに該他のバッファにデータを転送することを特徴とする共有メモリシステム。
【請求項３】
請求項２に記載の共有メモリシステムにおいて、
該次ブロックにおけるアクセス開始する位置を示す情報を保持する記憶部をさらに有することを特徴とする共有メモリシステム。
【請求項４】
請求項２に記載の共有メモリシステムにおいて、
該次ブロックにおけるアクセス開始位置を示す情報を先行するデータに付随して格納することを特徴とする共有メモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はパケット交換を実行するスイッチの技術に関連し、特にスイッチにおいてパケットを格納する。技術に関連する。
【背景技術】
【０００２】
スイッチはネットワーク間の接続を行う装置であって、通信システム内でのパケット交換を実行する装置である。複数の情報処理装置の通信を中継するスイッチも存在し、そのようなスイッチは複数の情報処理装置と接続できるように多ポートを有する。多ポートを有するスイッチ（以下、多ポートスイッチと呼ぶ。）は、複数の情報処理装置からパケットを受け取り、複数の情報処理装置に対してパケットを送信する。またこのような多ポートスイッチは多ポートでメモリを共用している。これは多ポートスイッチが複数の情報処理装置に対して同一のパケットを送信する、いわゆるマルチキャスト送信をする際に、多ポートスイッチがパケットを送信する情報処理装置の数に応じてパケットをコピーすることを回避するためである。そして多ポートスイッチはメモリインターリービングを用いて、パケット交換の処理速度を高速化することができる。
【０００３】
多ポートスイッチが、メモリインターリービングを用いて共有メモリに転送データ（パケット）を格納する場合、ポートの入出力スループットと、メモリのポート当たりの入出力スループットを同じにしておかないと、共有メモリへの格納効率が落ちるといった問題が発生する。つまりスイッチが、ポートと共有メモリにおける入出力の速度差によって生じるギャップを共有メモリに格納してしまうと、インターリービングによってレイテンシ（遅延時間）は短くできても、メモリの格納効率が落ちてしまう。そのため多ポートスイッチにおいて、メモリインターリービングを用いて共有メモリへ効率的に転送データを格納し、レイテンシ（遅延時間）の短いカットスルー処理を実現するためには、ポートの入出力スループットと共有メモリのポート当たりの入出力スループットを一致させるもしくはその比を整数倍にする必要がある。
【０００４】
しかしながら、多ポートスイッチにおいて、ポートの入出力スループットと共有メモリのポート当たりの入出力スループットを一致もしくはその比を整数倍にすることは、スイッチの構成変更を大きく制限することになる。例えばスイッチのポート数を増すと、それに応じてスイッチのポートの入出力スループットが増加する。共有メモリの格納効率を保つためには、変化したポートの入出力スループットの整数倍まで共有メモリのポート当たりの入出力スループットを増加させなければならない。そのため多ポートスイッチにおいて、ポートの入出力スループットと共有メモリのポート当たりの入出力スループットを一致もしくはその比を整数倍にせずに、メモリの格納効率を落とさず、なおかつレイテンシを短縮することが望まれる。
【０００５】
パケット交換を行うスイッチにおいて、共有メモリを使用する技術に関連する公知文献として以下のものがある。
【特許文献１】特開２００４−２４０９８０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
本発明に係るスイッチは、メモリの格納効率を落とすことなくレイテンシを短縮して高速に伝送可能とすることを目的とする。
【課題を解決するための手段】
【０００７】
本発明に係る共有メモリシステムの一側面によれば、複数のデータを並行して共有メモリに格納可能な共有メモリシステムにおいて、該共有メモリを共有し、該複数のデータをそれぞれ受信する複数のポートと、該複数のポートから転送される複数のデータをそれぞれ所定のブロック単位で保持する複数のバッファと、該ポートから該バッファへのデータ転送速度と該バッファから該共有メモリへのデータ転送速度の差に応じて、該データの転送を該所定のブロック単位で一旦停止し、該複数のブロックごとに該共有メモリにデータ転送を開始する制御部とを有することを特徴とする。
【発明の効果】
【０００８】
本発明に係るスイッチは、ポートとメモリそれぞれのデータ転送速度の差に応じて、メモリにおけるデータ格納位置を調整することによって、メモリの格納効率を落とすことなくレイテンシを短縮して高速に伝送可能とすることができる。
【発明を実施するための最良の形態】
【０００９】
［１．スイッチ１００の概要］
本実施例では、スイッチ１００におけるパケットデータのメモリへの格納を例にとり、共有メモリシステムについて説明する。
【００１０】
本実施例に係るスイッチ１００は、ネットワーク間の接続を行う装置であり、ネットワーク間で通信されるパケットを中継する装置である。より具体的には、スイッチ１００は、イーサネット（登録商標）スイッチ、ＰＣＩ−ｅｘｐｒｅｓｓスイッチ、ファイバチャネルスイッチ、ＳＡＴＡ／ＳＡＳスイッチ、ＵＳＢスイッチなどである。スイッチ１００は、特にネットワークをつなぐ大量のデータの中継処理を要求されるコアスイッチとして活用すると有効なスイッチである。
【００１１】
スイッチ１００は入力ポート１０１〜１０６、出力ポート１２０〜１２５の複数の入出力ポートを有し、複数の情報処理装置（パーソナルコンピュータ、サーバなど）を接続可能な構成となっている。スイッチ１００は入力ポート１０１〜１０６、出力ポート１２０〜１２５が共有する共有メモリ１１３を有している。
【００１２】
またスイッチ１００は、共有メモリ１１３を有効に活用し、かつデータ転送を高速に行うことを目的とするスイッチである。スイッチ１００は、入力ポート１０１〜１０６、出力ポート１２０〜１２５の入出力スループットと共有メモリ１１３のポート当たりの入出力スループットを一致、若しくはそれらの比を整数倍にさせなくても、共有メモリ１１３の格納効率を向上し、かつデータ転送を高速に行うことを実現とするスイッチである。スループットは単位時間あたりの処理能力のことである。具体的にはたとえばスイッチ１００の入力ポート１０１〜１０６、出力ポート１２０〜１２５、共有メモリ１１３単位時間あたりの実効転送量、パケットデータの転送速度である。
【００１３】
以下、スイッチ１００の具体的な動作を説明する。
［２．スイッチ１００］
図１は本実施例に係るスイッチ１００の構成図である。スイッチ１００は、入力ポート１０１〜１０６、入力バッファ１０７〜１１２、共有メモリ１１３、出力バッファ１１４〜１１９、出力ポート１２０〜１２５、ＴＡＧメモリ１２６、制御部１２７を有している。また図３はスイッチ１００の共有メモリの詳細を示す構成図である。そして図３に示すように共有メモリ１１３はスイッチングユニット３０１、３０２、メモリバンク３０３〜３０８を有している。なお図３において制御機構１２８（ＴＡＧメモリ１２６、制御部１２７）と入力ポート１０１〜１０６、出力ポート１２０〜１２５との接続関係は簡略化して記載している。制御機構１２８と入力ポート１０１〜１０６、出力ポート１２０〜１２５との接続関係は図１に示す接続関係となっている。
【００１４】
スイッチ１００は、接続される情報処理装置より入力ポート１０１〜１０６に入力されるパケットデータを、入力バッファ１０７〜１１２を介して、共有メモリ１１３に格納する。スイッチ１００は、共有メモリ１１３に格納したパケットデータを読み出し、出力バッファ１１４〜１１９を介して出力ポート１２０〜１２５から接続される情報処理装置に送信する。
【００１５】
スイッチ１００は、共有メモリ１１３にパケットデータの一部を格納した後に、共有メモリ１１３からそのパケットデータの一部を読み出して所望の情報処理装置へパケットデータを転送するカット・スルー方式で中継を行う。なおスイッチ１００は、いわゆるストア・アンド・フォワード方式でパケットデータ全体を共有メモリ１１３に格納してから所望の情報処理装置へ転送する必要はない。またスイッチ１００はインターリービング方式を用いて搭載する共有メモリ１１３にパケットデータを格納し、レイテンシの軽減を図っている。ここでカット・スルー（ｃｕｔｔｈｒｏｕｇｈ）とは、パケットデータの末尾を共有メモリ１１３へ格納する前に、該パケットの中継を開始する方式である。ストア・アンド・フォワード（Ｓｔｏｒｅ＆Ｆｏｒｗａｒｄ）とは、パケットデータ全体の蓄積交換である。つまりスイッチ１００が、送信側情報処理装置から受信したパケットデータ全体を一度共有メモリ１１３にストアし、そのパケットデータのＣＲＣエラー、衝突パケットのフィルタリングなどを行った後、パケットデータを出力ポート１２０〜１２５から受信側情報処理装置へ転送する方式である。またインターリービング方式とはメモリのデータ転送を高速化する技術の一つである。インターリービング方式は、複数のメモリバンクに並行でデータの読み書きを行なう手法であり、これによりメモリへのデータ読み書きを高速化することができる。
【００１６】
本実施例では、図３に示すように共有メモリ１１３は複数のメモリバンク３０３〜３０８を有している。そして複数のメモリバンク３０３〜３０８にワード単位の連続したアドレスを振ってある。つまり連続したアドレスがメモリバンク３０３〜３０８に順次付されている。
【００１７】
以下、スイッチ１００の各ユニットの動作について説明する。
［２．１．制御部１２７］
まず制御部１２７は、入力バッファ１０７〜１１２を介して、入力ポート１０１〜１０６に入力されるパケットデータを共有メモリ１１３に格納する制御を行う。また制御部１２７は、出力バッファ１１４〜１１９を介して、共有メモリ１１３からパケットデータを読み出して、出力ポート１２０〜１２５から受信側情報処理装置にパケットデータを転送する。制御部１２７は、メモリバンク３０３〜３０８を指定するアドレスと、メモリバンク３０３〜３０８内のアドレスを指定して共有メモリ１１３へパケットデータの書き込み、共有メモリ１１３からパケットデータの読み出しを行う。本実施例においてスイッチ１００が取り扱うパケットデータは可変長である。つまりパケットデータのサイズは、一定の大きさではなく、情報処理装置が送受信するデータ量、データの種類に応じて異なるものである。
【００１８】
本実施例においてスイッチ１００は、パケットをインターリービング方式により共有メモリ１１３に格納する。制御部１２７は、パケットデータを所定のサイズ（ワードサイズ）に分割する。そして制御部１２７は、入力バッファ１０７〜１０８を介して、分割したパケットデータを共有メモリ１１３に格納する。制御部１２７は、分割して共有メモリ１１３に格納したパケットデータを再構成し、出力バッファ１１４〜１１９を介して出力ポート１２０〜１２５から送出する。
【００１９】
また制御部１２７は、スイッチ１００のフォワーディング、フィルタリングを制御する
ユニットであり、ネットワークのトラフィックを制御するユニットである。フォワーディングは、スイッチ１００が入力ポート１０１〜１０６で受信したパケットデータを出力ポート１２０〜１２５からネットワーク（所望の情報処理装置）へ転送する処理のことである。フィルタリングは、スイッチ１００が受信したパケットデータを所定のルールに従って廃棄する処理のことである。制御部１２７によるフォワーディング、フィルタリングの制御処理により、スイッチ１００はネットワークにおけるトラフィックを制御する。
【００２０】
イーサネット（登録商標）スイッチとしての実施形態においては、制御部１２７はパケットデータのＭＡＣアドレスを元にパケットデータの送信先を判別する。具体的には制御部１２７は、受信パケットの送信元ＭＡＣアドレスと受信ポートの対応を記録する。制御部１２７は、受信パケットの宛先ＭＡＣアドレスに対応するポートからパケットデータを送信する。制御部１２７は、受信パケットの宛先ＭＡＣアドレスに対応するポートが受信パケットを受信したポートであると判別する場合は、その受信パケットを破棄する。
【００２１】
さらに制御部１２７は、受信パケットの宛先ＭＡＣアドレスに対応するポートが存在しないと判別する場合、あるいは受信パケットをマルチキャストやブロードキャストする場合には、受信パケットを受信したポート以外の全ポートからそのパケットを送信する。また制御部１２７は、スイッチ１００の初期設定、スイッチ１００のリセットも行い、スイッチ１００全体を制御する機能を有している。
［２．２．入力バッファ１０７〜１１２、出力バッファ１１４〜１１９］
入力バッファ１０７〜１１２は、入力ポート１０１〜１０６のパケットデータの転送レート（入力バッファ１０７〜１１２への書き込み速度）と入力バッファ１０７〜１１２から共有メモリ１１３への書き込み速度を調整（緩和）するものである。入力バッファ１０７〜１１２は、制御部１２７が入力バッファ１０７〜１１２から共有メモリ１１３へ書き込むデータ単位（後述するブロック２０１〜２０６単位）でパケットデータを保持する。
【００２２】
出力バッファ１１４〜１１９は、出力バッファ１１４〜１１９から出力ポート１２０〜１２５への書き出し速度と共有メモリ１１３から出力バッファ１１４〜１１９への書き出し速度を調整（緩和）するものである。出力バッファ１１４〜１１９は、制御部１２７が出力バッファ１１４〜１１９から共有メモリ１１３から読み出すデータ単位（後述するブロック２０１〜２０６単位）でパケットデータを保持する。
［２．３．共有メモリ１１３］
次に共有メモリ１１３について説明する。共有メモリ１１３は、図３が共有メモリ１１３の具体的な構成を示した構成図である。本実施例に係る共有メモリ１１３は、スイッチングユニット３０１、３０２、メモリバンク３０３〜３０８から構成されている。
【００２３】
本実施例に係るスイッチ１００は、インターリービング方式により、入力ポート（Ｉｎｐｕｔ  Ｐｏｒｔ）で受信するデータを共有メモリに格納して、出力ポート（Ｏｕｔｐｕｔ  Ｐｏｒｔ）からスイッチ１００の外部にパケットを出力する。
【００２４】
スイッチングユニット３０１は、入力ポート１０１〜１０６から入力されるパケットデータをメモリバンク３０３〜３０８のいずれかに格納するか割り振るユニットである。本実施例において制御部１２７はインターリービング方式により共有メモリ１１３にパケットデータを格納するため、パケットデータを所定のサイズ（ワードサイズ）に分割する。そして制御部１２７は、入力ポート１０１〜１０６から入力バッファ１０７〜１１２へ分割したパケットデータを転送する。そしてスイッチングユニット３０１が分割したパケットデータをメモリバンク３０３〜３０８にワード単位で順次割り振って格納する。スイッチングユニット３０２は、メモリバンク３０３〜３０８に格納される分割したパケットデータを読み出して、出力バッファ１１４〜１１９へ転送する。そして制御部１２７は、入力ポート１２０〜１２５のうちパケットデータの転送先である情報処理装置へ送信するた
めの入力ポートからパケットデータを出力する。上記のとおりスイッチ１００の制御部１２７は、スイッチングユニット３０１、３０２を制御してインターリービング方式でパケットデータをメモリバンク３０３〜３０８に書き込み、及びメモリバンク３０３〜３０８からパケットデータの読み出しを行う。
［２．４．ＴＡＧメモリ１２６］
ＴＡＧメモリ１２６は、ギャップ情報を格納するメモリである。本実施例に係るスイッチ１００は、入力ポート１０１〜１０６、出力ポート１２０〜１２５の入出力スループットよりも共有メモリ１１３のポート当たりの入出力スループットが大きいスイッチである。そしてスイッチ１００は、この入出力スループットの差によって生じるギャップに関する情報（ギャップ情報）をＴＡＧメモリ１２６に格納する。
［３．データの格納態様］
次にスイッチ１００が共有メモリ１１３にデータを格納する一態様について説明する。図２は本実施例に係るスイッチ１００のパケットデータのアクセスに関する概念図である。また図４は本実施例に係るスイッチ１００のスイッチスケジューリングを示す概念図である。図５は本実施例に係るスイッチのパケット転送を示す概念図である。図６は本実施例に係るスイッチ１００のストリームデータのアクセスに関する概念図である。
［３．１．ギャップ情報の管理］
図２は、入力ポート１０１〜１０６、出力ポート１２０〜１２５の入出力スループットと共有メモリ１１３のポート当たりの入出力スループットが一致する場合であって、共有メモリ１１３内にギャップが生じない場合のパケットデータの格納を示す概念図である。図２は共有メモリ１１３を構成する６つのメモリバンク３０３〜３０８の論理構造を示す図である。なお入力ポート１０１〜１０６、出力ポート１２０〜１２５の入出力スループットと共有メモリ１１３のポート当たりの入出力スループットが一致しない場合、つまり共有メモリ１１３内にギャップが生じる場合については、図６を用いて後述する。
【００２５】
メモリバンク３０３〜３０８は、論理的にブロック２０１〜２０６に分割される。そして各ブロック２０１〜２０６は、ワード２０７〜２１２から構成される。各ワード２０７〜２１２は、それぞれメモリバンク３０３〜３０８におけるデータ格納領域である。換言すれば各ブロック２０１〜２０６は、物理的に分離した各メモリバンク３０３〜３０８の一部であるデータ格納領域から構成されている。そしてブロック２０１〜２０６それぞれにおいて、メモリアドレスは連続している。つまり連続したメモリアドレスが各メモリバンク３０３〜３０８をまたいで割り振られている。
【００２６】
ここでは説明を簡便にするため、スイッチ１００が１つのパケットデータをメモリバンク３０３〜３０８に格納する態様を説明する。もちろんスイッチ１００は多ポートスイッチであり、入力ポート１０１〜１０６から同時刻に入力される複数のパケットデータを転送処理可能なスイッチである。
【００２７】
制御部１２７は、入力ポート１０１〜１０６から入力されるパケットデータをワードサイズ（ワード２０７〜２１２のサイズ）に分割する。制御部１２７は、１４個のワードサイズの分割したパケットデータを生成する。そして制御部１２７は、ワードサイズに分割した１４個の分割データを順次メモリバンク３０３〜３０８に格納していく。図２に記載のブロック（行）とワード（列）で表されるマトリックス内に記載の番号「０」〜「１３」は、制御部１２７が分割した１４個の分割データを共有メモリ１１３内に格納していく順番を表している。また制御部１２７は、分割データそれぞれを該マトリックス内に記載の番号「０」〜「１０」の位置（領域）に格納する。
【００２８】
例えば制御部１２７はブロック２０１のワード２１０から分割データ（「０」で示す分割データ）の格納を開始して、ブロック２０１を構成するすべてワード２０７〜２１２にデータを格納し終わったら（「５」で示す分割データを格納し終わると）、ブロック２０
３のワード２１０に分割データを格納し、順次にブロック２０３のワード２１１、２１２、２０７、２０８、２０９と格納していく（「６」、「７」、・・・「１１」と分割データを格納していく）。さらに制御部１２７はブロック２０４のワード２１０、２１１に分割データを格納し、パケットデータの格納処理を終了する（「１２」、「１３」と分割データを格納してパケットデータの格納処理を終了する）。
【００２９】
また図４は本実施例に係るスイッチ１００のスイッチスケジューリングを示す概念図である。
【００３０】
図４に示す模式図では、Ｂ０はメモリバンク３０３へのアクセス、Ｂ１はメモリバンク３０４へのアクセス、Ｂ２はメモリバンク３０５へのアクセス、Ｂ３はメモリバンク３０６へのアクセス、Ｂ４はメモリバンク３０７へのアクセス、Ｂ５はメモリバンク３０８へのアクセスを表しており、入力ポート１０１から入力される分割データは周期的にメモリバンク３０３、３０４、・・・、メモリバンク３０８の順に書き込まれることを示している。また図４は、出力ポート１２０から出力される分割データも周期的にメモリバンク３０３、３０４、・・・、メモリバンク３０８の順に読み出されることを示している。
【００３１】
同様にして図４は、入力ポート１０１から入力される分割データがメモリバンク３０３に書き込まれるタイミングで入力ポート１０２から入力される分割データはメモリバンク３０８に書き込まれ、続いてメモリバンク３０３、３０４、・・・、メモリバンク３０７の順に周期的に書き込まれることを示している。また図４は、出力ポート１２０から出力される分割データがメモリバンク３０３から読み出されるタイミングで出力ポート１２１から出力される分割データもメモリバンク３０８から読み出され、続いてメモリバンク３０３、３０４、・・・、メモリバンク３０７の順に読み出されることを示している。また図４は入力ポート１０１から入力される分割データがメモリバンク３０３に書き込まれるタイミングで入力ポート１０３から入力される分割データはメモリバンク３０７に書き込まれ、続いてメモリバンク３０８、３０３、・・・、メモリバンク３０６の順に周期的に書き込まれることを示している。
【００３２】
また図４は、出力ポート１２０から出力される分割データがメモリバンク３０３から読み出されるタイミングで出力ポート１２２から出力される分割データもメモリバンク３０７から読み出され、続いてメモリバンク３０８、３０３、・・・、メモリバンク３０６の順に読み出されることを示している。また図４は入力ポート１０１から入力される分割データがメモリバンク３０３に書き込まれるタイミングで入力ポート１０４から入力される分割データはメモリバンク３０６に書き込まれ、続いてメモリバンク３０７、３０８、・・・、メモリバンク３０５の順に周期的に書き込まれることを示している。
【００３３】
また図４は、出力ポート１２０から出力される分割データがメモリバンク３０３から読み出されるタイミングで出力ポート１２３から出力される分割データもメモリバンク３０６から読み出され、続いてメモリバンク３０７、３０８、・・・、メモリバンク３０５の順に読み出されることを示している。また図４は入力ポート１０１から入力される分割データがメモリバンク３０３に書き込まれるタイミングで入力ポート１０５から入力される分割データはメモリバンク３０５に書き込まれ、続いてメモリバンク３０６、３０７、・・・、メモリバンク３０４の順に周期的に書き込まれることを示している。
【００３４】
また図４は、出力ポート１２０から出力される分割データがメモリバンク３０３から読み出されるタイミングで出力ポート１２４から出力される分割データもメモリバンク３０５から読み出され、続いてメモリバンク３０６、３０７、・・・、メモリバンク３０４の順に読み出されることを示している。また図４は入力ポート１０１から入力される分割データがメモリバンク３０３に書き込まれるタイミングで入力ポート１０６から入力される
分割データはメモリバンク３０４に書き込まれ、続いてメモリバンク３０５、３０６、・・・、メモリバンク３０３の順に周期的に書き込まれることを示している。また図４は、出力ポート１２０から出力される分割データがメモリバンク３０３から読み出されるタイミングで出力ポート１２５から出力される分割データもメモリバンク３０４から読み出され、続いてメモリバンク３０５、３０６、・・・、メモリバンク３０３の順に読み出されることを示している。
【００３５】
例えば図４に示すように、制御部１２７が入力ポート１０１からメモリバンク３０４、３０５、３０６、３０７、３０８、３０３、３０４、３０５の順に分割データを格納していく。そして制御部１２７は、入力ポート１０１からメモリバンク３０７に分割データを格納するタイミングで、メモリバンク３０４から分割データを読み出して出力ポート１２３から出力する。また制御部１２７は、入力ポート１０１からメモリバンク３０４に分割データを格納するタイミングで、メモリバンク３０８から分割データを読み出して出力ポート１２２から出力する。
【００３６】
図５は本実施例に係るスイッチ１００のパケット転送を示す概念図である。図５ではスイッチ１００のスイッチコア部分のパケットデータの書き込み／読み出し処理速度（スループット）が入出力ポート部分でのパケットデータの転送処理速度よりも速い場合について説明する。スイッチコア部分は、入力バッファ１０７、共有メモリ１１３、出力バッファ１１４から構成される。そして図５は、パケットデータ５０１が８Ｂ（バイト）×１５６．２５ＭＨｚで入力ポート１０１より入力され、出力ポート１２０から８Ｂ（バイト）×１５６．２５ＭＨｚでパケットデータ５０４として出力される過程を示した図である。
【００３７】
図５に示すようにパケットデータ５０１は、入力ポート１０１より入力されるスループット（８Ｂ（バイト）×１５６．２５ＭＨｚ）よりも速いスループット（４Ｂ（バイト）×３１２．５×Ｓｐｅｅｄ−ｕｐＭＨｚ）で入力バッファ１０７がパケットデータを格納する。「Sｐｅｅｄ−ｕｐ」は入出力ポートの入出力バッファへの読み出し／書き出し速
度に対する入出力バッファの共有メモリ１１３への読み出し／書き出し速度の高速化した比率を示すものあり、ｔｐ（ｍ）／ｔｐ（ｐ）と表せる。ｔｐ（ｍ）は、入出力バッファの共有メモリ１１３への読み出し／書き出し速度である。ｔｐ（ｐ）は、入出力ポートの入出力バッファへの読み出し／書き出し速度である。そのためインプットバッファ１０７への入力はギャップを含んだパケットデータとして扱われなければならない。そのことを模式的にパケット５０２で示している。共有メモリ１１３を論理的に構成するブロック単位で入力バッファ１０７から共有メモリ１１３に格納し、また該ブロック単位で共有メモリ１１３から出力バッファ１１４に書き込む。パケットデータ５０３は、入力バッファ１０７、出力バッファ１１４と共有メモリ１１３との間において制御部１２７がギャップを含まないブロック単位のパケットデータを転送することを模式的に示した図である。すなわち、ギャップはブロック間にのみ存在することを表す。そして制御部１２７が出力バッファよりスループット（８Ｂ（バイト）×１５６．２５ＭＨｚ）のスループットでギャップなしのパケットデータ５０４を出力する。
【００３８】
図６は本実施例に係る共有メモリ１１３にギャップが生じる場合のパケットデータの格納に関する概念図である。そして図６は共有メモリ１１３を構成する６つのメモリバンク３０３〜３０８の論理構造を示す図である。
【００３９】
図２において説明したように、共有メモリ１１３のメモリバンク３０３〜３０８は、論理的にブロック２０１〜２０６に分割される。そして各ブロック２０１〜２０６は、ワード２０７〜２１２から構成される。各ワード２０７〜２１２は、それぞれメモリバンク３０３〜３０８におけるデータ格納領域である。換言すれば各ブロック２０１〜２０６は、物理的に分離した各メモリバンク３０３〜３０８の一部であるデータ格納領域から構成さ
れている。そして連続したメモリアドレスが各メモリバンク３０３〜３０８をまたいで割り振られている。
【００４０】
図６においても図２と同様に、スイッチ１００が入力ポート１０１から入力される１つのパケットデータをメモリバンク３０３〜３０８に格納する態様を説明する。
【００４１】
制御部１２７は、入力ポート１０１から入力されるパケットデータをワードサイズ（ワード２０７〜２１２のサイズ）に分割する。制御部１２７は、１０個のワードサイズの分割データを生成する。そして制御部１２７は、ワードサイズに分割した１１個の分割データを順次メモリバンク３０３〜３０８に格納していく。図６に記載のブロック（行）とワード（列）で表されるマトリックス内に記載の番号「０」〜「１０」は、制御部１２７が分割した１１個の分割データを共有メモリ１１３内に格納していく順番を表している。また制御部１２７は、分割データそれぞれを該マトリックス内に記載の番号「０」〜「１０」の位置（領域）に格納する。
【００４２】
例えば制御部１２７はブロック２０１のワード２１０から分割データの格納を開始して、ブロック２０１を構成するすべてワード２０７〜２１２にデータを格納し終わるまでワード２１１、２１２、２０７、・・・の順に分割データを格納していく。制御部１２７がブロック２０１のワード２０９に分割データを格納し、ブロック２０１のワード２０７〜２１２のすべてに分割データを格納し終わると（「５」で示す分割データを格納し終わると）、ＴＡＧメモリ１２６に格納されているギャップ情報を参照して、ブロック２０３においてワード２１２からワード２０７、２０８、・・・と（「６」、「７」、・・・と）順に分割データを格納していく。本実施例のギャップ情報は、例えば「＋２」でワード２１２から分割データの格納を続けることを示す情報である。このことを換言すれば、制御部１２７は、一旦ワード２１０、２１１に対応するメモリバンクにおいては格納処理していたパケットデータの格納を一旦中止し、他のパケットデータを格納する処理などを行う。そして制御部１２７がワード２１２から再び順に分割データを格納開始する。
【００４３】
そして制御部１２７はブロック２０３のワード２１０に分割データ（「１０」と示す分割データ）を格納し、パケットデータの格納処理を終了する。
【００４４】
本実施例では、制御部１２７は、入力ポート１０１から入力されるパケットデータを入力バッファ１０７でブロックサイズ分保持した後、メモリバンク３０３〜３０８にブロックサイズ単位で格納している。これは制御部１２７が１つのブロックに分割データを書き込んでいる間にギャップが発生するのを防ぐためである。
【００４５】
上述するようにＴＡＧメモリ１２６は、ギャップ情報を格納する記憶ユニットである。またスイッチ１００は、共有メモリ１１３内に存在する空き領域を利用し、その空き領域にギャップ情報を格納し、パケットデータに付随させてギャップ情報を格納する構成でもよい。これは、共有メモリ１１３内の語長をパケットデータをアクセスするときの語長より大きくすることで、容易に実現できる。またギャップ情報は、予め定められた値でもよく、また動的にパケットデータを共有メモリ１１３に格納し各ブロックをまたぐ毎に制御部１２７が決定してＴＡＧメモリ１２６などに保持していく構成でもよい。
［４．ギャップ情報の管理に関するフローチャート］
図７は本実施例に係るパケットデータ格納時におけるギャップ管理に関するフローチャートである。
【００４６】
スイッチ１００の制御部１２７は共有メモリ１１３のブロックサイズに（１−ｔｐ（ｐ）／ｔｐ（ｍ））を乗算（ブロックサイズ×（１−ｔｐ（ｐ）／ｔｐ（ｍ））し、最小格納サイズを算出する（ステップＳ７０１）。ｔｐ（ｍ）は、入出力バッファの共有メモリ
１１３への読み出し／書き出し速度である。ｔｐ（ｐ）は、入出力ポートの入出力バッファへの読み出し／書き出し速度である。最小格納サイズは、入出力ポートの入出力バッファへの読み出し／書き出し速度と入出力バッファの共有メモリ１１３への読み出し／書き出し速度との速度差を吸収するためのバッファ蓄積量に相当する格納容量である。そのためスイッチ１００は、入力バッファに保持するパケットデータのサイズが最小格納サイズよりも大きい場合には、共有メモリ１１３内でブロック内にギャップを発生させることなく、1ブロック分のデータを共有メモリ内に書きこむことができる。
【００４７】
制御部１２７は、共有メモリ１１３内にギャップが発生するか否かを判別するため、制御部１２７は、格納するパケットデータが最小格納サイズよりも大きいか否かを判別する（ステップＳ７０２）。制御部１２７が格納するパケットデータが最小格納サイズ以下と判別する場合（ステップＳ７０２  ＮＯ）、再び制御部１２７は、格納するパケットデータが最小格納サイズよりも大きいか否かを判別する。外部からのデータが入力バッファに到着することにより、このステップＳ７０２は有限回で終了する。本実施例では、パケットデータの最小サイズは、最小格納サイズより大きいことを想定している。たとえば、イーサネット（登録商標）での実施例においては、パケットデータの最小サイズは６４バイトである。パケットデータの最小サイズが、最小格納サイズに等しいか、または小さい実施例においては、ステップＳ７０２において、パケットデータの末尾を受信済みである場合に、ステップＳ７０２  ＹＥＳを選択することができる。ｋの判断により、パケットデータ内に断片的なギャップが入ることはない。
【００４８】
制御部１２７が格納するパケットデータが最小格納サイズよりも大きいと判別する場合（ステップＳ７０２  ＹＥＳ）、制御部１２７は、共有メモリ１１３内に発生するギャップの容量（ワードサイズのいくつ分かの容量）を算出する（ステップＳ７０３）。ギャップ容量は最小格納サイズより大きい容量であって、最小格納サイズに最も近いワードサイズのいくつ分かの容量を特定し算出する。つまり制御部１２７は、最小格納サイズにα量加算して、ワードサイズのいくつ分かの容量に合う値をギャップ容量（ギャップ情報）として算出する。
【００４９】
そして制御部１２７は、格納するパケットデータの最後であるか否かを判別する（ステップＳ７０４）。つまり制御部１２７は、共有メモリ１１３に格納する分割データがパケットデータを構成するうちで最終位置の分割データであるか否かを判別する。制御部１２７がパケットデータを構成する分割データのうち最後の分割データであると判別する場合（ステップＳ７０４  ＹＥＳ）、制御部１２７はパケットデータの格納処理を終了する。制御部１２７がパケットデータを構成する分割データのうち最後の分割データでないと判別する場合（ステップＳ７０４  ＮＯ）、制御部１２７は、算出したギャップ情報をＴＡＧメモリ１２６に記憶したか否かを判別する（ステップＳ７０５）。
【００５０】
制御部１２７が、ギャップ情報をＴＡＧメモリ１２６に記憶していないと判別する場合（ステップＳ７０５  ＮＯ）、制御部１２７はギャップ情報をＴＡＧメモリ１２６に記憶する（ステップＳ７０６）。制御部１２７が、ギャップ情報をＴＡＧメモリ１２６に記憶していると判別した場合（ステップＳ７０５  ＹＥＳ）、制御部１２７は共有メモリ１１３を論理的に構成するブロックの最後であるか否かを判別する（ステップＳ７０７）。
【００５１】
制御部１２７が、共有メモリ１１３における分割データの格納位置がブロックの最後でないと判別した場合（ステップＳ７０７  ＮＯ）、制御部１２７はその分割データがパケットデータの最後であるか否かを判別する（ステップＳ７０４）。制御部１２７が、共有メモリ１１３における分割データの格納位置がブロックの最後であると判別した場合（ステップＳ７０７  ＹＥＳ）、制御部１２７はギャップ情報を参照して、ギャップ情報が示すスキップすべきワード数だけスキップして、制御部１２７は共有メモリ１１３内の新た
なブロックに分割データを格納する（ステップＳ７０８）。
【００５２】
図８は本実施例に係るデータ読み出し時におけるギャップの管理に関するフローチャートである。
【００５３】
スイッチ１００がパケットデータを転送するにあたり、制御部１２７は共有メモリ１１３からパケットデータを読み出す。制御部１２７は、読み出した分割データが読み出し対象であるパケットデータの最後の分割データであるか否かを判別する（ステップＳ８０１）。
【００５４】
制御部１２７が、読み出したパケットデータが読み出し対象であるパケットデータの最後の分割データであると判別する場合（ステップＳ８０１  ＹＥＳ）、制御部１２７はパケットデータの読み出し処理を終了する。制御部１２７が読み出したパケットデータが読み出し対象であるパケットデータの最後の分割データでないと判別する場合（ステップＳ８０１  ＮＯ）、制御部１２７はＴＡＧメモリ１２６が保持するギャップ情報を参照するか否かを判別する（ステップＳ８０２）。
【００５５】
制御部１２７がＴＡＧメモリ１２６のギャップ情報を参照すると判別する場合（ステップＳ８０２  ＹＥＳ）、制御部１２７は読み出す分割データが格納されたブロックに関するギャップ情報をＴＡＧメモリ１２６から参照し（ステップＳ８０３）、読み出した分割データがブロックの最後か否かを判別する（ステップＳ８０４）。制御部１２７がＴＡＧメモリ１２６のギャップ情報を参照しないと判別すると（ステップＳ８０２  ＮＯ）、ＴＡＧメモリ１２６からギャップ情報を参照せずに読み出した分割データがブロックの最後か否かを判別する（ステップＳ８０４）。
【００５６】
制御部１２７が読み出した分割データがブロックの最後でないと判別した場合（ステップＳ８０４  ＮＯ）、制御部１２７は再び読み出した分割データが読み出し対象であるパケットデータの最後の分割データであるか否かを判別する（ステップＳ８０１）。制御部１２７が読み出した分割データがブロックの最後であると判別した場合（ステップＳ８０４  ＹＥＳ）、制御部１２７はギャップ情報が示すスキップすべきワード数だけスキップして、制御部１２７は共有メモリ１１３内の新たなブロックから分割データを読み出す。ここで制御部１２７がＴＡＧメモリ１２６からギャップ情報を参照しない場合には分割データに付随するギャップ情報を参照してスキップすべきワード数の情報を取得する。
【００５７】
本実施例に係るスイッチ１００は、カット・スルー方式により、パケットデータの転送を行う構成である。しかしながらカット・スルー方式に限定されるものではなく、スイッチ１００は他のデータ転送方式としてストア・アンド・フォワード方式でパケットデータを転送してもよい。カットスルーは送信側から受信側ポートにデータ・パケットを即座に送る、つまりパケットのなかに埋め込まれた送り先アドレスを確認した時点で、受信側ポートへの送信を開始する方式であり、ＣＲＣを含むパケットデータのエラーチェックの結果に基づいた廃棄の判断は行わない方式である。さらにスイッチ１００はモディファイド・カットスルー方式によりパケットデータ転送を行ってもよい。モディファイド・カットスルー方式は、データ・パケットの最初の６４バイトを受けた時点で受信側ポートへの送信を開始する方式である。モディファイド・カットスルー方式は、パケットの欠落、衝突までのチェックが可能なパケットデータ転送方式である。
【００５８】
またスイッチ１００は、パケット内ギャップの情報を先行するパケットデータに付随して保持することにより、共有メモリ１１３の格納効率を低減することなく、ポートとメモリの速度差を柔軟に管理できる。換言すれば、スイッチ１００は、ポートの入出力速度とメモリの書き出し／読み出し速度に寄る共有メモリ１１３内に発生する空き領域の情報を
ブロック単位で保持することにより、メモリの格納効率を落とすことなくレイテンシを短縮して高速に伝送可能とすることができる。イーサネット（登録商標）により送受信するパケットデータを格納する共有メモリ上で、ギャップ情報を記憶するだけの十分な空き領域を設けるのは容易である。ある実施例では、共有メモリの語長をパケット書き込み時の語長より大きくし、その差分によって生じる記憶領域にギャップ情報を格納する。また、ある実施例では、ブロック内の1語を用いてギャップ情報を格納する。スイッチ１００は
その空領域を活用してギャップ情報をパケットデータに付随して管理することができる。
【００５９】
さらにスイッチ１００は、ポートの入出力速度とメモリの書き出し／読み出し速度を一致またはその整数倍比に増加させる必要がないため、フレキシブルにポート増設などの設計変更が可能となる。つまり例えばスイッチの入出力ポートを増設することに起因して、メモリのポートあたりのスループットを増加させる場合、ポート増設分だけメモリの読みだしスループット格納効率を落とすことなく増加させることができる。
【００６０】
またスイッチ１００は、新たなハードウェアを何ら設けることなく、上記に記載のパケットデータの転送処理を実現することができる。また入出力バッファに確保するのに必要な容量は、最小格納サイズ（ブロックサイズ×（１−ｔｐ（ｐ）／ｔｐ（ｍ））でよく、スイッチ１００はカット・スルー方式を採用してレンテインシの短いデータ伝送を実現することができる。
【図面の簡単な説明】
【００６１】
【図１】本実施例に係るスイッチ１００の構成図である。
【図２】本実施例に係るスイッチ１００のストリームデータのアクセスに関する概念図である。
【図３】本実施例に係るスイッチ１００のより具体的な構成図である。
【図４】本実施例に係るスイッチ１００のスイッチスケジューリングを示す概念図である。
【図５】本実施例に係るスイッチのパケット転送を示す概念図である。
【図６】本実施例に係るスイッチ１００のストリームデータのアクセスに関する概念図である。
【図７】本実施例に係るデータ格納時におけるギャップの管理に関するフローチャートである。
【図８】本実施例に係るデータ読み出し時におけるギャップの管理に関するフローチャートである。
【符号の説明】
【００６２】
１００…スイッチ
１０１…入力ポート
１０２…入力ポート
１０３…入力ポート
１０４…入力ポート
１０５…入力ポート
１０６…入力ポート
１０７…入力バッファ
１０８…入力バッファ
１０９…入力バッファ
１１０…入力バッファ
１１１…入力バッファ
１１２…入力バッファ
１１３…共有メモリ
１１４…出力バッファ
１１５…出力バッファ
１１６…出力バッファ
１１７…出力バッファ
１１８…出力バッファ
１１９…出力バッファ
１２０…出力ポート
１２１…出力ポート
１２２…出力ポート
１２３…出力ポート
１２４…出力ポート
１２５…出力ポート
１２６…ＴＡＧメモリ
１２７…制御部
３０１…スイッチングユニット
３０２…スイッチングユニット
３０３…メモリバンク
３０４…メモリバンク
３０５…メモリバンク
３０６…メモリバンク
３０７…メモリバンク
３０８…メモリバンク
【図１】
2010067091.tif 000003
【図２】
2010067091.tif 000004
【図３】
2010067091.tif 000005
【図４】
2010067091.tif 000006
【図５】
2010067091.tif 000007
【図６】
2010067091.tif 000008
【図７】
2010067091.tif 000009
【図８】
2010067091.tif 000010