(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-10-01
(45)【発行日】2024-10-09
(54)【発明の名称】メモリ割当装置、メモリ割当プログラム、及びメモリ割当方法
(51)【国際特許分類】
G06F 11/07 20060101AFI20241002BHJP
G06F 9/50 20060101ALI20241002BHJP
【FI】
G06F11/07 178
G06F9/50 120A
(21)【出願番号】P 2021025875
(22)【出願日】2021-02-22
【審査請求日】2023-11-09
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100087480
【氏名又は名称】片山 修平
(72)【発明者】
【氏名】吉田 知史
【審査官】児玉 崇晶
(56)【参考文献】
【文献】特開平11-031092(JP,A)
【文献】特開2010-176345(JP,A)
【文献】特開平02-031250(JP,A)
【文献】鶴長 鎮一,システム異常事態発生! Linuxサーバ危機管理対策 ZABBIX×ログ監視×障害解析コマンド活用指南 3章 現状把握,Software Design ,2010年03月18日,2010年3月号,pp.41-51
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/07
G06F 9/50
(57)【特許請求の範囲】
【請求項1】
OS(オペレーティングシステム)障害時のメモリ内容を表すダンプの取得環境を設定する第1カーネルを実行する第1実行部と、
前記ダンプを取得する第2カーネルを実行する第2実行部と、
前記取得環境の設定途中で前記第2カーネルに前記ダンプの取得を指示する実行指示部と、
前記第2カーネルの起動中に前記第2カーネルのメモリ使用量を測定する測定部と、
測定した前記メモリ使用量に基づいて、前記第2カーネルの使用に割り当てるメモリ割当量を見積もる見積部と、
を有するメモリ割当装置。
【請求項2】
前記取得環境の設定再開時を設定する設定部を含み、
前記見積部は、前記設定再開時から前記取得環境の設定を再開する、
ことを特徴とする請求項1に記載のメモリ割当装置。
【請求項3】
前記第2実行部は、前記メモリ割当装置が備える主記憶部の全容量が前記第1カーネルによって前記第2カーネルの使用に割り当てられてから、前記第2カーネルを実行する、
ことを特徴とする請求項1又は2に記載のメモリ割当装置。
【請求項4】
OS(オペレーティングシステム)障害時のメモリ内容を表すダンプの取得環境を設定する第1カーネルを実行し、
前記取得環境の設定途中で、前記ダンプを取得する第2カーネルに前記ダンプの取得を指示し、
前記指示に応じて、前記ダンプを取得する第2カーネルを実行し、
前記第2カーネルの起動中に前記第2カーネルのメモリ使用量を測定し、
測定した前記メモリ使用量に基づいて、前記第2カーネルの使用に割り当てるメモリ割当量を見積もる、
処理をコンピュータに実行させるためのメモリ割当プログラム。
【請求項5】
OS(オペレーティングシステム)障害時のメモリ内容を表すダンプの取得環境を設定する第1カーネルを実行し、
前記取得環境の設定途中で、前記ダンプを取得する第2カーネルに前記ダンプの取得を指示し、
前記指示に応じて、前記ダンプを取得する第2カーネルを実行し、
前記第2カーネルの起動中に前記第2カーネルのメモリ使用量を測定し、
測定した前記メモリ使用量に基づいて、前記第2カーネルの使用に割り当てるメモリ割当量を見積もる、
処理をコンピュータが実行するメモリ割当方法。
【発明の詳細な説明】
【技術分野】
【0001】
本件は、メモリ割当装置、メモリ割当プログラム、及びメモリ割当方法に関する。
【背景技術】
【0002】
オペレーティングシステム(以下、単にOSという)が正常稼動を維持できない場合、当該OSが例外シグナルを発生させ、CPU(Central Processing Unit)の基本制御を行うためのOSの基幹部分であるカーネルにコアダンプ処理の実行を指示することが知られている。コアダンプ処理は例外シグナル発生時のメモリ空間内容の全てをそのままコアファイルに格納する処理である。
【0003】
例えば、UNIX(登録商標)に代表されるような汎用のOSは、常時シグナルイベントを監視する機能を備えており、例外シグナルが発生した場合には、例外シグナルに応じた例外処理を実行する。例えばOSの稼動をこれ以上継続することが困難と判断した場合には、コアダンプ処理を実行し、その時点のメモリ空間内容の全てをそのまま格納したコアファイルを生成する。このように生成されたコアファイルは障害の原因を解析する作業に利用される(以上、例えば特許文献1参照)。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
ところで、OSによっては2種類のカーネルが設けられている場合がある。例えばLinux(登録商標)であれば、ジョブ管理や記憶管理といった通常の制御を行うシステム運用カーネル(以下、第1カーネルという)と、OS(具体的には第1カーネル)に障害(クラッシュ)が発生したときの制御を行うダンプ運用カーネル(以下、第2カーネルという)が設けられている。第2カーネルはOSに障害が発生すると、kdump(カーネルクラッシュダンプ又はカーネルメモリダンプ)処理を実行し、障害時のメモリ空間内容におけるカーネル部分を格納したダンプファイルを生成する。
【0006】
第2カーネルが動作する際に使用するメモリ量は、第1カーネルが使用しないように作業担当者の事前の見積もりによって指定されている。このメモリ量はOSの起動時に第1カーネルによって環境設定として事前に割り当てられる。第2カーネルの使用に割り当てるメモリ量が大きくなると、第1カーネルが使用できるメモリ量が少なくなるため、第2カーネル用のメモリ量はなるべく小さい方が望ましい。
【0007】
ところが、第2カーネルの使用に割り当てるメモリ量はハードウェアの構成やソフトウェアの構成によってばらつきがあり、作業担当者が適切なメモリ量を見積もることが難しい。このため、ダンプ処理時の環境を新規に構築する時やその環境の構成を変更する時に作業担当者がメモリ量を調整しながら実機を使って実績確認をし、第2カーネルの使用に割り当てるメモリ量を見積もって決定している。しかしながら、この作業は煩雑な上に適切であるかの評価ができないため不十分であった。
【0008】
そこで、1つの側面では、第2カーネルの使用に割り当てる適応的なメモリ量を短時間で見積もることを目的とする。
【課題を解決するための手段】
【0009】
1つの実施態様では、メモリ割当装置は、OS障害時のメモリ内容を表すダンプの取得環境を設定する第1カーネルを実行する第1実行部と、前記ダンプを取得する第2カーネルを実行する第2実行部と、前記取得環境の設定途中で前記第2カーネルに前記ダンプの取得を指示する実行指示部と、前記第2カーネルの起動中に前記第2カーネルのメモリ使用量を測定する測定部と、測定した前記メモリ使用量に基づいて、前記第2カーネルの使用に割り当てるメモリ割当量を見積もる見積部と、を有する。
【発明の効果】
【0010】
第2カーネルの使用に割り当てる適応的なメモリ量を短時間で見積もることができる。
【図面の簡単な説明】
【0011】
【
図1】
図1はサーバ装置のハードウェア構成を例示するブロック図である。
【
図2】
図2はサーバ装置の機能構成を例示するブロック図である。
【
図3】
図3は第1カーネル及び第2カーネルの機能構成を例示するブロック図である。
【
図4】
図4は第1カーネルが実行する処理の一例を示すフローチャートである。
【
図5】
図5はダンプを保存するための補助記憶部の領域(以下、ダンプ退避域)テーブルの一例である。
【
図6】
図6は第2カーネルが実行する処理の一例を示すフローチャートである。
【
図7】
図7(a)はメモリ獲得処理の一例を示すフローチャートである。
図7(b)はメモリ解放処理の一例を示すフローチャートである。
【
図8】
図8は新メモリ使用量の推移を示すグラフである。
【
図9】
図9は比較例と第1実施形態を説明する図である。
【
図10】
図10は第1カーネルが実行する処理の他の一例を示すフローチャートである。
【発明を実施するための形態】
【0012】
以下、本件を実施するための形態について図面を参照して説明する。
【0013】
図1はサーバ装置100のハードウェア構成を例示するブロック図である。
図1に示すように、メモリ割当装置としてのサーバ装置100は、ハードウェアプロセッサとしてのCPU100A及びRAM(Random Access Memory)100Bを含んでいる。サーバ装置100は、ROM(Read Only Memory)100C、ネットワークI/F(インタフェース)100D、及びHDD(Hard Disk Drive)100Eを含んでいる。HDD(Hard Disk Drive)100Eに代えて、SSD(Solid State Drive)を利用してもよい。サーバ装置100は、必要に応じて、入力I/F100F、出力I/F100G、入出力I/F100H、ドライブ装置100Iの少なくとも1つを含んでいてもよい。CPU100Aからドライブ装置100Iまでは、内部バス100Jによって互いに接続されている。すなわち、サーバ装置100はコンピュータによって実現することができる。尚、CPU100Aに代えてMPU(Micro Processing Unit)をハードウェアプロセッサとして採用してもよい。
【0014】
入力I/F100Fには入力装置11が接続される。入力装置11としては例えばキーボードやマウス、タッチパネルなどがある。出力I/F100Gには表示装置12が接続される。表示装置12としては例えば液晶ディスプレイなどがある。入出力I/F100Hには半導体メモリ13が接続される。半導体メモリ13としては、例えばUSB(Universal Serial Bus)メモリやフラッシュメモリなどがある。入出力I/F100Hは半導体メモリ730に記憶されたプログラムやデータを読み取る。入力I/F100F及び入出力I/F100Hは例えばUSBポートを備えている。出力I/F100Gは例えばディスプレイポートを備えている。
【0015】
ドライブ装置100Iには可搬型記録媒体14が挿入される。可搬型記録媒体14としては、例えばCD(Compact Disc)-ROM、DVD(Digital Versatile Disc)といったリムーバブルディスクがある。ドライブ装置100Iは可搬型記録媒体14に記録されたプログラムやデータを読み込む。ネットワークI/F100Dは例えばLAN(Local Area Network)ポートや通信回路などを備えている。
【0016】
RAM100BにはROM100C、HDD100E、半導体メモリ13の少なくとも1つに記憶されたプログラムがCPU100Aによって一時的に格納される。RAM100Bには可搬型記録媒体14に記録されたプログラムがCPU100Aによって一時的に格納される。格納されたプログラムをCPU100Aが実行することにより、CPU100Aは後述する各種の機能を実現し、また、後述する各種の処理を実行する。尚、プログラムは後述するフローチャートに応じたものとすればよい。
【0017】
次に、
図2を参照して、サーバ装置100の機能構成について説明する。
【0018】
図2はサーバ装置100の機能構成を例示するブロック図である。
図2ではサーバ装置100の機能の要部が示されている。
図2に示すように、サーバ装置100は補助記憶部110、主記憶部120、及び処理部130を備えている。補助記憶部110は上述したHDD100Eなどによって実現することができる。主記憶部120は上述したRAM100Bによって実現することができる。処理部130は上述したCPU100Aによって実現することができる。したがって、補助記憶部110、主記憶部120、及び処理部130は互いに接続されている。
【0019】
ここで、補助記憶部110は図示しないOSを記憶する。OSとしては例えばLinux(登録商標)があるが、Linux(登録商標)以外のOSであってもよい。処理部130は、サーバ装置100の電源ボタンが押下されてサーバ装置100に電力が供給されると、補助記憶部110からOSを呼び出す。そして、処理部130は、呼び出したOSに含まれる第1カーネル50を主記憶部120の第1カーネルメモリ領域121に格納し、第1カーネル50を起動する。すなわち、第1カーネルメモリ領域121は第1カーネル50が動作するメモリ領域である。第1カーネル50を起動することにより、第1カーネル50は例えばジョブ(又はプロセス)管理やメモリ管理、運用管理、入出力管理といった通常の制御を行うほか、後述する各種の処理を実行する。第1カーネル50はシステムカーネルなどと呼ばれることがある。
【0020】
また、第1カーネル50を起動することにより、第1カーネル50は第2カーネルメモリ領域122を主記憶部120に割り当て(又は予約し)、OSに含まれる第2カーネル60を第2カーネルメモリ領域122に格納する。すなわち、第2カーネルメモリ領域122は第2カーネル60が動作するメモリ領域である。第2カーネル60はOS(具体的には第1カーネル50)にカーネルクラッシュといった障害(異常)が発生したときの制御を行う。第2カーネルはダンプキャプチャカーネルや単にダンプカーネルなどと呼ばれることがある。
【0021】
具体的に説明すると、第1カーネル50は、自身の処理において論理の異常などを検出し、処理の続行が不可能と判断すると、第2カーネル60を起動する。第2カーネル60は第1カーネルメモリ領域121内のメモリ空間内容におけるカーネル部分を格納したダンプファイルを補助記憶部110のダンプ退避域111内に書き込む。第2カーネル60はダンプファイルを書き込んだ後、自身をシャットダウンまたは再起動する。
【0022】
次に、
図3を参照して、第1カーネル50が備える機能及び第2カーネル60が備える機能の概要について説明する。第1カーネル50が備える機能は、処理部130が主記憶部120と連携して第1カーネル50の処理を実行することにより実現することができる。第2カーネル60についても第1カーネル50と同様である。なお、第1カーネル50及び第2カーネル60の処理の詳細については、サーバ装置100の動作を説明する際に詳しく説明する。
【0023】
図3は第1カーネル50及び第2カーネル60の機能構成を例示するブロック図である。第1カーネル50は、第1カーネル実行部51、第1判定部52、第2判定部53、及び環境構築部54を構成要素として含んでいる。また、第1カーネル50は、初期設定部55、ダンプ操作部56、チェックポイント設定部57、及び第2カーネル実行指示部58を構成要素として含んでいる。第1カーネル実行部51が第1実行部の一例であって、第2カーネル実行指示部58が実行指示部の一例であって、環境構築部54が見積部の一例であって、チェックポイント設定部57が設定部の一例である。
【0024】
第2カーネル60は、第2カーネル実行部61、メモリ使用量測定部62、メモリ使用量登録部63、及び第1カーネル実行指示部64を構成要素として含んでいる。第2カーネル実行部61が第2実行部の一例であって、メモリ使用量測定部62が測定部の一例である。第1カーネル50及び第2カーネル60は互いに直接的に連携し、また、ダンプ退避域111を介して間接的に連携する。
【0025】
次に、
図4乃至
図6を参照して、第1カーネル50及び第2カーネル60の処理について説明する。
【0026】
図4は第1カーネル50が実行する処理の一例を示すフローチャートである。
図5はダンプ退避域テーブルT1の一例である。
図6は第2カーネル60が実行する処理の一例を示すフローチャートである。まず、サーバ装置100に電力が供給されると、第1カーネル実行部51は第1カーネル50を起動する(ステップS1)。これにより、初期設定部55がダンプファイルの取得環境又は採取環境(以下、単に取得環境という)の初期設定を開始し、例えばネットワークのIPアドレスやHDD100Eのパーティションなどの設定を開始する。
【0027】
第1カーネル50が起動すると、初期設定と並行して、第1判定部52はダンプファイルの取得環境が構築済であるか否かを判定する(ステップS2)。具体的には、第1判定部52はダンプ退避域111にアクセスして、ダンプファイルの取得環境が構築済であるか否かを判定する。なお、ダンプファイルの取得環境が構築済であるとは、第2カーネル60用のメモリ使用量が第1カーネル50に既に設定された状態を表している。
【0028】
ここで、
図5に示すように、ダンプ退避域111はダンプ退避域テーブルT1により様々な情報を管理する。具体的には、ダンプ退避域テーブルT1は、取得環境状態識別子、第2カーネルメモリ使用量、データ長、第1カーネル初期設定値といった情報を含んでいる。例えば、取得環境状態識別子には3種類の識別子のいずれかが登録されている。識別子「0」はダンプファイルの取得環境がまだ構築されていない状態(未構築)であることを表している。識別子「1」はダンプファイルの取得環境が構築の最中である状態(構築中)であることを表している。識別子「2」はダンプファイルの取得環境の構築が済んでいる状態(構築済)であることを表している。残りの情報については後述する。
【0029】
第1判定部52は、ダンプ退避域111にアクセスし、例えば取得環境状態識別子に識別子「0」が割り当てられている場合、取得環境が構築済でないと判定する(ステップS2:NO)。この場合、続けて第1判定部52はダンプファイルの取得環境が構築中であるか否かを判定する(ステップS3)。具体的には、第1判定部52はダンプ退避域111にアクセスして、ダンプファイルの取得環境が構築中であるか否かを判定する。第1判定部52は、取得環境状態識別子に同様に識別子「0」が割り当てられている場合、取得環境が構築中でないと判定する(ステップS3:NO)。したがって、第1判定部52のステップS2,S3の処理により、ダンプファイルの取得環境が未構築であると判定される。
【0030】
ダンプファイルの取得環境が未構築である場合、次いで、チェックポイント設定部57はチェックポイントを設定する(ステップS4)。具体的には、ダンプファイルの取得環境が未構築である場合、環境構築部54がチェックポイント設定部57にチェックポイントの設定を依頼する。チェックポイント設定部57はチェックポイントの設定が依頼されると、第1カーネル50を起動してから現時点までに設定された全ての初期設定値(具体的にはネットワークアドレスやパーティションなど)とその初期設定値のデータ長をチェックポイントとして設定する。そして、チェックポイント設定部57は設定したチェックポイントの登録をダンプ操作部56に依頼する。ダンプ操作部56はチェックポイントの登録が依頼されると、チェックポイントをダンプ退避域111に登録する。これにより、
図5に示すように、ダンプ退避域111にはチェックポイントとしての初期設定値とその初期設定値のデータ長が登録される。
【0031】
チェックポイントが設定されると、次いで、環境構築部54は識別子を構築中に書き換える(ステップS5)。具体的には、環境構築部54は取得環境状態識別子の識別子「1」への書き換えをダンプ操作部56に依頼する。ダンプ操作部56は書き換えが依頼されると、取得環境状態識別子の識別子「0」を削除して識別子「1」をダンプ退避域111に登録する。これにより、ダンプ退避域テーブルT1の取得環境状態識別子が構築中を表す識別子「1」に書き換わり、第2カーネル60用のメモリ使用量の設定を開始する状態に移行する。
【0032】
識別子が構築中に書き換わると、環境構築部54はサーバ装置100内の全メモリ量を第2カーネル60の動作用に割り当てる(ステップS6)。この全メモリ量はRAM100Bの容量に相当する。これにより、メモリ不足に伴う第2カーネル60の動作中断や動作遅延を回避することができる。その後、第2カーネル実行指示部58は第2カーネル60の実行を指示する(ステップS7)。具体的には、第2カーネル実行指示部58は第2カーネル60の第2カーネル実行部61に第2カーネル60の実行を指示する。第2カーネル実行指示部58が第2カーネル60の実行を指示すると、第1カーネル実行部51は初期設定の途中であっても第1カーネルの起動を一時的に終了して、強制的に第2カーネル60の実行に切り替える。
【0033】
第2カーネル60の実行が指示されると、
図6に示すように、第2カーネル実行部61は第2カーネル60を起動する(ステップS8)。第2カーネル実行部61が第2カーネル60を起動すると、次いで、メモリ使用量測定部62は測定処理を実行する(ステップS9)。詳細は後述するが、測定処理は第2カーネル60が動作する際に使用するメモリ量を実際に測定(実測)し、最大のメモリ使用量を出力する処理である。メモリ使用量測定部62は測定処理を実行することにより、第2カーネル60の使用に要する最大のメモリ使用量を特定することができる。
【0034】
メモリ使用量が特定されると、次いで、メモリ使用量登録部63はメモリ使用量を登録する(ステップS10)。具体的には、メモリ使用量登録部63はダンプ退避域111にアクセスし、メモリ使用量を登録する。これにより、
図5に示すように、ダンプ退避域テーブルT1の第2カーネルメモリ使用量に、特定されたメモリ使用量が登録される。第2カーネルメモリ使用量に登録されるメモリ使用量は例えば128メガバイト(MB)から512メガバイト程度までの数百メガバイト単位のメモリ使用量が登録される。
【0035】
メモリ使用量が登録されると、第1カーネル実行指示部64は第1カーネル50の実行を指示する(ステップS11)。具体的には、第1カーネル実行指示部64は第1カーネル50の第1カーネル実行部51に第1カーネル50の実行を指示する。これにより、
図4に示すステップS1の処理が再び実行される。第1カーネル実行指示部64が第1カーネル50の実行を指示すると、第2カーネル実行部61は第2カーネルの起動を終了する。
【0036】
図4に戻り、第1カーネル50の実行が指示されると、ステップS1の処理において第1カーネル実行部51は第1カーネル50を起動する。ここで、上述したステップS5の処理において、取得構築状態識別子が識別子「1」に書き換えられている。このため、ステップS2の処理において第1判定部52は取得環境が構築済でないと判定するが、ステップS3の処理において第1判定部52は取得環境が構築中であると判定する(ステップS3:YES)。これにより、ダンプ操作部56はダンプ退避域111から各種の情報を取得する(ステップS12)。具体的には、ダンプ操作部56は第2カーネルメモリ使用量、データ長、及び第1カーネル初期設定値の各値を取得する。
【0037】
ダンプ操作部56が各種の情報を取得すると、環境構築部54は、データ長に基づいて、データ長が0(ゼロ)であるか否かを判定する(ステップS13)。データ長が0でない場合(ステップS13:NO)、第1カーネル初期設定値が存在するため、チェックポイント設定部57は第1カーネル初期設定値に基づいて初期設定を復元する(ステップS14)。復元した初期設定が初期設定を再開するチェックポイントになる。環境構築部54は、このチェックポイントを基準に再び初期設定を継続する。なお、データ長が0である場合(ステップS13:YES)、第1カーネル初期設定値が存在しないため、チェックポイント設定部57はステップS14の処理をスキップする。
【0038】
次に、環境構築部54は、第2カーネルメモリ使用量に基づいて、メモリ割当量を見積もる(ステップS15)。例えば、環境構築部54は第2カーネルメモリ使用量をそのままメモリ割当量として見積もってもよいし、第2カーネルメモリ使用量と、その第2カーネルメモリ使用量より大きなメモリ使用量を算出する所定の算出式とに基づいてメモリ使用量を算出し、そのメモリ使用量をメモリ割当量として見積もってもよい。単に、メモリ使用量に余裕をもたせるために、第2カーネルメモリ使用量に所定のメモリ使用量を加算したメモリ使用量をメモリ割当量として見積もってもよい。
【0039】
環境構築部54はメモリ割当量を見積もると、そのメモリ割当量を第1カーネル50に設定する(ステップS16)。これにより、第1カーネル50の起動時に第1カーネル50はそのメモリ割当量の第2カーネルメモリ領域122を主記憶部120に予約することができる。メモリ割当量が設定されると、次いで、環境構築部54は識別子を構築済に書き換える(ステップS17)。具体的には、環境構築部54は取得環境状態識別子の識別子「2」への書き換えをダンプ操作部56に依頼する。ダンプ操作部56は書き換えが依頼されると、取得環境状態識別子の識別子「1」を削除して識別子「2」をダンプ退避域111に登録する。これにより、ダンプ退避域テーブルT1の取得環境状態識別子が構築済を表す識別子「2」に書き換わり、第2カーネル60用のメモリ使用量の設定が終了した状態に移行する。
【0040】
ステップS17の処理が完了すると、環境構築部54はダンプ退避域テーブルT1を初期化する(ステップS18)。具体的には、環境構築部54は第2カーネルメモリ使用量、データ長、及び第1カーネル初期設定値の各値の削除をダンプ操作部56に依頼する。ダンプ操作部56は削除が依頼されると、ダンプ退避域111のダンプ退避域テーブルT1から第2カーネルメモリ使用量、データ長、及び第1カーネル初期設定値の各値を削除する。これにより、ダンプ退避域テーブルT1の取得環境状態識別子に識別子「2」が残存し、第2カーネルメモリ使用量、データ長、及び第1カーネル初期設定値のそれぞれに値がない状態になる。
【0041】
ステップS18の処理が完了すると、環境構築部54は第1カーネル50の起動を継続し(ステップS19)、初期設定部55が初期設定の処理を進行する。そして、初期設定部55が初期設定を終えると、第1カーネル50は処理を終了する。なお、上述したステップS2の処理において、取得環境が構築済である判定した場合(ステップS2:YES)、環境構築部54はステップS19を実行する。そして、初期設定部55が初期設定を終えると、第1カーネル50は処理を終了する。
【0042】
次に、
図7(a)及び(b)並びに
図8を参照して、上述した測定処理について説明する。
【0043】
図7(a)はメモリ獲得処理の一例を示すフローチャートである。
図7(b)はメモリ解放処理の一例を示すフローチャートである。
図8は新メモリ使用量の推移を示すグラフである。上述した測定処理にメモリ獲得処理及びメモリ解放処理が含まれている。まず、第2カーネル60が起動すると、
図7(a)に示すように、メモリ使用量測定部62はメモリを獲得する(ステップS31)。すなわち、第2カーネル60の動作に使用する量のメモリをメモリ使用量測定部62が獲得する。この量はメモリ獲得を要求するプログラムが設定した量に相当する。
【0044】
次に、メモリ使用量測定部62は現メモリ使用量にメモリ獲得量を加算した新メモリ使用量を算出する(ステップS32)。現メモリ使用量の初期値は0(ゼロ)である。メモリ獲得量はメモリ使用量測定部62が獲得したメモリの量である。したがって、
図8に示すように、新メモリ使用量が時刻の経過に伴い右肩上がりである時刻t1まで第2カーネル60の処理量に応じた新メモリ量が獲得される。
【0045】
次に、メモリ使用量測定部62は新メモリ使用量が最大メモリ使用量より大きいか否かを判定する(ステップS33)。新メモリ使用量が最大メモリ使用量より大きい場合(ステップS33:YES)、最大メモリ使用量に新メモリ使用量を設定する(ステップS34)。すなわち、最大メモリ使用量は新メモリ使用量に更新される。これにより、
図8に示すように、時刻t1までの最大メモリ使用量を特定することができる。なお、新メモリ使用量が最大メモリ使用量以下の場合(ステップS33:NO)、ステップS34の処理はスキップされる。このため、最大メモリ使用量は更新されずに維持される。
【0046】
一方、第2カーネル60の処理の一部を実行し終えると、
図7(b)に示すように、メモリ使用量測定部62はメモリを解放する(ステップS41)。すなわち、第2カーネル60の一部の動作に使用していた量のメモリをメモリ使用量測定部62が解放する。この量はメモリ解放を要求するプログラムが設定した量に相当する。
【0047】
次に、メモリ使用量測定部62は現メモリ使用量からメモリ解放量を減算した新メモリ使用量を算出する(ステップS42)。メモリ解放量はメモリ使用量測定部62が解放したメモリの量である。このように、第2カーネル60の一部の処理を実行し終えるとメモリが解放される。この結果、
図8に示すように、例えば時刻t1を経過すると、新メモリ使用量が右肩下がりになる。
【0048】
このように、メモリ使用量測定部62は第2カーネル60の処理状況に応じてメモリ獲得処理とメモリ解放処理を独立して実行したり、並行して実行したりして、最大メモリ使用量を測定する。メモリ使用量測定部62は最大メモリ使用量を測定し終えると、新メモリ使用量が百分率で表されているため、例えばメモリ容量と、新メモリ使用量と、百分率をメガバイトに変換する所定の変換式に基づいて、新メモリ使用量をメガバイト単位のメモリ使用量に変換して出力する。
【0049】
次に、
図9を参照して、第1実施形態を比較例と対比して説明する。
【0050】
図9は比較例と第1実施形態を説明する図である。まず、
図9の上段に示す比較例の場合、第1カーネル50は、作業担当者によって1回目に指定されたメモリ量で第2カーネル60用のメモリ使用量を設定する。第2カーネル60用のメモリ使用量が設定されると、第2カーネル60はkdump処理を実行し、ダンプファイルの取得を試みる。この際、ダンプファイルの取得に失敗していれば、設定されたメモリ使用量が不足しており、作業担当者は1回目に指定したメモリ量より大きなメモリ量を指定して、第1カーネル50の再設定を試みる。
【0051】
一方、設定されたメモリ使用量が第2カーネル60の動作に支障のない十分な大きさである場合、設定完了としてもよい。しかしながら、指定したメモリ量が第2カーネル60の実際のメモリ使用量に対して必要以上に大きな場合にはメモリ量に無駄があり、最適なメモリ使用量が設定されたか明らかでない。場合によっては、第1カーネル50の動作に支障がある可能性がある。このため、作業担当者は実機を確認し、最適なメモリ使用量でないと判断した場合には、メモリ量を再び指定する。作業担当者は2回目の作業においても1回目と同様の結果が得られた場合には3回目の作業を実施し、以後、作業担当者が最適なメモリ使用量であると判断するまで作業を繰り返す。このように、比較例の場合には、作業が煩雑な上に適切であるかの評価が難しかった。
【0052】
しかしながら、
図9の下段に示す第1実施形態によれば、第1カーネル50は、作業担当者によるメモリ量の指定がなくても、初期設定を開始する。第1カーネル50はチェックポイントを設定すると、初期設定の途中であっても第2カーネル60を起動して、第1カーネル50の処理を一時的に終了する。第2カーネル60はkdump処理を実行し、kdump処理の際に第2カーネル60が実際に使用する最大のメモリ使用量を測定して、ダンプ退避域111に登録する。第2カーネル60はkdump処理が終了すると第1カーネル50を起動する。
【0053】
第1カーネル50が起動すると、第1カーネル50はダンプ退避域111に登録されたメモリ使用量に基づいて、第2カーネル60用のメモリ割当量を見積もり、チェックポイントから初期設定を再開する。このように、作業担当者によるメモリ量の指定がなくても、第2カーネル60が実際に使用する最大のメモリ使用量に基づいて、第1カーネル50はメモリ割当量を見積もり、見積もったメモリ割当量を自身に設定する。このため、作業担当者は煩雑な作業を実施せずに、適応的なメモリ使用量を短時間で見積もることができる。
【0054】
以上、第1実施形態によれば、サーバ装置100は、第1カーネル実行部51と第2カーネル実行部61とメモリ使用量測定部62と環境構築部54とを備えている。第1カーネル実行部51はOS障害時のメモリ内容を表すダンプファイルの取得環境を設定する第1カーネル50を実行する。第2カーネル実行部61はダンプファイルの取得環境の設定途中でダンプファイルを取得する第2カーネル60を実行する。メモリ使用量測定部62は第2カーネル60の起動中に第2カーネル60のメモリ使用量を測定する。環境構築部54はメモリ使用量測定部62が測定したメモリ使用量に基づいて、第2カーネル60の使用に割り当てるメモリ割当量を見積もる。これにより、第2カーネル60の使用に割り当てる適応的なメモリ量を短時間で見積もることができる。
【0055】
ここで、第2カーネル60の使用に割り当てる適応的なメモリ量を、例えば第1カーネル50の起動に要するメモリ量に基づいて推測することも想定することができる。ところが、第1カーネル50はスワップ領域を使用して起動する一方で、第2カーネル60はスワップ領域を使用せずに起動する。このため、第1カーネル50の起動に要するメモリ量は、第2カーネル60の起動に要するメモリ量より傾向的に小さくなる。したがって、第1カーネル50の起動に要するメモリ量を利用しても、必ずしも第2カーネル60の使用に割り当てる適応的なメモリ量を見積もることができない。
【0056】
また、第2カーネル60が有する個々のソフトウェア(例えばドライバやミドルウェアなど)が使用するメモリ量を算出し、算出したメモリ量の総和を求めて第2カーネル60用に割り当てるメモリ使用量を決定することも想定することができる。ところが、第2カーネル60が有する個々のソフトウェアは多種多様であり、すべてのソフトウェアに関するメモリ使用量を事前に調査することは極めて難しい。また、第2カーネル60が動作するハードウェア環境によって使用するメモリ量がばらつくため、メモリ使用量を見積もる見積式が複雑になりかねない。しかしながら、本第1実施形態及び後述する第2実施形態によれば、作業担当者はメモリ量の煩雑な検証を行わなくても、第2カーネル60の使用に割り当てる適応的なメモリ量を短時間で見積もることができる。
【0057】
(第2実施形態)
続いて、
図10及び
図11を参照して、本件の第2実施形態について説明する。
図10は第1カーネル50が実行する処理の他の一例を示すフローチャートである。
図10に示すように、第1カーネル50の第2判定部53は構成変更の指示があるまで待機する(ステップS51:NO)。例えば、第2判定部53は作業担当者からメモリ割当量を変更する指示を検出するまで待機する。第2判定部53は構成変更の指示があったと判定した場合(ステップS51:YES)、環境構築部54は識別子を構築中に書き換える(ステップS52)。なお、構成変更の場合には、ダンプ退避域テーブルT1の取得環境状態識別子には構築済を表す識別子「2」が登録されているため、ダンプ操作部56は書き換えが依頼されると、取得環境状態識別子の識別子「2」を削除して識別子「1」をダンプ退避域111に登録する。
【0058】
識別子が構築中に書き換わると、環境構築部54はサーバ装置100内の全メモリ量を第2カーネル60の動作用に割り当てる(ステップS53)。ステップS53の処理が完了すると、第2カーネル実行指示部58は第2カーネル60の実行を指示し(ステップS54)、処理を終了する。なお、第2カーネルが実行する処理については、
図6を参照して説明した第1実施形態と同様であるため、詳細な説明を省略する。また、第2カーネルが処理を実行し終えた後の処理については、
図4を参照して説明した第1実施形態と同様であるため、詳細な説明を省略する。第2実施形態では初期設定値がダンプ退避域111に登録されないため、環境構築部54は
図4のステップS13の処理において、データ長が0であると判定する。
【0059】
図11は第2実施形態を説明する図である。第2実施形態によれば、第1カーネル50は、作業担当者によるメモリ量の指定がなくても構成変更の指示があれば、全メモリ量を第2カーネル60の動作用に割り当る。そして、第1カーネル50は、第2カーネル60を起動して、第1カーネル50の処理を終了する。第2カーネル60はkdump処理を実行し、kdump処理の際に第2カーネル60が実際に使用する最大のメモリ使用量を測定して、ダンプ退避域111に登録する。第2カーネル60はダンプ処理が終了すると第1カーネル50を起動する。
【0060】
第1カーネル50が起動すると、第1カーネル50はダンプ退避域111に登録されたメモリ使用量に基づいて、第2カーネル60用のメモリ割当量を見積もる。このように、作業担当者によるメモリ量の指定がなくても、第2カーネル60が実際に使用する最大のメモリ使用量に基づいて、第1カーネル50はメモリ割当量を見積もる。このように、第2実施形態であっても、作業担当者は煩雑な作業を実施せずに、適応的なメモリ使用量を短時間で見積もることができる。
【0061】
以上、本発明の好ましい実施形態について詳述したが、本発明に係る特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【0062】
なお、以上の説明に関して更に以下の付記を開示する。
(付記1)OS障害時のメモリ内容を表すダンプの取得環境を設定する第1カーネルを実行する第1実行部と、前記ダンプを取得する第2カーネルを実行する第2実行部と、前記取得環境の設定途中で前記第2カーネルに前記ダンプの取得を指示する実行指示部と、前記第2カーネルの起動中に前記第2カーネルのメモリ使用量を測定する測定部と、測定した前記メモリ使用量に基づいて、前記第2カーネルの使用に割り当てるメモリ割当量を見積もる見積部と、を有するメモリ割当装置。
(付記2)前記取得環境の設定再開時を設定する設定部を含み、前記見積部は、前記設定再開時から前記取得環境の設定を再開する、ことを特徴とする付記1に記載のメモリ割当装置。
(付記3)前記第2実行部は、前記メモリ割当装置が備える主記憶部の全容量が前記第1カーネルによって前記第2カーネルの使用に割り当てられてから、前記第2カーネルを実行する、ことを特徴とする付記1又は2に記載のメモリ割当装置。
(付記4)前記ダンプは前記メモリ内容におけるカーネル部分を表す、ことを特徴とする付記1から3のいずれか1項に記載のメモリ割当装置。
(付記5)OS障害時のメモリ内容を表すダンプの取得環境を設定する第1カーネルを実行し、前記取得環境の設定途中で、前記ダンプを取得する第2カーネルに前記ダンプの取得を指示し、前記指示に応じて、前記ダンプを取得する第2カーネルを実行し、前記第2カーネルの起動中に前記第2カーネルのメモリ使用量を測定し、測定した前記メモリ使用量に基づいて、前記第2カーネルの使用に割り当てるメモリ割当量を見積もる、処理をコンピュータに実行させるためのメモリ割当プログラム。
(付記6)前記取得環境の設定再開時を設定する処理を含み、前記メモリ割当量を見積もる処理は、前記設定再開時から前記取得環境の設定を再開する、ことを特徴とする付記5に記載のメモリ割当プログラム。
(付記7)前記第2カーネルを実行する処理は、前記コンピュータが備える主記憶部の全容量が前記第1カーネルによって前記第2カーネルの使用に割り当てられてから、前記第2カーネルを実行する、ことを特徴とする付記5又は6に記載のメモリ割当プログラム。
(付記8)前記ダンプは前記メモリ内容におけるカーネル部分を表す、ことを特徴とする付記5から7のいずれか1項に記載のメモリ割当プログラム。
(付記9)OS障害時のメモリ内容を表すダンプの取得環境を設定する第1カーネルを実行し、前記取得環境の設定途中で、前記ダンプを取得する第2カーネルに前記ダンプの取得を指示し、前記指示に応じて、前記ダンプを取得する第2カーネルを実行し、前記第2カーネルの起動中に前記第2カーネルのメモリ使用量を測定し、測定した前記メモリ使用量に基づいて、前記第2カーネルの使用に割り当てるメモリ割当量を見積もる、処理をコンピュータが実行するメモリ割当方法。
【符号の説明】
【0063】
50 第1カーネル
51 第1カーネル実行部(第1実行部)
54 環境構築部(見積部)
57 チェックポイント設定部(設定部)
58 第2カーネル実行指示部(実行指示部)
60 第2カーネル
61 第2カーネル実行部(第2実行部)
62 メモリ使用量測定部(測定部)
100 サーバ装置
110 補助記憶部
111 ダンプ退避域
120 主記憶部
130 処理部