以下に、本願の開示するスイッチ装置、パケット制御方法及びデータ通信システムの実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示するスイッチ装置、パケット制御方法及びデータ通信システムが限定されるものではない。
図1は、実施例1に係るデータ通信システムのブロック図である。図1に示すように、本実施例に係るデータ通信システムは、PCIeを用いてデータ通信を行うシステムである。
PCIeを用いたデータ通信では、PCIe規格に準拠したプロトコルであるPCIeプロトコルを用いてデータの送受信を行う。PCIeプロトコルの通信では、パケット単位で通信が行われる。以下では、PCIeプロトコル通信に用いられるパケットをPCIeパケットという。PCIeを用いたデータ通信では、PCIeパケットとして、Postedパケット、Non−Postedパケット及びCompletionパケットという3つの種類のパケットを用いてデータ通信が行われる。
3種類のPCIeパケットの間には、以下のようなオーダリング制約がある。すなわち、Postedパケット及びCompeletionパケットは、Non−Postedパケットを追い越してもよい。また、Non−Postedパケットは、Postedパケット及びCompeletionパケットを追い越してはいけない。本実施例に係るデータ通信システムは、このオーダリング制約を遵守しつつデータの送受信を行う。
以下では、Postedパケットを「Pパケット」、Compeletionパケットを「Cパケット」、Non−Postedパケットを「NPパケット」と言う。さらに、PパケットとCパケットを区別せずに、1群のパケットとして扱う場合は、「P/Cパケット」という。また、3種類全てを区別しない場合は、単に「パケット」という。
本実施例に係るデータ通信システムは、例えば、PCIeデバイス1、スイッチ2、クロスバスイッチ3、スイッチ4、ルートコンプレックス5及びCPU(Central Processing Unit)6を有している。
PCIeデバイス1は、例えばハードディスクなどのPCIeの規格に準拠した装置である。PCIeデバイス1は、PCIeプロトコルを用いてデータの送受信を行う。ここでは、PCIeデバイス1をデータの送信を行う側の装置として説明するが、PCIeデバイス1は、データの受信側になることもできる。
PCIeデバイス1は、PCIeパケットをスイッチ2へ出力する。ここで、PCIeデバイス1は、Pパケット、Cパケット及びNPパケットを出力する。
スイッチ2は、溜込バッファ21、サイドバッファ22、調停部23、管理ID(Identification)生成部24及びヘッダ付加部25を有している。
溜込バッファ21は、Pパケット、Cパケット及びNPパケットの入力をPCIeデバイスから受ける。溜込バッファ21は、受信したパケットを蓄積していく。そして、溜込バッファ21は、保持しているパケットのうち調停部23から指示された順にパケットをヘッダ付加部25へ出力する。
サイドバッファ22は、溜込バッファ21へ入力されたパケットの宛先情報を取得する。そして、サイドバッファ22は、取得した宛先情報をパケットの識別情報とともに格納する。
サイドバッファ22は、溜込バッファ21から出力されたパケットの情報を調停部23から取得する。そして、サイドバッファ22は、溜込バッファ21から出力されたパケットの宛先情報を管理ID生成部24へ出力する。
調停部23は、溜込バッファ21に格納されているパケットに対して調停を行い、出力するパケットを順次決定する。そして、調停部23は、出力するパケットとして決定したパケットの情報を溜込バッファ21に通知し、パケットの出力を指示する。また、調停部23は、出力するパケットとして決定したパケットの情報をサイドバッファ22へ通知する。
管理ID生成部24は、パケットの宛先毎に管理IDの値を表すカウンタを有している。
管理ID生成部24は、パケットの宛先情報の入力をサイドバッファ22から受ける。管理ID生成部24は、宛先情報が新規の宛先を示す場合、受信した宛先情報に対応するカウンタを生成し初期値をセットする。言い換えれば、管理ID生成部24は、全ての宛先の初期値がセットされたカウンタを有しているともいえる。管理ID生成部24は、例えば本実施例では、カウンタの初期値を1とする。
そして、管理ID生成部24は、受信した宛先情報に対応するカウンタの値を読み取り、読み取った値を管理IDとしてヘッダ付加部25へ出力する。その後、管理ID生成部24は、受信した宛先情報に対応するカウンタの値を1つインクリメントする。管理ID生成部24は、パケットの宛先のカウンタのインクリメントにあたり、Pパケット、Cパケット及びNPパケットを区別しない。
図2は、管理ID生成部が保持する管理IDの遷移を説明するための図である。ここでは、宛先として、宛先AAA,宛先BBB及び宛先CCCが有る場合で説明する。図2では、各列が各タイミングにおいて管理ID生成部24が記憶している管理IDの状態を示している。そして、図2では、表の下に進むに従い時間が経過した状態を表している。
パケットを受信していない状態では、管理ID生成部24は、列101のように各宛先のカウンタに初期値1をセットされた状態を保持している。
次に、宛先AAAのパケットが溜込バッファ21から出力されると、管理ID生成部24は、宛先AAAの宛先情報の入力をサイドバッファ22から受ける。そして、管理ID生成部24は、宛先AAAのカウンタの値である「1」を管理IDとしてヘッダ付加部25へ出力する。その後、管理ID生成部24は、宛先AAAに対応するカウンタを1つインクリメントする。この場合、管理ID生成部24が保持するカウンタは、図2の列102のように宛先AAAに対応するカウンタの値が「2」となり、他のカウンタは「1」を維持している。
続いて、宛先AAAのパケットが溜込バッファ21から出力されると、管理ID生成部24は、宛先AAAの宛先情報の入力をサイドバッファ22から受ける。そして、管理ID生成部24は、宛先AAAのカウンタの値である「2」を管理IDとしてヘッダ付加部25へ出力する。その後、管理ID生成部24は、宛先AAAに対応するカウンタを1つインクリメントする。この場合、管理ID生成部24が保持するカウンタは、図2の列103のように宛先AAAに対応するカウンタの値が「3」となり、他のカウンタは「1」を維持している。
続いて、宛先BBBのパケットが溜込バッファ21から出力されると、管理ID生成部24は、宛先BBBの宛先情報の入力をサイドバッファ22から受ける。そして、管理ID生成部24は、宛先BBBのカウンタの値である「1」を管理IDとしてヘッダ付加部25へ出力する。その後、管理ID生成部24は、宛先BBBに対応するカウンタを1つインクリメントする。この場合、管理ID生成部24が保持するカウンタは、図2の列104のように、宛先AAAに対応するカウンタの値が「3」であり、宛先BBBに対応するカウンタの値が「2」であり、宛先CCCに対応するカウンタの値が「1」である。
このようにして、管理ID生成部24は、宛先毎のカウンタをインクリメントしていくことで管理IDを生成する。そして、管理ID生成部24は、ヘッダ付加部25へ出力するパケットの管理IDを通知する。
図1に戻って説明を続ける。ヘッダ付加部25は、出力するパケットを溜込バッファ21から受信する。さらに、ヘッダ付加部25は、管理IDを管理ID生成部24から取得する。そして、ヘッダ付加部25は、出力するパケットのヘッダに管理IDを付加する。さらに、ヘッダ付加部25は、パケットの宛先を表す情報及びパケットの発行元を表す情報をヘッダに付加する。ヘッダ付加部25は、パケットをカプセル化してPCIeプロトコルとは異なるプロトコルへ変更する。
図3は、管理IDタグが付加されたヘッダを表す図である。ヘッダ110は、スイッチ2が出力するパケットのヘッダを表している。ヘッダ110は、管理IDタグ111、パケット宛先112、パケット発行元113及びPCIeヘッダ114を有している。
管理IDタグは、ヘッダ付加部25により付加された管理IDの値を格納する領域である。例えば本実施例では、管理IDタグ111は4ビットである。また、パケット宛先112は、パケットの宛先の情報を格納する領域である。例えば本実施例では、パケット宛先112は、4ビットである。また、パケット発行元113は、パケットの発行元の情報を格納する領域である。例えば本実施例では、パケット発行元113は、4ビットである。PCIeヘッダ114は、従来のPCIeのヘッダである。
ここで、管理IDタグ111、パケット宛先112及びパケット発行元113のサイズは、ヘッダ110に乗せることが可能な大きさの上限内であれば、任意の値を取ることができる。そして、管理IDタグ111、パケット宛先112及びパケット発行元113のサイズを変更することで、管理可能なデバイスの数を変更することができる。
図1に戻って説明を続ける。ヘッダ付加部25は、ヘッダを付加したパケットをクロスバスイッチ3へ出力する。
クロスバスイッチ3は、PCIeプロトコルとは異なるプロトコルを用いてデータ転送を行う装置である。クロスバスイッチ3は、仮想チャネル(VC:Virtual Channel)31及び仮想チャネル32を有している。仮想チャネル31及び32は、FIFOバッファである。
仮想チャネル31は、P/Cパケットの伝送経路である。また、仮想チャネル32は、NPパケットの伝送経路である。
クロスバスイッチ3は、スイッチ2からパケットを受信する。そして、受信したパケットがP/Cパケットの場合、クロスバスイッチ3は、仮想チャネル31を経由させてパケットをスイッチ4へ転送する。また、受信したパケットがNPパケットの場合、クロスバスイッチ3は、仮想チャネル32を経由させてパケットをスイッチ4へ転送する。
クロスバスイッチ3は、PCIeプロトコルとは異なるプロトコルを用いる装置であるため、PCIeに準拠したオーダリング制約にしたがったデータ転送は行わない。そのため、仮想チャネル31を経由するP/Cパケットの停滞などにより、仮想チャネル32を経由するNPパケットがP/Cパケットを追い越してしまうことが考えられる。したがって、スイッチ4には、オーダリング制約に従っていない順序でパケットが入力される場合がある。
スイッチ4は、溜込バッファ41、サイドバッファ42、管理ID制御部43及び調停部44を有している。
溜込バッファ41は、仮想チャネル411及び412を有している。溜込バッファ41は、スイッチ4に入力されたパケットのうちP/Cパケットを仮想チャネル411に送り蓄積していく。また、溜込バッファ41は、スイッチ4に入力されたパケットのうちNPパケットを仮想チャネル412に送り蓄積していく。
そして、溜込バッファ41は、保持しているパケットのうち調停部44から指示された順にパケットをルートコンプレックス5へ出力する。
サイドバッファ42は、仮想チャネル411及び仮想チャネル412の先頭のパケットの管理IDを有している。例えば、サイドバッファ42は、仮想チャネル411に入力されるP/Cパケットの管理IDタグから管理IDを順次取得し、順番に記憶していく。同様に、サイドバッファ42は、仮想チャネル412に入力されるNPパケットの管理IDタグから管理IDを順次取得し、順番に記憶していく。そして、サイドバッファ42は、溜込バッファ41からパケットが出力された場合、仮想チャネル411又は412のいずれからパケットが出力されたかの情報を調停部44から受信する。そして、サイドバッファ42は、パケットを出力した側の記憶している管理IDの先頭の管理IDを削除する。このようにすることで、サイドバッファ42が記憶している管理IDの先頭の管理IDが、仮想チャネル411及び412に格納されているパケットの先頭パケットの管理IDとなる。
管理ID制御部43は、管理ID保持回路431及び管理ID比較回路432を有している。
管理ID保持回路431は、一つ前のパケットの管理IDを宛先毎に保持する。ここで、一つ前のパケットとは、溜込バッファ41から出力されたパケットの中で、現在の状態において一つ前にその宛先に対して出力されたパケットを指し、言い換えれば、その宛先に向けて出力された最新のパケットである。例えば、管理ID保持回路431は、保持する宛先毎の管理IDの初期値を「0」とする。そして、管理ID保持回路431は、溜込バッファ41から出力されたパケットの管理ID及び宛先情報を調停部44から取得する。そして、管理ID保持回路431は、調停部44から管理ID及び宛先情報を取得すると、取得した宛先に対する一つ前のパケットの管理IDとして、取得した管理IDを記憶する。ここで、本実施例では、管理ID保持回路431は、P/CパケットとNPパケットとを別にして、一つ前のパケットの管理IDを記憶している。すなわち、管理ID保持回路431は、ある宛先に対する一つ前のP/Cパケットの管理IDと、ある宛先に対する一つ前のNPパケットの管理IDとを別個に記憶している。この場合、さらに、管理ID保持回路431は、一つ前のP/Cパケットと一つ前のNPパケットのいずれを後に出力したかの情報を記憶している。そして、管理ID保持回路431は、管理ID比較回路432に対して、一つ前のP/Cパケットと一つ前のNPパケットのうちより後に出力されたパケットを一つ前のパケットとして出力する。
管理ID比較回路432は、NPパケットの出力が可能か否かの判定の依頼を調停部44から受ける。依頼を受けると、管理ID比較回路432は、仮想チャネル412に格納されている先頭のNPパケットの管理IDをサイドバッファ42から取得する。以下では、ここで管理ID比較回路432がサイドバッファ42から取得したNPパケットの管理IDを、「先頭のNPパケットの管理ID」という。また、管理ID比較回路432は、サイドバッファから取得したNPパケットと同じ宛先に対する一つ前のパケットの管理IDを管理ID保持回路431から取得する。
管理ID比較回路432は、先頭のNPパケットの管理IDの値が、管理ID保持回路431から取得した管理IDの値に1を加えた値以上か否かを判定する。
先頭のNPパケットの管理IDの値が、一つ前のパケットの管理IDの値に1を加えた値以上の場合、管理ID比較回路432は、NPパケットの出力可を調停部44に通知する。これに対して、先頭のNPパケットの管理IDの値が、一つ前のパケットの管理IDの値に1を加えた値より小さい場合、管理ID比較回路432は、NPパケットの出力不可を調停部44に通知する。
調停部44は、仮想チャネル412にNPパケットがあるか否かを判定する。NPパケットがない場合、調停部44は、仮想チャネル411にP/CパケットがあればP/Cパケットを溜込バッファ41から出力させる。そして、調停部44は、出力されたP/Cパケットの宛先情報及び管理IDを管理ID保持回路431へ通知する。これに対して、仮想チャネル411にP/Cパケットがなければ、調停部44は、パケットの到着まで待機する。
一方、NPパケットがある場合、調停部44は、NPパケットの出力が可能か否かの判定を管理ID比較回路432に依頼する。そして、調停部44は、判定結果を管理ID比較回路432から受信する。
判定結果が出力可の場合、調停部44は、NPパケットを溜込バッファ41から出力させる。そして、調停部44は、出力されたNPパケットの宛先情報及び管理IDを管理ID保持回路431へ通知する。
これに対して、判定結果が出力不可の場合、調停部44は、パケットの到着まで待機する。
調停部44は、以上に説明した出力するパケットの判定を繰り返す。
次に、図4を参照して、本実施例に係るデータ通信システムにおけるパケット送信の全体的な流れについて説明する。図4は、実施例1に係るデータ通信システムにおけるパケット送信の全体的な流れについて説明するための図である。ここでは、PCIeデバイス1から1つの宛先に対してパケットが送られた場合で説明する。
状態201は、PCIeデバイス1から発行されたパケットの状態を表している。ここで、パケット301及び302の上の段に記載されている記号はパケットの種類を表している。また、パケット301及び302の下の段の下部に記載されている記号は発行元のIDを表している。PCIeデバイス1から発行された状態では、P/Cパケットであるパケット301が先頭で、NPパケットであるパケット302が次に並んでいる。
状態202は、スイッチ2から出力されるパケットの状態を表している。スイッチ2では、ヘッダ付加部25により各パケットに順番に管理IDが振られる。パケット301及び302の下の段の上部の番号が各パケットに振られた管理IDを表している。ここでは、最初のパケットであるパケット301に管理IDとして「1」が振られ、次のパケットであるパケット302に管理IDとして「2」が振られている。
状態203は、クロスバスイッチ3の仮想チャネル31を経由しているパケットの状態を表している。また、状態204は、クロスバスイッチ3の仮想チャネル32を経由しているパケットの状態を表している。仮想チャネル31にはP/Cパケットであるパケット301が通過する。また、仮想チャネル32にはNPパケットであるパケット302が通過する。
状態205は、スイッチ4の溜込バッファ41の仮想チャネル411に蓄積されているパケットの状態を表している。また、状態206は、スイッチ4の溜込バッファ41の仮想チャネル412に蓄積されているパケットの状態を表している。仮想チャネル411は、P/Cパケットであるパケット301を蓄積する。また、仮想チャネル412は、NPパケットであるパケット302を蓄積する。
ここで、クロスバスイッチ3の仮想チャネル31及び仮想チャネル32の状態により、パケット302がパケット301を追い越し、先にパケット302が仮想チャネル412に格納され、その後、パケット301が仮想チャネル411に格納されたものとする。
ここで、図5を参照して、図5の状態205及び206の状態になったスイッチ4におけるパケットの出力について説明する。図5は、先頭パケットの管理ID及び管理ID保持回路が有する管理IDを用いたパケットの出力を説明するための図である。図5は、ある宛先に対応する管理IDの遷移を示している。実際には、管理ID保持回路431は、図5のような管理IDの保持を宛先毎に行っており、管理ID比較回路432は、宛先毎にNPパケットの出力可否の判定を行っている。図5における各列が各タイミングにおいて管理ID保持回路431が保持している管理IDの値及び先頭のNPパケットの管理IDを示している。そして、図5では、表の下に進むに従い時間が経過した状態を表している。また、図5のP/Cパケットは、その時点で管理ID保持回路431が保持している一つ前のP/Cパケットの管理IDである。また、図5のNPパケットは、その時点で管理ID保持回路431が保持している一つ前のNPパケットの管理IDである。そして、図5の先頭のNPパケット番号は、その時点でサイドバッファ42が保持している先頭のNPパケットの管理IDである。
パケットを出力していない状態では、管理ID保持回路431は、列121のようにP/Cパケット及びNPパケットともに管理IDとして初期値である0を保持している。ただし、管理IDが2のNPパケットであるパケット302が仮想チャネル412に格納されているので、サイドバッファ42に格納されている先頭NPパケット番号は2である。そこで、管理ID比較回路432は、一つ前に出力されたパケットの管理IDである0に1を加えた値と、先頭のNPパケットの管理IDである2とを比較する。この場合、先頭のNPパケットの管理IDの方が小さいので、管理ID比較回路432は、NPパケットであるパケット302は出力不可と判定する。
次に、管理IDが1のP/Cパケットであるパケット301が仮想チャネル411に格納されると、調停部44は、管理IDが1のP/Cパケットであるパケット301を溜込バッファ41から出力させる。管理ID保持回路431は、出力されたパケット301の管理IDとして「1」を調停部44から受信し記憶する。この場合、列122のように、一つ前のパケットは、管理IDが1のP/Cパケットであるパケット301である。そこで、管理ID比較回路432は、一つ前のパケットの管理IDである「1」を管理ID保持回路431から取得する。次に、管理ID比較回路432は、一つ前のパケットの管理IDである1に1を加えた値と、先頭のNPパケットの管理IDである2とを比較する。この場合、先頭のNPパケットの管理IDは一つ前のパケットの管理IDである1に1を加えた値以上なので、管理ID比較回路432は、NPパケットであるパケット302は出力可と判定する。
出力可の判定を受けて、調停部44は、パケット302を溜込バッファ41から出力させる。管理ID保持回路431は、出力されたNPパケットの管理IDとして「2」を調停部44から受信し記憶する。この場合、列123のように、一つ前のパケットは、管理IDが2のパケット302である。そこで、次に、管理ID比較回路432は、一つ前のパケットの管理IDである「2」を管理ID保持回路431から取得する。このようにして、管理ID比較回路432は、NPパケットの出力可否の判定を行っている。
このようなパケット出力処理を行うことで、スイッチ4は、ルートコンプレックス5に対して、図4の状態207のように、最初にパケット301が出力し、次にパケット302を出力する。このように、分割された仮想チャネル上でNPパケットがP/Cパケットを追い越した場合にも、本実施例に係るデータ通信システムによれば、追い越したNPパケットを追い越されたPパケットの後に配置することができる。これにより、本実施例に係るデータ通信システムは、PCIeのオーダリング制約を遵守してデータ通信を行うことができる。
次に、図6を参照して、パケットの出力のタイミングについて説明する。図6は、出力のタイミングを説明するためのタイミングチャートである。図6の横軸は、時間の経過を表している。
グラフ401は、管理ID保持回路431が有するP/Cパケットの管理IDを表している。また、グラフ402は、管理ID保持回路431が有するNPパケットの管理IDを表している。また、グラフ403は、サイドバッファ42に格納されている先頭のNPパケットの管理IDを表している。また、グラフ404は、管理ID比較回路432によるNP出力判定の判定結果の出力を表している。グラフ404において、出力がHighの場合にNPパケットの出力可であり、出力がLowの場合にNPパケットの出力不可である。また、グラフ405は、スイッチ4からルートコンプレックス5へのP/Cパケットの出力を表している。グラフ405において、出力がHighのときにP/Cパケットが出力される。また、グラフ406は、スイッチ4からルートコンプレックス5へのNPパケットの出力を表している。グラフ406において、出力がHighのときにNPパケットが出力される。
パケットが出力される以前には、グラフ401及び402に示すように、管理ID保持回路431は、P/Cパケット及びNPパケットの管理IDともに初期値である0を保持している。
そして、仮想チャネル412に管理IDが「1」のNPパケットが到着する。そこで、サイドバッファ42には、仮想チャネル412に格納されたNPパケットの管理IDである「1」が格納される(ステップS1)。
サイドバッファ42に管理IDとして「1」が格納されると、管理ID比較回路432は、先頭のNPパケットの管理IDとして「1」を取得する。また、管理ID比較回路432は、一つ前のパケットの管理IDとして「0」を管理ID保持回路431から取得する。先頭のNPパケットの管理IDの「1」は、一つ前のパケットの管理IDとして「0」に1を加えた値以上であるので、管理ID比較回路432は、NPパケットの出力可の信号を出力する(ステップS2)。
NPパケットの出力可の信号を受けて、調停部44は、調停を行い、NPパケットを溜込バッファ41の仮想チャネル412から出力させる(ステップS3)。
NPパケットの出力を受けて、管理ID保持回路431は、NPパケットの管理IDとして、出力されたNPパケットの管理IDである「1」を取得する(ステップS4)。
また、仮想チャネル412の先頭のNPパケットが出力されたので、次のNPパケットが先頭のNPパケットとなる。ここでは、管理IDが「3」のNPパケットが、仮想チャネル412の先頭のNPパケットになったとする。これを受けて、サイドバッファ42は、先頭のNPパケットの管理IDとして「3」を取得する(ステップS5)。
この時、管理ID比較回路432は、先頭のNPパケットの管理IDである「3」と一つ前のパケットの管理IDである「1」に1を加えた値を比べる。この場合、先頭のNPパケットの管理IDである「3」は、一つ前のパケットの管理IDである「1」に1を加えた値よりも大きいので、管理ID比較回路432は、NPパケットの出力不可の信号を出力する(ステップS6)。
その後、仮想チャネル411に管理IDが「2」であるP/Cパケットが到着する。これをうけて、調停部44は、調停を行い、P/Cパケットを溜込バッファ41の仮想チャネル411から出力させる(ステップS7)。
NPパケットの出力を受けて、管理ID保持回路431は、P/Cパケットの管理IDとして、出力されたP/Cパケットの管理IDである「2」を取得する(ステップS8)。
管理ID保持回路431が出力されたP/Cパケットの管理IDである「2」を取得すると、管理ID比較回路432は、一つ前のパケットの管理IDとして「2」を取得する。また、管理ID比較回路432は、先頭のNPパケットの管理IDとして「3」を取得する。先頭のNPパケットの管理IDの「3」は、ひとつ前のパケットの管理IDとして「2」に1を加えた値以上であるので、管理ID比較回路432は、NPパケットの出力可の信号を出力する(ステップS9)。
NPパケットの出力可の信号を受けて、調停部44は、調停を行い、NPパケットを溜込バッファ41の仮想チャネル412から出力させる(ステップS10)。
NPパケットの出力を受けて、管理ID保持回路431は、NPパケットの管理IDとして、出力されたNPパケットの管理IDである「3」を取得する(ステップS11)。
このとき、仮想チャネル412に蓄積されているNPパケットがなくなったとする。その場合、サイドバッファ42が保持するNPパケットの管理IDが消去される(ステップS12)。
サイドバッファ42が保持するNPパケットの管理IDが消去されると、管理ID比較回路432は、NPパケットの出力不可の信号を出力する(ステップS13)。
以上のように、NPパケットの出力条件を満たさない期間Tでは、NPパケットが溜込バッファ41に存在していても、スイッチ4は、NPパケットを出力しない。これにより、スイッチ4は、オーダリング制約を遵守することができる。
次に、図7を参照して、本実施例に係るデータ通信システムにおけるパケットの出力制御の全体像について説明する。図7は、実施例1に係るデータ通信システムにおけるパケットの流れを説明するための図である。図7の縦軸は上部に記載した各装置におけるパケットの送受信のタイミングを表している。図7の縦軸は下に向かうに従い時間が経過している。図7の一点鎖線501は、P/Cパケットの送受信を表しており、図7の実線502は、NPパケットの送受信を表している。
PCIeデバイス1は、先にP/Cパケットを送信し、次に、NPパケットを送信する。
スイッチ2は、PCIeデバイス1が出力したパケットを受信する。そして、スイッチ2は、調停を行い、オーダリング制約を遵守して、先にP/Cパケットを送信し、次に、NPパケットを送信する。
クロスバスイッチ3は、スイッチ2が出力したパケットを受信する。そして、クロスバスイッチ3は、出力できるパケットから順に出力する。ここでは、P/Cパケットの出力が停滞したため、クロスバスイッチ3は、NPパケットを先に出力し、次にP/Cパケットを出力する。そのため、クロスバスイッチ3では、追い越してはいけないP/CパケットをNPパケットが追い越してしまい、オーダリング制約が守られない。
スイッチ4は、クロスバスイッチ3から出力されたNPパケットを先に受信し、次に、P/Cパケットを受信する。そして、スイッチ4は、NPパケットの出力判定を行い、本来先に出力されるはずのP/Cパケットをまず出力する。その後、スイッチ4は、NPパケットを出力する。
これにより、ルートコンプレックス5は、P/Cパケットを先に受信し、その後、NPパケットを受信する。すなわち、ルートコンプレックス5は、オーダリング制約を遵守した順番でPCIeデバイス1が出力したPCIeパケットを受信することができる。
ここで、以上の説明では、PCIeデバイス1がPCIeパケットをルートコンプレックス5へ送信する場合で説明したが、PCIeパケットは、ルートコンプレックス5からPCIeデバイスへ送信される場合もある。その場合、スイッチ4とスイッチ2との役割が入れ替わる。すなわち、スイッチ4はスイッチ2の機能も有しており、スイッチ2はスイッチ4の機能も有している。
次に、図8を参照して、送信側スイッチにおけるパケットの送信について説明する。ここで、送信側スイッチとは、PCIeデバイス1及びルートコンプレックス5の中でパケットを送信する側の装置に直接繋がるスイッチであり、例えば、図1ではスイッチ2に対応する。図8は、送信側スイッチにおけるPCIeパケットの送受信のフローチャートである。
スイッチ2は、自装置がPCIeデバイス1からのパケットの受信待ち状態か否かを判定する(ステップS101)。パケットの受信待ち状態でない場合(ステップS101:否定)、スイッチ2は、自装置がパケットの受信待ち状態になるまで待機する。
これに対して、パケットの受信待ち状態の場合(ステップS101:肯定)、スイッチ2は、PCIeデバイス1からのパケットを受信し(ステップS102)、溜込バッファ21へ蓄積する。
次に、調停部23は、溜込バッファ21に蓄積されているパケットに対して調停を行い、オーダリング制約にしたがってパケットを溜込バッファ21からヘッダ付加部25へ出力させる(ステップS103)。
管理ID生成部24は、溜込バッファ21から出力されたパケットの宛先をサイドバッファ22から受信する。そして、管理ID生成部24は、受信したパケットの宛先に対応するカウンタの値を管理IDとしてヘッダ付加部25へ出力する。ヘッダ付加部25は、管理ID生成部24から取得した宛先毎の管理IDを、溜込バッファ21から出力されたパケットのヘッダに付加する(ステップS104)。
管理ID生成部24は、出力したパケットの宛先に対応するカウンタの値を1つインクリメントする(ステップS105)。
その後、調停部23は、システムのリセットが行われたか否かを判定する(ステップS106)。システムのリセットが行われていない場合(ステップS106:否定)、調停部23は、ステップS101へ戻る。これに対して、システムのリセットが行われた場合(ステップS106:肯定)、送信側スイッチは、パケット出力の処理を終了する。
次に、図9を参照して、受信側スイッチにおけるパケットの出力について説明する。ここで、受信側スイッチとは、PCIeデバイス1及びルートコンプレックス5の中でパケットを受信する側の装置に直接繋がるスイッチであり、例えば、図1ではスイッチ4に対応する。図9は、受信側スイッチにおけるパケットの出力のフローチャートである。
調停部44は、NPパケットが溜込バッファ41に存在するか否かを判定する(ステップS201)。NPパケットが存在しない場合(ステップS201:否定)、調停部44は、P/Cパケットが溜込バッファ41に存在し、且つ、P/Cパケットの出力先のバッファに空きがあるか否かを判定する(ステップS202)。ここで、出力先のバッファとは、例えば、スイッチ4が受信側スイッチの場合、ルートコンプレックス5のバッファを指す。
P/Cパケットが存在しない又は出力先のバッファに空きがない場合(ステップS202:否定)、調停部44は、ステップS201へ戻る。
これに対して、P/Cパケットが存在し、且つ、出力先のバッファに空きがある場合(ステップS202:肯定)、調停部44は、仮想チャネル411の先頭のP/Cパケットを溜込バッファ41から出力させる(ステップS203)。
そして、調停部44は、出力されたP/Cパケットの宛先及び管理IDの情報を管理ID制御部43の管理ID保持回路431へ通知する。管理ID保持回路431は、出力されたP/Cパケットの宛先に対応するP/Cパケットの管理IDを出力されたP/Cパケットの管理IDに更新する(ステップS204)。その後、調停部44は、ステップS201へ戻る。
一方、NPパケットが存在する場合(ステップS201:肯定)、調停部44は、NPパケットの出力の可否の判定を管理ID比較回路432へ依頼する。管理ID比較回路432は、先頭のNPパケットの管理IDが出力条件を満たしているか否かを判定する(ステップS205)。具体的には、管理ID比較回路432は、サイドバッファ42が保持する先頭のNPパケットの管理IDの値と、一つ前のパケットの管理IDに1を加えた値とを比較し、先頭のNPパケットの管理IDの方が小さいか否かを判定する。
先頭のNPパケットの管理IDが出力条件を満たしていない場合(ステップS205:否定)、調停部44は、P/Cパケットが溜込バッファ41に存在し、且つ、P/Cパケットの出力先のバッファに空きがあるか否かを判定する(ステップS206)。P/Cパケットが存在しない又は出力先のバッファに空きがない場合(ステップS206:否定)、調停部44は、P/Cパケットが存在し、且つ、出力先のバッファに空きができるまで待機する。
これに対して、P/Cパケットが存在し、且つ、出力先のバッファに空きがある場合(ステップS206:肯定)、調停部44は、仮想チャネル411の先頭のP/Cパケットを溜込バッファ41から出力させる(ステップS207)。
そして、調停部44は、出力されたP/Cパケットの宛先及び管理IDの情報を管理ID制御部43の管理ID保持回路431へ通知する。管理ID保持回路431は、出力されたP/Cパケットの宛先に対応するP/Cパケットの管理IDを出力されたP/Cパケットの管理IDに更新する(ステップS208)。その後、調停部44は、ステップS201へ戻る。
一方、先頭のNPパケットの管理IDが出力条件を満たしている場合(ステップS205:肯定)、調停部44は、NPパケットの出力先のバッファに空きがあるか否かを判定する(ステップS209)。出力先のバッファに空きがない場合(ステップS209:否定)、調停部44は、P/Cパケットが溜込バッファ41に存在し、且つ、P/Cパケットの出力先のバッファに空きがあるか否かを判定する(ステップS210)。P/Cパケットが存在しない又は出力先のバッファに空きがない場合(ステップS210:否定)、調停部44は、ステップS209へ戻る。
これに対して、P/Cパケットの出力先のバッファに空きがある場合(ステップS210:肯定)、調停部44は、仮想チャネル411の先頭のP/Cパケットを溜込バッファ41から出力させる(ステップS211)。
そして、調停部44は、出力されたP/Cパケットの宛先及び管理IDの情報を管理ID制御部43の管理ID保持回路431へ通知する。管理ID保持回路431は、出力されたP/Cパケットの宛先に対応するP/Cパケットの管理IDを、出力されたP/Cパケットの管理IDに更新する(ステップS212)。
一方、NPパケットの出力先のバッファに空きがある場合(ステップS209:肯定)、調停部44は、仮想チャネル412の先頭のNPパケットを溜込バッファ41から出力させる(ステップS213)。
そして、調停部44は、出力されたNPパケットの宛先及び管理IDの情報を管理ID制御部43の管理ID保持回路431へ通知する。管理ID保持回路431は、出力されたNPパケットの宛先に対応するNPパケットの管理IDを、出力されたNPパケットの管理IDに更新する(ステップS214)。
その後、調停部44は、システムのリセットが行われたか否かを判定する(ステップS215)。システムのリセットが行われていない場合(ステップS215:否定)、調停部44は、ステップS201へ戻る。これに対して、システムのリセットが行われた場合(ステップS215:肯定)、受信側スイッチは、パケット出力の処理を終了する。
以上に説明したように、本実施例に係るデータ通信システムでは、送信側スイッチは、宛先毎に連番となる管理IDをPCIeパケットのヘッダに付加する。そして、PCIeパケットは、送信側スイッチと受信側スイッチとの間の複数の伝送経路によって転送される。これにより、本実施例に係るデータ通信システムでは、デッドロックの発生を軽減しつつPCIeパケットの転送を行うことができる。
さらに、受信側スイッチは、NPパケットの管理IDが一つ前のパケットの管理IDに1を加えた値以下の場合に宛先に対してNPパケットを出力する。これにより、本実施例に係るデータ通信システムでは、PCIeパケットの転送中にPCIeパケットのオーダリング制約の違反が発生した場合でも、宛先に対しては、オーダリング制約を遵守した状態でPCIeパケットを送信することができる。
図10は、実施例2に係るデータ通信システムのブロック図である。本実施例に係るデータ通信システムは、PCIeパケットを送信する側であるPCIeデバイスが複数になっていることが実施例1と異なる。以下では、実施例1と同様の機能を有する各部については、説明を省略する。
本実施例に係るデータ通信システムは、PCIeデバイス11及び12を備える。PCIeデバイス11及び12は、いずれもPCIeの規格に準拠した装置である。PCIeデバイス11及び12は、PCIeプロトコルを用いてデータの送受信を行う。
スイッチ2は、溜込バッファ21A及び21Bという2つのバッファを有している。
溜込バッファ21Aは、PCIeデバイス11から出力されるパケットを受信し、蓄積する。そして、溜込バッファ21Aは、調停部23からの指示を受けて、指示された順にパケットを出力する。
溜込バッファ21Bは、PCIeデバイス12から出力されるパケットを受信し、蓄積する。そして、溜込バッファ21Bは、調停部23からの指示を受けて、指示された順にパケットを出力する。
サイドバッファ22は、溜込バッファ21A及び21Bが受信した各パケットの発行元及び宛先を、各パケットの識別情報に対応させて記憶している。そして、サイドバッファ22は、溜込バッファ21A又は21Bから出力されたパケットの識別情報を調停部23から受信すると、受信した識別情報を有するパケットの発行元及び宛先の情報を管理ID生成部24へ出力する。
管理ID生成部24は、パケットの発行元と宛先の組合せ毎にカウンタを有している。例えば、AAA,BBB及びCCCという3つの宛先がある場合、管理ID生成部24は、PCIeデバイス11及びAAA、PCIeデバイス11及びBBB、並びに、PCIeデバイス11及びCCCカウンタを有している。さらに、管理ID生成部24は、PCIeデバイス12及びAAA、PCIeデバイス12及びBBB、並びに、PCIeデバイス12及びCCCカウンタを有している。
管理ID生成部24は、溜込バッファから出力されたパケットの発行元及び宛先の情報をサイドバッファ22から取得する。そして、管理ID生成部24は、取得した発行元と宛先との組合せに対応するカウンタの値を管理IDとしてヘッダ付加部25へ出力する。その後、管理ID生成部24は、発行元と宛先の組合せに対応するカウンタの値を1つインクリメントする。
ヘッダ付加部25は、溜込バッファ21A及び21Bからパケットを受信する。そして、ヘッダ付加部25は、受信したパケットのヘッダに管理ID生成部24から取得した管理IDの情報を付加する。さらに、ヘッダ付加部25は、受信したパケットのヘッダに発行元の情報及び宛先の情報を付加する。
スイッチ4の溜込バッファ41は、P/Cパケットを仮想チャネル411に蓄積し、NPパケットを仮想チャネル412に蓄積する。この時、溜込バッファ41は、発行元を区別せずに各パケットを蓄積していく。
サイドバッファ42は、仮想チャネル412が受信した各NPパケットのヘッダから宛先、発行元及び管理IDを取得し、各NPパケットの識別情報に対応させて蓄積していく。そして、サイドバッファ42は、仮想チャネル412の先頭のNPパケット出力の通知を調停部44から受けると、先頭のNPパケットの情報を削除する。
管理ID保持回路431は、溜込バッファ41から出力されたパケットの管理IDの情報を発行元及び宛先の情報とともに調停部44から受ける。そして、管理ID保持回路431は、パケットの発信元と宛先との組合せ毎に一つ前のパケットの管理IDを保持する。
管理ID比較回路432は、NPパケットの出力可否の判定依頼を調停部44から受ける。そして、管理ID比較回路432は、サイドバッファ42から先頭のNPパケットの発行元、宛先及び管理IDの情報を取得する。さらに、管理ID比較回路432は、先頭のNPパケットの発行元と宛先との組合せに対応する一つ前のパケットの管理IDの情報を管理ID保持回路431から取得する。そして、管理ID比較回路432は、先頭のNPパケットの管理IDと、管理ID保持回路431から取得した管理IDに1を加えた値を比較する。
管理ID比較回路432は、先頭のNPパケットの管理IDが管理ID保持回路431から取得した管理IDに1を加えた値以上であれば、先頭のNPパケットが出力可であると判定する。これに対して、管理ID比較回路432は、先頭のNPパケットの管理IDが管理ID保持回路431から取得した管理IDに1を加えた値未満であれば、先頭のNPパケットが出力不可であると判定する。そして、管理ID比較回路432は、判定結果を調停部44へ出力する。
調停部44は、仮想チャネル412にNPパケットがあれば、先頭のNPパケットの出力の可否判定を管理ID比較回路432へ依頼する。そして、管理ID比較回路432により出力可と判定された場合、調停部44は、NPパケットを溜込バッファ41から出力させる。
これに対して、管理ID比較回路432により出力不可と判定された場合、調停部44は、P/Cパケットが仮想チャネル411にあればP/Cパケットを溜込バッファ41から出力させる。P/Cパケットが仮想チャネル411になければ、調停部44は、P/Cパケットが仮想チャネル411に蓄積されるまで待機する。
次に、図11を参照して、本実施例に係るデータ通信システムにおけるパケット送信の全体的な流れについて説明する。図11は、実施例2に係るデータ通信システムにおけるパケット送信の全体的な流れについて説明するための図である。ここでは、PCIeデバイス11及び12から1つの宛先に対してパケットが送られた場合で説明する。図11では、PCIeデバイス11を表す発行元の情報を「A1」とし、PCIeデバイス12を表す発行元の情報を「A2」としている。
状態601は、PCIeデバイス11から発行されたパケットの状態を表している。状態602は、PCIeデバイス12から発行されたパケットの状態を表している。枠で囲われたものが各パケットを表している。ここで、パケット701〜703及び801〜803の上の段に記載されている記号はパケットの種類を表している。また、パケット701〜703及び801〜803の下の段の下部に記載されている記号は発行元のIDを表している。PCIeデバイス11から発行された状態601では、NPパケットであるパケット701が先頭で、P/Cパケットであるパケット702が次に並び、最後に、P/Cパケットであるパケット703が並んでいる。また、PCIeデバイス12から発行された状態602では、P/Cパケットであるパケット801が先頭で、P/Cパケットであるパケット802が次に並び、最後に、NPパケットであるパケット803が並んでいる。パケット701〜703には、発行元としてPCIeデバイス11を表す「A1」が付加されている。また、パケット801〜803には、発行元としてPCIeデバイス12を表す「A2」の情報が付加されている。
さらに、図11では、パケットを示す枠の上に各パケットが発行された順番を示している。ここでは、パケット701,801,802,702,703,803の順番でパケットが発行されている。
状態603は、スイッチ2から出力されるパケットの状態を表している。スイッチ2では、ヘッダ付加部25により各パケットに順番に管理IDが振られる。パケット701〜703及び801〜803の下の段の上部の番号が各パケットに振られた管理IDを表している。ここでは、PCIeデバイス11の最初のパケットであるパケット701に管理IDとして「1」が振られ、次のパケットであるパケット702に管理IDとして「2」が振られ、次のパケットであるパケット703に管理IDとして「3」が振られている。また、PCIeデバイス12の最初のパケットであるパケット801に管理IDとして「1」が振られ、次のパケットであるパケット802に管理IDとして「2」が振られ、次のパケットであるパケット803に管理IDとして「3」が振られている。
状態604は、クロスバスイッチ3の仮想チャネル31を経由しているパケットの状態を表している。また、状態605は、クロスバスイッチ3の仮想チャネル32を経由しているパケットの状態を表している。仮想チャネル31にはP/Cパケットであるパケット702,703,801及び802が通過する。また、仮想チャネル32にはNPパケットであるパケット701及び803が通過する。
状態606は、スイッチ4の溜込バッファ41の仮想チャネル411に蓄積されているパケットの状態を表している。また、状態607は、スイッチ4の溜込バッファ41の仮想チャネル412に蓄積されているパケットの状態を表している。仮想チャネル411は、P/Cパケットであるパケット801,702,703及び802を蓄積する。また、仮想チャネル412は、NPパケットであるパケット701及び803を蓄積する。
ここで、クロスバスイッチ3の仮想チャネル31及び仮想チャネル32の状態により、PCIeデバイス11及び12で各パケットが発行された順番とは異なった順番で、パケット701〜703及び801〜803がスイッチ4へ到着している。すなわち、パケット701〜703及び801〜803は、パケット801,702,701,703,803,802の順番でスイッチ4に到着している。
パケット801は、パケット701を追い越してスイッチ4に最初に到着している。パケット801はP/Cパケットであるので、調停部44は、パケット801を出力することができる。そこで、調停部44は、パケット801を溜込バッファ41から出力させる。
次に、パケット702がスイッチ4に到着する。パケット702はP/Cパケットであるので、調停部44は、パケット702を出力することができる。そこで、調停部44は、パケット702を溜込バッファ41から出力させる。ここで、パケット702は、パケット701を追い越してスイッチ4に到着しているが、Postedパケット及びCompletionパケットはNon−Postedパケットを追い越してよいというオーダリング制約の下に出力されている。
次に、パケット701がスイッチ4に到着する。パケット701はNPパケットであるので、調停部44は、管理ID比較回路432にNPパケットの出力可否の判定を依頼する。この場合、パケット701の管理IDは「1」である。そして、PCIeデバイス11が発行したパケットとして、パケット702が溜込バッファ41から出力されているので、PCIeデバイス11を発行元とするパケットにおいて一つ前のパケットの管理IDは「2」となる。この場合、先頭のNPパケットの管理IDは「1」であり、管理ID保持回路431から取得した管理IDに1を加えた値以下であるので、管理ID比較回路432は、先頭のNPパケットが出力可であると判定する。これを受けて、調停部44は、パケット702を溜込バッファ41から出力させる。
次に、パケット703がスイッチ4に到着する。パケット703はP/Cパケットであるので、調停部44は、パケット703を出力することができる。そこで、調停部44は、パケット702を溜込バッファ41から出力させる。
次に、パケット803がパケット802を追い越してスイッチ4に到着する。パケット803はNPパケットであるので、調停部44は、管理ID比較回路432にNPパケットの出力可否の判定を依頼する。この場合、パケット803の管理IDは「3」である。そして、PCIeデバイス12が発行したパケットとして、パケット801が溜込バッファ41から出力されているので、PCIeデバイス12を発行元とするパケットにおいて一つ前のパケットの管理IDは「1」となる。この場合、先頭のNPパケットの管理IDは「3」であり、管理ID保持回路431から取得した管理IDに1を加えた値より大きいので、管理ID比較回路432は、先頭のNPパケットが出力不可であると判定する。これを受けて、調停部44は、パケット803を溜込バッファ41から出力させずに、次のP/Cパケットの到着を待つ。これは、パケット803は、Non−PosetdパケットはPostedパケット及びCompletionパケットを追い越してはいけないというオーダリング制約の下出力できないためである。
次に、パケット802がスイッチ4に到着する。パケット802はP/Cパケットであるので、調停部44は、パケット802を出力することができる。そこで、調停部44は、パケット802を溜込バッファ41から出力させる。
その後、仮想バッファ412にパケット803が存在するので、調停部44は、管理ID比較回路432にNPパケットの出力可否の判定を再度依頼する。この場合、パケット803の管理IDは「3」である。そして、PCIeデバイス12が発行したパケットとして、パケット802が溜込バッファ41から出力されているので、PCIeデバイス12を発行元とするパケットにおいて一つ前のパケットの管理IDは「2」となる。この場合、先頭のNPパケットの管理IDは「3」であり、管理ID保持回路431から取得した管理IDに1を加えた値以下であるので、管理ID比較回路432は、先頭のNPパケットが出力可であると判定する。これを受けて、調停部44は、パケット803を溜込バッファ41から出力させる。
以上のような処理により、スイッチ4は、状態608で示される順番でパケット701〜703及び801〜803を出力する。このとき、状態608は、PCIeデバイス11及び12で発行されたパケットにおけるオーダリング制約を遵守した順番となっている。
以上に説明したように、本実施例に係るデータ通信システムでは、送信側スイッチにおいて、パケットの発行元及び宛先の組合せ毎に連番となる管理IDを振る。そして、受信側スイッチにおいて、先頭のNPパケットの管理IDが、先頭のNPパケットの発行元及び宛先の組合せにおいて一つ前のパケットの管理IDに1を加えた値以下の場合に出力している。これにより、本実施例に係るデータ通信システム及びスイッチ装置は、オーダリング制約を遵守した状態でPCIeパケットを送信することができる。