(57)【要約】【課題】データを送受信する第１及び第２の装置と、第１及び第２の装置間に設定された複数の転送路のうちのいずれかを介してデータを転送するデータ転送装置と、をそなえる情報処理装置を、簡素な構成で実現する。【解決手段】データ転送装置は、第１の装置からデータを受信し格納する受信部と、前記受信部から転送されたデータを格納し第２の装置に向けて送信する送信部と、を有し、前記送信部は、転送されたデータに関するデータ情報を、転送路ごとに保持する情報保持部８００と、前記複数の転送路で共通に用いられる共通保持部８５０と、前記転送路ごとのデータ情報の入力状況に基づいて、前記データ情報を、前記共通保持部を経由させてから前記情報保持部に入力する制御を行なう第１制御部と、を有し、前記受信部は、前記共通保持部が保持する情報量に応じて前記送信部への新たなデータ転送を抑止する抑止部を有する。【選択図】図９
2015069345.tif 000002
【特許請求の範囲】
【請求項１】
データを送信する第１の装置と、前記第１の装置から入力されたデータを、前記第１の装置と前記データの送信先である第２の装置との間に設定された複数の転送路のうちのいずれかの転送路を介して出力するデータ転送装置と、前記データ転送装置から前記データを受信する前記第２の装置と、をそなえ、
前記データ転送装置は、
前記第１の装置から前記データを受信し格納する受信部と、
前記受信部から転送されたデータを格納し前記第２の装置に向けて送信する送信部と、を有し、
前記送信部は、
前記受信部から転送されたデータに関するデータ情報を、転送路ごとに保持する情報保持部と、
前記複数の転送路で共通に用いられる共通保持部と、
前記転送路ごとのデータ情報の入力状況に基づいて、前記情報保持部に入力されるデータ情報を、前記共通保持部を経由させてから前記情報保持部に入力する制御を行なう第１制御部と、を有し、
前記受信部は、
前記共通保持部が保持する情報量に応じて前記送信部への新たなデータ転送を抑止する抑止部を有する、
ことを特徴とする、情報処理装置。
【請求項２】
前記抑止部は、
前記受信部が新たに転送するデータの転送路の情報と直前に転送したデータの転送路の情報とに基づいて、前記共通保持部が保持する情報量を予測し、予測結果に応じて前記送信部への新たなデータ転送を抑止する、
ことを特徴とする、請求項１記載の情報処理装置。
【請求項３】
前記抑止部は、
前記受信部が新たに転送するデータの転送路が前記受信部の直前の転送サイクルにおいて転送されたデータの転送路と異なる場合にカウントを行なうカウンタを有し、
カウント結果が前記共通保持部の記憶容量に関する所定の閾値に達した場合に、前記送信部への新たなデータ転送を抑止する、
ことを特徴とする、請求項２記載の情報処理装置。
【請求項４】
前記カウンタは、
前記受信部が新たに転送するデータの直前の転送サイクルにおいてデータが転送されていない場合に、カウント結果を減少させる、
ことを特徴とする、請求項３記載の情報処理装置。
【請求項５】
前記情報保持部は、
前記複数の転送路に対応して設けられる複数の入力保持部と、
前記複数の転送路で共通に用いられ、書き込みと読み出しとが交互に行なわれる記憶部と、
前記複数の転送路に対応して設けられ、前記情報保持部に入力されたデータ情報を転送路ごとに保持する複数の出力保持部と、を有し、
前記送信部は、さらに、
前記複数の出力保持部が保持する転送路ごとの情報量に基づいて、前記情報保持部に入力されたデータ情報を、前記入力保持部及び前記記憶部を経由させてから、対応する出力保持部に入力する制御を行なう第２制御部を有する、
ことを特徴とする、請求項１〜４のいずれか１項記載の情報処理装置。
【請求項６】
前記第１制御部は、
前記転送路ごとのデータ情報の入力状況に基づいて、保持する情報量が所定量に達する入力保持部については、当該入力保持部に入力されるデータ情報を、前記共通保持部を経由させてから前記入力保持部に入力する制御を行なう、
ことを特徴とする、請求項５記載の情報処理装置。
【請求項７】
前記複数の転送路は、各々が前記出力保持部及び前記入力保持部を有する複数の仮想チャネルである、
ことを特徴とする、請求項５又は請求項６記載の情報処理装置。
【請求項８】
前記データ転送装置は、
前記第１の装置から送信されるデータの送信先となる装置ごとに前記送信部を有し、
前記受信部は、
複数の前記送信部の各々に対応して前記抑止部を有する、
ことを特徴とする、請求項１〜７のいずれか１項記載の情報処理装置。
【請求項９】
入力されたデータを、前記データの送信元と送信先との間に設定された複数の転送路のうちのいずれかの転送路を介して出力するデータ転送装置であって、
前記送信元から前記データを受信し格納する受信部と、
前記受信部から転送されたデータを格納し前記送信先に向けて送信する送信部と、をそなえ、
前記送信部は、
前記受信部から転送されたデータに関するデータ情報を、転送路ごとに保持する情報保持部と、
前記複数の転送路で共通に用いられる共通保持部と、
前記転送路ごとのデータ情報の入力状況に基づいて、前記情報保持部に入力されるデータ情報を、前記共通保持部を経由させてから前記情報保持部に入力する制御を行なう第１制御部と、を有し、
前記受信部は、
前記共通保持部が保持する情報量に応じて前記送信部への新たなデータ転送を抑止する抑止部を有する、
ことを特徴とする、データ転送装置。
【請求項１０】
データを送信する第１の装置と、前記第１の装置から入力されたデータを、前記第１の装置と前記データの送信先である第２の装置との間に設定された複数の転送路のうちのいずれかの転送路を介して出力するデータ転送装置と、前記データ転送装置から前記データを受信する前記第２の装置と、をそなえ、前記データ転送装置が、前記第１の装置から前記データを受信して格納する受信部と、前記受信部から転送されたデータを格納し前記第２の装置に向けて送信する送信部と、を有する情報処理装置におけるデータ転送方法であって、
前記データ転送装置の前記送信部において、
前記受信部から転送されたデータに関するデータ情報を、転送路ごとに情報保持部に保持し、
前記転送路ごとのデータ情報の入力状況に基づいて、前記情報保持部に入力されるデータ情報を、前記複数の転送路で共通に用いられる共通保持部を経由させてから前記情報保持部に入力する制御を行ない、
前記受信部において、
前記共通保持部が保持する情報量に応じて前記送信部への新たなデータ転送を抑止する、
ことを特徴とする、データ転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本件は、情報処理装置，データ転送装置，およびデータ転送方法に関する。
【背景技術】
【０００２】
サーバ等の情報処理システム（情報処理装置）では、複数のシステムボード及びInput/Output（Ｉ／Ｏ）ボード等を相互に接続するために、バッファ装置をそなえたクロスバ等のデータ転送装置が用いられることがある。
バッファ装置は、Random Access Memory（ＲＡＭ）等の外部メモリを用いたFirst-In First-Out（ＦＩＦＯ）で構成することができる。例えば、バッファ装置として、読み出し側バッファに空き容量がなくなった場合にデータ退避を行なうために、外部メモリにオーバフロー領域を設けた構成が知られている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】国際公開第２０１０／１２２６１３号パンフレット
【発明の概要】
【発明が解決しようとする課題】
【０００４】
情報処理システムにおいて、パケット（データ）の送信元から送信先までの転送経路に、各々が独立したバッファを持つ複数のVirtual Channel（ＶＣ；仮想チャネル，転送路）が設定されることがある。送信元は、送信元−送信先間に設定された複数のＶＣのうちのいずれかのＶＣを介してデータを送出することができる。これにより、送信先までの一部のＶＣにおいて混雑等によりデータが停滞している場合でも、送信元は、送信先までの他のＶＣを選択することで、停滞の影響を受けずにデータを転送することができる。
【０００５】
送信元−送信先間の転送経路に複数のＶＣが設定される場合、バッファ装置は、ＶＣごとに独立したバッファをそなえることになる。このとき、バッファ装置ではＶＣごとにバッファの制御が行なわれるため、回路の物量が増大することになる。また、バッファ装置をＲＡＭ等のメモリを用いたＦＩＦＯで構成する場合、ＶＣごとにＲＡＭ及び周辺回路がそなえられることになり、回路の物量がさらに増大することになる。
【０００６】
１つの側面では、本発明は、入力されたデータを、データの送信元と送信先との間に設定された複数の転送路のうちのいずれかの転送路を介して出力するデータ転送装置をそなえる情報処理装置を、簡素な構成で実現することを目的とする。
なお、前記目的に限らず、後述する発明を実施するための形態に示す各構成により導かれる作用効果であって、従来の技術によっては得られない作用効果を奏することも本発明の他の目的の１つとして位置付けることができる。
【課題を解決するための手段】
【０００７】
本件の情報処理装置は、データを送信する第１の装置と、前記第１の装置から入力されたデータを、前記第１の装置と前記データの送信先である第２の装置との間に設定された複数の転送路のうちのいずれかの転送路を介して出力するデータ転送装置と、前記データ転送装置から前記データを受信する前記第２の装置と、をそなえ、前記データ転送装置は、前記第１の装置から前記データを受信し格納する受信部と、前記受信部から転送されたデータを格納し前記第２の装置に向けて送信する送信部と、を有し、前記送信部は、前記受信部から転送されたデータに関するデータ情報を、転送路ごとに保持する情報保持部と、前記複数の転送路で共通に用いられる共通保持部と、前記転送路ごとのデータ情報の入力状況に基づいて、前記情報保持部に入力されるデータ情報を、前記共通保持部を経由させてから前記情報保持部に入力する制御を行なう第１制御部と、を有し、前記受信部は、前記共通保持部が保持する情報量に応じて前記送信部への新たなデータ転送を抑止する抑止部を有する。
【発明の効果】
【０００８】
一実施形態及び変形例によれば、入力されたデータを、データの送信元と送信先との間に設定された複数の転送路のうちのいずれかの転送路を介して出力するデータ転送装置をそなえる情報処理装置を、簡素な構成で実現することができる。
【図面の簡単な説明】
【０００９】
【図１】情報処理システムの構成例を示す図である。
【図２】図１に示す情報処理システムの受信バッファの構成例を示す図である。
【図３】図１に示す情報処理システムの送信バッファの構成例を示す図である。
【図４】図２及び図３に示すキューの構成例を示す図である。
【図５】４個のＶＣで１ＲＷ−ＲＡＭを共用した構成例を示す図である。
【図６】図５に示すパケット管理部においてリード／ライト競合が発生する場合の一例を示すタイミングチャートである。
【図７】図６に示すタイミングチャートにおけるタイミングｔ１２〜ｔ２０の間の入力キューの状態を示す図である。
【図８】一実施形態に係るクロスバの構成例を示す図である。
【図９】図８に示す送信パケット管理部の構成例を示す図である。
【図１０】図９に示すプリキューの周辺回路の構成例を示す図である。
【図１１】図８に示すプリキュー状態予測回路の構成例を示す図である。
【図１２】図６に示すタイミングチャートにおいて、４段のプリキューを適用した場合のタイミングｔ１２〜ｔ３０の間の入力キュー及びプリキューの状態を示す図である。
【図１３】図８に示すクロスバにおける動作例を説明するタイミングチャートである。
【図１４】図１３に示すタイミングチャートにおけるタイミングｔ８〜ｔ２４の間の入力キュー及びプリキューの状態を示す図である。
【図１５】図８に示すプリキュー状態予測回路の動作例を説明するフローチャートである。
【図１６】図８に示す送信パケット管理部によるパケット情報入力処理の動作例を説明するフローチャートである。
【図１７】図８に示す送信パケット管理部によるプリキューからの出力処理の動作例を説明するフローチャートである。
【図１８】一実施形態の変形例に係る受信バッファの構成を示す図である。
【発明を実施するための形態】
【００１０】
以下、図面を参照して実施の形態を説明する。
〔１〕一実施形態
〔１−１〕情報処理システムについて
図１は、情報処理システム１の構成例を示す図である。
図１に示すように、情報処理システム１は、クロスバ２（クロスバボード）をそなえるとともに、クロスバ２を介して相互に接続される複数（例えば２個）のシステムボード３及び複数（例えば２個）のＩ／Ｏボード４をそなえる。
【００１１】
クロスバ（データ転送装置）２は、システムボード３及びＩ／Ｏボード４の各々と接続される複数（例えば４個）のポート（ポート固有部）２ａ、並びにポート２ａ間を完全結合するルーティング部２ｂをそなえる。
なお、複数のポート２ａの各々は互いに同様の構成をそなえる。また、複数のシステムボード３の各々は互いに同様の構成をそなえ、複数のＩ／Ｏボード４の各々は互いに同様の構成をそなえる。以下の説明では、図１に示すように、特定のシステムボード３を説明する場合には符号Ａ、Ｂを用い、特定のＩ／Ｏボード４を説明する場合には符号Ｘ、Ｙを用いる。また、特定のポート２ａを説明する場合には、システムボードＡ、Ｂ、Ｉ／ＯボードＸ、Ｙに対向するポート２ａについて、それぞれ符号Ａ、Ｂ、Ｘ、Ｙを用いる。
【００１２】
各ポート２ａは、バッファ装置の一例として、システムボード３から受信したパケット（データ）を格納する受信バッファ１００と、ルーティング部２ｂを介して他のポート２ａから転送されるパケットを格納し、宛先ポートへ送信する送信バッファ２００とをそなえる。受信バッファ１００及び送信バッファ２００の構成については、後述する。
ルーティング部２ｂは、複数の受信バッファ１００と複数の送信バッファ２００との間を他対他で接続し、受信バッファ１００からルーティング部２ｂに入力されたパケットを、クロスバ２内のいずれの宛先送信バッファ２００へも転送可能に構成される。ルーティング部２ｂとしては、例えば、ポート２ａ間を相互に直接接続した静的網や、クロスバスイッチ等の動的網が挙げられる。
【００１３】
システムボード３及びＩ／Ｏボード４とクロスバ２との間でのパケット伝送は、送信経路（配線、パス）を共用した複数のＶＣを用いて行なわれる。各ＶＣは、それぞれ独立したバッファを持ち、ＶＣ間で依存関係を持たない。例えば、或るＶＣを通過するパケットが停滞した場合でも、他のＶＣを通過するパケットは停滞しない（停滞したＶＣの影響を受けない）。
【００１４】
システムボード３は、Central Processing Unit（ＣＰＵ）３ａ、メモリ３ｂ、及びシステムコントローラ３ｃをそなえる。
ＣＰＵ３ａは、メモリ３ｂ及びシステムコントローラ３ｃと接続され、種々の制御や演算を行なう演算処理装置（プロセッサ）である。ＣＰＵ３ａは、メモリ３ｂ又は図示しないRead Only Memory（ＲＯＭ）等に格納されたプログラムを実行することにより、システムボード３における種々の機能を実現する。
【００１５】
例えば、ＣＰＵ３ａは、パケットを送出する際に、送信先までの転送経路に設定されたＶＣのうち、競合が発生しない（パケットが混雑していない）ＶＣを選択し、選択したＶＣの識別情報等をパケットに付加して送出することができる。なお、ＣＰＵ３ａは、クロスバ２におけるバッファの混雑状況等、ＶＣの資源の状態を検知することができ、検知結果に基づいて、パケットを転送するＶＣを選択することができる。ＣＰＵ３ａによるパケットの送信先ＶＣの選択は、上述した手法に限定されず、既知の種々の手法により行なうことが可能である。
【００１６】
メモリ３ｂは、種々のデータやプログラムを格納する記憶装置である。ＣＰＵ３ａは、プログラムを実行する際に、メモリ３ｂにデータやプログラムを格納し展開する。なお、メモリ３ｂとしては、例えばＲＡＭ等の揮発性メモリが挙げられる。
システムコントローラ３ｃは、システムボード３における種々の制御を行なうコントローラであり、図１に示す例では、クロスバ２との間のインタフェース制御を行なう。システムコントローラ３ｃは、送信バッファ３０及び受信バッファ４０をそなえる。送信バッファ３０は、ＣＰＵ３ａが発行した他のシステムボード３又はＩ／Ｏボード４宛のパケット（ＶＣの識別情報を含む）を一時的に格納し、クロスバ２へ送信する。受信バッファ４０は、クロスバ２から受信した自システムボード３宛のパケットを一時的に格納し、ＣＰＵ３ａ又はメモリ３ｂに渡す。
【００１７】
Ｉ／Ｏボード４は、カードスロット４ａ、ディスク４ｂ、及びＩ／Ｏコントローラ４ｃをそなえる。
カードスロット４ａは、種々のＩ／Ｏデバイスやネットワーク等のインタフェースカードが接続されるスロットである。ディスク４ｂは、種々のデータやプログラム等を格納するハードウェアである。ディスク４ｂとしては、例えばHard Disk Drive（ＨＤＤ）等の磁気ディスク装置、Solid State Drive（ＳＳＤ）等の半導体ドライブ装置、フラッシュメモリ等の不揮発性メモリ等の各種デバイスが挙げられる。カードスロット４ａに接続されたインタフェースカードやディスク４ｂ等は、ＣＰＵ３ａと同様に、ＶＣの識別情報等をパケットに付加して送出してもよい。
【００１８】
Ｉ／Ｏコントローラ４ｃは、クロスバ２との間のインタフェース制御を行なうコントローラであり、システムコントローラ３ｃと同様に、送信バッファ３０及び受信バッファ４０をそなえる。受信バッファ４０は、クロスバ２から受信したパケットを一時的に格納し、カードスロット４ａに接続された機器若しくはネットワーク、又はディスク４ｂに渡す。送信バッファ４０は、システムボード３等による要求に応じて、カードスロット４ａ又はディスク４ｂから出力されるパケットを一時的に格納し、クロスバ２へ送信する。
【００１９】
次に、図２及び図３を参照して、クロスバ２の受信バッファ１００及び送信バッファ２００について説明する。
図２は、図１に示す情報処理システム１の受信バッファ１００の構成例を示す図であり、図３は、送信バッファ２００の構成例を示す図である。なお、図２は、ポートＡにそなえられる受信バッファ１００の一例を示し、図３は、ポートＸにそなえられる送信バッファ２００の一例を示す。
【００２０】
はじめに、受信バッファ１００について説明する。
図２に示すように、受信バッファ１００は、受信データバッファ１１０、ＲＴＡ（Routing Table Array）１２０、パケットデコーダ（Packet Decoder）１３０、ライトＳＴＭ（State Machine）１４０、及び受信カウンタ１５０をそなえる。また、受信バッファ１００は、受信パケット管理部１６０、アービタ１７０、セレクタ１８０、及びリードＳＴＭ１９０をそなえる。
【００２１】
受信バッファ１００は、システムボードＡから受信したパケットを、受信データバッファ１１０及びパケットデコーダ１３０に渡す。
なお、受信バッファ１００が受信したパケットには、送信元で付加された宛先情報、ＶＣの識別情報、パケット長等の情報が含まれるパケットヘッダが付加されている。ここで、宛先情報としては、例えばパケットの送信先の識別番号等、パケットの送信元でパケットに付加されたユニークな識別情報が挙げられる。
【００２２】
受信データバッファ（Rx Data Buffer）１１０は、パケットの送信元（システムボード３又はＩ／Ｏボード４；図２に示す例ではシステムボードＡ）からのパケット本体をＶＣごとに格納するバッファである。受信データバッファ１１０としては、例えばＲＡＭ等の揮発性メモリが挙げられる。
ＲＴＡ１２０は、受信したパケット中の宛先情報と宛先ポートとを対応付けるテーブルである。なお、宛先ポートとしては、パケットの転送先のポート２ａを識別する転送先ポート固有部番号等の識別情報が挙げられる。
【００２３】
パケットデコーダ１３０は、パケットからパケット情報を抽出・解析するデコーダである。具体的には、パケットデコーダ１３０は、パケット中の情報に基づきパケット長を確認するとともに、パケット中の宛先情報とＲＴＡ１２０の情報とに基づき宛先ポートを確認（解析）する。そして、パケットデコーダ１３０は、パケット長及び宛先ポートの情報を含むパケット情報を生成して、受信パケット管理部１６０に送出する。
【００２４】
また、パケットデコーダ１３０は、入力されたパケット中の情報に基づきパケットのＶＣを判別し、判別したＶＣの受信データバッファ１１０にライトＳＴＭ１４０を用いてパケットを書き込む。さらに、パケットデコーダ１３０は、受信カウンタ１５０へ当該ＶＣのカウント指示（例えば加算指示）を送出する。
ライトＳＴＭ１４０は、パケットデコーダ１３０からの指示に応じて受信データバッファ１１０への受信パケットの書き込みを制御する。
【００２５】
受信カウンタ（Rx ReqCNT）１５０は、複数（例えばｎ個；ｎは１以上の整数）のカウンタ（VC[0-n]ReqCNT）１５５をそなえ、受信バッファ１００に格納されているパケット数をＶＣごとにカウントするものである。各カウンタ１５５は、パケットを１個受信する度に＋１され、パケットを１個転送する度に−１される。例えば、受信カウンタ１５０は、パケットデコーダ１３０からの加算指示に応じて対応するＶＣのカウンタ１５５の値を１増加させる一方、アービタ１７０からの指示に応じて対応するＶＣのカウンタ１５５を１減少させる。
【００２６】
なお、ｎの値は、システムボードＡと、システムボードＢ並びにＩ／ＯボードＸ及びＹとの間の転送経路に設定された全ＶＣの数に対応させることができる。
受信パケット管理部（Rx ReqQ）１６０は、複数（例えばｎ個）のキュー（VC[0-n]ReqQ）１６５をそなえ、パケット情報（宛先ポートやパケット長等）をＶＣごとにキュー１６５に格納して管理する。受信パケット管理部１６０は、アービタ１７０からキュー１６５の指示を受けると、対応するキュー１６５を開放してパケット情報を１つ出力する。
【００２７】
アービタ（ARB）１７０は、ＶＣ間のパケット出力要求を調停する調停部である。アービタ１７０は、受信カウンタ１５０の各カウンタ１５５の値（“＞”の出力；図２中、“req”と表記）を参照し、待機中のパケットの中からどのＶＣのパケットを出力するか決定する。また、アービタ１７０は、セレクタ１８０に決定したＶＣのパケット情報の選択を指示し、リードＳＴＭ１９０に受信データバッファ１１０からの受信パケットの読み出しを指示する。そして、アービタ１７０は、受信カウンタ１５０に選択したＶＣのカウンタ１５５を１減算させ、選択したパケット情報を保持するキュー１６５の開放を受信パケット管理部１６０に指示する。
【００２８】
セレクタ（SEL）１８０は、受信パケット管理部１６０のキュー１６５から、アービタ１７０により指示されたキュー１６５を選択し、選択したキュー１６５に格納された先頭のパケット情報（図２中、“info”と表記）を読み出して、リードＳＴＭ１９０に渡す。
リードＳＴＭ１９０は、アービタ１７０からの指示に応じて受信データバッファ１１０からの受信パケットの読み出しを制御する。リードＳＴＭ１９０は、アービタ１７０から読出指示を受けると、セレクタ１８０により読み出されたパケット情報に対応するＶＣの受信パケットを読み出し、対応する宛先ポートに向けて転送する。
【００２９】
次に、送信バッファ２００について説明する。
図３に示すように、送信バッファ２００は、接続される入力ポートごとに、データバッファ２１０及び制御部２２０をそなえる。図３に示す例では、データバッファ２１０及び制御部２２０は、入力ポートＡ、Ｂ、及びＹの各々に対応して設けられる。なお、図３では、入力ポートＡ、Ｂ、及びＹに対応して、データバッファ２１０を“Port[A,B,Y] Data Buffer”と表記し、ポート制御部２２０を“Port[A,B,Y] ReqCtrl”と表記する。
【００３０】
また、図３に示すように、送信バッファ２００は、データバッファ２１０及び制御部２２０の複数の組で（入力ポート間で）共通に用いられるアービタ２７０、セレクタ２８０、リードＳＴＭ２９０、及びセレクタ２９５をそなえる。
制御部２２０は、入力ポート（パケットの送信元）ごとに設けられるものであり、各制御部２２０は、パケットデコーダ２３０、ライトＳＴＭ２４０、送信カウンタ２５０、及び送信パケット管理部２６０をそなえる。なお、図３では、図の簡略化のため、ポートＢ及びＹに対応する制御部２２０内部の図示を省略する。
【００３１】
データバッファ２１０、パケットデコーダ２３０、ライトＳＴＭ２４０、送信カウンタ２５０、及び送信パケット管理部２６０は、それぞれ図２に示す受信バッファ１００の各構成と同様の機能を有する。
すなわち、各データバッファ２１０は、対応するシステムボード３又はＩ／Ｏボード４（図３に示す例ではシステムボードＡ、Ｂ、又はＩ／ＯボードＹ）からのパケット本体をＶＣごとに格納するバッファである。
【００３２】
パケットデコーダ２３０は、パケットデコーダ１３０と同様に、パケットからパケット情報を抽出・解析するデコーダである。パケットデコーダ２３０は、入力されたパケットのＶＣを判別し、判別したＶＣのデータバッファ２１０にライトＳＴＭ２４０を用いてパケットを書き込む。また、パケットデコーダ２３０は、送信カウンタ２５０へ当該ＶＣのカウント指示を送出する。さらに、パケットデコーダ２３０は、パケット中の情報に基づきパケット長等のパケット情報を確認（解析）し、送信パケット管理部２６０へパケット情報を送出する。
【００３３】
なお、送信バッファ２００に入力される全てのパケットは、対応する宛先（図３に示す例ではＩ／ＯボードＸ）へ送出されるため、送信バッファ２００はＲＴＡ１２０を省略でき、パケットデコーダ２３０は宛先ポートの確認を省略できる。
ライトＳＴＭ２４０は、対応するパケットデコーダ２３０からの指示に応じて、対応するデータバッファ２１０への受信パケットの書き込みを制御する。
【００３４】
送信カウンタ（Tx ReqCNT）２５０は、複数（例えばｎ個）のカウンタ（VC[0-n]ReqCNT）２５５をそなえ、受信カウンタ１５０と同様に、送信バッファ２００に格納されているパケット数をＶＣごとにカウントする。
送信パケット管理部（Tx ReqQ）２６０は、複数（例えばｎ個）のキュー（VC[0-n]ReqQ）２６５をそなえ、受信パケット管理部１６０と同様に、パケット情報をＶＣごとにキュー２６５に格納して管理する。
【００３５】
アービタ（ARB）２７０は、アービタ１７０と同様の機能を有する調停部であるが、アービタ１７０と異なり、ＶＣ間だけではなく、入力ポート間の調停も行なう。アービタ２７０は、送信カウンタ２５０の各カウンタ２５５の値（図３中、“Port[A,B,Y] req”と表記）を参照し、待機中のパケットの中からどの入力ポートのどのＶＣのパケットを出力するか決定する。また、アービタ２７０は、セレクタ２８０に決定したＶＣのパケット情報の選択を指示し、リードＳＴＭ２９０にデータバッファ２１０からの受信パケットの読み出しを指示する。そして、アービタ２７０は、送信カウンタ２５０に選択したＶＣのカウンタ２５５を１減算させ、送信パケット管理部２６０に選択したパケット情報を保持するキュー２６５の開放を指示する。
【００３６】
セレクタ（SEL）２８０は、セレクタ１８０と同様の機能を有するが、セレクタ１８０と異なり、複数の入力ポートにおける複数のＶＣから、キュー２６５を選択する。セレクタ２８０は、送信パケット管理部２６０のキュー２６５から、アービタ２７０により指示されたキュー２６５を選択し、選択したキュー２６５に格納された先頭のパケット情報（図３中、“Port[A,B,Y] info”と表記）を読み出して、リードＳＴＭ２９０に渡す。
【００３７】
リードＳＴＭ２９０は、リードＳＴＭ１９０と同様の機能を有するが、リードＳＴＭ１９０と異なり、複数の入力ポートのデータバッファ２１０からのパケットの読み出しを制御する。リードＳＴＭ２９０は、アービタ２７０から読出指示を受けると、指示された入力ポートのデータバッファ２１０をセレクタ２９５に選択させ、セレクタ２８０により読み出されたパケット情報に対応する入力ポート及びＶＣの受信パケットを読み出す。
【００３８】
セレクタ（SEL）２９５は、リードＳＴＭ２９０により指示されたデータバッファ２１０を選択し、選択したデータバッファ２１０に格納された先頭のパケットを送信先（図３に示す例ではＩ／ＯボードＸ）に向けて転送する。
なお、情報処理システム１において、パケットに加えてパケット情報（パケット長等）がルーティング部２ｂを介して受信バッファ１００から伝達される場合、送信バッファ２００のパケットデコーダ２３０を省略してもよい。
【００３９】
ところで、パケット情報を管理する受信パケット管理部１６０及び送信パケット管理部２６０内部のキュー１６５及び２６５（VC[0-n]ReqQ）は、それぞれＦＩＦＯで構成されてもよい。以下、ＦＩＦＯで構成される受信パケット管理部１６０及び送信パケット管理部２６０をまとめてパケット管理部３６０といい、キュー１６５及び２６５をまとめてキュー３６５という。
【００４０】
図４は、図２及び図３に示すキュー３６５（１６５及び２６５）の構成例を示す図である。
図４に示すように、パケット管理部３６０内の各キュー３６５は、出力キュー３１０、セレクタ３２０、1 Read-Write-RAM（１ＲＷ−ＲＡＭ）３３０、及び入力キュー３４０をそなえる。出力キュー（Out-Q）３１０及び入力キュー（In-Q）３４０としては、レジスタ等、高速なリード／ライト動作が可能な回路が挙げられる。
【００４１】
１ＲＷ−ＲＡＭ３３０は、ＲＡＭへのアクセスのための１組のアドレス及びデータを用いて、これらのアドレス及びデータをリード動作及びライト動作で共用するものであり、リード動作とライト動作とが所定サイクルごとに交互に切り替わる。１ＲＷ−ＲＡＭ３３０としては、例えばStatic RAM（ＳＲＡＭ）等が挙げられる。
セレクタ（SEL）３２０は、パケットデコーダ１３０又は２３０から入力されたパケット情報（図４中、“info_in”と表記）、入力キュー３４０内のパケット情報、及び１ＲＷ−ＲＡＭ３３０内のパケット情報のいずれかを選択し出力キュー３１０へ出力する。
【００４２】
キュー３６５は、出力キュー３１０の空き状況に応じてセレクタ３２０を制御する。例えば、キュー３６５は、待機中のパケット数が少ない（空き領域がある）場合、出力キュー３１０のみを使用するようにセレクタ３２０を制御し、パケットデコーダ１３０又は２３０から入力されたパケット情報を出力キュー３１０に格納する。一方、キュー３６５は、出力キュー３１０が溢れた（空き領域がない）場合、入力されたパケット情報を、入力キュー３４０を介して１ＲＷ−ＲＡＭ３３０に書き込む。そして、キュー３６５は、出力キュー３１０が空くのを待って、セレクタ３２０を制御し１ＲＷ−ＲＡＭ３３０からパケット情報を読み出して、出力キュー３１０に格納する。
【００４３】
なお、出力キュー３１０からの出力（図４中、“vcn_info_out”と表記）は、セレクタ１８０又は２８０により選択され取り出されるパケット情報となる。
１ＲＷ−ＲＡＭ３３０は、集積度が高い反面、リード／ライトを同時に行なうことができず、リード／ライト競合が発生することがある。リード／ライト競合とは、１ＲＷ−ＲＡＭ３３０のリード動作のタイミングで入力キュー３４０がライト動作可能になることをいう。この場合、キュー３６５は、次回以降の１ＲＷ−ＲＡＭ３３０のライト動作のタイミングまで１ＲＷ−ＲＡＭ３３０へライト動作の対象データを書き込むことができない。
【００４４】
そこで、キュー３６５は、１ＲＷ−ＲＡＭ３３０に書き込むパケット情報を入力キュー３４０である程度溜め込み、複数のパケット情報を同時に（まとめて）１ＲＷ−ＲＡＭ３３０に書き込み、複数のパケット情報を同時に（まとめて）１ＲＷ−ＲＡＭ３３０から読み出す。このような動作を行なうことで、キュー３６５は、１ＲＷ−ＲＡＭ３３０を用いることによるリード／ライト競合を解決する。
【００４５】
なお、ＦＩＦＯはFlip Flop（ＦＦ）で構成されてもよいが、キュー３６５で扱われるパケット数が多くなるほど、図４に示す構成よりも面積効率が低下し、消費電力も増大する。従って、ＦＩＦＯでは、図４に示すように出力キュー３１０及び入力キュー３４０と１ＲＷ−ＲＡＭ３３０とを組み合わせて構成した方が、ＦＦで構成するよりも面積効率が上がり、消費電力を抑えることができる。
【００４６】
ここで、図４に示すように、単純にＶＣごとに１ＲＷ−ＲＡＭ３３０を設けるのが最も簡単な構成であるが、複数のキュー３６５で１ＲＷ−ＲＡＭ３３０を共用することで、さらにパケット管理部３６０の面積効率が上がり、消費電力を抑えることができる。
図５は、４個のＶＣで１ＲＷ−ＲＡＭ４３０を共用した構成例を示す図である。
一例として、図５に示すパケット管理部４６０は、複数（例えば４個）のキュー４６５、並びに各キュー４６５で共用される１ＲＷ−ＲＡＭ４３０及びセレクタ４３５をそなえる。また、各キュー４６５は、出力キュー４１０、セレクタ４２０、及び入力キュー４４０をそなえる。
【００４７】
出力キュー４１０、セレクタ４２０、１ＲＷ−ＲＡＭ４３０、及び入力キュー４４０は、それぞれ図４に示すキュー３６５の各構成と同様の機能を有する。
パケット管理部４６０（各キュー４６５）は、出力キュー４１０（vc[0-3]-Out-Q）の空き状況に応じてセレクタ４２０（SEL A1〜SEL A4）を制御する。例えば、パケット管理部４６０は、待機中のパケット数が少ない（空きがある）出力キュー４１０については、出力キュー４１０のみを使用するように対応するセレクタ４２０を制御し、入力されたパケット情報（図５では“info_in”と表記）を出力キュー４１０に格納する。なお、図５に示す構成の場合、パケットデコーダ２３０からの入力のパスもＶＣ間で共用されるため、パケット情報にはＶＣ番号等のＶＣの識別情報が含まれることが好ましい。
【００４８】
一方、パケット管理部４６０は、パケット情報が溢れた（空き領域がない）出力キュー４１０については、入力されたパケット情報を、対応するＶＣの入力キュー４４０（vc[0-3]-In-Q）に格納する。そして、パケット管理部４６０は、セレクタ４３５（SEL B）を制御し、パケット情報をライト可能な入力キュー４４０を選択して、選択した入力キュー４４０に格納された先頭のパケット情報を１ＲＷ−ＲＡＭ４３０に書き込む。また、パケット管理部４６０は、出力キュー４１０が空くのを待って、対応するセレクタ４２０を制御し１ＲＷ−ＲＡＭ４３０からパケット情報を読み出して、出力キュー４１０に格納する。
【００４９】
なお、出力キュー４１０からの出力（図５中、“vc[0-3]_info_out”と表記）は、セレクタ１８０又は２８０により選択され取り出されるパケット情報となる。
このように、同一入力ポート内のＶＣ間で１ＲＷ−ＲＡＭ４３０を共用させる構成は、比較的簡単に実現することができる。
なお、送信バッファ２００では、各入力ポートは独立に動作するため、入力ポート間で同じ１ＲＷ−ＲＡＭ４３０を用いることは難しい。そこで、送信バッファ２００では、入力ポートごとに、図５に示すように複数のＶＣ間で同じ１ＲＷ−ＲＡＭ４３０を用いることができる。キュー４６５は、ＶＣごとの個別資源であるため、送信パケット管理部２６０では合計で入力ポート数＊ＶＣ数のキュー４６５が設けられることになるが、図５に示す構成とすることで、１ＲＷ−ＲＡＭ４３０及び周辺回路の物量を低減できる。
【００５０】
ところで、クロスバ２がサポートする最短のパケット長が１サイクルである場合、図５に例示する１ＲＷ−ＲＡＭ４３０を共用した構成では、リード／ライト競合に追従できない場合がある。この場合、リード／ライト競合を解決するために入力キュー４４０を大きくする等の対処が行なわれることになる。
図６は、図５に示すパケット管理部４６０においてリード／ライト競合が発生する場合の一例を示すタイミングチャートであり、図７は、図６に示すタイミングチャートにおけるタイミングｔ１２〜ｔ２０の間の入力キュー４４０の状態を示す図である。
【００５１】
なお、前提として、１ＲＷ−ＲＡＭ４３０のリード／ライトは３パケット単位で行なわれ、リードサイクル／ライトサイクルは１サイクルごとに交互に切り替えるものとする。
また、図６において、“write slot”は１ＲＷ−ＲＡＭ４３０がライト動作可能なサイクルである事を示す。さらに、“info_in_vc”はそのサイクルでパケット管理部４６０が受信したパケットのＶＣ番号、“vc[0-3]-In-Q”は各ＶＣの入力キュー４４０で待機中のパケット数をそれぞれ示す。また、“vc[0-3]-write-req”は各ＶＣの１ＲＷ−ＲＡＭ４３０へのライト要求、“ram_write_enb”はそのサイクルに１ＲＷ−ＲＡＭ４３０にライトしたＶＣ番号をそれぞれ示す。
【００５２】
図６に示すように、タイミングｔ１では、ＶＣ０の入力キュー４４０内に３つのパケット情報が溜まるため、ＶＣ０がライト可能となるが、“write slot”待ちのためライト動作は１サイクル待たされる。タイミングｔ２では、ＶＣ１がライト可能となるが、ＶＣ０とのライト競合が発生するため先にＶＣ０のライト動作が行なわれる。従って、ＶＣ１は２サイクル待たされる。
【００５３】
タイミングｔ３では、ＶＣ２がライト可能となるが、ＶＣ１とのライト競合が発生するため、ＶＣ２は３サイクル待たされる。タイミングｔ４では、ＶＣ３がライト可能となるが、ＶＣ１及びＶＣ２とのライト競合が発生するため４サイクル待たされる。
以上のように、タイミングｔ１〜ｔ４では、ＶＣ３は最大４サイクル待たされるが、４サイクル待った後のタイミングｔ９〜ｔ１２では、全てのＶＣのパケットが３つ未満になり、リード／ライト競合は解消する。
【００５４】
一方、タイミングｔ１３〜ｔ１６においても、タイミングｔ１〜ｔ４と同様にＶＣ３がライト待ちとなる。ところが、タイミングｔ９〜ｔ１２の場合と異なり、タイミングｔ１６〜ｔ１９において、パケット管理部４６０がライト待ち中のＶＣ（ＶＣ３）と同一ＶＣのパケット情報を連続して受信している。このとき、図７に示すように、ＶＣ３（入力キュー４４０）では、最大７段の領域（バッファ）が用いられることになる（タイミングｔ２０）。
【００５５】
ＶＣ３は、タイミングｔ１６〜ｔ１９のような場合でも全てのパケット情報を格納できるように構成されることが望ましい。この場合、入力キュー４４０に要求される段数は、
・ＶＣ間のライト競合がない場合：ＶＣ数＊４段（溜め込む数３段＋“write slot”待ち１段）
・ＶＣ間のライト競合がある場合：ＶＣ数＊（４＋ＶＣ数−１）段
となる。このように、入力キュー４４０は、全ＶＣ数の２乗に比例した段数を持つことが望ましい。
【００５６】
図６及び図７に示す例は、ＶＣ４個で１ＲＷ−ＲＡＭ４３０を共用した場合のリード／ライト競合のワーストケースではあるが、少なくとも、複数のＶＣで１ＲＷ−ＲＡＭを共用した構成では、共用しない構成よりも、入力キューに要求される段数が多くなることがわかる。このため、入力キューの段数を全ＶＣ数の２乗に比例した段数とすることも考えられるが、面積効率が低下し消費電力が増大することになるため、複数のＶＣで１ＲＷ−ＲＡＭを共用することの利点が損なわれることになる。
【００５７】
そこで、一実施形態の一例としてのクロスバ２０（受信バッファ５００及び送信バッファ７００）は、以下に詳述するように、最短パケット長が１サイクルの場合でも、１ＲＷ−ＲＡＭを共用する送信パケット管理部７６０を、少ない資源で構成する。
〔１−２〕クロスバの構成例
図８は、一実施形態の一例としてのクロスバ２０の構成例を示す図である。
【００５８】
以下、図８を参照して、一実施形態に係るクロスバ２０におけるリクエストキュー制御について説明する。
クロスバ２０は、クロスバ２と同様に、図１に示す情報処理システム１に適用されるものであり、入力されたデータを、データの送信元と送信先との間に設定された複数のＶＣ（転送路）のうちのいずれかの転送路を介して出力するデータ転送装置である。
【００５９】
一実施形態に係るクロスバ２０は、図１に示すルーティング部２ｂをそなえるとともに、図２及び図３に示す複数の受信バッファ１００及び送信バッファ２００（ポート２ａ）とは異なる複数の受信バッファ５００及び送信バッファ７００（ポート２ａ）をそなえる。
クロスバ２０は、送信バッファ７００の送信パケット管理部７６０に、ＶＣ間で共通に使用されるプリキュー８５０（図９参照）をそなえる。また、クロスバ２０は、受信バッファ５００に、プリキュー８５０の使用状態を予測するプリキュー状態予測回路６００をそなえる。このような構成とすることで、クロスバ２０は、最小限のキュー資源の追加によって複数のＶＣ間で１ＲＷ−ＲＡＭ８３０（図９参照）を共有することが可能となる。
【００６０】
以下、送信バッファ７００及び受信バッファ５００の各々の構成の詳細を説明する。
〔１−２−１〕送信バッファの構成
はじめに、図８〜図１０を参照して、送信バッファ７００の構成例を説明する。
図９は、図８に示す送信パケット管理部７６０の構成例を示す図であり、図１０は、図９に示すプリキュー８５０の周辺回路の構成例を示す図である。
【００６１】
送信バッファ（送信部）７００は、送信バッファ２００と同様に、受信バッファ５００から転送されたパケット（データ）を格納し送信先に向けて送信する。送信バッファ７００は、接続される入力ポートごとに、データバッファ７１０及び制御部７２０をそなえる。図８に示す例では、データバッファ７１０及び制御部７２０は、入力ポートＡ、Ｂ、及びＹの各々に対応して設けられる。
【００６２】
また、図８に示すように、送信バッファ７００は、データバッファ７１０及び制御部７２０の複数の組で（入力ポート間で）共通に用いられるアービタ７７０、セレクタ７８０、リードＳＴＭ７９０、及びセレクタ７９５をそなえる。
制御部７２０は、入力ポートごとに設けられるものであり、各制御部７２０は、パケットデコーダ７３０、ライトＳＴＭ７４０、送信カウンタ７５０、及び送信パケット管理部７６０をそなえる。なお、図８では、図の簡略化のため、ポートＢ及びＹに対応する制御部７２０内部の図示を省略する。
【００６３】
なお、送信バッファ７００は、送信パケット管理部７６０の構成を除き、図３に示す送信バッファ２００と基本的に同様の構成をそなえるため、重複した説明を省略する。
送信パケット管理部７６０は、図９に示すように、複数（例えば４個）のキュー７６５、並びに、各キュー７６５で共用される１ＲＷ−ＲＡＭ８３０、セレクタ８３５、セレクタ８４５、及びプリキュー８５０をそなえる。また、各キュー７６５は、出力キュー８１０、セレクタ８２０、及び入力キュー８４０をそなえる。
【００６４】
出力キュー８１０、セレクタ８２０、１ＲＷ−ＲＡＭ８３０、セレクタ８３５、及び入力キュー８４０は、それぞれ図５に示すキュー４６５の各構成と同様の機能を有する。
すなわち、各出力キュー（出力保持部）８１０及び各入力キュー（入力保持部）８４０は、それぞれ出力キュー４１０及び入力キュー４４０と同様に、複数のＶＣに対応して設けられ、送信パケット管理部７６０に入力されたパケット情報をＶＣごとに保持する。１ＲＷ−ＲＡＭ（記憶部）８３０は、１ＲＷ−ＲＡＭ４３０と同様に、複数のＶＣで共通に用いられ、書き込みと読み出しとが交互に行なわれる。１ＲＷ−ＲＡＭ８３０としては、例えばＳＲＡＭ等の不揮発性メモリが挙げられる。
【００６５】
このように、出力キュー８１０、セレクタ８２０、１ＲＷ−ＲＡＭ８３０、セレクタ８３５、及び入力キュー８４０は、受信バッファ５００から転送されたパケットに関するパケット情報（データ情報）を、ＶＣごとに保持する情報保持部８００の一例である。
プリキュー（pre-Q，共通保持部）８５０は、入力ポートごとに、複数のＶＣで共通に用いられる退避用のキューである。
【００６６】
出力キュー８１０、入力キュー８４０、及びプリキュー８５０としては、例えば、それぞれ、レジスタ等、高速なリード／ライト動作が可能な回路が挙げられる。
セレクタ（SEL C）８４５は、パケットデコーダ７３０から入力されたパケット情報（図９中、“info_in”と表記）及びプリキュー８５０に格納された先頭のパケット情報（図９中、“pre-Q-info”と表記）のいずれかを選択し情報保持部８００へ出力する。例えば、セレクタ８４５は、プリキュー８５０の使用量＞０の場合に、プリキュー８５０の先頭に格納されたパケット情報を選択する。なお、パケット情報には、ＶＣ番号等のＶＣの識別情報、及びパケット長の情報等が含まれる。
【００６７】
次に、図１０を参照して、プリキュー８５０の周辺回路について説明する。
図１０に示すように、送信パケット管理部７６０は、上述した構成に加えて、プリキュー制御回路８６０、及び入出力キュー／ＲＡＭ制御回路８７０をさらにそなえる。
プリキュー制御回路（第１制御部）８６０は、情報保持部８００に入力されるパケット情報を、プリキュー８５０を経由させてから情報保持部８００に入力する制御を行なう。例えば、プリキュー制御回路８６０は、ＶＣごとのパケット情報の入力状況に基づいて、保持する情報量（パケット情報）が所定量（例えば４つ）に達する入力キュー８４０については、当該入力キュー８４０に入力されるパケット情報を、プリキュー８５０を経由させてから入力キュー８４０に入力する制御を行なう。
【００６８】
具体的には、プリキュー制御回路８６０は、セレクタ８４５から出力されたパケット情報（図１０中、“pre-Q-out”と表記）を入力される。また、プリキュー制御回路８６０は、入出力キュー／ＲＡＭ制御回路８７０から１ＲＷ−ＲＡＭ８３０の使用状態、出力キュー８１０及び入力キュー８４０の使用量、１ＲＷ−ＲＡＭ８３０の“write slot”の状態を入力される。そして、プリキュー制御回路８６０は、入力された情報に基づいて、後述のようにプリキュー８５０のＦＩＦＯ制御及びセレクタ８４５の制御を行なう。
【００６９】
入出力キュー／ＲＡＭ制御回路（第２制御部）８７０は、複数の出力キュー８１０が保持するＶＣごとの情報量に基づいて、情報保持部８００に入力されたパケット情報を、入力キュー８４０及び１ＲＷ−ＲＡＭ８３０を経由させてから、対応する出力キュー８１０に入力する制御を行なう。
例えば、入出力キュー／ＲＡＭ制御回路８７０は、待機中のパケット数が少ない（空きがある）出力キュー８１０については、出力キュー８１０のみを使用するように対応するセレクタ８２０を制御し、入力されたパケット情報（図９では“info_in”と表記）を出力キュー８１０に格納する。このとき、セレクタ８４５の制御はプリキュー制御回路８６０が行なう。なお、図９に示す構成の場合、パケットデコーダ７３０からの入力のパスもＶＣ間で共用されるため、パケット情報にはＶＣ番号等のＶＣの識別情報が含まれることが好ましい。
【００７０】
一方、入出力キュー／ＲＡＭ制御回路８７０は、パケット情報が溢れた（空き領域がない）出力キュー８１０については、入力されたパケット情報を、プリキュー制御回路８６０と共同して、対応するＶＣの入力キュー８４０又はプリキュー８５０に格納する。入力キュー８４０に格納されたパケット情報については、入出力キュー／ＲＡＭ制御回路８７０は、セレクタ８３５を制御し、パケット情報をライト可能な入力キュー８４０を選択して、選択した入力キュー８４０に格納された先頭のパケット情報を１ＲＷ−ＲＡＭ８３０に書き込む。また、入出力キュー／ＲＡＭ制御回路８７０は、出力キュー８１０が空くのを待って、対応するセレクタ８２０を制御し１ＲＷ−ＲＡＭ８３０からパケット情報を読み出して、出力キュー８１０に格納する。
【００７１】
ここで、入出力キュー／ＲＡＭ制御回路８７０は、セレクタ８４５から出力されたパケット情報（図１０中、“pre-Q-out”と表記）を入力される。また、入出力キュー／ＲＡＭ制御回路８７０は、後述のように１ＲＷ−ＲＡＭ８３０のリード／ライト制御、出力キュー８１０及び入力キュー８４０のＦＩＦＯ制御を行なうとともに、これらの使用状態、使用量、“write slot”の状態を取得し、プリキュー制御回路８６０へ出力する。
【００７２】
以下、プリキュー制御回路８６０及び入出力キュー／ＲＡＭ制御回路８７０の制御態様を説明する。
新規に受信したパケット情報は、該当するＶＣの出力キュー８１０に空きがない場合、１ＲＷ−ＲＡＭ８３０に読み出し待ちのパケット情報がある場合、又はプリキュー８５０の使用量≧１の場合、以下のルールでプリキュー８５０又は該当するＶＣの入力キュー８４０に登録される。
（ｉ）プリキュー８５０の使用量≧１の場合：ＦＩＦＯの順序保証のため、プリキュー８５０に登録される。
（ii）プリキュー８５０の使用量＝０の場合：
（ａ）１ＲＷ−ＲＡＭ８３０がライトサイクルの場合：該当するＶＣの入力キュー８４０に登録される。
【００７３】
（ｂ）１ＲＷ−ＲＡＭ８３０がリードサイクルの場合：
（ｂ−１）全ＶＣの入力キュー８４０の使用量＜３の場合（１ＲＷ−ＲＡＭ８３０へのライト対象のパケット情報がない場合)：ライト競合が起こらないため、該当するＶＣの入力キュー８４０に登録される。
（ｂ−２）到来パケットとは異なるＶＣの入力キュー８４０の使用量≧３の場合：到来パケットのＶＣの入力キュー８４０に登録した場合、当該入力キュー８４０の使用量が３になるとライト競合が発生してしまうため、到来パケットはプリキュー８５０に登録される。
【００７４】
（ｂ−３）到来パケットと同じＶＣの入力キュー８４０の使用量≧３の場合：次のライトサイクルで複数（例えば３つ）のパケット情報がまとめて１ＲＷ−ＲＡＭ８３０にライトされるため、該当するＶＣの入力キュー８４０に登録される。
また、プリキュー８５０の先頭に格納されたパケット情報は、以下のいずれかの条件が成立すると、プリキュー８５０から該当するＶＣの入力キュー８４０に登録される。
（iii）１ＲＷ−ＲＡＭ８３０がライトサイクルの場合
（iv）１ＲＷ−ＲＡＭ８３０がリードサイクルの場合で、以下の（ａ）又は（ｂ）の場合
（ａ）全ＶＣの入力キュー８４０の使用量＜３の場合（１ＲＷ−ＲＡＭ８３０へのライト対象のパケット情報がない場合）
（ｂ）プリキュー８５０の先頭パケットと同じＶＣの入力キュー８４０の使用量≧３の場合
なお、上記（iv）（ａ）の条件とする理由は、ライト競合が起こらないためであり、（iv）（ｂ）の条件とする理由は、次のライトサイクルで複数（例えば３つ）のパケット情報がまとめて１ＲＷ−ＲＡＭ８３０にライトされるためである。
【００７５】
上記の各条件において、プリキュー８５０への／からのパケット情報の格納／読出はプリキュー制御回路８６０により行なわれ、入力キュー８４０への／からのパケット情報の格納／読出は入出力キュー／ＲＡＭ制御回路８７０により行なわれる。
上述のように、プリキュー制御回路８６０及び入出力キュー／ＲＡＭ制御回路８７０は、リードサイクルで１ＲＷ−ＲＡＭ８３０へのライト待ちとなるＶＣ（入力キュー８４０の使用量≧３）が１個以下になるように制御することで、１ＲＷ−ＲＡＭ８３０へのライト競合を解消する。
【００７６】
このように、送信パケット管理部７６０は、ＶＣ間の１ＲＷ−ＲＡＭ８３０へのライト競合によっていずれかの入力キュー８４０が溢れる可能性がある場合に、後続パケットの到来情報をプリキュー８５０に退避させる。これにより、１ＲＷ−ＲＡＭ８３０をＶＣ間で共用することにより追加されることになるキュー資源（段数）を最小限に抑えることができる。
【００７７】
また、送信パケット管理部７６０は、入力キュー８４０の前段にプリキュー８５０及びセレクタ８４５をそなえるとともに、プリキュー制御回路８６０をそなえる。従って、図５に示す送信パケット管理部４６０における情報保持部８００（入力キュー４４０から出力キュー４１０までのフロー（論理））を変えずに済み、一実施形態に係る送信バッファ７００を容易に実現することができる。
【００７８】
〔１−２−２〕受信バッファの構成
次に、図８、図１１、及び図１２を参照して、受信バッファ５００の構成例を説明する。
図１１は、図８に示すプリキュー状態予測回路６００の構成例を示す図であり、図１２は、図６に示すタイミングチャートにおいて、４段のプリキュー８５０を適用した場合のタイミングｔ１２〜ｔ３０の間の入力キュー８４０及びプリキュー８５０の状態を示す図である。
【００７９】
受信バッファ（受信部）５００は、受信バッファ１００と同様に、送信元からパケット（データ）を受信し格納する。受信バッファ５００は、図８に示すように、受信データバッファ５１０、ＲＴＡ５２０、パケットデコーダ５３０、ライトＳＴＭ５４０、受信カウンタ５５０、及び受信パケット管理部５６０をそなえる。また、受信バッファ５００は、アービタ５７０、セレクタ５８０、リードＳＴＭ５９０、及びプリキュー状態予測回路６００をそなえる。なお、図８では、図の簡略化のため、ポートＢ及びＹに対応する受信バッファ５００内部の図示を省略する。
【００８０】
なお、受信バッファ５００は、アービタ５７０、リードＳＴＭ５９０、及びプリキュー状態予測回路６００の構成を除き、図２に示す受信バッファ１００と基本的に同様の構成をそなえるため、重複した説明を省略する。
アービタ５７０は、基本的にアービタ２７０と同様の構成であるが、プリキュー状態予測回路６００から抑止指示を受けると、調停を停止する点が異なる。具体的には、アービタ５７０は、プリキュー状態予測回路６００から抑止指示を受けている間、セレクタ５８０及びリードＳＴＭ５９０に対するパケット情報及び受信パケットの選択指示の送信を抑止する。
【００８１】
リードＳＴＭ５９０は、基本的にリードＳＴＭ２９０と同様の構成であるが、アービタ５７０から読出指示を受けると、受信データバッファ５１０から読み出した受信パケットの先頭であることを示す情報と、当該ＶＣの情報とをプリキュー状態予測回路６００へ出力する点が異なる。リードＳＴＭ５９０から送信される受信パケット及びＶＣの情報（例えばＶＣ番号）は、プリキュー状態予測回路６００において、受信バッファ５００から宛先ポートへこれから送信される受信パケット及びＶＣを示す情報として、プリキュー８５０の使用量の予測に用いられる。
【００８２】
プリキュー状態予測回路（抑止部）６００は、送信バッファ７００のプリキュー８５０が保持する情報量に応じて送信バッファ７００への新たなパケット（データ）転送を抑止する。例えば、プリキュー状態予測回路６００は、転送するパケット及び直前に転送したパケットの各々のＶＣの情報に基づいて、プリキュー８５０が保持する情報量を予測し、予測結果に応じて送信バッファ７００への新たなパケット転送を抑止する。
【００８３】
つまり、プリキュー状態予測回路６００は、プリキュー８５０が使用されている可能性のある最大量を管理し、プリキュー８５０がオーバフローする可能性がある場合に、アービタ５７０での調停を抑止することでプリキュー８５０のオーバフローを回避する。受信バッファ５００は、送信バッファ７００内のプリキュー８５０の状態を直接取得せずに予測することができ、受信バッファ５００から送信バッファ７００への情報の伝搬時間に影響されずに、プリキュー８５０の使用量を確実に予測することができる。
【００８４】
図６のタイミングチャートで示した通り、１ＲＷ−ＲＡＭ８３０のライト競合は異なるＶＣの１サイクルパケットが連続するケースで発生する。このため、プリキュー状態予測回路６００は、連続する１サイクルパケットのＶＣ番号を追跡することでプリキュー８５０が使用されている可能性のあるタイミングを検出し、プリキュー８５０の使用量を予測する。
【００８５】
なお、一実施形態に係る受信バッファ５００は、１つのプリキュー状態予測回路６００をそなえる。このプリキュー状態予測回路６００により状態が予測されるプリキュー８５０は、パケットの転送先である複数の送信バッファ７００のうちのいずれかの送信バッファ７００内に設けられるものである。つまり、プリキュー状態予測回路６００は、各送信バッファ７００内のプリキュー８５０の状態をそれぞれ予測するのではなく、プリキュー８５０が全送信バッファ７００で共通であると仮定して状態を予測する。
【００８６】
プリキュー状態予測回路６００は、図１１に示すように、カレントＶＣ保持部６１０、バスビジー判定部６２０、及びプリキューカウンタ６３０をそなえる。
プリキュー状態予測回路６００は、リードＳＴＭ５９０から受信するパケットの先頭タイミング（ヘッド；head）をトリガにして動作する。
カレントＶＣ保持部（CurVC）６１０は、最後に受信バッファ５００から出力したパケットのＶＣ番号を記録する。カレントＶＣ保持部６１０は、パケットのヘッドのタイミングでＶＣ番号をセット（set）し、ヘッドでないタイミングではセットされているＶＣ番号をホールド（hold）する。つまり、カレントＶＣ保持部６１０には、受信バッファ５００から直前に出力されたパケットのＶＣ番号（直前のＶＣ番号）が保持される。
【００８７】
バスビジー判定部（BusBUSY）６２０は、プリキュー８５０が使用されている可能性がある状態を示すために用いられる。バスビジー判定部６２０は、ヘッドのタイミングで例えば“1”をセットし、プリキューカウンタ６３０のカウント値が“0”の状態でヘッドが途切れると、セットされている値を例えば“0”にリセット（reset）する。なお、ヘッドが途切れる場合としては、そのサイクルにおいて受信バッファ５００からパケットが出力されない場合や、２サイクル以上のパケット長のパケットが受信バッファ５００から出力されている場合等が挙げられる。
【００８８】
プリキューカウンタ６３０は、プリキュー８５０の使用予測量をカウントするカウンタである。
具体的には、プリキューカウンタ６３０は、バスビジー判定部６２０に“1”がセットされている状態で、リードＳＴＭ５９０からの出力パケットのＶＣ番号（現在のＶＣ番号）とカレントＶＣ保持部６１０が保持する直前のＶＣ番号とが異なる場合、当該出力パケットのヘッドのタイミングで、例えばカウント値を１加算する。
【００８９】
また、プリキューカウンタ６３０は、リードＳＴＭ５９０からのパケットのヘッドが途切れると（直前の転送サイクルにおいてパケットが転送されていないと）、例えばカウント値を１減算する。
さらに、プリキューカウンタ６３０は、リードＳＴＭ５９０からの出力パケットのＶＣ番号とカレントＶＣ保持部６１０が保持する直前のＶＣ番号とが等しい場合、当該出力パケットのヘッドのタイミングで、カウント値をホールドする。これは、プリキュー８５０に連続して同じＶＣのパケット情報が入力されると、プリキュー８５０から先のパケット情報が出ていくとともに、後のパケット情報が入ることになり、プリキュー８５０の使用量は±０になるためである。
【００９０】
また、プリキューカウンタ６３０は、カウント値がプリキュー８５０の最大値（例えば４）に達した場合には、アービタ５７０へ抑止指示を送出することにより、プリキュー８５０の上書き（overwrite）を回避する。なお、アービタ５７０による調停動作の抑止により、受信バッファ５００からのパケットの出力が止まると、ヘッドが途切れる。この場合、プリキューカウンタ６３０のカウント値は次のサイクルで１減算されるため、プリキューカウンタ６３０からの抑止指示は停止する。
【００９１】
なお、カレントＶＣ保持部６１０及びバスビジー判定部６２０としては、例えばレジスタ等の回路が挙げられ、プリキューカウンタ６３０としては、例えばカウンタ回路等が挙げられる。
このように、プリキュー状態予測回路６００は、対応する送信バッファ７００内のプリキュー８５０の使用量をプリキューカウンタ６３０により予測し、プリキュー８５０が溢れそうな場合はアービタ５７０による調停を抑止して、送信バッファ７００への受信パケットの転送を停止する。従って、受信バッファ５００から転送されるパケットの状態に追従して、プリキュー８５０の使用量を確実に予測することができる。
【００９２】
ここで、図１２を参照して、図６に示すタイミングチャートにおいて、４段のプリキュー８５０を適用し、プリキュー状態予測回路６００を設けない場合のタイミングｔ１２〜ｔ３０の間の入力キュー８４０の状態を説明する。
図１２のタイミングｔ２０では、図７のタイミングｔ２０においてＶＣ３の入力キュー４４０に溜まった７つのパケット情報のうち、３つのパケット情報がプリキュー８５０によって吸収されている。また、図１２のタイミングｔ２１〜ｔ３０においても、各ＶＣの入力キュー８４０に既定の４個を超えてパケット情報が格納されることはない。
【００９３】
しかし、プリキュー８５０は、全ＶＣで共用されるＦＩＦＯキューであるため、ライト競合が連続して発生する最悪ケースを考慮すると、図１２のタイミングｔ１２の状態（プリキュー８５０が未使用）がタイミングｔ３０の状態（プリキュー８５０が３段使用済み）と置き換わった状態にもなり得る。このように、プリキュー８５０に要求される段数が無限に増加するというケースが起こり得る。
【００９４】
これに対し、一実施形態に係る受信バッファ５００のように、プリキュー状態予測回路６００を設けることで、プリキュー８５０への入力を止め、上述した最悪ケースのような特殊条件下でのプリキュー８５０のオーバフローを回避する事が可能となる。従って、送信バッファ７００側のプリキュー８５０の段数を少量（例えば４段）に限定することができる。
【００９５】
なお、プリキュー状態予測回路６００は、自受信バッファ５００が送出したパケットのＶＣに基づいて、プリキュー８５０の状態を予測するものとして説明したが、これに限定されるものではない。例えば、プリキュー状態予測回路６００は、送信バッファ７００と直接結線すること等により、プリキュー８５０の使用状態を示す信号を受け取ってもよい。この場合、プリキュー状態予測回路６００は、送信バッファ７００から受け取ったプリキュー８５０の使用状態に応じてアービタ５７０を抑止する機能をそなえればよく、より簡素な構成とすることができる。
【００９６】
また、受信バッファ５００の受信パケット管理部５６０は、図５に示すパケット管理部４６０と同様の構成とすることができる。例えば、システムボード３のＣＰＵ３ａは、上述のように、クロスバ２におけるバッファの混雑状況等、ＶＣの資源の状態を検知することができ、検知結果に基づいて、パケットを転送するＶＣを選択することも可能である。従って、ＣＰＵ３ａは、パケットを送信する前に、入力キュー４４０が混雑しているＶＣを避けて、他のＶＣを選択することができるため、入力キュー４４０がオーバフローする確率が低いからである。
【００９７】
〔１−３〕動作例
次に、上述の如く構成された一実施形態の一例としての情報処理システム１の動作例を説明する。
〔１−３−１〕クロスバの動作例
はじめに、図１３及び図１４を参照して、クロスバ２０の動作例を説明する。
【００９８】
図１３は、図８に示すクロスバ２０における動作例を説明するタイミングチャートであり、図１４は、図１３に示すタイミングチャートにおけるタイミングｔ８〜ｔ２４の間の入力キュー８４０及びプリキュー８５０の状態を示す図である。
前提として、各ＶＣの入力キュー８４０の段数は４段であり、入力キュー８４０は３個のパケット情報を受信したら１ＲＷ−ＲＡＭ８３０へライトするものとする。また、図１３では、予め全ＶＣに２個のパケット情報が溜まっているものと仮定する。さらに、受信バッファ５００と送信バッファ７００とはルーティング部２ｂを介して接続されるため、時間差をもって動作する。ここでは、時間差（伝搬時間）を８サイクルと仮定し、受信バッファ５００からタイミングｔ０で出力されたパケットはタイミングｔ８で送信バッファ７００内のプリキュー８５０に到着するものとする。また、タイミングｔ８〜ｔ２０のパケットは１サイクルパケットであり、タイミングｔ２２のパケットは３サイクルパケットである。
【００９９】
なお、図１３において、“info_in_vc”は受信バッファ５００から送信バッファ７００に到来したパケットのＶＣ番号とパケット長とを表す。また、“PreQ-CNT”はプリキューカウンタ６３０のカウント値を表し、“PreQ-Use”は実際のプリキュー８５０の使用数を表す。
プリキュー８５０では、タイミングｔ９，ｔ１７のように、以下の（Ｉ）及び（III）の条件を満たす場合に、ライトのみが発生するため、使用量が増加する。
【０１００】
（Ｉ）リードサイクルに１ＲＷ−ＲＡＭ８３０へのライト待ちとなるＶＣ（入力キュー８４０の使用量≧３）がある場合。
（II）新規パケットのヘッドを受信しているタイミングでプリキュー８５０からの出力（pre-Q-out）のＶＣが切り替わる場合。
なお、上記（I）は、タイミングｔ９ではＶＣ０が該当し、タイミングｔ１７ではＶＣ１が該当する。また、上記（II）は、出力ＶＣが、タイミングｔ９ではＶＣ０からＶＣ１に切り替わっており、タイミングｔ１７ではＶＣ１からＶＣ２に切り替わっている。
【０１０１】
また、プリキュー８５０では、タイミングｔ１０〜ｔ１６，ｔ１９のように、以下の（III）の条件を満たす場合に、１ＲＷ−ＲＡＭ８３０へのライト競合は発生せず、プリキュー８５０からのリード及びライトが同時に起こるため、使用量は増加しない。
（III）プリキュー８５０からの出力（pre-Q-out）で同一ＶＣのパケットが連続している場合。
【０１０２】
さらに、プリキュー８５０では、タイミングｔ１８，ｔ２０，ｔ２２のように、以下の（IV）又は（Ｖ）の条件を満たす場合に、１ＲＷ−ＲＡＭ８３０へのライト競合は発生せず、使用量は増加しない。
（IV）プリキュー８５０からの出力（pre-Q-out）でＶＣの切り替わりがあっても、ライトサイクルの場合。
【０１０３】
（Ｖ）１ＲＷ−ＲＡＭ８３０へのライト待ちとなるＶＣ（入力キュー８４０の使用量≧３）がない場合。
また、プリキュー８５０では、タイミングｔ２１，ｔ２３のように、以下の（VI）又は（VII）の条件を満たす場合に、プリキュー８５０からのリードのみが発生するため、使用量が減少する。
【０１０４】
（VI）パケット間に隙間が生じた場合（パケットのヘッドが途切れ、パケット情報が入力されなかった場合）。
（VII）パケット長が２サイクル以上の場合（パケットのヘッドが連続せず、パケット情報が入力されなかった場合）。
以上のように、プリキュー状態予測回路６００は、最悪のライト競合状態を仮定して動作するため、実際のプリキュー８５０の使用数である“PreQ-Use”よりも“PreQ-CNT”の数の方が大きくなる。図１３に示す例では、“PreQ-Use”の最大値が“2”であるのに対して“PreQ-CNT”の最大値は“4”である。プリキュー８５０の数が４段の場合にはタイミングｔ１３でアービタ５７０の動作を抑止されるため、“PreQ-Use”及び“PreQ-CNT”の大小関係が逆転することはない。
【０１０５】
このように、プリキュー状態予測回路６００によれば、プリキュー８５０の使用量を余裕を持たせた値で予測でき、プリキュー８５０のオーバフローをより確実に回避することができる。従って、プリキュー８５０の段数を例えば４段に制限した場合でも、プリキュー８５０の上書きを抑止することが可能である。
〔１−３−２〕プリキュー状態予測回路の動作例
次に、図１５を参照して、受信バッファ５００のプリキュー状態予測回路６００の動作例を説明する。
【０１０６】
図１５は、図８に示すプリキュー状態予測回路６００の動作例を説明するフローチャートである。
なお、図１５に示す処理は、受信バッファ５００がパケットを転送可能なサイクル（転送サイクル；例えば１サイクル）ごとに実施される。
はじめに、図１５に示すように、プリキュー状態予測回路６００のプリキューカウンタ６３０により、リードＳＴＭ５９０からのヘッドの入力があるか否かが判断される（ステップＳ１）。ヘッドの入力がある場合（ステップＳ１のＹｅｓルート）、カレントＶＣ保持部６１０により、ＶＣ番号（CurVC）が更新される（ステップＳ２）。また、バスビジー判定部６２０により、現在の状態がバスビジーであるか否か、例えばレジスタに“1”がセットされているか否かが判断される（ステップＳ３）。バスビジーはない（レジスタに“0”がセットされている）場合（ステップＳ３のＮｏルート）、バスビジー判定部６２０によりレジスタに“1”がセットされ（ステップＳ４）、処理が終了する。
【０１０７】
一方、バスビジーである（レジスタに“1”がセットされている）場合（ステップＳ３のＹｅｓルート）、既にバスビジーであるため、バスビジー判定部６２０によりレジスタの値がホールドされ（ステップＳ５）、処理がステップＳ６に移行する。ステップＳ６では、プリキューカウンタ６３０により、リードＳＴＭ５９０からの出力ＶＣ番号とカレントＶＣ保持部６１０に格納された直前のＶＣ番号（CurVC）とが比較され、両者が異なるか否かが判断される。
【０１０８】
両者が異なる場合（ステップＳ６のＹｅｓルート）、プリキューカウンタ６３０により、カウント値（pre-Q CNT）に１が加算される（ステップＳ７）。また、プリキューカウンタ６３０により、カウント値がプリキュー８５０の記憶容量に関する所定の閾値（例えばプリキュー８５０が保持可能なパケット情報の最大数（最大値））に達したか否かが判断される（ステップＳ８）。カウント値がプリキュー８５０の最大値に達していない場合（ステップＳ８のＮｏルート）、処理が終了する。また、カウント値がプリキュー８５０の最大値に達した場合（ステップＳ８のＹｅｓルート）、プリキューカウンタ６３０により、アービタ５７０へ抑止指示が発行され（ステップＳ９）、処理が終了する。
【０１０９】
一方、ステップＳ６において、出力ＶＣ番号と直前のＶＣ番号（CurVC）とが同一である場合（ステップＳ６のＮｏルート）、プリキューカウンタ６３０により、カウント値がホールドされ（ステップＳ１０）、処理が終了する。
また、ステップＳ１において、ヘッドの入力がない場合（ステップＳ１のＮｏルート）、カレントＶＣ保持部６１０により、ＶＣ番号（CurVC）がホールドされる（ステップＳ１１）。また、バスビジー判定部６２０により、カウント値が“0”であるか否かが判断される（ステップＳ１２）。カウント値が“0”である場合（ステップＳ１２のＹｅｓルート）、バスビジー判定部６２０により例えばレジスタが“0”にリセットされ（ステップＳ１３）、処理が終了する。
【０１１０】
一方、ステップＳ１２において、カウント値が“0”ではない場合（ステップＳ１２のＮｏルート）、プリキューカウンタ６３０により、カウント値が１減算され（ステップＳ１４）、処理が終了する。
〔１−３−３〕送信パケット管理部の動作例
次に、図１６及び図１７を参照して、送信バッファ７００の送信パケット管理部７６０の動作例を説明する。
【０１１１】
図１６及び図１７は、図８に示す送信パケット管理部７６０によるパケット情報入力処理及びプリキュー８５０からの出力処理の動作例をそれぞれ説明するフローチャートである。
なお、図１６に示す処理は、送信パケット管理部７６０にパケット情報が入力される度に実施され、図１７に示す処理は、１ＲＷ−ＲＡＭ８３０のリード／ライトのサイクル（例えば１サイクル）ごとに実施される。
【０１１２】
はじめに、図１６に示すパケット情報入力処理について説明する。
図１６に示すように、送信パケット管理部７６０にパケット情報が入力されると（ステップＳ２１）、プリキュー制御回路８６０により、プリキュー８５０の使用量が１以上であるか否かが判断される（ステップＳ２２）。プリキュー８５０の使用量が１以上である場合（ステップＳ２２のＹｅｓルート）、プリキュー制御回路８６０により、入力されたパケット情報がプリキュー８５０に登録され（ステップＳ２３）、処理が終了する。
【０１１３】
一方、ステップＳ２２において、プリキュー８５０の使用量が０である場合（ステップＳ２２のＮｏルート）、該当ＶＣの出力キュー８１０に空きがないか否かが判断される（ステップＳ２４）。該当ＶＣの出力キュー８１０に空きがない場合（ステップＳ２４のＹｅｓルート）、プリキュー制御回路８６０により、入出力キュー／ＲＡＭ制御回路８７０からの入力に基づき、１ＲＷ−ＲＡＭ８３０がライトサイクルであるか否かが判断される（ステップＳ２５）。
【０１１４】
１ＲＷ−ＲＡＭ８３０がライトサイクルではない（リードサイクルである）場合（ステップＳ２５のＮｏルート）、プリキュー制御回路８６０により、入出力キュー／ＲＡＭ制御回路８７０からの入力に基づき、全ＶＣの入力キュー８４０の使用量が３未満であるか否かが判断される（ステップＳ２６）。全ＶＣの入力キュー８４０の使用量が３未満ではない場合（ステップＳ２６のＮｏルート）、プリキュー制御回路８６０により、到来パケットのＶＣと同一ＶＣの入力キュー８４０の使用量が３以上であるか否かが判断される（ステップＳ２７）。
【０１１５】
到来パケットのＶＣと同一ＶＣの入力キュー８４０の使用量が３以上である場合（ステップＳ２７のＹｅｓルート）、入出力キュー／ＲＡＭ制御回路８７０により、入力されたパケット情報が該当するＶＣの入力キュー８４０に登録され（ステップＳ２８）、処理が終了する。一方、到来パケットのＶＣと同一ＶＣの入力キュー８４０の使用量が３以上ではない場合（ステップＳ２７のＮｏルート）、つまり到来パケットのＶＣとは異なるＶＣの入力キュー８４０の使用量が３以上である場合、処理がステップＳ２３に移行する。
【０１１６】
なお、ステップＳ２５において、１ＲＷ−ＲＡＭ８３０がライトサイクルである場合（ステップＳ２５のＹｅｓルート）、又はステップＳ２６において、全ＶＣの入力キュー８４０の使用量が３未満である場合（ステップＳ２６のＹｅｓルート）、処理がステップＳ２８に移行する。
また、ステップＳ２４において、該当ＶＣの出力キュー８１０に空きがある場合（ステップＳ２４のＮｏルート）、処理がステップＳ２９に移行する。ステップＳ２９では、プリキュー制御回路８６０により、入出力キュー／ＲＡＭ制御回路８７０からの入力に基づき、以下のいずれかに該当するか否かが判断される。
・１ＲＷ−ＲＡＭ８３０に該当ＶＣのリード待ちのパケット情報がある。
・該当ＶＣの入力キュー８４０の使用量が３以上である。
【０１１７】
上記のいずれかに該当する場合（ステップＳ２９のＹｅｓルート）、処理がステップＳ２５に移行する。
一方、上記のいずれにも該当しない場合（ステップＳ２９のＮｏルート）、入出力キュー／ＲＡＭ制御回路８７０により、入力されたパケット情報が該当するＶＣの出力キュー８１０に登録され（ステップＳ３０）、処理が終了する。
【０１１８】
次に、図１７に示すプリキュー８５０からの出力処理について説明する。
図１７に示すように、プリキュー制御回路８６０により、プリキュー８５０の使用量が１以上であるか否かが判断される（ステップＳ３１）。プリキュー８５０の使用量が１以上ではない場合（ステップＳ３１のＮｏルート）、処理が終了する。
一方、プリキュー８５０の使用量が１以上である場合（ステップＳ３１のＹｅｓルート）、プリキュー制御回路８６０により、１ＲＷ−ＲＡＭ８３０がライトサイクルであるか否かが判断される（ステップＳ３２）。１ＲＷ−ＲＡＭ８３０がライトサイクルである場合（ステップＳ３２のＹｅｓルート）、プリキュー制御回路８６０により、プリキュー８５０の先頭パケットが読み出され、該当するＶＣの入力キュー８４０に登録され（ステップＳ３３）、処理が終了する。
【０１１９】
一方、ステップＳ３２において、１ＲＷ−ＲＡＭ８３０がライトサイクルではない（リードサイクルである）場合（ステップＳ３２のＮｏルート）、プリキュー制御回路８６０により、全ＶＣの入力キュー８４０の使用量が３未満であるか否かが判断される（ステップＳ３４）。全ＶＣの入力キュー８４０の使用量が３未満ではない場合（ステップＳ３４のＮｏルート）、プリキュー制御回路８６０により、プリキュー８５０の先頭パケットと同一ＶＣの入力キュー８４０の使用量が３以上であるか否かが判断される（ステップＳ３５）。プリキュー８５０の先頭パケットと同一ＶＣの入力キュー８４０の使用量が３以上ではない場合（ステップＳ３５のＮｏルート）、処理が終了する。
【０１２０】
なお、ステップＳ３４において、全ＶＣの入力キュー８４０の使用量が３未満である場合（ステップＳ３４のＹｅｓルート）、又は、ステップＳ３５において、プリキュー８５０の先頭パケットと同一ＶＣの入力キュー８４０の使用量が３以上である場合（ステップＳ３５のＹｅｓルート）、処理がステップＳ３３に移行する。
以上のように、一実施形態に係る情報処理システム１（クロスバ２０）によれば、送信バッファ７００内の送信パケット管理部７６０に最小限のプリキュー８５０がそなえられ、受信バッファ５００内にプリキュー８５０に対応したプリキュー状態予測回路６００がそなえられる。これにより、最短パケット長が１サイクルの場合でも、送信パケット管理部７６０は、入力ポートごとのＶＣ間で１ＲＷ−ＲＡＭ８３０を共用することが可能となり、１ＲＷ−ＲＡＭ８３０の増加による回路の配置面積や消費電力の増加を抑制できる。
【０１２１】
〔２〕変形例
上述した一実施形態では、プリキュー状態予測回路６００を受信バッファ５００内に１つ設ける例を示したが、これに限定されるものではなく、プリキュー状態予測回路６００は、宛先ポートごとに設けられてもよい。
図１８は、一実施形態の変形例に係る受信バッファ９００の構成を示す図である。
【０１２２】
図１８に示すように、一実施形態の変形例に係る受信バッファ９００は、受信バッファ５００と異なり、宛先ポート（送信バッファ７００）ごとに、プリキュー状態予測回路１０００をそなえる。なお、各プリキュー状態予測回路１０００（カレントＶＣ保持部１０１０、バスビジー判定部１０２０、及びプリキューカウンタ１０３０）の構成は、図１１に示す各構成と基本的に同様の機能を有するため、重複した説明は省略する。また、図の簡略化のため、ポートＸ，Ｙのプリキュー状態予測回路１０００の内部の図示を省略する。
【０１２３】
また、受信バッファ９００は、受信バッファ５００とは異なるアービタ９７０及びリードＳＴＭ９９０をそなえるとともに、ポート番号デコーダ１０４０をさらにそなえる。
リードＳＴＭ９９０は、パケット（ヘッド）及びＶＣ番号のほかに、宛先ポート番号をさらに出力する。
ポート番号デコーダ１０４０は、リードＳＴＭ９９０からヘッド及び宛先ポート番号を入力され、当該宛先ポート番号に対応するプリキュー状態予測回路１０００にヘッドを送出する。
【０１２４】
プリキュー状態予測回路１０００では、ポート番号デコーダ１０４０からヘッドを受け取った場合に、リードＳＴＭ９９０からのＶＣ番号に基づいて、プリキュー状態予測回路６００と同様の処理を行なう。
アービタ９７０は、プリキュー状態予測回路１０００から抑止指示が発行されると、当該抑止指示に該当する宛先ポートについてのみ、新たなパケット転送を抑止する。
【０１２５】
すなわち、一実施形態に係るプリキュー状態予測回路６００は、全送信バッファ７００でプリキュー８５０を共用していると仮定して使用量が最大値に達したと予測すると、他の送信バッファ７００へのパケットも含めて、全ての新たなパケット転送を抑止する。これに対し、一実施形態の変形例に係る受信バッファ９００は、プリキュー８５０の使用量が最大値に達したと予測された送信バッファ７００についてのみ、新たなパケット転送を抑止し、他の送信バッファ７００については、引き続きパケット転送を継続することができる。
【０１２６】
従って、一実施形態の変形例に係る受信バッファ９００によれば、一実施形態と同様の効果を奏することができるほか、クロスバ２０のスループットを向上させることができる。
〔３〕その他
以上、本発明の好ましい実施形態について詳述したが、本発明は、かかる特定の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲内において、種々の変形、変更して実施することができる。
【０１２７】
例えば、上述したクロスバ２０は、４個のポートをそなえ、受信バッファ５００（９００）及び送信バッファ７００は、それぞれ４個のＶＣをそなえるものとして説明したが、ポートやＶＣの数はこれらに限定されるものではなく、それぞれ任意の数とすることができる。同様に、出力キュー８１０、入力キュー８４０、及びプリキュー８５０の段数がそれぞれ４段であるものとして説明したが、各キューの段数もこれに限定されるものではなく、それぞれ任意の段数とすることができる。
【０１２８】
また、受信バッファ５００（９００）及び送信バッファ７００の各機能は、任意の組み合わせで統合又は分散してもよい。
さらに、図１６のステップＳ２２、Ｓ２４〜Ｓ２７、及びＳ２９の処理順序は、上述したものに限定されるものではなく、適宜順序を入れ替えてもよい。同様に、図１７のステップＳ３１、Ｓ３２、Ｓ３４、及びＳ３５の処理順序は、上述したものに限定されるものではなく、適宜順序を入れ替えてもよい。
【０１２９】
〔４〕付記
以上の実施形態及び変形例に関し、更に以下の付記を開示する。
（付記１）
データを送信する第１の装置と、前記第１の装置から入力されたデータを、前記第１の装置と前記データの送信先である第２の装置との間に設定された複数の転送路のうちのいずれかの転送路を介して出力するデータ転送装置と、前記データ転送装置から前記データを受信する前記第２の装置と、をそなえ、
前記データ転送装置は、
前記第１の装置から前記データを受信し格納する受信部と、
前記受信部から転送されたデータを格納し前記第２の装置に向けて送信する送信部と、を有し、
前記送信部は、
前記受信部から転送されたデータに関するデータ情報を、転送路ごとに保持する情報保持部と、
前記複数の転送路で共通に用いられる共通保持部と、
前記転送路ごとのデータ情報の入力状況に基づいて、前記情報保持部に入力されるデータ情報を、前記共通保持部を経由させてから前記情報保持部に入力する制御を行なう第１制御部と、を有し、
前記受信部は、
前記共通保持部が保持する情報量に応じて前記送信部への新たなデータ転送を抑止する抑止部を有する、
ことを特徴とする、情報処理装置。
【０１３０】
（付記２）
前記抑止部は、
前記受信部が新たに転送するデータの転送路の情報と直前に転送したデータの転送路の情報とに基づいて、前記共通保持部が保持する情報量を予測し、予測結果に応じて前記送信部への新たなデータ転送を抑止する、
ことを特徴とする、付記１記載の情報処理装置。
【０１３１】
（付記３）
前記抑止部は、
前記受信部が新たに転送するデータの転送路が前記受信部の直前の転送サイクルにおいて転送されたデータの転送路と異なる場合にカウントを行なうカウンタを有し、
カウント結果が前記共通保持部の記憶容量に関する所定の閾値に達した場合に、前記送信部への新たなデータ転送を抑止する、
ことを特徴とする、付記２記載の情報処理装置。
【０１３２】
（付記４）
前記カウンタは、
前記受信部が新たに転送するデータの直前の転送サイクルにおいてデータが転送されていない場合に、カウント結果を減少させる、
ことを特徴とする、付記３記載の情報処理装置。
【０１３３】
（付記５）
前記情報保持部は、
前記複数の転送路に対応して設けられる複数の入力保持部と、
前記複数の転送路で共通に用いられ、書き込みと読み出しとが交互に行なわれる記憶部と、
前記複数の転送路に対応して設けられ、前記情報保持部に入力されたデータ情報を転送路ごとに保持する複数の出力保持部と、を有し、
前記送信部は、さらに、
前記複数の出力保持部が保持する転送路ごとの情報量に基づいて、前記情報保持部に入力されたデータ情報を、前記入力保持部及び前記記憶部を経由させてから、対応する出力保持部に入力する制御を行なう第２制御部を有する、
ことを特徴とする、付記１〜４のいずれか１項記載の情報処理装置。
【０１３４】
（付記６）
前記第１制御部は、
前記転送路ごとのデータ情報の入力状況に基づいて、保持する情報量が所定量に達する入力保持部については、当該入力保持部に入力されるデータ情報を、前記共通保持部を経由させてから前記入力保持部に入力する制御を行なう、
ことを特徴とする、付記５記載の情報処理装置。
【０１３５】
（付記７）
前記複数の転送路は、各々が前記出力保持部及び前記入力保持部を有する複数の仮想チャネルである、
ことを特徴とする、付記５又は付記６記載の情報処理装置。
（付記８）
前記データ転送装置は、
前記第１の装置から送信されるデータの送信先となる装置ごとに前記送信部を有し、
前記受信部は、
複数の前記送信部の各々に対応して前記抑止部を有する、
ことを特徴とする、付記１〜７のいずれか１項記載の情報処理装置。
【０１３６】
（付記９）
入力されたデータを、前記データの送信元と送信先との間に設定された複数の転送路のうちのいずれかの転送路を介して出力するデータ転送装置であって、
前記送信元から前記データを受信し格納する受信部と、
前記受信部から転送されたデータを格納し前記送信先に向けて送信する送信部と、をそなえ、
前記送信部は、
前記受信部から転送されたデータに関するデータ情報を、転送路ごとに保持する情報保持部と、
前記複数の転送路で共通に用いられる共通保持部と、
前記転送路ごとのデータ情報の入力状況に基づいて、前記情報保持部に入力されるデータ情報を、前記共通保持部を経由させてから前記情報保持部に入力する制御を行なう第１制御部と、を有し、
前記受信部は、
前記共通保持部が保持する情報量に応じて前記送信部への新たなデータ転送を抑止する抑止部を有する、
ことを特徴とする、データ転送装置。
【０１３７】
（付記１０）
前記抑止部は、
前記受信部が新たに転送するデータの転送路の情報と直前に転送したデータの転送路の情報とに基づいて、前記共通保持部が保持する情報量を予測し、予測結果に応じて前記送信部への新たなデータ転送を抑止する、
ことを特徴とする、付記９記載のデータ転送装置。
【０１３８】
（付記１１）
前記抑止部は、
前記受信部が新たに転送するデータの転送路が前記受信部の直前の転送サイクルにおいて転送されたデータの転送路と異なる場合にカウントを行なうカウンタを有し、
カウント結果が前記共通保持部の記憶容量に関する所定の閾値に達した場合に、前記送信部への新たなデータ転送を抑止する、
ことを特徴とする、付記１０記載のデータ転送装置。
【０１３９】
（付記１２）
前記カウンタは、
前記受信部が新たに転送するデータの直前の転送サイクルにおいてデータが転送されていない場合に、カウント結果を減少させる、
ことを特徴とする、付記１１記載のデータ転送装置。
【０１４０】
（付記１３）
前記情報保持部は、
前記複数の転送路に対応して設けられる複数の入力保持部と、
前記複数の転送路で共通に用いられ、書き込みと読み出しとが交互に行なわれる記憶部と、
前記複数の転送路に対応して設けられ、前記情報保持部に入力されたデータ情報を転送路ごとに保持する複数の出力保持部と、を有し、
前記送信部は、さらに、
前記複数の出力保持部が保持する転送路ごとの情報量に基づいて、前記情報保持部に入力されたデータ情報を、前記入力保持部及び前記記憶部を経由させてから、対応する出力保持部に入力する制御を行なう第２制御部を有する、
ことを特徴とする、付記９〜１２のいずれか１項記載のデータ転送装置。
【０１４１】
（付記１４）
前記第１制御部は、
前記転送路ごとのデータ情報の入力状況に基づいて、保持する情報量が所定量に達する入力保持部については、当該入力保持部に入力されるデータ情報を、前記共通保持部を経由させてから前記入力保持部に入力する制御を行なう、
ことを特徴とする、付記１３記載のデータ転送装置。
【０１４２】
（付記１５）
前記送信元から送信されるデータの送信先ごとに前記送信部を有し、
前記受信部は、
複数の前記送信部の各々に対応して前記抑止部を有する、
ことを特徴とする、付記９〜１４のいずれか１項記載のデータ転送装置。
【０１４３】
（付記１６）
データを送信する第１の装置と、前記第１の装置から入力されたデータを、前記第１の装置と前記データの送信先である第２の装置との間に設定された複数の転送路のうちのいずれかの転送路を介して出力するデータ転送装置と、前記データ転送装置から前記データを受信する前記第２の装置と、をそなえ、前記データ転送装置が、前記第１の装置から前記データを受信して格納する受信部と、前記受信部から転送されたデータを格納し前記第２の装置に向けて送信する送信部と、を有する情報処理装置におけるデータ転送方法であって、
前記データ転送装置の前記送信部において、
前記受信部から転送されたデータに関するデータ情報を、転送路ごとに情報保持部に保持し、
前記転送路ごとのデータ情報の入力状況に基づいて、前記情報保持部に入力されるデータ情報を、前記複数の転送路で共通に用いられる共通保持部を経由させてから前記情報保持部に入力する制御を行ない、
前記受信部において、
前記共通保持部が保持する情報量に応じて前記送信部への新たなデータ転送を抑止する、
ことを特徴とする、データ転送方法。
【０１４４】
（付記１７）
前記受信部において、
前記受信部が新たに転送するデータの転送路の情報と直前に転送したデータの転送路の情報とに基づいて、前記共通保持部が保持する情報量を予測し、
予測結果に応じて前記送信部への新たなデータ転送を抑止する、
ことを特徴とする、付記１６記載のデータ転送方法。
【０１４５】
（付記１８）
前記受信部において、
前記受信部が新たに転送するデータの転送路が前記受信部の直前の転送サイクルにおいて転送されたデータの転送路と異なる場合にカウントを行ない、
カウント結果が前記共通保持部の記憶容量に関する所定の閾値に達した場合に、前記送信部への新たなデータ転送を抑止する、
ことを特徴とする、付記１７記載のデータ転送方法。
【０１４６】
（付記１９）
前記情報保持部は、
前記複数の転送路に対応して設けられる複数の入力保持部と、
前記複数の転送路で共通に用いられ、書き込みと読み出しとが交互に行なわれる記憶部と、
前記複数の転送路に対応して設けられ、前記情報保持部に入力されたデータ情報を転送路ごとに保持する複数の出力保持部と、を有し、
前記送信部において、
前記複数の出力保持部が保持する転送路ごとの情報量に基づいて、前記情報保持部に入力されたデータ情報を、前記入力保持部及び前記記憶部を経由させてから、対応する出力保持部に入力する制御を行なう、
ことを特徴とする、付記１６〜１８のいずれか１項記載のデータ転送方法。
【０１４７】
（付記２０）
前記送信部において、
前記転送路ごとのデータ情報の入力状況に基づいて、保持する情報量が所定量に達する入力保持部については、当該入力保持部に入力されるデータ情報を、前記共通保持部を経由させてから前記入力保持部に入力する制御を行なう、
ことを特徴とする、付記１９記載のデータ転送方法。
【符号の説明】
【０１４８】
１    情報処理システム
２，２０    クロスバ（データ転送装置）
２ａ    ポート
２ｂ    ルーティング部
３    システムボード
３ａ    ＣＰＵ
３ｂ    メモリ
３ｃ    システムコントローラ
４    Ｉ／Ｏボード
４ａ    カードスロット
４ｂ    ディスク
４ｃ    Ｉ／Ｏコントローラ
３０    送信バッファ
４０    受信バッファ
１００，５００，９００    受信バッファ（受信部）
１１０，５１０    受信データバッファ
１２０，５２０    ＲＴＡ
１３０，２３０，５３０，７３０    パケットデコーダ
１４０，２４０，５４０，７４０    ライトＳＴＭ
１５０，５５０    受信カウンタ
１５５，２５５    カウンタ
１６０，５６０    受信パケット管理部
１６５，２６５，３６５，４６５，７６５    キュー
１７０，２７０，５７０，７７０，９７０    アービタ
１８０，２８０，２９５，３２０，４２０，４３５，５８０，７８０，７９５，８２０，８３５，８４５    セレクタ
１９０，２９０，５９０，７９０，９９０    リードＳＴＭ
２００，７００    送信バッファ（送信部）
２１０，７１０    データバッファ
２２０，７２０    制御部
２５０，７５０    送信カウンタ
２６０，７６０    送信パケット管理部
３１０，４１０    出力キュー
３３０，４３０    １ＲＷ−ＲＡＭ
３４０，４４０    入力キュー
４６０    パケット管理部
６００，１０００    プリキュー状態予測回路
６１０，１０１０    カレントＶＣ保持部
６２０，１０２０    バスビジー判定部
６３０，１０３０    プリキューカウンタ
８００    情報保持部
８１０    出力キュー（出力保持部）
８３０    １ＲＷ−ＲＡＭ（記憶部）
８４０    入力キュー（入力保持部）
８５０    プリキュー（共通保持部）
８６０    プリキュー制御回路（第１制御部）
８７０    入出力キュー／ＲＡＭ制御回路（第２制御部）
１０４０    ポート番号デコーダ
【図１】
2015069345.tif 000003
【図２】
2015069345.tif 000004
【図３】
2015069345.tif 000005
【図４】
2015069345.tif 000006
【図５】
2015069345.tif 000007
【図６】
2015069345.tif 000008
【図７】
2015069345.tif 000009
【図８】
2015069345.tif 000010
【図９】
2015069345.tif 000011
【図１０】
2015069345.tif 000012
【図１１】
2015069345.tif 000013
【図１２】
2015069345.tif 000014
【図１３】
2015069345.tif 000015
【図１４】
2015069345.tif 000016
【図１５】
2015069345.tif 000017
【図１６】
2015069345.tif 000018
【図１７】
2015069345.tif 000019
【図１８】
2015069345.tif 000020