(57)【特許請求の範囲】
【請求項１】
複数のプロセスが共有メモリを用いて動作する分散並列プログラムの障害解析ファイルの軽量化を行うファイル軽量化装置であって、
前記複数のプロセスで共有している共有メモリのイメージデータを特定するための情報を、プロセス毎の障害解析ファイルである第１の障害解析ファイルにリスト情報として書き出すリスト化手段と、
前記共有メモリのイメージデータ毎の障害解析ファイルである第２の障害解析ファイルを作成し、当該作成した第２の障害解析ファイルに前記共有メモリのイメージデータを書き出す共有情報ファイル化手段と、
を備え、
前記第１の障害解析ファイルには前記共有メモリのイメージデータは書き出されず、且つ、前記各第２の障害解析ファイル間で同一のイメージデータを重複して書き出さないことを特徴とするファイル軽量化装置。
【請求項２】
請求項１に記載のファイル軽量化装置において、
前記第１の障害解析ファイルに含まれている前記リスト情報から前記共有メモリのイメージデータの展開先とする仮想アドレスと、当該共有メモリのイメージデータを前記第２の障害解析ファイル内から特定するための情報を取得し、
前記取得した特定するための情報を用いて前記共有メモリのイメージデータを前記展開先とする仮想アドレスに読み込むことを特徴とするファイル軽量化装置。
【請求項３】
請求項１又は２に記載のファイル軽量化装置であって、
前記リスト化手段において、前記第１の障害解析ファイルに書き出す情報は、共有メモリの仮想アドレス、ファイル名及びサイズであることを特徴とするファイル軽量化装置。
【請求項４】
請求項１乃至３の何れか１項に記載のファイル軽量化装置において、
前記複数のプロセスで共有していないメモリのイメージデータを削除する際に、前記第１及び第２の障害解析ファイルは削除されないことを特徴とするファイル軽量化装置。
【請求項５】
複数のプロセスが共有メモリを用いて動作する分散並列プログラムの障害解析ファイルの軽量化を行うファイル軽量化方法であって、
前記複数のプロセスで共有している共有メモリのイメージデータを特定するための情報を、プロセス毎の障害解析ファイルである第１の障害解析ファイルにリスト情報として書き出すリスト化ステップと、
前記共有メモリのイメージデータ毎の障害解析ファイルである第２の障害解析ファイルを作成し、当該作成した第２の障害解析ファイルに前記共有メモリのイメージデータを書き出す共有情報ファイル化ステップと、
を備え、
前記第１の障害解析ファイルには前記共有メモリのイメージデータは書き出されず、且つ、前記各第２の障害解析ファイル間で同一のイメージデータを重複して書き出さないことを特徴とするファイル軽量化方法。
【請求項６】
請求項５に記載のファイル軽量化方法において、
前記第１の障害解析ファイルに含まれている前記リスト情報から前記共有メモリのイメージデータの展開先とする仮想アドレスと、当該共有メモリのイメージデータを前記第２の障害解析ファイル内から特定するための情報を取得し、
前記取得した特定するための情報を用いて前記共有メモリのイメージデータを前記展開先とする仮想アドレスに読み込むことを特徴とするファイル軽量化方法。
【請求項７】
請求項５又は６に記載のファイル軽量化方法であって、
前記リスト化ステップにおいて、前記第１の障害解析ファイルに書き出す情報は、共有メモリの仮想アドレス、ファイル名及びサイズであることを特徴とするファイル軽量化方法。
【請求項８】
請求項５乃至７の何れか１項に記載のファイル軽量化方法において、
前記複数のプロセスで共有していないメモリのイメージデータを削除する際に、前記第１及び第２の障害解析ファイルは削除されないことを特徴とするファイル軽量化方法。
【請求項９】
コンピュータに請求項５から８の何れか１項に記載のファイル軽量化方法を実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数プロセスが共有メモリを使って動作するような並列プログラムの障害解析ファイルの入出力ファイル軽量化装置に関し、より詳細には、障害解析ファイルの入出力を軽量化する用途のファイル軽量化装置に関する。
【背景技術】
【０００２】
一般に、プロセスの実行中に障害が発生した場合は、実行中のメモリイメージ（コンテキスト、スタック、データ）をファイルに出力し、そのファイルを解析することによって障害の原因を調査するという方法がとられている。（このファイルを以下、障害解析ファイルと呼ぶ。）
なお、障害解析ファイルは、プロセス１つを単位とし、１つのプロセスに対し１つの障害解析ファイルが作成される。
【０００３】
ここで、分散並列プログラムの場合、プログラムを複数のプロセスに分けて実行するが、障害は１つのプロセスだけに原因があって発生するとは限らない。
【０００４】
よって、すべてのプロセスについて障害解析ファイルを出力し、それらを解析する必要がある。
【０００５】
しかし、分散並列プログラムの実装方式によっては、プロセス間のデータ転送を円滑に行うためにメモリの一部を共有し合っている場合がある。
【０００６】
このような実装方式において、分散並列プログラムに障害が発生して障害解析ファイルに実行中のメモリイメージを出力する場合は、例えそれが共有しているメモリ部分の内容であったとしても、すべてのプロセスの障害解析ファイルに重複して出力されることになる。
【０００７】
そのため、障害解析ファイルのサイズの総量が大きくなり入出力にも時間がかかるという問題がある。
【０００８】
たとえば、４プロセスで分散並列実行されているプログラムで障害が発生した場合を考える。
【０００９】
図５に示すようにそれぞれのプロセスの実行中のメモリイメージがｃｏｒｅ．ｐｒｏｃ．１１０、ｃｏｒｅ．ｐｒｏｃ．１２０、ｃｏｒｅ．ｐｒｏｃ．１３０及びｃｏｒｅ．ｐｒｏｃ．１４０の４つの障害解析ファイルに出力される。
【００１０】
このとき、共有しているメモリ部分のイメージであるｇｍｅｍ２０１、ｇｍｅｍ２０２、ｇｍｅｍ２０３及びｇｍｅｍ２０４は、すべてのプロセスの障害解析ファイルに対して出力される。
【００１１】
結果として、図で示されるようにすべての障害解析ファイルに重複して、共有しているメモリ部分のイメージが出力されるという問題がある。
【００１２】
ここで、従来のｇｍｅｍ出力時の動作手順について図６を用いて説明する。
【００１３】
まず、ｃｏｒｅ．ｐｒｏｃのｇｍｌｉｓｔに仮想アドレスとｇｍｅｍのオフセットサイズを書き出す（Ｓ３１）。次に、ｃｏｒｅ．ｐｒｏｃ．ｘｘｘにｇｍｅｍの内容を書き出す（Ｓ３２）。
【００１４】
そして、上記（Ｓ３１）及び（Ｓ３２）を全ての共有メモリに対して処理が行われるまで繰り返す（Ｓ３３）という、手順になっている。
【００１５】
このような出力部の動作手順を有する従来の障害解析ファイル出力システムは、前記図５に示すように各ｃｏｒｅ．ｐｒｏｃファイルに重複して共有メモリの内容を出力することになる（例えば特許文献１参照）。
【００１６】
併せて、従来のｇｍｅｍ入力時の動作手順につき図７を用いて説明する。
【００１７】
まず、ｃｏｒｅ．ｐｒｏｃのｇｍｌｉｓｔに仮想アドレスとｇｍｅｍのオフセットサイズを読み込む（Ｓ４１）。
【００１８】
次に、ｃｏｒｅ．ｐｒｏｃ．ｘｘｘにｇｍｅｍのオフセットから、サイズ分のデータを仮想アドレスに読み込む（Ｓ４２）。
【００１９】
そして、上記（Ｓ４１）及び（Ｓ４２）を全ての共有メモリに対して処理が行われるまで繰り返す（Ｓ４３）という、手順になっている。
【特許文献１】特開平１１−３１２１０３号公報
【発明の開示】
【発明が解決しようとする課題】
【００２０】
上記の従来技術ではｃｏｒｅ．ｐｒｏｃファイルに重複して共有メモリの内容を入出力している。
【００２１】
よって、入力の際も、出力の際も記憶メディアの記憶容量が有効活用できないという問題が生じていた。加えて、Ｉ／Ｏ（Input/Output）時間が長くなるという問題も生じていた。
【００２２】
ここで、前記のような重複する出力を避けるための手段として、障害解析ファイルのうち重複している部分については、あるプロセスが代表して出力するという方法が考えられる。もっとも、次のような複数の理由により実現することは困難であった。
【００２３】
まず、共有メモリ部分の論理アドレスがすべてのプロセスで同一とは限らないという問題がある。
【００２４】
また、どのプロセスが代表して出力するかを決めたとしても、更に、すべてのプロセスに代表プロセスを通知する手段が必要であるという問題があった。
【００２５】
加えて、１つのプロセスが代表して障害解析ファイルのうち重複している部分を書き出す場合は、その代表プロセスは、結局従来と変わらない処理を行うことになる。
【００２６】
よって、出力時間の短縮が期待できないこととなる。
【００２７】
また、仮に上記の問題を解決することが可能となり、重複出力を避けることができたとしても、前記代表プロセスが出力した障害解析ファイルのうち重複している部分の情報を読み込むときに復元する手段が必要である。
【００２８】
そこで、本発明は上記の問題を解決し、各プロセスの障害解析ファイルに同じ共有メモリの内容を重複して出力することのない、分散並列プログラムの障害解析ファイル軽量化装置、その方法及びそのプログラムを提供することを目的とする。
【課題を解決するための手段】
【００２９】
本発明の第１の観点によれば、複数のプロセスが共有メモリを用いて動作する分散並列プログラムの障害解析ファイルの軽量化を行うファイル軽量化装置であって、
前記複数のプロセスで共有している共有メモリのイメージデータを特定するための情報を、プロセス毎の障害解析ファイルである第１の障害解析ファイルにリスト情報として書き出すリスト化手段と、
前記共有メモリのイメージデータ毎の障害解析ファイルである第２の障害解析ファイルを作成し、当該作成した第２の障害解析ファイルに前記共有メモリのイメージデータを書き出す共有情報ファイル化手段と、
を備え、
前記第１の障害解析ファイルには前記共有メモリのイメージデータは書き出されず、且つ、前記各第２の障害解析ファイル間で同一のイメージデータを重複して書き出さないことを特徴とするファイル軽量化装置が提供される。
本発明の第２の観点によれば、複数のプロセスが共有メモリを用いて動作する分散並列プログラムの障害解析ファイルの軽量化を行うファイル軽量化方法であって、
前記複数のプロセスで共有している共有メモリのイメージデータを特定するための情報を、プロセス毎の障害解析ファイルである第１の障害解析ファイルにリスト情報として書き出すリスト化ステップと、
前記共有メモリのイメージデータ毎の障害解析ファイルである第２の障害解析ファイルを作成し、当該作成した第２の障害解析ファイルに前記共有メモリのイメージデータを書き出す共有情報ファイル化ステップと、
を備え、
前記第１の障害解析ファイルには前記共有メモリのイメージデータは書き出されず、且つ、前記各第２の障害解析ファイル間で同一のイメージデータを重複して書き出さないことを特徴とするファイル軽量化方法が提供される。
本発明の第３の観点によれば、コンピュータに上記本発明の第２の観点により提供されるファイル軽量化方法を実行させることを特徴とするプログラムが提供される。
【発明の効果】
【００３１】
本発明によれば、各プロセスの障害解析ファイルに同じ共有メモリの内容を重複して出力しないことが可能となる。そのため、障害解析ファイル全体のサイズを小さくすることができ、これにより記憶メディアの記憶容量を有効活用することができる。
【発明を実施するための最良の形態】
【００３２】
次に、本発明の最良の形態について図面を用いて説明する。
【００３３】
［実施形態］
（実施形態の構成）
本発明の実施形態における障害解析ファイル群の構成を図１に示す。また該障害解析ファイル群を含む全体の構成を図２に示す。
【００３４】
図１の障害解析ファイル群は、プロセスごとの障害解析ファイルであるｃｏｒｅ．ｐｒｏｃと、共有メモリ部分の障害解析ファイルであるｃｏｒｅ．ｇｍｅｍから構成されている。
【００３５】
本発明の実施形態は、図２で示すように、障害解析ファイル出力部である、コンテキスト出力部１０１、スタック出力部１０２、ｇｍｌｉｓｔ出力部１０３、ｃｏｒｅ．ｇｍｅｍ確認部１０４、ｇｍｅｍ作成・出力部１０５、及びデータ出力部１０６、更に障害解析ファイル入力部である、コンテキスト入力部２０１、スタック入力部２０２、ｃｏｒｅ．ｇｍｅｍ．ｌｉｓｔ入力部２０３、ｃｏｒｅ．ｇｍｅｍ入力部２０４及びデータ入力部２０５、加えて障害解析ファイル群３０１を備えている。
【００３６】
（実施形態の動作）
次に、本発明の実施形態の動作について詳細に説明する。
【００３７】
動作の説明には、図１、図２に加え図３に示すフローチャートを用いる。まず、コンテキスト出力部１０１とスタック出力部１０２は、障害解析ファイル群３０１中のｃｏｒｅ．ｐｒｏｃファイルにそれぞれコンテキストセグメントとスタックセグメントを出力する。
【００３８】
次に、ｇｍｌｉｓｔ出力部１０３が共有メモリの仮想アドレス、ｃｏｒｅ．ｇｍｅｍファイル名、ｃｏｒｅ．ｇｍｅｍサイズを障害解析ファイル群３０１内のｃｏｒｅ．ｐｒｏｃファイルのｇｍｌｉｓｔセグメントに出力する（Ｓ１０）。
【００３９】
さらに、図２のｃｏｒｅ．ｇｍｅｍ確認部１０４がｃｏｒｅ．ｇｍｅｍ．ｘｘｘというファイルがすでに存在するかどうかを調べる（Ｓ１１）。
【００４０】
ここで、すでにｃｏｒｅ．ｇｍｅｍ．ｘｘｘというファイルが存在する場合は、同じ内容のファイルが重複するのを避けるため、ファイルの作成は、行わない。そして、次の共有メモリ部分の処理に移る。
【００４１】
一方、いまだ存在しない場合は、ｃｏｒｅ．ｇｍｅｍ作成・出力部１０５でｃｏｒｅ．ｇｍｅｍ．ｘｘｘというファイルを作成する（Ｓ１２）。
【００４２】
そして更に、ｇｍｅｍ作成・出力部１０５は共有メモリの内容をｃｏｒｅ．ｇｍｅｍ．ｘｘｘに書き出す（Ｓ１３）。
【００４３】
上記した共有メモリを書き出す作業である、（Ｓ１０）、（Ｓ１１）、（Ｓ１２）及び（Ｓ１３）をすべての共有メモリに対して順次行う。そして全ての共有メモリに対して、処理を完了した段階で共有メモリを書き出す作業は終了となる（Ｓ１４）。
【００４４】
なお、ｃｏｒｅ．ｇｍｅｍ．ｘｘｘというファイル名は他のｃｏｒｅ．ｇｍｅｍファイル名と重ならないようにする必要がある。
【００４５】
そのためにはｘｘｘの部分はたとえば共有メモリのメモリリージョン番号を付けるなどしてユニークになるようにする。
【００４６】
最後に、図２のデータ出力部１０６で障害解析ファイル群３０１内のｃｏｒｅ．ｐｒｏｃファイルにデータセグメントを出力する（Ｓ１５）。
【００４７】
一方、デバッグ時に障害解析ファイルを読み込む時の動作について、図４を用いて説明する。
【００４８】
まず、コンテキスト入力部２０１とスタック入力部２０２は、障害解析ファイル群３０１内のコンテキストセグメントとスタックセグメントをメモリに読み込む。
【００４９】
次に、ｃｏｒｅ．ｇｍｌｉｓｔ入力部２０３が障害解析ファイル群３０１内の、ｃｏｒｅ．ｐｒｏｃファイルのｇｍｌｉｓｔセグメントから共有メモリの展開されるべき仮想アドレス、実体が書き込まれているｃｏｒｅ．ｇｍｅｍファイル名、およびサイズを読み込む（Ｓ２１）。
【００５０】
続いて、該読み込んだ情報をもとに、ｃｏｒｅ．ｇｍｅｍ入力部２０４では該当するｃｏｒｅ．ｇｍｅｍファイル名を仮想アドレスに読み込む（Ｓ２２）。
【００５１】
そして、この共有メモリを読み込む作業、（Ｓ２１）及び（Ｓ２２）をすべての共有メモリに対して順次行う（Ｓ２３）。
【００５２】
最後に、データ入力部２０５が、障害解析ファイル群３０１内の、ｃｏｒｅ．ｐｒｏｃファイルのデータセグメントをメモリに読み込む（Ｓ２４）。
【００５３】
（実施形態の効果）
第１の効果は、障害解析ファイル全体のサイズを小さくすることができることである。
【００５４】
その理由は、各プロセスの障害解析ファイルに同じ共有メモリの内容を重複して出力していたのをやめて、図１のようにそれらを独立して個別のｃｏｒｅ．ｇｍｅｍファイルに出力し、各プロセスの障害解析ファイルではｃｏｒｅ．ｇｍｅｍファイルを参照するようにｇｍｌｉｓｔに書き込むことによって重複を避けているからである。
【００５５】
第２の効果は、障害解析ファイルの入出力にかかる時間を短縮できることである。その理由は上述したように障害解析ファイル全体のサイズが小さくなるためである。
【００５６】
上記２つの効果により、本発明の目的である、入力の際も、出力の際も記憶メディアの記憶容量が有効活用できないという問題及びＩ／Ｏ（Input/Output）時間が長くなるという問題を解決することが可能となる。
【００５７】
更に、本発明では、ｃｏｒｅ．ｐｒｏｃファイルと共有化されているｃｏｒｅ．ｇｍｅｍファイルが、ファイル内で別個のものとして区別されている。よって、ｃｏｒｅ．ｐｒｏｃファイルを削除する際に、共有化されているファイルが一緒に削除されてしまうという心配がない。
【００５８】
そのため共有化ファイルの事を考慮せずにｃｏｒｅ．ｐｒｏｃファイルを削除できるという効果もある。
【００５９】
加えて本発明では、共有化されているｃｏｒｅ．ｇｍｅｍファイル自体を分割するという処理を行っていない。よって、該ｃｏｒｅ．ｇｍｅｍファイルを復号するといった処理も必要ないというメリットもある。
【００６０】
これにより、障害解析ファイルをメモリ上に展開する際の処理が迅速となると言う効果もある。
【産業上の利用可能性】
【００６１】
本発明は、複数のプロセスが共有メモリを使って動作するような並列プログラムの障害解析ファイルを軽量化する用途に適用できる。
【図面の簡単な説明】
【００６２】
【図１】本発明の障害解析ファイル群の構成を表す概念図である。
【図２】本発明の基本的構成を表す図である。
【図３】本発明の出力部における動作手順を表すフローチャートである。
【図４】本発明の入力部における動作手順を表すフローチャートである。
【図５】従来技術の障害解析ファイル群の構成を表す概念図である。
【図６】従来技術の出力部における動作手順を表すフローチャートである。
【図７】従来技術の入力部における動作手順を表すフローチャートである。
【符号の説明】
【００６３】
１０１  コンテキスト出力部
１０２  スタック出力部
１０３  ｇｍｌｉｓｔ出力部
１０４  ｃｏｒｅ．ｇｍｅｍ確認部
１０５  ｇｍｅｍ作成・出力部
１０６  データ出力部
２０１  コンテキスト入力部
２０２  スタック入力部
２０３  ｃｏｒｅ．ｇｍｅｍ．ｌｉｓｔ入力部
２０４  ｃｏｒｅ．ｇｍｅｍ入力部
２０５  データ入力部
３０１  障害解析ファイル群
【図１】
0004858779.tif 000002
【図２】
0004858779.tif 000003
【図３】
0004858779.tif 000004
【図４】
0004858779.tif 000005
【図５】
0004858779.tif 000006
【図６】
0004858779.tif 000007
【図７】
0004858779.tif 000008