【解決手段】制御装置は、対応するノードからのコマンドとコマンドに続くデータ列とを処理する複数の処理部を有し、各処理部は、データ列の各データが順次格納される受信データレジスタと、受信データレジスタにデータが格納される毎にデータが転送される受信データバッファと、データ列の受信データバッファへの転送を検出する受信完了検出部と、受信したコマンドが、異常コマンドかを検出する異常検出部と、異常コマンドの検出に基づいて割り込みを発行し、異常コマンドを検出しない場合、受信データ列の転送完了の検出に基づいて割り込みを発行する割り込み発行部と、を有し、制御装置は、割り込み発行部が発行した割り込みに基づいて割り込み処理を実行する割り込み処理部と、を有する。
前記受信完了検出部は、前記異常検出部が前記異常コマンドを検出した場合、受信完了信号の受信に基づく前記割り込み発行部への割り込みの発行を抑止すること、を特徴とする請求項2に記載の並列処理装置。
前記送信完了検出部は、前記異常検出部が前記異常コマンドを検出した場合、前記第1の送信完了信号および前記第2の送信完了信号の受信に基づく前記割り込み発行部への割り込みの発行を抑止すること、を特徴とする請求項4に記載の並列処理装置。
【発明を実施するための形態】
【0010】
以下、図面を用いて実施形態が説明される。
【0011】
図1は、一実施形態における並列処理装置の一例を示す。
図1に示す並列処理装置100は、情報処理を実行する複数のノード1と、複数のノード1を制御する制御装置2とを有する。例えば、各ノード1は、サーバ等の情報処理装置でもよく、CPU(Central Processing Unit)等のプロセッサでもよい。あるいは、各ノード1は、CPUに含まれる複数のCPUコアでもよい。なお、ノード1は、図示しないネットワークを介して相互に接続され、情報処理に使用するデータを相互に転送してもよい。
【0012】
例えば、ノード1は、コマンドとコマンドに続くデータ列とを制御装置2に送信する。例えば、コマンドがノード状態の通知を示す通知コマンドの場合、コマンドに続くデータ列は、ノードがどのような稼働状態または停止状態にあるのかを示す。例えば、コマンドが、時刻等のシステム情報の要求を示す要求コマンド、または、ノード1の状態の異常を示す異常コマンドの場合、コマンドに続くデータ列はなく、コマンドのみが送信されてもよい。ノード1の状態の異常とは、制御装置2との間で通信が正常にできないことをノード1が検出した場合を含む。
【0013】
制御装置2は、複数のノード1の各々に対応して設けられる複数の処理部3を有する。各処理部3は、受信データレジスタ4、受信データバッファ5、受信完了検出部6、異常検出部7および割り込み発行部8を有する。また、制御装置2は、複数のノード1の各々に対応して設けられる割り込み処理部9を有する。
【0014】
例えば、処理部3は、ハードウェアにより実現され、割り込み処理部9は、制御装置2に搭載されるBMC等のコントローラが実行するファームウェアにより実現される。なお、処理部3の一部は、ソフトウェアにより実現されてもよく、割り込み処理部9は、FPGA(Field Programmable Gate Array)等のハードウェアにより実現されてもよい。
【0015】
受信データレジスタ4は、対応するノード1から受信するコマンドに続くデータ列に含まれる各データが順次格納される。受信データバッファ5は、受信データレジスタ4にデータが格納される毎に、受信データレジスタ4からデータが転送される。例えば、受信データレジスタ4のサイズは1バイトであり、受信データバッファ5のサイズは、ノード1から受信するデータ列の最大サイズ以上(複数バイト)である。処理部3は、受信データレジスタ4にデータが書き込まれる毎に、書き込まれたデータを受信データバッファ5に転送する。なお、コマンドに続くデータ列は、1バイトでもよい。
【0016】
受信完了検出部6は、受信したコマンドに続くデータ列の全てが、受信データレジスタ4から1バイトずつ受信データバッファ5に転送されたことを検出する。例えば、受信完了検出部6は、データ列の受信データバッファ5への転送が完了したことに基づいて、ノード1からのデータ列の受信が完了したことを示す受信完了情報を割り込み発行部8に出力する。
【0017】
異常検出部7は、受信したコマンドが、コマンドを送信したノード1の状態の異常を示す異常コマンドであるかを検出する。異常検出部7は、異常コマンドの検出に基づいて直ちに、ノード1の状態の異常を示す異常情報を割り込み発行部8に出力する。
【0018】
割り込み発行部8は、異常検出部7による異常コマンドの検出に基づいて直ちに、割り込み処理部9に割り込みを発行する。また、割り込み発行部8は、異常検出部7が異常コマンドを検出しない場合、受信完了検出部6によるデータ列の受信データバッファ5への転送完了の検出に基づいて、割り込み処理部9に割り込みを発行する。
【0019】
割り込み処理部9は、割り込み発行部8が発行した割り込みに基づいて、割り込み要因毎に割り込み処理を実行する。例えば、ノード状態の通知を示す通知コマンドに続くデータ列の受信に基づく割り込み処理では、データ列により示されるノードの状態がBMC内の状態記憶領域に格納され、データ列を受信したことを示す応答コマンドがノードに発行される。例えば、時刻等のシステム情報の要求を示す要求コマンドの受信に基づく割り込み処理では、時刻等のシステム情報が取得され、取得したシステム情報がノード1に応答される。例えば、ノード1の状態の異常を示す異常コマンドの受信に基づく割り込み処理では、異常の内容や原因が解析され、ノード1または管理者端末に異常の内容や原因が通知される。
【0020】
図1に示す並列処理装置100では、受信完了検出部6は、通知コマンドに続いてノード1から受信するデータ列の受信データバッファ5への転送が完了したことに基づいて、受信完了情報を割り込み発行部8に出力する。このため、データ列に含まれる各データを受信データレジスタ4で受信する毎に受信完了情報を割り込み発行部8に出力する場合に比べて、割り込み発行部8が割り込み処理部9に発行する割り込みの回数を削減することができる。これにより、割り込みに基づいて実行される割り込み処理の回数を削減することができ、BMC(割り込み処理部9)に掛かる負荷を軽減することができる。この結果、より多くのノード1の制御を制御装置2に実行させることが可能になる。換言すれば、コマンドに続いてノード1から送信されるデータを1バイト受信する毎に割り込みを発行する場合に比べて、並列処理装置100内に配置する制御装置2の数を削減することができ、並列処理装置のコストを削減することができる。
【0021】
また、異常コマンドを受信した場合には、異常情報が割り込み発行部8に直ちに出力され、割り込み発行部8が割り込み処理部9に割り込みを発行するため、ノード1の異常状態に対する割り込み処理を迅速に開始することができる。
【0022】
図2は、別の実施形態における並列処理装置の一例を示す。
図1と同様の要素については、詳細な説明は省略する。
図3に示す並列処理装置100Aは、情報処理を実行する複数のノード10と、複数のノード10を制御および管理する制御装置20とを有する。例えば、ノード10は、ネットワークで相互に接続されている。ノード10は、サーバ等の情報処理装置でもよく、CPU等のプロセッサでもよく、CPUに含まれる複数のCPUコアでもよい。
【0023】
制御装置20は、制御部30およびBMC40を有する。制御部30は、例えば、ハードウェアにより実現され、各ノード10に対するコマンドおよびコマンドに続くデータ列の送受信を制御する。例えば、ノード10と制御部30とは、IPMI標準のKCSインターフェースを使用してコマンドおよびデータ列を送受信する。なお、
図2では、ノード10から受信するコマンドおよびデータに関する要素を示し、ノード10に送信するコマンドおよびデータに関する要素の記載を省略している。
【0024】
制御部30は、各ノード10に対応してそれぞれ設けられる複数のKCS処理部50および割り込みレジスタ60を有する。KCS処理部50は、KCSインターフェースレジスタ52、KCSデータ処理回路54、KCSサポートステータスレジスタ56およびKCSサポートデータバッファ58を有する。KCS処理部50の例は、
図3に示される。KCS処理部50は、処理部の一例である。
【0025】
KCSインターフェースレジスタ52は、ノード10から受信するコマンドに続くデータ列を保持するとともに、コマンドとともにノード10に送信するデータ列を保持する。KCSデータ処理回路54は、KCSインターフェースレジスタ52によるデータ列の受信に基づいて、KCS割り込みの発行を判断した場合、KCSサポートステータスレジスタ56の所定のKCS割り込みフラグをセットする。ここで、KCS割り込みは、KCSインターフェースを使用したノード10から制御装置20への通信に起因して発生する割り込みである。
【0026】
KCSサポートデータバッファ58は、KCSインターフェースレジスタ52を介してノード10から1バイトずつ受信するデータをデータ列として保持する。また、KCSサポートデータバッファ58は、KCSインターフェースレジスタ52を介してノード10に1バイトずつ送信されるデータを含むデータ列を保持する。
【0027】
BMC40は、各ノード10の電源の制御、温度情報等の取得、イベントの記録等のノード10の管理を実行するとともに、制御部30から発行されるKCS割り込みに基づいて、KCS割り込み処理を実行する。KCS割り込み処理は、KCS割り込みに基づいて実行される割り込み処理である。
図2では、KCS割り込み処理に関する要素のみを記載し、ノード10を管理する要素の記載を省略する。
【0028】
BMC40は、割り込みスレッド42と、KCS割り込みが発生したときに割り込みスレッド42により起動されるノード10毎のKCSスレッド44とを、ファームウェアにより実行する。例えば、KCSスレッド44は、対応するKCS処理部50からの割り込みに基づいて、KCS割り込み処理を実行し、対応するノード10に送信する応答データを生成する割り込み処理部の一例である。KCSスレッド44は、KCS割り込みに基づくKCS割り込み処理が完了した場合に終了する。なお、BMC40は、割り込みスレッド42およびKCSスレッド44の一方または両方の代わりに、割り込み処理を実行する割り込み処理回路を有してもよい。
【0029】
図3は、
図2のKCS処理部50の一例を示す。KCSインターフェースレジスタ52は、コマンドレジスタ522、ステータスレジスタ524、受信データレジスタ526および送信データレジスタ528を有する。例えば、コマンドレジスタ522、ステータスレジスタ524、受信データレジスタ526および送信データレジスタ528は、それぞれ1バイトである。
【0030】
KCSデータ処理回路54は、比較部541、アンド部542、立ち上がり検出部543、受信完了検出部544、送信完了検出部545およびその他異常検出部546を有する。また、KCSデータ処理回路54は、受信データライトカウンタ547、送信データライトカウンタ548および送信データリードカウンタ549を有する。
【0031】
KCSサポートステータスレジスタ56は、KCS割り込みフラグとして、アボードフラグ、受信完了フラグ、送信完了フラグおよびその他異常フラグを有する。なお、KCS処理部50は、アボードフラグABRT、受信完了フラグ、送信完了フラグまたはその他異常フラグに基づいて、割り込みレジスタ60に割り込みを発行する割り込み発行制御部592を有する。
【0032】
KCSサポートデータバッファ58は、受信データバッファ582および送信データバッファ584を有する。また、KCS処理部50は、受信サイズレジスタ594および送信サイズレジスタ596を有する。KCSサポートステータスレジスタ56および割り込み発行制御部592は、異常コマンドの検出、または、異常コマンドを検出しない場合に受信データ列または送信データ列の転送完了の検出に基づいてKCS割り込みを発行する割り込み発行部の一例である。
【0033】
コマンドレジスタ522は、ノード10から送信されるコマンドを保持する。受信データレジスタ526は、対応するノード10から受信するコマンドに続くデータ列に含まれるデータを、例えば1バイト毎に保持する。例えば、ノード10は、コマンドレジスタ522にコマンドを書き込み、受信データレジスタ526に1バイトずつデータを書き込む。ノード10から受信するデータ列は、受信データ列の一例である。ノード10から受信するデータ列は、受信データレジスタ526に1バイトずつ保持される毎に受信データバッファ582に転送される。
【0034】
ステータスレジスタ524は、IPMI仕様におけるIBFフラグを有する。ステータスレジスタ524のIBFフラグは、ノード10によりコマンドレジスタ522にコマンドが書き込まれ、またはノード10により受信データレジスタ526にデータが書き込まれた場合に”1”にセットされる。
【0035】
送信データレジスタ528は、ノード10に送信する1バイトのデータを保持する。送信データレジスタ528に保持されるデータは、KCSデータ処理回路54による制御に基づいて送信データバッファ584から転送される。
【0036】
例えば、BMC40(
図2のKCSスレッド44)は、受信データバッファ582に転送されたデータ列を処理するKCS割り込み処理を実行し、対応するノード10に応答するデータ列を生成し、生成したデータ列を送信データバッファ584に格納する。そして、送信データバッファ584から送信データレジスタ528に1バイトずつ順次転送されるデータは、対応するノード10に応答データ列として送信される。
【0037】
比較部541は、コマンドレジスタ522に保持されたコマンドとアボートコマンドとを比較する。比較部541は、コマンドレジスタ522に保持されたコマンドがアボートコマンドである場合、”1”を出力し、コマンドレジスタ522に保持されたコマンドがアボートコマンドでない場合、”0”を出力する。例えば、コマンドレジスタ522には、コマンドを識別するコマンドコードが格納され、比較部541は、コマンドレジスタ522に保持されたコマンドコードと、アボードコマンドを識別するコマンドコードとを比較する。アボードコマンドは、ノード10の状態の異常を示す異常コマンドの一例である。
【0038】
アンド部542は、IBFフラグに”1”がセットされ、比較部541が”1”を出力する場合、”1”を出力し、IBFフラグが”0”または比較部541の出力が”0”の場合、”0”を出力する。立ち上がり検出部543は、アンド部542の出力が”0”から”1”に変化したことを検出した場合、アボートフラグをセットする。比較部541およびアンド部542は、ノード10から受信したコマンドが、対応するノード10の状態の異常を示す異常コマンドであるかを検出する異常検出部の一例である。
【0039】
受信完了検出部544は、ノード10から受信したデータ列の受信データバッファ582への転送の完了を示す受信完了信号RCPLTを受信データライトカウンタ547から受けた場合、KCSサポートステータスレジスタ56の受信完了フラグをセットする。但し、受信完了検出部544は、アンド部542から”1”を受けている場合、受信完了フラグのセット動作を抑止し、受信完了信号RCPLTに応答する割り込みの発行を抑止させる。アボートコマンドをノード10から受信した場合、ノード10が異常動作している可能性があり、ノード10から受信したデータ列が正しくないおそれがある。このため、アボートコマンドを受信した場合に、受信データ列の受信完了に伴う割り込みの発行を抑止することで、BMC40により無駄な割り込み処理が実行されることを抑止することができる。
【0040】
送信完了検出部545は、送信データライトカウンタ548および送信データリードカウンタ549から送信完了信号TCPLT1、TCPLT2の両方を受信した場合、応答データ列のノード10への送信完了を検出する。そして、送信完了検出部545は、KCSサポートステータスレジスタ56の送信完了フラグをセットする。
【0041】
但し、送信完了検出部545は、アンド部542から”1”を受けている場合、送信完了フラグのセット動作を抑止し、送信完了信号TCPLT1、TCPLT2に応答する割り込みの発行を抑止させる。アボートコマンドをノード10から受信した場合、ノード10が異常動作している可能性があり、制御装置20から送信したデータ列をノード10が正しく受信しないおそれがある。このため、アボートコマンドを受信した場合に、送信データ列の送信完了に伴う割り込みの発行を抑止することで、BMC40により無駄な割り込み処理が実行されることを抑止することができる。
【0042】
その他異常検出部546は、ノード10からのアボートコマンドとは無関係に、ノード10との間の通信等の異常が制御装置20内で検出された場合、その他異常フラグをセットする。例えば、その他異常フラグは、受信データサイズ分の受信データ列を受信する前にタイムアウトが発生した場合、または、送信データサイズ分の送信データ列を送信する前にタイムアウトが発生した場合等にセットされる。
【0043】
受信データライトカウンタ547は、コマンドとともにノード10から受信したデータ列に含まれる各データが、受信データレジスタ526から受信データバッファ582に書き込まれる毎にカウンタ値を更新する。受信データライトカウンタ547は、カウンタ値が受信サイズレジスタ594に保持された受信データサイズになった場合、受信完了検出部544に、受信完了信号RCPLTを出力する。例えば、受信データライトカウンタ547は、受信データレジスタ526から受信データバッファ582にデータを書き込むときに生成される書き込み要求をモニタし、書き込み要求が発生する毎にカウンタ値を更新する。受信データライトカウンタ547は、受信データカウンタの一例である。
【0044】
受信データライトカウンタ547により、受信データバッファ582に書き込まれるデータを1つずつカウントすることで、受信データバッファ582への受信データ列の転送の完了に合わせて、割り込みを発行することができる。これにより、受信データバッファ582への受信データ列の転送が完了する前に割り込みが発行されることを抑止でき、受信データバッファ582への受信データ列の転送が完了してから割り込みが発行されるまでの時間が掛かることを抑止できる。したがって、受信データ列の転送の完了に基づいて割り込みを発行する場合に、割り込み処理の効率が低下することを抑止することができる。
【0045】
送信データライトカウンタ548は、送信データバッファ584から送信データレジスタ528にデータが書き込まれる毎にカウンタ値を更新する。送信データライトカウンタ548は、カウンタ値が送信サイズレジスタ596に保持された送信データサイズになった場合、送信完了検出部545に送信完了信号TCPLT1を出力する。
【0046】
すなわち、送信データライトカウンタ548は、カウンタ値が応答データ列のデータ数分更新された場合、送信完了信号TCPLT1を出力する。例えば、送信データライトカウンタ548は、送信データバッファ584から送信データレジスタ528にデータを書き込むときに生成される書き込み要求をモニタし、書き込み要求が発生する毎にカウンタ値を更新する。送信データライトカウンタ548は、第1の送信データカウンタの一例であり、送信完了信号TCPLT1は、第1の送信完了信号の一例である。
【0047】
送信データリードカウンタ549は、送信データレジスタ528に格納されたデータがノード10により読み出される毎にカウンタ値を更新する。送信データリードカウンタ549は、カウンタ値が送信サイズレジスタ596に保持された送信データサイズになった場合、送信完了検出部545に送信完了信号TCPLT2を出力する。
【0048】
すなわち、送信データリードカウンタ549は、カウンタ値が応答データ列のデータ数分更新された場合、送信完了信号TCPLT2を出力する。例えば、送信データリードカウンタ549は、送信データレジスタ528からデータを読み出す場合にノード10から発行される読み出し要求をモニタし、読み出し要求が発生する毎にカウンタ値を更新する。送信データリードカウンタ549は、第2の送信データカウンタの一例であり、送信完了信号TCPLT2は、第2の送信完了信号の一例である。
【0049】
送信データライトカウンタ548および送信データリードカウンタ549により、送信データ列に含まれるデータを1つずつカウントすることで、送信データ列のノード10への送信の完了に合わせて、割り込みを発行することができる。これにより、ノード10への送信データ列の送信中に割り込みが発生されることを抑止でき、ノード10への送信データ列の送信が完了してから割り込みが発行されるまでの時間が掛かることを抑止できる。したがって、送信データ列の送信の完了に基づいて割り込みを発行する場合に、割り込み処理の効率が低下することを抑止することができる。
【0050】
また、送信データライトカウンタ548および送信データリードカウンタ549の両方によるデータのカウントに基づいて、割り込みを発行するため、割り込みの発行の信頼性を向上することができる。
【0051】
なお、受信データライトカウンタ547は、受信サイズレジスタ594を使用せずに、データ列の受信の完了を判定してもよい。例えば、KCSデータ処理回路54は、ノード10から受信したコマンドに基づいて、コマンドに続く受信データ列のサイズ(受信データサイズ)を求め、求めた受信データサイズを受信データライトカウンタ547にセットする。受信データライトカウンタ547は、受信データレジスタ526から受信データバッファ582にデータが書き込まれる毎にカウンタ値をデクリメントし、カウンタ値が”0”になったときに、受信完了信号RCPLTを出力する。
【0052】
また、送信データライトカウンタ548および送信データリードカウンタ549は、送信サイズレジスタ596を使用せずに、データ列の送信の完了を判定してもよい。例えば、KCSデータ処理回路54は、コマンドに続いてノード10に送信するデータ列のサイズ(送信データサイズ)を送信データライトカウンタ548および送信データリードカウンタ549にセットする。送信データライトカウンタ548は、送信データバッファ584から送信データレジスタ528にデータが書き込まれる毎にカウンタ値をデクリメントし、カウンタ値が”0”になったときに、送信完了信号TCPLT1を出力する。送信データリードカウンタ549は、送信データレジスタ528に格納されたデータがノード10により読み出される毎にカウンタ値をデクリメントし、カウンタ値が”0”になったときに、送信完了信号TCPLT2を出力する。
【0053】
割り込み発行制御部592は、アボードフラグ、受信完了フラグ、送信完了フラグまたはその他異常フラグのいずれかがセットされたことに応答して、割り込みレジスタ60にKCS割り込みを発行する。割り込みレジスタ60は、KCS割り込みを受信した場合、KCS割り込みをBMC40の割り込みスレッド42に通知する。
【0054】
なお、KCS割り込みの発行の優先順は、アボードフラグおよびその他異常フラグが、受信完了フラグおよび送信完了フラグよりも高く設定されてもよい。この場合、アボードフラグがセットされ、アボードフラグに対応する割り込み処理が実行されると、受信完了フラグまたは送信完了フラグに応答する割り込みの発行はマスクされる。一方、受信完了フラグがセットされ、受信完了フラグに対応する割り込み処理が実行されても、アボードフラグまたはその他異常フラグがセットされた場合、割り込みレジスタ60への割り込みが発行される。
【0055】
なお、例えば、受信完了フラグのセットに応答して割り込み処理が実行されているときに、受信完了フラグが再度セットされた場合、再度セットされた受信完了フラグに対応する割り込みの発行はマスクされる。このように、割り込み発行制御部592は、割り込みの発行のマスク機能を有する。
【0056】
受信データバッファ582は、受信データレジスタ526から転送されたデータを保持する。受信データバッファ582に保持されたデータ列(受信データ)は、BMC40により読み出される。例えば、受信データバッファ582のサイズは、ノード10から受信する受信データ列の最大サイズ以上(複数バイト)である。
【0057】
送信データバッファ584は、BMC40によりデータ列が書き込まれる。送信データバッファ584に保持されたデータ列(送信データ)は、送信データレジスタ528に1バイトずつ転送され、ノード10により読み出される。例えば、送信データバッファ584のサイズは、ノード10に送信する送信データ列の最大サイズ以上(複数バイト)である。
【0058】
受信サイズレジスタ594は、コマンドとともにノード10から送信されるデータ列のサイズである受信データサイズが格納される。送信サイズレジスタ596は、コマンドとともにノード10に送信するデータ列のサイズである送信データサイズが格納される。
【0059】
図4は、
図3のコマンドレジスタ522に書き込まれるコマンドの一例を示す。
図4に示すコマンドは、IPMI仕様におけるKCS制御コードと同様である。例えば、ノード10は、制御装置20にデータを転送する場合、コマンドレジスタ522にWRITE_START(コマンドコード=61h)を書き込んでトランザクションを開始した後、データを受信データレジスタ526に1バイトずつ書き込む。なお、コマンドコードの末尾の”h”は、16進数を示す。そして、最終のデータを受信データレジスタ526に書き込んだ後、コマンドレジスタ522にWRITE_END(コマンドコード=62h)を書き込み、トランザクションを終了する。
【0060】
また、ノード10は、コマンドレジスタ522にWRITE_STARTを書き込んでからWRITE_ENDを書き込むまでに、通信異常等を検出した場合、コマンドレジスタ522にABORT(アボートコマンド;コマンドコード=60h)を書き込む。アボートコマンドを受信した制御装置20は、後述するアボート処理を実行する。なお、例えば、コマンドコードは、いずれも1バイトである。
【0061】
図5は、
図3の受信データレジスタ526および送信データレジスタ528に格納されるデータフォーマットの一例を示す。
図5に示すリクエストデータフォーマットは、IPMI仕様におけるリクエストメッセージフォーマットと同様である。
図5に示すレスポンスデータフォーマットは、IPMI仕様におけるレスポンスメッセージフォーマットと同様である。
【0062】
ノード10から受信データレジスタ526に書き込まれるリクエストデータフォーマットは、1バイトのネットワーク機能コードNetFn/LUN(Logical Unit Number)と、1バイトのコマンドCmdと、0バイト以上のデータDataとを含む。BMC40から送信データレジスタ528に書き込まれるレスポンスデータフォーマットは、1バイトのNetFn/LUNと、1バイトのCmdと、1バイトの完了コード(Completion Code)と、0バイト以上のデータDataとを含む。
【0063】
図6は、
図2のノード10が稼働状態を通知する場合のデータフォーマットの一例を示す。例えば、ノード10は、稼働状態を通知する場合、NetFn/LUNを30hに設定し、Cmdを00hに設定し、3バイト目のDataに稼働状態を示すコードを設定し、4バイト目のDataに付加情報を設定する。Dataの5バイト目と6バイト目は、リザーブ領域である。
図6に示す例では、ノード10は、3バイト目のDataに応じて、8種類の稼働状態を通知することができる。また、ノード10は、4バイト目の付加情報により、シャットダウンが通常のシャットダウンなのか異常なシャットダウンなのかを通知することができる。
【0064】
稼働状態の通知を受けたBMC40は、レスポンスにおいて、NetFn/LUNおよびCmdを、リクエストと同じ30hと00hにそれぞれ設定し、正常のレスポンスの場合、3バイト目のDataに正常終了を示す00hを設定する。稼働状態の通知に対するレスポンスでは、Data領域は使用されない。
【0065】
図7は、
図6のデータフォーマットにおいて、ノードの稼働状態を通知するリクエストデータとそのレスポンスデータの一例を示す。例えば、ノード10からBMC40に、ノード10のOSが稼働状態であることを通知する場合、NetFn/LUNおよびCmdの30h、00hに続き、受信データレジスタ526に0Ahが書き込まれる。レスポンスデータの内容は、
図6と同じである。
【0066】
図8は、
図2のノード10がシステムの時刻情報を取得する場合のデータフォーマットの一例を示す。例えば、ノード10は、システム時刻情報を取得する場合、NetFn/LUNを31hに設定し、Cmdを01hに設定する。3バイト目以降のDataは存在しない。
【0067】
システム時刻情報の取得の通知を受けたBMC40は、レスポンスにおいて、NetFn/LUNおよびCmdを、リクエストと同じ31hと01hにそれぞれ設定し、正常のレスポンスの場合、3バイト目のDataに正常終了を示す00hを設定する。また、4バイト目から7バイト目の4バイトにシステム時刻を示すデータを設定する。例えば、システム時刻は、UTC(Universal Time Coordinated)が1970年1月1日からの累積秒として示される。
【0068】
図9は、
図8のデータフォーマットにおいて、システム時刻情報を取得するリクエストとそのレスポンスの一例を示す。リクエストデータの内容は、
図8と同じである。また、レスポンスデータの最初の3バイトは、
図8と同じである。例えば、レスポンスデータの4バイト目から7バイト目には、システム時刻を示す5ch、bdh、85h、e5hがそれぞれ書き込まれる。
【0069】
図10は、
図3のKCS処理部50の動作の一例を示す。まず、動作OP10において、KCS処理部50は、ノード10からのコマンドを待ち、ノード10からコマンドを受信した場合、動作OP20に移行する。動作OP20において、KCSデータ処理回路54は、コマンドがアボートコマンドか否かを比較部541により判定する。
【0070】
コマンドがアボートコマンドの場合、動作OP40に移行され、以下で説明するように、アボート処理が実行され、アボード処理の完了後、動作OP10のコマンド待ちに戻る。
【0071】
動作OP40において、立ち上がり検出部543は、KCSサポートステータスレジスタ56のアボートフラグをセットする。次に、動作OP41において、割り込み発行制御部592は、アボートフラグのセットに応答して割り込みレジスタ60に割り込み要求をセットすることで、BMC40に割り込みを発行し、動作OP42に移行する。
【0072】
動作OP42において、例えば、割り込み発行制御部592は、割り込みレジスタ60への割り込みの発行に基づいて、アボートフラグをリセットする。次に、動作OP43において、KCSデータ処理回路54は、BMC40によるアボート処理の完了を待ち、アボート処理が完了した場合、動作OP10に戻る。
【0073】
一方、動作OP20でコマンドがアボートコマンドでない場合、動作OP30に移行され、KCSデータ処理回路54は、その他異常が発生したか否かを判定する。その他異常が発生した場合、動作OP31において、その他異常検出部546は、KCSサポートステータスレジスタ56のその他異常フラグをセットする。次に、動作OP32において、割り込み発行制御部592は、その他異常フラグのセットに応答して割り込みレジスタ60に割り込み要求をセットすることで、BMC40に割り込みを発行する。次に、動作OP33において、例えば、割り込み発行制御部592は、割り込みレジスタ60への割り込みの発行に基づいて、その他異常フラグをリセットし、動作OP70に移行する。
【0074】
一方、アボートもその他異常も発生していない場合、動作OP50において、KCSデータ処理回路54は、ノード10からのデータ列の受信処理を実行し、データ列の受信処理の完了後、動作を動作OP70に移行する。動作OP50の動作の例は、
図11に示す。
【0075】
動作OP70において、KCSデータ処理回路54は、割り込み処理の完了に基づいてノード10に送信される応答データの送信確認処理を実行した後、動作OP10のコマンド待ちに戻る。動作OP70の動作の例は、
図12に示す。
【0076】
図11は、
図10の動作OP50の一例を示す。まず、動作OP51において、KCS処理部50は、受信サイズレジスタ594に受信データサイズをセットする。次に、動作OP52において、KCS処理部50は、ノード10からのデータが受信データレジスタ526に格納されるのを待つ。受信データレジスタ526にデータが格納された場合、動作OP53において、KCS処理部50は、受信データレジスタ526が保持するデータを受信データバッファ582に格納する。次に、動作OP54において、KCSデータ処理回路54は、受信データライトカウンタ547のカウンタ値を更新する。
【0077】
次に、動作OP55において、KCSデータ処理回路54は、受信データライトカウンタ547のカウンタ値に基づいて、受信データサイズ分のデータ列をノード10から受信したか否かを判定する。受信データサイズ分のデータ列をノード10から受信していない場合、動作OP52において、KCS処理部50は、次のデータの受信を待つ。受信データサイズ分のデータ列をノード10から受信した場合、動作OP56において、受信完了検出部544は、KCSサポートステータスレジスタ56の受信完了フラグをセットする。
【0078】
次に、動作OP57において、割り込み発行制御部592は、受信完了フラグのセットに応答して割り込みレジスタ60に割り込み要求をセットすることで、BMC40に割り込みを発行する。次に、動作OP58において、例えば、割り込み発行制御部592は、割り込みレジスタ60への割り込みの発行に基づいて、受信完了フラグをリセットし、
図10に示した動作OP70に移行する。
【0079】
図12は、
図10の動作OP70の一例を示す。まず、動作OP71において、KCS処理部50は、送信サイズレジスタ596に送信データサイズをセットする。次に、動作OP72において、KCSデータ処理回路54は、送信データバッファ584が保持するデータ列のうちの1バイトを、送信データレジスタ528にセットする。次に、KCSデータ処理回路54は、送信データライトカウンタ548のカウンタ値を更新する。
【0080】
次に、動作OP73において、KCSデータ処理回路54は、送信データレジスタ528に保持されたデータをノード10が読み出すまで待つ。そして、ノード10がデータを読み出した場合、動作OP75において、KCSデータ処理回路54は、送信データリードカウンタ549のカウンタ値を更新する。
【0081】
次に、動作OP76において、KCSデータ処理回路54は、送信データライトカウンタ548のカウンタ値と送信データリードカウンタ549のカウンタ値とに基づいて、送信データサイズ分のデータ列をノード10に送信したか否かを判定する。送信データサイズ分のデータ列をノード10に送信していない場合、動作OP74に戻る。送信データサイズ分のデータ列をノード10に送信した場合、動作OP77において、KCSデータ処理回路54は、KCSサポートステータスレジスタ56の送信完了フラグをセットする。
【0082】
次に、動作OP78において、割り込み発行制御部592は、送信完了フラグのセットに応答して割り込みレジスタ60に割り込み要求をセットすることで、BMC40に割り込みを発行する。次に、動作OP79において、例えば、割り込み発行制御部592は、割り込みレジスタ60への割り込みの発行に基づいて、送信完了フラグをリセットし、
図10に示した動作OP10に戻る。
【0083】
図13は、
図2のBMC40によるKCS割り込み処理の一例を示す。例えば、
図13に示す処理は、BMC40が実行するファームウェアより実行される。
【0084】
まず、ステップS11において、BMC40は、制御装置20等からの割り込みを待つ。割り込みを受信した場合、ステップS12において、BMC40は、割り込みがKCS割り込みか否かを判定し、KCS割り込みの場合、処理をステップS13に移行し、KCS割り込みでない場合、処理をステップS20に移行する。
【0085】
ステップS13において、BMC40は、KCS割り込みがアボートによる割り込みか否かを判定し、アボートによる割り込みの場合、処理をステップS14に移行し、アボートによる割り込みでない場合、処理をステップS15に移行する。ステップS14において、BMC40は、アボートによる割り込みに対する処理であるアボート処理を実行し、処理をステップS11に戻す。
【0086】
ステップS15において、BMC40は、受信サイズレジスタ594から受信データサイズを取得する。次に、ステップS16において、BMC40は、受信データバッファ582から受信データサイズ分のデータ列を読み出す。次に、ステップS17において、BMC40は、割り込みに対する応答処理を実行する。例えば、BMC40は、応答処理において、ノード10に応答する送信データ列を送信データバッファ584に格納する。
【0087】
次に、ステップS18において、BMC40は、送信データバッファ584に格納したデータ列がノード10に送信されたことに基づいて発行されるKCS割り込みを待ち、KCS割り込みを受信した場合、処理をステップS19に移行する。ステップS19において、BMC40は、KCS割り込みの受信に基づいてノード10への応答完了を検出し、処理をステップS11に戻す。一方、ステップS20において、BMC40は、KCS割り込み以外の割り込みに対する割り込み処理を実行し、処理をステップS11に戻す。
【0088】
以上、
図2から
図13に示す実施形態においても、
図1に示す実施形態と同様の効果を得ることができる。例えば、KCS処理部50は、アボートコマンドを受信しない場合、コマンドに続くデータ列が受信データバッファ582に転送されたことに基づいて、KCS割り込みを発行する。このため、データ列の各データを受信データレジスタ526で受信する毎にKCS割り込みを発行する場合に比べて、BMC40に発行する割り込みの回数を削減することができる。これにより、割り込みに基づいて実行される割り込み処理の回数を削減することができ、BMC40に掛かる負荷を軽減することができる。この結果、より多くのノード1の制御を制御装置20に実行させることが可能になる。
【0089】
さらに、
図2から
図13に示す実施形態では、受信データバッファ582への受信データ列の転送の完了に合わせて、割り込みを発行することができる。これにより、受信データバッファ582への受信データ列の転送が完了する前に割り込みが発行されることを抑止でき、受信データバッファ582への受信データ列の転送が完了してから割り込みが発行されるまでの時間が掛かることを抑止できる。したがって、受信データ列の転送の完了に基づいて割り込みを発行する場合に、割り込み処理の効率が低下することを抑止することができる。
【0090】
送信データライトカウンタ548および送信データリードカウンタ549により、送信データ列に含まれるデータを1つずつカウントすることで、送信データ列のノード10への送信の完了に合わせて、割り込みを発行することができる。これにより、ノード10への送信データ列の送信中に割り込みが発生されることを抑止でき、ノード10への送信データ列の送信が完了してから割り込みが発行されるまでの時間が掛かることを抑止できる。したがって、送信データ列の送信の完了に基づいて割り込みを発行する場合に、割り込み処理の効率が低下することを抑止することができる。
【0091】
アボートコマンドを受信した場合に、受信データ列の受信完了に伴う割り込みの発行を抑止することで、BMC40により無駄な割り込み処理が実行されることを抑止することができる。また、アボートコマンドを受信した場合に、送信データ列の送信完了に伴う割り込みの発行を抑止することで、BMC40により無駄な割り込み処理が実行されることを抑止することができる。
【0092】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。