ノード制御装置および情報処理装置
【課題】バス番号のビット数が仕様で定義されているPCIバス等を使用する場合であっても、バス番号のビット数によって制限される本数以上のバスを使用できるようにする。
【解決手段】レジスタ400,401にコンフィグレーション空間のベースアドレス、サイズを設定することにより、メモリ空間に複数のコンフィグレーション空間をマップする。コンフィグレーションアクセス検出回路403は、フリット信号330に含まれている、アクセス対象デバイスが接続されているバスのバス番号と上記バスを配下に持つIOノードに割り当てられているコンフィグレーション空間のセグメント番号とをマージしたインデックス信号412を出力する。テーブル402は、インデックス信号412に対応するエントリに格納されているIOノード(上記バスを配下に持つIOノード)のノードIDを出力し、クロスバースイッチ320は、フリット信号330を上記ノードIDのIOノードへルーティングする。
【解決手段】レジスタ400,401にコンフィグレーション空間のベースアドレス、サイズを設定することにより、メモリ空間に複数のコンフィグレーション空間をマップする。コンフィグレーションアクセス検出回路403は、フリット信号330に含まれている、アクセス対象デバイスが接続されているバスのバス番号と上記バスを配下に持つIOノードに割り当てられているコンフィグレーション空間のセグメント番号とをマージしたインデックス信号412を出力する。テーブル402は、インデックス信号412に対応するエントリに格納されているIOノード(上記バスを配下に持つIOノード)のノードIDを出力し、クロスバースイッチ320は、フリット信号330を上記ノードIDのIOノードへルーティングする。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、複数のIO(入出力)ノードを含む大規模な情報処理装置およびその情報処理装置において使用するノード制御装置に関し、特に、PCI(Peripheral Component Interconnect)仕様で定義されるコンフィグレーション空間を複数設定して処理できるようにすることにより、従来と比較して多数のIOデバイスを接続可能にする技術に関する。
【背景技術】
【0002】
PCIバスで使用されるコンフィグレーション空間のバス番号は、8ビットであり、最大で256個のバスがサポートされる(例えば、特許文献1参照)。これは、PCI Local Bus Specification、PCI−X Protoxol Addendum to the PCI Local Bus Specification、PCI Express Base Specificationで共通である。
【0003】
【特許文献1】特開2006−260488号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
一方、複数のIOノードを含む大規模な情報処理装置においては、多数のIOデバイスを接続したいという要求がある。しかし、PCI仕様で定義されるコンフィグレーション空間のバス番号は8ビットであるため、バス番号が不足し、多数のIOデバイスを接続することができないという問題があった。このような問題点を解決するためには、例えば、バス番号のビット数を増やすという方法が考えられるが、バス番号のビット数が仕様により定義されているPCIバスには適用することができない。
【0005】
〔発明の目的〕
そこで、本発明の目的は、バス番号のビット数を増加させることなく、利用できるバスの本数を増加できるようにすることにある。
【課題を解決するための手段】
【0006】
本発明にかかる第1のノード制御装置は、
複数のコンフィグレーション空間をメモリ空間にマップするマップ手段と、
アクセス先を示すアドレスフィールドを含んだアクセス要求がプロセッサノードから入力されたとき、前記アクセス要求のアクセス先が、前記マップ手段によってメモリ空間にマップされたコンフィグレーション空間であるか否かを判定する判定手段と、
該判定手段によって前記アクセス要求のアクセス先がコンフィグレーション空間であると判定された場合、前記アクセス要求のアドレスフィールドに含まれている、アクセス対象デバイスが接続されているバスのバス番号および前記バスを配下に持つIOノードに割り当てられているコンフィグレーション空間のセグメント番号に基づいて、前記アクセス対象デバイスが接続されているバスを配下に持つIOノードのノードIDを出力するノードID出力手段と、
前記アクセス要求を、前記ノードID出力手段から出力されたノードIDのIOノードへルーティングするルーティング手段とを備えたことを特徴とする。
【0007】
本発明にかかる第2のノード制御装置は、第1のノード制御装置において、
前記マップ手段が、
前記コンフィグレーション空間のベースアドレスが設定される第1のレジスタと、
前記コンフィグレーション空間のサイズに関するサイズ情報が設定される第2のレジスタとを備えたことを特徴とする。
【0008】
本発明にかかる第3のノード制御装置は、第2のノード制御装置において、
前記第2のレジスタには、サイズ情報として前記メモリ空間にマップしたコンフィグレーション空間の個数が設定されることを特徴とする。
【0009】
本発明にかかる第4のノード制御装置は、第2または第3のノード制御装置において、
前記判定手段が、前記第1のレジスタの内容、前記第2のレジスタの内容および前記アドレスフィールドの内容に基づいて、前記アクセス要求のアクセス先が前記コンフィグレーション空間であるか否かを判定することを特徴とする。
【0010】
本発明にかかる第5のノード制御装置は、第3のノード制御装置において、
アクセス先を前記コンフィグレーション空間とするアクセス要求のアドレスフィールドには、その所定ビット範囲に前記コンフィグレーション空間のベースアドレスが設定され、且つ、
前記判定手段が、前記第1のレジスタの最上位ビットから前記第2のレジスタに設定されている個数に応じたビット位置までに設定されている値と、入力されたアクセス要求における前記所定ビット範囲の最上位ビットから前記第2のレジスタに設定されている個数に応じたビット位置までに設定されている値とが等しいか否かに基づいて、前記アクセス要求のアクセス先がコンフィグレーション空間であるか否かを判定することを特徴とする。
【0011】
本発明にかかる第6のノード制御装置は、第1のノード制御装置において、
前記ノードID出力手段が、
セグメント番号とバス番号との組み合わせに対応した複数のエントリを有すると共に、前記複数のエントリそれぞれに、そのエントリに対応するセグメント番号とバス番号との組み合わせによって特定されるIOノードのノードIDが登録され、前記判定手段でコンフィグレーション空間へのアクセスであると判定された場合、前記アクセス要求中のセグメント番号とバス番号との組み合わせに対応したエントリに登録されているノードIDを出力するテーブルを備えていることを特徴とする。
【0012】
本発明にかかる第7のノード制御装置は、第6のノード制御装置において、
前記テーブルが、前記セグメント番号と前記バス番号の上位ビットとの組み合わせに対応した複数のエントリを有することを特徴とする。
【0013】
本発明にかかる第8のノード制御装置は、第2のノード制御装置において、
自装置に接続されるプロセッサノード毎に、前記判定手段、前記ノードID出力手段および前記ルーティング手段を備え、且つ、
前記プロセッサノード毎の判定手段が、前記第1のレジスタおよび第2のレジスタを共用することを特徴とする。
【0014】
本発明にかかる第9のノード制御装置は、第4のノード制御装置において、
前記メモリ空間にマップされた複数のコンフィグレーション空間を複数のパーティションで分割して使用する場合は、前記テーブルに代えて、
セグメント番号とバス番号とパーティション番号の組み合わせに対応した複数のエントリを有すると共に、前記複数のエントリそれぞれに、そのエントリに対応するセグメント番号とバス番号とパーティション番号との組み合わせによって特定されるIOノードのノードIDが登録され、前記判定手段でコンフィグレーション空間へのアクセスであると判定された場合、前記アクセス要求を出力したプロセッサノードが属するパーティションのパーティション番号と前記アクセス要求中のセグメント番号とバス番号との組み合わせに対応したエントリに登録されているノードIDを出力するテーブルを使用することを特徴とする。
【0015】
本発明にかかる第10のノード制御装置は、
複数のコンフィグレーション空間をメモリ空間にマップするマップ手段と、
アクセス先を示すアドレスフィールドを含んだアクセス要求がプロセッサノードから入力されたとき、前記アクセス要求のアクセス先が、前記マップ手段によってメモリ空間にマップされたコンフィグレーション空間であるか否かを判定し、アクセス先が前記コンフィグレーション空間であると判定した場合、前記アドレスフィールドに含まれている、アクセス対象デバイスが接続されているバスのバス番号と前記バスを配下に持つIOノードに割り当てられているコンフィグレーション空間のセグメント番号とをマージしたインデックス信号を出力する判定手段と、
該判定手段から出力されたインデックス信号に含まれているセグメント番号の上位ビットを前記プロセッサノードが属しているパーティションのパーティション番号で置き換え、置き換え後のインデックス信号を出力するインデックス切り替え回路と、
パーティション番号とセグメント番号の下位ビットとバス番号との組み合わせに対応した複数のエントリを有すると共に、前記複数のエントリそれぞれに、そのエントリに対応するパーティション番号とセグメント番号の下位ビットとバス番号との組み合わせによって特定されるIOノードのノードIDが登録され、前記インデックス切り替え回路から出力されたインデックス信号によって示されるエントリに登録されているノードIDを出力するテーブルと、
前記アクセス要求を前記テーブルから出力されたノードIDのIOノードへルーティングするルーティング手段とを備えたことを特徴とする。
【0016】
本発明にかかる第11のノード制御装置は、第1〜第10の何れかのノード制御装置において、
前記コンフィグレーション空間が、PCI仕様で定義されたコンフィグレーション空間であることを特徴とする。
【0017】
本発明にかかる第1の情報処理装置は、
複数のノード制御装置が互いに接続され、且つ、各ノード制御装置にそれぞれプロセッサノードとIOノードとが接続された情報処理装置であって、
前記各ノード制御装置が、それぞれ、
自装置に接続されたノード制御装置毎のポート入力部およびポート出力部と、
自装置に接続されたプロセッサノード毎のポート入力部およびポート出力部と、
自装置に接続されたIOノード毎のポート入力部およびポート出力部と、
前記各ポート入力部と前記各ポート出力部とを接続するクロスバースイッチとを備え、且つ、
前記プロセッサノードが接続されたポート入力部が、それぞれ、
複数のコンフィグレーション空間をメモリ空間にマップするマップ手段と、
自ポート入力部に接続されたプロセッサノードからアクセス先を示すアドレスフィールドを含んだアクセス要求が入力されたとき、前記アクセス要求のアクセス先が、前記マップ手段によってメモリ空間にマップされたコンフィグレーション空間であるか否かを判定する判定手段と、
該判定手段によって前記アクセス要求のアクセス先が前記コンフィグレーション空間であると判定された場合、前記アクセス要求のアドレスフィールドに含まれている、アクセス対象デバイスが接続されているバスのバス番号および前記バスを配下に持つIOノードに割り当てられているコンフィグレーション空間のセグメント番号に基づいて、前記アクセス対象デバイスが接続されているバスを配下に持つIOノードのノードIDを出力するノードID出力手段と、
該ノードID出力手段から出力されたノードIDを転送先に指定して前記アクセス要求を前記クロスバースイッチに対して出力する出力手段とを備えたことを特徴とする。
【0018】
本発明にかかる第2の情報処理装置は、
複数のノード制御装置が互いに接続され、且つ、各ノード制御装置にそれぞれプロセッサノードとIOノードとが接続された情報処理装置であって、
前記各ノード制御装置が、それぞれ、
自装置に接続されたノード制御装置毎のポート入力部およびポート出力部と、
自装置に接続されたプロセッサノード毎のポート入力部およびポート出力部と、
自装置に接続されたIOノード毎のポート入力部およびポート出力部と、
前記各ポート入力部と前記各ポート出力部とを接続するクロスバースイッチと、
複数のコンフィグレーション空間をメモリ空間にマップするマップ手段と、
パーティション番号とセグメント番号の下位ビットとバス番号との組み合わせに対応した複数のエントリを有すると共に、前記複数のエントリそれぞれに、そのエントリに対応するパーティション番号とセグメント番号の下位ビットとバス番号との組み合わせによって特定されるIOノードのノードIDが登録され、インデックス信号が入力されたとき、該インデックス信号によって示されるエントリに登録されているノードIDを出力するテーブルとを備え、且つ、
前記プロセッサノードに接続されたポート入力部が、それぞれ、
自ポート入力部に接続されたプロセッサノードが属するパーティションのパーティション番号が設定されたパーティション番号記憶部と、
自ポート入力部に接続されたプロセッサノードからアクセス先を示すアドレスフィールドを含んだアクセス要求が入力されたとき、前記アクセス要求のアクセス先が、前記マップ手段によって前記メモリ空間にマップされたコンフィグレーション空間であるか否かを判定し、アクセス先が前記コンフィグレーション空間であると判定した場合、前記アドレスフィールドに含まれている、アクセス対象デバイスが接続されているバスのバス番号と前記バスを配下に持つIOノードの割り当てられているコンフィグレーション空間のセグメント番号とをマージしたインデックス信号を出力する判定手段と、
該判定手段から出力されたインデックス信号に含まれているセグメント番号の上位ビットを前記パーティション番号記憶部に設定されているパーティション番号で置き換え、置き換え後のインデックス信号を前記テーブルに対して出力するインデックス切り替え回路と、
該インデックス切り替え回路から出力されたインデックス信号に応答して前記テーブルから出力されたノードIDを転送先に指定して、前記アクセス要求を前記クロスバースイッチに出力する出力手段とを備えたことを特徴とする。
【0019】
〔作用〕
マップ手段により複数のコンフィグレーション空間をメモリに割り当てておく。ノード制御装置内の判定手段は、プロセッサノードからアクセス先を示すアドレスフィールドを含んだアクセス要求が入力されると、そのアクセス先がマップ手段によってメモリ空間にマップされたコンフィグレーション空間であるか否かを判定する。そして、アクセス先がコンフィグレーション空間であった場合には、ノードID出力手段が、アクセス要求のアドレスフィールドに含まれている、アクセス対象デバイスが接続されているバスのバス番号および上記バスを配下に持つIOノードに割り当てられているコンフィグレーション空間のセグメント番号に基づいて、上記IOノードのノードIDを出力する。ルーティング手段は、アクセス要求を、ノードID出力手段から出力されたノードIDのIOノードへルーティングする。
【発明の効果】
【0020】
本発明によれば、バス番号のビット数を増加させることなく、多くのバスをサポートすることが可能になり、その結果、多くのIOデバイスを接続することが可能になる。その理由は、複数のコンフィグレーション空間をメモリ空間にマップすると共に、アクセス要求のアドレスフィールドに含まれているアクセス対象デバイスが接続されているバスのバス番号および上記バスを配下に持つIOノードに割り当てられているコンフィグレーション空間のセグメント番号に基づいて、上記アクセス対象デバイスが接続されているバスを配下に持つIOノードのノードIDを求め、このノードIDによって特定されるIOノードへアクセス要求をルーティングするようにしているからである。即ち、1つのコンフィグレーション空間でサポートできるバス数が、バス番号のビット数によって制限されていても、複数のコンフィグレーション空間をメモリ空間にマップしているので、サポート可能なバス数が増加し、その結果、多くのIOデバイスを接続することが可能になる。
【発明を実施するための最良の形態】
【0021】
次に、本発明を実施するための最良の形態について図面を参照して詳細に説明する。
【0022】
〔第1の実施の形態の構成の説明〕
図1に、本発明にかかる情報処理装置の第1の実施の形態の構成例を示す。図1の例では、16個のプロセッサノード100〜115と、8個のIOノード120〜127とが、4個のノード制御装置130〜133を介して接続され、ひとつの情報処理装置を構成する。各ノード制御装置130〜133には、インタフェース140〜155を介してそれぞれ4個のプロセッサノードが接続されると共に、インタフェース160〜167を介してそれぞれ2個のIOノードが接続される。4個のノード制御装置130〜133は、インタフェース134〜139を介して互いに1:1で接続する。図示しないが、プロセッサノード100〜115は、ひとつまたは複数のプロセッサと主記憶から構成される。もっと小規模な構成(例えば、プロセッサノード2個、ノード制御装置1個、IOノード2個の構成)や、もっと大規模の構成(例えば、プロセッサノード64個、IOノード32個、ノード制御装置16個の構成)の情報処理装置も実現可能である。
【0023】
図2に、IOノード120の構成の一例を示す。IOノード120は、1個のIO制御装置200と、4個のIOデバイス210〜213から構成される。IO制御装置200は、インタフェース160を介してノード制御装置130と接続される。また、IOデバイス210〜213は、それぞれインタフェース220〜223を介してIO制御装置200と接続される。インタフェース220〜223は、PCI−Express、PCI−XまたはPCIの仕様に準拠する。なお、他のIOノード121〜127もIOノード120と同様の構成を有する。
【0024】
図3に、ノード制御装置130の構成例を示す。このノード制御装置130は、9個のポート入力部300〜308と、9個のポート出力部310〜318と、クロスバースイッチ320とから構成される。ここで、一組のポート入力部とポート出力部をポートと定義する。例えばプロセッサノード100に接続するポートは、ポート入力部300とポート出力部310とから構成される。ノード制御装置130の9個のポートは、それぞれ、プロセッサノード100〜103、IOノード120〜121、ノード制御装置131〜133に接続する。なお、他のノード制御装置131〜133もノード制御装置130と同様の構成を有する。
【0025】
図5に、本実施の形態の情報処理装置における、コンフィグレーション空間のメモリ空間へのマップ方法について示す。ひとつのコンフィグレーション空間は256Mバイトであり、複数のコンフィグレーション空間はアドレス空間の一部の領域に連続してマップされる。図5は、N個(Nは2のべき乗)のコンフィグレーション空間を、ベースアドレス〜(ベースアドレス+サイズ−1)の領域にマップした例である。ここで、各コンフィグレーション空間は、PCIセグメント番号0〜Nで識別される。
【0026】
図6に、本実施の形態の情報処理装置における、情報の転送フォーマットの一例を示す。ここで、論理的な情報の転送単位をパケットと定義し、また、パケットはひとつ以上のフリットから構成されるものと定義する。フリットは固定のビット幅を持ち、本実施の形態では90ビット幅である。フリットには、ヘッダフリット、データフリットの2種類が存在し、図6は各フリットの転送フォーマットを示している。
【0027】
フリットのビット89:88はストローブであり、フリットが有効であること、およびフリットの種類を示す。ストローブが00(2進数)の場合はフリットが無効であることを示し、01(2進数)の場合はヘッダフリットであることを示し、10(2進数)の場合はデータフリットであることを示す。このコード定義は一例である。パケットは、1個のヘッダフリットと、0個、1個、2個、4個または8個のデータフリットから構成される。よって、本実施の形態のパケットは、最小では1個のフリットから構成され、最大では9個のフリットから構成される。
【0028】
ヘッダフリットのビット87:0には、それぞれ8ビットの5個のフィールドと48ビットのアドレスフィールドとが定義される。これらのフィールド定義は一例であり、情報処理装置のリソース、プロトコルおよびトポロジーに依存して決定される。
【0029】
コマンドコードは、例えばメモリリード、メモリライト、コンフィグレーションリード、コンフィグレーションライト、リプライといった、ターゲットの装置に対する動作を指定するコードが格納されるフィールドである。
【0030】
ソースノードIDは、パケットの転送元のプロセッサノードまたはIOノードを識別する固有の番号が格納されるフィールドである。
【0031】
ターゲットノードIDは、パケットの転送先のプロセッサノードまたはIOノードまたはノード制御装置を識別する固有の番号が格納されるフィールドである。
【0032】
データレングスは、リードリクエストの場合に、ターゲットのデータレングスをバイト単位で指定するフィールドである。00(16進数)〜40(16進数)の場合、0〜64バイトを指定する。
【0033】
アドレスは、リクエストのターゲットとなるアドレスを格納するフィールドである。
【0034】
データフリットのビット71:64には、バイトイネーブルが定義され、ビット63:0に定義される各バイトの有効または無効を指定する。データフリットのビット87:72は未定義である。
【0035】
なお、フリットには、故障からフリットの内容を保護するために、ECCやパリティが付加されるが、本発明とは直接関係しないので、その詳細は省略する。
【0036】
図7に、図6のヘッダフリットのアドレスフィールドに関する、コンフィグレーションアクセスを行う場合の詳細を示す。ビット47:28は、コンフィグレーション空間をマップするメモリ空間のベースアドレスとPCIセグメント番号の論理和である。ビット47:28は、プロセッサノードがパケットを発行する場合のみ有効であり、ノード制御装置がパケットを発行する場合はオール0に差し替えて発行される。ビット27:0は、PCI−Expressなどの仕様で定義されるフィールドに対応し、ビット27:20はバス番号、ビット19:15はデバイス番号、ビット14:12はファンクション番号、ビット11:8は拡張レジスタ番号、ビット7:0はレジスタアドレスである。これらのフィールド定義は一例であり、プロセッサノードおよびIO制御装置に依存する。
【0037】
図4に、図3に示すノード制御装置130のポート入力部300の詳細を示す。プロセッサノード100〜103が接続されるポート入力部300〜303は、同じ構成である。
【0038】
レジスタ400および401は、メモリ空間にマップされるコンフィグレーション空間のベースアドレスおよびサイズを指定する値を保持する。これらのレジスタは、システムの初期化時にシステムファームウェアまたはサービスプロセッサによって設定されるが、これらの設定に関する詳細な構成については、当業者にとってよく知られており、また本発明とは直接関係しないので省略する。
【0039】
レジスタ401は、4ビットの幅であり、メモリ空間にマップされるコンフィグレーション空間のサイズを指定する値を保持する。保持する値をn(n=0〜8)とすると、指定するサイズは、256Mバイト×(2のn乗)となる。ひとつのコンフィグレーション空間は256Mバイトなので、レジスタ401の値が0ならば1個のコンフィグレーション空間を指定し、値が1ならば2個のコンフィグレーション空間を指定し、値が8ならば256個のコンフィグレーション空間を指定する。
【0040】
レジスタ400は、例えば情報処理装置が48ビットのアドレス空間をサポートする場合、20ビットの幅であり、ビット19:0はメモリ空間のアドレスのビット47:28に対応する。レジスタ400の指定するベースアドレスは、レジスタ401が指定するサイズの示すアドレス境界に整列しなければならない。例えば、レジスタ401に設定する値が2で1Gバイトのサイズを示す場合、レジスタ400の最下位の2ビットは00(2進数)で1Gバイト境界に整列したベースアドレスを指定しなければならない。つまり、レジスタ401に設定する値をn(n=0〜8)とすると、レジスタ400の下位nビットは全て0でなければならない。
【0041】
テーブル402は、コンフィグレーション空間のPCIセグメント番号およびバス番号から、そのバスを配下に持つIOノード120〜127のノードIDを得るためのテーブルである。例えば、IOノード配下のバス番号を16個の粒度で指定する場合、PCIセグメント番号の8ビットと、バス番号の上位4ビットをマージした12ビットをインデックスとするため、テーブル402は4096個のエントリを持つ。本実施の形態では、PCIセグメント番号を8ビットとしているが、もっと大きくすることも小さくすることも可能である。例えば、サポートするコンフィグレーション空間の数が16個までならば、PCIセグメント番号は4ビットとなり、テーブル402のエントリ数を少なくすることができる。同様に、本実施の形態では、IOノード配下のバス番号を16個の粒度で指定しているが、もっと粗くすることも、細かくすることも可能である。例えば、4個の粒度で指定する場合、PCIセグメント番号とバス番号の上位6ビットでテーブル402のインデックスを行うことになる。インデックスが指定するエントリには、対応するバスを配下に持つIOノードのノード番号が設定される。このテーブル402は、システムの初期化時にシステムファームウェアまたはサービスプロセッサによって設定されるが、これらの設定に関する詳細な構成については、当業者にとってよく知られており、また本発明とは直接関係しないので省略する。インデックス信号412が指定するエントリに格納されている値が、ノードID信号414として出力される。
【0042】
コンフィグレーションアクセス検出回路403は、プロセッサノード100から入力するフリット信号330がヘッダフリットの場合(ストローブフィールドが01(2進数)の場合)に、ヘッダフリットのアドレスフィールドと、レジスタ400および401の値が示すアドレス領域との比較を行う。具体的には、レジスタ401の保持する値がn(n=0〜8)の場合、レジスタ400のビット19:nと、アドレスフィールドのビット47:(28+n)を比較する。一致結果信号413は、フリット信号330がヘッダフリットでかつ比較結果が一致した場合に1になり、それ以外の場合は0になる。コンフィグレーションアクセス検出回路403はまた、レジスタ401の保持する値がn(n=0〜8)の場合、アドレスのビット35:28の値と、(2のn乗)−1の値の論理積からPCIセグメント番号を算出し、アドレス27:24のバス番号の上位4ビットとマージして、インデックス信号412を出力する。例えば、レジスタ401の保持する値が4で、アドレスのビット35:20が1234(16進数)の場合、PCIセグメント番号は02(16進数)となり、バス番号の上位4ビットは3(16進数)なので、インデックス信号412は023(16進数)となる。
【0043】
コンフィグレーションフリット生成回路404は、プロセッサノード100から入力されたフリット信号330がヘッダフリットの場合に、アドレスフィールドのビット47:28をオール0に差し替え、ターゲットノードIDをテーブル402から入力するノードID信号414に差し替え、コマンドコードがメモリリードのコードならばコンフィグレーションリードのコードに差し替え、メモリライトのコードならばコンフィグレーションライトのコードに差し替えて、ヘッダフリット信号415として出力する。
【0044】
セレクタ405は、一致結果信号413が0ならばフリット信号330を選択し、一致結果信号413が1ならばヘッダフリット信号415を選択して、フリット信号340をクロスバースイッチ320へ出力する。
【0045】
本実施の形態では、レジスタ400、レジスタ401およびテーブル402は、ポート入力部300〜303に独立に実装しているが、設定される値は同じであるため、独立に参照できるならば、共用することも可能である。
【0046】
〔第1の実施の形態の動作の説明〕
次に、本実施の形態の動作について詳細に説明する。
【0047】
先ず、システムの初期化時に実施する設定について説明する。システムファームウェアは、IOノード120〜127に関して、PCIセグメント番号とバス番号とを割り当てる。例えば、IOノード120〜121はPCIセグメント番号0、IOノード122〜123はPCIセグメント番号1、IOノード124〜125はPCIセグメント番号2、IOノード126〜127はPCIセグメント番号3を割り当てる。また、それぞれのPCIセグメント番号において、IOノード120、122、124、126にはバス番号00〜7F(16進数)、IOノード121、123、125、127にはバス番号80〜FF(16進数)を割り当てる。
【0048】
次にシステムファームウェアは、空間をメモリにマップするコンフィグレーション空間のベースアドレスを決定し、各ノード制御装置130〜133に設けられているポート入力部300〜303内のレジスタ400に同じ値(ベースアドレス)をセットする。また、4個のコンフィグレーション空間を使用するため、各ポート入力部内のレジスタ401には2をセットする(サイズは1Gバイト)。ベースアドレスをFFFFC0000000(16進数)とすると、レジスタ400にはFFFFC(16進数)をセットする。
【0049】
さらに、システムファームウェアは、ノード制御装置130〜133のテーブル402に同じ値をセットする(ポート入力部300〜303にも同様にセットする)。図10に示すように、テーブル402のエントリ0〜7にはIOノード120のノードIDをセットし、エントリ8〜15にはIOノード121のノードIDをセットし、エントリ16〜23にはIOノード122のノードIDをセットし、エントリ24〜31にはIOノード123のノードIDをセットし、エントリ32〜39にはIOノード124のノードIDをセットし、エントリ40〜47にはIOノード125のノードIDをセットし、エントリ48〜55にはIOノード126のノードIDをセットし、エントリ56〜63にはIOノード127のノードIDをセットし、残りのエントリには何もセットしない(残りのエントリは使用しない)。これらの設定は、システムファームウェアの代わりにサービスプロセッサが行っても良い。
【0050】
次に、プロセッサノード100から、IOノード125配下のバス番号8F(16進数)のバスに接続されているIOデバイスに対して、コンフィグレーションリードを行う場合について説明する。ここで、IOノード125のPCIセグメント番号は2とする。
【0051】
プロセッサノード100内のプロセッサ上で動作するシステムファームウェアは、OSなどのソフトウェアからIOノード125配下のバス番号8F(16進数)のIOデバイスに対するコンフィグレーション空間のレジスタへのリード要求を受け取ると、初期化時にメモリ空間にマップしたアドレスをターゲットにしてメモリリードトランザクションを発行する。具体的には、図7のアドレスフォーマットにおいて、ビット47:28はベースアドレスのFFFFC(16進数)とPCIセグメント番号の02(16進数)の論理和であるFFFFE(16進数)とし、ビット27:20はバス番号の8F(16進数)とする。ビット19:0のデバイス番号、ファンクション番号、拡張レジスタ番号、レジスタアドレスに関しても、ソフトウェアからのリード要求に伴う情報とするが、詳細は省略する。システムファームウェアは、また、ソフトウェアから要求されたターゲットのデータレングスを付加してトランザクションを発行する。
【0052】
プロセッサノード100は、システムファームウェアからのメモリリードトランザクションを受け取ると、図6のヘッダフリットのフォーマットに関して、アドレスおよびデータレングスを受け取った値とし、ストローブを01(2進数)とし、コマンドコードをメモリリードのコードとし、ソースノードIDをプロセッサノード100のノードIDとし、ターゲットノードIDをノード制御装置130のノードIDとして、フリット信号330を発行する。ここで、トランザクションIDは、プロセッサノード100についてユニークな番号とする。
【0053】
プロセッサノード100からフリット信号330が入力されると、コンフィグレーションアクセス検出回路403は、入力したフリットのストローブフィールドが01(2進数)でヘッダフリットであるので、ヘッダフリットのアドレスフィールドと、レジスタ400および401の値が示すアドレス領域の比較を行う。レジスタ401の保持する値が2で、レジスタ400の保持する値がFFFFC(16進数)とすると、レジスタ400のビット19:2と、アドレスフィールドのビット47:30を比較するので、一致結果信号413が1になる。コンフィグレーションアクセス検出回路403は、また、レジスタ401の保持する値が2であるので、アドレスのビット35:28の値と、(2の2乗)−1の値の論理積からPCIセグメント番号を02(16進数)として算出し、アドレス27:24のバス番号8F(16進数)の上位4ビットとマージして、インデックス信号412を028(16進数)として出力する。
【0054】
テーブル402は、インデックス信号412として028(16進数)が入力されるので、エントリ40に格納されるIOノード125のノードIDを、ノードID信号414として出力する。
【0055】
コンフィグレーションフリット生成回路404は、プロセッサノード100から入力するフリット信号330がヘッダフリットであるので、アドレスフィールドのビット47:28をオール0に差し替え、ターゲットノードIDをテーブル402から入力するノードID信号414に差し替え、コマンドコードがメモリリードのコードなのでコンフィグレーションリードのコードに差し替えて、ヘッダフリット信号415として出力する。
【0056】
セレクタ405は、一致結果信号413が1なので、ヘッダフリット信号415を選択して、フリット信号340をクロスバースイッチ320へ出力する。
【0057】
クロスバースイッチ320は、ターゲットノードIDに従って、フリットをポート出力部317へ出力する。クロスバースイッチがターゲットノードIDに従って、出力先のポート出力部を決定する方法は、本発明とは直接関係しないので、その詳細は省略する。ポート出力部317から出力されたフリットは、ノード制御装置132を経由して、IOノード125へ出力され、IOノード125内に存在するターゲットのIOデバイスへ出力される。その後、ターゲットのIOデバイスからは、リプライデータがノード制御装置132および130を経由して、プロセッサノード100に返却される。
【0058】
〔第1の実施の形態の効果〕
本実施の形態によれば、バス番号のビット数を増加させることなく、多くのバスをサポートすることが可能になり、その結果、多くのIOデバイスを接続することが可能になる。
【0059】
その理由は、マップ手段であるレジスタ400、401を用いて複数のコンフィグレーション空間をメモリ空間にマップしておき、プロセッサノードからフリット信号(アクセス要求)が入力された場合は、判定手段であるコンフィグレーションアクセス検出回路403を用いてアクセス先がコンフィグレーション空間であるか否かを判定し、アクセス先がコンフィグレーション空間であった場合には、ノードID出力手段であるテーブル402を用いてアクセス対象デバイスが接続されているバスを配下に持つIOノードのノードIDを出力し、更に、ルーティング手段であるクロスバースイッチ320を用いてテーブル402から出力されたノードIDのIOノードへフリット信号をルーティングするようにしているからである。即ち、1つのコンフィグレーション空間でサポートできるバス数が、バス番号のビット数によって制限されていても、複数のコンフィグレーション空間をメモリ空間にマップしているので、サポート可能なバス数が増加し、その結果、多くのIOデバイスを接続することが可能になる。
【0060】
また、本実施の形態によれば、テーブル402のサイズを小さくすることが可能になる。その理由は、テーブル402に、セグメント番号とバス番号の上位ビットとの組み合わせに対応した複数のエントリを設けるようにしているからである。即ち、複数のバス番号に対して1つのエントリを割り当てるようにしているので、テーブル402のサイズを小さくすることが可能になる。
【0061】
〔第2の実施の形態の構成の説明〕
次に、本発明にかかる情報処理装置の第2の実施の形態について説明する。本実施の形態は、プロセッサノードおよびIOノードを複数のパーティションに分割して運用する場合についてのものである。この場合、各パーティションが必要とするコンフィグレーション空間の数は少なくなる。そこで本実施の形態では、アドレスフィールドからPCIセグメント番号をデコードして対応のIOノードへアクセス要求を転送する際に使用するテーブルに関して、テーブルを参照する際に使用するPCIセグメント番号の一部をパーティション番号に切り替える機能を設けることで、このテーブルに関するハードウェアを少なくする。
【0062】
図8に、図1の情報処理装置をパーティション800とパーティション801に分割した一例を示す。この例では2個のパーティションに分割しているが、更に細かく分割することも可能である。パーティション800とパーティション801では、独立のオペレーティングシステム(OS)が動作する。
【0063】
本実施の形態の基本的な構成は上記の通りであるが、ノード制御装置130〜133に関してさらに工夫している。ノード制御装置130の構成例を図9に示す。なお、他のノード制御装置131〜133も同様の構成を有している。
【0064】
ノード制御装置130にポート入力共通部900を設ける。ポート入力共通部900は、ポート入力部300〜303で共用するレジスタ901〜903およびテーブル904を含む。
【0065】
レジスタ902は、図4のレジスタ401と同じ機能を持ち、メモリ空間にマップされるコンフィグレーション空間のサイズを指定する。レジスタ902は4ビットの幅であり、保持する値をn(n=0〜8)とすると、指定するサイズは、256Mバイト×(2のn乗)となる。ひとつのコンフィグレーション空間は256Mバイトなので、レジスタ902の値が0ならば1個のコンフィグレーション空間を指定し、値が1ならば2個のコンフィグレーション空間を指定し、値が8ならば256個のコンフィグレーション空間を指定する。
【0066】
レジスタ901は、図4のレジスタ400と同じ機能を持ち、メモリ空間にマップされるコンフィグレーション空間のベースアドレスを指定する。レジスタ901は、例えば情報処理装置が48ビットのアドレス空間をサポートする場合、20ビットの幅であり、ビット19:0はメモリ空間のアドレスのビット47:28に対応する。レジスタ901の指定するベースアドレスは、レジスタ902の指定するサイズの示すアドレス境界に整列しなければならない。例えば、レジスタ902に設定する値が2で1Gバイトのサイズを示す場合、レジスタ901の最下位の2ビットは00(2進数)で1Gバイト境界に整列したベースアドレスを指定しなければならない。つまり、レジスタ902に設定する値がn(n=0〜8)とすると、レジスタ901の下位nビットは全て0でなければならない。
【0067】
レジスタ903は、1ビットのレジスタであり、インデックスの切り替えフラグを保持する。インデックス切り替え回路906において、インデックス切り替えを行わない場合は0を設定し、インデックス切り替えを行う場合は1を設定する。
【0068】
テーブル904は、インデックス信号920〜923から、対応するIOノード120〜127のノードIDを得るためのテーブルである。インデックス信号920が指定するエントリに格納する値がノードID信号930として出力され、インデックス信号921が指定するエントリに格納する値がノードID信号931として出力され、インデックス信号922が指定するエントリに格納する値がノードID信号932として出力され、インデックス信号923が指定するエントリに格納する値がノードID信号933として出力される。
【0069】
プロセッサノード100が接続されるポート入力部300は、コンフィグレーションアクセス検出回路403と、コンフィグレーションフリット生成回路404と、セレクタ405と、レジスタ905と、インデックス切り替え回路906とを含む。なお、他のプロセッサノード101〜103に接続されるポート入力部301〜303も同様の構成を有する。
【0070】
レジスタ905は、4ビットの幅であり、ポート入力部300に接続するプロセッサノード100の属するパーティション番号を指定する。
【0071】
コンフィグレーションアクセス検出回路403は、レジスタ902の保持する値がn(n=0〜8)の場合、アドレスのビット35:28の値と、(2のn乗)−1の値の論理積からPCIセグメント番号を算出し、アドレス27:24のバス番号の上位4ビットとマージして、インデックス信号941を出力する。
【0072】
インデックス切り替え回路906は、レジスタ903から出力されるインデックス切り替え信号910が0の場合は、コンフィグレーションアクセス検出回路403の出力するインデックス信号941をそのままインデックス信号920として出力し、インデックス切り替え信号910が1の場合は、インデックス信号941の上位4ビットをレジスタ905から入力するパーティション番号940に差し替えて、インデックス信号920として出力する。つまり、インデックス切り替え信号910が1の場合、インデックス信号920は、4ビットのパーティション番号と、PCIセグメント番号の下位4ビットと、バス番号の上位4ビットをマージした値となる。
【0073】
コンフィグレーションフリット生成回路404は、プロセッサノード100から入力するフリット信号330がヘッダフリットの場合に、アドレスフィールドのビット47:28をオール0に差し替え、ターゲットノードIDをテーブル904から入力するノードID信号930に差し替え、コマンドコードがメモリリードのコードならばコンフィグレーションリードのコードに差し替え、メモリライトのコードならばコンフィグレーションライトのコードに差し替えて、ヘッダフリット信号415として出力する。
【0074】
セレクタ405は、一致結果信号413が0ならばフリット信号330を選択し、一致結果信号413が1ならばヘッダフリット信号415を選択して、フリット信号340をクロスバースイッチ320へ出力する。
【0075】
レジスタ901、902、903、905およびテーブル904は、システムの初期化時にシステムファームウェアまたはサービスプロセッサによって設定されるが、これらの設定に関する詳細な構成については、当業者にとってよく知られており、また本発明とは直接関係しないので省略する。
【0076】
〔第2の実施の形態の動作の説明〕
次に、本実施の形態の動作について説明する。ここで、図8のパーティション800のパーティション番号を0、パーティション801のパーティション番号を1とする。
【0077】
まず、初期化時に実施する設定について説明する。
【0078】
システムファームウェアは、システムをパーティションに分割して使用する場合、ノード制御装置130〜133のレジスタ903を1に設定する。システムファームウェアは、システムをパーティションに分割せずに使用する場合は、レジスタ903を0に設定する。システムをパーティションに分割しない場合については、前述した第1の実施の形態と同じであるため説明を省略する。
【0079】
システムファームウェアは、ノード制御装置130〜133のポート入力部300〜303のレジスタ905に、そのポートに接続するプロセッサノードが属すパーティションの番号を設定する。具体的には、ノード制御装置130および131のポート入力部300および301のレジスタ905には0を設定し、ポート入力部302と303のレジスタ905には1を設定する。また、ノード制御装置132および133のポート入力部300〜303のレジスタ905には1を設定する。
【0080】
システムファームウェアは、メモリにマップするコンフィグレーション空間のベースアドレスおよびサイズを決定し、ノード制御装置130〜133のレジスタ901および902に同じ値をセットする。従って、コンフィグレーション空間をマップする領域は、パーティション800と801で共通となる。最大で4個のコンフィグレーション空間を使用するため、レジスタ902には2をセットする(サイズは1Gバイト)。ベースアドレスをFFFFC0000000(16進数)とすると、レジスタ901にはFFFFC(16進数)をセットする。
【0081】
システムファームウェアは、パーティション800のIOノード120、122に関して、PCIセグメント番号とバス番号を割り当てる。例えば、IOノード120および122ともPCIセグメント番号0を割り当て、IOノード120にはバス番号00〜7F(16進数)、IOノード122にはバス番号80〜FF(16進数)を割り当てる。
【0082】
また、システムファームウェアは、パーティション801のIOノード121、123〜127に関して、PCIセグメント番号とバス番号を割り当てる。例えば、IOノード121はPCIセグメント番号0、IOノード123はPCIセグメント番号1、IOノード124〜125はPCIセグメント番号2、IOノード126〜127はPCIセグメント番号3を割り当てる。また、それぞれのPCIセグメント番号において、IOノード121、123にはバス番号00〜FF(16進数)、IOノード124、126にはバス番号00〜7F(16進数)、IOノード125、127にはバス番号80〜FF(16進数)を割り当てる。
【0083】
さらに、システムファームウェアは、ノード制御装置130〜133のテーブル904に同じ値をセットする。図11に示すようにテーブル904のエントリ0〜255はパーティション800に対応し、エントリ256〜511はパーティション801に対応する。テーブル904のエントリ0〜7にはIOノード120のノードIDをセットし、エントリ8〜15にはIOノード122のノードIDをセットし、エントリ256〜271にはIOノード121のノードIDをセットし、エントリ272〜287にはIOノード123のノードIDをセットし、エントリ288〜295にはIOノード124のノードIDをセットし、エントリ296〜303にはIOノード125のノードIDをセットし、エントリ304〜311にはIOノード126のノードIDをセットし、エントリ312〜319にはIOノード127のノードIDをセットし、残りのエントリには何もセットしない(残りのエントリは使用しない)。
【0084】
これらの設定は、システムファームウェアの代わりにサービスプロセッサが行っても良い。
【0085】
次に、プロセッサノード102から、IOノード123配下のバス番号30(16進数)のバスに接続されているIOデバイスに対して、コンフィグレーションリードを行う場合について説明する。ここで、IOノード123のPCIセグメント番号は1とする。
【0086】
プロセッサノード102内のプロセッサ上で動作するシステムファームウェアは、OSなどのソフトウェアからIOノード123配下のバス番号30(16進数)のバスに接続されているIOデバイスに対するコンフィグレーション空間レジスタへのリード要求を受け取ると、初期化時にメモリ空間にマップしたアドレスをターゲットにしてメモリリードトランザクションを発行する。具体的には、図7のアドレスフィールドのフォーマットにおいて、ビット47:28はベースアドレスのFFFFC(16進数)とPCIセグメント番号の01(16進数)の論理和であるFFFFD(16進数)とし、ビット27:20はバス番号の30(16進数)とする。ビット19:0のデバイス番号、ファンクション番号、拡張レジスタ番号、レジスタアドレスに関しても、ソフトウェアからのリード要求に伴う情報とするが、詳細は省略する。システムファームウェアは、また、ソフトウェアから要求されたターゲットのデータレングスを付加してトランザクションを発行する。
【0087】
プロセッサノード102は、システムファームウェアからのメモリリードトランザクションを受け取ると、図6のヘッダフリットのフォーマットに関して、アドレスおよびデータレングスを受け取った値とし、ストローブを01(2進数)とし、コマンドコードをメモリリードのコードとし、ソースノードIDをプロセッサノード102のノードIDとし、ターゲットノードIDをノード制御装置130のノードIDとして、フリット信号332を発行する。ここで、トランザクションIDは、プロセッサノード102についてユニークな番号とする。
【0088】
プロセッサノード102からフリット信号332が入力されると、ポート入力部302のコンフィグレーションアクセス検出回路403は、入力したフリット信号332のストローブフィールドが01(2進数)でヘッダフリットであるので、ヘッダフリットのアドレスフィールドと、レジスタ901および902の値が示すアドレス領域の比較を行う。レジスタ902の保持する値が2で、レジスタ901の保持する値がFFFFC(16進数)とすると、レジスタ901のビット19:2と、アドレスフィールドのビット47:30を比較するので、一致結果信号413が1になる。また、コンフィグレーションアクセス検出回路403は、レジスタ902の保持する値が2であるので、アドレスのビット35:28の値と、(2の2乗)−1の値の論理積からPCIセグメント番号を01(16進数)として算出し、アドレス27:24のバス番号30(16進数)の上位4ビットとマージして、インデックス信号941を013(16進数)として出力する。
【0089】
インデックス切り替え回路906は、レジスタ903の出力が1であるので、インデックス信号941の上位4ビットをレジスタ905の値1に差し替えて、113(16進数)の値でインデックス信号922を出力する。
【0090】
テーブル904は、インデックス信号922として113(16進数)が入力されるので、エントリ275に格納されるIOノード123のノードIDを、ノードID信号932として出力する。
【0091】
コンフィグレーションフリット生成回路404は、プロセッサノード102から入力されるフリット信号332がヘッダフリットであるので、アドレスフィールドのビット47:28をオール0に差し替え、ターゲットノードIDをテーブル904から入力するノードID信号932に差し替え、コマンドコードがメモリリードのコードなのでコンフィグレーションリードのコードに差し替えて、ヘッダフリット信号415として出力する。
【0092】
セレクタ405は、一致結果信号413が1なので、ヘッダフリット信号415を選択して、フリット信号342をクロスバースイッチ320へ出力する。
【0093】
クロスバースイッチ320は、ターゲットノードIDに従って、フリットをポート出力部316へ出力する。クロスバースイッチがターゲットノードIDに従って、出力先のポート出力部を決定する方法は、本発明とは直接関係しないので、その詳細は省略する。ポート出力部316から出力されたフリットは、ノード制御装置131を経由して、IOノード123へ出力され、IOノード123内に存在するターゲットのIOデバイスへ出力される。その後、ターゲットのIOデバイスからは、リプライデータがノード制御装置131および130を経由して、プロセッサノード102に返却される。
【0094】
〔第2の実施の形態の効果〕
このように、本実施の形態では、情報処理装置を複数のパーティションに分割して運用する場合に、パーティション毎にテーブルを設ける必要がなく、ハードウェアを少なくすることができるという効果が得られる。
【0095】
その理由は、パーティション番号とセグメント番号の下位ビットとバス番号との組み合わせに対応した複数のエントリを有すると共に、各エントリそれぞれに、そのエントリに対応するパーティション番号とセグメント番号の下位ビットとバス番号との組み合わせによって特定されるIOノードのノードIDが登録されたテーブル904を備えると共に、テーブル904に対するインデックス信号941に含まれているセグメント番号の上位ビットを、フリット信号を出力したプロセッサノードが属しているパーティションのパーティション番号に置き換えるインデックス切り替え回路906を備えているからである。
【産業上の利用可能性】
【0096】
複数のIOノードを備え、多くのIOデバイスを接続する情報処理装置に適用すると好適である。
【図面の簡単な説明】
【0097】
【図1】本発明にかかる情報処理装置の第1の実施の形態の構成例を示すブロック図である。
【図2】IOノード120の構成例を示すブロック図である。
【図3】ノード制御装置130の構成例を示すブロック図である。
【図4】第1の実施の形態にかかるポート入力部300の構成例を示すブロック図である。
【図5】アドレス空間に複数のコンフィグレーション空間をマップした様子を示した図である。
【図6】フリット信号のフォーマットを示す図である。
【図7】コンフィグレーションアクセスを行う場合のアドレスフィールドのフォーマットを示す図である。
【図8】本発明にかかる情報処理装置の第2の実施の形態の構成例を示すブロック図である。
【図9】第2の実施の形態にかかるノード制御装置130の構成例を示すブロック図である。
【図10】テーブル402の内容例を示す図である。
【図11】テーブル904の内容例を示す図である。
【符号の説明】
【0098】
100〜115…プロセッサノード
120〜127…IOノード
200…IO制御装置
210〜213…IOデバイス
130〜133…ノード制御装置
300〜308…ポート入力部
400、401…レジスタ
402…テーブル
403…コンフィグレーションアクセス検出回路
404…コンフィグレーションフリット生成回路
405…セレクタ
310〜318…ポート出力部
320…クロスバースイッチ
800、801…パーティション
900…ポート入力共通部
901〜903、905…レジスタ
904…テーブル
906…インデックス切り替え回路
【技術分野】
【0001】
本発明は、複数のIO(入出力)ノードを含む大規模な情報処理装置およびその情報処理装置において使用するノード制御装置に関し、特に、PCI(Peripheral Component Interconnect)仕様で定義されるコンフィグレーション空間を複数設定して処理できるようにすることにより、従来と比較して多数のIOデバイスを接続可能にする技術に関する。
【背景技術】
【0002】
PCIバスで使用されるコンフィグレーション空間のバス番号は、8ビットであり、最大で256個のバスがサポートされる(例えば、特許文献1参照)。これは、PCI Local Bus Specification、PCI−X Protoxol Addendum to the PCI Local Bus Specification、PCI Express Base Specificationで共通である。
【0003】
【特許文献1】特開2006−260488号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
一方、複数のIOノードを含む大規模な情報処理装置においては、多数のIOデバイスを接続したいという要求がある。しかし、PCI仕様で定義されるコンフィグレーション空間のバス番号は8ビットであるため、バス番号が不足し、多数のIOデバイスを接続することができないという問題があった。このような問題点を解決するためには、例えば、バス番号のビット数を増やすという方法が考えられるが、バス番号のビット数が仕様により定義されているPCIバスには適用することができない。
【0005】
〔発明の目的〕
そこで、本発明の目的は、バス番号のビット数を増加させることなく、利用できるバスの本数を増加できるようにすることにある。
【課題を解決するための手段】
【0006】
本発明にかかる第1のノード制御装置は、
複数のコンフィグレーション空間をメモリ空間にマップするマップ手段と、
アクセス先を示すアドレスフィールドを含んだアクセス要求がプロセッサノードから入力されたとき、前記アクセス要求のアクセス先が、前記マップ手段によってメモリ空間にマップされたコンフィグレーション空間であるか否かを判定する判定手段と、
該判定手段によって前記アクセス要求のアクセス先がコンフィグレーション空間であると判定された場合、前記アクセス要求のアドレスフィールドに含まれている、アクセス対象デバイスが接続されているバスのバス番号および前記バスを配下に持つIOノードに割り当てられているコンフィグレーション空間のセグメント番号に基づいて、前記アクセス対象デバイスが接続されているバスを配下に持つIOノードのノードIDを出力するノードID出力手段と、
前記アクセス要求を、前記ノードID出力手段から出力されたノードIDのIOノードへルーティングするルーティング手段とを備えたことを特徴とする。
【0007】
本発明にかかる第2のノード制御装置は、第1のノード制御装置において、
前記マップ手段が、
前記コンフィグレーション空間のベースアドレスが設定される第1のレジスタと、
前記コンフィグレーション空間のサイズに関するサイズ情報が設定される第2のレジスタとを備えたことを特徴とする。
【0008】
本発明にかかる第3のノード制御装置は、第2のノード制御装置において、
前記第2のレジスタには、サイズ情報として前記メモリ空間にマップしたコンフィグレーション空間の個数が設定されることを特徴とする。
【0009】
本発明にかかる第4のノード制御装置は、第2または第3のノード制御装置において、
前記判定手段が、前記第1のレジスタの内容、前記第2のレジスタの内容および前記アドレスフィールドの内容に基づいて、前記アクセス要求のアクセス先が前記コンフィグレーション空間であるか否かを判定することを特徴とする。
【0010】
本発明にかかる第5のノード制御装置は、第3のノード制御装置において、
アクセス先を前記コンフィグレーション空間とするアクセス要求のアドレスフィールドには、その所定ビット範囲に前記コンフィグレーション空間のベースアドレスが設定され、且つ、
前記判定手段が、前記第1のレジスタの最上位ビットから前記第2のレジスタに設定されている個数に応じたビット位置までに設定されている値と、入力されたアクセス要求における前記所定ビット範囲の最上位ビットから前記第2のレジスタに設定されている個数に応じたビット位置までに設定されている値とが等しいか否かに基づいて、前記アクセス要求のアクセス先がコンフィグレーション空間であるか否かを判定することを特徴とする。
【0011】
本発明にかかる第6のノード制御装置は、第1のノード制御装置において、
前記ノードID出力手段が、
セグメント番号とバス番号との組み合わせに対応した複数のエントリを有すると共に、前記複数のエントリそれぞれに、そのエントリに対応するセグメント番号とバス番号との組み合わせによって特定されるIOノードのノードIDが登録され、前記判定手段でコンフィグレーション空間へのアクセスであると判定された場合、前記アクセス要求中のセグメント番号とバス番号との組み合わせに対応したエントリに登録されているノードIDを出力するテーブルを備えていることを特徴とする。
【0012】
本発明にかかる第7のノード制御装置は、第6のノード制御装置において、
前記テーブルが、前記セグメント番号と前記バス番号の上位ビットとの組み合わせに対応した複数のエントリを有することを特徴とする。
【0013】
本発明にかかる第8のノード制御装置は、第2のノード制御装置において、
自装置に接続されるプロセッサノード毎に、前記判定手段、前記ノードID出力手段および前記ルーティング手段を備え、且つ、
前記プロセッサノード毎の判定手段が、前記第1のレジスタおよび第2のレジスタを共用することを特徴とする。
【0014】
本発明にかかる第9のノード制御装置は、第4のノード制御装置において、
前記メモリ空間にマップされた複数のコンフィグレーション空間を複数のパーティションで分割して使用する場合は、前記テーブルに代えて、
セグメント番号とバス番号とパーティション番号の組み合わせに対応した複数のエントリを有すると共に、前記複数のエントリそれぞれに、そのエントリに対応するセグメント番号とバス番号とパーティション番号との組み合わせによって特定されるIOノードのノードIDが登録され、前記判定手段でコンフィグレーション空間へのアクセスであると判定された場合、前記アクセス要求を出力したプロセッサノードが属するパーティションのパーティション番号と前記アクセス要求中のセグメント番号とバス番号との組み合わせに対応したエントリに登録されているノードIDを出力するテーブルを使用することを特徴とする。
【0015】
本発明にかかる第10のノード制御装置は、
複数のコンフィグレーション空間をメモリ空間にマップするマップ手段と、
アクセス先を示すアドレスフィールドを含んだアクセス要求がプロセッサノードから入力されたとき、前記アクセス要求のアクセス先が、前記マップ手段によってメモリ空間にマップされたコンフィグレーション空間であるか否かを判定し、アクセス先が前記コンフィグレーション空間であると判定した場合、前記アドレスフィールドに含まれている、アクセス対象デバイスが接続されているバスのバス番号と前記バスを配下に持つIOノードに割り当てられているコンフィグレーション空間のセグメント番号とをマージしたインデックス信号を出力する判定手段と、
該判定手段から出力されたインデックス信号に含まれているセグメント番号の上位ビットを前記プロセッサノードが属しているパーティションのパーティション番号で置き換え、置き換え後のインデックス信号を出力するインデックス切り替え回路と、
パーティション番号とセグメント番号の下位ビットとバス番号との組み合わせに対応した複数のエントリを有すると共に、前記複数のエントリそれぞれに、そのエントリに対応するパーティション番号とセグメント番号の下位ビットとバス番号との組み合わせによって特定されるIOノードのノードIDが登録され、前記インデックス切り替え回路から出力されたインデックス信号によって示されるエントリに登録されているノードIDを出力するテーブルと、
前記アクセス要求を前記テーブルから出力されたノードIDのIOノードへルーティングするルーティング手段とを備えたことを特徴とする。
【0016】
本発明にかかる第11のノード制御装置は、第1〜第10の何れかのノード制御装置において、
前記コンフィグレーション空間が、PCI仕様で定義されたコンフィグレーション空間であることを特徴とする。
【0017】
本発明にかかる第1の情報処理装置は、
複数のノード制御装置が互いに接続され、且つ、各ノード制御装置にそれぞれプロセッサノードとIOノードとが接続された情報処理装置であって、
前記各ノード制御装置が、それぞれ、
自装置に接続されたノード制御装置毎のポート入力部およびポート出力部と、
自装置に接続されたプロセッサノード毎のポート入力部およびポート出力部と、
自装置に接続されたIOノード毎のポート入力部およびポート出力部と、
前記各ポート入力部と前記各ポート出力部とを接続するクロスバースイッチとを備え、且つ、
前記プロセッサノードが接続されたポート入力部が、それぞれ、
複数のコンフィグレーション空間をメモリ空間にマップするマップ手段と、
自ポート入力部に接続されたプロセッサノードからアクセス先を示すアドレスフィールドを含んだアクセス要求が入力されたとき、前記アクセス要求のアクセス先が、前記マップ手段によってメモリ空間にマップされたコンフィグレーション空間であるか否かを判定する判定手段と、
該判定手段によって前記アクセス要求のアクセス先が前記コンフィグレーション空間であると判定された場合、前記アクセス要求のアドレスフィールドに含まれている、アクセス対象デバイスが接続されているバスのバス番号および前記バスを配下に持つIOノードに割り当てられているコンフィグレーション空間のセグメント番号に基づいて、前記アクセス対象デバイスが接続されているバスを配下に持つIOノードのノードIDを出力するノードID出力手段と、
該ノードID出力手段から出力されたノードIDを転送先に指定して前記アクセス要求を前記クロスバースイッチに対して出力する出力手段とを備えたことを特徴とする。
【0018】
本発明にかかる第2の情報処理装置は、
複数のノード制御装置が互いに接続され、且つ、各ノード制御装置にそれぞれプロセッサノードとIOノードとが接続された情報処理装置であって、
前記各ノード制御装置が、それぞれ、
自装置に接続されたノード制御装置毎のポート入力部およびポート出力部と、
自装置に接続されたプロセッサノード毎のポート入力部およびポート出力部と、
自装置に接続されたIOノード毎のポート入力部およびポート出力部と、
前記各ポート入力部と前記各ポート出力部とを接続するクロスバースイッチと、
複数のコンフィグレーション空間をメモリ空間にマップするマップ手段と、
パーティション番号とセグメント番号の下位ビットとバス番号との組み合わせに対応した複数のエントリを有すると共に、前記複数のエントリそれぞれに、そのエントリに対応するパーティション番号とセグメント番号の下位ビットとバス番号との組み合わせによって特定されるIOノードのノードIDが登録され、インデックス信号が入力されたとき、該インデックス信号によって示されるエントリに登録されているノードIDを出力するテーブルとを備え、且つ、
前記プロセッサノードに接続されたポート入力部が、それぞれ、
自ポート入力部に接続されたプロセッサノードが属するパーティションのパーティション番号が設定されたパーティション番号記憶部と、
自ポート入力部に接続されたプロセッサノードからアクセス先を示すアドレスフィールドを含んだアクセス要求が入力されたとき、前記アクセス要求のアクセス先が、前記マップ手段によって前記メモリ空間にマップされたコンフィグレーション空間であるか否かを判定し、アクセス先が前記コンフィグレーション空間であると判定した場合、前記アドレスフィールドに含まれている、アクセス対象デバイスが接続されているバスのバス番号と前記バスを配下に持つIOノードの割り当てられているコンフィグレーション空間のセグメント番号とをマージしたインデックス信号を出力する判定手段と、
該判定手段から出力されたインデックス信号に含まれているセグメント番号の上位ビットを前記パーティション番号記憶部に設定されているパーティション番号で置き換え、置き換え後のインデックス信号を前記テーブルに対して出力するインデックス切り替え回路と、
該インデックス切り替え回路から出力されたインデックス信号に応答して前記テーブルから出力されたノードIDを転送先に指定して、前記アクセス要求を前記クロスバースイッチに出力する出力手段とを備えたことを特徴とする。
【0019】
〔作用〕
マップ手段により複数のコンフィグレーション空間をメモリに割り当てておく。ノード制御装置内の判定手段は、プロセッサノードからアクセス先を示すアドレスフィールドを含んだアクセス要求が入力されると、そのアクセス先がマップ手段によってメモリ空間にマップされたコンフィグレーション空間であるか否かを判定する。そして、アクセス先がコンフィグレーション空間であった場合には、ノードID出力手段が、アクセス要求のアドレスフィールドに含まれている、アクセス対象デバイスが接続されているバスのバス番号および上記バスを配下に持つIOノードに割り当てられているコンフィグレーション空間のセグメント番号に基づいて、上記IOノードのノードIDを出力する。ルーティング手段は、アクセス要求を、ノードID出力手段から出力されたノードIDのIOノードへルーティングする。
【発明の効果】
【0020】
本発明によれば、バス番号のビット数を増加させることなく、多くのバスをサポートすることが可能になり、その結果、多くのIOデバイスを接続することが可能になる。その理由は、複数のコンフィグレーション空間をメモリ空間にマップすると共に、アクセス要求のアドレスフィールドに含まれているアクセス対象デバイスが接続されているバスのバス番号および上記バスを配下に持つIOノードに割り当てられているコンフィグレーション空間のセグメント番号に基づいて、上記アクセス対象デバイスが接続されているバスを配下に持つIOノードのノードIDを求め、このノードIDによって特定されるIOノードへアクセス要求をルーティングするようにしているからである。即ち、1つのコンフィグレーション空間でサポートできるバス数が、バス番号のビット数によって制限されていても、複数のコンフィグレーション空間をメモリ空間にマップしているので、サポート可能なバス数が増加し、その結果、多くのIOデバイスを接続することが可能になる。
【発明を実施するための最良の形態】
【0021】
次に、本発明を実施するための最良の形態について図面を参照して詳細に説明する。
【0022】
〔第1の実施の形態の構成の説明〕
図1に、本発明にかかる情報処理装置の第1の実施の形態の構成例を示す。図1の例では、16個のプロセッサノード100〜115と、8個のIOノード120〜127とが、4個のノード制御装置130〜133を介して接続され、ひとつの情報処理装置を構成する。各ノード制御装置130〜133には、インタフェース140〜155を介してそれぞれ4個のプロセッサノードが接続されると共に、インタフェース160〜167を介してそれぞれ2個のIOノードが接続される。4個のノード制御装置130〜133は、インタフェース134〜139を介して互いに1:1で接続する。図示しないが、プロセッサノード100〜115は、ひとつまたは複数のプロセッサと主記憶から構成される。もっと小規模な構成(例えば、プロセッサノード2個、ノード制御装置1個、IOノード2個の構成)や、もっと大規模の構成(例えば、プロセッサノード64個、IOノード32個、ノード制御装置16個の構成)の情報処理装置も実現可能である。
【0023】
図2に、IOノード120の構成の一例を示す。IOノード120は、1個のIO制御装置200と、4個のIOデバイス210〜213から構成される。IO制御装置200は、インタフェース160を介してノード制御装置130と接続される。また、IOデバイス210〜213は、それぞれインタフェース220〜223を介してIO制御装置200と接続される。インタフェース220〜223は、PCI−Express、PCI−XまたはPCIの仕様に準拠する。なお、他のIOノード121〜127もIOノード120と同様の構成を有する。
【0024】
図3に、ノード制御装置130の構成例を示す。このノード制御装置130は、9個のポート入力部300〜308と、9個のポート出力部310〜318と、クロスバースイッチ320とから構成される。ここで、一組のポート入力部とポート出力部をポートと定義する。例えばプロセッサノード100に接続するポートは、ポート入力部300とポート出力部310とから構成される。ノード制御装置130の9個のポートは、それぞれ、プロセッサノード100〜103、IOノード120〜121、ノード制御装置131〜133に接続する。なお、他のノード制御装置131〜133もノード制御装置130と同様の構成を有する。
【0025】
図5に、本実施の形態の情報処理装置における、コンフィグレーション空間のメモリ空間へのマップ方法について示す。ひとつのコンフィグレーション空間は256Mバイトであり、複数のコンフィグレーション空間はアドレス空間の一部の領域に連続してマップされる。図5は、N個(Nは2のべき乗)のコンフィグレーション空間を、ベースアドレス〜(ベースアドレス+サイズ−1)の領域にマップした例である。ここで、各コンフィグレーション空間は、PCIセグメント番号0〜Nで識別される。
【0026】
図6に、本実施の形態の情報処理装置における、情報の転送フォーマットの一例を示す。ここで、論理的な情報の転送単位をパケットと定義し、また、パケットはひとつ以上のフリットから構成されるものと定義する。フリットは固定のビット幅を持ち、本実施の形態では90ビット幅である。フリットには、ヘッダフリット、データフリットの2種類が存在し、図6は各フリットの転送フォーマットを示している。
【0027】
フリットのビット89:88はストローブであり、フリットが有効であること、およびフリットの種類を示す。ストローブが00(2進数)の場合はフリットが無効であることを示し、01(2進数)の場合はヘッダフリットであることを示し、10(2進数)の場合はデータフリットであることを示す。このコード定義は一例である。パケットは、1個のヘッダフリットと、0個、1個、2個、4個または8個のデータフリットから構成される。よって、本実施の形態のパケットは、最小では1個のフリットから構成され、最大では9個のフリットから構成される。
【0028】
ヘッダフリットのビット87:0には、それぞれ8ビットの5個のフィールドと48ビットのアドレスフィールドとが定義される。これらのフィールド定義は一例であり、情報処理装置のリソース、プロトコルおよびトポロジーに依存して決定される。
【0029】
コマンドコードは、例えばメモリリード、メモリライト、コンフィグレーションリード、コンフィグレーションライト、リプライといった、ターゲットの装置に対する動作を指定するコードが格納されるフィールドである。
【0030】
ソースノードIDは、パケットの転送元のプロセッサノードまたはIOノードを識別する固有の番号が格納されるフィールドである。
【0031】
ターゲットノードIDは、パケットの転送先のプロセッサノードまたはIOノードまたはノード制御装置を識別する固有の番号が格納されるフィールドである。
【0032】
データレングスは、リードリクエストの場合に、ターゲットのデータレングスをバイト単位で指定するフィールドである。00(16進数)〜40(16進数)の場合、0〜64バイトを指定する。
【0033】
アドレスは、リクエストのターゲットとなるアドレスを格納するフィールドである。
【0034】
データフリットのビット71:64には、バイトイネーブルが定義され、ビット63:0に定義される各バイトの有効または無効を指定する。データフリットのビット87:72は未定義である。
【0035】
なお、フリットには、故障からフリットの内容を保護するために、ECCやパリティが付加されるが、本発明とは直接関係しないので、その詳細は省略する。
【0036】
図7に、図6のヘッダフリットのアドレスフィールドに関する、コンフィグレーションアクセスを行う場合の詳細を示す。ビット47:28は、コンフィグレーション空間をマップするメモリ空間のベースアドレスとPCIセグメント番号の論理和である。ビット47:28は、プロセッサノードがパケットを発行する場合のみ有効であり、ノード制御装置がパケットを発行する場合はオール0に差し替えて発行される。ビット27:0は、PCI−Expressなどの仕様で定義されるフィールドに対応し、ビット27:20はバス番号、ビット19:15はデバイス番号、ビット14:12はファンクション番号、ビット11:8は拡張レジスタ番号、ビット7:0はレジスタアドレスである。これらのフィールド定義は一例であり、プロセッサノードおよびIO制御装置に依存する。
【0037】
図4に、図3に示すノード制御装置130のポート入力部300の詳細を示す。プロセッサノード100〜103が接続されるポート入力部300〜303は、同じ構成である。
【0038】
レジスタ400および401は、メモリ空間にマップされるコンフィグレーション空間のベースアドレスおよびサイズを指定する値を保持する。これらのレジスタは、システムの初期化時にシステムファームウェアまたはサービスプロセッサによって設定されるが、これらの設定に関する詳細な構成については、当業者にとってよく知られており、また本発明とは直接関係しないので省略する。
【0039】
レジスタ401は、4ビットの幅であり、メモリ空間にマップされるコンフィグレーション空間のサイズを指定する値を保持する。保持する値をn(n=0〜8)とすると、指定するサイズは、256Mバイト×(2のn乗)となる。ひとつのコンフィグレーション空間は256Mバイトなので、レジスタ401の値が0ならば1個のコンフィグレーション空間を指定し、値が1ならば2個のコンフィグレーション空間を指定し、値が8ならば256個のコンフィグレーション空間を指定する。
【0040】
レジスタ400は、例えば情報処理装置が48ビットのアドレス空間をサポートする場合、20ビットの幅であり、ビット19:0はメモリ空間のアドレスのビット47:28に対応する。レジスタ400の指定するベースアドレスは、レジスタ401が指定するサイズの示すアドレス境界に整列しなければならない。例えば、レジスタ401に設定する値が2で1Gバイトのサイズを示す場合、レジスタ400の最下位の2ビットは00(2進数)で1Gバイト境界に整列したベースアドレスを指定しなければならない。つまり、レジスタ401に設定する値をn(n=0〜8)とすると、レジスタ400の下位nビットは全て0でなければならない。
【0041】
テーブル402は、コンフィグレーション空間のPCIセグメント番号およびバス番号から、そのバスを配下に持つIOノード120〜127のノードIDを得るためのテーブルである。例えば、IOノード配下のバス番号を16個の粒度で指定する場合、PCIセグメント番号の8ビットと、バス番号の上位4ビットをマージした12ビットをインデックスとするため、テーブル402は4096個のエントリを持つ。本実施の形態では、PCIセグメント番号を8ビットとしているが、もっと大きくすることも小さくすることも可能である。例えば、サポートするコンフィグレーション空間の数が16個までならば、PCIセグメント番号は4ビットとなり、テーブル402のエントリ数を少なくすることができる。同様に、本実施の形態では、IOノード配下のバス番号を16個の粒度で指定しているが、もっと粗くすることも、細かくすることも可能である。例えば、4個の粒度で指定する場合、PCIセグメント番号とバス番号の上位6ビットでテーブル402のインデックスを行うことになる。インデックスが指定するエントリには、対応するバスを配下に持つIOノードのノード番号が設定される。このテーブル402は、システムの初期化時にシステムファームウェアまたはサービスプロセッサによって設定されるが、これらの設定に関する詳細な構成については、当業者にとってよく知られており、また本発明とは直接関係しないので省略する。インデックス信号412が指定するエントリに格納されている値が、ノードID信号414として出力される。
【0042】
コンフィグレーションアクセス検出回路403は、プロセッサノード100から入力するフリット信号330がヘッダフリットの場合(ストローブフィールドが01(2進数)の場合)に、ヘッダフリットのアドレスフィールドと、レジスタ400および401の値が示すアドレス領域との比較を行う。具体的には、レジスタ401の保持する値がn(n=0〜8)の場合、レジスタ400のビット19:nと、アドレスフィールドのビット47:(28+n)を比較する。一致結果信号413は、フリット信号330がヘッダフリットでかつ比較結果が一致した場合に1になり、それ以外の場合は0になる。コンフィグレーションアクセス検出回路403はまた、レジスタ401の保持する値がn(n=0〜8)の場合、アドレスのビット35:28の値と、(2のn乗)−1の値の論理積からPCIセグメント番号を算出し、アドレス27:24のバス番号の上位4ビットとマージして、インデックス信号412を出力する。例えば、レジスタ401の保持する値が4で、アドレスのビット35:20が1234(16進数)の場合、PCIセグメント番号は02(16進数)となり、バス番号の上位4ビットは3(16進数)なので、インデックス信号412は023(16進数)となる。
【0043】
コンフィグレーションフリット生成回路404は、プロセッサノード100から入力されたフリット信号330がヘッダフリットの場合に、アドレスフィールドのビット47:28をオール0に差し替え、ターゲットノードIDをテーブル402から入力するノードID信号414に差し替え、コマンドコードがメモリリードのコードならばコンフィグレーションリードのコードに差し替え、メモリライトのコードならばコンフィグレーションライトのコードに差し替えて、ヘッダフリット信号415として出力する。
【0044】
セレクタ405は、一致結果信号413が0ならばフリット信号330を選択し、一致結果信号413が1ならばヘッダフリット信号415を選択して、フリット信号340をクロスバースイッチ320へ出力する。
【0045】
本実施の形態では、レジスタ400、レジスタ401およびテーブル402は、ポート入力部300〜303に独立に実装しているが、設定される値は同じであるため、独立に参照できるならば、共用することも可能である。
【0046】
〔第1の実施の形態の動作の説明〕
次に、本実施の形態の動作について詳細に説明する。
【0047】
先ず、システムの初期化時に実施する設定について説明する。システムファームウェアは、IOノード120〜127に関して、PCIセグメント番号とバス番号とを割り当てる。例えば、IOノード120〜121はPCIセグメント番号0、IOノード122〜123はPCIセグメント番号1、IOノード124〜125はPCIセグメント番号2、IOノード126〜127はPCIセグメント番号3を割り当てる。また、それぞれのPCIセグメント番号において、IOノード120、122、124、126にはバス番号00〜7F(16進数)、IOノード121、123、125、127にはバス番号80〜FF(16進数)を割り当てる。
【0048】
次にシステムファームウェアは、空間をメモリにマップするコンフィグレーション空間のベースアドレスを決定し、各ノード制御装置130〜133に設けられているポート入力部300〜303内のレジスタ400に同じ値(ベースアドレス)をセットする。また、4個のコンフィグレーション空間を使用するため、各ポート入力部内のレジスタ401には2をセットする(サイズは1Gバイト)。ベースアドレスをFFFFC0000000(16進数)とすると、レジスタ400にはFFFFC(16進数)をセットする。
【0049】
さらに、システムファームウェアは、ノード制御装置130〜133のテーブル402に同じ値をセットする(ポート入力部300〜303にも同様にセットする)。図10に示すように、テーブル402のエントリ0〜7にはIOノード120のノードIDをセットし、エントリ8〜15にはIOノード121のノードIDをセットし、エントリ16〜23にはIOノード122のノードIDをセットし、エントリ24〜31にはIOノード123のノードIDをセットし、エントリ32〜39にはIOノード124のノードIDをセットし、エントリ40〜47にはIOノード125のノードIDをセットし、エントリ48〜55にはIOノード126のノードIDをセットし、エントリ56〜63にはIOノード127のノードIDをセットし、残りのエントリには何もセットしない(残りのエントリは使用しない)。これらの設定は、システムファームウェアの代わりにサービスプロセッサが行っても良い。
【0050】
次に、プロセッサノード100から、IOノード125配下のバス番号8F(16進数)のバスに接続されているIOデバイスに対して、コンフィグレーションリードを行う場合について説明する。ここで、IOノード125のPCIセグメント番号は2とする。
【0051】
プロセッサノード100内のプロセッサ上で動作するシステムファームウェアは、OSなどのソフトウェアからIOノード125配下のバス番号8F(16進数)のIOデバイスに対するコンフィグレーション空間のレジスタへのリード要求を受け取ると、初期化時にメモリ空間にマップしたアドレスをターゲットにしてメモリリードトランザクションを発行する。具体的には、図7のアドレスフォーマットにおいて、ビット47:28はベースアドレスのFFFFC(16進数)とPCIセグメント番号の02(16進数)の論理和であるFFFFE(16進数)とし、ビット27:20はバス番号の8F(16進数)とする。ビット19:0のデバイス番号、ファンクション番号、拡張レジスタ番号、レジスタアドレスに関しても、ソフトウェアからのリード要求に伴う情報とするが、詳細は省略する。システムファームウェアは、また、ソフトウェアから要求されたターゲットのデータレングスを付加してトランザクションを発行する。
【0052】
プロセッサノード100は、システムファームウェアからのメモリリードトランザクションを受け取ると、図6のヘッダフリットのフォーマットに関して、アドレスおよびデータレングスを受け取った値とし、ストローブを01(2進数)とし、コマンドコードをメモリリードのコードとし、ソースノードIDをプロセッサノード100のノードIDとし、ターゲットノードIDをノード制御装置130のノードIDとして、フリット信号330を発行する。ここで、トランザクションIDは、プロセッサノード100についてユニークな番号とする。
【0053】
プロセッサノード100からフリット信号330が入力されると、コンフィグレーションアクセス検出回路403は、入力したフリットのストローブフィールドが01(2進数)でヘッダフリットであるので、ヘッダフリットのアドレスフィールドと、レジスタ400および401の値が示すアドレス領域の比較を行う。レジスタ401の保持する値が2で、レジスタ400の保持する値がFFFFC(16進数)とすると、レジスタ400のビット19:2と、アドレスフィールドのビット47:30を比較するので、一致結果信号413が1になる。コンフィグレーションアクセス検出回路403は、また、レジスタ401の保持する値が2であるので、アドレスのビット35:28の値と、(2の2乗)−1の値の論理積からPCIセグメント番号を02(16進数)として算出し、アドレス27:24のバス番号8F(16進数)の上位4ビットとマージして、インデックス信号412を028(16進数)として出力する。
【0054】
テーブル402は、インデックス信号412として028(16進数)が入力されるので、エントリ40に格納されるIOノード125のノードIDを、ノードID信号414として出力する。
【0055】
コンフィグレーションフリット生成回路404は、プロセッサノード100から入力するフリット信号330がヘッダフリットであるので、アドレスフィールドのビット47:28をオール0に差し替え、ターゲットノードIDをテーブル402から入力するノードID信号414に差し替え、コマンドコードがメモリリードのコードなのでコンフィグレーションリードのコードに差し替えて、ヘッダフリット信号415として出力する。
【0056】
セレクタ405は、一致結果信号413が1なので、ヘッダフリット信号415を選択して、フリット信号340をクロスバースイッチ320へ出力する。
【0057】
クロスバースイッチ320は、ターゲットノードIDに従って、フリットをポート出力部317へ出力する。クロスバースイッチがターゲットノードIDに従って、出力先のポート出力部を決定する方法は、本発明とは直接関係しないので、その詳細は省略する。ポート出力部317から出力されたフリットは、ノード制御装置132を経由して、IOノード125へ出力され、IOノード125内に存在するターゲットのIOデバイスへ出力される。その後、ターゲットのIOデバイスからは、リプライデータがノード制御装置132および130を経由して、プロセッサノード100に返却される。
【0058】
〔第1の実施の形態の効果〕
本実施の形態によれば、バス番号のビット数を増加させることなく、多くのバスをサポートすることが可能になり、その結果、多くのIOデバイスを接続することが可能になる。
【0059】
その理由は、マップ手段であるレジスタ400、401を用いて複数のコンフィグレーション空間をメモリ空間にマップしておき、プロセッサノードからフリット信号(アクセス要求)が入力された場合は、判定手段であるコンフィグレーションアクセス検出回路403を用いてアクセス先がコンフィグレーション空間であるか否かを判定し、アクセス先がコンフィグレーション空間であった場合には、ノードID出力手段であるテーブル402を用いてアクセス対象デバイスが接続されているバスを配下に持つIOノードのノードIDを出力し、更に、ルーティング手段であるクロスバースイッチ320を用いてテーブル402から出力されたノードIDのIOノードへフリット信号をルーティングするようにしているからである。即ち、1つのコンフィグレーション空間でサポートできるバス数が、バス番号のビット数によって制限されていても、複数のコンフィグレーション空間をメモリ空間にマップしているので、サポート可能なバス数が増加し、その結果、多くのIOデバイスを接続することが可能になる。
【0060】
また、本実施の形態によれば、テーブル402のサイズを小さくすることが可能になる。その理由は、テーブル402に、セグメント番号とバス番号の上位ビットとの組み合わせに対応した複数のエントリを設けるようにしているからである。即ち、複数のバス番号に対して1つのエントリを割り当てるようにしているので、テーブル402のサイズを小さくすることが可能になる。
【0061】
〔第2の実施の形態の構成の説明〕
次に、本発明にかかる情報処理装置の第2の実施の形態について説明する。本実施の形態は、プロセッサノードおよびIOノードを複数のパーティションに分割して運用する場合についてのものである。この場合、各パーティションが必要とするコンフィグレーション空間の数は少なくなる。そこで本実施の形態では、アドレスフィールドからPCIセグメント番号をデコードして対応のIOノードへアクセス要求を転送する際に使用するテーブルに関して、テーブルを参照する際に使用するPCIセグメント番号の一部をパーティション番号に切り替える機能を設けることで、このテーブルに関するハードウェアを少なくする。
【0062】
図8に、図1の情報処理装置をパーティション800とパーティション801に分割した一例を示す。この例では2個のパーティションに分割しているが、更に細かく分割することも可能である。パーティション800とパーティション801では、独立のオペレーティングシステム(OS)が動作する。
【0063】
本実施の形態の基本的な構成は上記の通りであるが、ノード制御装置130〜133に関してさらに工夫している。ノード制御装置130の構成例を図9に示す。なお、他のノード制御装置131〜133も同様の構成を有している。
【0064】
ノード制御装置130にポート入力共通部900を設ける。ポート入力共通部900は、ポート入力部300〜303で共用するレジスタ901〜903およびテーブル904を含む。
【0065】
レジスタ902は、図4のレジスタ401と同じ機能を持ち、メモリ空間にマップされるコンフィグレーション空間のサイズを指定する。レジスタ902は4ビットの幅であり、保持する値をn(n=0〜8)とすると、指定するサイズは、256Mバイト×(2のn乗)となる。ひとつのコンフィグレーション空間は256Mバイトなので、レジスタ902の値が0ならば1個のコンフィグレーション空間を指定し、値が1ならば2個のコンフィグレーション空間を指定し、値が8ならば256個のコンフィグレーション空間を指定する。
【0066】
レジスタ901は、図4のレジスタ400と同じ機能を持ち、メモリ空間にマップされるコンフィグレーション空間のベースアドレスを指定する。レジスタ901は、例えば情報処理装置が48ビットのアドレス空間をサポートする場合、20ビットの幅であり、ビット19:0はメモリ空間のアドレスのビット47:28に対応する。レジスタ901の指定するベースアドレスは、レジスタ902の指定するサイズの示すアドレス境界に整列しなければならない。例えば、レジスタ902に設定する値が2で1Gバイトのサイズを示す場合、レジスタ901の最下位の2ビットは00(2進数)で1Gバイト境界に整列したベースアドレスを指定しなければならない。つまり、レジスタ902に設定する値がn(n=0〜8)とすると、レジスタ901の下位nビットは全て0でなければならない。
【0067】
レジスタ903は、1ビットのレジスタであり、インデックスの切り替えフラグを保持する。インデックス切り替え回路906において、インデックス切り替えを行わない場合は0を設定し、インデックス切り替えを行う場合は1を設定する。
【0068】
テーブル904は、インデックス信号920〜923から、対応するIOノード120〜127のノードIDを得るためのテーブルである。インデックス信号920が指定するエントリに格納する値がノードID信号930として出力され、インデックス信号921が指定するエントリに格納する値がノードID信号931として出力され、インデックス信号922が指定するエントリに格納する値がノードID信号932として出力され、インデックス信号923が指定するエントリに格納する値がノードID信号933として出力される。
【0069】
プロセッサノード100が接続されるポート入力部300は、コンフィグレーションアクセス検出回路403と、コンフィグレーションフリット生成回路404と、セレクタ405と、レジスタ905と、インデックス切り替え回路906とを含む。なお、他のプロセッサノード101〜103に接続されるポート入力部301〜303も同様の構成を有する。
【0070】
レジスタ905は、4ビットの幅であり、ポート入力部300に接続するプロセッサノード100の属するパーティション番号を指定する。
【0071】
コンフィグレーションアクセス検出回路403は、レジスタ902の保持する値がn(n=0〜8)の場合、アドレスのビット35:28の値と、(2のn乗)−1の値の論理積からPCIセグメント番号を算出し、アドレス27:24のバス番号の上位4ビットとマージして、インデックス信号941を出力する。
【0072】
インデックス切り替え回路906は、レジスタ903から出力されるインデックス切り替え信号910が0の場合は、コンフィグレーションアクセス検出回路403の出力するインデックス信号941をそのままインデックス信号920として出力し、インデックス切り替え信号910が1の場合は、インデックス信号941の上位4ビットをレジスタ905から入力するパーティション番号940に差し替えて、インデックス信号920として出力する。つまり、インデックス切り替え信号910が1の場合、インデックス信号920は、4ビットのパーティション番号と、PCIセグメント番号の下位4ビットと、バス番号の上位4ビットをマージした値となる。
【0073】
コンフィグレーションフリット生成回路404は、プロセッサノード100から入力するフリット信号330がヘッダフリットの場合に、アドレスフィールドのビット47:28をオール0に差し替え、ターゲットノードIDをテーブル904から入力するノードID信号930に差し替え、コマンドコードがメモリリードのコードならばコンフィグレーションリードのコードに差し替え、メモリライトのコードならばコンフィグレーションライトのコードに差し替えて、ヘッダフリット信号415として出力する。
【0074】
セレクタ405は、一致結果信号413が0ならばフリット信号330を選択し、一致結果信号413が1ならばヘッダフリット信号415を選択して、フリット信号340をクロスバースイッチ320へ出力する。
【0075】
レジスタ901、902、903、905およびテーブル904は、システムの初期化時にシステムファームウェアまたはサービスプロセッサによって設定されるが、これらの設定に関する詳細な構成については、当業者にとってよく知られており、また本発明とは直接関係しないので省略する。
【0076】
〔第2の実施の形態の動作の説明〕
次に、本実施の形態の動作について説明する。ここで、図8のパーティション800のパーティション番号を0、パーティション801のパーティション番号を1とする。
【0077】
まず、初期化時に実施する設定について説明する。
【0078】
システムファームウェアは、システムをパーティションに分割して使用する場合、ノード制御装置130〜133のレジスタ903を1に設定する。システムファームウェアは、システムをパーティションに分割せずに使用する場合は、レジスタ903を0に設定する。システムをパーティションに分割しない場合については、前述した第1の実施の形態と同じであるため説明を省略する。
【0079】
システムファームウェアは、ノード制御装置130〜133のポート入力部300〜303のレジスタ905に、そのポートに接続するプロセッサノードが属すパーティションの番号を設定する。具体的には、ノード制御装置130および131のポート入力部300および301のレジスタ905には0を設定し、ポート入力部302と303のレジスタ905には1を設定する。また、ノード制御装置132および133のポート入力部300〜303のレジスタ905には1を設定する。
【0080】
システムファームウェアは、メモリにマップするコンフィグレーション空間のベースアドレスおよびサイズを決定し、ノード制御装置130〜133のレジスタ901および902に同じ値をセットする。従って、コンフィグレーション空間をマップする領域は、パーティション800と801で共通となる。最大で4個のコンフィグレーション空間を使用するため、レジスタ902には2をセットする(サイズは1Gバイト)。ベースアドレスをFFFFC0000000(16進数)とすると、レジスタ901にはFFFFC(16進数)をセットする。
【0081】
システムファームウェアは、パーティション800のIOノード120、122に関して、PCIセグメント番号とバス番号を割り当てる。例えば、IOノード120および122ともPCIセグメント番号0を割り当て、IOノード120にはバス番号00〜7F(16進数)、IOノード122にはバス番号80〜FF(16進数)を割り当てる。
【0082】
また、システムファームウェアは、パーティション801のIOノード121、123〜127に関して、PCIセグメント番号とバス番号を割り当てる。例えば、IOノード121はPCIセグメント番号0、IOノード123はPCIセグメント番号1、IOノード124〜125はPCIセグメント番号2、IOノード126〜127はPCIセグメント番号3を割り当てる。また、それぞれのPCIセグメント番号において、IOノード121、123にはバス番号00〜FF(16進数)、IOノード124、126にはバス番号00〜7F(16進数)、IOノード125、127にはバス番号80〜FF(16進数)を割り当てる。
【0083】
さらに、システムファームウェアは、ノード制御装置130〜133のテーブル904に同じ値をセットする。図11に示すようにテーブル904のエントリ0〜255はパーティション800に対応し、エントリ256〜511はパーティション801に対応する。テーブル904のエントリ0〜7にはIOノード120のノードIDをセットし、エントリ8〜15にはIOノード122のノードIDをセットし、エントリ256〜271にはIOノード121のノードIDをセットし、エントリ272〜287にはIOノード123のノードIDをセットし、エントリ288〜295にはIOノード124のノードIDをセットし、エントリ296〜303にはIOノード125のノードIDをセットし、エントリ304〜311にはIOノード126のノードIDをセットし、エントリ312〜319にはIOノード127のノードIDをセットし、残りのエントリには何もセットしない(残りのエントリは使用しない)。
【0084】
これらの設定は、システムファームウェアの代わりにサービスプロセッサが行っても良い。
【0085】
次に、プロセッサノード102から、IOノード123配下のバス番号30(16進数)のバスに接続されているIOデバイスに対して、コンフィグレーションリードを行う場合について説明する。ここで、IOノード123のPCIセグメント番号は1とする。
【0086】
プロセッサノード102内のプロセッサ上で動作するシステムファームウェアは、OSなどのソフトウェアからIOノード123配下のバス番号30(16進数)のバスに接続されているIOデバイスに対するコンフィグレーション空間レジスタへのリード要求を受け取ると、初期化時にメモリ空間にマップしたアドレスをターゲットにしてメモリリードトランザクションを発行する。具体的には、図7のアドレスフィールドのフォーマットにおいて、ビット47:28はベースアドレスのFFFFC(16進数)とPCIセグメント番号の01(16進数)の論理和であるFFFFD(16進数)とし、ビット27:20はバス番号の30(16進数)とする。ビット19:0のデバイス番号、ファンクション番号、拡張レジスタ番号、レジスタアドレスに関しても、ソフトウェアからのリード要求に伴う情報とするが、詳細は省略する。システムファームウェアは、また、ソフトウェアから要求されたターゲットのデータレングスを付加してトランザクションを発行する。
【0087】
プロセッサノード102は、システムファームウェアからのメモリリードトランザクションを受け取ると、図6のヘッダフリットのフォーマットに関して、アドレスおよびデータレングスを受け取った値とし、ストローブを01(2進数)とし、コマンドコードをメモリリードのコードとし、ソースノードIDをプロセッサノード102のノードIDとし、ターゲットノードIDをノード制御装置130のノードIDとして、フリット信号332を発行する。ここで、トランザクションIDは、プロセッサノード102についてユニークな番号とする。
【0088】
プロセッサノード102からフリット信号332が入力されると、ポート入力部302のコンフィグレーションアクセス検出回路403は、入力したフリット信号332のストローブフィールドが01(2進数)でヘッダフリットであるので、ヘッダフリットのアドレスフィールドと、レジスタ901および902の値が示すアドレス領域の比較を行う。レジスタ902の保持する値が2で、レジスタ901の保持する値がFFFFC(16進数)とすると、レジスタ901のビット19:2と、アドレスフィールドのビット47:30を比較するので、一致結果信号413が1になる。また、コンフィグレーションアクセス検出回路403は、レジスタ902の保持する値が2であるので、アドレスのビット35:28の値と、(2の2乗)−1の値の論理積からPCIセグメント番号を01(16進数)として算出し、アドレス27:24のバス番号30(16進数)の上位4ビットとマージして、インデックス信号941を013(16進数)として出力する。
【0089】
インデックス切り替え回路906は、レジスタ903の出力が1であるので、インデックス信号941の上位4ビットをレジスタ905の値1に差し替えて、113(16進数)の値でインデックス信号922を出力する。
【0090】
テーブル904は、インデックス信号922として113(16進数)が入力されるので、エントリ275に格納されるIOノード123のノードIDを、ノードID信号932として出力する。
【0091】
コンフィグレーションフリット生成回路404は、プロセッサノード102から入力されるフリット信号332がヘッダフリットであるので、アドレスフィールドのビット47:28をオール0に差し替え、ターゲットノードIDをテーブル904から入力するノードID信号932に差し替え、コマンドコードがメモリリードのコードなのでコンフィグレーションリードのコードに差し替えて、ヘッダフリット信号415として出力する。
【0092】
セレクタ405は、一致結果信号413が1なので、ヘッダフリット信号415を選択して、フリット信号342をクロスバースイッチ320へ出力する。
【0093】
クロスバースイッチ320は、ターゲットノードIDに従って、フリットをポート出力部316へ出力する。クロスバースイッチがターゲットノードIDに従って、出力先のポート出力部を決定する方法は、本発明とは直接関係しないので、その詳細は省略する。ポート出力部316から出力されたフリットは、ノード制御装置131を経由して、IOノード123へ出力され、IOノード123内に存在するターゲットのIOデバイスへ出力される。その後、ターゲットのIOデバイスからは、リプライデータがノード制御装置131および130を経由して、プロセッサノード102に返却される。
【0094】
〔第2の実施の形態の効果〕
このように、本実施の形態では、情報処理装置を複数のパーティションに分割して運用する場合に、パーティション毎にテーブルを設ける必要がなく、ハードウェアを少なくすることができるという効果が得られる。
【0095】
その理由は、パーティション番号とセグメント番号の下位ビットとバス番号との組み合わせに対応した複数のエントリを有すると共に、各エントリそれぞれに、そのエントリに対応するパーティション番号とセグメント番号の下位ビットとバス番号との組み合わせによって特定されるIOノードのノードIDが登録されたテーブル904を備えると共に、テーブル904に対するインデックス信号941に含まれているセグメント番号の上位ビットを、フリット信号を出力したプロセッサノードが属しているパーティションのパーティション番号に置き換えるインデックス切り替え回路906を備えているからである。
【産業上の利用可能性】
【0096】
複数のIOノードを備え、多くのIOデバイスを接続する情報処理装置に適用すると好適である。
【図面の簡単な説明】
【0097】
【図1】本発明にかかる情報処理装置の第1の実施の形態の構成例を示すブロック図である。
【図2】IOノード120の構成例を示すブロック図である。
【図3】ノード制御装置130の構成例を示すブロック図である。
【図4】第1の実施の形態にかかるポート入力部300の構成例を示すブロック図である。
【図5】アドレス空間に複数のコンフィグレーション空間をマップした様子を示した図である。
【図6】フリット信号のフォーマットを示す図である。
【図7】コンフィグレーションアクセスを行う場合のアドレスフィールドのフォーマットを示す図である。
【図8】本発明にかかる情報処理装置の第2の実施の形態の構成例を示すブロック図である。
【図9】第2の実施の形態にかかるノード制御装置130の構成例を示すブロック図である。
【図10】テーブル402の内容例を示す図である。
【図11】テーブル904の内容例を示す図である。
【符号の説明】
【0098】
100〜115…プロセッサノード
120〜127…IOノード
200…IO制御装置
210〜213…IOデバイス
130〜133…ノード制御装置
300〜308…ポート入力部
400、401…レジスタ
402…テーブル
403…コンフィグレーションアクセス検出回路
404…コンフィグレーションフリット生成回路
405…セレクタ
310〜318…ポート出力部
320…クロスバースイッチ
800、801…パーティション
900…ポート入力共通部
901〜903、905…レジスタ
904…テーブル
906…インデックス切り替え回路
【特許請求の範囲】
【請求項1】
複数のコンフィグレーション空間をメモリ空間にマップするマップ手段と、
アクセス先を示すアドレスフィールドを含んだアクセス要求がプロセッサノードから入力されたとき、前記アクセス要求のアクセス先が、前記マップ手段によってメモリ空間にマップされたコンフィグレーション空間であるか否かを判定する判定手段と、
該判定手段によって前記アクセス要求のアクセス先がコンフィグレーション空間であると判定された場合、前記アクセス要求のアドレスフィールドに含まれている、アクセス対象デバイスが接続されているバスのバス番号および前記バスを配下に持つIOノードに割り当てられているコンフィグレーション空間のセグメント番号に基づいて、前記アクセス対象デバイスが接続されているバスを配下に持つIOノードのノードIDを出力するノードID出力手段と、
前記アクセス要求を、前記ノードID出力手段から出力されたノードIDのIOノードへルーティングするルーティング手段とを備えたことを特徴とするノード制御装置。
【請求項2】
請求項1記載のノード制御装置において、
前記マップ手段が、
前記コンフィグレーション空間のベースアドレスが設定される第1のレジスタと、
前記コンフィグレーション空間のサイズに関するサイズ情報が設定される第2のレジスタとを備えたことを特徴とするノード制御装置。
【請求項3】
請求項2記載のノード制御装置において、
前記第2のレジスタには、サイズ情報として前記メモリ空間にマップしたコンフィグレーション空間の個数が設定されることを特徴とするノード制御装置。
【請求項4】
請求項2または3記載のノード制御装置において、
前記判定手段が、前記第1のレジスタの内容、前記第2のレジスタの内容および前記アドレスフィールドの内容に基づいて、前記アクセス要求のアクセス先が前記コンフィグレーション空間であるか否かを判定することを特徴とするノード制御装置。
【請求項5】
請求項3記載のノード制御装置において、
アクセス先を前記コンフィグレーション空間とするアクセス要求のアドレスフィールドには、その所定ビット範囲に前記コンフィグレーション空間のベースアドレスが設定され、且つ、
前記判定手段が、前記第1のレジスタの最上位ビットから前記第2のレジスタに設定されている個数に応じたビット位置までに設定されている値と、入力されたアクセス要求における前記所定ビット範囲の最上位ビットから前記第2のレジスタに設定されている個数に応じたビット位置までに設定されている値とが等しいか否かに基づいて、前記アクセス要求のアクセス先がコンフィグレーション空間であるか否かを判定することを特徴とするノード制御装置。
【請求項6】
請求項1記載のノード制御装置において、
前記ノードID出力手段が、
セグメント番号とバス番号との組み合わせに対応した複数のエントリを有すると共に、前記複数のエントリそれぞれに、そのエントリに対応するセグメント番号とバス番号との組み合わせによって特定されるIOノードのノードIDが登録され、前記判定手段でコンフィグレーション空間へのアクセスであると判定された場合、前記アクセス要求中のセグメント番号とバス番号との組み合わせに対応したエントリに登録されているノードIDを出力するテーブルを備えていることを特徴とするノード制御装置。
【請求項7】
請求項6記載のノード制御装置において、
前記テーブルが、前記セグメント番号と前記バス番号の上位ビットとの組み合わせに対応した複数のエントリを有することを特徴とするノード制御装置。
【請求項8】
請求項2記載のノード制御装置において、
自装置に接続されるプロセッサノード毎に、前記判定手段、前記ノードID出力手段および前記ルーティング手段を備え、且つ、
前記プロセッサノード毎の判定手段が、前記第1のレジスタおよび第2のレジスタを共用することを特徴とするノード制御装置。
【請求項9】
請求項4記載のノード制御装置において、
前記メモリ空間にマップされた複数のコンフィグレーション空間を複数のパーティションで分割して使用する場合は、前記テーブルに代えて、
セグメント番号とバス番号とパーティション番号の組み合わせに対応した複数のエントリを有すると共に、前記複数のエントリそれぞれに、そのエントリに対応するセグメント番号とバス番号とパーティション番号との組み合わせによって特定されるIOノードのノードIDが登録され、前記判定手段でコンフィグレーション空間へのアクセスであると判定された場合、前記アクセス要求を出力したプロセッサノードが属するパーティションのパーティション番号と前記アクセス要求中のセグメント番号とバス番号との組み合わせに対応したエントリに登録されているノードIDを出力するテーブルを使用することを特徴とするノード制御装置。
【請求項10】
複数のコンフィグレーション空間をメモリ空間にマップするマップ手段と、
アクセス先を示すアドレスフィールドを含んだアクセス要求がプロセッサノードから入力されたとき、前記アクセス要求のアクセス先が、前記マップ手段によってメモリ空間にマップされたコンフィグレーション空間であるか否かを判定し、アクセス先が前記コンフィグレーション空間であると判定した場合、前記アドレスフィールドに含まれている、アクセス対象デバイスが接続されているバスのバス番号と前記バスを配下に持つIOノードに割り当てられているコンフィグレーション空間のセグメント番号とをマージしたインデックス信号を出力する判定手段と、
該判定手段から出力されたインデックス信号に含まれているセグメント番号の上位ビットを前記プロセッサノードが属しているパーティションのパーティション番号で置き換え、置き換え後のインデックス信号を出力するインデックス切り替え回路と、
パーティション番号とセグメント番号の下位ビットとバス番号との組み合わせに対応した複数のエントリを有すると共に、前記複数のエントリそれぞれに、そのエントリに対応するパーティション番号とセグメント番号の下位ビットとバス番号との組み合わせによって特定されるIOノードのノードIDが登録され、前記インデックス切り替え回路から出力されたインデックス信号によって示されるエントリに登録されているノードIDを出力するテーブルと、
前記アクセス要求を前記テーブルから出力されたノードIDのIOノードへルーティングするルーティング手段とを備えたことを特徴とするノード制御装置。
【請求項11】
請求項1乃至10の何れか1項に記載のノード制御装置において、
前記コンフィグレーション空間が、PCI仕様で定義されたコンフィグレーション空間であることを特徴とするノード制御装置。
【請求項12】
複数のノード制御装置が互いに接続され、且つ、各ノード制御装置にそれぞれプロセッサノードとIOノードとが接続された情報処理装置であって、
前記各ノード制御装置が、それぞれ、
自装置に接続されたノード制御装置毎のポート入力部およびポート出力部と、
自装置に接続されたプロセッサノード毎のポート入力部およびポート出力部と、
自装置に接続されたIOノード毎のポート入力部およびポート出力部と、
前記各ポート入力部と前記各ポート出力部とを接続するクロスバースイッチとを備え、且つ、
前記プロセッサノードが接続されたポート入力部が、それぞれ、
複数のコンフィグレーション空間をメモリ空間にマップするマップ手段と、
自ポート入力部に接続されたプロセッサノードからアクセス先を示すアドレスフィールドを含んだアクセス要求が入力されたとき、前記アクセス要求のアクセス先が、前記マップ手段によってメモリ空間にマップされたコンフィグレーション空間であるか否かを判定する判定手段と、
該判定手段によって前記アクセス要求のアクセス先が前記コンフィグレーション空間であると判定された場合、前記アクセス要求のアドレスフィールドに含まれている、アクセス対象デバイスが接続されているバスのバス番号および前記バスを配下に持つIOノードに割り当てられているコンフィグレーション空間のセグメント番号に基づいて、前記アクセス対象デバイスが接続されているバスを配下に持つIOノードのノードIDを出力するノードID出力手段と、
該ノードID出力手段から出力されたノードIDを転送先に指定して前記アクセス要求を前記クロスバースイッチに対して出力する出力手段とを備えたことを特徴とする情報処理装置。
【請求項13】
複数のノード制御装置が互いに接続され、且つ、各ノード制御装置にそれぞれプロセッサノードとIOノードとが接続された情報処理装置であって、
前記各ノード制御装置が、それぞれ、
自装置に接続されたノード制御装置毎のポート入力部およびポート出力部と、
自装置に接続されたプロセッサノード毎のポート入力部およびポート出力部と、
自装置に接続されたIOノード毎のポート入力部およびポート出力部と、
前記各ポート入力部と前記各ポート出力部とを接続するクロスバースイッチと、
複数のコンフィグレーション空間をメモリ空間にマップするマップ手段と、
パーティション番号とセグメント番号の下位ビットとバス番号との組み合わせに対応した複数のエントリを有すると共に、前記複数のエントリそれぞれに、そのエントリに対応するパーティション番号とセグメント番号の下位ビットとバス番号との組み合わせによって特定されるIOノードのノードIDが登録され、インデックス信号が入力されたとき、該インデックス信号によって示されるエントリに登録されているノードIDを出力するテーブルとを備え、且つ、
前記プロセッサノードに接続されたポート入力部が、それぞれ、
自ポート入力部に接続されたプロセッサノードが属するパーティションのパーティション番号が設定されたパーティション番号記憶部と、
自ポート入力部に接続されたプロセッサノードからアクセス先を示すアドレスフィールドを含んだアクセス要求が入力されたとき、前記アクセス要求のアクセス先が、前記マップ手段によってメモリ空間にマップされたコンフィグレーション空間であるか否かを判定し、アクセス先が前記コンフィグレーション空間であると判定した場合、前記アドレスフィールドに含まれている、アクセス対象デバイスが接続されているバスのバス番号と前記バスを配下に持つIOノードに割り当てられているコンフィグレーション空間のセグメント番号とをマージしたインデックス信号を出力する判定手段と、
該判定手段から出力されたインデックス信号に含まれているセグメント番号の上位ビットを前記パーティション番号記憶部に設定されているパーティション番号で置き換え、置き換え後のインデックス信号を前記テーブルに対して出力するインデックス切り替え回路と、
該インデックス切り替え回路から出力されたインデックス信号に応答して前記テーブルから出力されたノードIDを転送先に指定して、前記アクセス要求を前記クロスバースイッチに出力する出力手段とを備えたことを特徴とする情報処理装置。
【請求項1】
複数のコンフィグレーション空間をメモリ空間にマップするマップ手段と、
アクセス先を示すアドレスフィールドを含んだアクセス要求がプロセッサノードから入力されたとき、前記アクセス要求のアクセス先が、前記マップ手段によってメモリ空間にマップされたコンフィグレーション空間であるか否かを判定する判定手段と、
該判定手段によって前記アクセス要求のアクセス先がコンフィグレーション空間であると判定された場合、前記アクセス要求のアドレスフィールドに含まれている、アクセス対象デバイスが接続されているバスのバス番号および前記バスを配下に持つIOノードに割り当てられているコンフィグレーション空間のセグメント番号に基づいて、前記アクセス対象デバイスが接続されているバスを配下に持つIOノードのノードIDを出力するノードID出力手段と、
前記アクセス要求を、前記ノードID出力手段から出力されたノードIDのIOノードへルーティングするルーティング手段とを備えたことを特徴とするノード制御装置。
【請求項2】
請求項1記載のノード制御装置において、
前記マップ手段が、
前記コンフィグレーション空間のベースアドレスが設定される第1のレジスタと、
前記コンフィグレーション空間のサイズに関するサイズ情報が設定される第2のレジスタとを備えたことを特徴とするノード制御装置。
【請求項3】
請求項2記載のノード制御装置において、
前記第2のレジスタには、サイズ情報として前記メモリ空間にマップしたコンフィグレーション空間の個数が設定されることを特徴とするノード制御装置。
【請求項4】
請求項2または3記載のノード制御装置において、
前記判定手段が、前記第1のレジスタの内容、前記第2のレジスタの内容および前記アドレスフィールドの内容に基づいて、前記アクセス要求のアクセス先が前記コンフィグレーション空間であるか否かを判定することを特徴とするノード制御装置。
【請求項5】
請求項3記載のノード制御装置において、
アクセス先を前記コンフィグレーション空間とするアクセス要求のアドレスフィールドには、その所定ビット範囲に前記コンフィグレーション空間のベースアドレスが設定され、且つ、
前記判定手段が、前記第1のレジスタの最上位ビットから前記第2のレジスタに設定されている個数に応じたビット位置までに設定されている値と、入力されたアクセス要求における前記所定ビット範囲の最上位ビットから前記第2のレジスタに設定されている個数に応じたビット位置までに設定されている値とが等しいか否かに基づいて、前記アクセス要求のアクセス先がコンフィグレーション空間であるか否かを判定することを特徴とするノード制御装置。
【請求項6】
請求項1記載のノード制御装置において、
前記ノードID出力手段が、
セグメント番号とバス番号との組み合わせに対応した複数のエントリを有すると共に、前記複数のエントリそれぞれに、そのエントリに対応するセグメント番号とバス番号との組み合わせによって特定されるIOノードのノードIDが登録され、前記判定手段でコンフィグレーション空間へのアクセスであると判定された場合、前記アクセス要求中のセグメント番号とバス番号との組み合わせに対応したエントリに登録されているノードIDを出力するテーブルを備えていることを特徴とするノード制御装置。
【請求項7】
請求項6記載のノード制御装置において、
前記テーブルが、前記セグメント番号と前記バス番号の上位ビットとの組み合わせに対応した複数のエントリを有することを特徴とするノード制御装置。
【請求項8】
請求項2記載のノード制御装置において、
自装置に接続されるプロセッサノード毎に、前記判定手段、前記ノードID出力手段および前記ルーティング手段を備え、且つ、
前記プロセッサノード毎の判定手段が、前記第1のレジスタおよび第2のレジスタを共用することを特徴とするノード制御装置。
【請求項9】
請求項4記載のノード制御装置において、
前記メモリ空間にマップされた複数のコンフィグレーション空間を複数のパーティションで分割して使用する場合は、前記テーブルに代えて、
セグメント番号とバス番号とパーティション番号の組み合わせに対応した複数のエントリを有すると共に、前記複数のエントリそれぞれに、そのエントリに対応するセグメント番号とバス番号とパーティション番号との組み合わせによって特定されるIOノードのノードIDが登録され、前記判定手段でコンフィグレーション空間へのアクセスであると判定された場合、前記アクセス要求を出力したプロセッサノードが属するパーティションのパーティション番号と前記アクセス要求中のセグメント番号とバス番号との組み合わせに対応したエントリに登録されているノードIDを出力するテーブルを使用することを特徴とするノード制御装置。
【請求項10】
複数のコンフィグレーション空間をメモリ空間にマップするマップ手段と、
アクセス先を示すアドレスフィールドを含んだアクセス要求がプロセッサノードから入力されたとき、前記アクセス要求のアクセス先が、前記マップ手段によってメモリ空間にマップされたコンフィグレーション空間であるか否かを判定し、アクセス先が前記コンフィグレーション空間であると判定した場合、前記アドレスフィールドに含まれている、アクセス対象デバイスが接続されているバスのバス番号と前記バスを配下に持つIOノードに割り当てられているコンフィグレーション空間のセグメント番号とをマージしたインデックス信号を出力する判定手段と、
該判定手段から出力されたインデックス信号に含まれているセグメント番号の上位ビットを前記プロセッサノードが属しているパーティションのパーティション番号で置き換え、置き換え後のインデックス信号を出力するインデックス切り替え回路と、
パーティション番号とセグメント番号の下位ビットとバス番号との組み合わせに対応した複数のエントリを有すると共に、前記複数のエントリそれぞれに、そのエントリに対応するパーティション番号とセグメント番号の下位ビットとバス番号との組み合わせによって特定されるIOノードのノードIDが登録され、前記インデックス切り替え回路から出力されたインデックス信号によって示されるエントリに登録されているノードIDを出力するテーブルと、
前記アクセス要求を前記テーブルから出力されたノードIDのIOノードへルーティングするルーティング手段とを備えたことを特徴とするノード制御装置。
【請求項11】
請求項1乃至10の何れか1項に記載のノード制御装置において、
前記コンフィグレーション空間が、PCI仕様で定義されたコンフィグレーション空間であることを特徴とするノード制御装置。
【請求項12】
複数のノード制御装置が互いに接続され、且つ、各ノード制御装置にそれぞれプロセッサノードとIOノードとが接続された情報処理装置であって、
前記各ノード制御装置が、それぞれ、
自装置に接続されたノード制御装置毎のポート入力部およびポート出力部と、
自装置に接続されたプロセッサノード毎のポート入力部およびポート出力部と、
自装置に接続されたIOノード毎のポート入力部およびポート出力部と、
前記各ポート入力部と前記各ポート出力部とを接続するクロスバースイッチとを備え、且つ、
前記プロセッサノードが接続されたポート入力部が、それぞれ、
複数のコンフィグレーション空間をメモリ空間にマップするマップ手段と、
自ポート入力部に接続されたプロセッサノードからアクセス先を示すアドレスフィールドを含んだアクセス要求が入力されたとき、前記アクセス要求のアクセス先が、前記マップ手段によってメモリ空間にマップされたコンフィグレーション空間であるか否かを判定する判定手段と、
該判定手段によって前記アクセス要求のアクセス先が前記コンフィグレーション空間であると判定された場合、前記アクセス要求のアドレスフィールドに含まれている、アクセス対象デバイスが接続されているバスのバス番号および前記バスを配下に持つIOノードに割り当てられているコンフィグレーション空間のセグメント番号に基づいて、前記アクセス対象デバイスが接続されているバスを配下に持つIOノードのノードIDを出力するノードID出力手段と、
該ノードID出力手段から出力されたノードIDを転送先に指定して前記アクセス要求を前記クロスバースイッチに対して出力する出力手段とを備えたことを特徴とする情報処理装置。
【請求項13】
複数のノード制御装置が互いに接続され、且つ、各ノード制御装置にそれぞれプロセッサノードとIOノードとが接続された情報処理装置であって、
前記各ノード制御装置が、それぞれ、
自装置に接続されたノード制御装置毎のポート入力部およびポート出力部と、
自装置に接続されたプロセッサノード毎のポート入力部およびポート出力部と、
自装置に接続されたIOノード毎のポート入力部およびポート出力部と、
前記各ポート入力部と前記各ポート出力部とを接続するクロスバースイッチと、
複数のコンフィグレーション空間をメモリ空間にマップするマップ手段と、
パーティション番号とセグメント番号の下位ビットとバス番号との組み合わせに対応した複数のエントリを有すると共に、前記複数のエントリそれぞれに、そのエントリに対応するパーティション番号とセグメント番号の下位ビットとバス番号との組み合わせによって特定されるIOノードのノードIDが登録され、インデックス信号が入力されたとき、該インデックス信号によって示されるエントリに登録されているノードIDを出力するテーブルとを備え、且つ、
前記プロセッサノードに接続されたポート入力部が、それぞれ、
自ポート入力部に接続されたプロセッサノードが属するパーティションのパーティション番号が設定されたパーティション番号記憶部と、
自ポート入力部に接続されたプロセッサノードからアクセス先を示すアドレスフィールドを含んだアクセス要求が入力されたとき、前記アクセス要求のアクセス先が、前記マップ手段によってメモリ空間にマップされたコンフィグレーション空間であるか否かを判定し、アクセス先が前記コンフィグレーション空間であると判定した場合、前記アドレスフィールドに含まれている、アクセス対象デバイスが接続されているバスのバス番号と前記バスを配下に持つIOノードに割り当てられているコンフィグレーション空間のセグメント番号とをマージしたインデックス信号を出力する判定手段と、
該判定手段から出力されたインデックス信号に含まれているセグメント番号の上位ビットを前記パーティション番号記憶部に設定されているパーティション番号で置き換え、置き換え後のインデックス信号を前記テーブルに対して出力するインデックス切り替え回路と、
該インデックス切り替え回路から出力されたインデックス信号に応答して前記テーブルから出力されたノードIDを転送先に指定して、前記アクセス要求を前記クロスバースイッチに出力する出力手段とを備えたことを特徴とする情報処理装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【公開番号】特開2008−181389(P2008−181389A)
【公開日】平成20年8月7日(2008.8.7)
【国際特許分類】
【出願番号】特願2007−14982(P2007−14982)
【出願日】平成19年1月25日(2007.1.25)
【出願人】(000168285)エヌイーシーコンピュータテクノ株式会社 (572)
【Fターム(参考)】
【公開日】平成20年8月7日(2008.8.7)
【国際特許分類】
【出願日】平成19年1月25日(2007.1.25)
【出願人】(000168285)エヌイーシーコンピュータテクノ株式会社 (572)
【Fターム(参考)】
[ Back to top ]