(57)【要約】      （修正有）【課題】オペレーティングシステムに障害が発生した場合に、カーネルダンプを高速に実行する情報処理装置、カーネルダンプ方法及びプログラムを提供する。【解決手段】情報処理装置は、記憶装置と、第1のカーネル１１と、第1のカーネルに障害が発生した後、記憶装置に記憶された第1のデータを、他の装置に出力する第2のカーネル１２とを実行する処理装置とを有する。ダンプ部１２ａは、記憶装置における第1の記憶領域を利用して、記憶装置における第2の記憶領域に記憶された第2のデータを他の装置に出力した後、第1の記憶領域と第2の記憶領域とを利用して、記憶装置における第3の記憶領域に記憶された第3のデータを他の装置に出力する。【選択図】図３
2016170463.tif 000002
【特許請求の範囲】
【請求項１】
記憶装置と、
第1のカーネルと、前記第1のカーネルに障害が発生した後、前記記憶装置に記憶された第1のデータを、他の装置に出力する第2のカーネルとを実行する処理装置とを有し、
前記第2のカーネルは、前記記憶装置における第1の記憶領域を利用して、前記記憶装置における第2の記憶領域に記憶された第2のデータを前記他の装置に出力した後、前記第1の記憶領域と前記第2の記憶領域とを利用して、前記記憶装置における第3の記憶領域に記憶された第3のデータを前記他の装置に出力する
ことを特徴とする情報処理装置。
【請求項２】
前記第2のカーネルは、前記第1の記憶領域の利用において、前記第2の記憶領域および前記第3の記憶領域を示す領域情報を参照し、前記第2の記憶領域にアクセスし、当該第2の記憶領域に記憶された前記第2のデータを前記第1の記憶領域にコピーし、コピーした前記第2のデータに所定の処理を実行し、所定の処理を実行した前記第2のデータを前記他の装置に出力する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記第1の記憶領域は、前記第2のカーネルに割り当てられた記憶領域であり、
前記第1のデータは、前記第1の記憶領域以外の記憶領域に記憶されたデータである
ことを特徴とする請求項１に記載の情報処理装置。
【請求項４】
前記第2のカーネルは、前記第1の記憶領域と前記第2の記憶領域の利用において、所定の処理を実行した前記第2のデータを前記他の装置に出力した後、前記領域情報を参照し、前記第3の記憶領域にアクセスし、当該第3の記憶領域に記憶された第3のデータを前記第1の記憶領域および前記第2の記憶領域にコピーし、コピーした前記第3のデータに所定の処理を実行し、所定の処理を実行した前記第3のデータを前記他の装置に出力する
ことを特徴とする請求項２に記載の情報処理装置。
【請求項５】
記憶装置と、第1のカーネルと、前記第1のカーネルに障害が発生した後、前記記憶装置に記憶された第1のデータを、他の装置に出力する第2のカーネルとを実行する処理装置とを有する情報処理装置で実行されるカーネルダンプ方法であって、
前記情報処理装置は、
前記第1のカーネルに障害が発生した後、前記第2のカーネルを起動し、前記記憶装置における第1の記憶領域を利用して、前記記憶装置における第2の記憶領域に記憶されたデータを前記他の装置に出力し、
前記第1の記憶領域と前記第2の記憶領域とを利用して、前記記憶装置における第3の記憶領域に記憶されたデータを前記他の装置に出力する
ことを特徴とするカーネルダンプ方法。
【請求項６】
コンピュータに、
カーネルに障害が発生した後、記憶装置における第1の記憶領域を利用して、前記記憶装置における第2の記憶領域に記憶されたデータを他の装置に出力し、
前記第1の記憶領域と前記第2の記憶領域とを利用して、前記記憶装置における第3の記憶領域に記憶されたデータを前記他の装置に出力する処理を実行させることを特徴とするカーネルダンププログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、カーネルダンプ方法、カーネルダンププログラムに関する。
【背景技術】
【０００２】
情報処理装置において動作するオペレーティングシステムに障害が発生することがある。障害発生後、管理者は、障害の発生原因を解析する。管理者による解析のため、オペレーティングシステムは、障害発生後、情報処理装置内のメモリに記憶されたデータを予め指定された装置に出力する(カーネルダンプとも呼ぶ)。
【０００３】
情報処理装置は、かかるカーネルダンプを実行するため、通常の動作で実行されるオペレーティングシステムである第1のカーネルの他に、第2のカーネルを実行する。第2のカーネルは、かかるカーネルダンプを行う。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−３０１６３９号公報
【特許文献２】特開２００６−１７２１００号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
第2のカーネルが動作するために必要なメモリの領域(以下、第2のカーネル用の領域と適宜記す)は、予め定められている。第2のカーネルは、第2のカーネル用の領域の一部の領域を利用して、カーネルダンプを実行する。
【０００６】
第1のカーネルは、第2のカーネル用の領域を、第2のカーネル以外のプログラムが利用できないように設定する。この設定により、第2のカーネル以外のプログラムが利用できるメモリの領域が圧迫される。
【０００７】
かかるメモリの領域の圧迫を避けるため、第2のカーネル用の領域を小さくすれば、第2のカーネル以外のプログラムが利用できるメモリの領域が大きくなる。しかし、第2のカーネル用の領域を小さくすると、第2のカーネルが、カーネルダンプを実行する際に必要なメモリの領域が小さくなる。その結果、カーネルダンプが終了するまでの時間が長くなる。すなわち、第2のカーネル用の領域を小さくすると、カーネルダンプの実行速度が低下する。
【０００８】
一つの側面では、カーネルダンプを高速に実行することを目的とする。
【課題を解決するための手段】
【０００９】
一つの側面は、記憶装置と、第1のカーネルと、前記第1のカーネルに障害が発生した後、前記記憶装置に記憶された第1のデータを、他の装置に出力する第2のカーネルとを実行する処理装置とを有し、前記第2のカーネルは、前記記憶装置における第1の記憶領域を利用して、前記記憶装置における第2の記憶領域に記憶された第2のデータを前記他の装置に出力した後、前記第1の記憶領域と前記第2の記憶領域とを利用して、前記記憶装置における第3の記憶領域に記憶された第3のデータを前記他の装置に出力することを特徴とする情報処理装置である。
【発明の効果】
【００１０】
一つの側面によれば、カーネルダンプを高速に実行することができる。
【図面の簡単な説明】
【００１１】
【図１】図1は、本実施の形態の計算ノードを有する情報処理システムSYSの構成図である。
【図２】図2は、本実施の形態の計算ノードのハードウェアブロック図である。
【図３】図3は、図2のプログラムPGを説明するソフトウェアブロック図である。
【図４】図4は、図2のRAM102のメモリ領域を模式的に示す第1の図である。
【図５】図5は、図3の第2のカーネル12が利用できるRAM102の領域を指定する情報を有する設定ファイルの一例を示す。
【図６】図6は、オペレーティングシステムの起動と、ジョブの実行を説明するフロー図である。
【図７】図7は、図2のRAM102のメモリ領域を模式的に示す第2の図である。
【図８】図8は、本実施の形態におけるカーネルダンプを説明するフロー図である。
【発明を実施するための形態】
【００１２】
(システム構成図)
図1は、本実施の形態の計算ノードを有する情報処理システムSYSの構成図である。情報処理システムSYSは、高性能計算(high-performance computing、 HPC)を実行するシステムである。なお、情報処理システムは、計算機システムとも呼ばれる。
【００１３】
情報処理システムSYSは、第1の計算ノードPN1〜第7の計算ノードPN7と、IOノードIONと、制御ノードCNと、ストレージサーバSTRとを有する。計算ノードは、情報処理装置とも呼ばれる。なお、以下の図の説明において、同じ要素については同一の符号を付して、一度した説明を省略する。
【００１４】
第1の計算ノードPN1〜第7の計算ノードPN7は、ジョブを実行し、ジョブの実行結果を出力する。なお、ジョブは、例えば、人間がコンピュータに与える仕事の単位である。
【００１５】
制御ノードCNは、計算ノード(PN1〜PN7)にジョブを投入する処理や、計算ノード(PN1〜PN7)およびIOノードIONの電源制御や、計算ノード(PN1〜PN7)およびIOノードIONの管理を実行する。
【００１６】
IOノードIONは、計算ノード(PN1〜PN7)とストレージサーバSTRとの入出力処理を制御する。ストレージサーバSTRは、大容量のデータを格納するサーバである。ストレージサーバSTRは、例えば、計算ノード(PN1〜PN7)の起動用イメージや、メモリダンプの結果を格納するサーバである。
【００１７】
次に、ノード間の接続関係について説明する。第1の計算ノードPN1は、第2の計算ノードPN2〜第4の計算ノードPN4に接続する。第2の計算ノードPN2は、第1の計算ノードPN1、第4の計算ノードND4、第7の計算ノードND7に接続する。第3の計算ノードPN3は、第1の計算ノードPN1、第4の計算ノードND4、第6の計算ノードND6に接続する。
【００１８】
第4の計算ノードPN4は、第1の計算ノードND1〜第3の計算ノードND3、第5の計算ノードND5、IOノードIONに接続する。第5の計算ノードPN5は、第4の計算ノードND4、第6の計算ノードND6に接続する。第6の計算ノードPN6は、第3の計算ノードND3、第5の計算ノードND5、IOノードIONに接続する。第7の計算ノードPN7は、第2の計算ノードND2、IOノードIONに接続する。
【００１９】
IOノードIONは、第4の計算ノードND4、第6の計算ノードND6、第7の計算ノードPN7、ストレージサーバSTRに接続する。
【００２０】
2つの計算ノードは、インターコネクトにより接続する。また、計算ノードとIOノードとは、インターコネクトにより接続する。また、IOノードIONとストレージサーバSTRとは、インターコネクトにより接続する。このインターコネクトによる接続を太線で示す。
【００２１】
計算ノードは、他のノードを介して、別のノードやストレージサーバSTRにアクセスする。例えば、第1の計算ノードPN1は、第4の計算ノードPN4を介して、第5の計算ノードPN5にアクセスする。また、例えば、第1の計算ノードPN1は、第4の計算ノードPN4、IOノードIONを介して、ストレージサーバSTRにアクセスする。
【００２２】
制御ノードCNは、IOノードION、計算ノード(PN1〜PN7)と接続する。この制御ノードCNの接続は、前記したインターコネクトによる接続経路とは異なる接続経路を介する接続である。この制御ノードCNの接続を点線で示す。
【００２３】
(カーネルダンプ)
何らかの理由により、計算ノードで動作するオペレーティングシステムに障害が発生すると、オペレーティングシステムは、障害からの復旧処理(回復処理とも呼ぶ)を実行する。なお、このオペレーティングシステムは、例えばLinux(登録商標)である。オペレーティングシステムは、この復旧処理が失敗した場合、停止する。すなわち、オペレーティングシステムは、障害により停止する。一般に、オペレーティングシステム(特に、カーネル)において、何らかの理由により障害が発生し復旧できない状態は、カーネルパニックと呼ばれる。
【００２４】
カーネルパニックが発生すると、カーネルダンプを実行する他のオペレーティングシステムが起動する。一般に、通常の動作で実行されるオペレーティングシステムは、ファーストカーネル(以下、第1のカーネルと適宜記す)と呼ばれる。そして、第1のカーネルの障害発生後に起動されるオペレーティングシステムは、セカンダリカーネル(以下、第2のカーネルと適宜記す)と呼ばれる。
【００２５】
なお、第1のカーネルと別の第2のカーネルが、カーネルダンプを実行する理由は以下の2つの理由である。
【００２６】
第1の理由は、第1のカーネルに障害が発生した場合、障害が発生している第1のカーネルがカーネルダンプを実行しても、カーネルダンプが正確に実行されたか保証できないからである。
【００２７】
第2の理由は、第1のカーネルが、カーネルダンプを実行した場合、この実行により、第1のカーネルに関連するデータが展開されているメモリの記憶内容(カーネルの内部状態とも呼ぶ)が変更される可能性があるからである。カーネルダンプの実行により、カーネルの内部状態が変更されると、障害の発生原因を解析する解析者は、障害が発生した時点における、カーネルの内部状態を正確に把握することができない。
【００２８】
以上、２つの理由により、第1のカーネルと別の第2のカーネルが、カーネルダンプを実行する。
【００２９】
さて、HPC分野で用いられる情報処理(計算とも呼ぶ)では、1つのCPU(Central Processing Unit)当たりのメモリ容量が、情報処理の性能に影響することが多い。また、計算ノードは、情報処理の高速化のために、1つのCPU内に多数のコアを有するようになってきている。
【００３０】
従来は、1つのCPU当たり8コア程度であったが、現在は128コアなど多数になっている。このように、1つのCPU当たりのコア数が増えることは、1コア当たりに使えるメモリ領域は小さくなることを示している。
【００３１】
一方、利用者が計算ノードに実行させたい情報処理は、大規模になっている。大規模な情報処理を高速に実行するためには、計算ノードに搭載するメモリの容量を大きくする必要がある。このように、計算ノードのメモリの容量を大きくする必要性があるが、現実的には、1コアに割り当てられるメモリの容量(領域)が小さくなるという状態にある。
【００３２】
ところが、例えば製造価格が上昇するため、物理的なメモリをコア数に比例して増やすことは困難である。情報処理の高速化を図るためには、計算ノードのメモリの領域をできるだけ大きく、計算ノードが実行するジョブに割り当てる必要がある。
【００３３】
しかし、前記したように、第2のカーネルが動作するために必要なメモリの領域(第2のカーネル用の領域)は、予め定められている。そして、第1のカーネルは、第2のカーネル用の領域を、第2のカーネル以外のプログラムが利用できないように設定している。この設定により、第2のカーネル以外のプログラム(例えば、前記ジョブのプログラム)が利用できるメモリの領域が圧迫される。すなわち、第2のカーネルにより、計算ノードが実行するジョブに割り当てるメモリの領域が圧迫される。
【００３４】
ところで、第2のカーネルは、カーネルパニック後に起動する。すなわち、第2のカーネルは、カーネルパニック後にのみ、第2のカーネル用の領域を利用して動作する。とすれば、第2のカーネル用の領域を小さくすれば、ジョブに割り当てるメモリの領域が大きくなる。
【００３５】
ところが、第2のカーネル用の領域を小さくすると、第2のカーネルがカーネルダンプを実行する際に必要なメモリ領域が不足しやすくなる。第2のカーネルは、メモリ領域が不足すると、頻繁にメモリ回収処理を実行する。第2のカーネルが、頻繁にメモリ回収処理を実行すると、カーネルダンプの速度、特に、カーネルダンプの結果を転送する速度が低下する。すなわち、第2のカーネル用の領域を小さくすると、カーネルダンプの実行速度が低下する。そこで、本実施の形態の計算ノードは、第2のカーネルに最初に割り当てるメモリの領域を小さくしつつ、カーネルダンプの実行速度の高速化を図る。
【００３６】
(計算ノードのハードウェアブロック図)
図2は、本実施の形態の計算ノードのハードウェアブロック図である。以下の説明では、図2の計算ノード(情報処理装置)PNを計算ノードPNと適宜記す。図2では、図1の計算ノード(PN1〜PN7)のハードウェア構成を示す。
【００３７】
計算ノードPNは、バスBに接続された、CPU101と、RAM102と、ROM103と、通信装置104と、ストレージ装置105と、外部記憶媒体読み取り装置106とを有する。なお、RAMは"Random Access Memory"の略語、ROMは、" Read Only Memory"の略語である。
【００３８】
CPU101は、計算ノードPNの全体を制御する中央演算処理装置である。
【００３９】
RAM102は、CPU101が実行する処理や、プログラムPGが実行する各ステップにおいて作成(算出)されたデータなどを一時的に記憶する記憶装置である。プログラムPGは、オペレーティングシステムなどのプログラムである。RAM102は、例えば、制御ノードCNから投入されたジョブを記憶する。RAM102は、例えばDRAM(Dynamic Random Access Memory)などの半導体メモリである。また、RAM102は、各種データ、例えば、設定データDTを記憶する。RAMは、メモリとも呼ばれる。
【００４０】
CPU101は、第1のカーネル(図3参照)と、第1のカーネルに障害が発生した後、記憶装置(例えば、RAM102)に記憶された第1のデータを、他の装置に出力する第2のカーネル(図3参照)とを実行する処理装置の一例である。他の装置は、例えば、ストレージサーバSTRである。第1のデータは、例えば、RAM102における、第1の記憶領域以外の記憶領域に記憶されたデータである。第1の記憶領域は、第2のカーネル12に割り当てられた記憶領域であり、例えば、後記する図4、図7の領域R0に含まれるダンプ用領域である。
【００４１】
ROM103は、各種データを記憶する。通信装置104は、インターコネクトにより他の計算ノードや、IOノードION(図1参照)と接続し、通信する装置である。さらに、通信装置104は、インターコネクトによる接続経路とは異なる接続経路を介して、制御ノードCNに接続し、通信する装置である。なお、通信装置104は、イーサネット（登録商標）を介して制御ノードCNに接続する場合、例えばネットワークインターフェイスカード(NIC：Network Interface Card)を有する。
【００４２】
ストレージ装置105は、例えばハードディスクドライブや、ソリッドステートドライブや、不揮発性の半導体メモリなどのデータ格納装置である。外部記憶媒体読み取り装置106は、外部記憶媒体MDに記憶されたデータを読み取る装置である。外部記憶媒体MDは、不揮発性の記憶媒体であり、例えば、CD-ROM(Compact Disc Read Only Memory)、DVD(Digital Versatile Disc)などの可搬型記憶媒体である。
【００４３】
プログラムPGの実行ファイルは、ストレージサーバSTR(図1参照)に記憶されている。CPU101は、計算ノードPNの起動時に、ストレージサーバSTRからプログラムPGの実行ファイルを読み込み、RAM102に展開する。かかる起動は、ネットワークブートとも呼ばれる。なお、計算ノードNDは、ネットワークブートを行い、さらに、後記するカーネルダンプの結果をストレージサーバSTRに格納する場合、ストレージ装置105、外部記憶媒体読み取り装置106は、不要である。
【００４４】
なお、プログラムPGの実行ファイルを、例えば、ストレージ装置105や、外部記憶媒体MDに記憶してもよい。CPU101は、計算ノードPNの起動時に、ストレージ装置105や、外部記憶媒体MDからプログラムPGの実行ファイルを読み込み、RAM102に展開する。
【００４５】
(ソフトウェアブロック図)
図3は、図2のプログラムPGを説明するソフトウェアブロック図である。プログラムPGは、第1のカーネル11と、第2のカーネル12と、障害処理部13とを有する。第2のカーネル12は、ダンプ部12aを有する。第1のカーネル11は、通常の動作で実行されるオペレーティングシステムである。第2のカーネル12は、第1のカーネル11に障害が発生した後、起動されるオペレーティングシステムである。第2のカーネル12のダンプ部12aは、RAM102に記憶されたデータを、他の装置(例えば、図1のストレージサーバSTR)に出力するカーネルダンプを実行する。
【００４６】
障害処理部13は、第1のカーネル11に障害が発生した後、第2のカーネル12を起動する。オペレーティングシステムが、Linux(登録商標)の場合、障害処理部13は、例えば" Kexec"と呼ばれるプログラムモジュールに該当する。
【００４７】
なお、第1のカーネル11に障害が発生する原因は、例えば、ハードウェアの損傷である。また、第1のカーネル11が管理しているRAM102の管理テーブルが何らかの理由で破壊されてしまった場合である。他にも、第1のカーネル11が管理している、スタック領域に関するデータが破壊されてしまった場合である。
【００４８】
(RAMのメモリ領域)
図4は、図2のRAM102のメモリ領域を模式的に示す第1の図である。RAM102の左側に付した"Ad"で始まる文字列は、RAM102のアドレスを模式的に示す。開始アドレスAdKs1〜終了アドレスAdKe1で示されるメモリ領域は、第1のカーネル11が展開される領域である。以下の説明において、メモリ領域を領域と適宜記す。
【００４９】
開始アドレスAdDs1〜終了アドレスAdDe1で示される領域は、第1のデーモンが展開される領域である。開始アドレスAdJs1〜終了アドレスAdJe1で示される領域は、第1のジョブが展開される領域である。
【００５０】
開始アドレスAdKs2〜終了アドレスAdKe2で示される領域は、第2のカーネル12が展開される領域である。開始アドレスAdDs2〜終了アドレスAdDe2で示される領域は、第2のデーモンが展開される領域である。開始アドレスAdJs2〜終了アドレスAdJe2で示される領域は、第2のジョブが展開される領域である。
【００５１】
開始アドレスAdJs3〜終了アドレスAdJe3で示されるメモリ領域は、第3のジョブが展開される領域である。開始アドレスAdDs3〜終了アドレスAdDe3で示される領域は、各種データが展開される領域である。
【００５２】
図4において、前記説明した領域以外の他の領域については、カーネルダンプの説明を簡略化するため、その説明を省略する。なお、図4の符号R0、R1については、図5で説明する。
【００５３】
(設定ファイル)
図5は、図3の第2のカーネル12が利用できるRAM102の領域を指定する情報を有する設定ファイルの一例を示す。図5(A)は、第2のカーネル12が利用できるRAM102の領域を指定する第1の情報を有する第1の設定ファイルKd1を示す。第1の設定ファイルKd1は、第1の情報として"crashkernel= AdKs2-AdKe2"を有する。"crashkernel= AdKs2-AdKe2"は、第2のカーネル12は、RAM102の領域R0(図4参照)を利用できることを示す。領域R0は、開始アドレスAdKs2から終了アドレスAdKe2(図4参照)までのRAM102の領域である。
【００５４】
オペレーティングシステムがLinux(登録商標)の場合、第1の設定ファイルKd1は、ファイルシステムにおける、例えば、フォルダ"etc"の直下のフォルダ"sysconfig"に格納された、ファイル"kdump"である。なお、第1の設定ファイルKd1は、ファイル"kdump"以外の他のファイルであってもよい。
【００５５】
図5(B)は、第2のカーネル12が利用できるRAM102の領域を指定する第2の情報を有する第2の設定ファイルKd2を示す。第2の設定ファイルKd2は、第2の情報として"crashkernel= AdKs2-AdKe2, AdDs3-AdDe3"を有する。"crashkernel= AdKs2-AdKe2, AdDs3-AdDe3"は、第2のカーネル12は、領域R0と第1の領域R1(図4参照)を利用できることを示す。第1の領域は、開始アドレスAdDs3から終了アドレスAdDe3(図4参照)までのRAM102の領域である。
【００５６】
第2の設定ファイルKd2は、オペレーティングシステムがLinux(登録商標)の場合には、ファイルシステムにおける、例えば、フォルダ"etc"の直下のフォルダ"sysconfig"に格納された、ファイルである。開発者や、情報処理システムSYSの管理者が、第1の設定ファイルKd1や、第2の設定ファイルKd2を作成する。
【００５７】
(オペレーティングシステムの起動、ジョブの実行)
図6は、オペレーティングシステムの起動と、ジョブの実行を説明するフロー図である。図6のフロー図で説明する各ステップを実行する計算ノードを、例えば、図1の第6の計算ノードPN6とする。なお、図6のフロー図で説明する各ステップを実行する計算ノードは、第6の計算ノードPN6以外の計算ノードであってもよい。
【００５８】
ステップS1:第1のカーネル11が起動する。具体的には、第6の計算ノードPN6のCPU101は、制御ノードCNから起動コマンドを受信すると、ROM103に記憶されている起動プログラムの実行ファイルや、各種ファイルを読み込み、RAM102に展開する。起動プログラムは、図2で説明したネットワークブートを実行し、ストレージサーバSTRに格納されているプログラムPGの実行ファイルを読み込み、RAM102に展開する。
【００５９】
プログラムPGの実行ファイルは、第1のカーネル11のイメージファイル、第2のカーネル12のイメージファイルなどを有する。
【００６０】
各種設定ファイルは、第1のカーネル11、第2のカーネル12が動作するメモリ領域を示す情報を有する領域ファイルや、第1のカーネル11、第2のカーネル12が動作する際に適宜参照される参照ファイルを有する。第2のカーネル12が動作するメモリ領域を示す情報を有する領域ファイルは、例えば、図5(A)の第1の設定ファイルKd1や、図5(B)の第2の設定ファイルKd2である。
【００６１】
また、第1のカーネル11のイメージファイルは、ダンプ対象領域ファイルを有する。ダンプ対象領域ファイルは、第2のカーネル12が、RAM102においてカーネルダンプするメモリ領域を示す情報を有するファイルである。
【００６２】
なお、第1のカーネル11のイメージファイルに各種設定ファイルを含めても良い。
【００６３】
ステップS2:第1のカーネル11は、制御ノードCNが投入したジョブを受け付け、このジョブを実行する際に必要になる、RAM102の領域をこのジョブに割り当てる。例えば、第1のカーネル11は、制御ノードCNが投入した第1のジョブを受け付けた場合、第1のジョブを実行する際に必要になる、RAM102の領域(開始アドレスAdJs1〜終了アドレスAdJe1で示される領域)を第1のジョブに割り当てる。
【００６４】
ステップS3:CPU101は、ステップS2で受け付けたジョブを実行する。具体的には、CPU101は、ステップS2で受け付けたジョブに割り当てた領域を利用して、第1のジョブを実行する。第1のジョブは、実行結果を出力する。
【００６５】
ステップS4:ステップS3におけるジョブの実行が終了する。第1のカーネル11は、ジョブの実行が終了すると、ジョブ終了モードに移行して、このジョブの実行により作成されたファイルの削除処理や、このジョブに割り当てられたRAM102の領域の開放処理を実行する。その後、第1のカーネルは、ステップS2に移り、再度、ジョブの受け付けを行う。
【００６６】
なお、第1のカーネル11は、起動後、1つ以上のデーモン(常駐プログラムとも呼ぶ)を実行する場合がある。このデーモンは、ノード管理のデーモン、ジョブ管理のデーモン、クローンデーモンである。なお、クローンデーモンは、予め設定されたスケジュールに基づいて、コマンドやシェルスクリプトなどを自動実行するプログラムである。
【００６７】
例えば、第1のカーネル11は、RAM102における、開始アドレスAdDs1〜終了アドレスAdDe1で示される領域を利用して、第1のデーモンを実行する。
【００６８】
第1のカーネル11は、起動時に(ステップS1)、第1の設定ファイルKd1に基づいて、第2のカーネル12用の領域としてRAM102の領域R0(開始アドレスAdKs1〜終了アドレスAdKe1で示される領域)を決定する。
【００６９】
そして、第1のカーネル11は、領域R0を、第2のカーネル12以外のプログラム(例えば、受け付けたジョブのプログラムや、デーモン)が利用できないように設定する。そして、第1のカーネル11は、第2のカーネル12を、領域R0に展開する。以後、第2のカーネル12は、領域R0を、initramfsと呼ばれる必須のコマンド群が含まれるRAMディスクの領域、第2のカーネル12が動作するためのワーク領域、カーネルダンプを行うためのダンプ用領域として、利用する。第1のカーネル11は、前記した展開において、領域R0に、図5(B)の第2の設定ファイルKd2を展開する。なお、例えば図5(B)の第2の設定ファイルKd2が展開された状態を、図2の設定データDTとして模式的に示している。
【００７０】
(障害発生)
図3で説明したように、何からの理由で、第1のカーネル11に障害が発生する。すると、障害処理部13は、第2のカーネル12を起動する。第2のカーネル12は、起動後、カーネルダンプを実行する。第2のカーネル12は、カーネルダンプにおいて、第2のカーネル12用の領域R0以外のメモリ領域を、他の装置(例えば、図1のストレージサーバSTR)に出力する。
【００７１】
(カーネルダンプ)
次に、図1〜図8を参照して、本実施の形態におけるカーネルダンプについて説明する。図7は、図2のRAM102のメモリ領域を模式的に示す第2の図である。図7では、図4の一部を変更した図である。図8は、本実施の形態におけるカーネルダンプを説明するフロー図である。図8を参照して、本実施の形態におけるカーネルダンプを説明する。
【００７２】
ステップS11:第2のカーネル12が、起動する。具体的には、第1のカーネル11に障害が発生すると、障害処理部13は、この障害の発生に応答して、RAM102の領域R0を利用して、第2のカーネル12を起動する。
【００７３】
なお、オペレーティングシステムがLinuxの場合、起動した第2のカーネル12は、デバイスファイル" /dev/oldmem"を有する。
【００７４】
ステップS12:第2のカーネル12は、図5(A)の第1の設定ファイルKd1を読み込む。
【００７５】
ステップS13:第2のカーネル12は、第2のカーネル12用に割り当てられた領域R0の一部を、カーネルダンプを行うためのダンプ用領域として決定する。第2のカーネル12は、ダンプ用領域を利用して、カーネルダンプを実行するために必要な各種処理を実行する。
【００７６】
ステップS14:第2のカーネル12は、ダンプ先のネットワークファイルシステム(Network File System、NFS)をマウントする。
【００７７】
具体的には、第2のカーネル12は、ネットワークファイルシステムを構成する、IOノードION(図1参照)に接続しているストレージサーバSTR(図1参照)をマウントする。このマウントにより、第2のカーネル12は、ストレージサーバSTRにアクセスすることができる。なお、IOノードIONは、予め、ストレージサーバSTRをマウントしている。
【００７８】
ステップS15:第2のカーネル12は、第1の領域R1(図4参照)をカーネルダンプする。具体的には、第2のカーネル12は、ダンプ対象領域ファイルを参照し、ダンプ対象のメモリ領域にアクセスする。ダンプ対象のメモリ領域は、未だ、カーネルダンプが実行されていないデータが記憶されている領域である。ダンプ対象領域ファイルは、例えば、図4の第1の領域R1の開始アドレスおよび終了アドレス、図7の第2の領域R2の開始アドレスおよび終了アドレス、図7の第3の領域R3の開始アドレスおよび終了アドレスをこの順で含む。
【００７９】
そして、第2のカーネル12は、アクセスしたメモリ領域のデータを、領域R0のダンプ用領域にコピーし、コピーしたデータに所定の処理を実行する。この所定の処理の一例として、コピーしたデータをELF(Executable and Linkable Format)形式に変換する情報処理がある。
【００８０】
第2のカーネル12は、情報処理が実行されたデータを、マウントしたストレージサーバSTR(図1参照)に出力(カーネルダンプ)する。
【００８１】
第2のカーネル12が、カーネルダンプをする場合、ダンプ用領域の大きさに比例して、カーネルダンプの実行速度が大きくなる。ダンプ用領域が大きければ、一度にコピーできるデータの容量も大きくなるし、また、所定の処理を実行するために必要なメモリ領域も大きくなるからである。
【００８２】
そこで、ダンプ用領域として、ダンプ済みのメモリ領域(前記例では、領域R1)を利用することを考える。
【００８３】
なお、第2のカーネル12は、ダンプ対象領域ファイルに含まれる各領域の順序に従ってカーネルダンプを実行する。例えば、ダンプ対象領域ファイルに、前記した順序で、各領域の開始アドレスおよび終了アドレスが含まれている場合、第2のカーネル12は、第1の領域R1、R2、R3の順で、各メモリ領域に記憶されたデータをカーネルダンプする。
【００８４】
第2のカーネル12は、1つのメモリ領域に記憶されたデータのカーネルダンプが終了すると、次のステップS16に移る。例えば、第2のカーネル12は、ダンプ対象領域ファイルに含まれる1つの第1の領域R1のカーネルダンプが終了すると、次のステップS16に移る。
【００８５】
ステップS16:第2のカーネル12は、第1の領域R1のカーネルダンプが終了すると、第1の設定ファイルKd1(図5(A)参照)を第2の設定ファイルKd2(図5(B)参照)で置き換える。すなわち、第2のカーネル12は、第1の設定ファイルKd1を第2の設定ファイルKd2で上書きする。
【００８６】
オペレーティングシステムがLinux(登録商標)の場合、第2のカーネル12は、コマンド" mv /etc/sysconfig/kdump.2nd /etc/sysconfig/kdump "を実行する。
【００８７】
ステップS16の処理により、第1の設定ファイルKd1が、第2の設定ファイルKd2となる。
【００８８】
ステップS17:第2のカーネル12が、再起動する。
【００８９】
具体的には、第2のカーネル12は、ステップS12の処理が終了すると、その旨を障害処理部13に通知する。障害処理部13は、この通知に応答して、第2のカーネル12を再起動する。
【００９０】
ステップS18: 第2のカーネル12は、置き換えられた第1の設定ファイルを読み込む。具体的には、第2のカーネル12は、図5(B)の第2の設定ファイルKd2を読み込む。
【００９１】
ステップS19:第2のカーネル12は、ステップS13で決定したダンプ用領域に加えて、ダンプ済みのメモリ領域をダンプ用領域に設定する。
【００９２】
具体的には、第2のカーネル12は、置き換えられた第1の設定ファイル(換言すれば、図5(B)の第2の設定ファイルKd2)に含まれる第2の情報"crashkernel= AdKs2-AdKe2, AdDs3-AdDe3"を特定する。
【００９３】
そして、第2のカーネル12は、特定した第2の情報に含まれる、第1の情報で特定されるメモリ領域(図5で説明した"AdKs2-AdKe2")以外の領域を特定する。第2のカーネル12は、アドアレス"AdDs3-AdDe3"で示される領域を特定する。この特定された領域は、図4の第1の領域R1であり、ダンプ済みの領域である。ダンプ済みの領域には、障害発生の解析に必要なデータが既に記憶されていないので、第2のカーネル12は、このダンプ済みの領域を、ダンプ用領域として利用する。
【００９４】
そして、第2のカーネル12は、特定した領域(例えば、第1の領域R1)を、ダンプ用領域に設定する。第1の領域R1を、ダンプ用領域に設定した状態を、図7に示す。図7では、第2のカーネル12が、第1の領域R1を、第2のカーネル12のダンプ用領域に設定した状態を模式的に示している("第2のカーネルのダンプ用領域"参照)。
【００９５】
なお、第2の設定ファイルKd2に記憶された1番目の領域(第1の領域R1)の開始アドレスと終了アドレスが、図5(B)の第2の設定ファイルKd2に記憶されている。
【００９６】
ステップS20: 第2のカーネル12は、ダンプ先のネットワークファイルシステムをマウントする。ステップS20の処理は、ステップS14と同じ処理なので、その説明を省略する。
【００９７】
ステップS21: 第2のカーネル12は、第2の領域R2(図7参照)をカーネルダンプする。第2の領域R2は、例えば、第2のデーモン、第2のジョブ、第3のジョブに関するデータが展開されている領域である。
【００９８】
具体的には、第2のカーネル12は、ダンプ対象領域ファイルを参照し、ダンプ対象のメモリ領域である第2の領域R2にアクセスする。
【００９９】
第2のカーネル12は、アクセスしたメモリ領域のデータを、領域R0のダンプ用領域、第1の領域R1にコピーし、コピーしたデータに所定の処理を実行する。第2のカーネル12は、情報処理が実行されたデータを、マウントしたストレージサーバSTR(図1参照)に出力する。
【０１００】
ステップS22: 第2のカーネル12は、第3の領域R3(図7参照)をカーネルダンプする。第3の領域R3は、例えば、第1のカーネル11、第1のデーモン、第1のジョブに関するデータが展開されている領域である。
【０１０１】
具体的には、第2のカーネル12は、ダンプ対象領域ファイルを参照し、ダンプ対象のメモリ領域である第3の領域R3にアクセスする。
【０１０２】
第2のカーネル12は、アクセスしたメモリ領域のデータを、領域R0のダンプ用領域、第1の領域R1にコピーし、コピーしたデータに所定の処理を実行する。第2のカーネル12は、情報処理が実行されたデータを、マウントしたストレージサーバSTR(図1参照)に出力(カーネルダンプ)する。
【０１０３】
ステップS21、S22では、第2のカーネル12は、領域R0、第1の領域R1を利用して、カーネルダンプを実行できる。すなわち、ステップS21、S22において第2のカーネル12が利用するダンプ用領域は、ステップS15において第2のカーネル12が利用するダンプ用領域よりも大きい。従って、第2のカーネル12は、ステップS22や、S23におけるカーネルダンプの実行速度を、ステップS15におけるカーネルダンプの実行速度よりも早くすることができる。
【０１０４】
ステップS23:第2のカーネル12は、カーネルダンプの終了後、第2のカーネル12を動作させている情報処理装置の電源をオフにして、オペレーティングシステムを停止する。
【０１０５】
以上説明したように、第2のカーネル12は、RAM102における第1の記憶領域(メモリ領域とも呼ぶ)を利用して、RAM102における第2のメモリ領域に記憶された第2のデータをストレージサーバSTRに出力する。この第1のメモリ領域は、第2のカーネル12に割り当てられた記憶領域であり、例えば、図4、図7の領域R0に含まれるダンプ用領域である。また、第2のメモリ領域は、例えば、図4、図7の領域R1である。
【０１０６】
第2のカーネル12は、この出力の後、第1のメモリ領域と第2のメモリ領域とを利用して、RAM102における第3のメモリ領域に記憶された第3のデータをストレージサーバSTRに出力する。第3のメモリ領域は、例えば、図7の領域R2である。
【０１０７】
第2のカーネル12は、第1のメモリ領域の利用において、第2のメモリ領域および第3のメモリ領域を示す領域情報を参照する。この領域情報は、例えば、図8のステップS15で説明した、ダンプ対象領域ファイルに含まれる情報である。ダンプ対象領域ファイルは、例えば、図4の第1の領域R1の開始アドレスおよび終了アドレス、図7の第2の領域R2の開始アドレスおよび終了アドレス、図7の第3の領域R3の開始アドレスおよび終了アドレスを有する。
【０１０８】
第2のカーネル12は、この領域情報を参照して、第2のメモリ領域にアクセスし、第2のメモリ領域に記憶された第2のデータを第1のメモリ領域にコピーする。第2のカーネル12は、コピーした第2のデータに所定の処理を実行し、所定の処理を実行した第2のデータをストレージサーバSTRに出力する。
【０１０９】
出力後、第2のカーネル12は、前記した、第1のメモリ領域と第2のメモリ領域の利用において、この領域情報を参照し、第3のメモリ領域にアクセスする。そして、第2のカーネル12は、第3のメモリ領域に記憶された第3のデータを第1のメモリ領域および第2のメモリ領域にコピーする。そして、第2のカーネル12は、コピーした第3のデータに所定の処理を実行し、所定の処理を実行した第3のデータをストレージサーバSTRに出力する。
【０１１０】
以上、本実施の形態で説明した情報処理装置は、第2のカーネルに最初に割り当てるメモリ領域を小さくしている。従って、第2のカーネル以外のプログラムに割り当てるメモリ領域を大きくすることができる。
【０１１１】
本実施の形態で説明した情報処理装置は、第2のカーネルに最初に割り当てるメモリ領域を小さくしているが、カーネルダンプ時に、ダンプ済みの領域をダンプ用領域として利用している。すなわち、本実施の形態で説明した情報処理装置は、カーネルダンプが進行するにつれて、ダンプ用領域を大きくする。その結果、カーネルダンプの実行速度を速くすることができる。
【０１１２】
以上説明したように、本実施の形態の情報処理装置によれば、第2のカーネルに最初に割り当てるメモリの領域を小さくしつつ、カーネルダンプの実行速度を高速化できる。
【０１１３】
なお、カーネルパニックが発生した後に、第2のカーネル用のメモリ領域を新たに確保して、第2のカーネルに割り当て、第2のカーネルを起動すればよいとも思えるが、このような第2のカーネルを起動する手法を採用することはできない。理由を説明する。第1のカーネルが、メモリ領域を新たに確保し、プログラムに割り当てる場合、プログラムからの要求に基づいてメモリ領域を割り当てる。しかし、第1のカーネルは、カーネルパニックが発生すると、プログラムに割り当てるための連続したメモリ領域が、メモリ内のどの領域に存在するか検出することができなくなる。そのため、第1のカーネルは、第2のカーネル用のメモリ領域を新たに確保して、第2のカーネルに割り当てることはできない。そのため、第2のカーネルを起動する手法を採用することはできない。
【０１１４】
なお、ステップS16で置き換えられた第1の設定ファイルKd1は、RAM102に展開されているので、電源がオフされれば、消滅する。このステップS16で置き換えられた第1の設定ファイルKd1に含まれる情報は、第2の設定ファイルKd2に含まれる情報である。このように、置き換えられた第1の設定ファイルKd1は消滅するので、次に、電源がオンにされ、第2のカーネル12が、起動した場合には、置き換えられる前の第1の設定ファイルKd1が、ステップS12で読み込まれることになる。
【０１１５】
(変形例)
次に、本実施の形態の変形例について説明する。第2のカーネル12は、各領域のカーネルダンプが終了する度に、カーネルダンプが終了した領域を、ダンプ用領域として利用しても良い。例えば、第2のカーネル12は、第2の領域R2(図7参照)をカーネルダンプした後(ステップS21)、第2の領域をダンプ用領域として利用しても良い。第2のカーネル12は、各領域のカーネルダンプが終了する度に、カーネルダンプが終了した領域を、ダンプ用領域として利用することで、ダンプ用領域が段々と大きくなる。例えば、ダンプ用領域が、128キロバイト、1メガバイト、10メガバイトと段々と大きくなる。このようにダンプ用領域が大きくなるにつれて、カーネルダンプの実行速度が大きくなる。
【０１１６】
また、ダンプ対象のメモリ領域は、任意に設定することが可能である。例えば、前記した説明では、第2のカーネル12は、図7のRAM102において、最初に、領域R0から離れている第1の領域R1のデータをダンプした。
【０１１７】
しかし、第2のカーネル12は、最初に、領域R0に隣接する、第2の領域R2や第3の領域R3をダンプしてもよい。特に、第2のカーネル12は、最初に、領域R0のダンプ用領域に隣接する領域のデータをダンプしてもよい。このように、領域R0に隣接する領域のデータを最初にカーネルダンプすることで、第2のカーネル12は、連続したアドレスを有するダンプ用領域を確保することができる。
【０１１８】
連続したアドレスを有するダンプ用領域を確保できると、メモリアクセス時間を短縮することができる。第2のカーネル12は、メモリアクセス時間を短縮できるので、カーネルダンプの実行速度を速めることができる。
【０１１９】
また、本実施の形態の情報処理装置は、第2の設定ファイルKd2を動的に作成しても良い。例えば、障害処理部13は、ダンプ対象領域ファイルに含まれる領域に記憶されたデータのカーネルダンプが終了すると、カーネルダンプが終了した領域の開始アドレス、終了アドレスを第2の設定ファイルKd2に記憶する。図5の例では、障害処理部13は、" crashkernel="の後に、カーネルダンプが終了した領域の開始アドレス、終了アドレスを記憶する。
【０１２０】
また、本実施の形態の情報処理装置は、第2のカーネル12を再起動して、ダンプ済みの領域をダンプ用領域として設定した。しかし、第2のカーネル12の再起動を行わず、ダンプ済みの領域をダンプ用領域として動的に設定してもよい。
【０１２１】
第2のカーネル12は、この設定において、ダンプ済みの領域を示すメモリアドレスを領域R0に記憶する。そして、第2のカーネル12は、領域R0のメモリアドレスが示す領域をダンプ用領域として動的に設定する。第2のカーネル12は、ダンプ用領域と設定する際に、ダンプ済みの領域を読み書き可能(いわゆるリードライトが可能)として設定する。
【０１２２】
また、本実施の形態の情報処理装置は、第2のカーネル12の起動時に、第1の設定ファイルKd1を読み込んで、第2のカーネル12が利用できるRAM102の領域を指定した。しかし、障害処理部13が、第2のカーネル12を起動した際に、第2のカーネル12が利用できるRAM102の領域を示す引数を第2のカーネル12に入力してもよい。第2のカーネルは、入力された引数に基づき、第2のカーネル12が利用できるRAM102の領域を特定する。
【符号の説明】
【０１２３】
PN1〜PN7…第1の計算ノード〜第7の計算ノード、ION…IOノード、CN…制御ノード、101…CPU、102…RAM、103…ROM、104…通信装置、105…ストレージ装置、106…外部記憶媒体読み取り装置、11…第1のカーネル、12…第2のカーネル、12a…ダンプ部、13…障害処理部。
【図１】
2016170463.tif 000003
【図２】
2016170463.tif 000004
【図３】
2016170463.tif 000005
【図４】
2016170463.tif 000006
【図５】
2016170463.tif 000007
【図６】
2016170463.tif 000008
【図７】
2016170463.tif 000009
【図８】
2016170463.tif 000010