(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024128281
(43)【公開日】2024-09-24
(54)【発明の名称】デバッグ装置、デバッグシステム、デバッグ方法及びデバッグプログラム
(51)【国際特許分類】
G06F 11/36 20060101AFI20240913BHJP
G06F 11/16 20060101ALI20240913BHJP
【FI】
G06F11/36 132
G06F11/16 629
【審査請求】未請求
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2023037183
(22)【出願日】2023-03-10
(71)【出願人】
【識別番号】000004237
【氏名又は名称】日本電気株式会社
(74)【代理人】
【識別番号】100149548
【弁理士】
【氏名又は名称】松沼 泰史
(74)【代理人】
【識別番号】100181135
【弁理士】
【氏名又は名称】橋本 隆史
(72)【発明者】
【氏名】前田 成輝
【テーマコード(参考)】
5B034
5B042
【Fターム(参考)】
5B034AA02
5B034CC01
5B042HH25
5B042KK04
5B042LA04
(57)【要約】
【課題】フォールトトレラントサーバにおいて、片系でデバッグを実施し、デバッグを実施しない方で業務を継続することを可能にする。
【解決手段】デバッグ装置は、同期して動作するシステムの各々のメモリのデバッグ領域に、デバッグされるプログラムの中でブレークポイントが設定される命令を含む部分を読み出し、前記同期して動作するシステムのうちのデバッグに用いられるシステムにおいて前記命令をブレークポイント命令で書き換え、前記デバッグ領域のページアウトを抑制するように構成された設定部と、ブレークポイント例外が発生したとき、前記同期して動作するシステムの同期を解除するように構成された例外処理部と、を備える。
【選択図】
図1
【特許請求の範囲】
【請求項1】
デバッグ装置であって、
同期して動作するシステムの各々のメモリのデバッグ領域に、デバッグされるプログラムの中でブレークポイントが設定される命令を含む部分を読み出し、前記同期して動作するシステムのうちのデバッグに用いられるシステムにおいて前記命令をブレークポイント命令で書き換え、前記デバッグ領域のページアウトを抑制するように構成された設定部と、
ブレークポイント例外が発生したとき、前記同期して動作するシステムの同期を解除するように構成された例外処理部と、
を備えるデバッグ装置。
【請求項2】
前記例外処理部は、ブレークポイント例外が発生したとき、前記同期して動作するシステムの入出力モジュールの二重化を維持する、請求項1に記載のデバッグ装置。
【請求項3】
前記例外処理部は、ブレークポイント例外が発生したとき、前記同期して動作するシステムの入出力モジュールをシステムごとに切り離す、請求項1に記載のデバッグ装置。
【請求項4】
同期を解除した後、前記同期して動作するシステムのうちの前記デバッグに用いられるシステム以外のシステムをマスタにして前記デバッグに用いられるシステムを組み込むことによって同期させるように構成された復帰処理部をさらに備える、請求項1に記載のデバッグ装置。
【請求項5】
前記設定部はデバッグ端末によって制御される、請求項1に記載のデバッグ装置。
【請求項6】
フォールトトレラントサーバと、
請求項1から5のいずれか一項に記載のデバッグ装置と、
を備えるデバッグシステム。
【請求項7】
デバッグ方法であって、
同期して動作するシステムの各々のメモリのデバッグ領域に、デバッグされるプログラムの中でブレークポイントが設定される命令を含む部分を読み出し、前記同期して動作するシステムのうちのデバッグに用いられるシステムにおいて前記命令をブレークポイント命令で書き換え、前記デバッグ領域のページアウトを抑制するステップと、
ブレークポイント例外が発生したとき、前記同期して動作するシステムの同期を解除するステップと、
を有するデバッグ方法。
【請求項8】
同期して動作するシステムの各々のメモリのデバッグ領域に、デバッグされるプログラムの中でブレークポイントが設定される命令を含む部分を読み出し、前記同期して動作するシステムのうちのデバッグに用いられるシステムにおいて前記命令をブレークポイント命令で書き換え、前記デバッグ領域のページアウトを抑制するように構成された設定部、および
ブレークポイント例外が発生したとき、前記同期して動作するシステムの同期を解除するように構成された例外処理部、
としてコンピュータを機能させるためのデバッグプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、デバッグ装置、デバッグシステム、デバッグ方法及びデバッグプログラムに関する。
【背景技術】
【0002】
一般に、ユーザがデバッグを行う場合、サーバのレジスタ、スタック、メモリデータ等のデバッグ情報を得るために、業務AP、あるいはOS、ドライバ等にブレークポイントを設定し、設定したブレークポイントで業務APないしはシステム全体を止める必要がある。
【0003】
一方、システム全体が止まることを防止するように構成されたサーバ、すなわち、構成部品の一部が故障しても正常に処理を続行するサーバとしてフォールトトレラント(Fault-Tolerant(FT))サーバがある。フォールトトレラントサーバとはハードウェアの部品を二重化し、障害発生時にもシステムが停止することのない仕組みを備えた非常に可用性が高いサーバである。
【0004】
FTサーバは可用性のためにシステムが二重化されており、両方のシステムのメモリの内容を同一にした上で、各システムのプロセッサをクロック単位で同期させて冗長化させるロックステップ技術により、両方のシステムで全く同じ動作をしている。これにより、故障発生時には対象となるCPUサブシステムを論理的に切り離し、正常な方で動作を続行させることができる。
【0005】
しかし、通常の手段ではFTサーバの片方のシステムのみにブレークポイントを設定するといった操作ができないため、デバッグを行うためにブレークポイントを設定した場合、FTサーバの両方のシステムを止める必要がある。すなわち、二重化されているFTサーバにおいては、両系のプロセッサとメモリをクロック単位で同期させて冗長化させるロックステップ技術により、両系切り離し後であっても片系のみブレークポイントで停止するような運用はできない。そのため、汎用サーバと同様に、デバッグのためにブレークポイントを設定した際は業務APないしはシステム全体を止める必要があった。
【0006】
関連技術には、ファイルの再配置を行うときにスワップアウトを禁止するもの(特許文献1)、FTサーバの同期ずれなどの原因を調査するために両系のCPUの情報を外部にある1台のデバッガで確認するもの(特許文献2)、FTサーバの同期を解除して2つのシステムに分割し、一方で業務を継続し、もう一方でバックアップを採取することで、業務に影響を与えることなく、バックアップの採取を行うもの(特許文献3)、プログラムに設定されたブレークポイントを監視し、所定の条件が満たされる場合、プログラムの実行を停止するもの(特許文献4)、FTサーバの同期を意図的に一時的に解除することで、それぞれ独立して動作する2つのシステムに分割するもの(特許文献5)がある。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特開昭62-245445号公報
【特許文献2】特許5477725号公報
【特許文献3】特開2013-206052号公報
【特許文献4】特開2013-206061号公報
【特許文献5】特開2022-036778号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
FTサーバにおいて二重化されているシステムは両系とも同じ動作をしているため、本来デバッグを実施するのは片方のシステムのみで十分であり、デバッグを実施しない方のシステムで業務を継続できるはずである。しかし、上述の理由によりそうした運用ができないことが課題だった。
【課題を解決するための手段】
【0009】
本発明は、デバッグ装置、デバッグシステム、デバッグ方法及びデバッグプログラムを提供する。
【0010】
また、本発明の第一の態様は、デバッグ装置が、同期して動作するシステムの各々のメモリのデバッグ領域に、デバッグされるプログラムの中でブレークポイントが設定される命令を含む部分を読み出し、前記同期して動作するシステムのうちのデバッグに用いられるシステムにおいて前記命令をブレークポイント命令で書き換え、前記デバッグ領域のページアウトを抑制するように構成された設定部と、
ブレークポイント例外が発生したとき、前記同期して動作するシステムの同期を解除するように構成された例外処理部と、
を備えることを特徴とする。
【0011】
また、本発明の第二の態様は、デバッグシステムが、フォールトトレラントサーバと、
上記のデバッグ装置と、
を備えることを特徴とする。
【0012】
また、本発明の第三の態様は、デバッグ方法が、同期して動作するシステムの各々のメモリのデバッグ領域に、デバッグされるプログラムの中でブレークポイントが設定される命令を含む部分を読み出し、前記同期して動作するシステムのうちのデバッグに用いられるシステムにおいて前記命令をブレークポイント命令で書き換え、前記デバッグ領域のページアウトを抑制するステップと、
ブレークポイント例外が発生したとき、前記同期して動作するシステムの同期を解除するステップと、
を有することを特徴とする。
【0013】
本発明の第四の態様は、デバッグプログラムが、同期して動作するシステムの各々のメモリのデバッグ領域に、デバッグされるプログラムの中でブレークポイントが設定される命令を含む部分を読み出し、前記同期して動作するシステムのうちのデバッグに用いられるシステムにおいて前記命令をブレークポイント命令で書き換え、前記デバッグ領域のページアウトを抑制するように構成された設定部、および
ブレークポイント例外が発生したとき、前記同期して動作するシステムの同期を解除するように構成された例外処理部、
としてコンピュータを機能させることを特徴とする。
【発明の効果】
【0014】
本発明によれば、ユーザは、FTサーバの片系で業務APの動作を継続しつつ、もう片系においてブレークポイントで止めた状態で必要なデバッグ情報を得ることができる。
【図面の簡単な説明】
【0015】
【
図1】本発明の実施形態による、デバッグ装置の構成を示す図である。
【
図2】本発明の実施形態による、FTサーバの同期状態及び同期解除状態を示す図である。
【
図3】本発明の実施形態による、ブレークポイント設定のフローチャートである。
【
図4】
図3の各ステップにおけるシステム0及びシステム1のメモリの状態(1)を示す図である。
【
図5】
図3の各ステップにおけるシステム0及びシステム1のメモリの状態(2)を示す図である。
【
図6】
図3の各ステップにおけるシステム0及びシステム1のメモリの状態(3)を示す図である。
【
図7】
図3の各ステップにおけるシステム0及びシステム1のメモリの状態(4)を示す図である。
【
図8】
図3の各ステップにおけるシステム0及びシステム1のメモリの状態(5)を示す図である。
【
図9】本発明の実施形態による、FTサーバにおけるデバッグの実施から復帰までのフローチャートである。
【
図10】本発明の他の実施形態による、FTサーバの同期状態及び同期解除状態を示す図である。
【発明を実施するための形態】
【0016】
まず、本発明の実施形態における基本的な構成および動作を説明する。ユーザはブレークポイントの設定を行う。ブレークポイントの設定は、メモリ上の該当メモリにある命令について、ブレークポイント例外を発生させる命令に書き換える方式を使用する。FTサーバがこの命令を実行してブレークポイント例外が発生したときがデバッグの契機となる。この契機でFTサーバの同期を解除し、それぞれ独立して動作する2つのシステム(システム0、システム1)に分割することが可能である。同期を解除している間、システム0、システム1をそれぞれ異なる目的で稼働できる。
【0017】
上記のデバッグ方式は、一実施形態では、デバッグ装置を用いて実現することができる。なお、デバッグ装置は、ハードウェアとソフトウェアを用いて機能を実現してもよく、例えば、サーバのディスクからプログラムを読み出し、サーバのプロセッサがそのプログラムを実行することによって機能が実現されてもよい。あるいは、デバッグ装置の機能は、サーバ内の回路または装置として実現されてもよい。デバッグ装置は、端末からコマンドを使用して制御されてもよい。
【0018】
図1は、本発明の実施形態による、デバッグ装置の構成を示す図である。デバッグ装置100は、設定部110と例外処理部120を備える。設定部110は、フォールトトレラントサーバにおいて同期して動作するシステムの各々のメモリのデバッグ領域に、デバッグされるプログラムの中でブレークポイントが設定される命令を含む部分を読み出し、同期して動作するシステムのうちのデバッグに用いられるシステムにおいてその命令をブレークポイント命令で書き換え、デバッグ領域のページアウトを抑制するように構成される。例外処理部120は、ブレークポイント例外が発生したとき、フォールトトレラントサーバにおいて同期して動作するシステムの同期を解除するように構成される。
【0019】
このようにして、同期を解除してそれぞれ独立して動作する2つのシステムに分割できるFTサーバの特長を利用して、FTサーバの片系で業務APを動作させつつ、FTサーバのもう片系ではブレークポイント設定した命令で業務APを止め、ユーザがレジスタ、スタック、メモリデータ等のデバッグ情報を得ることが可能になる。
【0020】
以下、本発明の実施形態における、より詳細なFTサーバの構成および動作の具体例を説明する。
【0021】
図2は、本発明の実施形態による、FTサーバ10の同期状態及び同期解除状態を示す図である。
図2の左側は同期状態を示し、右側は同期解除後の同期解除状態を示す。
【0022】
FTサーバ10は、2つの中央処理装置(CPU)モジュール、2つのメモリ(図示しない)、2つのFTコントローラ、2つの入出力(IO)モジュールを有する。IOモジュールは、ネットワークインターフェースカード(NIC)及びディスク(記憶装置)を有する。FTサーバ10はNICを介してネットワークに接続する。CPUモジュール及びIOモジュールはデバッグポートを有する。デバッグポート0、デバッグポート1、デバッグポート0’、デバッグポート1’が、それぞれCPUモジュール0、CPUモジュール1、IOモジュール0、IOモジュール1に設けられ、切り替えスイッチ11を介してデバッグ端末12から接続することができる。
【0023】
図2の左側に示す同期状態において、1つのOSが動作し、このOSの制御の下でCPUモジュール0とCPUモジュール1、FTコントローラ0とFTコントローラ1はそれぞれ同期しており、IOモジュール0(NIC0、ディスク0)とIOモジュール1(NIC1、ディスク1)は二重化されている。
【0024】
図2の右側に示す同期解除状態において、OSはOS#1とOS#2に分かれて動作し、同期状態ではFTサーバ10は1つのシステムとして動作していたが、システム0(CPUモジュール0、システム0用のメモリ、FTコントローラ0、IOモジュール0)とシステム1(CPUモジュール1、システム1用のメモリ、FTコントローラ1、IOモジュール1)の2つの系に分割される。IOモジュール0(NIC0、ディスク0)とIOモジュール1(NIC1、ディスク1)の二重化はそのままである。すなわち、システム1とシステム2から二重化された状態で使用される。
【0025】
同期解除後、デバッグを行う場合には、切り替えスイッチ11により、デバッグを行う側の系(ここではシステム1とする)のデバッグポート(デバッグポート1)にデバッグ端末12を接続する。デバッグコマンドによってレジスタ情報、スタック情報、メモリデータ等必要なデバッグ情報を得る。FTサーバ10は、同期を解除してそれぞれ独立して動作する2つのシステムに分割されているので、片系のみの運用となったことをOSや動作中のプロセスは認識しない。つまり、ユーザはOSや動作中のプロセスから見えないところで解析用、調査用のデータを抜き出すことができる。ユーザによるデバッグ終了後、業務処理を行うために継続して動作していたシステム0をマスタにして、デバッグに使用していたシステム1を組み込み、同期状態に復帰することができる。
【0026】
次に、
図3を参照して、上記で説明した同期状態から同期解除状態への移行、及び同期状態への復帰の流れを詳細に説明する。
図3は、本発明の実施形態による、ブレークポイント設定のフローチャートである。
【0027】
図3の概略は次の通りである。ユーザはデバックの契機となるブレークポイントの設定を行う。ブレークポイントの設定は、メモリ上の該当メモリにある命令について、ブレークポイント例外を発生させる命令に書き換える方式を使用する。
図3に示すように、FTサーバ10において本発明の実施形態によるデバッグ方式を実現する場合、メモリ上の命令を書き換えるときに、片系のメモリのみ書き換える。また、ページアウトによってメモリの内容がディスクに書き出される際に両系のメモリが一致しているかどうかがチェックされるため、内容が不一致のページについてはページアウトを抑制する必要がある。
【0028】
図3に示す具体的な手順は次の通りである。ステップS11において、ブレークポイントを設定する命令があるページをページインする。例えば、デバッグされる業務APの中でブレークポイントを設定したい命令を含む所定の単位のプログラム部分をディスクからメモリに読み出す。ブレークポイントを設定する命令は、例えば、ユーザがデバッグ端末12を用いて指示する。それ以外のステップS11からS15の処理は、例えば、
図1のデバッグ装置100の設定部110が実行してもよい。ページインする際、各システムのメモリのあるページ(ここではページ番号0のページ)にはデバッグ領域がロードされる(
図4)。すなわち、
図4において、システム0およびシステム1の各々のメモリのページ番号0のページに、ブレークポイントを設定する命令があるページが、デバッグ領域としてロードされる。続いて、ステップS12において、ブレークポイントを設定する命令があるページをメモリ上でロックする。例えば、Linux(登録商標)OSのAPI mlock等の一般的なOS機能(API)を使用して対象のメモリ領域をロックする(
図5)。すなわち、システム0およびシステム1の各々のメモリのページ番号0のページがロックされる。その後、ステップS13において、両系ともシステムの動作を止めて、二重化状態を解除する。すなわち、両系のメモリの同期をFTサーバで解除する(
図6)。同期が解除されている状態で、ステップS14において、システム1系のみブレークポイントを設定するアドレスにある命令を書き換える。すなわち、デバッグを行うシステム1のメモリのみ命令を書き換える(
図7)。書き換え後、ステップS15において、二重化に復帰して、システムの動作を再開する。すなわち、同期状態に復帰する(
図8)。この状態では、両系のメモリの内容は不一致であるが、メモリがロックされており、ページアウトが抑制されているため、OSによってメモリの不一致が検出されることはない。
【0029】
次に、FTサーバ10におけるデバッグの実施から復帰までを説明する。
図3に示す手順が行われた後、FTサーバ10において、例えば、デバッグされる業務APを動作させる。
図9のステップS21において、システム1系のみブレークポイント例外が発生し、例外ハンドラ(
図1の例外処理部120)が実行開始する。ブレークポイント例外の発生後、ステップS22において、システム0系と1系の同期を解除する。すなわち、例外ハンドラでシステム1系を切り離し、システム0系のみ動作を継続する。ステップS23において、デバッグポートとデバッグ端末12を接続するスイッチをシステム1系に接続し、デバッグ端末12に制御を移す。ステップS24において、デバッグ端末12からデバッグコマンドを受け付け、レジスタ、スタック、メモリ情報等のデバッグ情報を取得する。これにより、ユーザはデバッグコマンドによってレジスタ情報、スタック情報、メモリデータ等必要なデバッグ情報を得る。システム0系は業務APの動作を継続する。デバッグ終了後、ステップS25において、デバッグに使用していたシステム1系のみリセットないしは電源Offし、これによりシステム1のメモリ情報等をクリアする。その後、ステップS26において、業務を継続して動作しているシステム0系をマスタにして、デバッグに使用していたシステム1系を組み込む。ステップS25、S26は、ユーザが個々にコマンドを入力することによって行ってもよく、または
図1のデバッグ装置100が復帰処理部(図示しない)をさらに備え、ユーザがコマンドを使用して復帰処理部にステップS25、S26を実行させてもよい。ステップS27において、システム0系と1系が同期して業務を継続する。これによって、FTサーバ10は二重化に復帰する。
【0030】
以上の通り、ユーザがFTサーバでデバッグを行う際、FTサーバは、デバッグ端末からのコマンドに従って、デバッグを行う方のシステムでのみメモリ上の命令でブレークポイントを発生させる命令に書き換え、また、ページアウトによって両システムのメモリの不一致を検出されないようにページアウトを抑制する。デバッグのためにブレークポイント例外が発生し、例外ハンドラが実行開始した際、FTサーバは両システム間の同期を解除してロックステップの機能を自動でキャンセルする。これにより、ユーザはブレークポイントを設定したシステムのみを独立して障害情報採取に利用でき、もう片方のシステムではデバッグの影響を受けずに業務を継続できる。
【0031】
上記のように、ユーザは、FTサーバの片系で業務APの動作を継続しつつ、もう片系においてブレークポイントで止めた状態でレジスタ情報、スタック情報、メモリデータ等、必要なデバッグ情報を得ることができる。その際、プロセッサとメモリは、同期を解除してそれぞれ独立して動作する2つのシステムに分割できるというFTサーバの特長を利用しているため、片系のみの運用となったことはOSや動いているプロセスからは認識できない。つまり、OSや動いているプロセスから見えないところで解析用、調査用のデータを抜き出すことができる。
【0032】
次に、
図10を参照して、本発明による他の実施例を説明する。
図10の左側に示す左側に示す同期状態は、
図2の左側に示す左側に示す同期状態と同じである。
図2の右側に示す同期解除状態において、OSはOS#1とOS#2に分かれて動作し、IOモジュール0(NIC0、ディスク0)とIOモジュール1(NIC1、ディスク1)の二重化はそのままであるが、
図10の右側に示す同期解除状態は、IOモジュールも含めてシステムごとに全て切り離されている。
【0033】
FTサーバの同期をユーザが意図的に解除することで、それぞれ独立して動作する2つのシステム(システム0、システム1)に分割することが可能であり、同期を解除している間、システム0、システム1で別々のことを実施できる。また、片系切り離し(同期解除)の際、IOモジュールも含めて全て切り離すことで、ユーザはシステムとしてのデータを丸ごと取得することができる。
【0034】
同期解除後、ユーザはデバッグで使用する系のデバッグポートであるデバッグポート1’にデバッグ端末を接続し、デバッグコマンドによってレジスタ情報、スタック情報、メモリデータ等必要なデバッグ情報を得る。
【0035】
OSは2つのIOモジュールへのパスを有しており、片方が障害を起こしたらそのバスを切り離し、もう片方のバスで業務を継続する。よって、運用システム側からIOモジュールの縮退が見えるが、切り離す前の両IOモジュールは二重化状態であり、全く同じ動作をしているため、片系切り離し後も、もう片系で業務継続しつつ、切り離した片系のIOモジュールを丸ごとデバッグするという運用が可能となっている。
【0036】
デバッグ終了後、FTサーバは業務継続動作していたシステム0をマスタにしてデバッグに使用していたシステム1を組み込み、同期状態に復帰する。
【0037】
上記のように、片系切り離し(同期解除)の際、入出力(IO)モジュールも含めて全て切り離すことで、ユーザはシステムとしてのデータを丸ごと取得することができる。OSは2つのIOモジュールへのパスを有しており、片方が障害を起こしたらそのバスを切り離し、もう片方のバスで業務を継続する。よって、上記と異なり、運用システム側からIOモジュールの縮退が認識される。なお、切り離す前の両IOモジュールは二重化状態であり、全く同じ動作をしているため、片系切り離し後も、もう片系で業務継続しつつ、切り離した片系のIOモジュールを丸ごとデバッグするという運用が可能である。
【0038】
上述のコンピュータシステムによる処理の過程は、プログラムの形式でコンピュータ読み取り可能な記録媒体に記憶されており、このプログラムをコンピュータが読み出して実行することによって、上記処理が行われる。ここでコンピュータ読み取り可能な記録媒体とは、磁気ディスク、光磁気ディスク、CD-ROM、DVD-ROM、半導体メモリ等をいう。また、このコンピュータプログラムを通信回線によってコンピュータに配信し、この配信を受けたコンピュータが当該プログラムを実行するようにしても良い。
【0039】
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク(通信網)や電話回線等の通信回線(通信線)のように情報を伝送する機能を有する媒体のことをいう。また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル(差分プログラム)であっても良い。
【産業上の利用可能性】
【0040】
本発明は、本発明は、同期して動作するシステムのデバッグに利用することができる。
【符号の説明】
【0041】
10、20 FTサーバ
11 スイッチ
12 デバッグ端末
100 デバッグ装置
110 設定部
120 例外処理部