(57)【要約】【課題】バス番号のビット数が仕様で定義されているPCIバス等を使用する場合であっても、バス番号のビット数によって制限される本数以上のバスを使用できるようにする。【解決手段】レジスタ400,401にコンフィグレーション空間のベースアドレス、サイズを設定することにより、メモリ空間に複数のコンフィグレーション空間をマップする。コンフィグレーションアクセス検出回路403は、フリット信号330に含まれている、アクセス対象デバイスが接続されているバスのバス番号と上記バスを配下に持つIOノードに割り当てられているコンフィグレーション空間のセグメント番号とをマージしたインデックス信号412を出力する。テーブル402は、インデックス信号412に対応するエントリに格納されているIOノード（上記バスを配下に持つIOノード）のノードIDを出力し、クロスバースイッチ320は、フリット信号330を上記ノードIDのIOノードへルーティングする。【選択図】図４
2008181389.tif 000002
【特許請求の範囲】
【請求項１】
複数のコンフィグレーション空間をメモリ空間にマップするマップ手段と、
アクセス先を示すアドレスフィールドを含んだアクセス要求がプロセッサノードから入力されたとき、前記アクセス要求のアクセス先が、前記マップ手段によってメモリ空間にマップされたコンフィグレーション空間であるか否かを判定する判定手段と、
該判定手段によって前記アクセス要求のアクセス先がコンフィグレーション空間であると判定された場合、前記アクセス要求のアドレスフィールドに含まれている、アクセス対象デバイスが接続されているバスのバス番号および前記バスを配下に持つＩＯノードに割り当てられているコンフィグレーション空間のセグメント番号に基づいて、前記アクセス対象デバイスが接続されているバスを配下に持つＩＯノードのノードＩＤを出力するノードＩＤ出力手段と、
前記アクセス要求を、前記ノードＩＤ出力手段から出力されたノードＩＤのＩＯノードへルーティングするルーティング手段とを備えたことを特徴とするノード制御装置。
【請求項２】
請求項１記載のノード制御装置において、
前記マップ手段が、
前記コンフィグレーション空間のベースアドレスが設定される第１のレジスタと、
前記コンフィグレーション空間のサイズに関するサイズ情報が設定される第２のレジスタとを備えたことを特徴とするノード制御装置。
【請求項３】
請求項２記載のノード制御装置において、
前記第２のレジスタには、サイズ情報として前記メモリ空間にマップしたコンフィグレーション空間の個数が設定されることを特徴とするノード制御装置。
【請求項４】
請求項２または３記載のノード制御装置において、
前記判定手段が、前記第１のレジスタの内容、前記第２のレジスタの内容および前記アドレスフィールドの内容に基づいて、前記アクセス要求のアクセス先が前記コンフィグレーション空間であるか否かを判定することを特徴とするノード制御装置。
【請求項５】
請求項３記載のノード制御装置において、
アクセス先を前記コンフィグレーション空間とするアクセス要求のアドレスフィールドには、その所定ビット範囲に前記コンフィグレーション空間のベースアドレスが設定され、且つ、
前記判定手段が、前記第１のレジスタの最上位ビットから前記第２のレジスタに設定されている個数に応じたビット位置までに設定されている値と、入力されたアクセス要求における前記所定ビット範囲の最上位ビットから前記第２のレジスタに設定されている個数に応じたビット位置までに設定されている値とが等しいか否かに基づいて、前記アクセス要求のアクセス先がコンフィグレーション空間であるか否かを判定することを特徴とするノード制御装置。
【請求項６】
請求項１記載のノード制御装置において、
前記ノードＩＤ出力手段が、
セグメント番号とバス番号との組み合わせに対応した複数のエントリを有すると共に、前記複数のエントリそれぞれに、そのエントリに対応するセグメント番号とバス番号との組み合わせによって特定されるＩＯノードのノードＩＤが登録され、前記判定手段でコンフィグレーション空間へのアクセスであると判定された場合、前記アクセス要求中のセグメント番号とバス番号との組み合わせに対応したエントリに登録されているノードＩＤを出力するテーブルを備えていることを特徴とするノード制御装置。
【請求項７】
請求項６記載のノード制御装置において、
前記テーブルが、前記セグメント番号と前記バス番号の上位ビットとの組み合わせに対応した複数のエントリを有することを特徴とするノード制御装置。
【請求項８】
請求項２記載のノード制御装置において、
自装置に接続されるプロセッサノード毎に、前記判定手段、前記ノードＩＤ出力手段および前記ルーティング手段を備え、且つ、
前記プロセッサノード毎の判定手段が、前記第１のレジスタおよび第２のレジスタを共用することを特徴とするノード制御装置。
【請求項９】
請求項４記載のノード制御装置において、
前記メモリ空間にマップされた複数のコンフィグレーション空間を複数のパーティションで分割して使用する場合は、前記テーブルに代えて、
セグメント番号とバス番号とパーティション番号の組み合わせに対応した複数のエントリを有すると共に、前記複数のエントリそれぞれに、そのエントリに対応するセグメント番号とバス番号とパーティション番号との組み合わせによって特定されるＩＯノードのノードＩＤが登録され、前記判定手段でコンフィグレーション空間へのアクセスであると判定された場合、前記アクセス要求を出力したプロセッサノードが属するパーティションのパーティション番号と前記アクセス要求中のセグメント番号とバス番号との組み合わせに対応したエントリに登録されているノードＩＤを出力するテーブルを使用することを特徴とするノード制御装置。
【請求項１０】
複数のコンフィグレーション空間をメモリ空間にマップするマップ手段と、
アクセス先を示すアドレスフィールドを含んだアクセス要求がプロセッサノードから入力されたとき、前記アクセス要求のアクセス先が、前記マップ手段によってメモリ空間にマップされたコンフィグレーション空間であるか否かを判定し、アクセス先が前記コンフィグレーション空間であると判定した場合、前記アドレスフィールドに含まれている、アクセス対象デバイスが接続されているバスのバス番号と前記バスを配下に持つＩＯノードに割り当てられているコンフィグレーション空間のセグメント番号とをマージしたインデックス信号を出力する判定手段と、
該判定手段から出力されたインデックス信号に含まれているセグメント番号の上位ビットを前記プロセッサノードが属しているパーティションのパーティション番号で置き換え、置き換え後のインデックス信号を出力するインデックス切り替え回路と、
パーティション番号とセグメント番号の下位ビットとバス番号との組み合わせに対応した複数のエントリを有すると共に、前記複数のエントリそれぞれに、そのエントリに対応するパーティション番号とセグメント番号の下位ビットとバス番号との組み合わせによって特定されるＩＯノードのノードＩＤが登録され、前記インデックス切り替え回路から出力されたインデックス信号によって示されるエントリに登録されているノードＩＤを出力するテーブルと、
前記アクセス要求を前記テーブルから出力されたノードＩＤのＩＯノードへルーティングするルーティング手段とを備えたことを特徴とするノード制御装置。
【請求項１１】
請求項１乃至１０の何れか１項に記載のノード制御装置において、
前記コンフィグレーション空間が、ＰＣＩ仕様で定義されたコンフィグレーション空間であることを特徴とするノード制御装置。
【請求項１２】
複数のノード制御装置が互いに接続され、且つ、各ノード制御装置にそれぞれプロセッサノードとＩＯノードとが接続された情報処理装置であって、
前記各ノード制御装置が、それぞれ、
自装置に接続されたノード制御装置毎のポート入力部およびポート出力部と、
自装置に接続されたプロセッサノード毎のポート入力部およびポート出力部と、
自装置に接続されたＩＯノード毎のポート入力部およびポート出力部と、
前記各ポート入力部と前記各ポート出力部とを接続するクロスバースイッチとを備え、且つ、
前記プロセッサノードが接続されたポート入力部が、それぞれ、
複数のコンフィグレーション空間をメモリ空間にマップするマップ手段と、
自ポート入力部に接続されたプロセッサノードからアクセス先を示すアドレスフィールドを含んだアクセス要求が入力されたとき、前記アクセス要求のアクセス先が、前記マップ手段によってメモリ空間にマップされたコンフィグレーション空間であるか否かを判定する判定手段と、
該判定手段によって前記アクセス要求のアクセス先が前記コンフィグレーション空間であると判定された場合、前記アクセス要求のアドレスフィールドに含まれている、アクセス対象デバイスが接続されているバスのバス番号および前記バスを配下に持つＩＯノードに割り当てられているコンフィグレーション空間のセグメント番号に基づいて、前記アクセス対象デバイスが接続されているバスを配下に持つＩＯノードのノードＩＤを出力するノードＩＤ出力手段と、
該ノードＩＤ出力手段から出力されたノードＩＤを転送先に指定して前記アクセス要求を前記クロスバースイッチに対して出力する出力手段とを備えたことを特徴とする情報処理装置。
【請求項１３】
複数のノード制御装置が互いに接続され、且つ、各ノード制御装置にそれぞれプロセッサノードとＩＯノードとが接続された情報処理装置であって、
前記各ノード制御装置が、それぞれ、
自装置に接続されたノード制御装置毎のポート入力部およびポート出力部と、
自装置に接続されたプロセッサノード毎のポート入力部およびポート出力部と、
自装置に接続されたＩＯノード毎のポート入力部およびポート出力部と、
前記各ポート入力部と前記各ポート出力部とを接続するクロスバースイッチと、
複数のコンフィグレーション空間をメモリ空間にマップするマップ手段と、
パーティション番号とセグメント番号の下位ビットとバス番号との組み合わせに対応した複数のエントリを有すると共に、前記複数のエントリそれぞれに、そのエントリに対応するパーティション番号とセグメント番号の下位ビットとバス番号との組み合わせによって特定されるＩＯノードのノードＩＤが登録され、インデックス信号が入力されたとき、該インデックス信号によって示されるエントリに登録されているノードＩＤを出力するテーブルとを備え、且つ、
前記プロセッサノードに接続されたポート入力部が、それぞれ、
自ポート入力部に接続されたプロセッサノードが属するパーティションのパーティション番号が設定されたパーティション番号記憶部と、
自ポート入力部に接続されたプロセッサノードからアクセス先を示すアドレスフィールドを含んだアクセス要求が入力されたとき、前記アクセス要求のアクセス先が、前記マップ手段によってメモリ空間にマップされたコンフィグレーション空間であるか否かを判定し、アクセス先が前記コンフィグレーション空間であると判定した場合、前記アドレスフィールドに含まれている、アクセス対象デバイスが接続されているバスのバス番号と前記バスを配下に持つＩＯノードに割り当てられているコンフィグレーション空間のセグメント番号とをマージしたインデックス信号を出力する判定手段と、
該判定手段から出力されたインデックス信号に含まれているセグメント番号の上位ビットを前記パーティション番号記憶部に設定されているパーティション番号で置き換え、置き換え後のインデックス信号を前記テーブルに対して出力するインデックス切り替え回路と、
該インデックス切り替え回路から出力されたインデックス信号に応答して前記テーブルから出力されたノードＩＤを転送先に指定して、前記アクセス要求を前記クロスバースイッチに出力する出力手段とを備えたことを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のＩＯ（入出力）ノードを含む大規模な情報処理装置およびその情報処理装置において使用するノード制御装置に関し、特に、ＰＣＩ(Peripheral Component Interconnect)仕様で定義されるコンフィグレーション空間を複数設定して処理できるようにすることにより、従来と比較して多数のＩＯデバイスを接続可能にする技術に関する。
【背景技術】
【０００２】
ＰＣＩバスで使用されるコンフィグレーション空間のバス番号は、８ビットであり、最大で２５６個のバスがサポートされる（例えば、特許文献１参照）。これは、ＰＣＩ  Ｌｏｃａｌ  Ｂｕｓ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ、ＰＣＩ−Ｘ  Ｐｒｏｔｏｘｏｌ  Ａｄｄｅｎｄｕｍ  ｔｏ  ｔｈｅ  ＰＣＩ  Ｌｏｃａｌ  Ｂｕｓ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ、ＰＣＩ  Ｅｘｐｒｅｓｓ  Ｂａｓｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎで共通である。
【０００３】
【特許文献１】特開２００６−２６０４８８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
一方、複数のＩＯノードを含む大規模な情報処理装置においては、多数のＩＯデバイスを接続したいという要求がある。しかし、ＰＣＩ仕様で定義されるコンフィグレーション空間のバス番号は８ビットであるため、バス番号が不足し、多数のＩＯデバイスを接続することができないという問題があった。このような問題点を解決するためには、例えば、バス番号のビット数を増やすという方法が考えられるが、バス番号のビット数が仕様により定義されているＰＣＩバスには適用することができない。
【０００５】
〔発明の目的〕
そこで、本発明の目的は、バス番号のビット数を増加させることなく、利用できるバスの本数を増加できるようにすることにある。
【課題を解決するための手段】
【０００６】
本発明にかかる第１のノード制御装置は、
複数のコンフィグレーション空間をメモリ空間にマップするマップ手段と、
アクセス先を示すアドレスフィールドを含んだアクセス要求がプロセッサノードから入力されたとき、前記アクセス要求のアクセス先が、前記マップ手段によってメモリ空間にマップされたコンフィグレーション空間であるか否かを判定する判定手段と、
該判定手段によって前記アクセス要求のアクセス先がコンフィグレーション空間であると判定された場合、前記アクセス要求のアドレスフィールドに含まれている、アクセス対象デバイスが接続されているバスのバス番号および前記バスを配下に持つＩＯノードに割り当てられているコンフィグレーション空間のセグメント番号に基づいて、前記アクセス対象デバイスが接続されているバスを配下に持つＩＯノードのノードＩＤを出力するノードＩＤ出力手段と、
前記アクセス要求を、前記ノードＩＤ出力手段から出力されたノードＩＤのＩＯノードへルーティングするルーティング手段とを備えたことを特徴とする。
【０００７】
本発明にかかる第２のノード制御装置は、第１のノード制御装置において、
前記マップ手段が、
前記コンフィグレーション空間のベースアドレスが設定される第１のレジスタと、
前記コンフィグレーション空間のサイズに関するサイズ情報が設定される第２のレジスタとを備えたことを特徴とする。
【０００８】
本発明にかかる第３のノード制御装置は、第２のノード制御装置において、
前記第２のレジスタには、サイズ情報として前記メモリ空間にマップしたコンフィグレーション空間の個数が設定されることを特徴とする。
【０００９】
本発明にかかる第４のノード制御装置は、第２または第３のノード制御装置において、
前記判定手段が、前記第１のレジスタの内容、前記第２のレジスタの内容および前記アドレスフィールドの内容に基づいて、前記アクセス要求のアクセス先が前記コンフィグレーション空間であるか否かを判定することを特徴とする。
【００１０】
本発明にかかる第５のノード制御装置は、第３のノード制御装置において、
アクセス先を前記コンフィグレーション空間とするアクセス要求のアドレスフィールドには、その所定ビット範囲に前記コンフィグレーション空間のベースアドレスが設定され、且つ、
前記判定手段が、前記第１のレジスタの最上位ビットから前記第２のレジスタに設定されている個数に応じたビット位置までに設定されている値と、入力されたアクセス要求における前記所定ビット範囲の最上位ビットから前記第２のレジスタに設定されている個数に応じたビット位置までに設定されている値とが等しいか否かに基づいて、前記アクセス要求のアクセス先がコンフィグレーション空間であるか否かを判定することを特徴とする。
【００１１】
本発明にかかる第６のノード制御装置は、第１のノード制御装置において、
前記ノードＩＤ出力手段が、
セグメント番号とバス番号との組み合わせに対応した複数のエントリを有すると共に、前記複数のエントリそれぞれに、そのエントリに対応するセグメント番号とバス番号との組み合わせによって特定されるＩＯノードのノードＩＤが登録され、前記判定手段でコンフィグレーション空間へのアクセスであると判定された場合、前記アクセス要求中のセグメント番号とバス番号との組み合わせに対応したエントリに登録されているノードＩＤを出力するテーブルを備えていることを特徴とする。
【００１２】
本発明にかかる第７のノード制御装置は、第６のノード制御装置において、
前記テーブルが、前記セグメント番号と前記バス番号の上位ビットとの組み合わせに対応した複数のエントリを有することを特徴とする。
【００１３】
本発明にかかる第８のノード制御装置は、第２のノード制御装置において、
自装置に接続されるプロセッサノード毎に、前記判定手段、前記ノードＩＤ出力手段および前記ルーティング手段を備え、且つ、
前記プロセッサノード毎の判定手段が、前記第１のレジスタおよび第２のレジスタを共用することを特徴とする。
【００１４】
本発明にかかる第９のノード制御装置は、第４のノード制御装置において、
前記メモリ空間にマップされた複数のコンフィグレーション空間を複数のパーティションで分割して使用する場合は、前記テーブルに代えて、
セグメント番号とバス番号とパーティション番号の組み合わせに対応した複数のエントリを有すると共に、前記複数のエントリそれぞれに、そのエントリに対応するセグメント番号とバス番号とパーティション番号との組み合わせによって特定されるＩＯノードのノードＩＤが登録され、前記判定手段でコンフィグレーション空間へのアクセスであると判定された場合、前記アクセス要求を出力したプロセッサノードが属するパーティションのパーティション番号と前記アクセス要求中のセグメント番号とバス番号との組み合わせに対応したエントリに登録されているノードＩＤを出力するテーブルを使用することを特徴とする。
【００１５】
本発明にかかる第１０のノード制御装置は、
複数のコンフィグレーション空間をメモリ空間にマップするマップ手段と、
アクセス先を示すアドレスフィールドを含んだアクセス要求がプロセッサノードから入力されたとき、前記アクセス要求のアクセス先が、前記マップ手段によってメモリ空間にマップされたコンフィグレーション空間であるか否かを判定し、アクセス先が前記コンフィグレーション空間であると判定した場合、前記アドレスフィールドに含まれている、アクセス対象デバイスが接続されているバスのバス番号と前記バスを配下に持つＩＯノードに割り当てられているコンフィグレーション空間のセグメント番号とをマージしたインデックス信号を出力する判定手段と、
該判定手段から出力されたインデックス信号に含まれているセグメント番号の上位ビットを前記プロセッサノードが属しているパーティションのパーティション番号で置き換え、置き換え後のインデックス信号を出力するインデックス切り替え回路と、
パーティション番号とセグメント番号の下位ビットとバス番号との組み合わせに対応した複数のエントリを有すると共に、前記複数のエントリそれぞれに、そのエントリに対応するパーティション番号とセグメント番号の下位ビットとバス番号との組み合わせによって特定されるＩＯノードのノードＩＤが登録され、前記インデックス切り替え回路から出力されたインデックス信号によって示されるエントリに登録されているノードＩＤを出力するテーブルと、
前記アクセス要求を前記テーブルから出力されたノードＩＤのＩＯノードへルーティングするルーティング手段とを備えたことを特徴とする。
【００１６】
本発明にかかる第１１のノード制御装置は、第１〜第１０の何れかのノード制御装置において、
前記コンフィグレーション空間が、ＰＣＩ仕様で定義されたコンフィグレーション空間であることを特徴とする。
【００１７】
本発明にかかる第１の情報処理装置は、
複数のノード制御装置が互いに接続され、且つ、各ノード制御装置にそれぞれプロセッサノードとＩＯノードとが接続された情報処理装置であって、
前記各ノード制御装置が、それぞれ、
自装置に接続されたノード制御装置毎のポート入力部およびポート出力部と、
自装置に接続されたプロセッサノード毎のポート入力部およびポート出力部と、
自装置に接続されたＩＯノード毎のポート入力部およびポート出力部と、
前記各ポート入力部と前記各ポート出力部とを接続するクロスバースイッチとを備え、且つ、
前記プロセッサノードが接続されたポート入力部が、それぞれ、
複数のコンフィグレーション空間をメモリ空間にマップするマップ手段と、
自ポート入力部に接続されたプロセッサノードからアクセス先を示すアドレスフィールドを含んだアクセス要求が入力されたとき、前記アクセス要求のアクセス先が、前記マップ手段によってメモリ空間にマップされたコンフィグレーション空間であるか否かを判定する判定手段と、
該判定手段によって前記アクセス要求のアクセス先が前記コンフィグレーション空間であると判定された場合、前記アクセス要求のアドレスフィールドに含まれている、アクセス対象デバイスが接続されているバスのバス番号および前記バスを配下に持つＩＯノードに割り当てられているコンフィグレーション空間のセグメント番号に基づいて、前記アクセス対象デバイスが接続されているバスを配下に持つＩＯノードのノードＩＤを出力するノードＩＤ出力手段と、
該ノードＩＤ出力手段から出力されたノードＩＤを転送先に指定して前記アクセス要求を前記クロスバースイッチに対して出力する出力手段とを備えたことを特徴とする。
【００１８】
本発明にかかる第２の情報処理装置は、
複数のノード制御装置が互いに接続され、且つ、各ノード制御装置にそれぞれプロセッサノードとＩＯノードとが接続された情報処理装置であって、
前記各ノード制御装置が、それぞれ、
自装置に接続されたノード制御装置毎のポート入力部およびポート出力部と、
自装置に接続されたプロセッサノード毎のポート入力部およびポート出力部と、
自装置に接続されたＩＯノード毎のポート入力部およびポート出力部と、
前記各ポート入力部と前記各ポート出力部とを接続するクロスバースイッチと、
複数のコンフィグレーション空間をメモリ空間にマップするマップ手段と、
パーティション番号とセグメント番号の下位ビットとバス番号との組み合わせに対応した複数のエントリを有すると共に、前記複数のエントリそれぞれに、そのエントリに対応するパーティション番号とセグメント番号の下位ビットとバス番号との組み合わせによって特定されるＩＯノードのノードＩＤが登録され、インデックス信号が入力されたとき、該インデックス信号によって示されるエントリに登録されているノードＩＤを出力するテーブルとを備え、且つ、
前記プロセッサノードに接続されたポート入力部が、それぞれ、
自ポート入力部に接続されたプロセッサノードが属するパーティションのパーティション番号が設定されたパーティション番号記憶部と、
自ポート入力部に接続されたプロセッサノードからアクセス先を示すアドレスフィールドを含んだアクセス要求が入力されたとき、前記アクセス要求のアクセス先が、前記マップ手段によって前記メモリ空間にマップされたコンフィグレーション空間であるか否かを判定し、アクセス先が前記コンフィグレーション空間であると判定した場合、前記アドレスフィールドに含まれている、アクセス対象デバイスが接続されているバスのバス番号と前記バスを配下に持つＩＯノードの割り当てられているコンフィグレーション空間のセグメント番号とをマージしたインデックス信号を出力する判定手段と、
該判定手段から出力されたインデックス信号に含まれているセグメント番号の上位ビットを前記パーティション番号記憶部に設定されているパーティション番号で置き換え、置き換え後のインデックス信号を前記テーブルに対して出力するインデックス切り替え回路と、
該インデックス切り替え回路から出力されたインデックス信号に応答して前記テーブルから出力されたノードＩＤを転送先に指定して、前記アクセス要求を前記クロスバースイッチに出力する出力手段とを備えたことを特徴とする。
【００１９】
〔作用〕
マップ手段により複数のコンフィグレーション空間をメモリに割り当てておく。ノード制御装置内の判定手段は、プロセッサノードからアクセス先を示すアドレスフィールドを含んだアクセス要求が入力されると、そのアクセス先がマップ手段によってメモリ空間にマップされたコンフィグレーション空間であるか否かを判定する。そして、アクセス先がコンフィグレーション空間であった場合には、ノードＩＤ出力手段が、アクセス要求のアドレスフィールドに含まれている、アクセス対象デバイスが接続されているバスのバス番号および上記バスを配下に持つＩＯノードに割り当てられているコンフィグレーション空間のセグメント番号に基づいて、上記ＩＯノードのノードＩＤを出力する。ルーティング手段は、アクセス要求を、ノードＩＤ出力手段から出力されたノードＩＤのＩＯノードへルーティングする。
【発明の効果】
【００２０】
本発明によれば、バス番号のビット数を増加させることなく、多くのバスをサポートすることが可能になり、その結果、多くのＩＯデバイスを接続することが可能になる。その理由は、複数のコンフィグレーション空間をメモリ空間にマップすると共に、アクセス要求のアドレスフィールドに含まれているアクセス対象デバイスが接続されているバスのバス番号および上記バスを配下に持つＩＯノードに割り当てられているコンフィグレーション空間のセグメント番号に基づいて、上記アクセス対象デバイスが接続されているバスを配下に持つＩＯノードのノードＩＤを求め、このノードＩＤによって特定されるＩＯノードへアクセス要求をルーティングするようにしているからである。即ち、１つのコンフィグレーション空間でサポートできるバス数が、バス番号のビット数によって制限されていても、複数のコンフィグレーション空間をメモリ空間にマップしているので、サポート可能なバス数が増加し、その結果、多くのＩＯデバイスを接続することが可能になる。
【発明を実施するための最良の形態】
【００２１】
次に、本発明を実施するための最良の形態について図面を参照して詳細に説明する。
【００２２】
〔第１の実施の形態の構成の説明〕
図１に、本発明にかかる情報処理装置の第１の実施の形態の構成例を示す。図１の例では、１６個のプロセッサノード１００〜１１５と、８個のＩＯノード１２０〜１２７とが、４個のノード制御装置１３０〜１３３を介して接続され、ひとつの情報処理装置を構成する。各ノード制御装置１３０〜１３３には、インタフェース１４０〜１５５を介してそれぞれ４個のプロセッサノードが接続されると共に、インタフェース１６０〜１６７を介してそれぞれ２個のＩＯノードが接続される。４個のノード制御装置１３０〜１３３は、インタフェース１３４〜１３９を介して互いに１：１で接続する。図示しないが、プロセッサノード１００〜１１５は、ひとつまたは複数のプロセッサと主記憶から構成される。もっと小規模な構成（例えば、プロセッサノード２個、ノード制御装置１個、ＩＯノード２個の構成）や、もっと大規模の構成（例えば、プロセッサノード６４個、ＩＯノード３２個、ノード制御装置１６個の構成）の情報処理装置も実現可能である。
【００２３】
図２に、ＩＯノード１２０の構成の一例を示す。ＩＯノード１２０は、１個のＩＯ制御装置２００と、４個のＩＯデバイス２１０〜２１３から構成される。ＩＯ制御装置２００は、インタフェース１６０を介してノード制御装置１３０と接続される。また、ＩＯデバイス２１０〜２１３は、それぞれインタフェース２２０〜２２３を介してＩＯ制御装置２００と接続される。インタフェース２２０〜２２３は、ＰＣＩ−Ｅｘｐｒｅｓｓ、ＰＣＩ−ＸまたはＰＣＩの仕様に準拠する。なお、他のＩＯノード１２１〜１２７もＩＯノード１２０と同様の構成を有する。
【００２４】
図３に、ノード制御装置１３０の構成例を示す。このノード制御装置１３０は、９個のポート入力部３００〜３０８と、９個のポート出力部３１０〜３１８と、クロスバースイッチ３２０とから構成される。ここで、一組のポート入力部とポート出力部をポートと定義する。例えばプロセッサノード１００に接続するポートは、ポート入力部３００とポート出力部３１０とから構成される。ノード制御装置１３０の９個のポートは、それぞれ、プロセッサノード１００〜１０３、ＩＯノード１２０〜１２１、ノード制御装置１３１〜１３３に接続する。なお、他のノード制御装置１３１〜１３３もノード制御装置１３０と同様の構成を有する。
【００２５】
図５に、本実施の形態の情報処理装置における、コンフィグレーション空間のメモリ空間へのマップ方法について示す。ひとつのコンフィグレーション空間は２５６Ｍバイトであり、複数のコンフィグレーション空間はアドレス空間の一部の領域に連続してマップされる。図５は、Ｎ個（Ｎは２のべき乗）のコンフィグレーション空間を、ベースアドレス〜（ベースアドレス＋サイズ−１）の領域にマップした例である。ここで、各コンフィグレーション空間は、ＰＣＩセグメント番号０〜Ｎで識別される。
【００２６】
図６に、本実施の形態の情報処理装置における、情報の転送フォーマットの一例を示す。ここで、論理的な情報の転送単位をパケットと定義し、また、パケットはひとつ以上のフリットから構成されるものと定義する。フリットは固定のビット幅を持ち、本実施の形態では９０ビット幅である。フリットには、ヘッダフリット、データフリットの２種類が存在し、図６は各フリットの転送フォーマットを示している。
【００２７】
フリットのビット８９：８８はストローブであり、フリットが有効であること、およびフリットの種類を示す。ストローブが００（２進数）の場合はフリットが無効であることを示し、０１（２進数）の場合はヘッダフリットであることを示し、１０（２進数）の場合はデータフリットであることを示す。このコード定義は一例である。パケットは、１個のヘッダフリットと、０個、１個、２個、４個または８個のデータフリットから構成される。よって、本実施の形態のパケットは、最小では１個のフリットから構成され、最大では９個のフリットから構成される。
【００２８】
ヘッダフリットのビット８７：０には、それぞれ８ビットの５個のフィールドと４８ビットのアドレスフィールドとが定義される。これらのフィールド定義は一例であり、情報処理装置のリソース、プロトコルおよびトポロジーに依存して決定される。
【００２９】
コマンドコードは、例えばメモリリード、メモリライト、コンフィグレーションリード、コンフィグレーションライト、リプライといった、ターゲットの装置に対する動作を指定するコードが格納されるフィールドである。
【００３０】
ソースノードＩＤは、パケットの転送元のプロセッサノードまたはＩＯノードを識別する固有の番号が格納されるフィールドである。
【００３１】
ターゲットノードＩＤは、パケットの転送先のプロセッサノードまたはＩＯノードまたはノード制御装置を識別する固有の番号が格納されるフィールドである。
【００３２】
データレングスは、リードリクエストの場合に、ターゲットのデータレングスをバイト単位で指定するフィールドである。００（１６進数）〜４０（１６進数）の場合、０〜６４バイトを指定する。
【００３３】
アドレスは、リクエストのターゲットとなるアドレスを格納するフィールドである。
【００３４】
データフリットのビット７１：６４には、バイトイネーブルが定義され、ビット６３：０に定義される各バイトの有効または無効を指定する。データフリットのビット８７：７２は未定義である。
【００３５】
なお、フリットには、故障からフリットの内容を保護するために、ＥＣＣやパリティが付加されるが、本発明とは直接関係しないので、その詳細は省略する。
【００３６】
図７に、図６のヘッダフリットのアドレスフィールドに関する、コンフィグレーションアクセスを行う場合の詳細を示す。ビット４７：２８は、コンフィグレーション空間をマップするメモリ空間のベースアドレスとＰＣＩセグメント番号の論理和である。ビット４７：２８は、プロセッサノードがパケットを発行する場合のみ有効であり、ノード制御装置がパケットを発行する場合はオール０に差し替えて発行される。ビット２７：０は、ＰＣＩ−Ｅｘｐｒｅｓｓなどの仕様で定義されるフィールドに対応し、ビット２７：２０はバス番号、ビット１９：１５はデバイス番号、ビット１４：１２はファンクション番号、ビット１１：８は拡張レジスタ番号、ビット７：０はレジスタアドレスである。これらのフィールド定義は一例であり、プロセッサノードおよびＩＯ制御装置に依存する。
【００３７】
図４に、図３に示すノード制御装置１３０のポート入力部３００の詳細を示す。プロセッサノード１００〜１０３が接続されるポート入力部３００〜３０３は、同じ構成である。
【００３８】
レジスタ４００および４０１は、メモリ空間にマップされるコンフィグレーション空間のベースアドレスおよびサイズを指定する値を保持する。これらのレジスタは、システムの初期化時にシステムファームウェアまたはサービスプロセッサによって設定されるが、これらの設定に関する詳細な構成については、当業者にとってよく知られており、また本発明とは直接関係しないので省略する。
【００３９】
レジスタ４０１は、４ビットの幅であり、メモリ空間にマップされるコンフィグレーション空間のサイズを指定する値を保持する。保持する値をｎ（ｎ＝０〜８）とすると、指定するサイズは、２５６Ｍバイト×（２のｎ乗）となる。ひとつのコンフィグレーション空間は２５６Ｍバイトなので、レジスタ４０１の値が０ならば１個のコンフィグレーション空間を指定し、値が１ならば２個のコンフィグレーション空間を指定し、値が８ならば２５６個のコンフィグレーション空間を指定する。
【００４０】
レジスタ４００は、例えば情報処理装置が４８ビットのアドレス空間をサポートする場合、２０ビットの幅であり、ビット１９：０はメモリ空間のアドレスのビット４７：２８に対応する。レジスタ４００の指定するベースアドレスは、レジスタ４０１が指定するサイズの示すアドレス境界に整列しなければならない。例えば、レジスタ４０１に設定する値が２で１Ｇバイトのサイズを示す場合、レジスタ４００の最下位の２ビットは００（２進数）で１Ｇバイト境界に整列したベースアドレスを指定しなければならない。つまり、レジスタ４０１に設定する値をｎ（ｎ＝０〜８）とすると、レジスタ４００の下位ｎビットは全て０でなければならない。
【００４１】
テーブル４０２は、コンフィグレーション空間のＰＣＩセグメント番号およびバス番号から、そのバスを配下に持つＩＯノード１２０〜１２７のノードＩＤを得るためのテーブルである。例えば、ＩＯノード配下のバス番号を１６個の粒度で指定する場合、ＰＣＩセグメント番号の８ビットと、バス番号の上位４ビットをマージした１２ビットをインデックスとするため、テーブル４０２は４０９６個のエントリを持つ。本実施の形態では、ＰＣＩセグメント番号を８ビットとしているが、もっと大きくすることも小さくすることも可能である。例えば、サポートするコンフィグレーション空間の数が１６個までならば、ＰＣＩセグメント番号は４ビットとなり、テーブル４０２のエントリ数を少なくすることができる。同様に、本実施の形態では、ＩＯノード配下のバス番号を１６個の粒度で指定しているが、もっと粗くすることも、細かくすることも可能である。例えば、４個の粒度で指定する場合、ＰＣＩセグメント番号とバス番号の上位６ビットでテーブル４０２のインデックスを行うことになる。インデックスが指定するエントリには、対応するバスを配下に持つＩＯノードのノード番号が設定される。このテーブル４０２は、システムの初期化時にシステムファームウェアまたはサービスプロセッサによって設定されるが、これらの設定に関する詳細な構成については、当業者にとってよく知られており、また本発明とは直接関係しないので省略する。インデックス信号４１２が指定するエントリに格納されている値が、ノードＩＤ信号４１４として出力される。
【００４２】
コンフィグレーションアクセス検出回路４０３は、プロセッサノード１００から入力するフリット信号３３０がヘッダフリットの場合（ストローブフィールドが０１（２進数）の場合）に、ヘッダフリットのアドレスフィールドと、レジスタ４００および４０１の値が示すアドレス領域との比較を行う。具体的には、レジスタ４０１の保持する値がｎ（ｎ＝０〜８）の場合、レジスタ４００のビット１９：ｎと、アドレスフィールドのビット４７：（２８＋ｎ）を比較する。一致結果信号４１３は、フリット信号３３０がヘッダフリットでかつ比較結果が一致した場合に１になり、それ以外の場合は０になる。コンフィグレーションアクセス検出回路４０３はまた、レジスタ４０１の保持する値がｎ（ｎ＝０〜８）の場合、アドレスのビット３５：２８の値と、（２のｎ乗）−１の値の論理積からＰＣＩセグメント番号を算出し、アドレス２７：２４のバス番号の上位４ビットとマージして、インデックス信号４１２を出力する。例えば、レジスタ４０１の保持する値が４で、アドレスのビット３５：２０が１２３４（１６進数）の場合、ＰＣＩセグメント番号は０２（１６進数）となり、バス番号の上位４ビットは３（１６進数）なので、インデックス信号４１２は０２３（１６進数）となる。
【００４３】
コンフィグレーションフリット生成回路４０４は、プロセッサノード１００から入力されたフリット信号３３０がヘッダフリットの場合に、アドレスフィールドのビット４７：２８をオール０に差し替え、ターゲットノードＩＤをテーブル４０２から入力するノードＩＤ信号４１４に差し替え、コマンドコードがメモリリードのコードならばコンフィグレーションリードのコードに差し替え、メモリライトのコードならばコンフィグレーションライトのコードに差し替えて、ヘッダフリット信号４１５として出力する。
【００４４】
セレクタ４０５は、一致結果信号４１３が０ならばフリット信号３３０を選択し、一致結果信号４１３が１ならばヘッダフリット信号４１５を選択して、フリット信号３４０をクロスバースイッチ３２０へ出力する。
【００４５】
本実施の形態では、レジスタ４００、レジスタ４０１およびテーブル４０２は、ポート入力部３００〜３０３に独立に実装しているが、設定される値は同じであるため、独立に参照できるならば、共用することも可能である。
【００４６】
〔第１の実施の形態の動作の説明〕
次に、本実施の形態の動作について詳細に説明する。
【００４７】
先ず、システムの初期化時に実施する設定について説明する。システムファームウェアは、ＩＯノード１２０〜１２７に関して、ＰＣＩセグメント番号とバス番号とを割り当てる。例えば、ＩＯノード１２０〜１２１はＰＣＩセグメント番号０、ＩＯノード１２２〜１２３はＰＣＩセグメント番号１、ＩＯノード１２４〜１２５はＰＣＩセグメント番号２、ＩＯノード１２６〜１２７はＰＣＩセグメント番号３を割り当てる。また、それぞれのＰＣＩセグメント番号において、ＩＯノード１２０、１２２、１２４、１２６にはバス番号００〜７Ｆ（１６進数）、ＩＯノード１２１、１２３、１２５、１２７にはバス番号８０〜ＦＦ（１６進数）を割り当てる。
【００４８】
次にシステムファームウェアは、空間をメモリにマップするコンフィグレーション空間のベースアドレスを決定し、各ノード制御装置１３０〜１３３に設けられているポート入力部３００〜３０３内のレジスタ４００に同じ値（ベースアドレス）をセットする。また、４個のコンフィグレーション空間を使用するため、各ポート入力部内のレジスタ４０１には２をセットする（サイズは１Ｇバイト）。ベースアドレスをＦＦＦＦＣ０００００００（１６進数）とすると、レジスタ４００にはＦＦＦＦＣ（１６進数）をセットする。
【００４９】
さらに、システムファームウェアは、ノード制御装置１３０〜１３３のテーブル４０２に同じ値をセットする（ポート入力部３００〜３０３にも同様にセットする）。図１０に示すように、テーブル４０２のエントリ０〜７にはＩＯノード１２０のノードＩＤをセットし、エントリ８〜１５にはＩＯノード１２１のノードＩＤをセットし、エントリ１６〜２３にはＩＯノード１２２のノードＩＤをセットし、エントリ２４〜３１にはＩＯノード１２３のノードＩＤをセットし、エントリ３２〜３９にはＩＯノード１２４のノードＩＤをセットし、エントリ４０〜４７にはＩＯノード１２５のノードＩＤをセットし、エントリ４８〜５５にはＩＯノード１２６のノードＩＤをセットし、エントリ５６〜６３にはＩＯノード１２７のノードＩＤをセットし、残りのエントリには何もセットしない（残りのエントリは使用しない）。これらの設定は、システムファームウェアの代わりにサービスプロセッサが行っても良い。
【００５０】
次に、プロセッサノード１００から、ＩＯノード１２５配下のバス番号８Ｆ（１６進数）のバスに接続されているＩＯデバイスに対して、コンフィグレーションリードを行う場合について説明する。ここで、ＩＯノード１２５のＰＣＩセグメント番号は２とする。
【００５１】
プロセッサノード１００内のプロセッサ上で動作するシステムファームウェアは、ＯＳなどのソフトウェアからＩＯノード１２５配下のバス番号８Ｆ（１６進数）のＩＯデバイスに対するコンフィグレーション空間のレジスタへのリード要求を受け取ると、初期化時にメモリ空間にマップしたアドレスをターゲットにしてメモリリードトランザクションを発行する。具体的には、図７のアドレスフォーマットにおいて、ビット４７：２８はベースアドレスのＦＦＦＦＣ（１６進数）とＰＣＩセグメント番号の０２（１６進数）の論理和であるＦＦＦＦＥ（１６進数）とし、ビット２７：２０はバス番号の８Ｆ（１６進数）とする。ビット１９：０のデバイス番号、ファンクション番号、拡張レジスタ番号、レジスタアドレスに関しても、ソフトウェアからのリード要求に伴う情報とするが、詳細は省略する。システムファームウェアは、また、ソフトウェアから要求されたターゲットのデータレングスを付加してトランザクションを発行する。
【００５２】
プロセッサノード１００は、システムファームウェアからのメモリリードトランザクションを受け取ると、図６のヘッダフリットのフォーマットに関して、アドレスおよびデータレングスを受け取った値とし、ストローブを０１（２進数）とし、コマンドコードをメモリリードのコードとし、ソースノードＩＤをプロセッサノード１００のノードＩＤとし、ターゲットノードＩＤをノード制御装置１３０のノードＩＤとして、フリット信号３３０を発行する。ここで、トランザクションＩＤは、プロセッサノード１００についてユニークな番号とする。
【００５３】
プロセッサノード１００からフリット信号３３０が入力されると、コンフィグレーションアクセス検出回路４０３は、入力したフリットのストローブフィールドが０１（２進数）でヘッダフリットであるので、ヘッダフリットのアドレスフィールドと、レジスタ４００および４０１の値が示すアドレス領域の比較を行う。レジスタ４０１の保持する値が２で、レジスタ４００の保持する値がＦＦＦＦＣ（１６進数）とすると、レジスタ４００のビット１９：２と、アドレスフィールドのビット４７：３０を比較するので、一致結果信号４１３が１になる。コンフィグレーションアクセス検出回路４０３は、また、レジスタ４０１の保持する値が２であるので、アドレスのビット３５：２８の値と、（２の２乗）−１の値の論理積からＰＣＩセグメント番号を０２（１６進数）として算出し、アドレス２７：２４のバス番号８Ｆ（１６進数）の上位４ビットとマージして、インデックス信号４１２を０２８（１６進数）として出力する。
【００５４】
テーブル４０２は、インデックス信号４１２として０２８（１６進数）が入力されるので、エントリ４０に格納されるＩＯノード１２５のノードＩＤを、ノードＩＤ信号４１４として出力する。
【００５５】
コンフィグレーションフリット生成回路４０４は、プロセッサノード１００から入力するフリット信号３３０がヘッダフリットであるので、アドレスフィールドのビット４７：２８をオール０に差し替え、ターゲットノードＩＤをテーブル４０２から入力するノードＩＤ信号４１４に差し替え、コマンドコードがメモリリードのコードなのでコンフィグレーションリードのコードに差し替えて、ヘッダフリット信号４１５として出力する。
【００５６】
セレクタ４０５は、一致結果信号４１３が１なので、ヘッダフリット信号４１５を選択して、フリット信号３４０をクロスバースイッチ３２０へ出力する。
【００５７】
クロスバースイッチ３２０は、ターゲットノードＩＤに従って、フリットをポート出力部３１７へ出力する。クロスバースイッチがターゲットノードＩＤに従って、出力先のポート出力部を決定する方法は、本発明とは直接関係しないので、その詳細は省略する。ポート出力部３１７から出力されたフリットは、ノード制御装置１３２を経由して、ＩＯノード１２５へ出力され、ＩＯノード１２５内に存在するターゲットのＩＯデバイスへ出力される。その後、ターゲットのＩＯデバイスからは、リプライデータがノード制御装置１３２および１３０を経由して、プロセッサノード１００に返却される。
【００５８】
〔第１の実施の形態の効果〕
本実施の形態によれば、バス番号のビット数を増加させることなく、多くのバスをサポートすることが可能になり、その結果、多くのＩＯデバイスを接続することが可能になる。
【００５９】
その理由は、マップ手段であるレジスタ４００、４０１を用いて複数のコンフィグレーション空間をメモリ空間にマップしておき、プロセッサノードからフリット信号（アクセス要求）が入力された場合は、判定手段であるコンフィグレーションアクセス検出回路４０３を用いてアクセス先がコンフィグレーション空間であるか否かを判定し、アクセス先がコンフィグレーション空間であった場合には、ノードＩＤ出力手段であるテーブル４０２を用いてアクセス対象デバイスが接続されているバスを配下に持つＩＯノードのノードＩＤを出力し、更に、ルーティング手段であるクロスバースイッチ３２０を用いてテーブル４０２から出力されたノードＩＤのＩＯノードへフリット信号をルーティングするようにしているからである。即ち、１つのコンフィグレーション空間でサポートできるバス数が、バス番号のビット数によって制限されていても、複数のコンフィグレーション空間をメモリ空間にマップしているので、サポート可能なバス数が増加し、その結果、多くのＩＯデバイスを接続することが可能になる。
【００６０】
また、本実施の形態によれば、テーブル４０２のサイズを小さくすることが可能になる。その理由は、テーブル４０２に、セグメント番号とバス番号の上位ビットとの組み合わせに対応した複数のエントリを設けるようにしているからである。即ち、複数のバス番号に対して１つのエントリを割り当てるようにしているので、テーブル４０２のサイズを小さくすることが可能になる。
【００６１】
〔第２の実施の形態の構成の説明〕
次に、本発明にかかる情報処理装置の第２の実施の形態について説明する。本実施の形態は、プロセッサノードおよびＩＯノードを複数のパーティションに分割して運用する場合についてのものである。この場合、各パーティションが必要とするコンフィグレーション空間の数は少なくなる。そこで本実施の形態では、アドレスフィールドからＰＣＩセグメント番号をデコードして対応のＩＯノードへアクセス要求を転送する際に使用するテーブルに関して、テーブルを参照する際に使用するＰＣＩセグメント番号の一部をパーティション番号に切り替える機能を設けることで、このテーブルに関するハードウェアを少なくする。
【００６２】
図８に、図１の情報処理装置をパーティション８００とパーティション８０１に分割した一例を示す。この例では２個のパーティションに分割しているが、更に細かく分割することも可能である。パーティション８００とパーティション８０１では、独立のオペレーティングシステム（ＯＳ）が動作する。
【００６３】
本実施の形態の基本的な構成は上記の通りであるが、ノード制御装置１３０〜１３３に関してさらに工夫している。ノード制御装置１３０の構成例を図９に示す。なお、他のノード制御装置１３１〜１３３も同様の構成を有している。
【００６４】
ノード制御装置１３０にポート入力共通部９００を設ける。ポート入力共通部９００は、ポート入力部３００〜３０３で共用するレジスタ９０１〜９０３およびテーブル９０４を含む。
【００６５】
レジスタ９０２は、図４のレジスタ４０１と同じ機能を持ち、メモリ空間にマップされるコンフィグレーション空間のサイズを指定する。レジスタ９０２は４ビットの幅であり、保持する値をｎ（ｎ＝０〜８）とすると、指定するサイズは、２５６Ｍバイト×（２のｎ乗）となる。ひとつのコンフィグレーション空間は２５６Ｍバイトなので、レジスタ９０２の値が０ならば１個のコンフィグレーション空間を指定し、値が１ならば２個のコンフィグレーション空間を指定し、値が８ならば２５６個のコンフィグレーション空間を指定する。
【００６６】
レジスタ９０１は、図４のレジスタ４００と同じ機能を持ち、メモリ空間にマップされるコンフィグレーション空間のベースアドレスを指定する。レジスタ９０１は、例えば情報処理装置が４８ビットのアドレス空間をサポートする場合、２０ビットの幅であり、ビット１９：０はメモリ空間のアドレスのビット４７：２８に対応する。レジスタ９０１の指定するベースアドレスは、レジスタ９０２の指定するサイズの示すアドレス境界に整列しなければならない。例えば、レジスタ９０２に設定する値が２で１Ｇバイトのサイズを示す場合、レジスタ９０１の最下位の２ビットは００（２進数）で１Ｇバイト境界に整列したベースアドレスを指定しなければならない。つまり、レジスタ９０２に設定する値がｎ（ｎ＝０〜８）とすると、レジスタ９０１の下位ｎビットは全て０でなければならない。
【００６７】
レジスタ９０３は、１ビットのレジスタであり、インデックスの切り替えフラグを保持する。インデックス切り替え回路９０６において、インデックス切り替えを行わない場合は０を設定し、インデックス切り替えを行う場合は１を設定する。
【００６８】
テーブル９０４は、インデックス信号９２０〜９２３から、対応するＩＯノード１２０〜１２７のノードＩＤを得るためのテーブルである。インデックス信号９２０が指定するエントリに格納する値がノードＩＤ信号９３０として出力され、インデックス信号９２１が指定するエントリに格納する値がノードＩＤ信号９３１として出力され、インデックス信号９２２が指定するエントリに格納する値がノードＩＤ信号９３２として出力され、インデックス信号９２３が指定するエントリに格納する値がノードＩＤ信号９３３として出力される。
【００６９】
プロセッサノード１００が接続されるポート入力部３００は、コンフィグレーションアクセス検出回路４０３と、コンフィグレーションフリット生成回路４０４と、セレクタ４０５と、レジスタ９０５と、インデックス切り替え回路９０６とを含む。なお、他のプロセッサノード１０１〜１０３に接続されるポート入力部３０１〜３０３も同様の構成を有する。
【００７０】
レジスタ９０５は、４ビットの幅であり、ポート入力部３００に接続するプロセッサノード１００の属するパーティション番号を指定する。
【００７１】
コンフィグレーションアクセス検出回路４０３は、レジスタ９０２の保持する値がｎ（ｎ＝０〜８）の場合、アドレスのビット３５：２８の値と、（２のｎ乗）−１の値の論理積からＰＣＩセグメント番号を算出し、アドレス２７：２４のバス番号の上位４ビットとマージして、インデックス信号９４１を出力する。
【００７２】
インデックス切り替え回路９０６は、レジスタ９０３から出力されるインデックス切り替え信号９１０が０の場合は、コンフィグレーションアクセス検出回路４０３の出力するインデックス信号９４１をそのままインデックス信号９２０として出力し、インデックス切り替え信号９１０が１の場合は、インデックス信号９４１の上位４ビットをレジスタ９０５から入力するパーティション番号９４０に差し替えて、インデックス信号９２０として出力する。つまり、インデックス切り替え信号９１０が１の場合、インデックス信号９２０は、４ビットのパーティション番号と、ＰＣＩセグメント番号の下位４ビットと、バス番号の上位４ビットをマージした値となる。
【００７３】
コンフィグレーションフリット生成回路４０４は、プロセッサノード１００から入力するフリット信号３３０がヘッダフリットの場合に、アドレスフィールドのビット４７：２８をオール０に差し替え、ターゲットノードＩＤをテーブル９０４から入力するノードＩＤ信号９３０に差し替え、コマンドコードがメモリリードのコードならばコンフィグレーションリードのコードに差し替え、メモリライトのコードならばコンフィグレーションライトのコードに差し替えて、ヘッダフリット信号４１５として出力する。
【００７４】
セレクタ４０５は、一致結果信号４１３が０ならばフリット信号３３０を選択し、一致結果信号４１３が１ならばヘッダフリット信号４１５を選択して、フリット信号３４０をクロスバースイッチ３２０へ出力する。
【００７５】
レジスタ９０１、９０２、９０３、９０５およびテーブル９０４は、システムの初期化時にシステムファームウェアまたはサービスプロセッサによって設定されるが、これらの設定に関する詳細な構成については、当業者にとってよく知られており、また本発明とは直接関係しないので省略する。
【００７６】
〔第２の実施の形態の動作の説明〕
次に、本実施の形態の動作について説明する。ここで、図８のパーティション８００のパーティション番号を０、パーティション８０１のパーティション番号を１とする。
【００７７】
まず、初期化時に実施する設定について説明する。
【００７８】
システムファームウェアは、システムをパーティションに分割して使用する場合、ノード制御装置１３０〜１３３のレジスタ９０３を１に設定する。システムファームウェアは、システムをパーティションに分割せずに使用する場合は、レジスタ９０３を０に設定する。システムをパーティションに分割しない場合については、前述した第１の実施の形態と同じであるため説明を省略する。
【００７９】
システムファームウェアは、ノード制御装置１３０〜１３３のポート入力部３００〜３０３のレジスタ９０５に、そのポートに接続するプロセッサノードが属すパーティションの番号を設定する。具体的には、ノード制御装置１３０および１３１のポート入力部３００および３０１のレジスタ９０５には０を設定し、ポート入力部３０２と３０３のレジスタ９０５には１を設定する。また、ノード制御装置１３２および１３３のポート入力部３００〜３０３のレジスタ９０５には１を設定する。
【００８０】
システムファームウェアは、メモリにマップするコンフィグレーション空間のベースアドレスおよびサイズを決定し、ノード制御装置１３０〜１３３のレジスタ９０１および９０２に同じ値をセットする。従って、コンフィグレーション空間をマップする領域は、パーティション８００と８０１で共通となる。最大で４個のコンフィグレーション空間を使用するため、レジスタ９０２には２をセットする（サイズは１Ｇバイト）。ベースアドレスをＦＦＦＦＣ０００００００（１６進数）とすると、レジスタ９０１にはＦＦＦＦＣ（１６進数）をセットする。
【００８１】
システムファームウェアは、パーティション８００のＩＯノード１２０、１２２に関して、ＰＣＩセグメント番号とバス番号を割り当てる。例えば、ＩＯノード１２０および１２２ともＰＣＩセグメント番号０を割り当て、ＩＯノード１２０にはバス番号００〜７Ｆ（１６進数）、ＩＯノード１２２にはバス番号８０〜ＦＦ（１６進数）を割り当てる。
【００８２】
また、システムファームウェアは、パーティション８０１のＩＯノード１２１、１２３〜１２７に関して、ＰＣＩセグメント番号とバス番号を割り当てる。例えば、ＩＯノード１２１はＰＣＩセグメント番号０、ＩＯノード１２３はＰＣＩセグメント番号１、ＩＯノード１２４〜１２５はＰＣＩセグメント番号２、ＩＯノード１２６〜１２７はＰＣＩセグメント番号３を割り当てる。また、それぞれのＰＣＩセグメント番号において、ＩＯノード１２１、１２３にはバス番号００〜ＦＦ（１６進数）、ＩＯノード１２４、１２６にはバス番号００〜７Ｆ（１６進数）、ＩＯノード１２５、１２７にはバス番号８０〜ＦＦ（１６進数）を割り当てる。
【００８３】
さらに、システムファームウェアは、ノード制御装置１３０〜１３３のテーブル９０４に同じ値をセットする。図１１に示すようにテーブル９０４のエントリ０〜２５５はパーティション８００に対応し、エントリ２５６〜５１１はパーティション８０１に対応する。テーブル９０４のエントリ０〜７にはＩＯノード１２０のノードＩＤをセットし、エントリ８〜１５にはＩＯノード１２２のノードＩＤをセットし、エントリ２５６〜２７１にはＩＯノード１２１のノードＩＤをセットし、エントリ２７２〜２８７にはＩＯノード１２３のノードＩＤをセットし、エントリ２８８〜２９５にはＩＯノード１２４のノードＩＤをセットし、エントリ２９６〜３０３にはＩＯノード１２５のノードＩＤをセットし、エントリ３０４〜３１１にはＩＯノード１２６のノードＩＤをセットし、エントリ３１２〜３１９にはＩＯノード１２７のノードＩＤをセットし、残りのエントリには何もセットしない（残りのエントリは使用しない）。
【００８４】
これらの設定は、システムファームウェアの代わりにサービスプロセッサが行っても良い。
【００８５】
次に、プロセッサノード１０２から、ＩＯノード１２３配下のバス番号３０（１６進数）のバスに接続されているＩＯデバイスに対して、コンフィグレーションリードを行う場合について説明する。ここで、ＩＯノード１２３のＰＣＩセグメント番号は１とする。
【００８６】
プロセッサノード１０２内のプロセッサ上で動作するシステムファームウェアは、ＯＳなどのソフトウェアからＩＯノード１２３配下のバス番号３０（１６進数）のバスに接続されているＩＯデバイスに対するコンフィグレーション空間レジスタへのリード要求を受け取ると、初期化時にメモリ空間にマップしたアドレスをターゲットにしてメモリリードトランザクションを発行する。具体的には、図７のアドレスフィールドのフォーマットにおいて、ビット４７：２８はベースアドレスのＦＦＦＦＣ（１６進数）とＰＣＩセグメント番号の０１（１６進数）の論理和であるＦＦＦＦＤ（１６進数）とし、ビット２７：２０はバス番号の３０（１６進数）とする。ビット１９：０のデバイス番号、ファンクション番号、拡張レジスタ番号、レジスタアドレスに関しても、ソフトウェアからのリード要求に伴う情報とするが、詳細は省略する。システムファームウェアは、また、ソフトウェアから要求されたターゲットのデータレングスを付加してトランザクションを発行する。
【００８７】
プロセッサノード１０２は、システムファームウェアからのメモリリードトランザクションを受け取ると、図６のヘッダフリットのフォーマットに関して、アドレスおよびデータレングスを受け取った値とし、ストローブを０１（２進数）とし、コマンドコードをメモリリードのコードとし、ソースノードＩＤをプロセッサノード１０２のノードＩＤとし、ターゲットノードＩＤをノード制御装置１３０のノードＩＤとして、フリット信号３３２を発行する。ここで、トランザクションＩＤは、プロセッサノード１０２についてユニークな番号とする。
【００８８】
プロセッサノード１０２からフリット信号３３２が入力されると、ポート入力部３０２のコンフィグレーションアクセス検出回路４０３は、入力したフリット信号３３２のストローブフィールドが０１（２進数）でヘッダフリットであるので、ヘッダフリットのアドレスフィールドと、レジスタ９０１および９０２の値が示すアドレス領域の比較を行う。レジスタ９０２の保持する値が２で、レジスタ９０１の保持する値がＦＦＦＦＣ（１６進数）とすると、レジスタ９０１のビット１９：２と、アドレスフィールドのビット４７：３０を比較するので、一致結果信号４１３が１になる。また、コンフィグレーションアクセス検出回路４０３は、レジスタ９０２の保持する値が２であるので、アドレスのビット３５：２８の値と、（２の２乗）−１の値の論理積からＰＣＩセグメント番号を０１（１６進数）として算出し、アドレス２７：２４のバス番号３０（１６進数）の上位４ビットとマージして、インデックス信号９４１を０１３（１６進数）として出力する。
【００８９】
インデックス切り替え回路９０６は、レジスタ９０３の出力が１であるので、インデックス信号９４１の上位４ビットをレジスタ９０５の値１に差し替えて、１１３（１６進数）の値でインデックス信号９２２を出力する。
【００９０】
テーブル９０４は、インデックス信号９２２として１１３（１６進数）が入力されるので、エントリ２７５に格納されるＩＯノード１２３のノードＩＤを、ノードＩＤ信号９３２として出力する。
【００９１】
コンフィグレーションフリット生成回路４０４は、プロセッサノード１０２から入力されるフリット信号３３２がヘッダフリットであるので、アドレスフィールドのビット４７：２８をオール０に差し替え、ターゲットノードＩＤをテーブル９０４から入力するノードＩＤ信号９３２に差し替え、コマンドコードがメモリリードのコードなのでコンフィグレーションリードのコードに差し替えて、ヘッダフリット信号４１５として出力する。
【００９２】
セレクタ４０５は、一致結果信号４１３が１なので、ヘッダフリット信号４１５を選択して、フリット信号３４２をクロスバースイッチ３２０へ出力する。
【００９３】
クロスバースイッチ３２０は、ターゲットノードＩＤに従って、フリットをポート出力部３１６へ出力する。クロスバースイッチがターゲットノードＩＤに従って、出力先のポート出力部を決定する方法は、本発明とは直接関係しないので、その詳細は省略する。ポート出力部３１６から出力されたフリットは、ノード制御装置１３１を経由して、ＩＯノード１２３へ出力され、ＩＯノード１２３内に存在するターゲットのＩＯデバイスへ出力される。その後、ターゲットのＩＯデバイスからは、リプライデータがノード制御装置１３１および１３０を経由して、プロセッサノード１０２に返却される。
【００９４】
〔第２の実施の形態の効果〕
このように、本実施の形態では、情報処理装置を複数のパーティションに分割して運用する場合に、パーティション毎にテーブルを設ける必要がなく、ハードウェアを少なくすることができるという効果が得られる。
【００９５】
その理由は、パーティション番号とセグメント番号の下位ビットとバス番号との組み合わせに対応した複数のエントリを有すると共に、各エントリそれぞれに、そのエントリに対応するパーティション番号とセグメント番号の下位ビットとバス番号との組み合わせによって特定されるＩＯノードのノードＩＤが登録されたテーブル９０４を備えると共に、テーブル９０４に対するインデックス信号９４１に含まれているセグメント番号の上位ビットを、フリット信号を出力したプロセッサノードが属しているパーティションのパーティション番号に置き換えるインデックス切り替え回路９０６を備えているからである。
【産業上の利用可能性】
【００９６】
複数のＩＯノードを備え、多くのＩＯデバイスを接続する情報処理装置に適用すると好適である。
【図面の簡単な説明】
【００９７】
【図１】本発明にかかる情報処理装置の第１の実施の形態の構成例を示すブロック図である。
【図２】ＩＯノード１２０の構成例を示すブロック図である。
【図３】ノード制御装置１３０の構成例を示すブロック図である。
【図４】第１の実施の形態にかかるポート入力部３００の構成例を示すブロック図である。
【図５】アドレス空間に複数のコンフィグレーション空間をマップした様子を示した図である。
【図６】フリット信号のフォーマットを示す図である。
【図７】コンフィグレーションアクセスを行う場合のアドレスフィールドのフォーマットを示す図である。
【図８】本発明にかかる情報処理装置の第２の実施の形態の構成例を示すブロック図である。
【図９】第２の実施の形態にかかるノード制御装置１３０の構成例を示すブロック図である。
【図１０】テーブル４０２の内容例を示す図である。
【図１１】テーブル９０４の内容例を示す図である。
【符号の説明】
【００９８】
１００〜１１５…プロセッサノード
１２０〜１２７…ＩＯノード
２００…ＩＯ制御装置
２１０〜２１３…ＩＯデバイス
１３０〜１３３…ノード制御装置
３００〜３０８…ポート入力部
４００、４０１…レジスタ
４０２…テーブル
４０３…コンフィグレーションアクセス検出回路
４０４…コンフィグレーションフリット生成回路
４０５…セレクタ
３１０〜３１８…ポート出力部
３２０…クロスバースイッチ
８００、８０１…パーティション
９００…ポート入力共通部
９０１〜９０３、９０５…レジスタ
９０４…テーブル
９０６…インデックス切り替え回路
【図１】
2008181389.tif 000003
【図２】
2008181389.tif 000004
【図３】
2008181389.tif 000005
【図４】
2008181389.tif 000006
【図５】
2008181389.tif 000007
【図６】
2008181389.tif 000008
【図７】
2008181389.tif 000009
【図８】
2008181389.tif 000010
【図９】
2008181389.tif 000011
【図１０】
2008181389.tif 000012
【図１１】
2008181389.tif 000013