JPWO2014020716A1 - 情報処理装置、制御方法、及び制御プログラム - Google Patents

情報処理装置、制御方法、及び制御プログラム Download PDF

Info

Publication number
JPWO2014020716A1
JPWO2014020716A1 JP2014527886A JP2014527886A JPWO2014020716A1 JP WO2014020716 A1 JPWO2014020716 A1 JP WO2014020716A1 JP 2014527886 A JP2014527886 A JP 2014527886A JP 2014527886 A JP2014527886 A JP 2014527886A JP WO2014020716 A1 JPWO2014020716 A1 JP WO2014020716A1
Authority
JP
Japan
Prior art keywords
bridge
address
assigned
bridges
processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2014527886A
Other languages
English (en)
Other versions
JP5999184B2 (ja
Inventor
哲也 上農
哲也 上農
正和 矢部
正和 矢部
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JPWO2014020716A1 publication Critical patent/JPWO2014020716A1/ja
Application granted granted Critical
Publication of JP5999184B2 publication Critical patent/JP5999184B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4027Coupling between buses using bus bridges
    • G06F13/404Coupling between buses using bus bridges with address mapping
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/28Data switching networks characterised by path configuration, e.g. LAN [Local Area Networks] or WAN [Wide Area Networks]
    • H04L12/46Interconnection of networks
    • H04L12/4604LAN interconnection over a backbone network, e.g. Internet, Frame Relay
    • H04L12/462LAN interconnection over a bridge based backbone
    • H04L12/4625Single bridge functionality, e.g. connection of two networks over a single bridge
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4027Coupling between buses using bus bridges
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4204Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
    • G06F13/4221Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Bus Control (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Multi Processors (AREA)

Abstract

複数のブリッジ(71)のそれぞれにブリッジアドレスを割り当てながらブリッジアドレスの管理用テーブル(21)を作成し、プロセッサ(10)から複数のデバイス(81)のうちの一デバイスに対する一アクセスが検知されると、管理用テーブル(21)を参照し、前記一アクセスを実行可能にするように複数のブリッジ(71)に対するブリッジアドレスの割当解除および再割当を行なうとともに、当該ブリッジアドレスの割当解除および再割当に応じた更新を管理用テーブル(21)に対して行なう。これにより、情報処理装置において規定数を超える数のブリッジを備えたためにブリッジアドレスが枯渇しても規定数を超える数のブリッジを同時に使用することが可能になる。

Description

本発明は、情報処理装置、制御方法、制御プログラム、及び同プログラムを記録したコンピュータ読取可能な記録媒体に関する。
一般的なアーキテクチャのコンピュータシステムにおいて、CPU(Central Processing Unit)は、メモリおよびチップセットに接続され、ホストブリッジ経由で、PCI(Peripheral Components Interconnect)Expressバスに接続されたPCIデバイス(以下デバイス)にアクセスすることができる。PCI Expressスロット(以下スロット)には、RAID(Redundant Arrays of Inexpensive Disks)カードやSAS(Serial Attached SCSI (Small Computer System Interface))カード等の拡張カードを追加することができる。拡張カードは、PCI Expressバスを相互接続するスイッチ経由でチップセットのホストブリッジに接続される。スイッチは、PCIブリッジ(以下ブリッジ)を内蔵している。
近年では、サーバ集約等のためにハイパーバイザという制御プログラムを動作させ、複数の仮想サーバを1つの物理計算機上で動作させる手法が普及している。仮想サーバ上のOS(Operating System)で動作しているアプリケーションは、ドライバ等を含むOSのライブラリを経由してデバイスにアクセスする。デバイスは、メモリマップドI/O(MMIO)アクセスまたはI/Oアドレス(I/O空間アドレス)を用いてアクセスされる。近年では、I/Oアドレスを用いたアクセスはレガシー手法とされ、MMIOアクセスが主流になっているが、依然としてI/Oアドレスを要求するデバイスがある。このようなデバイスは、I/Oアドレスを割り当てられていない場合、使用することができない。
I/O空間のアドレスは、BIOS(Basic Input Output System)によってデバイスに割り当てられ、OSのライブラリは、割り当てられたI/O空間アドレスを使ってアクセスする。コンピュータシステムは、起動時にBIOSが実行され、I/Oアドレスの割り当てや、デバイスの初期化が行なわれる。BIOSは、既存技術であるPCIバススキャンにより全てのデバイスを確認し、各デバイスに対してI/Oアドレスを割り振る。ブリッジには、当該ブリッジ配下のバスに接続されるデバイスのためにI/Oアドレスの範囲が割り振られ、ブリッジに割り振られた範囲のI/Oアドレスが、ブリッジ配下のバスに接続されるデバイスに割り当てられる。仮想サーバを動作させる場合は、BIOSによる処理後にハイパーバイザが動作し、仮想サーバが作成され、どのデバイスがどの仮想サーバに割り当てられているかの情報、つまり各仮想サーバのI/OアドレスとハイパーバイザのI/Oアドレスとの対応情報等を含む仮想サーバ構成情報が作成され、ハイパーバイザは仮想サーバを起動する。
図32に示すように、各仮想サーバからのデバイスアクセス(I/Oアクセス)は、ハイパーバイザによってトラップされて順番に処理される(ステップS1,S2)。ハイパーバイザは、上記仮想サーバ構成情報から仮想サーバと実サーバのI/O空間との間の変換処理を行なう。仮想サーバにデバイスが割り当てられている場合、ハイパーバイザが、そのデバイスにアクセスし(ステップS3)、そのアクセス結果を仮想サーバに返す(ステップS4)。実際に存在するデバイス(以下実デバイス)でなく仮想デバイスが割り当てられている場合は仮想デバイスのアクセス処理を行ない、処理結果を仮想サーバに返す。
特許文献1では、I/Oアドレスの効率的な割り当て技術が開示されている。当該技術では、2以上のPCIブリッジに対し衝突が起こらないように同じ範囲のアドレスを割り当てることで、I/Oアドレスの効率的な利用が行なわれる。
また、特許文献2では、仮想サーバを扱った技術が開示されている。当該技術では、I/Oスイッチ内にある仮想ブリッジに対して一意に番号を割り当て、その番号を基にI/Oリソースを割り当てることで、デバイスのホットプラグや仮想サーバの動的再構成を行なった際のI/Oリソースのずれが防止される。
特開2003−337788号公報 特開2010−39760号公報
PCI-to-PCI Bridge Architecture Specification(以下PCI仕様)で定められた仕様により、ブリッジには4KB単位でアドレスが割り当てられる。一般的なCPUでは、I/O空間は例えば64KBだけ用意され、先頭の4KBはシステムに予約されている。したがって、図33に示すように、I/O空間を要求するデバイス#1〜#30に接続されている15個のブリッジ#1〜#15が割り当てられた時点で、I/O空間が枯渇してしまい、16番目のブリッジ#16にI/Oアドレスを割り当てることができない。このため、16個以上のブリッジを同時に使用することはできないことが課題になっている。スロットは、ブリッジに接続されるため、スロット経由のデバイスの追加は最大でも15個までになる。
また、近年では、上述した通り、1つの物理計算機上で複数の仮想サーバを稼働させ、コストを低減させるサーバの集約が行なわれている。仮想サーバは、物理計算機上のデバイスを割り当てられて使用されるが、1つの物理計算機が認識できるブリッジには前述の制約があるため、仮想サーバを複数稼働させている場合、1つの仮想サーバに対して十分なデバイスを割り当てることができなくなるという課題がある。
特許文献1では、デバイスを多数割り当てることができるが、専用のホストバスブリッジが必要になる。また、ホストバスのI/O空間アドレス割当がPCI仕様を逸脱している。
特許文献2では、それぞれのブリッジに対しI/OリソースID(IDentification)が予め決まっており、規定数以降のブリッジに接続されたデバイスに対してI/OリソースID(I/Oアドレス)を割り当てるわけではない。
一つの側面で、本発明は、情報処理装置において規定数を超える数のブリッジを備えたためにブリッジアドレスが枯渇しても規定数を超える数のブリッジを同時に使用可能にすることを目的とする。
一つの案では、情報処理装置は、プロセッサと、複数のデバイスと、前記プロセッサと前記複数のデバイスとを接続する複数のブリッジと、作成部と、割当部とを有する。前記作成部は、前記複数のブリッジのそれぞれにブリッジアドレスを割り当てながら前記ブリッジアドレスの管理用テーブルを作成し、前記複数のブリッジのうちの一ブリッジに割り当てる未割当ブリッジアドレスが枯渇した場合、前記複数のブリッジのうちの他ブリッジに割り当てた既割当ブリッジアドレスの割当を解除して前記一ブリッジに割り当て、当該既割当ブリッジアドレスの割当解除および再割当に応じた更新および登録を前記管理用テーブルに対して行なう。前記割当部は、前記プロセッサから前記複数のデバイスのうちの一デバイスに対する一アクセスを検知した場合、前記管理用テーブルを参照し、前記一アクセスを実行可能にするように前記複数のブリッジに対する前記ブリッジアドレスの割当解除および再割当を行なうとともに、当該ブリッジアドレスの割当解除および再割当に応じた更新を前記管理用テーブルに対して行なう。
一実施形態によれば、情報処理装置において規定数を超える数のブリッジを備えたためにブリッジアドレスが枯渇しても、規定数を超える数のブリッジを同時に使用することができる。
第1実施形態としての情報処理装置の構成を示すブロック図である。 PCIブリッジに備えられるコンフィグレーションレジスタの構成を示す図である。 図1に示す情報処理装置においてI/Oアドレス割当対象(PCIデバイスおよびPCIブリッジ)を含む具体的な構成の一例を示すブロック図である。 図3に示す構成について作成される対応表(管理用テーブル)の一例を示す図である。 図1に示す情報処理装置(作成部)による対応表の作成処理を説明するフローチャートである。 図5に示す対応表の作成処理におけるバス設定処理を説明するフローチャートである。 図5に示す対応表の作成処理におけるI/O設定処理を説明するフローチャートである。 (A)は図1に示す情報処理装置においてI/Oアドレス割当対象を含む具体的な構成の他例および当該構成のバス設定処理後の状態を示すブロック図、(B)は(A)に示す構成について作成される対応表の初期状態を示す図である。 (A)はI/O設定処理を説明するブロック図、(B)は(A)に示す構成に対する対応表の作成状態を示す図である。 (A)はI/O設定処理を説明するブロック図、(B)は(A)に示す構成に対する対応表の作成状態を示す図である。 (A)はI/O設定処理を説明するブロック図、(B)は(A)に示す構成に対する対応表の作成状態を示す図である。 (A)はI/O設定処理を説明するブロック図、(B)は(A)に示す構成に対する対応表の作成状態を示す図である。 (A)はI/O設定処理を説明するブロック図、(B)は(A)に示す構成に対する対応表の作成状態を示す図である。 (A)はI/O設定処理を説明するブロック図、(B)は(A)に示す構成に対する対応表の作成状態を示す図である。 図1に示す情報処理装置(割当部)によるI/Oアクセス処理を説明するフローチャートである。 図15に示すI/Oアクセス処理を説明すべく具体的な対応表を示す図である。 図15に示すI/Oアクセス処理を説明すべく具体的な対応表を示す図である。 図15に示すI/Oアクセス処理を説明すべく具体的な対応表を示す図である。 図15に示すI/Oアクセス処理を説明すべく具体的な対応表を示す図である。 (A)は、図15に示すI/Oアクセス処理を説明するブロック図、(B)は(A)に示す処理に対応する対応表の状態を示す図である。 (A)は、図15に示すI/Oアクセス処理を説明するブロック図、(B)は(A)に示す処理に対応する対応表の状態を示す図である。 第2実施形態としての情報処理装置の構成を示すブロック図である。 図22に示す情報処理装置による処理を具体的に説明するシーケンス図である。 図22に示す情報処理装置による処理を説明するフローチャートである。 図22に示す情報処理装置(作成部)による対応表の作成処理を説明するフローチャートである。 図25に示す対応表の作成処理においてブリッジアドレスが枯渇した場合の処理を説明する図である。 図25に示す対応表の作成処理においてブリッジアドレスが枯渇した場合の処理を説明する図である。 図22に示す情報処理装置(割当部)によるアドレス割当処理を説明するフローチャートである。 図28に示すアドレス割当処理において、アクセス対象のデバイスがアドレス未割当のブリッジに属している場合の処理を説明する図である。 第3実施形態としての情報処理装置の構成を示すブロック図である。 図30に示す情報処理装置による処理を具体的に説明するシーケンス図である。 仮想サーバからのデバイスアクセスに対する処理の流れを説明するフローチャートである。 PCI仕様によるブリッジに対するアドレス割当(ブリッジアドレスが枯渇した状態)の一例を示す図である。
以下、図面を参照して実施の形態を説明する。
〔1〕第1実施形態の情報処理装置
〔1−1〕第1実施形態の構成
図1は、第1実施形態としての情報処理装置(コンピュータシステム)1の構成を示すブロック図である。図1に示すコンピュータシステム1は、CPU(プロセッサ)10,メモリ20,ストレージ30,NVRAM(Non-Volatile Random Access Memory)40,チップセット50,PCIバス60,スイッチ70,スロット80およびストレージ90を有している。
NVRAM40は、CPU10でコンピュータシステム1を初期化させるBIOS(Basic Input/Output System)プログラムを格納する。CPU10は、BIOSプログラムを実行することによりBIOS11を起動する。また、NVRAM40には、CPU10を、後述するPCIデバイス/ブリッジ対応表作成処理部12Aおよびアドレス割当処理部12Bとして機能させる制御プログラムが格納されている。
ストレージ30には、CPU10用のOSおよびアプリケーションプログラムが格納されている。
メモリ20は、CPU10によりNVRAM40から読み出されたBIOSプログラムや、ストレージ30から読み出されたOSおよびアプリケーションプログラムを展開されて保存する。また、メモリ20は、後述するPCIデバイス/ブリッジ対応表21を保存する。
チップセット50は、CPU10,ストレージ30およびNVRAM40に接続されるとともに、PCIバス60およびスイッチ70を介し複数のPCI−Ex(Express)スロット(以下、単にスロットという)80に接続される。チップセット50は、ホストブリッジ51およびSATA(Serial Advanced Technology Attachment)コントローラ52を有している。SATAコントローラ52は、CPU10からの要求に従ってストレージ30に対するアクセスを制御する。ホストブリッジ51は、CPU10に対し、ストレージ30,NVRAM40およびスロット80を接続する。
スロット80には、PCIデバイス(以下、単にデバイスという;拡張カード)81としてのSASカード,RAID(Redundant Arrays of Inexpensive Disks)カード,LAN(Local Area Network)カードなどが挿入される。デバイス81としてSASカードを挿入することにより、ストレージ90を増設することができる。スロット80に挿入されたデバイス81は、PCIバス60を相互接続するスイッチ70に内蔵されたPCIブリッジ(以下、単にブリッジという)71経由でホストブリッジ51に接続される。
コンピュータシステム1では、複数のスイッチ70がそなえられ、図1に示す各スイッチ70には、4つのスロット80が接続される。各スイッチ70は、例えば5つのブリッジ71を有する。5つのブリッジ71のうちの一つのブリッジ71の一端側には、PCIバス60を介してホストブリッジ51が接続される。上記一つのブリッジ71の他端側には、PCIバス60を介し残り4つのブリッジ71の一端側が接続される。4つのブリッジ71の他端側には、それぞれPCIバス60を介してスロット80が接続される。なお、図1の左側のスイッチ70における4つのブリッジ71に接続されたスロット80には、それぞれ、SASカード,RAIDカードおよび2つのLANカードがデバイス81として挿入されている。図1の左側のスイッチ70以外のスイッチ70に接続されたスロット80にも、デバイス81(図示略)が挿入されている。
各ブリッジ71には、ブリッジ71の状態を設定するためのコンフィグレーションレジスタ(ブリッジ制御レジスタ)72が備えられている。コンフィグレーションレジスタ72には、図2に示すように、I/Oベースアドレスレジスタ(ベースアドレスレジスタ)72aおよびI/Oリミットアドレスレジスタ(リミットアドレスレジスタ)72bが含まれている。なお、図2は、ブリッジ71に備えられるコンフィグレーションレジスタ72の構成を示す図である。
I/Oベースアドレスレジスタ72aには、後述するPCIデバイス/ブリッジ対応表作成処理部12Aまたはアドレス割当処理部12Bにより、当該ブリッジ71に割り当てられるI/Oアドレス範囲の下限値が設定される。I/Oリミットアドレスレジスタ72bには、後述するPCIデバイス/ブリッジ対応表作成処理部12Aまたはアドレス割当処理部12Bにより、当該ブリッジ71に割り当てられるI/Oアドレス範囲の上限値が設定される。
つまり、PCIデバイス/ブリッジ対応表作成処理部12Aまたはアドレス割当処理部12Bは、I/Oベースアドレスレジスタ72aおよびI/Oリミットアドレスレジスタ72bにそれぞれブリッジアドレスの範囲を指定するアドレス値(下限値および上限値)を設定することにより、ブリッジ71にブリッジアドレス(図4等参照)を割り当てる。また、PCIデバイス/ブリッジ対応表作成処理部12Aまたはアドレス割当処理部12Bは、I/Oベースアドレスレジスタ72aおよびI/Oリミットアドレスレジスタ72bにそれぞれ0を設定することにより、ブリッジ71に対するブリッジアドレスの割当を解除する。割当を解除することで、ブリッジ71は、I/Oアクセスを下位のバスに転送しなくなる。
CPU10は、コンピュータシステム1の起動後、NVRAM40から読み出された制御プログラムを実行することにより、PCIデバイス/ブリッジ対応表作成処理部12Aおよびアドレス割当処理部12Bとして機能する。なお、PCIデバイス/ブリッジ対応表作成処理部12Aを単に作成部12Aといい、アドレス割当処理部12Bを単に割当部12Bという場合がある。
PCIデバイス/ブリッジ対応表作成処理部12Aは、コンピュータシステム1の起動時における初期化処理(PCIバススキャン)の中で呼び出され、全てのデバイス81およびブリッジ71についてのPCIデバイス/ブリッジ対応表21の作成処理を行なう。以下、PCIデバイス/ブリッジ対応表21を単に対応表21という場合がある。
作成部12Aは、複数のブリッジ71のそれぞれにブリッジアドレスを割り当てながらブリッジアドレスの管理用テーブル21を作成する。その際、作成部12Aは、複数のブリッジ71のうちの一ブリッジに割り当てる未割当ブリッジアドレスが枯渇した場合、複数のブリッジ71のうちの他ブリッジに割り当てた既割当ブリッジアドレスの割当を解除する。そして、作成部12Aは、前記一ブリッジに割り当て、当該既割当ブリッジアドレスの割当解除および再割当に応じた更新および登録を対応表21に対して行なう。
割当部12Bは、CPU10から複数のデバイス81のうちの一デバイスに対する一アクセスを検知した場合、対応表21を参照する。そして、割当部12Bは、前記一アクセスを実行可能にするように複数のブリッジ71に対するブリッジアドレスの割当解除および再割当を行なうとともに、当該ブリッジアドレスの割当解除および再割当に応じた更新を対応表21に対して行なう。
ここで、本実施形態においても、PCI仕様により、ブリッジには4KB単位でアドレスが割り当てられる。また、I/O空間は例えば64KBだけ用意され、先頭の4KBはシステムに予約されている。したがって、15個(規定数)のブリッジ#1〜#15が割り当てられた時点でI/O空間におけるブリッジアドレスが枯渇する。本実施形態では、以下に詳述するごとく、割当部12Bが、作成部12Aによって作成された対応表21を使用してI/Oアクセス処理(アドレス割当処理)を行なう。これにより、規定数を超える数(16個以上)のブリッジ71が備えられてブリッジアドレスが枯渇しても、規定数を超える数のブリッジ71を同時に使用することが可能になる。なお、PCIデバイス/ブリッジ対応表作成部12Aによる対応表21の作成処理については、図3〜図14(B)を参照しながら具体的に説明する。また、アドレス割当処理部12BによるI/Oアクセス処理(アドレス割当処理)については、図15〜図21(B)を参照しながら具体的に説明する。
〔1−2〕対応表の構成
図3および図4を参照しながら、PCIデバイス/ブリッジ対応表作成部12Aによって作成される対応表21の構成について説明する。なお、図3は、図1に示す情報処理装置1においてI/Oアドレス割当対象(PCIデバイス81およびPCIブリッジ71)を含む具体的な構成の一例を示すブロック図である。また、図4は、図3に示す構成について作成される対応表21の一例を示す図である。
図3に示す具体的な構成の一例において、CPU10に接続されたホストブリッジ51には、PCIバス60(バス#0)を介して16個のPCIブリッジ71が接続されている。各ブリッジ71には、コンフィグレーションレジスタ72が備えられ、コンフィグレーションレジスタ72におけるI/Oベースアドレスレジスタ72aおよびI/Oリミットアドレスレジスタ72bを用いてブリッジ71に対するI/Oアドレスの設定/解除が行なわれる。なお、ブリッジを示す符号としては、複数のブリッジのうちの一つを特定する際には、ブリッジ71を識別するための識別情報(ID;ブリッジデバイスのデバイス番号)を示すPCIブリッジ#1〜#16が用いられ、任意のブリッジを指す際には符号71が用いられる。
また、各ブリッジ71には、PCIバス60(バス#1〜#16)を介して2個のPCIデバイス81が接続されている。つまり、PCIブリッジ#i(i=1〜16)には、バス#iを介して2つのPCIデバイス#2i−1,#2iが接続されている。したがって、図3に示す例では、32個のPCIデバイス#1〜#32が備えられている。なお、デバイスを示す符号としては、複数のデバイスのうちの一つを特定する際には、デバイス81を識別するための識別情報(ID)を示すPCIデバイス#1〜#32が用いられ、任意のデバイスを指す際には符号81が用いられる。また、バス#0〜#16は、PCIバス60を特定するためのバス番号を示し、システム起動時の初期化処理でPCIバススキャンを実行することにより付与される。
図3に示す構成について作成部12Aによって作成される対応表21は、例えば図4に示す構成を有する。つまり、作成部12Aは、システム起動時の初期化処理に際して、複数のデバイス81のそれぞれに異なるデバイスアドレスを割り当てるとともに複数のブリッジ71のそれぞれにブリッジアドレスを割り当てながら、対応表21を作成する。その際、作成部12Aは、図4に示すように、対応表21において、各PCIデバイス81に割り当てたI/Oアドレス空間毎に一行(一レコード)を作成する。各行は、下記項目(a1)〜(a4)に示す情報を有する。
(a1)各PCIデバイス81に割り当てられたI/Oアドレス(PCIデバイスアドレス欄)
(a2)各デバイス81が属するブリッジ(デバイスアクセス時に経由するブリッジ)71を特定するPCIブリッジの識別名(ブリッジ識別情報;PCIブリッジ欄)
(a3)項目(a2)の識別名によって特定されるブリッジ71に割り当てられたI/Oアドレス空間(ブリッジアドレスの範囲;ブリッジアドレス欄)
(a4)項目(a3)のブリッジアドレスが項目(a2)の識別名によって特定されるブリッジ71において有効であるか否かを示すアドレス割当フラグ(割当情報;アドレス割当欄)
なお、ブリッジ71は、ホストブリッジ51から見てブリッジデバイスのデバイス番号で識別可能なため、項目(a2)のブリッジ71の識別名としては、デバイス番号を使用することができる。また、デバイスアクセス時に複数のブリッジ71を経由する場合、ホストブリッジ51直下のブリッジ71が、対応表21への登録対象となる。
項目(a3)における、ブリッジ71に割り当てるI/Oアドレス空間は、PCIバス60の初期化つまりPCIバススキャン時にPCIバスブリッジに設定したI/Oアドレス空間のことである。作成部12Aは、対応表21の作成中にI/Oアドレス空間が枯渇した場合、複数のブリッジ71に重複するI/Oアドレスを割り当てることになる。図3に示す例では、PCIブリッジ#1とPCIブリッジ#16とに対し、同じI/Oアドレス空間1000〜1FFFが重複して割り当てられている。この場合、作成部12Aは、これらのブリッジ#1,#16の一つだけ有効化し、他のブリッジに対するI/Oアドレス空間の割当を解除する。
つまり、作成部12Aは、図3に示すように、ブリッジ#16(一ブリッジ)に割り当てる未割当ブリッジアドレスが枯渇した場合、ブリッジ#1(他ブリッジ)に対する既割当ブリッジアドレス1000〜1FFFの割当を解除してブリッジ#16に割り当てる。そして、作成部12Aは、図4に示すように、対応表21において、アドレス割当を解除されたブリッジ#1に対応するアドレス割当欄に「なし(無効)」を設定するとともに、有効化されたブリッジ#16に対応するアドレス割当欄に「あり(有効)」を設定する。なお、I/Oアドレス空間が枯渇して全てのブリッジ71にI/Oアドレスを割り当てられない場合の、より詳細な処理については、図7および図12(A)〜図14(B)を参照しながら後述する。
ここで、ブリッジ71へのI/Oアドレス空間の割当について説明する。ブリッジ71は、上位のPCIバス60の一つと下位のPCIバス群とをつなぐ働きをする。上位のPCIバス60からI/Oアクセスが要求された場合、その要求を下位のバス60に転送するか否かは、ブリッジ71に設定されたI/Oアドレス空間によって判定される。すなわち、アクセス対象のI/Oアドレスが、ブリッジ71に設定されたI/Oアドレス空間に含まれる場合、ブリッジ71は、上位のバス60からのI/Oアクセスを下位のPCIバス60に転送する。そして、下位のバス60に当該I/Oアドレスに対応するPCIデバイス81があれば、そのデバイス81がI/Oアクセスを処理する。
ブリッジ71は、図1〜図3に示すように、I/Oベースアドレスレジスタ72aおよびI/Oリミットアドレスレジスタ72bを含むコンフィグレーションレジスタ72を有している。そして、各ブリッジ71に対するI/Oアドレス空間の割当は、前述したように、作成部12Aまたは割当部12BがI/Oベースアドレスレジスタ72aとI/Oリミットアドレスレジスタ72bとに設定範囲の下限値と上限値とをそれぞれ設定することによって行なわれる。また、作成部12Aまたは割当部12Bがこれらのレジスタ72a,72bに0を設定することにより、ブリッジ71に対するI/Oアドレス空間の割当が解除され、ブリッジ71は、上位のバス60からのI/Oアクセスを下位のバス60に転送しなくなる。
〔1−3〕対応表の作成
PCIデバイス/ブリッジ対応表作成処理部12Aは、PCIデバイス81にI/Oアドレスを割り当てながら対応表21を作成する。以下に、対応表21の作成処理の概要を説明する。
対応表21の作成処理では、まず、全てのPCIブリッジ71のバス番号が初期化される。この時点で、対応表21は空の状態に初期化される。
次に、PCIバス60に対する深さ優先探索を行なうことでPCIデバイス81およびPCIブリッジ71が検索され、PCIデバイス81およびPCIブリッジ71のI/Oアドレス空間が設定される。PCIデバイス81が検出された場合、I/Oアドレス空間が設定されるとともに、対応表21にデバイス81を記述する行が追加される。ブリッジ71のI/Oアドレス範囲には、ブリッジ71配下の全デバイス81のI/Oアドレス空間の和集合が設定される。
ブリッジ71やデバイス81に割り当てるI/O空間が不足した場合、作成部21Aは、I/O空間の割当アドレスを初期値(0x1000)に戻して処理を継続する。その際、0x1000番地は、他のデバイス81に既に割り当て済みなので、作成部12Aは、0x1000番地の次に割り当て可能なI/Oアドレスを使用する。また、作成部12Aは、対応表21の「ブリッジアドレス」欄と「アドレス割当」欄を参照して、当該I/Oアドレスを割り当てられているブリッジ71を検索する。このブリッジ71に対するI/Oアドレス空間の割当を初期値(未割当状態)に戻し、対応表21の「アドレス割当」欄に「なし」を設定する。
例えば、前述した図3および図4において、作成部12Aは、ブリッジ#15にI/Oアドレス空間を割り当てた段階で、I/Oアドレスを使い切り、ブリッジ#16配下のデバイス#31,#32に割り当てるI/Oアドレスが不足する。このとき、次のI/Oアドレスは、0x1000以後において最初に未割り当てなアドレスである0x1020になる。作成部12Aは、対応表21の「ブリッジアドレス」欄を参照することで、アドレス0x1020を割り当てられているブリッジ71はブリッジ#1であると判断する。そして、作成部12Aは、ブリッジ#1に対するI/Oアドレス空間の割当をリセット(解除)し、対応表21の「アドレス割当」欄も「なし」に設定する。次に、作成部12Aは、アドレス0x1020〜0x102FをPCIデバイス#31に、アドレス0x1030〜0x103FをPCIデバイス#32に割り当ててから、ブリッジ#16のレジスタ72a,72bに0x1000〜0x1FFFを割り当て、対応表21の「アドレス割当」欄には「あり」を設定する。
ついで、図5〜図7に示すフローチャートに従って、図8〜図14(B)を参照しながら、PCIデバイス/ブリッジ対応表作成処理部12Aによる対応表21の作成処理について詳細に説明する。ここで、図5は、図1に示す情報処理装置1の作成部12Aによる対応表21の作成処理を説明するフローチャート(ステップS10〜S40)である。図6は、図5に示す対応表21の作成処理におけるバス設定処理(ステップS20)を説明するフローチャート(ステップS21〜S26)である。図7は、図5に示す対応表21の作成処理におけるI/O設定処理(ステップS40)を説明するフローチャート(ステップS401〜S416)である。
なお、図3および図4では、ブリッジ71が一階層のみの構成を例示したが、図8(A)〜図14(B)では、ブリッジ#1およびブリッジ#2が階層的に備えられている構成についての対応表21の作成処理について説明する。つまり、ブリッジ#1には、バス#1を介してデバイス#1およびブリッジ#2が接続され、ブリッジ#2には、バス#2を介して2つのデバイス#2,#3が接続されている。また、ブリッジ#3には、バス#3を介して2つのデバイス#4,#5が接続され、ブリッジ#15には、バス#15を介して2つのデバイス#29,#30が接続され、ブリッジ#16には、バス#16を介して2つのデバイス#31,#32が接続されている。
作成部12Aによる対応表作成処理では、次I/Oと次バスとの2つの変数が使用される。次I/Oは、次のデバイス81に割り当てるI/Oアドレスを示し、次バスは、次のPCIバス60に割り当てるバス番号を示し、例えばメモリ20に保持される。次I/Oの初期値は0x1000に設定され、次バスの初期値は1に設定される。初期値の設定は、対応表作成処理の開始時に行なわれる(図5のステップS10)。
初期値の設定後、作成部12Aは、バス設定サブルーチン(図6のステップS21〜S26)を実行する(図5のステップS20)。バス設定サブルーチンは、引数にバスブリッジ71を指定する。具体的には、バスブリッジ71のバス番号とデバイス番号とが指定されるが、バスブリッジ71のバス番号とデバイス番号とは、図では、総称的にブリッジまたはルートバスブリッジと表記される。バスブリッジ71は、上位のバス(primary_bus)60と下位のバス(secondary_bus)60とを結合する。バスブリッジ71の下位のバス60は、一般に、複数本存在するため、セカンダリバス番号“secondary_bus”に加えてサブオーディナリバス番号“subordinary_bus”が指定される。次の条件を満たすバス番号を付与されたバスが、下位のバスとなる。
“secondary_bus”≦ バス番号 <“subordinary_bus”
バス設定サブルーチンは、まず、指定されたブリッジ71の“secondary_bus”に「次バス」の値(バス番号)を設定する(ステップS21)。バス設定サブルーチンにおいて、作成部12Aは、ブリッジ配下の全バスにバス番号を割り当てた後(図6のステップS22〜S25)、ブリッジ71の“subordinary_bus”に「次バス」を設定することで、下位バスのバス番号の範囲をブリッジ71に設定する(図6のステップS26)。作成部12Aは、ブリッジ71の設定完了後、「次バス」の値を一つ増やすことで(図6のステップS26)、次のバスブリッジ71に割り当てるバス番号が重複しないようにする。バス設定サブルーチンは、指定ブリッジ71の直下にある全デバイス81を検索する(図6のステップS22〜S25)。つまり、ブリッジ71の下位のバス(セカンダリバス)上のデバイス番号#0から#31までのデバイスを検索する(ステップS22〜S25)。このようにして検索されたデバイスがブリッジである都度(ステップS23のYESルート)、作成部12Aは、バス設定サブルーチンを再帰的に呼び出し、深さ優先でバス番号の設定を行なう(ステップS24)。バス番号#0〜#16の設定が完了した状態を、図8(A)に示す。ここで、図8(A)は、図1に示す情報処理装置1においてI/Oアドレス割当対象を含む具体的な構成の他例および当該構成のバス設定処理後の状態を示すブロック図である。図8(A)に示す構成は、前述したように、図3に示した構成とは異なり、ブリッジ#1およびブリッジ#2を階層的に備えている。
続いて、作成部12Aは、図8(B)に示すように、空の対応表21を作成する(図5のステップS30)。図8(B)は、図8(A)に示す構成について作成される対応表21の初期状態を示す図である。図8(B)に示す対応表21が、対応表21の初期値になる。
次に、作成部12Aは、I/O設定サブルーチン(図7のステップS401〜S416)を実行する(図5のステップS40)。I/O設定サブルーチンは、ブリッジ71を指定して実行され、指定ブリッジ配下のPCIブリッジ71とPCIデバイス81にI/Oアドレス空間を割り当てると同時に、対応表21を完成させる。I/O設定サブルーチンは、I/O範囲(I/Oアドレス範囲)を、ローカル変数(I/O範囲変数)として、例えばメモリ20に保持する。このローカル変数は、指定ブリッジとその配下のデバイス群とに割り当てたI/O範囲を示す。作成部12Aは、まず、I/O範囲の初期値として空集合を設定する(ステップS401)。
作成部12Aは、指定ブリッジ直下の全デバイスを調べ(ステップS402〜S411)、デバイスがブリッジの場合(ステップS403のYESルート)、I/O設定サブルーチンを再帰的に呼び出し(ステップS404)、子ブリッジにI/Oアドレス空間を割り当てる。この後、作成部12Aは、I/O範囲変数に、今回、子ブリッジに割り当てたI/Oアドレス空間を加算する(ステップS405)。一方、作成部12Aは、デバイスがPCIデバイスの場合(ステップS403のNOルート)、当該PCIデバイスにI/Oアドレス空間を割り当てると同時に、対応表21に、当該PCIデバイスに対応した行を追加する(ステップS406〜S410)。ステップS406〜S410の処理の詳細については後述する。なお、デバイスがPCIデバイスの場合も、作成部12Aは、ローカル変数であるI/O範囲変数に、今回、当該PCIデバイスに割り当てたI/Oアドレス空間を加算する(ステップS409)。
全デバイスの処理(ステップS402〜S411)が完了した後、作成部12Aは、I/O範囲変数を、指定ブリッジのI/O範囲(レジスタ72a,72b)に設定する(ステップS412)。そして、作成部12Aは、対応表21のPCIブリッジ欄を調べ、指定ブリッジに対応する行のブリッジアドレス欄に「I/O範囲」を設定し、同行のアドレス割当欄に「あり」を設定して対応表21を完成させる(ステップS413)。
本実施形態では、ブリッジ71(レジスタ72a,72b)に設定するI/Oアドレス空間は4KBバウンダリであるので、次I/Oは、4KBバウンダリまで切り上げて調整される(ステップS414)。このようにして、次I/Oが0x10000以上になることがあるが、その場合(ステップS415のYESルート)、次I/Oに、0x1000以降、最初の空きアドレスが設定される(ステップS416)。つまり、0x1000番地は既に他のPCIデバイス81に割当済みであるので、作成部12Aは、割当済みのI/Oアドレス空間を避け、その後の空きアドレスを次I/Oとする。なお、次I/Oが0x10000未満である場合(ステップS415のNOルート)、作成部12Aは、ステップS416の処理を行なうことなく、指定ブリッジに対するI/O設定処理を終了する。
I/O設定サブルーチンで、デバイス81にI/Oアドレスを設定する処理は、三段階で実施される。まず、使用するI/Oアドレスが他のブリッジ71に割当済みである場合(ステップS406のYESルート)、当該他のブリッジ71に対する当該I/Oアドレスの割当を解除する処理(ステップS407)が実施される。ついで、デバイス81にI/Oアドレス範囲が設定され(ステップS408)、最後に、対応表21にデバイス81が登録される(ステップS410)。
まず、作成部12Aは、次I/Oで示されるアドレスが対応表21のブリッジアドレス欄に含まれ、かつ、アドレス割当欄が「あり」の行を検索する。このような行がある場合(ステップS406のYESルート)、当該行のPCIブリッジ欄の識別名で特定されるブリッジ71には、次I/Oのアドレスが割り当てられている。この場合、作成部12Aは、当該ブリッジ71のI/Oアドレス空間割当を初期化し、割当を解除する。割当解除は、ブリッジ71におけるコンフィグレーションレジスタ72のレジスタ72a,72bに0を設定することで行なわれる。そして、作成部12Aは、検索結果の行のアドレス割当欄を「あり」から「なし」に書き換え、アドレス割当を解除したことを対応表21に登録する(ステップS407)。
ついで、作成部12Aは、PCIデバイス81のI/Oアドレス空間に次I/Oを設定する(ステップS408)。各デバイス81は、デバイス固有のI/Oアドレス空間の長さを持つので、当該長さをPCIデバイスから取得し、当該長さ分だけ、次I/Oを進める。そして、作成部12Aは、PCIデバイス81に割り当てたI/Oアドレス空間をI/O範囲に追加する(ステップS409)。
最後に、作成部12Aは、処理したデバイス81に対応する行を対応表21に追加する(ステップS410)。追加する行は、以下の形式となる。
PCIデバイスアドレス=PCIデバイスに設定したI/Oアドレス範囲
PCIブリッジ =指定ブリッジのバス番号とデバイス番号
ブリッジアドレス =空
アドレス割当 =空
この段階で、ブリッジアドレス欄とアドレス割当欄は、設定されず、全てのデバイスの処理が完了し、指定ブリッジのI/Oアドレス範囲が確定した段階で、まとめて設定される。
ここで、図9(A)〜図14(B)を参照しながら、図8(A)に示す構成のうち、ブリッジ#1,#2,#16およびデバイス#1〜#3,#31,#32に対するI/O設定処理について具体的に説明する。なお、図9(A)〜図14(A)は、それぞれ図8(A)に示す構成に対するI/O設定処理を説明するブロック図である。また、図9(B)〜図14(B)は、それぞれ図9(A)〜図14(A)に示す構成に対する対応表21の作成状態を示す図である。
まず、図9(A)に示すように、作成部12Aは、バス#0のバススキャン(a1)を行ない、ブリッジ#1を確認すると((1.1)参照)、ブリッジ#1配下のバス#1のバススキャン(a1.1)を行なう。作成部12Aは、バス#1のバススキャン(a1.1)に伴い、デバイス#1を確認すると((1.1.1)参照)、デバイス#1にI/O範囲1000〜100Fを割り当てる。そして、作成部12Aは、図9(B)に示すように、対応表21におけるデバイス#1の行(1.1.1)のPCIデバイスアドレス欄に「1000〜100F」を設定し、同行(1.1.1)のPCIブリッジ欄に「PCIブリッジ#1」を設定する。
作成部12Aは、バス#1のバススキャン(a1.1)に伴い、ブリッジ#2を確認すると((1.1.2)参照)、ブリッジ#2配下のバス#2のバススキャン(a1.1.2)を行なう。作成部12Aは、バス#2のバススキャン(a1.1.2)に伴い、デバイス#2を確認すると((1.1.2.1)参照)、デバイス#2にI/O範囲2000〜200Fを割り当てる。そして、作成部12Aは、図9(B)に示すように、対応表21におけるデバイス#2の行(1.1.2.1)のPCIデバイスアドレス欄に「2000〜200F」を設定し、同行のPCIブリッジ欄に「PCIブリッジ#2」を設定する。
作成部12Aは、バス#2のバススキャン(a1.1.2)に伴い、デバイス#3を確認すると((1.1.2.2)参照)、デバイス#3にI/O範囲2010〜201Fを割り当てる。そして、作成部12Aは、図9(B)に示すように、対応表21におけるデバイス#3の行(1.1.2.2)のPCIデバイスアドレス欄に「2010〜201F」を設定し、同行(1.1.2.2)のPCIブリッジ欄に「PCIブリッジ#2」を設定する。
この後、作成部12Aは、図10(A)に示すように、ブリッジ#2配下のデバイス#2,#3に割り当てられたI/O範囲の総和を含む、4KBのI/O範囲2000〜2FFFをブリッジ#2(レジスタ72a,72b)に割り当てる(図10(A)の矢印(a2),(a3)参照)。そして、作成部12Aは、図10(B)に示すように、対応表21におけるデバイス#2,#3の行のブリッジアドレス欄に「2000〜2FFF」を設定し、同行のアドレス割当欄に「あり」を設定する。
ついで、作成部12Aは、図11(A)に示すように、ブリッジ#1配下のデバイス#1およびブリッジ#2に割り当てられたI/O範囲の総和を含む、8KBのI/O範囲1000〜2FFFをブリッジ#1(レジスタ72a,72b)に割り当てる(図11(A)の矢印(a4),(a5)参照)。そして、作成部12Aは、図11(B)に示すように、対応表21におけるデバイス#1の行のブリッジアドレス欄に「1000〜2FFF」を設定し、同行のアドレス割当欄に「あり」を設定する。
作成部12Aは、上述のようなI/O設定処理を繰り返し、例えば図12(A)および図12(B)に示すように、ブリッジ#15に対するI/O範囲の割当を完了し、ブリッジ#16に割り当てるべき未割当ブリッジアドレスが枯渇した場合、以下のようなI/O設定処理を実行する。つまり、図12(A)に示すように、作成部12Aは、バス#0のバススキャン(a1)に伴い、ブリッジ#16を確認すると((1.N)参照)、ブリッジ#16配下のバス#16のバススキャン(a1.N)を行なう。
作成部12Aは、図13(A)に示すように、バス#16のバススキャン(a1.N)に伴い、デバイス#31を確認すると((1.N.1)参照)、デバイス#31にI/O範囲1020〜102Fを割り当てる。そして、作成部12Aは、図13(B)に示すように、対応表21のブリッジアドレス欄を検索し、デバイス#31に割り当てたI/O範囲1020〜102Fを含む行(図13(B)では最上位行)のアドレス割当欄を「あり」から「なし」に書き換える。
また、作成部12Aは、対応表21におけるデバイス#16の行(1.N.1)のPCIデバイスアドレス欄に「1020〜102F」を設定し、同行のPCIブリッジ欄に「PCIブリッジ#16」を設定する。さらに、作成部12Aは、バス#16のバススキャン(a1.N)に伴い、デバイス#32を確認すると((1.N.2)参照)、デバイス#32にI/O範囲1030〜103Fを割り当てる。そして、作成部12Aは、図13(B)に示すように、対応表21におけるデバイス#32の行(1.N.2)のPCIデバイスアドレス欄に「1030〜103F」を設定し、同行(1.N.2)のPCIブリッジ欄に「PCIブリッジ#16」を設定する。
この後、作成部12Aは、図14(A)に示すように、ブリッジ#16配下のデバイス#31,#32に割り当てられたI/O範囲の総和を含む、4KBのI/O範囲1000〜1FFFをブリッジ#16(レジスタ72a,72b)に割り当てる(図14(A)の矢印(a6),(a7)参照)。そして、作成部12Aは、図14(B)に示すように、対応表21におけるデバイス#31,#32の行のブリッジアドレス欄に「1000〜1FFF」を設定し、同行のアドレス割当欄に「あり」を設定する。
〔1−4〕I/Oアクセス処理(アドレス割当処理)
ついで、図15に示すフローチャート(ステップS51〜S57)に従って、図16〜図21(B)を参照しながら、アドレス割当処理部12BによるPCIデバイスI/Oアクセス処理(PCIデバイス81に対しI/Oアクセスが発生した場合の処理)について詳細に説明する。ここで、図16〜図19は、図15に示すI/Oアクセス処理を説明すべく具体的な対応表を示す図である。また、図20(A)および図21(A)は、図15に示すI/Oアクセス処理を説明するブロック図、図20(B)および図21(B)は、それぞれ図20(A)および図21(A)に示す処理に対応する対応表の状態を示す図である。なお、図16〜図21(B)では、図3および図4と同様の構成つまりブリッジ71が一階層のみである構成に対する、I/Oアクセス処理が例示されている。
割当部12BによるI/Oアクセス処理には、2種類の処理がある。一つの処理は、既にブリッジ71にI/Oアドレス空間が割り当て済みの場合(ステップS52のYESルート)の処理(ステップS57)である。もう一つの処理は、ブリッジ71にI/Oアドレス空間が割り当てられていない場合(ステップS52のNOルート)の処理(ステップS53〜S57)である。割当部12Bは、I/Oアクセス処理において、最初に、上記2種類の処理のいずれを実行するか判定し、判定結果に従って、I/Oアドレス空間が割当済みの場合の処理、または、I/Oアドレス空間が割り当てられていない場合の処理を実行する。各処理は、作成部12Aによって作成された対応表21を参照、更新しながら実行される。以下に、CPU10が例えば1000番地に対するI/Oアクセスを行なった場合の、割当部12BによるI/Oアクセス処理について、具体的に説明する。
〔1−4−1〕I/Oアクセス処理の判定(ステップS51,S52)
PCIデバイス81へのI/Oアクセスが発生した場合、割当部12Bは、対応表21を参照し、PCIデバイス81が接続されているブリッジ71にI/Oアドレス空間が割り当てられているか否かを判定する(ステップS51)。このとき、割当部12Bは、I/Oアクセスの要求アドレスをキーとして、対応表21のPCIデバイスアドレスのカラムを確認する。PCIデバイスアドレス欄に登録されたI/O範囲が、要求アドレス(ここでは1000番地)を含む場合、発生したI/Oアクセスは、その行(第1レコード)のデバイス81へのI/Oアクセスであると判定する(図16および図17参照)。つまり、PCIデバイスアドレス欄に要求アドレスを含む第1レコード(ここでは図17の最上位行)が対応表21から検索される。ここで、対応表21の作成時に、全てのPCIデバイス81に異なるI/Oアドレス空間を割り当てているため、検索で見つかる行はたかだか一つである(図17参照)。割当部12Bは、検索した行のアドレス割当欄を確認しアドレス割当欄が「あり」であれば、ブリッジ71にI/Oアドレスが割り当て済みであると判定する(ステップS52のYESルート)。一方、割当部12Bは、アドレス割当欄が「なし」であれば(第1レコードにおける割当情報が「無効」である場合)、ブリッジ71にI/Oが割り当てられていないと判定する(ステップS52のNOルート)。
〔1−4−2〕ブリッジにI/Oアドレス空間が割り当て済みの場合の処理
ブリッジ71にI/Oアドレス空間が割り当て済みと判定した場合(ステップS52のYESルート)、PCIデバイス81が接続されているブリッジ71に対し、適切にI/Oアドレス空間が割り当てられている。このため、ブリッジ71に対する特別な処理は不要であり、通常のI/Oアクセスを行なうことで、PCIデバイス81に対してI/Oアクセスが実行される(ステップS57)。
〔1−4−3〕ブリッジにI/Oアドレス空間が割り当てられていない場合の処理
ブリッジ71にI/Oアドレス空間が割り当てられていないと判定した場合(ステップS52のNOルート)、PCIデバイス81の接続されているブリッジ71には、I/Oアドレス空間が割り当てられておらず、そのI/Oアドレス空間は別のブリッジ71に割り当てられている状態である。目的のPCIデバイス81が接続されているブリッジ71は、I/Oアクセスをデコードしないため、このままI/Oアクセスを実行しても、PCIデバイス81までI/Oアクセスが転送されない。よって、I/Oアドレス空間が割り当てられているブリッジ71の割当を解除し、PCIデバイス81が接続されているブリッジ71にI/Oアドレス空間を再割り当てすることで、目的のPCIデバイス81にI/Oアクセスが転送される状態にする必要がある。具体的に、割当部12Bは、以下の5段階の処理(p1)〜(p5)を行なう。
(p1)割当I/Oアドレス空間の取得
割当部12Bは、対応表21を参照し、アクセス対象のPCIデバイス81が接続されているブリッジ71のI/Oアドレス空間(ここでは1000〜1FFFF)を取得する。
(p2)解除対象ブリッジの取得
割当部12Bは、処理(p1)で得られた割当I/Oアドレス空間をキーに対応表21を検索し、割当I/Oアドレス空間が現在割り当てられているブリッジ71(ここではブリッジ#16)を、解除対象ブリッジとして特定する。つまり、割当部12Bは、上記第1レコード(図17参照)におけるブリッジアドレスと同一のブリッジアドレスを含み且つアドレス割当欄に「あり(有効)」を設定された第2レコード(図19参照)を、対応表21から検索する。
(p3)解除対象ブリッジのI/Oアドレス空間割り当て解除
割当部12Bは、処理(p2)で特定されたブリッジ71のI/Oアドレス空間割当を解除する。つまり、割当部12Bは、前記第2レコードにおける、前記第1レコードの第1ブリッジ識別情報(ブリッジ#1)とは異なる第2ブリッジ識別情報(ブリッジ#16)に対応する第2ブリッジ(#16)に対する同一のブリッジアドレス(1000〜1FFF)の割当を解除する(図20(A)参照)。また、割当部12Bは、前記第2レコードにおけるアドレス割当欄に「なし(無効)」を設定する(図20(B)参照)。
(p4)設定対象ブリッジのI/Oアドレス割当
割当部12Bは、アクセス対象のPCIデバイス81が接続されているブリッジ71にI/Oアドレス空間を割り当てる。つまり、割当部12Bは、前記第1レコードにおける第1ブリッジ識別情報に対応する第1ブリッジ(#1)に対し同一のブリッジアドレス(1000〜1FFF)を割り当てる(図21(A)参照)。また、割当部12Bは、前記第1レコードにおけるアドレス割当欄に「なし(無効)」を設定する(図21(B)参照)。
(p5)PCIデバイスへのI/Oアクセス
〔1−4−3−1〕割当I/Oアドレス空間の取得(処理(p1);ステップS53)
割当部12Bは、ステップS51で検索・取得した対応表21の行(第1レコード)におけるPCIブリッジ欄およびブリッジアドレス欄の内容を確認する。これにより、割当部12Bは、I/Oアドレス空間を割り当てるべき設定対象ブリッジのID(ここでは#1)と、当該設定対象ブリッジに割り当てるべきI/Oアドレス空間とを取得する。図17に示す例では、設定対象ブリッジとしてブリッジ#1が取得され、割当I/Oアドレス空間として1000〜1FFFが取得される。
〔1−4−3−2〕解除対象ブリッジの取得(処理(p2);ステップS54)
割当部12Bは、図18に示すように、ステップS53で取得した割当I/Oアドレス空間をキーとして対応表21のブリッジアドレス欄を順番に確認していく。これにより、割当部12Bは、図19に示すように、ブリッジアドレス欄に設定されたブリッジアドレスが割当I/Oアドレス空間と重複しており、且つ、アドレス割当欄に「あり」を設定された行(第2レコード)を検索する。この検索処理によって発見されたブリッジが、I/Oアドレス空間の割当を解除すべき解除対象ブリッジとなる。
図18および図19に示す例では、割当I/Oアドレス空間1000〜1FFFをキーとして対応表21の検索が行なわれ、解除対象ブリッジとして、ブリッジ#1のブリッジアドレス1000〜1FFFと重複するブリッジ#16が取得される。図18および図19に示す例では、ブリッジ#1のブリッジアドレス1000〜1FFFと重複するブリッジとして、一つのブリッジが取得されているが、2以上のブリッジが取得される場合もある。
〔1−4−3−3〕解除対象ブリッジのI/Oアドレス空間割り当て解除(処理(p3);ステップS55)
割当部12Bは、ステップS54で取得された解除対象ブリッジのI/OベースアドレスとI/Oリミットアドレスの両レジスタ72a,72bに0を設定することで、図20(A)に示すように、解除対象ブリッジに対するI/Oアドレス空間割当を解除する。
その後、割当部12Bは、対応表21のPCIブリッジ欄の内容が解除対象ブリッジの識別名と一致する行(第2レコード)におけるアドレス割当欄を、図20(B)に示すように、「なし」に更新する。PCIブリッジ欄の内容が解除対象ブリッジの識別名と一致する行が複数存在する場合、割当部12Bは、その複数の行すべてにおけるアドレス割当欄を「なし」に更新する。
図20(A)および図20(B)に示す例において、割当部12Bは、解除対象ブリッジであるブリッジ#16のレジスタ72a,72bに0を設定してI/Oアドレス空間の割当を解除する。その後、割当部12Bは、対応表21のブリッジ#16に対応する全ての行のアドレス割当欄を「なし」に更新する。
〔1−4−3−4〕設定対象ブリッジのI/Oアドレス割当(処理(p4);ステップS56)
ここまでの処理で、図20(A)および図20(B)に示すように、アクセス対象のPCIデバイス81が接続されている設定対象ブリッジに割り当てるべきI/Oアドレス空間は、解放され、どのブリッジ71にも設定されていない状態になる。このような状態で、割当部12Bは、図21(A)に示すように、設定対象ブリッジのI/OベースアドレスとI/Oリミットアドレスの両レジスタ72a,72bにI/O範囲を設定し、設定対象ブリッジにI/Oアドレス空間を割り当てる。レジスタ72a,72bに対する設定後、割当部12Bは、図21(B)に示すように、対応表21のPCIブリッジ欄の内容が設定対象ブリッジの識別名と一致する行のアドレス割当欄を「あり」に更新する。PCIブリッジ欄の内容が設定対象ブリッジの識別名と一致する行が複数存在する場合、割当部12Bは、その複数の行すべてにおけるアドレス割当欄を「あり」に更新する。
図21(A)に示す例において、割当部12Bは、設定対象ブリッジであるブリッジ#1のレジスタ72a,72bに割当I/Oアドレス空間の下限値1000および上限値1FFFをそれぞれ設定する。また、図21(B)に示す例において、割当部12Bは、対応表21のブリッジ#1に対応する全ての行のアドレス割当欄を「あり」に更新する。この結果、I/Oアクセス対象のデバイス81が接続されているブリッジ71に対し、必要なI/Oアドレス空間が設定され、ブリッジ71は、I/Oアドレスをデコードし、アクセス対象のPCIデバイス81に対してI/Oアクセスを転送し始める。
〔1−4−3−5〕PCIデバイスへのI/Oアクセス(処理(p5);ステップS57)
要求されたI/Oアクセスが実行される。I/Oアクセスは、ステップS56で設定したブリッジ71を経由して、アクセス対象のPCIデバイス81に転送され、PCIデバイス81に対するI/Oアクセスが実行される。これにより、CPU10で動作するOSやアプリケーションは、所望の結果を得る。
〔1−5〕第1実施形態の効果
上述した第1実施形態のコンピュータシステム1によれば、割当部12Bが、作成部12AによってPCIバスの初期化時に作成された対応表21を参照、更新しながら、ブリッジ71に対するI/Oアドレス空間の割当解除や再割当を行なうことで、デバイス81に対するI/Oアクセス処理が実行される。これにより、コンピュータシステム1において、規定数を超える数(例えば16個以上)のブリッジ71が備えられてブリッジアドレスが枯渇しても、規定数を超える数のブリッジ71を同時に使用することが可能になる。
〔2〕第2実施形態の情報処理装置
〔2−1〕第2実施形態の構成
図22は、第2実施形態としての情報処理装置(コンピュータシステム)1Aの構成を示すブロック図である。なお、既述の符号と同一の符号は、同一もしくはほぼ同一の部分を示しているので、その説明は省略する。
図22に示すコンピュータシステム1Aも、第1実施形態のコンピュータシステム1と同様、CPU10,メモリ20,ストレージ30,NVRAM40,チップセット50,PCIバス60,スイッチ70,スロット80およびストレージ90を有している。
ただし、図22に示すコンピュータシステム1Aは、複数(図中、4)の仮想サーバVS1〜VS4を構築する一般的なアーキテクチャをもつ。また、BIOSプログラムには、CPU10をハイパーバイザ13として機能させるハイパーバイザプログラムが内蔵されている。ハイパーバイザプログラムには、CPU10を、上述したPCIデバイス/ブリッジ対応表作成処理部12Aおよびアドレス割当処理部12Bとして機能させる制御プログラムが含まれている。なお、ハイパーバイザ13による計算機の仮想化の実現の際には、インテルの各種仮想化支援機能であるVT−d,VT−x等を用いて処理の高速化が図られる。
また、ストレージ30には、仮想サーバVS1〜VS4用のOSおよびアプリケーションプログラムを含む仮想ストレージ31が構築される。
メモリ20は、CPU10によりNVRAM40から読み出されたBIOSプログラムや、仮想サーバVS1〜VS4により仮想ストレージ31から読み出されたOSおよびアプリケーションプログラムを展開されて保存する。また、メモリ20は、上述した対応表21のほか、ハイパーバイザ13により作成され更新される仮想サーバ構成情報22や、後述するミューテックス変数23を保存する。
CPU10は、コンピュータシステム1Aの起動後、NVRAM40から読み出されたハイパーバイザプログラムに含まれる制御プログラムを実行することにより、上述したPCIデバイス/ブリッジ対応表作成処理部12Aおよびアドレス割当処理部12Bとして機能する。
PCIデバイス/ブリッジ対応表作成処理部12Aは、コンピュータシステム1Aの起動時にハイパーバイザ13の初期化処理の中で呼び出され、対応表21の作成処理を行なう。第2実施形態におけるPCIデバイス/ブリッジ対応表作成部12Aによる対応表21の作成処理については、図23〜図27を参照しながら具体的に説明する。
また、アドレス割当処理部12Bは、ハイパーバイザ13が仮想サーバVS1〜VS4のうちの一つからPCIデバイス81に対するI/Oアクセスを検知(トラップ)すると呼び出され、I/Oアドレス空間の割当処理を行なう。第2実施形態におけるアドレス割当処理部12Bによるアドレス割当処理については、図23,図28,図29を参照しながら具体的に説明する。
なお、アドレス割当処理部12Bは、I/Oアクセスの検知に呼び出されてから同I/Oアクセスの実行を完了するまでの間に他の仮想サーバからI/Oアクセスをハイパーバイザ13が検知した場合、先行するアクセスの実行を完了するまで、他のアクセスについての処理を待機させる。アドレス割当処理部12Bによる待機処理は、メモリ20のミューテックス(MUTual EXclusion(相互排他))変数23を用いて行なわれる。アドレス割当処理部12Bは、ハイパーバイザ13により一の仮想サーバからI/Oアクセスを検知して呼び出されると、ミューテックス変数23に“1”を設定することによりロックを取得する。アドレス割当処理部12Bは、当該アクセスの完了に伴い、ミューテックス変数23を“0”に設定することによりロックを解放する。このように、アドレス割当処理部12B(ハイパーバイザ13)は、ミューテックス変数23が“1”に設定されている間、後続のアクセスを待機させることで、仮想サーバVS1〜VS4からデバイス81に対するI/Oアクセスに際し、対応表22を排他的に使用する。上述したアドレス割当処理部12Bによる待機処理については、図28を参照しながら後述する。
〔2−2〕第2実施形態による処理の流れ
以下では、第2実施形態のコンピュータシステム1Aの動作について、図23〜図29を参照しながら、より詳細に説明する。
まず、図23に示すシーケンス図(矢印A11〜A48)および図24に示すフローチャート(ステップS60〜S69)に従って、第2実施形態のコンピュータシステム1Aによる処理の流れについて説明する。
コンピュータシステム1Aが起動されると、CPU10は、ハイパーバイザプログラムを内蔵されたBIOSプログラムをNVRAM40から読み出してメモリ20に展開し、BIOSプログラムを実行することにより、BIOS11を起動する(ステップS60参照)。BIOS11は、コンピュータシステム1Aの初期化処理を実行した後、ハイパーバイザ13を起動する(矢印A11;ステップS61)。
ハイパーバイザ13は、起動されると、PCIデバイス/ブリッジ対応表作成処理部(作成部)12Aとしての機能を呼び出し(矢印A12)、PCIバススキャンを行ないながら、メモリ20上に、PCIデバイス/ブリッジ対応表21を作成する(矢印A13〜A30;ステップS62)。作成部12Aによる対応表21の作成処理については、図23の矢印A13〜A30および図25〜図27を参照しながら後述する。
ハイパーバイザ13は、対応表21の作成後、仮想サーバVS1〜VS4の構築や構成変更を行ない、仮想サーバ構成情報22を作成してメモリ20に保存する(矢印A31;ステップS63)。ハイパーバイザ13は、仮想サーバン構成情報22に基づき、仮想サーバVS1〜VS4にデバイスを割り当てた後、仮想サーバVS1〜VS4を起動する(矢印A32,A33;ステップS64)。仮想サーバVS1〜VS4は、自身に割り当てられたストレージ30(仮想ストレージ31)からOSを読み出してメモリ20に展開し、OSを起動し、OS上でアプリケーションを動作させる。なお、図23では、2つの仮想サーバVS1,VS2が図示されている。
仮想サーバVS1〜VS4の起動後、各仮想サーバが自身に割り当てられたデバイス81に対するI/Oアクセス要求を発行すると(ステップS65)、ハイパーバイザ13は、I/Oアクセス要求を検知してトラップする(矢印A34,A40;ステップS66)。ハイパーバイザ13は、I/Oアクセス要求をトラップすると、仮想サーバ構成情報22に基づき、仮想サーバVS1〜VS4から見たデバイス81のI/Oアドレスを、ハイパーバイザ13のI/Oアドレスに変換する。この後、ハイパーバイザ13は、アドレス割当処理部(割当部)12Bとしての機能を呼び出してアドレス割当処理を実行し、デバイス81に対するI/Oアクセスを実行させる(矢印A35〜A38,A41〜A47;ステップS67)。そして、ハイパーバイザ13は、デバイス81に対するアクセスの処理結果を仮想サーバに返すことで(矢印A39,A48)、仮想サーバは、デバイス81に対するアクセス結果を取得し(ステップS68)、他の処理へ移行する(ステップS69)。割当部12Bによるアドレス割当処理については、図23の矢印A35〜A38およびA41〜A47と、図28,図29とを参照しながら後述する。
〔2−2−1〕対応表の作成処理(ステップS62)
次に、図23に示す矢印A13〜A30および図25に示すフローチャート(ステップS621〜S628)に従って、図26および図27を参照しながら、作成部12Aによる対応表21の作成処理について説明する。なお、図26および図27は、図25に示す対応表21の作成処理においてブリッジアドレスが枯渇した場合の処理を説明する図である。なお、以下では、図3および図4と同様の構成つまりブリッジ71が一階層のみである構成に対し、対応表21の作成処理およびアドレス割当処理を行なう場合について説明する。
作成部12Aは、空の対応表21を作成してから(矢印A13;ステップS621)、全てのPCIブリッジ71(#1〜#16)に対し、以下の処理(矢印A14〜A30;ステップS622〜S628)を実行する。つまり、作成部12Aは、PCIバススキャンの実行(矢印A14,A15,A20,A25)に伴い、各ブリッジ71および各デバイス81に対しI/Oアドレスを割り当てながら、各デバイス81にアクセスするためのブリッジ71と、各デバイス81および各ブリッジ71に割り当てられたアドレスと、アドレス割当の有効/無効とを対応表21に登録する。
この過程で、作成部12Aは、対応表21を参照し、ブリッジ71に割当可能な未割当のI/Oアドレスが枯渇しているか否かを判定する(重複判定;矢印A16,A21,A26;ステップS623)。ブリッジ71に割当可能な未割当のI/Oアドレスが枯渇していない場合(矢印A16,A21;ステップS623のNOルート)、作成部12Aは、各ブリッジ71および各デバイス81に対し未割当のアドレスの割当を行なう(矢印A18,A17,A23,A22;ステップS625,S626)。そして、作成部12Aは、割当結果を対応表21に登録更新する(矢印A19,A24;ステップS627)。
作成部12Aは、同様の処理をブリッジ#1〜#15に対し繰り返し実行することにより、図26に示すように、ブリッジ#1〜#15に対し、I/Oアドレス空間が割り当てられる。この時点で、I/Oアドレス空間が枯渇し、作成部12Aは、16番目のブリッジ#16に対して新たなI/Oアドレス空間を割り当てることができない状態になっている。
図26に示すように、ブリッジ71に割当可能な未割当のI/Oアドレスが枯渇しブリッジ71に対し新たにI/Oアドレスを割り当てることができなくなった場合(矢印A26;ステップS623のYESルート)、作成部12Aは以下の処理を行なう。つまり、作成部12Aは、図27に示すように、既に対応表21に登録されているブリッジ#1のアドレス割当を解除し(矢印A27;ステップS624)、そのアドレス1000〜1FFFを新たなブリッジ#16に対して割り当てる(矢印A29;ステップS625)。このとき、ブリッジ#1のアドレス割当の解除は、上述したように、ブリッジ#1のレジスタ72a,72bに0を設定することによって行なわれる。また、作成部12Aは、新しく割り当てられたブリッジ#16のバスに接続されたデバイス#31,#32に対してそれぞれI/Oアドレス1020〜102F,1030〜103Fを割り当てる(矢印A28;ステップS626)。このとき、作成部12Aは、アドレス割当を解除したブリッジ#1に接続されているデバイス#1,#2のI/Oアドレス1000〜100F,1010〜101Fと重複しないように、デバイス#31,#32のI/Oアドレス1020〜102F,1030〜103Fを割り当てる。この後、作成部12Aは、ステップS624〜S626によって行なわれた割当解除や再割当の結果に従って、対応表21の更新を行なう(矢印A30;ステップS627)。
なお、図23では、デバイス81にアドレスを割り当ててからブリッジ71にアドレスを割り当てている。一方、図25では、ブリッジ71にアドレスを割り当ててからデバイス81にアドレスを割り当てている。ブリッジ71に対するアドレス割当とデバイス81に対するアドレス割当との実行順序は限定されない。
〔2−2−2〕アドレス割当処理(ステップS67)
次に、図23に示す矢印A35〜A38およびA41〜A47と図28に示すフローチャート(ステップS671〜S678)に従って、図29に参照しながら、割当部12Bによるアドレス割当処理について説明する。なお、図29は、図28に示すアドレス割当処理において、アクセス対象のデバイス81がアドレス未割当のブリッジ71に属している場合の処理を説明する図である。
割当部12Bは、ハイパーバイザ13によって呼び出されて起動されると(矢印A35,A41)、ミューテックスを取得してロックをかけた後(ステップS671)、仮想サーバVS1からトラップしたI/Oアクセス要求の転送先デバイス81のI/Oアドレスをキーにして対応表21を検索参照する。これにより、割当部12Bは、対応表21における当該転送先デバイス81についてのエントリ(行,レコード)を取得し、現在のI/Oアドレスの設定状態を確認する(矢印A36,A42;ステップS672)。
ここで、第2実施形態では、仮想サーバVS1〜VS4のうちの一つからデバイス81へのI/Oアクセス要求が処理されている間に、別の仮想サーバから別のデバイス81へのI/Oアクセス要求が発生する可能性がある。この場合、対応表21の参照・更新処理が同時に行なわれると、対応表21の整合が取れなくなる。このため、割当部12Bによるアドレス割当処理に際しては、対応表21の排他制御が必要になる。
そこで、第2実施形態の割当部12Bは、ミューテックス変数と呼ばれる“1”または“0”の値を採る共有記憶域(メモリ20上のミューテックス変数23参照)を用いて、対応表21の排他制御を行なう。割当部12Bは、各仮想サーバからデバイス81へのI/Oアクセス要求をトラップすると、以下のようにして、ミューテックス変数23にアクセスして排他処理を行なう。
つまり、最初に、割当部12Bは、メモリ20上のミューテック変数23の値を確認する。ミューテックス変数23の値が“1”の場合、対応表21は、今回のアクセスよりも先行する、別の仮想サーバからのアクセスに応じた処理に用いられている。このため、割当部12Bは、ミューテックス変数23の値が“0”になるまで、今回のアクセスを待機させる。
一方、ミューテックス変数23の値が“0”の場合、どの仮想サーバも対応表21を使用していないことを示している。このとき、割当部12Bは、ミューテックス変数23の値を“0”から“1”に設定して、対応表21を使用中であることを示す状態に切り換えることにより、ロックを取得する(ロックを掛ける;ステップS671)。この状態で、他の仮想サーバは、前述の通り、ミューテックス変数23の値が“0”になるまで処理を待っている。このため、ミューテックスを取得した仮想サーバ、つまりミューテックス変数21の値を“1”に切り換えた仮想サーバは、対応表21を排他的に使用することができる。
さて、割当部12Bは、ステップS672で取得されたエントリを参照し、アクセス対象のデバイス81までのブリッジ71にI/Oアドレスが割り当てられているか否か、つまり、前記エントリのアドレス割当欄に「あり」が設定されているか否かを判定する(ステップS673)。I/Oアドレスが割り当てられている場合(ステップS673のYESルート)、ブリッジ71に対し適切にI/Oアドレス空間が割り当てられている。このため、ブリッジ71に対する特別な処理は不要であり、通常のI/Oアクセスを行なうことで、PCIデバイス81に対してI/Oアクセスが実行される(矢印A37;ステップS677)。これにより、I/Oアクセス要求を発行した仮想サーバVS1は、所望の結果を取得する(矢印A38,A39)。
PCIデバイス81に対するI/Oアクセスを完了すると、割当部12Bはロックを解放する。つまり、割当部12Bは、ミューテックス変数23の値を“1”から“0”に戻してロックを解除する(ステップS678)。これにより、今まで待機していた別の仮想サーバがミューテックスを取得し、対応表21を使用することが可能になる。
これに対し、ステップS673でI/Oアドレスが割り当てられていないと判定した場合(ステップS673のNOルート)、割当部12Bは、対応表21を参照して、必要なI/Oアドレスを設定されているブリッジ71(例えばブリッジ#16)を解除対象ブリッジとして取得する(矢印A42;ステップS674)。この後、割当部12Bは、解除対象ブリッジ#16のI/Oアドレス1000〜1FFFを解除する(矢印A43;ステップS675;図29の矢印(1)参照)。この後、割当部12Bは、アクセス対象のデバイス81が接続されているブリッジ71(例えば#1)にI/Oアドレス1000〜1FFFを割り当ててから(矢印A44;ステップS676;図29の矢印(2)参照)、対応表21を更新する(矢印A45;ステップS676)。
ブリッジ#1にI/Oアドレスが設定されると、ハイパーバイザ13(割当部12B)は、デバイス#1または#2にアクセスする(矢印A46;ステップS677)。これにより、I/Oアクセス要求を発行した仮想サーバVS2は、所望の結果を取得する(矢印A47,A48)。この後、割当部12Bは、上述したように、ミューテックス変数23の値を“1”から“0”に戻してロックを解除する(ステップS678)。これにより、今まで待機していた別の仮想サーバがミューテックスを取得し、対応表21を使用することが可能になる。
〔2−3〕第2実施形態の効果
上述した第2実施形態のコンピュータシステム1Aによれば、第1実施形態と同様、割当部12Bが、作成部12AによってPCIバスの初期化時に作成された対応表21を参照、更新しながら、ブリッジ71に対するI/Oアドレス空間の割当解除や再割当を行なうことで、デバイス81に対するI/Oアクセス処理が実行される。これにより、コンピュータシステム1Aにおいて、規定数を超える数(例えば16個以上)のブリッジ71が備えられてブリッジアドレスが枯渇しても、規定数を超える数のブリッジ71を同時に使用することが可能になる。
また、第2実施形態のコンピュータシステム1Aでは、複数の仮想サーバから、各仮想サーバに割り当てられたデバイス81へのI/Oアクセス要求が発行された場合、後からI/Oアクセス要求を発行した仮想サーバによる処理は、ミューテックスによるロックが解放されるまで待機する。つまり、一の仮想サーバからデバイス81へのI/Oアクセス要求が処理されている間に、別の仮想サーバから別のデバイス81へのI/Oアクセス要求が発生したとしても、先行するI/Oアクセス要求に係る処理が完了するまで、後続のI/Oアクセス要求に係る処理は待機することになる。したがって、後続のI/Oアクセス要求によって対応表21の整合が取れなくなるのを確実に抑止することができる。例えば図23では、仮想サーバVS1からのI/Oアクセス要求に係る処理(矢印A34〜A39)が完了してから、仮想サーバVS2からのI/Oアクセス要求に係る処理(矢印A40〜A48)が実行される。
〔3〕第3実施形態の情報処理装置
〔3−1〕第3実施形態の構成
図30は、第3実施形態としての情報処理装置(コンピュータシステム)1Bの構成を示すブロック図である。なお、既述の符号と同一の符号は、同一もしくはほぼ同一の部分を示しているので、その説明は省略する。
図30に示すコンピュータシステム1Bも、第1実施形態のコンピュータシステム1と同様、CPU10,メモリ20,ストレージ30,NVRAM40,チップセット50,PCIバス60,スイッチ70,スロット80およびストレージ90を有している。
ただし、図30に示すコンピュータシステム1Bにおいて、上述したPCIデバイス/ブリッジ対応表作成処理部(作成部)12Aによる対応表21の作成処理は、OSの起動処理で行なわれる。また、上述したアドレス割当処理部(割当部)12Bとしての機能は、CPU10におけるOSの、複数のデバイス81のうちの一デバイスに対するアクセスの際に用いられるライブラリ14の中に含まれている。
〔3−2〕第3実施形態による処理の流れ
次に、図31に示すシーケンス図(矢印A50〜A89)に従って、第3実施形態のコンピュータシステム1Bによる処理の流れについて説明する。
コンピュータシステム1Bが起動されると、CPU10は、BIOSプログラムをNVRAM40から読み出してメモリ20に展開し、BIOSプログラムを実行することにより、BIOS11を起動する。BIOS11は、コンピュータシステム1Bの初期化処理を実行した後、ストレージ30からOSを読み出してメモリ20に展開し、OSを起動する(矢印A50)。
OSは、起動時に、ライブラリ14経由で、PCIデバイス/ブリッジ対応表作成処理部(作成部)12Aとしての機能を呼び出す(矢印A51,A52)。作成部12Aは、BIOS11とは別に、再度、PCIバススキャンを行ないながら、メモリ20上に、PCIデバイス/ブリッジ対応表21を作成する(矢印A53〜A70)。作成部12Aによる対応表21の作成処理(矢印A53〜A70)は、第2実施形態で説明した作成処理(図23の矢印A13〜A30)と同様である。
作成部12Aによる対応表21の作成処理では、各ブリッジ71や各デバイス81に対してI/Oアドレスを割り当てながら、対応表21に、上述した情報(a1)〜(a4)を登録する。この過程で、作成部12Aは、対応表21を参照し、ブリッジ71に割当可能な未割当のI/Oアドレスが枯渇しているか否かを判定する(重複判定;矢印A56,A61,A66)。ブリッジ71に割当可能な未割当のI/Oアドレスが枯渇していない場合(矢印A56,A61)、作成部12Aは、各ブリッジ71および各デバイス81に対し未割当のアドレスの割当を行なう(矢印A58,A57,A63,A62)。そして、作成部12Aは、割当結果を対応表21に登録更新する(矢印A59,A64)。
作成部12Aは、同様の処理をブリッジ#1〜#15に対し繰り返し実行することにより、ブリッジ#1〜#15に対し、I/Oアドレス空間が割り当てられる。この時点で、I/Oアドレス空間が枯渇し、作成部12Aは、16番目のブリッジ#16に対して新たなI/Oアドレス空間を割り当てることができない状態になっている(図26参照)。
ブリッジ71に割当可能な未割当のI/Oアドレスが枯渇しブリッジ71に対し新たにI/Oアドレスを割り当てることができなくなった場合(矢印A66)、作成部12Aは以下の処理を行なう。つまり、作成部12Aは、既に対応表21に登録されているブリッジ#1のアドレス割当を解除し(矢印A67)、そのアドレス1000〜1FFFを新たなブリッジ#16に対して割り当てる(矢印A69)。また、作成部12Aは、新しく割り当てられたブリッジ#16のバスに接続されたデバイス#31,#32に対してそれぞれI/Oアドレス1020〜102F,1030〜103Fを割り当てる(矢印A68)。このとき、作成部12Aは、アドレス割当を解除したブリッジ#1に接続されているデバイス#1,#2のI/Oアドレス1000〜100F,1010〜101Fと重複しないように、デバイス#31,#32のI/Oアドレス1020〜102F,1030〜103Fを割り当てる。この後、作成部12Aは、上述した割当解除や再割当の結果に従って、対応表21の更新を行なう(矢印A70)。
さて、OSは、対応表21の作成完了通知を作成部12Aから受けると(矢印A71,A72)、各種アプリケーション(図31ではアプリケーション#1,#2)を起動する(矢印A73,A74)。各アプリケーションは、I/Oアクセス用のライブラリ14を用いてI/Oアクセス要求を行なう。アプリケーション#1または#2がライブラリ14を呼び出すと(矢印A75,A81)、アドレス割当処理部(割当部)12Bが呼び出される(矢印A76,A82)。
割当部12Bは、ライブラリ14によって呼び出されて起動されると、ミューテックスを取得してロックをかけた後、アプリケーションからのI/Oアクセス要求の転送先デバイス81のI/Oアドレスをキーにして対応表21を検索参照する。これにより、割当部12Bは、対応表21における当該転送先デバイス81についてのエントリを取得し、現在のI/Oアドレスの設定状態を確認する(矢印A77,A83)。
割当部12Bは、取得したエントリを参照し、アクセス対象のデバイス81までのブリッジ71にI/Oアドレスが割り当てられているか否か、つまり、前記エントリのアドレス割当欄に「あり」が設定されているか否かを判定する。I/Oアドレスが割り当てられている場合、ブリッジ71に対し適切にI/Oアドレス空間が割り当てられている。このため、ブリッジ71に対する特別な処理は不要であり、通常のI/Oアクセスを行なうことで、PCIデバイス81に対してI/Oアクセスが実行される(矢印A78)。これにより、I/Oアクセス要求を発行したアプリケーション#1は、ライブラリ14経由で、所望の結果を取得する(矢印A79,A80)。
PCIデバイス81に対するI/Oアクセスを完了すると、割当部12Bはロックを解放する。これにより、今まで待機していた別のアプリケーションがミューテックスを取得し、対応表21を使用することが可能になる。
これに対し、I/Oアドレスが割り当てられていない場合、割当部12Bは、対応表21を参照して、必要なI/Oアドレスを設定されているブリッジ71(例えばブリッジ#16)を解除対象ブリッジとして取得する(矢印A83)。この後、割当部12Bは、解除対象ブリッジ#16のI/Oアドレス1000〜1FFFを解除する(矢印A84)。この後、割当部12Bは、アクセス対象のデバイス81が接続されているブリッジ71(例えば#1)にI/Oアドレス1000〜1FFFを割り当ててから(矢印A85)、対応表21を更新する(矢印A86)。
ブリッジ#1にI/Oアドレスが設定されると、割当部12B(ライブラリ14)は、デバイス#1または#2にアクセスする(矢印A87)。これにより、I/Oアクセス要求を発行したアプリケーション#2は、ライブラリ14経由で、所望の結果を取得する(矢印A88,A89)。この後、割当部12Bは、ロックを解除する。これにより、今まで待機していた別のアプリケーションがミューテックスを取得し、対応表21を使用することが可能になる。
〔3−3〕第3実施形態の効果
上述した第3実施形態のコンピュータシステム1Bによれば、第1実施形態や第2実施形態と同様、割当部12Bが、作成部12AによってPCIバスの初期化時に作成された対応表21を参照、更新しながら、ブリッジ71に対するI/Oアドレス空間の割当解除や再割当を行なうことで、デバイス81に対するI/Oアクセス処理が実行される。これにより、コンピュータシステム1Aにおいて、規定数を超える数(例えば16個以上)のブリッジ71が備えられてブリッジアドレスが枯渇しても、規定数を超える数のブリッジ71を同時に使用することが可能になる。
また、第3実施形態のコンピュータシステム1Bでは、第2実施形態と同様、複数のアプリケーションからデバイス81へのI/Oアクセス要求が発行された場合、後からI/Oアクセス要求を発行したアプリケーションによる処理は、ミューテックスによるロックが解放されるまで待機する。つまり、一のアプリケーションからデバイス81へのI/Oアクセス要求が処理されている間に、別のアプリケーションから別のデバイス81へのI/Oアクセス要求が発生したとしても、先行するI/Oアクセス要求に係る処理が完了するまで、後続のI/Oアクセス要求に係る処理は待機することになる。したがって、後続のI/Oアクセス要求によって対応表21の整合が取れなくなるのを確実に抑止することができる。例えば図31では、アプリケーション#1からのI/Oアクセス要求に係る処理(矢印A75〜A80)が完了してから、アプリケーション#2からのI/Oアクセス要求に係る処理(矢印A81〜A89)が実行される。
〔4〕その他
以上、本発明の好ましい実施形態について詳述したが、本発明は、係る特定の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲内において、種々の変形、変更して実施することができる。
なお、上述した実施形態では、ブリッジには4KB単位でアドレスが割り当てられ、15個のブリッジ#1〜#15が割り当てられた時点でI/O空間におけるブリッジアドレスが枯渇する場合について説明したが、本発明は、これに限定されるものではない。また、具体例では、16個のブリッジと32個のデバイスとを備える場合について説明したが、本発明は、これに限定されるものではない。
上述したPCIデバイス/ブリッジ対応表作成処理部(作成部)12Aおよびアドレス割当処理部(割当部)12Bを含む、第1〜第3実施形態の情報処理装置1,1A,1Bの各種機能の全部もしくは一部は、コンピュータ(CPU,情報処理装置,各種端末を含む)が所定のプログラムを実行することによって実現される。
そのプログラムは、例えばフレキシブルディスク,CD(CD−ROM,CD−R,CD−RWなど),DVD(DVD−ROM,DVD−RAM,DVD−R,DVD−RW,DVD+R,DVD+RWなど),ブルーレイディスク等のコンピュータ読取可能な記録媒体に記録された形態で提供される。この場合、コンピュータはその記録媒体からプログラムを読み取って内部記憶装置または外部記憶装置に転送し格納して用いる。
ここで、コンピュータとは、ハードウエアとOS(オペレーティングシステム)とを含む概念であり、OSの制御の下で動作するハードウエアを意味している。また、OSが不要でアプリケーションプログラム単独でハードウェアを動作させるような場合には、そのハードウェア自体がコンピュータに相当する。ハードウエアは、少なくとも、CPU等のマイクロプロセッサと、記録媒体に記録されたコンピュータプログラムを読み取る手段とをそなえている。上記プログラムは、上述のようなコンピュータに、第1〜第3実施形態の情報処理装置1,1A,1Bの各種機能を実現させるプログラムコードを含んでいる。また、その機能の一部は、アプリケーションプログラムではなくOSによって実現されてもよい。
1,1A,1B 情報処理装置(コンピュータシステム)
10 CPU(プロセッサ)
11 BIOS
12A PCIデバイス/ブリッジ対応表作成処理部(作成部)
12B アドレス割当処理部(割当部)
13 ハイパーバイザ
14 ライブラリ
20 メモリ
21 PCIデバイス/ブリッジ対応表(管理用テーブル)
22 仮想サーバ構成情報
23 ミューテックス変数
30 ストレージ
31 仮想ストレージ
40 NVRAM
50 チップセット
51 ホストブリッジ
52 SATAコントローラ
60 PCIバス
70 スイッチ
71 PCIブリッジ(ブリッジ)
72 コンフィグレーションレジスタ
72a I/Oベースアドレスレジスタ(ベースアドレスレジスタ)
72b I/Oリミットアドレスレジスタ(リミットアドレスレジスタ)
80 スロット
81 PCIデバイス(デバイス)
90 ストレージ
VS1〜VS4 仮想サーバ
本発明は、情報処理装置、制御方法、及び制御プログラムに関する。
ここで、本実施形態においても、PCI仕様により、ブリッジには4KB単位でアドレスが割り当てられる。また、I/O空間は例えば64KBだけ用意され、先頭の4KBはシステムに予約されている。したがって、15個(規定数)のブリッジ#1〜#15が割り当てられた時点でI/O空間におけるブリッジアドレスが枯渇する。本実施形態では、以下に詳述するごとく、割当部12Bが、作成部12Aによって作成された対応表21を使用してI/Oアクセス処理(アドレス割当処理)を行なう。これにより、規定数を超える数(16個以上)のブリッジ71が備えられてブリッジアドレスが枯渇しても、規定数を超える数のブリッジ71を同時に使用することが可能になる。なお、PCIデバイス/ブリッジ対応表作成処理部12Aによる対応表21の作成処理については、図3〜図14(B)を参照しながら具体的に説明する。また、アドレス割当処理部12BによるI/Oアクセス処理(アドレス割当処理)については、図15〜図21(B)を参照しながら具体的に説明する。
〔1−2〕対応表の構成
図3および図4を参照しながら、PCIデバイス/ブリッジ対応表作成処理部12Aによって作成される対応表(管理用テーブル)21の構成について説明する。なお、図3は、図1に示す情報処理装置1においてI/Oアドレス割当対象(PCIデバイス81およびPCIブリッジ71)を含む具体的な構成の一例を示すブロック図である。また、図4は、図3に示す構成について作成される対応表21の一例を示す図である。
ブリッジ71やデバイス81に割り当てるI/O空間が不足した場合、作成部12Aは、I/O空間の割当アドレスを初期値(0x1000)に戻して処理を継続する。その際、0x1000番地は、他のデバイス81に既に割り当て済みなので、作成部12Aは、0x1000番地の次に割り当て可能なI/Oアドレスを使用する。また、作成部12Aは、対応表21の「ブリッジアドレス」欄と「アドレス割当」欄を参照して、当該I/Oアドレスを割り当てられているブリッジ71を検索する。このブリッジ71に対するI/Oアドレス空間の割当を初期値(未割当状態)に戻し、対応表21の「アドレス割当」欄に「なし」を設定する。
(p1)割当I/Oアドレス空間の取得
割当部12Bは、対応表21を参照し、アクセス対象のPCIデバイス81が接続されているブリッジ71のI/Oアドレス空間(ここでは1000〜1FFF)を取得する。
(p2)解除対象ブリッジの取得
割当部12Bは、処理(p1)で得られた割当I/Oアドレス空間をキーに対応表21を検索し、割当I/Oアドレス空間が現在割り当てられているブリッジ71(ここではブリッジ#16)を、解除対象ブリッジとして特定する。つまり、割当部12Bは、上記第1レコード(図17参照)におけるブリッジアドレスと同一のブリッジアドレスを含み且つアドレス割当欄に「あり(有効)」を設定された第2レコード(図19参照)を、対応表21から検索する。
(p4)設定対象ブリッジのI/Oアドレス割当
割当部12Bは、アクセス対象のPCIデバイス81が接続されているブリッジ71にI/Oアドレス空間を割り当てる。つまり、割当部12Bは、前記第1レコードにおける第1ブリッジ識別情報に対応する第1ブリッジ(#1)に対し同一のブリッジアドレス(1000〜1FFF)を割り当てる(図21(A)参照)。また、割当部12Bは、前記第1レコードにおけるアドレス割当欄に「あり効)」を設定する(図21(B)参照)。
(p5)PCIデバイスへのI/Oアクセス
CPU10は、コンピュータシステム1Aの起動後、NVRAM40から読み出されたハイパーバイザプログラムに含まれる制御プログラムを実行することにより、上述したPCIデバイス/ブリッジ対応表作成処理部12Aおよびアドレス割当処理部12Bとして機能する。
PCIデバイス/ブリッジ対応表作成処理部12Aは、コンピュータシステム1Aの起動時にハイパーバイザ13の初期化処理の中で呼び出され、対応表21の作成処理を行なう。第2実施形態におけるPCIデバイス/ブリッジ対応表作成処理部12Aによる対応表21の作成処理については、図23〜図27を参照しながら具体的に説明する。
なお、アドレス割当処理部12Bは、I/Oアクセスの検知に呼び出されてから同I/Oアクセスの実行を完了するまでの間に他の仮想サーバからI/Oアクセスをハイパーバイザ13が検知した場合、先行するアクセスの実行を完了するまで、他のアクセスについての処理を待機させる。アドレス割当処理部12Bによる待機処理は、メモリ20のミューテックス(MUTual EXclusion(相互排他))変数23を用いて行なわれる。アドレス割当処理部12Bは、ハイパーバイザ13により一の仮想サーバからI/Oアクセスを検知して呼び出されると、ミューテックス変数23に“1”を設定することによりロックを取得する。アドレス割当処理部12Bは、当該アクセスの完了に伴い、ミューテックス変数23を“0”に設定することによりロックを解放する。このように、アドレス割当処理部12B(ハイパーバイザ13)は、ミューテックス変数23が“1”に設定されている間、後続のアクセスを待機させることで、仮想サーバVS1〜VS4からデバイス81に対するI/Oアクセスに際し、対応表2を排他的に使用する。上述したアドレス割当処理部12Bによる待機処理については、図28を参照しながら後述する。
ハイパーバイザ13は、対応表21の作成後、仮想サーバVS1〜VS4の構築や構成変更を行ない、仮想サーバ構成情報22を作成してメモリ20に保存する(矢印A31;ステップS63)。ハイパーバイザ13は、仮想サーバ構成情報22に基づき、仮想サーバVS1〜VS4にデバイスを割り当てた後、仮想サーバVS1〜VS4を起動する(矢印A32,A33;ステップS64)。仮想サーバVS1〜VS4は、自身に割り当てられたストレージ30(仮想ストレージ31)からOSを読み出してメモリ20に展開し、OSを起動し、OS上でアプリケーションを動作させる。なお、図23では、2つの仮想サーバVS1,VS2が図示されている。
一方、ミューテックス変数23の値が“0”の場合、どの仮想サーバも対応表21を使用していないことを示している。このとき、割当部12Bは、ミューテックス変数23の値を“0”から“1”に設定して、対応表21を使用中であることを示す状態に切り換えることにより、ロックを取得する(ロックを掛ける;ステップS671)。この状態で、他の仮想サーバは、前述の通り、ミューテックス変数23の値が“0”になるまで処理を待っている。このため、ミューテックスを取得した仮想サーバ、つまりミューテックス変数2の値を“1”に切り換えた仮想サーバは、対応表21を排他的に使用することができる。

Claims (19)

  1. プロセッサと、
    複数のデバイスと、
    前記プロセッサと前記複数のデバイスとを接続する複数のブリッジと、
    前記複数のブリッジのそれぞれにブリッジアドレスを割り当てながら前記ブリッジアドレスの管理用テーブルを作成し、前記複数のブリッジのうちの一ブリッジに割り当てる未割当ブリッジアドレスが枯渇した場合、前記複数のブリッジのうちの他ブリッジに割り当てた既割当ブリッジアドレスの割当を解除して前記一ブリッジに割り当て、当該既割当ブリッジアドレスの割当解除および再割当に応じた更新および登録を前記管理用テーブルに対して行なう作成部と、
    前記プロセッサから前記複数のデバイスのうちの一デバイスに対する一アクセスを検知した場合、前記管理用テーブルを参照し、前記一アクセスを実行可能にするように前記複数のブリッジに対する前記ブリッジアドレスの割当解除および再割当を行なうとともに、当該ブリッジアドレスの割当解除および再割当に応じた更新を前記管理用テーブルに対して行なう割当部と、を有することを特徴とする情報処理装置。
  2. 前記作成部は、
    前記複数のデバイスのそれぞれに異なるデバイスアドレスを割り当てるとともに前記複数のブリッジのそれぞれに前記ブリッジアドレスを割り当てながら、前記複数のデバイスのそれぞれに割り当てられた前記デバイスアドレスと、前記複数のデバイスのそれぞれが属するブリッジを特定するブリッジ識別情報と、当該ブリッジ識別情報によって特定される前記ブリッジに割り当てられた前記ブリッジアドレスと、当該ブリッジアドレスが当該ブリッジ識別情報によって特定される前記ブリッジにおいて有効であるか否かを示す割当情報とを対応付けて管理する前記管理用テーブルを作成し、
    前記一ブリッジに割り当てる未割当ブリッジアドレスが枯渇した場合、前記他ブリッジに対する既割当ブリッジアドレスの割当を解除して前記一ブリッジに割り当て、
    前記管理用テーブルにおいて、前記他ブリッジの前記割当情報に無効を設定するとともに、前記一ブリッジの前記割当情報に有効を設定することを特徴とする、請求項1記載の情報処理装置。
  3. 前記割当部は、
    前記一デバイスの前記デバイスアドレスを含む第1レコードを、前記管理用テーブルから検索し、
    前記第1レコードにおける前記割当情報が無効である場合、前記第1レコードにおける前記ブリッジアドレスと同一のブリッジアドレスを含み且つ前記割当情報を有効に設定された第2レコードを、前記管理用テーブルから検索し、
    前記第2レコードにおける、前記第1レコードの第1ブリッジ識別情報とは異なる第2ブリッジ識別情報に対応する第2ブリッジに対する前記同一のブリッジアドレスの割当を解除するとともに、前記第2レコードにおける前記割当情報に無効を設定し、
    前記第1レコードにおける前記第1ブリッジ識別情報に対応する第1ブリッジに対し前記同一のブリッジアドレスを割り当てるとともに、前記第1レコードにおける前記割当情報に有効を設定することを特徴とする、請求項2記載の情報処理装置。
  4. 前記作成部は、
    前記ブリッジのコンフィグレーションレジスタのベースアドレスレジスタおよびリミットアドレスレジスタに前記ブリッジアドレスの範囲を指定するアドレス値を設定することにより、前記ブリッジに前記ブリッジアドレスを割り当てる一方、
    前記ブリッジのコンフィグレーションレジスタのベースアドレスレジスタおよびリミットアドレスレジスタに0を設定することにより、前記ブリッジに対する前記ブリッジアドレスの割当を解除することを特徴とする、請求項1〜請求項3のいずれか一項記載の情報処理装置。
  5. 前記割当部は、
    前記ブリッジのコンフィグレーションレジスタのベースアドレスレジスタおよびリミットアドレスレジスタに前記ブリッジアドレスの範囲を指定するアドレス値を設定することにより、前記ブリッジに前記ブリッジアドレスを割り当てる一方、
    前記ブリッジのコンフィグレーションレジスタのベースアドレスレジスタおよびリミットアドレスレジスタに0を設定することにより、前記ブリッジに対する前記ブリッジアドレスの割当を解除することを特徴とする、請求項1〜請求項6のいずれか一項記載の情報処理装置。
  6. 前記プロセッサは、複数の仮想サーバを構築し、
    前記割当部は、
    前記複数の仮想サーバのうちの一の仮想サーバから前記一アクセスを検知してから前記一アクセスの実行を完了するまでの間に他の仮想サーバから他アクセスを検知した場合、前記一アクセスの実行を完了するまで、前記他アクセスについての処理を待機させることを特徴とする、請求項1〜請求項5のいずれか一項記載の情報処理装置。
  7. 前記割当部としての機能は、
    前記プロセッサにおけるOS(Operating System)の、前記複数のデバイスのうちの一デバイスに対するアクセスの際に用いられるライブラリに含まれていることを特徴とする、請求項1〜請求項5のいずれか一項記載の情報処理装置。
  8. プロセッサと、複数のデバイスと、前記プロセッサと前記複数のデバイスとを接続する複数のブリッジと、を備えた、情報処理装置を、前記プロセッサによって制御する方法であって、
    前記プロセッサは、
    前記複数のブリッジのそれぞれにブリッジアドレスを割り当てながら前記ブリッジアドレスの管理用テーブルを作成し、
    前記複数のブリッジのうちの一ブリッジに割り当てる未割当ブリッジアドレスが枯渇した場合、前記複数のブリッジのうちの他ブリッジに割り当てた既割当ブリッジアドレスの割当を解除して前記一ブリッジに割り当て、当該既割当ブリッジアドレスの割当解除および再割当に応じた更新および登録を前記管理用テーブルに対して行ない、
    前記プロセッサから前記複数のデバイスのうちの一デバイスに対する一アクセスを検知した場合、前記管理用テーブルを参照し、前記一アクセスを実行可能にするように前記複数のブリッジに対する前記ブリッジアドレスの割当解除および再割当を行なうとともに、当該ブリッジアドレスの割当解除および再割当に応じた更新を前記テーブルに対して行なうことを特徴とする情報処理装置の制御方法。
  9. 前記プロセッサは、
    前記複数のデバイスのそれぞれに異なるデバイスアドレスを割り当てるとともに前記複数のブリッジのそれぞれに前記ブリッジアドレスを割り当てながら、前記複数のデバイスのそれぞれに割り当てられた前記デバイスアドレスと、前記複数のデバイスのそれぞれが属するブリッジを特定するブリッジ識別情報と、当該ブリッジ識別情報によって特定される前記ブリッジに割り当てられた前記ブリッジアドレスと、当該ブリッジアドレスが当該ブリッジ識別情報によって特定される前記ブリッジにおいて有効であるか否かを示す割当情報とを対応付けて管理する前記管理用テーブルを作成し、
    前記一ブリッジに割り当てる未割当ブリッジアドレスが枯渇した場合、前記他ブリッジに対する既割当ブリッジアドレスの割当を解除して前記一ブリッジに割り当て、
    前記管理用テーブルにおいて、前記他ブリッジの前記割当情報に無効を設定するとともに、前記一ブリッジの前記割当情報に有効を設定することを特徴とする、請求項8記載の情報処理装置の制御方法。
  10. 前記プロセッサは、
    前記一デバイスの前記デバイスアドレスを含む第1レコードを、前記管理用テーブルから検索し、
    前記第1レコードにおける前記割当情報が無効である場合、前記第1レコードにおける前記ブリッジアドレスと同一のブリッジアドレスを含み且つ前記割当情報を有効に設定された第2レコードを、前記管理用テーブルから検索し、
    前記第2レコードにおける、前記第1レコードの第1ブリッジ識別情報とは異なる第2ブリッジ識別情報に対応する第2ブリッジに対する前記同一のブリッジアドレスの割当を解除するとともに、前記第2レコードにおける前記割当情報に無効を設定し、
    前記第1レコードにおける前記第1ブリッジ識別情報に対応する第1ブリッジに対し前記同一のブリッジアドレスを割り当てるとともに、前記第1レコードにおける前記割当情報に有効を設定することを特徴とする、請求項9記載の情報処理装置の制御方法。
  11. 前記プロセッサは、
    前記ブリッジのコンフィグレーションレジスタのベースアドレスレジスタおよびリミットアドレスレジスタに前記ブリッジアドレスの範囲を指定するアドレス値を設定することにより、前記ブリッジに前記ブリッジアドレスを割り当てる一方、
    前記ブリッジのコンフィグレーションレジスタのベースアドレスレジスタおよびリミットアドレスレジスタに0を設定することにより、前記ブリッジに対する前記ブリッジアドレスの割当を解除することを特徴とする、請求項8〜請求項10のいずれか一項記載の情報処理装置の制御方法。
  12. 前記プロセッサは、
    前記ブリッジのコンフィグレーションレジスタのベースアドレスレジスタおよびリミットアドレスレジスタに前記ブリッジアドレスの範囲を指定するアドレス値を設定することにより、前記ブリッジに前記ブリッジアドレスを割り当てる一方、
    前記ブリッジのコンフィグレーションレジスタのベースアドレスレジスタおよびリミットアドレスレジスタに0を設定することにより、前記ブリッジに対する前記ブリッジアドレスの割当を解除することを特徴とする、請求項8〜請求項11のいずれか一項記載の情報処理装置の制御方法。
  13. プロセッサと、複数のデバイスと、前記プロセッサと前記複数のデバイスとを接続する複数のブリッジと、を備えた、情報処理装置の制御を、前記プロセッサに実行させるプログラムであって、
    前記複数のブリッジのそれぞれにブリッジアドレスを割り当てながら前記ブリッジアドレスの管理用テーブルを作成し、
    前記複数のブリッジのうちの一ブリッジに割り当てる未割当ブリッジアドレスが枯渇した場合、前記複数のブリッジのうちの他ブリッジに割り当てた既割当ブリッジアドレスの割当を解除して前記一ブリッジに割り当て、当該既割当ブリッジアドレスの割当解除および再割当に応じた更新および登録を前記管理用テーブルに対して行ない、
    前記プロセッサから前記複数のデバイスのうちの一デバイスに対する一アクセスを検知した場合、前記管理用テーブルを参照し、前記一アクセスを実行可能にするように前記複数のブリッジに対する前記ブリッジアドレスの割当解除および再割当を行なうとともに、当該ブリッジアドレスの割当解除および再割当に応じた更新を前記テーブルに対して行なう、
    処理を、前記プロセッサに実行させることを特徴とする制御プログラム。
  14. 前記複数のデバイスのそれぞれに異なるデバイスアドレスを割り当てるとともに前記複数のブリッジのそれぞれに前記ブリッジアドレスを割り当てながら、前記複数のデバイスのそれぞれに割り当てられた前記デバイスアドレスと、前記複数のデバイスのそれぞれが属するブリッジを特定するブリッジ識別情報と、当該ブリッジ識別情報によって特定される前記ブリッジに割り当てられた前記ブリッジアドレスと、当該ブリッジアドレスが当該ブリッジ識別情報によって特定される前記ブリッジにおいて有効であるか否かを示す割当情報とを対応付けて管理する前記管理用テーブルを作成し、
    前記一ブリッジに割り当てる未割当ブリッジアドレスが枯渇した場合、前記他ブリッジに対する既割当ブリッジアドレスの割当を解除して前記一ブリッジに割り当て、
    前記管理用テーブルにおいて、前記他ブリッジの前記割当情報に無効を設定するとともに、前記一ブリッジの前記割当情報に有効を設定する、
    処理を、前記プロセッサに実行させることを特徴とする、請求項13記載の制御プログラム。
  15. 前記一デバイスの前記デバイスアドレスを含む第1レコードを、前記管理用テーブルから検索し、
    前記第1レコードにおける前記割当情報が無効である場合、前記第1レコードにおける前記ブリッジアドレスと同一のブリッジアドレスを含み且つ前記割当情報を有効に設定された第2レコードを、前記管理用テーブルから検索し、
    前記第2レコードにおける、前記第1レコードの第1ブリッジ識別情報とは異なる第2ブリッジ識別情報に対応する第2ブリッジに対する前記同一のブリッジアドレスの割当を解除するとともに、前記第2レコードにおける前記割当情報に無効を設定し、
    前記第1レコードにおける前記第1ブリッジ識別情報に対応する第1ブリッジに対し前記同一のブリッジアドレスを割り当てるとともに、前記第1レコードにおける前記割当情報に有効を設定する、
    処理を、前記プロセッサに実行させることを特徴とする、請求項14記載の制御プログラム。
  16. 前記ブリッジのコンフィグレーションレジスタのベースアドレスレジスタおよびリミットアドレスレジスタに前記ブリッジアドレスの範囲を指定するアドレス値を設定することにより、前記ブリッジに前記ブリッジアドレスを割り当てる一方、
    前記ブリッジのコンフィグレーションレジスタのベースアドレスレジスタおよびリミットアドレスレジスタに0を設定することにより、前記ブリッジに対する前記ブリッジアドレスの割当を解除する、
    処理を、前記プロセッサに実行させることを特徴とする、請求項13〜請求項15のいずれか一項記載の制御プログラム。
  17. 前記ブリッジのコンフィグレーションレジスタのベースアドレスレジスタおよびリミットアドレスレジスタに前記ブリッジアドレスの範囲を指定するアドレス値を設定することにより、前記ブリッジに前記ブリッジアドレスを割り当てる一方、
    前記ブリッジのコンフィグレーションレジスタのベースアドレスレジスタおよびリミットアドレスレジスタに0を設定することにより、前記ブリッジに対する前記ブリッジアドレスの割当を解除する、
    処理を、前記プロセッサに実行させることを特徴とする、請求項13〜請求項16のいずれか一項記載の制御プログラム。
  18. プロセッサと、
    複数のデバイスと、
    前記プロセッサと前記複数のデバイスとを接続する複数のブリッジと、を備え、
    前記プロセッサは、
    前記複数のブリッジのそれぞれにブリッジアドレスを割り当てながら前記ブリッジアドレスの管理用テーブルを作成し、
    前記複数のブリッジのうちの一ブリッジに割り当てる未割当ブリッジアドレスが枯渇した場合、前記複数のブリッジのうちの他ブリッジに割り当てた既割当ブリッジアドレスの割当を解除して前記一ブリッジに割り当て、当該既割当ブリッジアドレスの割当解除および再割当に応じた更新および登録を前記管理用テーブルに対して行ない、
    前記プロセッサから前記複数のデバイスのうちの一デバイスに対する一アクセスを検知した場合、前記管理用テーブルを参照し、前記一アクセスを実行可能にするように前記複数のブリッジに対する前記ブリッジアドレスの割当解除および再割当を行なうとともに、当該ブリッジアドレスの割当解除および再割当に応じた更新を前記テーブルに対して行なうことを特徴とする情報処理装置。
  19. プロセッサと、複数のデバイスと、前記プロセッサと前記複数のデバイスとを接続する複数のブリッジと、を備えた、情報処理装置の制御を、前記プロセッサに実行させる制御プログラムを記録したコンピュータ読取可能な記録倍値であって、
    前記制御プログラムは、
    前記複数のブリッジのそれぞれにブリッジアドレスを割り当てながら前記ブリッジアドレスの管理用テーブルを作成し、
    前記複数のブリッジのうちの一ブリッジに割り当てる未割当ブリッジアドレスが枯渇した場合、前記複数のブリッジのうちの他ブリッジに割り当てた既割当ブリッジアドレスの割当を解除して前記一ブリッジに割り当て、当該既割当ブリッジアドレスの割当解除および再割当に応じた更新および登録を前記管理用テーブルに対して行ない、
    前記プロセッサから前記複数のデバイスのうちの一デバイスに対する一アクセスを検知した場合、前記管理用テーブルを参照し、前記一アクセスを実行可能にするように前記複数のブリッジに対する前記ブリッジアドレスの割当解除および再割当を行なうとともに、当該ブリッジアドレスの割当解除および再割当に応じた更新を前記テーブルに対して行なう、処理を、前記プロセッサに実行させることを特徴とする、制御プログラムを記録したコンピュータ読取可能な記録媒体。
JP2014527886A 2012-08-01 2012-08-01 情報処理装置、制御方法、及び制御プログラム Active JP5999184B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2012/069548 WO2014020716A1 (ja) 2012-08-01 2012-08-01 情報処理装置、制御方法、制御プログラム、及び同プログラムを記録したコンピュータ読取可能な記録媒体

Publications (2)

Publication Number Publication Date
JPWO2014020716A1 true JPWO2014020716A1 (ja) 2016-07-11
JP5999184B2 JP5999184B2 (ja) 2016-09-28

Family

ID=50027446

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014527886A Active JP5999184B2 (ja) 2012-08-01 2012-08-01 情報処理装置、制御方法、及び制御プログラム

Country Status (3)

Country Link
US (1) US20150127868A1 (ja)
JP (1) JP5999184B2 (ja)
WO (1) WO2014020716A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9602464B2 (en) 2014-12-12 2017-03-21 Intel Corporation Apparatus, system and method for allocating identifiers to components of a control system

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003337788A (ja) * 2002-05-20 2003-11-28 Nec Corp アドレス割当装置およびその方法
JP2009239374A (ja) * 2008-03-26 2009-10-15 Nec Corp 仮想計算機システム及びパケット送信制御方法並びにそれに用いるネットワークインターフェースカード
JP2011204077A (ja) * 2010-03-26 2011-10-13 Nec Corp 情報処理装置、リソース割り当て方法、およびリソース割り当てプログラム

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11191073A (ja) * 1997-12-25 1999-07-13 Mitsubishi Electric Corp Pciバス処理装置
US6898686B1 (en) * 2000-08-24 2005-05-24 International Business Machines Corporation Memory map adjustment to support the need of adapters with large memory requirements
TWI273423B (en) * 2005-07-15 2007-02-11 Via Tech Inc Computer system with multi-port bridge and an operating method of the same
US20090006596A1 (en) * 2007-06-27 2009-01-01 Veluchamy Dinakaran Dynamic address redemption and routing in ZigBee networks
JP5180729B2 (ja) * 2008-08-05 2013-04-10 株式会社日立製作所 計算機システム及びバス割当方法
US20130007322A1 (en) * 2011-06-29 2013-01-03 International Business Machines Corporation Hardware Enabled Lock Mediation

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003337788A (ja) * 2002-05-20 2003-11-28 Nec Corp アドレス割当装置およびその方法
JP2009239374A (ja) * 2008-03-26 2009-10-15 Nec Corp 仮想計算機システム及びパケット送信制御方法並びにそれに用いるネットワークインターフェースカード
JP2011204077A (ja) * 2010-03-26 2011-10-13 Nec Corp 情報処理装置、リソース割り当て方法、およびリソース割り当てプログラム

Also Published As

Publication number Publication date
JP5999184B2 (ja) 2016-09-28
WO2014020716A1 (ja) 2014-02-06
US20150127868A1 (en) 2015-05-07

Similar Documents

Publication Publication Date Title
JP5735070B2 (ja) パーティション分割されたシステムにおいて、デバイスがメモリにアクセスするための、ゲスト・アドレスからホスト・アドレスへの変換
JP4157710B2 (ja) Pci入出力スロットの論理分割を実施する方法および装置
JP5305848B2 (ja) データ処理システム内で入出力(i/o)仮想化を管理するための方法およびデータ処理システムならびにコンピュータ・プログラム
JP5210730B2 (ja) 仮想マシンモニタ及びマルチプロセッサシステム
US8041920B2 (en) Partitioning memory mapped device configuration space
US10353609B2 (en) Memory allocation method and apparatus
US20120216185A1 (en) Managing virtual machines
US20070214333A1 (en) Modifying node descriptors to reflect memory migration in an information handling system with non-uniform memory access
US20050216696A1 (en) Multi-processor system and memory accessing method
CN1737780A (zh) 从一个设备驱动程序向另一个传送信息的系统和方法
US8490094B2 (en) Non-uniform memory access (NUMA) enhancements for shared logical partitions
JP2009151767A (ja) データ処理システム内で入出力(i/o)仮想化を管理するための方法およびコンピュータ・プログラムならびにデータ処理システム
US8255639B2 (en) Partition transparent correctable error handling in a logically partitioned computer system
US20080184247A1 (en) Method and System for Resource Allocation
JP2016167143A (ja) 情報処理システムおよび情報処理システムの制御方法
JP2004318880A (ja) ロジカル・パーティション・データ処理システムにおいてパーティション・ファームウェアを同時更新及び活動化するための方法及び装置
JP2010205124A (ja) 仮想化装置におけるpciデバイスのコンフィグレーション処理方法及びコンピュータシステム
US20170168906A1 (en) Providing fault tolerance in a virtualized computing environment through a migration approach based on resource availability
JP7125964B2 (ja) 計算機システムおよび管理方法
US10031778B2 (en) Providing fault tolerance in a virtualized computing environment through a swapping approach
JP5195756B2 (ja) Pciデバイスのi/o空間要求抑止方法
JP5979229B2 (ja) 情報処理装置、制御方法、及び制御プログラム
JP5999184B2 (ja) 情報処理装置、制御方法、及び制御プログラム
JP5917441B2 (ja) 仮想計算機システム、sr−iov対応デバイスの制御方法
US9021506B2 (en) Resource ejectability in multiprocessor systems

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160530

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160705

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160707

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160802

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160815

R150 Certificate of patent or registration of utility model

Ref document number: 5999184

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150