(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022171133
(43)【公開日】2022-11-11
(54)【発明の名称】情報処理装置,情報処理方法および情報処理プログラム
(51)【国際特許分類】
G06F 12/00 20060101AFI20221104BHJP
【FI】
G06F12/00 571A
【審査請求】未請求
【請求項の数】6
【出願形態】OL
(21)【出願番号】P 2021077577
(22)【出願日】2021-04-30
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100092978
【弁理士】
【氏名又は名称】真田 有
(74)【代理人】
【識別番号】100189201
【弁理士】
【氏名又は名称】横田 功
(72)【発明者】
【氏名】野々村 行展
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160AA20
5B160CB01
(57)【要約】 (修正有)
【課題】メモリアクセスの削減を低コストで実現する情報処理装置を提供する。
【解決手段】情報処理装置が備えるサウスブリッジ3は、複数のプロセッサノード5によりメモリ2に対して行なわれた各データアクセスのアクセス履歴情報を記憶するアクセス履歴情報記憶部13と、複数のプロセッサノード5のうちの第1のプロセッサノード5によるメモリ2に対するアクセスリクエストに対応するデータがアクセス履歴情報に含まれている場合に、アクセス履歴情報に含まれるデータを第1のプロセッサノード5に応答する履歴応答部10と、を備える。
【選択図】
図2
【特許請求の範囲】
【請求項1】
複数のプロセッサノードと、
前記複数のプロセッサノードにより共用されるメモリと、
前記複数のプロセッサノードにより前記メモリ対して行なわれた各データアクセスのアクセス履歴情報を記憶するアクセス履歴情報記憶部と、
前記複数のプロセッサノードのうちの第1のプロセッサノードによる前記メモリに対するアクセスリクエストに対応するデータが前記アクセス履歴情報に含まれている場合に、前記アクセス履歴情報に含まれるデータを前記第1のプロセッサノードに応答する履歴応答部と
を備えることを特徴とする、情報処理装置
【請求項2】
前記メモリに対して行なわれるデータアクセスの予約状態を表す予約情報を記憶する予約情報記憶部と、
前記第1のプロセッサノードによる前記メモリに対するアクセスリクエストに対応するデータが前記アクセス履歴情報に含まれていない場合において、前記アクセスリクエストによる前記メモリにおけるアクセス先とアクセス先が同一の先行するアクセスリクエストが前記予約情報記憶部に登録されている場合に、前記先行するアクセスリクエストに対して前記メモリから読み出されたデータを、前記第1のプロセッサノードに応答する予約制御部と
を備えることを特徴とする、請求項1記載の情報処理装置。
【請求項3】
前記予約情報が、
前記先行するデータアクセスの発行元のプロセッサノードを示す情報と、
前記先行するデータアクセスの前記メモリにおけるアクセス先を示す情報と、
前記先行するデータアクセスの前記メモリにおけるアクセス先とアクセス先が同一の前記先行するデータアクセスに後続するデータアクセスの発行元のプロセッサノードを示す情報(と
を備えることを特徴とする、請求項2に記載の情報処理装置。
【請求項4】
前記アクセス履歴情報に対して、前記メモリに対してデータアクセスが行なわれてからの経過時間が短いデータアクセスに関する情報を優先して残すよう更新するアクセス履歴情報更新部
を備えることを特徴とする、請求項1~3のいずれか1項に記載の情報処理装置。
【請求項5】
複数のプロセッサノードと、前記複数のプロセッサノードにより共用されるメモリとを備える情報処理装置において、
前記複数のプロセッサノードにより前記メモリ対して行なわれた各データアクセスのアクセス履歴情報をアクセス履歴情報記憶部に記憶する処理と、
前記複数のプロセッサノードのうちの第1のプロセッサノードによる前記メモリに対するアクセスリクエストに対応するデータが前記アクセス履歴情報に含まれている場合に、前記アクセス履歴情報に含まれるデータを前記第1のプロセッサノードに応答する処理と
を備えることを特徴とする、情報処理方法。
【請求項6】
複数のプロセッサノードと、前記複数のプロセッサノードにより共用されるメモリとを備える情報処理装置において、
前記複数のプロセッサノードにより前記メモリ対して行なわれた各データアクセスのアクセス履歴情報をアクセス履歴情報記憶部に記憶させ、
前記複数のプロセッサノードのうちの第1のプロセッサノードによる前記メモリに対するアクセスリクエストに対応するデータが前記アクセス履歴情報に含まれている場合に、前記アクセス履歴情報に含まれるデータを前記第1のプロセッサノードに応答する
処理をプロセッサに実行させる情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、メモリアクセスの削減を低コストで実現に関する。
【背景技術】
【0002】
図15~
図17は従来の情報処理装置におけるROM(Read Only Memory)アクセス制御手法を説明するための図である。
【0003】
図15に示す情報処理装置は、起動用プログラム(ファームウェア)等を格納する一つのROMと複数のCPU(Central Processing Unit:符号N0~Nn参照)とを備え、複数のCPUがROMを共有している。
【0004】
この
図15に示す従来の情報処理装置においては、各CPUからのROMへのアクセスが競合し、CPU数の増加に比例して装置全体の起動が遅くなってしまう。
そこで、
図16に示すように、複数のROMと複数の調停回路とを備えることで、ROM一つ当たりのCPUの競合数を減らす手法が知られている。
【0005】
また、
図17に示すように、複数のCPU(N0~Nn)をマスタCPU(N0)と、残りのスレーブCPU(N1~Nn)とに分け、マスタCPU(N0)がROMからデータを読み出し、そのデータを他のスレーブCPU(N1~Nn)にブロードキャストする手法も知られている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特表2020-523674号公報
【特許文献2】特開2003-330782号公報
【特許文献3】特表2006-515940号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、
図16に示した従来のROMアクセス制御手法においては、複数のROMを搭載することでコスト(価格,プリント板の実装面積)がCPU数の増加に比例して増加するという課題がある。また、各ROMに格納したデータの更新等を行なう際に、データ更新対象のROMが増加するので、例えば、ROMに格納した起動プログラムの更新(ファームアップ)を行なう際の作業コストも増加するという課題もある。
【0008】
一方、
図17に示した従来のROMアクセス制御手法においては、汎用のCPUに対してマスタ/スレーブを制御するカスタム回路の追加が必要となり、CPU数の増加に比例してハード資源が増加し、これによりコストが増加するという課題がある。
1つの側面では、本発明は、メモリアクセスの削減を低コストで実現できるようにすることを目的とする。
【課題を解決するための手段】
【0009】
このため、この情報処理装置は、複数のプロセッサノードと、前記複数のプロセッサノードにより共用されるメモリと、前記複数のプロセッサノードにより前記メモリ対して行なわれた各データアクセスのアクセス履歴情報を記憶するアクセス履歴情報記憶部と、前記複数のプロセッサノードのうちの第1のプロセッサノードによる前記メモリに対するアクセスリクエストに対応するデータが前記アクセス履歴情報に含まれている場合に、前記アクセス履歴情報に含まれるデータを前記第1のプロセッサノードに応答する履歴応答部とを備える。
【発明の効果】
【0010】
一実施形態によれば、メモリアクセスの削減を低コストで実現することができる。
【図面の簡単な説明】
【0011】
【
図1】実施形態の一例としてのコンピュータシステムのハードウェア構成を模式的に示す図である。
【
図2】実施形態の一例としてのコンピュータシステムにおけるサウスブリッジの機能構成を示す図である。
【
図3】実施形態の一例としてのコンピュータシステムにおける拡張履歴バッファの構成を例示する図である。
【
図4】実施形態の一例としてのコンピュータシステムにおける拡張履歴バッファ管理部による拡張履歴バッファのソート処理を説明するための図である。
【
図5】実施形態の一例としてのコンピュータシステムにおけるソートキューを例示する図である。
【
図6】実施形態の一例としてのコンピュータシステムにおけるソートリクエスト情報を例示する図である。
【
図7】実施形態の一例としてのコンピュータシステムにおける予約バッファの構成を例示する図である。
【
図8】実施形態の一例としてのコンピュータシステムにおける予約バッファ管理部による予約バッファの更新処理を説明するための図である。
【
図9】実施形態の一例としてのコンピュータシステムにおけるサウスブリッジによるROMへのアクセス処理の概要を示すフローチャートである。
【
図10】実施形態の一例としてのコンピュータシステムにおけるサウスブリッジによるROMへのアクセス処理の詳細を説明するためのフローチャートである。
【
図11】実施形態の一例としてのコンピュータシステムにおけるソート時の処理を説明するためのフローチャートである。
【
図12】実施形態の一例としてのコンピュータシステムにおけるソート時の処理を説明するためのフローチャートである。
【
図13】実施形態の一例としてのコンピュータシステムにおける複数のノードからのROMアクセスに伴う拡張履歴バッファの状態遷移を説明するための図である。
【
図14】実施形態の一例としてのコンピュータシステムにおけるサウスブリッジのハードウェア構成の変形例を示す図である。
【
図15】従来の情報処理装置におけるROMアクセス制御手法を説明するための図である。
【
図16】従来の情報処理装置におけるROMアクセス制御手法を説明するための図である。
【
図17】従来の情報処理装置におけるROMアクセス制御手法を説明するための図である。
【発明を実施するための形態】
【0012】
以下、図面を参照して本情報処理装置,情報処理方法および情報処理プログラムにかかる実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。また、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。
【0013】
(A)構成
図1は実施形態の一例としてのコンピュータシステム1のハードウェア構成を模式的に示す図である。
【0014】
図1に例示するコンピュータシステム1は、ROM2,サウスブリッジ3,BMC(Baseboard Management Controller)4および複数のノード5を備える。
ROM2,BMC4および複数のノード5はサウスブリッジ3を介して相互に通信可能に接続されている。
【0015】
ノード5は演算処理を行なうコンピュータである。
図1に示す例においては、複数(n個)のノード5が備えられている。以下、これらの複数(n個)のノード5に対して符号N0~Nn―1のいずれかを付して示すことで、個々のノード5を区別して表す場合がある。
図1においては、便宜上、ノードN0についてのみハードウェア構成を示しているが、各ノード5は同様のハードウェア構成を有する。
【0016】
各ノード5は、
図1に示すように、CPU51,メモリ(MEM)52,HDD(Hard Disk Drive)53およびLAN(Local Area Network)インタフェース54を備える。
【0017】
CPU51は、ノード5全体を制御する処理装置である。CPU51は、マルチプロセッサであってもよい。CPU51に代えて、例えば、MPU(Micro Processing Unit),DSP(Digital Signal Processor),ASIC(Application Specific Integrated Circuit),PLD(Programmable Logic Device),FPGA(Field Programmable Gate Array)のいずれか一つを備えてもよい。また、CPU51に代えて、CPU,MPU,DSP,ASIC,PLD,FPGAのうちの2種類以上の要素の組み合わせて用いてもよい。
【0018】
CPU51は、後述するROM2から読み出したプログラムおよびデータを用いて処理を行なう。例えば、本コンピュータシステム1の起動時において、CPU51は、ROM2から起動用プログラムを読み出し、実行することでノード5を起動させる。また、例えば、CPU51は、ROM2から動作試験用プログラムを読み出し、実行することでノード5等の動作試験を行なってもよい。
【0019】
本実施形態においては、1つのノード5に一つのCPU51が備えられる例を示す。従って、ノード5とCPU51とを同義として取り扱う。CPU51は、ノード5に搭載されたプロセッサノードといってもよい。
【0020】
メモリ52は、ノード5の主記憶装置として使用される。メモリ52には、CPU51に実行させるOS(Operating System)プログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。ROM2から読み出されたプログラムやデータもこのメモリ52に一時的に格納される。また、メモリ52には、ROM2から読み出されたプログラムやデータが格納される。
【0021】
HDD53は、内蔵したディスクに対して、磁気的にデータの書き込みおよび読み出しを行なう。HDD53は、ノード5の補助記憶装置として使用される。HDD53に代えて、ストレージクラスメモリ(SCM:Storage Class Memory)や、フラッシュメモリ等の半導体記憶装置(SSD:Solid State Drive)を使用してもよい。
【0022】
LANインタフェース54は、図示しないネットワークに接続される。LANインタフェース54は、ネットワークを介して、他のコンピュータまたは通信機器との間でデータの送受信を行なう。
【0023】
ノード5は、ROM2に格納された起動用プログラムや動作試験用プログラムおよびこれらのプログラムを実行するための各種データを取得するために、サウスブリッジ3を介して、ROM2に対してアクセスリクエストを発行する。アクセスリクエストには、ROM2の記憶領域(アドレス)を指定したアドレスが含まれる。以下、ROM2に格納された起動用プログラムや動作試験用プログラムおよびこれらのプログラムを実行するための各種データを、単にデータという場合がある。
【0024】
ROM2は、ノード5で実行されるプログラムやノード5によって用いられるデータを記憶する記憶装置である。ROM2には、例えば、各ノード5の起動に用いられる起動用プログラムや、各ノード5によって実行される動作試験用プログラムが格納されている。
【0025】
BMC4は、本コンピュータシステム1の監視や保守を行なう監視制御装置である。BMC4は、サウスブリッジ3を介して各ノード5やROM2に接続され、これらの動作の制御や監視を行なう。
【0026】
サウスブリッジ3は、ROM2,BMC4および複数のノード5を相互に接続し、これらの間において送受信されるデータを中継する中継装置である。例えば、サウスブリッジ3は、各ノード5から発行(送信)されるアクセスリクエストに従って、ROM2からデータを読み出し、アクセスリクエストの送信元のノード5に送信(応答)する。サウスブリッジ3は、例えば、集積回路として構成されてもよい。
サウスブリッジ3は、ノード5が発行したアクセスリクエストに対してROM2からデータを受信すると、拡張履歴バッファ13のソートを指示するソートリクエストを発行する。拡張履歴バッファ13のソートについては後述する。
図2は実施形態の一例としてのコンピュータシステム1におけるサウスブリッジ3の機能構成を示す図である。
サウスブリッジ3は、
図2に示すように、履歴制御部10,予約制御部20および調停回路部30を備える。
【0027】
履歴制御部10は、複数のノード5によるROM2に対するアクセス履歴を管理する。履歴制御部10は、
図2に示すように、拡張履歴バッファ13,拡張履歴バッファ管理部12およびROMアクセス応答選択部11を備える。
拡張履歴バッファ13は、ROM2に対して行なわれたアクセスの履歴を記憶する。
図3は実施形態の一例としてのコンピュータシステム1における拡張履歴バッファ13の構成を例示する図である。
【0028】
図3においては、拡張履歴バッファ13の一部を示す。
図3に例示する拡張履歴バッファ13は、複数(
図3に示す例ではn個)のバッファ領域を備える。なお、拡張履歴バッファ13に備えられるバッファ領域の数が多いほど履歴にヒットしやすくなる。ただし、バッファ領域の数が増えると、その分回路が増えるのでバッファ領域の数の最適値はシステムに依存する。
バッファ領域をエントリといってもよい。
図3に示す例において、各バッファ領域(エントリ)は、それぞれhis_no,val,adrsおよびdataの各フィールドを備える。これらのフィールドには、ROM2に対して行なわれたアクセスの履歴(アクセス履歴)を表す情報が格納される。
【0029】
his_noフィールドには、アクセス履歴の新旧を示す数値が格納される。本例においては、ROM2に直近にアクセスされた履歴は00となり、最も古いものは最大値であるn-1となる。拡張履歴バッファ13に、登録されていない新しいアクセス履歴を新たに保存する場合は、拡張履歴バッファ13から最も古い情報(エントリ)が押し出される(捨てられる)。his_noには、初期状態において0~n-1の番号が連続で設定される。
【0030】
dataフィールドには、過去にROM2から読み出されたデータが格納される。adrsフィールドには、過去にROM2から読み出されたデータのアドレスが格納される。
【0031】
valフィールドには、拡張履歴バッファ13に登録されたバッファ領域の情報(adrsおよびdata)が有効であるか否かを表すフラグが格納される。フラグとして、例えば、これらの情報が有効であれば1が設定される。valフィールドには、初期状態において0が設定される。
【0032】
拡張履歴バッファ13には、ROM2に対して行なわれた直近のn回分のアクセス履歴が保存される。従って、拡張履歴バッファ13を参照することで、ROM2に対して直近のn回以内のアクセスにおいて読み出されデータを、ROM2に再度アクセスすることなく取得することができる。
【0033】
ROMアクセス応答選択部11は、ノード5から発行されたROM2に対するアクセスリクエストに対して、拡張履歴バッファ13を参照して、応答するデータをROM2から読み出すか拡張履歴バッファ13から読み出すかを選択(決定)する。
【0034】
具体的には、ROMアクセス応答選択部11は、ノード5から発行されたアクセスリクエストから、ROM2におけるアクセス先のアドレスを取得する。ROMアクセス応答選択部11は、このアクセス先アドレスに基づいて拡張履歴バッファ13のadrsを参照(検索)する。
【0035】
アクセス先アドレスが拡張履歴バッファ13に登録されている場合には、ROMアクセス応答選択部11は、応答用のデータの読み出し元として拡張履歴バッファ13を決定する。サウスブリッジ3は、拡張履歴バッファ13における当該アクセス先アドレスに対応するdataを読み出して、アクセスリクエストの送信元のノード5に送信(応答)する。これにより、当該アクセスリクエストについて後述する調停回路部30によるROM2に対するリードアクセスが不要となる。
【0036】
一方、アクセス先アドレスが拡張履歴バッファ13に登録されていない場合には、ROMアクセス応答選択部11は、応答用のデータの読み出し元としてROM2を決定する。ROMアクセス応答選択部11は、予約制御部20に対して、アクセス先のアドレスを通知してデータの読み出しを依頼(予約)する。
また、ROMアクセス応答選択部11は、各ノード5からのアクセスリクエストに応じて、各ノード5に対応したソートリクエストを発行する。
【0037】
拡張履歴バッファ管理部12は、拡張履歴バッファ13の更新を行なう。拡張履歴バッファ管理部12は、ノード5からROM2へ直近に発行されたアクセスリクエスト(最新のアクセスリクエスト)が最新として扱われるように拡張履歴バッファ13のhis_noを書き換える。ROM2へのアクセスリクエストに基づいて拡張履歴バッファ13のhis_noを書き換えることをソートするという場合がある。
【0038】
以下、最後にノード5から発行されたアクセスリクエスト、すなわち最新のアクセスリクエストを直近アクセスリクエストという場合がある。また、直近アクセスリクエストに応じて拡張履歴バッファ13から読み出され、アクセスリクエストの送信元のノード5に応答されたデータを直近応答データという場合がある。
【0039】
拡張履歴バッファ管理部12は、拡張履歴バッファ13のソートを行なうに際して、ノード5からのアクセス先アドレスが拡張履歴バッファ13に登録されている場合において、拡張履歴バッファ13から読み出され、アクセスリクエストの送信元のノード5に応答したデータについて、拡張履歴バッファ13のhis_noを00に更新する。
拡張履歴バッファ管理部12は、拡張履歴バッファ13における直近応答データのhis_noを00に更新する。
【0040】
また、拡張履歴バッファ管理部12は、拡張履歴バッファ13において、更新前の直近応答データのhis_noよりも値が小さいhis_noの値にそれぞれ1を加算(インクリメントment)する。
【0041】
図4は実施形態の一例としてのコンピュータシステム1における拡張履歴バッファ管理部12による拡張履歴バッファ13のソート処理を説明するための図である。
図4において、符号Aはソート前の拡張履歴バッファ13を例示し、符号Bはソート後の拡張履歴バッファ13を例示する。
【0042】
図4に示す例においては、ノード5から発行されたROM2に対するアクセスリクエストに対して、そのアクセス先のアドレスに基づいて、ROMアクセス応答選択部11が拡張履歴バッファ13のadrsフィールドを検索した結果、his_noがxのバッファ領域にヒットした場合について説明する。
【0043】
すなわち、his_noがx(his_no=x)のバッファ領域に格納されているデータが直近応答データに相当する。そこで、拡張履歴バッファ管理部12は、このヒットしたhis_no=xのバッファ領域にあるhis_noを00に更新する。
【0044】
ここで、拡張履歴バッファ13において、his_no>x のバッファ領域は、his_no=xのバッファ領域より古いアクセスリクエストについての情報を格納しているため、ソートは不要(ソート対象外)である。拡張履歴バッファ管理部12は、his_no>x のバッファ領域についてはhis_noの値の変更を行なわない。
【0045】
一方、拡張履歴バッファ13において、his_no<x のバッファ領域は、his_no=xのバッファ領域より新しいアクセスリクエストについての情報を格納しているため、ソートが必要(ソート対象)である。そこで、拡張履歴バッファ管理部12は、his_no<x のバッファ領域については、それぞれhis_noの値をインクリメント(+1)することで、一世代古い情報となるように更新する。
【0046】
このように、拡張履歴バッファ管理部12は、拡張履歴バッファ13のソートを行なうに際して、各バッファ領域のhis_noフィールドだけを参照し、このhis_noのフィールドに対してだけ情報更新を行なえばよい。すなわち、ソートを行なうに際して、拡張履歴バッファ13のadrsフィールドやdataフィールドに対する更新作業は不要であるので、処理コストを少なくすることができる。拡張履歴バッファ管理部12は、拡張履歴バッファ13(アクセス履歴情報)に対して、ROM2に対してデータアクセスが行なわれてからの経過時間が短いデータアクセスに関する情報を優先して残すよう更新するアクセス履歴情報更新部に相当する。
【0047】
また、拡張履歴バッファ管理部12は、ノード5からのアクセス先アドレスが拡張履歴バッファ13に登録されていない場合には、そのアクセスリクエストに対して、調停回路部30がROM2から読み出し、アクセスリクエストの送信元のノード5に対して応答したデータを拡張履歴バッファ13に登録する。すなわち、拡張履歴バッファ管理部12は、拡張履歴バッファ13にデータを新規登録する。
【0048】
ノード5からの直近アクセスリクエストのリクエスト先のアドレスが拡張履歴バッファ13にヒットしなかった場合には、拡張履歴バッファ管理部12は、当該アクセスリクエストに応じて、調停回路部30によりROM2から読み出されたデータが帰ってきた時点で、以下のようにソートを行なう。
【0049】
すなわち、拡張履歴バッファ管理部12は、拡張履歴バッファ13における一番古い履歴(his_noが最大値であるn-1)のエントリのhis_noを00にする。これととともに、拡張履歴バッファ管理部12は、当該エントリのvalに1を設定(val=1)する。さらに、拡張履歴バッファ管理部12は、当該エントリのadrsにアクセスリクエストのリクエスト先アドレスを設定するとともに、ROM2から読み出されたデータをdataに設定する。また、拡張履歴バッファ管理部12は、拡張履歴バッファ13におけるhis_noに00を設定したエントリ以外の各エントリに対して、それぞれhis_noの値をインクリメント(+1)することで一世代古い情報となるように更新する。
【0050】
このように、拡張履歴バッファ管理部12は、ノード5からのROM2へ発行された直近のアクセスリクエストが、拡張履歴バッファ13において最新となるように、拡張履歴バッファ13の更新(ソート)を行なう。
【0051】
拡張履歴バッファ管理部12は、ROM2からデータを読み出したアクセスリクエストの他に、拡張履歴バッファ13や後述する予約バッファ23に対する検索でヒットしたアクセスリクエストについても拡張履歴バッファ13へのソート対象に含める。
【0052】
これにより、後発の優先されるべき他のノード5からROM2の同一アドレスへのアクセスリクエストが行なわれた時に、当該アクセスリクエストについての履歴が、他のROM2へのアクセスリクエストにより生じるソートにより、拡張履歴バッファ13から消えてしまうことがないようにする。
【0053】
また、拡張履歴バッファ管理部12が拡張履歴バッファ13を最新履歴にソートする際に、複数のノード5から同時にアクセスリクエストが発行されることが考えられる。このような場合に、拡張履歴バッファ13において複数のノード5で履歴にヒットし、ソートに競合が発生する。また、拡張履歴バッファ13において複数のノード5で履歴にヒットし、これと同時にROM2へのアクセスが完了した場合もソートの競合が発生する。
【0054】
そこで、拡張履歴バッファ管理部12は、このようなソート時における競合を解消するために、ソートキューおよびソートリクエスト情報を用いて、競合するソートをシリアライズして処理する機能を備える。
【0055】
ソートキューおよびソートリクエスト情報は、履歴制御部10に備えられた図示しない記憶素子によって実現され、拡張履歴バッファ管理部12によって管理される。
【0056】
図5は実施形態の一例としてのコンピュータシステム1における拡張履歴バッファ管理部12が用いるソートキューを例示する図であり、
図6はそのソートリクエスト情報を例示する図である。
【0057】
ソートキューは、ROMアクセス応答選択部11からソートリクエストを受信したことを表す情報を保持するFIFO(First In, First Out)キューである。
図5に例示するソートキューにおいては、本コンピュータシステム1に備えられる最大ノード数をnとする場合に、FIFO深さ(キュー数)はn/2である。ソートキューにおける各キューには、ノード5毎にソートリクエストを受信しているか否かを示す値が登録される。
図5に示す例においては、ソートリクエストを発行したノード5に1が設定される。
図5に例示するソートキューには2つのキューが登録されており、図中上方に位置するキューから順番に処理されている。
【0058】
図5に示す例においては、先ずはノードN0とノードN1とで同時にソートリクエストが発生し、その後ノードN2とノードN3とで同時にソートリクエストが発生している状態を示している。
【0059】
ソートリクエスト情報は、ROMアクセス応答選択部11から発行されたソートリクエストに関する情報であり、拡張履歴バッファ管理部12が拡張履歴バッファ13のソートを実行する際に用いられる情報である。
図6に例示するソースリスト情報は、各ノード5に対応付けて、adrs情報およびdata情報を備える
【0060】
ここで、adrs情報は、拡張履歴バッファ13のソート時に拡張履歴バッファ13のhis_noに00を設定するアドレスである。data情報は、拡張履歴バッファ13のソート時に拡張履歴バッファ13のdataに設定する値である。
【0061】
拡張履歴バッファ管理部12は、これらのソートキューおよびソートリクエスト情報を用いてソート競合をシリアライズして、拡張履歴バッファ13のソートを行なう。
【0062】
予約制御部20は、各ノード5からROM2に対して発行され、調停回路部30による読み出し処理の実行を待機中の(未処理の)アクセスリクエストを管理する。調停回路部30による読み出し処理の実行を待機中のアクセスリクエストのことを、予約中のアクセスリクエストといってもよい。すなわち、予約制御部20はROM2からの読み出し処理の実行を予約中のアクセスリクエストを管理する。
予約制御部20は、
図2に示すように、応答先ノード決定部21,予約バッファ管理部22,予約バッファ23およびROMアクセス依頼部24を備える。
【0063】
予約バッファ23は、調停回路部30に対して発行されているROM2へのアクセスリクエストの状態を示す情報を記憶する。以下、ROM2のデータを読み出するために調停回路部30にデータの読み出しリクエストが発行されている状態を予約中状態という場合がある。予約バッファ23は、ROM2に対して行なわれるデータアクセスの予約状態を表す予約情報を記憶する予約情報記憶部に相当する。
図7は実施形態の一例としてのコンピュータシステム1における予約バッファ23の構成を例示する図である。
【0064】
図7に例示する予約バッファ23は、ノード5の総数(n個)と同数のn個のバッファ領域を備える。すなわち、予約バッファ23においては、各ノード5に対応させてそれぞれバッファ領域が備えられている。予約バッファ23を構成する複数のバッファ領域をエントリといってもよい。また、各バッファ領域(エントリ)は、それぞれnode,adrsおよびbroadcast flagの各フィールドを備える。
nodeフィールドには、ノード5を識別する情報(本実施形態では0~n-1の数字)が格納される。
【0065】
adrsフィールドには、対応するノード5から発行されているROM2へのアクセスリクエストの対象アドレスが格納される。すなわち、フィールドadrsには、調停回路部30に発行中の、ROM2の読み出しリクエストの対象アドレス(ROM2の記憶領域を表すアドレス)が格納される。
【0066】
broadcast flagフィールドには、同一のエントリのadrsフィールドに格納されたアドレスに対してアクセスリクエストを発行しているノード5を表す情報が設定される。
図7に示す例においては、broadcast flagフィールドには、各ノード5に対応する複数(
図7に示す例ではn個)のフラグが備えられ、adrsフィールドに格納されたアドレスに対してアクセスリクエストを発行しているノード5に対して1が設定される。
【0067】
複数のノード5からROM2の同一アドレスに対してアクセスリクエストが発行されている場合には、予約バッファ23のbroadcast flagフィールドには、アクセス先のadrsフィールドに対応させて、アクセスリクエストの発行元の複数ノード5に対して、それぞれフラグビット1が設定される。
【0068】
予約バッファ23のbroadcast flagフィールドの値は、各ノード5に対してそれぞれ設定されるフラグ(0 or 1)によりビット列を構成する。broadcast flagフィールドにおけるノード5毎のフラグの値をビットフラグといってもよい。
【0069】
図7に示す例においては、ノードN0からROM2のアドレス0000に対するアクセスリクエストが発行されており、また、ノードN1からROM2のアドレス0008に対するアクセスリクエストが発行されていることを示す。
【0070】
予約バッファ23のエントリにおいて、nodeフィールドに設定されている識別情報に対応するノード5を自ノード5といってもよい。予約バッファ23において、予約中状態のエントリのbroadcast flagフィールドには、少なくとも自ノード5に対して1が設定される。
【0071】
例えば、
図7において、ノードN0のバッファ領域においては、broadcast flagフィールドにおいて、少なくとも自ノード5であるノードN0に1が設定されている。同様に、ノードN1のバッファ領域においては、broadcast flagフィールドにおいて、少なくとも自ノード5であるノードN1に1が設定されている。
【0072】
複数のノード5からROM2の同一のアドレスにアクセスリクエストが発行されている場合に、アクセスリクエストを最初に発行したノード5が自ノード5となる。予約バッファ23において、ROM2の同一のアドレスにアクセスリクエストを発行している複数のノード5のうち、アクセスリクエストを最初に発行したノード5を先行ノード5といってもよい。
【0073】
また、予約バッファ23におけるバッファ領域のbroadcast flagフィールドにおいて、自ノード5を含む複数のノード5に対して1が設定されている場合に、自ノード5以外のノード5を便乗ノード5という場合がある。便乗ノード5を追加ノード5もしくは後続ノード5といってもよい。
【0074】
予約バッファ23においては、先行ノード5によるアクセスリクエストに、便乗ノード5(追加ノード5,後続ノード5)がbroadcast flagフィールドに関連付けられる。
予約バッファ23を参照することで、調停回路部30に対して読み出しリクエストが発行されているROM2のアドレスと、当該アドレスにアクセスリクエストを発行しているノード5とを容易に把握することができる。
【0075】
応答先ノード決定部21は、予約バッファ23を参照して、調停回路部30によってROM2から読み出されるデータの応答先(送信先)のノード5を決定する。
【0076】
応答先ノード決定部21は、調停回路部30に対して発行された読み出しリクエストのアドレスに基づいて予約バッファ23のbroadcast flagフィールドを参照し、当該アドレスのデータを予約中の1つ以上のノード5を特定し、この特定した1つ以上のノード5を当該データの応答先として決定する。
サウスブリッジ3は、応答先ノード決定部21により応答先として決定されたノード5に対して、ROM2から読み出したデータを応答(送信)する。
【0077】
ROMアクセス依頼部24は、予約バッファ23を参照して、予約バッファ23の予約状態に基づき、調停回路部30に対して、各ノード5から予約されたROM2への読み出しリクエストを送信する。
【0078】
ROMアクセス依頼部24は、例えば、予約バッファ23に先に登録されたエントリを優先して調停回路部30に処理させてもよい。また、ROMアクセス依頼部24は、broadcast flagフィールドに最も多くの便乗ノード5が設定されているエントリを優先して調停回路部30に処理させてもよい。
【0079】
予約バッファ管理部22は、予約バッファ23の更新を行なう。予約バッファ管理部22は、履歴制御部10において拡張履歴バッファ13にヒットしなかったアクセスリクエストを予約バッファ23に登録する。
【0080】
また、予約バッファ管理部22は、アクセスリクエストを予約バッファ23に登録する際に、同じアクセス先に対するアクセスリクエストが既に予約バッファ23に登録されている場合には、後から登録しようとしていたアクセスリクエストを便乗ノード5として予約バッファ23に登録する。
【0081】
具体的には、予約バッファ管理部22は、予約バッファ23に先に登録されているアクセスリクエストのエントリのbroadcast flagフィールドに、後から登録しようとしてアクセスリクエストのノード5に対して1を設定する。broadcast flagフィールドに1を設定することを、フラグを立てるといってもよい。
【0082】
これにより、予約バッファ管理部22は、ノード5から発行されたアクセスリクエストとアクセス先が同一のアクセスリクエストが予約済である場合には、後続のアクセスリクエストを、先に予約されたアクセスリクエストに追加する(便乗させる)。
図8は実施形態の一例としてのコンピュータシステム1における予約バッファ管理部22による予約バッファ23の更新処理を説明するための図である。
以下においては、ノードN2からROM2のアドレス0008(adrs=0008)へのアクセスリクエスト(読み出しリクエスト)が発行された例を示す。
【0083】
図8中において、符号AはノードN2からのアクセスリクエストを受信する前の予約バッファ23を示す。また、符号BはノードN2からのアクセスリクエストを便乗ノード5として追加した後の予約バッファ23を示し、符号CはノードN2からのアクセスリクエストに対して調停回路部30からデータ応答を受けた後の予約バッファ23を示す。
【0084】
ノードN2からアドレス0008へのアクセスリクエストが来た場合に(符号P1参照)、予約バッファ管理部22は、先ず、アクセスリクエストのアドレス0008が、予約バッファ23内の全ノード5(全エントリ)のadrsフィールドのいずれかにヒットするか検索する。
【0085】
図8に示す例においては、ノードN1がアドレス0008に対するアクセスリクエストを発行している(符号P2参照)。従って、アクセスリクエストのアドレス0008は、予約バッファ23内のノードN1のエントリのadrsフィールドにヒットする。
【0086】
このように、アクセスリクエストのアドレス0008が、予約バッファ23内のノードN1のadrsフィールドにヒットした場合に、予約バッファ管理部22は、当該エントリのbroadcast flagフィールドにおいて、ノードN2に対応するビットをセットする(符号P3参照)。すなわち、予約バッファ管理部22は、ノードN2のアクセスリクエストを予約バッファ23に便乗ノード5として登録する。
【0087】
調停回路部30からノードN1のアクセスリクエストに対応するデータが応答されると(符号P4参照)、応答先ノード決定部21が予約バッファ23を参照して、ノードN1のエントリのbroadcast flagフィールドに1が立っている全てのノード5(ノードN1,N2)をデータの応答先として決定する。サウスブリッジ3は、決定された応答先のノードN1,N2にデータを応答する。
【0088】
予約バッファ管理部22は、データが応答されたノードN1のエントリのbroadcast flagフィールドの全ての1をクリアして0にする(符号P5,P6参照)。
【0089】
また、アクセスリクエストのアドレス0008が、予約バッファ23内の全ノード5(全エントリ)のいずれのadrsフィールドにもヒットしない場合には、予約バッファ管理部22は、ノードN2のエントリに新たにアクセスリクエストを設定する。すなわち、ノードN2のアクセスリクエストを予約バッファ23に先行ノード5として登録する。予約バッファ23のノードN2のエントリにおいて、adrsフィールドにアドレス0008を設定するとともに、broadcast flagフィールドのノードN2に1を設定する。
調停回路部30は、ノード5からのアクセスリクエストに応じて、ROM2に対するアクセス(リードアクセス)を行なう。
【0090】
調停回路部30は、拡張履歴バッファ13および予約バッファ23のいずれにもアクセス先アドレスがヒットしなかった複数ノード5からのアクセスリクエストを調停してROM2へのアクセスを行なう。
例えば、調停回路部30は、予約制御部20のROMアクセス依頼部24から送信される読み出しリクエストに従って、ROM2のデータの読み出しを行なう。
【0091】
(B)動作
上述の如く構成された実施形態の一例としてのコンピュータシステム1におけるサウスブリッジ3によるROM2へのアクセス処理の概要を、
図9に示すフローチャート(ステップA1~A5)に従って説明する。
【0092】
ステップA1において、ROM2に対するアクセスリクエストがノード5からサウスブリッジ3に入力されると、履歴制御部10のROMアクセス応答選択部11は、このアクセスリクエストからROM2におけるアクセス先アドレスを取得する。
【0093】
ステップA2において、ROMアクセス応答選択部11は、アクセス先アドレスに基づいて拡張履歴バッファ13のadrsを検索して、アクセス先アドレスが拡張履歴バッファ13に登録されているかを確認する。
【0094】
アクセス先アドレスが拡張履歴バッファ13にヒットした場合には(ステップA2のYESルート参照)、ステップA3に移行する。ステップA3において、ROMアクセス応答選択部11は、応答用のデータの読み出し元として拡張履歴バッファ13を決定する。サウスブリッジ3は、拡張履歴バッファ13における当該アクセス先アドレスに対応するdataを読み出して、アクセスリクエストの送信元のノード5に送信する。
【0095】
一方、ステップA2における検索の結果、アクセス先アドレスが拡張履歴バッファ13にヒットしない場合には(ステップA2のNOルート参照)、ステップA4に移行する。
【0096】
ステップA4において、複数ノードからROM2の同一アドレスへのアクセスリクエストが発行されている場合に、予約バッファ管理部22は、先行ノードのアクセスリクエストによりROMにアクセスして取得したデータを、同一アドレスにアクセスリクエストを行なった複数のノードへ転送させる。すなわち、予約バッファ管理部22は、先行ノードのアクセスリクエストによりROMにアクセスして取得したデータを、先行ノード5とその便乗ノード5とのそれぞれに送信させる。
【0097】
ステップA5において、拡張履歴バッファ13に格納されたデータをノード5に転送した場合や、ROM2に対してデータアクセスを行なった場合に、拡張履歴バッファ管理部12は、拡張履歴バッファ13のソートを行なう。その後、処理を終了する。
【0098】
次に、実施形態の一例としてのコンピュータシステム1におけるサウスブリッジ3によるROM2へのアクセス処理の詳細を、
図10に示すフローチャート(ステップA11~A19)に従って説明する。
なお、ステップA11~A16の処理はノード5毎に並列して実行される。
【0099】
ステップA11において、ROMアクセス応答選択部11は、アクセス先アドレスに基づいて拡張履歴バッファ13のadrsを検索して、アクセス先アドレスが拡張履歴バッファ13に登録されているかを確認する。
【0100】
アクセス先アドレスが拡張履歴バッファ13にヒットした場合には(ステップA11のYESルート参照)、ステップA12に移行する。ステップA12において、ROMアクセス応答選択部11は、応答用のデータの読み出し元として拡張履歴バッファ13を決定する。サウスブリッジ3は、拡張履歴バッファ13における当該アクセス先アドレスに対応するdataを読み出して、アクセスリクエストの送信元のノード5に送信する。その後、処理はA19に移行する。
【0101】
一方、ステップA11における検索の結果、アクセス先アドレスが拡張履歴バッファ13にヒットしない場合には(ステップA11のNOルート参照)、ステップA13に移行する。
【0102】
ステップA13において、ROMアクセス応答選択部11は、予約制御部20に対して、アクセス先のアドレスを通知してデータの読み出しを依頼(予約)する。予約バッファ管理部22は、アクセスリクエストのアドレスが、予約バッファ23内の全ノード5(全エントリ)のadrsフィールドのいずれかにヒットするか検索する。
【0103】
検索の結果、アクセスリクエストのアドレスが予約バッファ23にヒットしなかった場合に(ステップA13のNOルート参照)、ステップA14に移行する。ステップA14において、予約バッファ管理部22は、アクセスリクエストを予約バッファ23のnodeフィールド,adrsフィールドに登録する。また、予約バッファ管理部22は、同じエントリのbroadcast flagフィールドにおいて、自ノード5に1を設定する。これにより、アクセスリクエストは予約バッファ23に先行ノード5として登録される。
【0104】
ステップA15において、ROMアクセス依頼部24は、予約バッファ23に設定したアクセスリクエストについて、調停回路部30に対してROM2の読み出しリクエストを送信する。
【0105】
一方、ステップA13の検索の結果、アクセスリクエストのアドレスが予約バッファ23にヒットした場合に(ステップA13のYESルート参照)、ステップA16に移行する。ステップA16において、予約バッファ管理部22は、予約バッファ23内のヒットした先行ノード5のbroadcast flagフィールドにおいて、アクセスリクエストの送信元ノード5に1を設定する。これにより、アクセスリクエストは予約バッファ23に便乗ノード5として登録される。
【0106】
その後、ステップA17において、予約バッファ管理部22は、予約バッファ23のbroadcast flagフィールドにおいてフラグを立てたノード5からのアクセスリクエストに基づくROM2へのアクセスが完了したかを確認する。
【0107】
確認の結果、フラグを立てたノード5からのアクセスリクエストに基づくROM2へのアクセスが完了していない場合には(ステップA17のNOルート参照)、ステップA17の処理を繰り返し行なう。
【0108】
フラグを立てたノード5からのアクセスリクエストに基づくROM2へのアクセスが完了した場合に(ステップA17のYESルート参照)、ステップA18に移行する。
【0109】
ステップA18において、応答先ノード決定部21が、調停回路部30に対して発行された読み出しリクエストのアドレスに基づいて予約バッファ23のbroadcast flagフィールドを参照し、フラグが立っている全てのノード5をデータの応答先として決定する。サウスブリッジ3は、応答先ノード決定部21により応答先として決定されたノード5に対して、ROM2から読み出したデータを応答(送信)する。
【0110】
従って、broadcast flagフィールドにおいて先行ノード5のみならず便乗ノード5に1が設定されている場合には、ROM2から読み出されたデータは、先行ノード5の他、便乗ノード5にも転送される。
【0111】
ステップA19において、拡張履歴バッファ管理部12は、拡張履歴バッファ13のソートを行なう。拡張履歴バッファ13に格納されたデータをノード5に転送した場合や、ROM2に対してデータアクセスを行なった場合に、拡張履歴バッファ管理部12は、拡張履歴バッファ13のソートを行なう。その後、処理を終了する。
次に、実施形態の一例としてのコンピュータシステム1におけるソート時の処理を、
図11および
図12に示すフローチャートに従って説明する。
【0112】
図11はソートキューのプッシュ側の処理を示すフローチャート(ステップB1,B2)であり、
図12はソートキューのポップ側の処理を示すフローチャート(ステップC1~C6)である。
【0113】
ソートキューのプッシュ側においては、ステップB1において、拡張履歴バッファ管理部12は、1つ以上のノード5からアクセスリクエストがあったかを確認する(ステップB1)。ノード5からのアクセスリクエストがない場合には(ステップB1のNOルート参照)、ステップB1を繰り返し行ない、1つ以上のノード5からアクセスリクエストが来るまで待機する。
【0114】
1つ以上のノード5からアクセスリクエストがあった場合には(ステップB1のYESルート参照)、ステップB2に移行する。ステップB2において、拡張履歴バッファ管理部12は、アクセスリクエストを発行した全てのノード5のアクセスリクエストをソートキューにプッシュする。その後、処理はステップB1に戻る。
【0115】
ソートキューのポップ側においては、ステップC1において、拡張履歴バッファ管理部12は、ソートキューが空であるかを確認する。確認の結果、ソートキューが空である場合には(ステップC1のYESルート参照)、ステップC1を繰り返し行なう。
【0116】
ソートキューが空でない場合(ステップC1のNOルート参照)、処理はステップC2に移行する。ステップC2において、拡張履歴バッファ管理部12は、ソートキューからデータをポップする。
【0117】
ステップC3において、拡張履歴バッファ管理部12は、ソートキューからポップしたデータ内のMSB(Most Significant Bit )が1であるかを確認する。確認の結果、データ内のMSBが1である場合には(ステップC3のYESルート参照)、ステップC4に移行する。例えば、
図5に示したソートキューにおいては、ノードN0の値がMSB相当する。
ステップC4において、拡張履歴バッファ管理部12は、ROMアクセス応答選択部11から発行されたソートリクエスト情報に基づいて、拡張履歴バッファ13をソートする。
ステップC5において、ステップC3においてMSBを確認したデータを左シフト(+1)する。これによりMSBの値が追い出されて更新される。
【0118】
また、ステップC3における確認の結果、データ内のMSBが1でない場合には(ステップC3のNOルート参照)、ステップC4をスキップしてステップC5に移行する。
【0119】
ステップC6において、拡張履歴バッファ管理部12は、ステップC5において左シフトしたデータがオール0(ALL0)であるか確認する。確認の結果、データがオール0でない場合には(ステップC6のNOルート参照)、次のノードのリクエストを検査するため、ステップC3に戻る。
【0120】
また、データがオール0である場合には(ステップC6のYESルート参照)、データ内で残っているリクエストは無いため、処理はステップC1に戻り、新たなデータの入手を待つ。
【0121】
次に、実施形態の一例としてのコンピュータシステム1における複数のノード5からのROMアクセスに伴う拡張履歴バッファ13の状態遷移を、
図13を用いて例示する。
【0122】
図13においては、拡張履歴バッファ13および予約バッファ23にはなにもデータが格納されていない状態で、ノードN0~N3からのアクセスリクエストが発行された例を示す。また、
図13中において、上方に予約バッファ23の状態を示し、下方に拡張履歴バッファ13の状態を示す。また、
図13中の四角内の数字0~5はそれぞれアクセスリクエストにおけるROM2のアドレス(アクセス先アドレス)を示す。
【0123】
[処理A]先ず、ノードN0からのみ、アドレス0,1,2,3の順番でROMアクセスが発生したものとする。拡張履歴バッファ13にはヒットしないため、全て実ROM2へのアクセスが行なわれる(符号P01参照)。
【0124】
ノードN0からROM2へのアクセスリクエストが発生すると、予約バッファ管理部22が、予約バッファ23のbroadcast flagフィールドにノードN0にフラグを立てる。これにより、broadcast flagフィールドは“1000…”となる(符号P02参照)。
【0125】
調停回路部30からデータが返ってきてROMアクセスが終了すると、予約バッファ23のbroadcast flagフィールドにノードN0のビットフラグがクリアされ、broadcast flagフィールドは“0000…”となる(符号P03参照)。
【0126】
ROM2へのアクセス終了時に、拡張履歴バッファ管理部12は拡張履歴バッファ13のソートを行なう。これにより、拡張履歴バッファ13の中でhis_noが最大である一番古いバッファに、該当アクセスのアドレスとデータが格納され、his_noは履歴の最新を示す0に変更される。これ以外の拡張履歴バッファのhis_noは+1され現状より古い履歴に更新される。
【0127】
上記をアドレス0~3において繰り返すと、最初のアクセスのアドレス0の履歴はhis_no=03と古く(符号P04参照)、直近のアクセスのadrs3の履歴はhis_no=00と最新となる(符号P05参照)。
【0128】
[処理B]次に、ノードN1からアドレス0のROMアクセスリクエストが発生したとする(符号P06参照)。このアクセスリクエストは拡張履歴バッファ13のhis_no=03(ノードN0からのアドレス0の情報が格納)にヒットするため(符号P04参照)、拡張履歴バッファ管理部12は、ROM2へのアクセスを行なわせることなく、拡張履歴バッファ13においてヒットしたデータを返す。予約バッファ23にはリクエストは出ない。
拡張履歴バッファ管理部12は、拡張履歴バッファ13のソートを行なって、処理Aと同じように、ヒットしたアクセスを最新履歴に更新する。
【0129】
[処理C]次に、ノードN0からのみアドレス4のROMアクセスが発生したとする(符号P07参照)。アドレス4のデータは拡張履歴バッファ13にヒットしないため、処理Aと同様の処理が行われる。
【0130】
[処理D]次に、ノードN1とノードN2とから同時にROMアクセスが発生したとする(符号P08参照)。いずれのアクセスリクエストも拡張履歴バッファ13にヒットする。この場合ソートは同時に行なわれずシリアライズされて1ノードずつ行なわれる。
【0131】
ソート順は若いノード番号から行なわれるため、まずはノードN1からのアドレス1のアクセスがソートされ(符号P09参照)、次にノードN2からのアドレス0のアクセスがソートされる(符号P10参照)。
【0132】
[処理E]次に、ノードN1、N2、N3から同時にROMアクセスが発生したとする(符号P11参照)。いずれのアクセスリクエストも拡張履歴バッファ13にヒットするため、動作としては処理Dと同様の処理が行なわれる。
【0133】
[処理F]次に、ノードN0からアドレス4のROMアクセス待ちの状態で、ノードN1およびノードN2から同じアドレス4にアクセスが来たとする(符号P12,P13参照)。
【0134】
ノードN0からのアクセスはノードN0の予約バッファ23のbroadcast flagフィールドのN0ビットがセットされた状態(1000…)でありROM2へのアクセスを調停回路部30にリクエストしている状態である(符号P14参照)。
【0135】
また、ノードN1からのアクセスはノードN0のアクセスと同じアドレスなので、ノードN0の予約バッファのbroadcast flagフィールドのN1ビットもセットされ(1100…)、便乗ノード5として登録される(符号P15参照)。このノードN1からのアクセスについては、ROM2へのアクセスは調停回路部30にリクエストされない。
【0136】
ノードN2からのアクセスもノードN1と同様であり、ノードN0の予約バッファ23のbroadcast flagフィールドのN2ビットがセットされ(1110…)、便乗ノード5として登録される(符号P16参照)。このノードN2からのアクセスについても、ROM2へのアクセスは調停回路部30にリクエストされない。
【0137】
ノードN0によって最初に予約されたリクエストのデータが調停回路部30から返ってくると、ノードN0の予約バッファ23のbroadcast flagフィールドにセットされたノードN0,N1,N2に対してそれぞれデータを返して各ノード5のリクエストを終了させるとともに、broadcast flagフィールドは全てクリアされる(符号P17参照)。
【0138】
ここで、拡張履歴バッファ13のソートに関しては、ノード5に関係なくアドレス4のアクセスが最新履歴として、処理Aと同様に更新される(符号P18参照)。
【0139】
[処理G]ノードN0からアドレス5のROMアクセス待ちの状態で、ノードN1,N2,N3からそれぞれ同じアドレスにアクセスが来たとする(符号P19参照)。
拡張履歴バッファ13にはヒットしないが、ノードN0の予約バッファ23にはヒットしている状態であり、処理Fと同様の処理が行なわれる。
【0140】
ノードN0~N3の範囲で見た場合、ノードN0がアドレス0から先行して順番にアクセスしていたのに対して、ノードN1~N3は遅れてアクセスしていたが(処理A,Cの期間)、本タイミングでノードN0のアクセスに追いついたことになる(符号P20参照)。
【0141】
[処理H]処理GでノードN0~N3の各アクセスが同じタイミングとなったことで、ノードN0~N3のアドレス6へのアクセスはほぼ同時に発生する(符号P21参照)。
【0142】
この場合、予約バッファ23において、ノードN0~N3の中で先にきたノード(先行ノード)5のbroadcast flagフィールドに、他のノード(便乗ノード)5のフラグがセットされることになる。
図13に示す例においては、ノードN1からのリクエストが先に来てROM2へのアクセス予約となり、その他のノード5のリクエストは予約バッファ23からの読み出し待ちとなっている。
【0143】
次に、複数のノード5が時間差をつけてROM2から同一プログラムをロードするに際して、各ノード5からのアクセスリクエストがどのように処理されるかを、
図13に示した処理A~C,Gのフェーズ毎に補足する。
【0144】
[処理A]最初にノードN0からのみアクセス(アドレス0~3の4回)が行なわれ、これらは全てROM2にアクセスが行なわれ、その結果が拡張履歴バッファ13に保存される。
【0145】
[処理B]ノードN0から遅れてノードN1からのアクセスが開始される(
図13に示す例ではアドレス0のみ)。アドレス0は拡張履歴バッファ13にヒットするため、ROM2へのアクセスは行われず、拡張履歴バッファ13にあるデータがノードN1に応答される。
これにより、ノードN1によるROM2のアドレス0への実アクセスが1回削減されることになる。
【0146】
[処理C]ノードN0からアドレス4のアクセスが行なわれる。ROM2への実アクセス時間は長いので、アクセス完了するまでに、ノードN1~ノードN3からのアクセスリクエストが複数回行なわれる。
【0147】
図13に示す例においては、処理Cにおいて、ノードN1からアドレス1~4、ノードN2からアドレス0~4、ノードN3からアドレス0~3のアクセスが行なわれる。これらのうち、アドレス0~3については、拡張履歴バッファ13にヒットしてデータをすぐ返すことが可能だが、アドレス4についてはノードN0からのアクセス待ち(予約中状態)である。そのため、ノードN1とノードN2とからのアドレス4のアクセスはノードN0のアクセスに便乗して、ノードN0からのROM2への実アクセス終了を待ってノードN0,N1,N2に、同時にデータを返す。
【0148】
ここでは、拡張履歴バッファ13においてヒットしたノードN1のアドレス1~3、ノードN2のアドレス0~3,ノードN3のアドレス0~3と、予約にヒットしたノードN1とノードN2のアドレス4の、計13のROM2への実アクセスが削減されている。
【0149】
[処理G]ノードN0からアドレス5のアクセスが行なわれる。他のノードN1~N3も、直前に行なわれたアドレス4のアクセス完了の時間がほぼ同じため、ノードN0とほぼ同じタイミングでアドレス5へのアクセスが行なわれる。
【0150】
この場合、アドレス5についてはノードN0からのアクセス待ち(予約中状態)のため、ノードN1~N3のアクセスは処理Cと同様に、ノードN0のアクセスに便乗することになる。
ここでは、予約にヒットしたノードN1~N3のアドレス5の、計3のROM2への実アクセスが削減されている。
【0151】
また、ノードN0に比べて遅れてアクセス開始していたノードN1~N3は、ノードN0と同じタイミングでアクセス完了となるため、先行していたノードN0のアクセスに追いついたことになる。
【0152】
このように、ノード5からのアクセスリクエストが、拡張履歴バッファ13または予約バッファにヒットした場合に、同一アドレスへのROM2への実アクセスを複数回出すことがなくなるため、ノード数がいくら増加しても実ROMアクセスが増えることはなくなる。
【0153】
また、ノード5間のアクセスタイミングがずれていったとしても、先行してアクセスしているノードに追いつくことが可能なため、システム全体の起動時間も短縮することができる。
【0154】
(C)効果
このように、実施形態の一例としてのコンピュータシステム1によれば、複数のノード5がそれぞれROM2の記憶領域からデータを読み出すに際して、各ノード5からROM2へのアクセス履歴を拡張履歴バッファ13に記録する。そして、ノード5からROM2にアクセスリクエストが発行された際に、ROM2の同一アドレスへのアクセス履歴が拡張履歴バッファ13に記録されている場合には、この拡張履歴バッファ13から読み出したデータを応答する。これにより、ROM2の同一アドレスに対して複数のアクセスの発生を阻止し、ROM2の記憶領域へのアクセス競合を削減することができる。また、これにより、ROM2に対するメモリアクセスを削減することができる。
【0155】
予約制御部20において、調停回路部30に対するROM2へのアクセスリクエストを予約バッファ23に記録して管理する。そして、ノード5からのアクセスリクエストの対象データが拡張履歴バッファ13に記録されていない場合に、予約バッファ23を検索して、アクセスリクエストと同一のアクセス先に対するROM2へのリードアクセスが先行ノード5により予約されているかを確認する。
【0156】
アクセスリクエストと同一のアクセス先に対するROM2へのリードアクセスが先行ノード5により予約されている場合に、予約バッファ管理部22が、予約バッファ23の当該先行ノード5に対応させてbroadcast flagフィールドに登録することで便乗予約を行なう。その後、先行ノード5のアクセスリクエストに対して調停回路部30がROM2からデータの読み出しを行なった際に、便乗予約を行なった便乗ノード5に対しても、当該データを応答する。これにより、ROM2へのデータアクセス回数を削減することができる。
【0157】
ノード5(CPU51)の数が増えた場合であっても、ROM2へのアクセスリクエストが拡張履歴バッファ13や予約バッファ23においてヒットすることで、複数のノード5によって共有されるROM2へのアクセス数がノード5の数に比例して増えることが無い。そのため、ノード5の数が多くなっても、本コンピュータシステム1全体としての起動時間が長くなることを抑止することができる。
【0158】
ノード5からのアクセスリクエストが拡張履歴バッファ13または予約バッファ23にヒットした場合に、全てのアクセスリクエストに応じてROMにアクセスする従来手法と比べて、ノード5がデータ取得にかかる時間を短縮できる。すなわち、各ノード5がROM2のデータに高速にアクセスすることができる。そのため、遅れて起動しているノード5が先行して起動しているノード5に追いつけるようになり、複数のノード5が同期してシーケンスが進むことにより、システム全体としての起動時間を短縮することができる。
【0159】
サウスブリッジ3に履歴制御部10および予約制御部20を備えることで、ROM2の増設や、各ノード5等に対してマスタ/スレーブを制御するためのカスタム回路等の追加が不要である。これにより、少ない資源(低コスト)でメモリアクセスの削減とシステム全体としての起動時間の短縮を実現することができる。
【0160】
拡張履歴バッファ管理部12が、直近にROM2に対して行なわれたアクセスを優先して拡張履歴バッファ13に残すようにソートを行なう。これにより、拡張履歴バッファ13には、複数のノード5によりリクエストされる確率が高いデータが登録され、効率的である。
【0161】
拡張履歴バッファ13の更新に際して、拡張履歴バッファ管理部12は、拡張履歴バッファ13のhis_noフィールドの値だけを更新する。これにより、拡張履歴バッファ13の更新を少ない処理コストで実現することができる。
【0162】
(D)その他
本実施形態の各構成および各処理は、必要に応じて取捨選択することができ、あるいは適宜組み合わせてもよい。
そして、開示の技術は上述した実施形態に限定されるものではなく、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。
例えば、上述した実施形態においては、サウスブリッジ3が集積回路として構成された例を示しているが、これに限定されるものではない。
図14は実施形態の一例としてのコンピュータシステム1におけるサウスブリッジ3のハードウェア構成の変形例を示す図である。
【0163】
図14に例示するサウスブリッジ3は、プロセッサ301,メモリ302および記憶装置303を備えたコンピュータとして構成されている。なお、
図14においては、ROM2,BMC4および複数のノード5と接続されるためのインタフェース等の図示を便宜上、省略している。
【0164】
メモリ302は、ROMおよびRAM(Random Access Memory)を含む記憶メモリである。メモリ302のROMには、データ等をROM2からロードするロード処理にかかるソフトウェアプログラムやこのプログラム用のデータ類が書き込まれている。メモリ302上のソフトウェアプログラムは、プロセッサ301に適宜読み込まれて実行される。また、メモリ302のRAMは、一次記憶メモリあるいはワーキングメモリとして利用される。メモリ302のRAMは、拡張履歴バッファ13や予約バッファ23としての機能を実現してもよい。
【0165】
プロセッサ(処理部)301は、サウスブリッジ3全体を制御する。プロセッサ301は、マルチプロセッサであってもよい。プロセッサ301は、例えばCPU,MPU,DSP,ASIC,PLD,FPGAのいずれか一つであってもよい。また、プロセッサ301は、CPU,MPU,DSP,ASIC,PLD,FPGAのうちの2種類以上の要素の組み合わせであってもよい。
【0166】
そして、プロセッサ301が、ロード処理にかかる情報処理プログラムを実行することにより、上述した履歴制御部10,予約制御部20および調停回路部30の少なくとも一部の機能を実現してもよい。
【0167】
なお、これらの履歴制御部10,予約制御部20および調停回路部30としての機能を実現するためのプログラム(情報処理プログラム)は、例えばフレキシブルディスク,CD(CD-ROM,CD-R,CD-RW等),DVD(DVD-ROM,DVD-RAM,DVD-R,DVD+R,DVD-RW,DVD+RW,HD DVD等),ブルーレイディスク,磁気ディスク,光ディスク,光磁気ディスク等の、コンピュータ読取可能な記録媒体に記録された形態で提供される。そして、プロセッサ301はその記録媒体からプログラムを読み取って内部記憶装置(メモリ302)または外部記憶装置(記憶装置303)に転送し格納して用いる。また、そのプログラムを、例えば磁気ディスク,光ディスク,光磁気ディスク等の記憶装置(記録媒体)に記録しておき、その記憶装置から通信経路を介してコンピュータに提供するようにしてもよい。
【0168】
履歴制御部10,予約制御部20および調停回路部30としての機能を実現する際には、内部記憶装置(メモリ302)に格納されたプログラムがプロセッサ301によって実行される。このとき、記録媒体に記録されたプログラムをコンピュータが読み取って実行するようにしてもよい。
【0169】
上述した実施形態おいては、ROM2に格納された起動用プログラムや試験用プログラムを各ノード5が読み出して実行する例を示しているが、これに限定されるものではない。ROM2に起動用プログラムや試験用プログラム以外のプログラムや、これらのプログラムが使用するデータを格納し、各ノード5が読み出してもよい。
また、上述した開示により本実施形態を当業者によって実施・製造することが可能である。
【0170】
(E)付記
以上の実施形態に関し、さらに以下の付記を開示する。
(付記1)
複数のプロセッサノードと、
前記複数のプロセッサノードにより共用されるメモリと、
前記複数のプロセッサノードにより前記メモリ対して行なわれた各データアクセスのアクセス履歴情報を記憶するアクセス履歴情報記憶部と、
前記複数のプロセッサノードのうちの第1のプロセッサノードによる前記メモリに対するアクセスリクエストの対象データが前記アクセス履歴情報に含まれている場合に、前記アクセス履歴情報に含まれるデータを前記第1のプロセッサノードに応答する履歴応答部と
を備えることを特徴とする、情報処理装置。
【0171】
(付記2)
前記メモリに対して行なわれるデータアクセスの予約状態を表す予約情報を記憶する予約情報記憶部と、
前記第1のプロセッサノードによる前記メモリに対するアクセスリクエストの対象データが前記アクセス履歴情報に含まれていない場合において、前記アクセスリクエストによる前記メモリにおけるアクセス先とアクセス先が同一の先行するアクセスリクエストが前記予約情報記憶部に登録されている場合に、前記先行するアクセスリクエストに対して前記メモリから読み出されたデータを、前記第1のプロセッサノードに応答する予約制御部と
を備えることを特徴とする、付記1記載の情報処理装置。
【0172】
(付記3)
前記予約情報が、
前記先行するデータアクセスの発行元のプロセッサノードを示す情報と、
前記先行するデータアクセスの前記メモリにおけるアクセス先を示す情報と、
前記先行するデータアクセスの前記メモリにおけるアクセス先とアクセス先が同一の前記先行するデータアクセスに後続するデータアクセスの発行元のプロセッサノードを示す情報と
を備えることを特徴とする、付記2に記載の情報処理装置。
【0173】
(付記4)
前記アクセス履歴情報に対して、前記メモリに対してデータアクセスが行なわれてからの経過時間が短いデータアクセスに関する情報を優先して残すよう更新するアクセス履歴情報更新部
を備えることを特徴とする、付記1~3のいずれか1項に記載の情報処理装置。
【0174】
(付記5)
複数のプロセッサノードと、前記複数のプロセッサノードにより共用されるメモリとを備える情報処理装置において、
前記複数のプロセッサノードにより前記メモリ対して行なわれた各データアクセスのアクセス履歴情報をアクセス履歴情報記憶部に記憶する処理と、
前記複数のプロセッサノードのうちの第1のプロセッサノードによる前記メモリに対するアクセスリクエストに対応するデータが前記アクセス履歴情報に含まれている場合に、前記アクセス履歴情報に含まれるデータを前記第1のプロセッサノードに応答する処理と
を備えることを特徴とする、情報処理方法。
【0175】
(付記6)
前記メモリに対して行なわれるデータアクセスの予約状態を表す予約情報を予約情報記憶部に記憶する処理と、
前記第1のプロセッサノードによる前記メモリに対するアクセスリクエストに対応するデータが前記アクセス履歴情報に含まれていない場合において、前記アクセスリクエストによる前記メモリにおけるアクセス先とアクセス先が同一の先行するアクセスリクエストが前記予約情報記憶部に登録されている場合に、前記先行するアクセスリクエストに対して前記メモリから読み出されたデータを、前記第1のプロセッサノードに応答する処理と
を備えることを特徴とする、付記5記載の情報処理方法。
【0176】
(付記7)
前記予約情報が、
前記先行するデータアクセスの発行元のプロセッサノードを示す情報と、
前記先行するデータアクセスの前記メモリにおけるアクセス先を示す情報と、
前記先行するデータアクセスの前記メモリにおけるアクセス先とアクセス先が同一の前記先行するデータアクセスに後続するデータアクセスの発行元のプロセッサノードを示す情報と
を備えることを特徴とする、付記6に記載の情報処理方法。
【0177】
(付記8)
前記アクセス履歴情報に対して、前記メモリに対してデータアクセスが行なわれてからの経過時間が短いデータアクセスに関する情報を優先して残すよう更新する処理
を備えることを特徴とする、付記5~7のいずれか1項に記載の情報処理方法。
【0178】
(付記9)
複数のプロセッサノードと、前記複数のプロセッサノードにより共用されるメモリとを備える情報処理装置において、
前記複数のプロセッサノードにより前記メモリ対して行なわれた各データアクセスのアクセス履歴情報をアクセス履歴情報記憶部に記憶させ、
前記複数のプロセッサノードのうちの第1のプロセッサノードによる前記メモリに対するアクセスリクエストに対応するデータが前記アクセス履歴情報に含まれている場合に、前記アクセス履歴情報に含まれるデータを前記第1のプロセッサノードに応答する
処理をプロセッサに実行させる情報処理プログラム。
【0179】
(付記10)
前記メモリに対して行なわれるデータアクセスの予約状態を表す予約情報を予約情報記憶部に記憶させ、
前記第1のプロセッサノードによる前記メモリに対するアクセスリクエストに対応するデータが前記アクセス履歴情報に含まれていない場合において、前記アクセスリクエストによる前記メモリにおけるアクセス先とアクセス先が同一の先行するアクセスリクエストが前記予約情報記憶部に登録されている場合に、前記先行するアクセスリクエストに対して前記メモリから読み出されたデータを、前記第1のプロセッサノードに応答する
処理を前記プロセッサに実行させる付記9記載の情報処理プログラム。
【0180】
(付記11)
前記予約情報が、
前記先行するデータアクセスの発行元のプロセッサノードを示す情報と、
前記先行するデータアクセスの前記メモリにおけるアクセス先を示す情報と、
前記先行するデータアクセスの前記メモリにおけるアクセス先とアクセス先が同一の前記先行するデータアクセスに後続するデータアクセスの発行元のプロセッサノードを示す情報と
を備えることを特徴とする付記10に記載の情報処理プログラム。
【0181】
(付記12)
前記アクセス履歴情報に対して、前記メモリに対してデータアクセスが行なわれてからの経過時間が短いデータアクセスに関する情報を優先して残すよう更新する
処理を前記プロセッサに実行させる付記9~11のいずれか1項に記載の情報処理プログラム。
【符号の説明】
【0182】
1 コンピュータシステム
2 ROM
3 サウスブリッジ
4 BMC
5 ノード
51 CPU
52 メモリ(MEM)
53 HDD
54 LANインタフェース
10 履歴制御部
11 ROMアクセス応答選択部
12 拡張履歴バッファ管理部
13 拡張履歴バッファ
20 予約制御部
21 応答先ノード決定部
22 予約バッファ管理部
23 予約バッファ
24 ROMアクセス依頼部
30 調停回路
301 プロセッサ
302 メモリ
303 記憶装置