JP6672808B2 - 情報処理装置、実行時間補正方法、および実行時間補正プログラム - Google Patents

情報処理装置、実行時間補正方法、および実行時間補正プログラム Download PDF

Info

Publication number
JP6672808B2
JP6672808B2 JP2016004151A JP2016004151A JP6672808B2 JP 6672808 B2 JP6672808 B2 JP 6672808B2 JP 2016004151 A JP2016004151 A JP 2016004151A JP 2016004151 A JP2016004151 A JP 2016004151A JP 6672808 B2 JP6672808 B2 JP 6672808B2
Authority
JP
Japan
Prior art keywords
program
time
information processing
processing apparatus
period
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2016004151A
Other languages
English (en)
Other versions
JP2017126146A (ja
Inventor
昌生 山本
昌生 山本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2016004151A priority Critical patent/JP6672808B2/ja
Priority to US15/384,994 priority patent/US10409636B2/en
Publication of JP2017126146A publication Critical patent/JP2017126146A/ja
Application granted granted Critical
Publication of JP6672808B2 publication Critical patent/JP6672808B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • G06F11/3419Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment by assessing time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45575Starting, stopping, suspending or resuming virtual machine instances
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/88Monitoring involving counting

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明は、情報処理装置、実行時間補正方法、および実行時間補正プログラムに関する。
ハイパーバイザによって複数の仮想マシン(VM:Virtual Machine)に対するハードウェアリソースの割り当てを制御することにより、複数の仮想マシンを動作させる仮想計算機システムがある。仮想計算機システムでは、仮想マシンのゲストOS(Operating System)上でアプリケーションプログラムを実行させる。
先行技術としては、例えば、実経過時間カウンタの値から、LogicalPartitionにCPU(Central Processing Unit)が割り当てられていない時間帯に、本来なら何回の測定タイミングが来たはずかを計算するものがある。また、例えば、OS上で任意のアプリケーションプログラムが実行されると、当該アプリケーションプログラムによって実行されたプロセスのIDと、任意のアプリケーションプログラムの中の測定対象となるプロセスのIDとを比較する技術がある。また、例えば、第1のゲストOSで走行する第1のプロセスに対し、第2のゲストOSで走行する第2のプロセスが使用している物理固有領域と仮想固有領域と重複しないアドレスを持つ物理固有領域と仮想固有領域をそれぞれ割り当てる技術がある。
特開2008−225655号公報 特開2010−003057号公報 特開2014−139702号公報
しかしながら、上述した従来技術では、ゲストOSにおいて実行される各種プログラムの実行時間を、プログラム単位で精度よく計測することが難しい場合がある。例えば、ゲストOSにおいて実行された各種プログラムが中断された期間をプログラム単位で特定することが難しく、中断された期間分の時間を除外して各種プログラムの実行時間を計測することができない場合がある。
1つの側面では、本発明は、仮想マシンにおいて実行されたプログラムの実行時間を精度よく計測することができる情報処理装置、実行時間補正方法、および実行時間補正プログラムを提供することを目的とする。
本発明の一側面によれば、所定の時刻ごとに、当該時刻に仮想マシンにおいて実行中であるプログラムを示すデータを取得し、取得した前記データに基づいて、前記仮想マシンプログラムが中断された期間の直前または直後の少なくともいずれかに実行中であるプログラムの開始から終了までの時間から、前記期間分の時間を減算した結果を示すデータを、前記プログラムを識別するデータに対応付けて出力する情報処理装置、実行時間補正方法、および実行時間補正プログラムが提案される。
本発明の一態様によれば、仮想マシンにおいて実行されたプログラムの実行時間を精度よく計測することができるという効果を奏する。
図1は、実施の形態にかかる実行時間補正方法の一実施例を示す説明図である。 図2は、情報処理装置100のハードウェア構成例を示すブロック図である。 図3は、情報処理装置100の機能的構成例を示すブロック図である。 図4は、情報処理装置100がサンプリングデータ400を取得する一例を示す説明図(その1)である。 図5は、情報処理装置100がサンプリングデータ400を取得する一例を示す説明図(その2)である。 図6は、サンプリングデータ400の一例を示す説明図である。 図7は、情報処理装置100がスティール時間を算出する第1例を示す説明図(その1)である。 図8は、情報処理装置100がスティール時間を算出する第1例を示す説明図(その2)である。 図9は、第1算出処理手順の一例を示すフローチャートである。 図10は、情報処理装置100がスティール時間を算出する第2例を示す説明図である。 図11は、第2算出処理手順の一例を示すフローチャートである。 図12は、情報処理装置100がスティール時間を算出する第3例を示す説明図である。 図13は、第3算出処理手順の一例を示すフローチャートである。
以下に、図面を参照して、本発明にかかる情報処理装置、実行時間補正方法、および実行時間補正プログラムの実施の形態を詳細に説明する。
(実施の形態にかかる実行時間補正方法の一実施例)
図1は、実施の形態にかかる実行時間補正方法の一実施例を示す説明図である。図1において、情報処理装置100は、仮想マシンプログラムにおいて実行される各種プログラムの中断期間を、プログラム単位で特定するコンピュータである。以下の説明では、仮想マシンを「VM」と表記する場合がある。
ここで、従来、サーバ上のプログラムの利用者に、プログラムの利用時間に応じた料金を請求する従量制課金システムがある。また、従来、プログラムの実行時間を計測し、プログラムの性能解析を行うことがある。このように、プログラムの実行時間を、プログラム単位で計測することが求められることがある。
しかしながら、仮想計算機システムでは、仮想マシンプログラムにおいて実行されたプログラムの実行時間を、プログラム単位で精度よく計測することが難しい場合がある。仮想マシンプログラムとは、仮想マシンを動作させるプログラムである。仮想マシンプログラムは、例えば、ゲストOSで以下の説明では、仮想マシンプログラムを「ゲストOS」と表記する場合がある。
例えば、ハイパーバイザ型の仮想計算機システムがある。ハイパーバイザ型の仮想計算機システムでは、ハイパーバイザが、ゲストOSのディスパッチ処理、ゲストOSが実行する特権命令やIO処理や割り込み処理などのエミュレート、リソースのスケジューリング、VMに対するリソースの割り当てなどを制御する。このとき、ハイパーバイザによって、VMが一時停止(スティール)させられ、ゲストOSやゲストOSにおいて実行されるプログラムが中断させられる期間がある。以下の説明では、VM共々、ゲストOSやゲストOSにおいて実行されるプログラムが中断させられる期間を「スティール期間」と表記する場合がある。
これに対し、ゲストOSやゲストOSにおいて実行されるプログラムは、ハイパーバイザによって中断させられたことを認識することが困難である。このため、ゲストOSやゲストOSにおいて実行されるプログラムが実行時間を計測する場合には、スティール期間分の時間を除外したうえでプログラム単位で実行時間を計測することは困難である。以下の説明では、スティール期間分の時間を「スティール時間」と表記する場合がある。
また、ゲストOS単位でスティール時間を計測する場合が考えられる。しかしながら、この場合であっても、計測されたゲストOS単位のスティール時間を、ゲストOSにおいて実行されたプログラム単位のスティール時間に分けて把握することは困難である。このため、ゲストOSにおいて実行されたプログラムの実行時間を、プログラム単位でスティール時間を除外して計測することは困難である。
また、上述したハイパーバイザ型の仮想計算機システムのほか、ホストOS上に仮想化ソフトウェアを動作させたホストOS型の仮想計算機システムがある。ホストOS型の仮想計算機システムでは、仮想化ソフトウェアが、ゲストOSのディスパッチ処理、ゲストOSが実行する特権命令やIO処理や割り込み処理などのエミュレート、リソースのスケジューリング、VMに対するリソースの割り当てなどを制御する。
このとき、ハイパーバイザ型の仮想計算機システムと同様に、VMが一時停止(スティール)させられ、VM共々、ゲストOSやゲストOSにおいて実行されるプログラムが中断させられることがある。そして、ハイパーバイザ型の仮想計算機システムと同様に、スティール期間分の時間を除外したうえで、プログラム単位で実行時間を計測することは困難である。
結果として、従量制課金システムにおいて、スティール時間を含んだプログラムの実行時間に基づいて、スティール時間についてもプログラムの利用者に料金を請求してしまう可能性がある。このため、従量制課金システムにおいて、プログラムの利用者に請求される料金の正確性が悪くなり、プログラムの利用者に対する公平性を担保することができない可能性がある。
また、結果として、スティール時間を含んだプログラムの実行時間に基づいてプログラムの性能解析を行ってしまい、精度よくプログラムの性能解析を行うことができない可能性がある。例えば、ゲストOSにおいて実行されたプログラムの内容に起因してプログラムの性能が低下したのか、ハイパーバイザの制御に起因してプログラムの性能が低下したのかを判別することが困難である。このため、VMにおいて問題が発生したときに、問題を解決するまでにかかる時間が長くなる可能性がある。
そこで、本実施の形態では、ゲストOSにおいて実行されたプログラムの実行時間を精度よく計測することができる実行時間補正方法について説明する。本実施の形態では、情報処理装置100が、ハイパーバイザ型の仮想計算機システムにおいて動作する場合について説明するが、これに限らない。例えば、情報処理装置100は、ホストOS型の仮想計算機システムにおいても、同様に動作することができる。
図1の例では、情報処理装置100は、サンプリングデータを取得する。サンプリングデータは、所定の時刻ごとに、当該時刻に仮想マシンプログラムにおいて実行中であるプログラムを示すデータである。
サンプリングデータは、例えば、1msごとにサンプリングされた、ゲストOSにおけるプログラムの実行状況を示すデータを含む。プログラムの実行状況を示すデータは、例えば、ゲストOSにおいて実行中であるプログラムを識別するデータである。また、プログラムの実行状況を示すデータは、ハイパーバイザがVMをスティールさせ、VM共々、ゲストOSやゲストOSにおけるプログラムが中断中であることを示すデータであってもよい。
情報処理装置100がサンプリングデータを取得する一例については、図4〜図6を用いて後述する。また、サンプリングデータを取得する技術については、例えば、特開2014−170482号公報や米国特許公開第2014/0259011号公報や下記論文(Yamamoto et al.)に記載の技術などを参照することができる。
Yamamoto et al. “Unified Performance Profiling of an Entire Virtualized Environment”, CANDAR, 2014.
プログラムは、例えば、プロセス、プロセス内のスレッド、スレッド内の関数である。プロセスは、具体的には、OSにおいて実行される単位のプログラムである。スレッドは、具体的には、1つのプロセスにおいて実行される単位のプログラムである。関数は、具体的には、スレッドにおいて実行される単位のプログラムである。
情報処理装置100は、取得したサンプリングデータに基づいて、ゲストOSが中断された期間を特定する。ゲストOSが中断された期間は、上述したスティール期間である。また、情報処理装置100は、ゲストOSが中断された期間の直前または直後の少なくともいずれかに実行中であるプログラムを特定する。そして、情報処理装置100は、プログラムの開始から終了までの時間から、ゲストOSが中断された期間分の時間を減算した結果を示すデータを生成する。
情報処理装置100は、例えば、ハイパーバイザがVMをスティールさせ、VM共々、ゲストOSやゲストOSにおけるプログラムが中断中であることを示すデータがサンプリングされた期間を、スティール期間として特定する。次に、情報処理装置100は、特定したスティール期間分の時間を算出する。
また、情報処理装置100は、特定したスティール期間の直前にゲストOSにおいて実行中であるプログラムPAを特定する。換言すれば、情報処理装置100は、特定したスティール期間において中断された可能性があるプログラムPAを特定する。次に、情報処理装置100は、特定したプログラムPAの開始から終了までの時間を算出する。
プログラムPAの開始から終了までの時間は、例えば、プログラムPAのExitイベントの情報などに基づいて算出可能である。また、プログラムPAの開始から終了までの時間は、例えば、ゲストOSやプログラムPAによって計測可能である。以下の説明では、プログラムの開始から終了までの時間を「プログラムの見かけ上の実行時間」と表記する場合がある。
そして、情報処理装置100は、プログラムPAの見かけ上の実行時間から、特定したスティール期間分の時間を減算した結果を示すデータを生成する。情報処理装置100は、生成したデータを、プログラムPAを識別するデータに対応付けて出力する。
これによれば、情報処理装置100は、見かけ上の実行時間ではなく、スティール期間分のスティール時間を除外したプログラムの実行時間を算出することができ、プログラムの実行時間を計測する精度の向上を図ることができる。これにより、情報処理装置100は、プログラムの実行時間に基づいて従量制課金システムを実現し、従量制課金システムにおけるプログラムの利用者に対する公平性を担保しやすくすることができる。
また、情報処理装置100は、スティール時間を除外したプログラムの実行時間に基づいて、性能解析を精度よく行うことができる。また、情報処理装置100は、ユーザに、スティール時間を除外したプログラムの実行時間を把握させることができ、プログラムの実行時間に基づいて性能解析を精度よく行うことができるようにする。
(情報処理装置100のハードウェア構成例)
次に、図2を用いて、図1に示した情報処理装置100のハードウェア構成例について説明する。
図2は、情報処理装置100のハードウェア構成例を示すブロック図である。図2において、情報処理装置100は、複数のCPU201と、メモリ202と、I/F(Interface)203と、ディスクドライブ204と、ディスク205と、を有する。また、各構成部は、バス200によってそれぞれ接続される。
ここで、CPU201は、情報処理装置100の全体の制御を司る。CPU201は、仮想計算機システムを実現するハイパーバイザを実行する。ハイパーバイザは、OSにおいてアプリケーションプログラムとして動作し、ゲストOSが動作できるようにする仮想化プログラムである。また、CPU201は、コンテキスト退避領域(Context Saving Area)と、コンテキスト退避領域を制御するためのコントロールレジスタとを有する。CPU201は、実行するプロセスが切り替わる都度、当該プロセスを識別する情報によってコントロールレジスタを更新する。CPU201は、VMを切り替える場合に、コントロールレジスタの内容をコンテキスト退避領域に退避させる。
また、CPU201は、ハードウェア関連のイベントのカウントを格納するパフォーマンスモニタカウンタを有する。パフォーマンスモニタカウンタは、一般的なシステム状況のチェック、およびパフォーマンス基準との比較判断に用いられる。パフォーマンスモニタカウンタの機能を用いることによって、情報処理装置100における処理を1ms〜1μsの間隔で計測することが可能になる。
メモリ202は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有する。具体的には、例えば、フラッシュROMやROMが各種プログラムを記憶し、RAMがCPU201のワークエリアとして使用される。メモリ202に記憶されるプログラムは、CPU201にロードされることで、コーディングされている処理をCPU201に実行させる。
I/F203は、通信回線を通じてネットワーク210に接続され、ネットワーク210を介して他のコンピュータに接続される。そして、I/F203は、ネットワーク210と内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。I/F203には、例えば、モデムやLAN(Local Area Network)アダプタなどを採用することができる。
ディスクドライブ204は、CPU201の制御にしたがってディスク205に対するデータのリード/ライトを制御する。ディスクドライブ204は、例えば、磁気ディスクドライブである。ディスク205は、ディスクドライブ204の制御で書き込まれたデータを記憶する不揮発メモリである。ディスク205は、例えば、磁気ディスク、光ディスクなどである。
情報処理装置100は、上述した構成部のほか、例えば、SSD(Solid State Drive)、半導体メモリ、キーボード、マウス、ディスプレイなどを有することにしてもよい。また、情報処理装置100は、ディスクドライブ204およびディスク205の代わりに、SSDおよび半導体メモリなどを有していてもよい。
(情報処理装置100の機能的構成例)
次に、図3を用いて、情報処理装置100の機能的構成例について説明する。
図3は、情報処理装置100の機能的構成例を示すブロック図である。情報処理装置100は、取得部301と、特定部302と、解析部303と、出力部304とを含む。取得部301〜出力部304は、制御部となる機能であり、例えば、図2に示したメモリ202、ディスク205などの記憶装置に記憶されたプログラムをCPU201に実行させることにより、または、I/F203により、その機能を実現する。各機能部の処理結果は、例えば、メモリ202、ディスク205などの記憶領域に記憶される。
取得部301は、サンプリングデータを取得する。サンプリングデータとは、所定の時刻ごとに、当該時刻に仮想マシンプログラムにおいて実行中であるプログラムを示すデータである。仮想マシンプログラムとは、仮想マシンを動作させるプログラムである。仮想マシンプログラムは、例えば、ゲストOSである。サンプリングデータは、さらに、仮想マシンを制御する制御プログラムによって仮想マシンが中断された期間を特定するデータを含む。仮想マシンを制御する制御プログラムとは、ハイパーバイザやホストOSである。
サンプリングデータは、例えば、1msごとにサンプリングされたゲストOSにおけるプログラムの実行状況を示すデータを含む。プログラムの実行状況を示すデータは、例えば、ゲストOSにおいて実行中であるプログラムを識別するデータである。また、プログラムの実行状況を示すデータは、ハイパーバイザがVMをスティールさせ、VM共々、ゲストOSやゲストOSにおけるプログラムが中断中であることを示すデータであってもよい。プログラムは、例えば、プロセス、プロセス内のスレッド、スレッド内の関数である。これにより、取得部301は、特定部302がプログラムのスティール期間を特定する際に用いられるサンプリングデータを、特定部302に出力することができる。
ここでは、取得部301が、情報処理装置100におけるサンプリングデータ400を取得する場合について説明したが、これに限らない。例えば、取得部301は、他のコンピュータにおけるサンプリングデータ400を、他のコンピュータから受信してもよい。この場合、情報処理装置100は、仮想計算機システムではなく、仮想計算機システムについての解析を行う解析装置であってもよい。
特定部302は、取得部301が取得したサンプリングデータに基づいて、仮想マシンプログラムが中断された期間を特定する。特定部302は、例えば、ゲストOSにおいて実行中であるプログラムを識別するデータがサンプリングされた時点の直後から、ゲストOSにおいて実行中であるプログラムを識別するデータがサンプリングされていない期間を特定する。これにより、特定部302は、ゲストOSにおいて実行されたプログラムが中断された期間を特定することができる。
また、特定部302は、仮想マシンプログラムが中断された期間として、例えば、仮想マシンが中断された期間を特定する。特定部302は、例えば、ゲストOSにおいて実行中であるプログラムを識別するデータがサンプリングされた時点の直後であって、ゲストOSやゲストOSにおけるプログラムが中断中であることを示すデータがサンプリングされた期間を特定する。これにより、特定部302は、ゲストOSにおいて実行されたプログラムが、ハイパーバイザがVMをスティールさせたことに応じてVM共々中断された期間を特定することができる。
解析部303は、取得部301が取得したサンプリングデータに基づいて、特定部302が特定した仮想マシンプログラムが中断された期間の直前または直後の少なくともいずれかに実行中であるプログラムを特定する。そして、解析部303は、特定したプログラムの開始から終了までの時間から、特定部302が特定した仮想マシンプログラムが中断された期間分の時間を減算した結果を示すデータを生成する。プログラムの開始から終了までの時間から、特定部302が特定した期間分の時間を減算した結果は、例えば、プログラムの実行時間である。
解析部303は、例えば、サンプリングデータのうち特定部302が特定した期間におけるサンプルの数に、サンプリング間隔(Sampling rate)1msを乗算して、特定部302が特定した期間分の時間を算出する。また、解析部303は、プログラムのExitイベントの情報などに基づいて、プログラムの実行を開始してから終了するまでの時間を算出する。また、解析部303は、プログラムまたはゲストOSから、プログラムまたはゲストOSが計測したプログラムの実行を開始してから終了するまでの時間を取得してもよい。
そして、解析部303は、プログラムの実行を開始してから終了するまでの時間から、特定部302が特定した期間分の時間を減算して、プログラムの実行時間を示すデータを生成する。これにより、解析部303は、プログラムの見かけ上の実行時間からスティール時間を除外することができ、スティール時間を除外したプログラムの実行時間を算出することができ、プログラムの実行時間を計測する精度の向上を図ることができる。
解析部303は、取得部301が取得したサンプリングデータに基づいて、特定部302が特定した仮想マシンプログラムが中断された期間の直前、かつ、直後に実行中であるプログラムを特定してもよい。これにより、解析部303は、スティール期間の前後で同じプログラムが実行中である場合に、スティール期間分のスティール時間をプログラムの見かけ上の実行時間から減算することができる。
一方で、解析部303は、プログラムの切り替えが行われた間に存在するスティール期間分のスティール時間は、いずれのプログラムの実行時間にも影響しないとして、いずれのプログラムの見かけ上の実行時間からも減算しないようにすることができる。ここで、特定部302および解析部303の処理は、サンプリングデータを時系列に沿って走査しながら、平行して行われてもよい。
出力部304は、プログラムを識別するデータと、特定部302が特定した期間に関するデータとを対応付けて出力する。プログラムを識別するデータは、例えば、プロセスのPIDである。出力部304は、例えば、プロセスのPIDに対応付けて、解析部303によって生成されたプロセスの実行時間を示すデータを出力する。出力形式は、例えば、ディスプレイへの表示、プリンタへの印刷出力、I/F203による外部装置への送信、または、メモリ202やディスク205などの記憶領域への記憶などがある。
これにより、出力部304は、スティール時間を除外したプログラムの実行時間を出力して、従量制課金システムにおけるプログラムの利用者に対する公平性を担保しやすくすることができる。また、出力部304は、スティール時間を除外したプログラムの実行時間を出力して、プログラムの実行時間に基づいてプログラムの性能解析を精度よく行うことができる。
また、出力部304は、ユーザに、スティール時間を除外したプログラムの実行時間を通知して、プログラムの実行中にハイパーバイザがVMをスティールさせ、VM共々、プログラムが中断されたことを把握させることができる。結果として、ユーザは、スティール時間を除外したプログラムの実行時間に基づいて、プログラムの性能解析を精度よく行うことができる。
(情報処理装置100の動作例1)
次に、図4〜図9を用いて、情報処理装置100の動作例1について説明する。
〈情報処理装置100がサンプリングデータ400を取得する一例〉
まず、図4および図5を用いて、情報処理装置100がサンプリングデータ400を取得する一例について説明する。情報処理装置100がサンプリングデータ400を取得する技術については、例えば、特開2014−170482号公報や米国特許公開第2014/0259011号公報や上記論文(Yamamoto et al.)に記載の技術などを参照することができる。
図4および図5は、情報処理装置100がサンプリングデータ400を取得する一例を示す説明図である。図4では、ハイパーバイザ405は、パフォーマンスモニタカウンタ(PMC:Performance Monitor Counter)からの定期的な割り込みを受け、コンテキスト退避領域403,404を参照してトレース情報を採取する。トレース情報は、ハイパーバイザ405の処理を時系列にしたがって配列した情報を含み、ハイパーバイザ405がVM401,402に指令した処理についての情報を含む。
トレース情報は、例えば、割り込みを受けた際に実行中であったVM401,402の処理を特定するVM番号と、コンテキスト退避領域403,404から採取された実行アドレス値およびページテーブルアドレス値と、プロセスの実行時間とを含む。定期的な割り込みは、例えば、予め設定されたサンプリング間隔にしたがって行われる。定期的な割り込みは、具体的には、1msごとに行われる。これにより、情報処理装置100は、ハイパーバイザ405の処理のうち、VM401,402が実行する処理を特定可能になる。
また、VM401,402は、ゲストOSにおいて実行されたプロセスのプロセスID、命令アドレス、プロセス名、および、関数名を含むシンボルマップ情報を取得し、ハイパーバイザ405に出力する。ハイパーバイザ405は、トレース情報と、VM401,402から出力されたシンボルマップ情報に基づいて、解析データを生成する。解析データは、定期的なサンプリング時点それぞれにCPU201において実行中であるプログラムを示すサンプルを、CPU201単位で時系列に沿って並べたデータである。そして、ハイパーバイザ405は、解析データのうち、ゲストOSにおいて実行中であるプログラムを示すサンプルを、ゲストOS単位で時系列に沿って並べたサンプリングデータ400を取得する。
具体的には、ハイパーバイザ405は、VM401,402に情報採取の開始指示を送信する。ハイパーバイザ405は、パフォーマンスモニタカウンタからの割り込みに応じて、定期的に、トレース情報を採取する。さらに、ハイパーバイザ405は、ハイパーバイザ405内のプロセスのExitイベントが発生すれば、ハイパーバイザ405内のプロセスについてのシンボルマップ情報を生成する。Exitイベントとは、例えば、プロセスの終了処理である。シンボルマップ情報は、プロセスを識別する情報と、プロセス内で実行される関数を識別する情報などを含む。
そして、ハイパーバイザ405は、サンプリングデータ400の取得を終了する時点まで、上述したトレース情報やシンボルマップ情報の採取を繰り返す。また、ハイパーバイザ405は、サンプリングデータ400の取得を終了する時点になると、ハイパーバイザ405において実行中のすべてのプロセスに関する情報を採取する。ハイパーバイザ405は、ハイパーバイザ405において実行中のすべてのプロセスについてのシンボルマップ情報を生成する。次に、ハイパーバイザ405は、VM401,402に情報採取の終了指示を送信する。そして、ハイパーバイザ405は、採取したトレース情報や生成したシンボルマップ情報を、メモリ202に記憶する。
一方で、VM401,402は、ハイパーバイザ405から出力された開始指示を受け付け、Exitイベントが発生すれば、Exitイベントの対象となったプログラムについてのシンボルマップ情報を生成する。そして、VM401,402は、ハイパーバイザ405から終了指示を受け付けると、VM401,402において実行中のすべてのプロセスについてのシンボルマップ情報を生成する。VM401,402は、生成したシンボルマップ情報を、ハイパーバイザ405に出力する。
ハイパーバイザ405は、メモリ202に記憶したトレース情報やシンボルマップ情報、および、VM401,402から出力されたシンボルマップ情報を取得する。ハイパーバイザ405は、取得したトレース情報やシンボルマップ情報に基づいて、CPU201において実行中であるプログラムを、CPU201単位で並べた解析データを生成する。ここで、図5の説明に移行し、情報処理装置100が、解析データに基づいて、サンプリングデータ400を取得する一例について説明する。
図5に示すように、解析データは、CPU201において実行中であるプログラムを、CPU201単位で時系列に沿って並べたデータである。図5の例では、解析データは、CPU0における、t1〜t2でのVM0の仮想CPU(vCPU)0のサンプル群A、t2〜t3でのVM1の仮想CPU0のサンプル群B、t3〜t4でのVM1の仮想CPU1のサンプル群Cを、順に含む。また、解析データは、CPU1における、t1〜t2でのVM1の仮想CPU1のサンプル群D、t2〜t3でのVM0の仮想CPU0のサンプル群E、t3〜t4でのVM1の仮想CPU1のサンプル群Fを、順に含む。
情報処理装置100は、解析データのうち、ゲストOSにおいて実行中であるプログラムを示すサンプルを、ゲストOS単位で時系列に沿って並べたサンプリングデータ400を取得する。情報処理装置100は、例えば、解析データのサンプルを、VMのうちゲストOSに割り当てられる仮想CPU単位で時系列に沿って並べ替える。
情報処理装置100は、具体的には、VM0のうち仮想CPU0が割り当てられたゲストOSについて、t1〜t2でのVM0の仮想CPU0のサンプル群A、t2〜t3でのVM0の仮想CPU0のサンプル群Eを順に並べる。また、情報処理装置100は、t3〜t4で実行中であるプログラムがなく、t3〜t4が空白期間であることを特定する。
情報処理装置100は、トレース情報に含まれるVM−Exit情報を参照して、t3〜t4の空白期間がハイパーバイザ405の制御によるスティール期間であるか、ハイパーバイザ405の制御によらないホールト(Halt)期間であるかを判定可能である。VM−Exit情報は、例えば、最後に発生したVMのexitイベントの情報である。
ここでは、情報処理装置100は、t3〜t4の空白期間がハイパーバイザ405の制御によるスティール期間であると判定する。そして、情報処理装置100は、サンプリングデータ400に、t3〜t4の空白期間におけるサンプルとして、スティールさせられたことを示す情報を記憶する。同様に、情報処理装置100は、解析データに基づいて、VM1の仮想CPU0や仮想CPU1についてもサンプリングデータ400を取得する。
ここでは、情報処理装置100が、空白期間がスティール期間であるかホールト期間であるかを判定する場合について説明したが、これに限らない。例えば、情報処理装置100は、空白期間がスティール期間であるかホールト期間であるかを判定する処理を省略して、空白期間をスティール期間として扱ってもよい。これにより、情報処理装置100は、処理量の低減化を図る。
このように、情報処理装置100は、ゲストOSのプログラム内容を修正しなくても、サンプリングデータ400を取得することができる。このため、情報処理装置100は、全仮想化環境であっても、準仮想化環境であっても動作することができる。全仮想化環境とは、仮想化しない環境でも用いられる通常のOSのプログラム内容を修正せずに、ゲストOSとして用いる環境である。準仮想化環境とは、仮想化しない環境で用いられる通常のOSのプログラム内容を、仮想化環境に合わせて修正してからゲストOSとして用いる環境である。
これにより、情報処理装置100は、ゲストOSがハイパーバイザ上で動作しているか否かをゲストOSが認識することが困難な場合であって、ゲストOSがハイパーバイザへの通信を開始することが困難な場合であっても、適用することができる。この場合であっても、情報処理装置100は、サンプリングデータ400を取得することができる。
〈サンプリングデータ400の一例〉
次に、図6を用いて、図4および図5において取得されたサンプリングデータ400の一例について説明する。
図6は、サンプリングデータ400の一例を示す説明図である。サンプリングデータ400は、1msごとにサンプリングが行われ、VMにおいて実行中であるプログラムの識別情報、または、スティール時間を示す情報が集められたデータである。プログラムの識別情報は、例えば、プロセスIDと、スレッドIDと、関数名とを含む。以下の説明では、プロセスID、スレッドIDを「PID」、「TID」と表記する場合がある。
サンプリングデータ400は、具体的には、VM名のフィールド601に対応付けて、PIDと、TIDと、関数名と、スティールフラグと、サンプリング時点とのフィールド602〜606を有する。サンプリングデータ400は、VMごとに各フィールド601〜606に情報が設定されることにより、サンプルs1〜s23をレコードとして記憶する。
VM名のフィールド601には、VMを識別する情報が設定される。PIDのフィールド602には、サンプリング時点の仮想マシンプログラムにおいて実行中であるプロセスを識別する情報が設定される。TIDのフィールド603には、プロセス内のスレッドのうち、サンプリング時点の仮想マシンプログラムにおいて実行中であるスレッドを識別する情報が設定される。関数名のフィールド604には、スレッド内の関数のうち、サンプリング時点の仮想マシンプログラムにおいて実行中である関数を識別する情報が設定される。
PIDと、TIDと、関数名とのフィールド602〜604には、サンプリング時点の仮想マシンプログラムにおいて実行中であるプログラムがなく、VMがスティールされている場合には、情報が設定されない。スティールフラグのフィールド605には、サンプリング時点の仮想マシンプログラムにおいて実行中であるプログラムがなく、VMがスティールされている場合には、スティールされたことを示す情報が設定される。スティールフラグのフィールド605には、サンプリング時点のVMがスティールされていない場合には、情報が設定されない。
サンプリング時点のフィールド606には、サンプリングが行われた時点を示す情報が設定される。サンプリングが行われた時点を示す情報は、サンプリングが1msごとに行われる場合、サンプリングが行われる都度1msずつ増加する時点を示す情報である。また、サンプリングが行われた時点を示す情報は、サンプリングが行われる都度取得された時刻であってもよい。
(情報処理装置100がスティール時間を算出する第1例)
次に、図7および図8を用いて、情報処理装置100がスティール時間を算出する第1例について説明する。
図7および図8は、情報処理装置100がスティール時間を算出する第1例を示す説明図である。図7(A)は、プログラムAの実行中にスティールされ、スティール期間の後にプログラムAが再開された場合である。このため、図7(A)では、プログラムAを識別する情報を含む複数のサンプルに続いて、スティールされたことを示す情報を含む複数のサンプルが続き、再びプログラムAを識別する情報を含む複数のサンプルに続く。
図7(A)の例では、情報処理装置100は、サンプリングデータ400を参照し、プログラムAを識別する情報を含むサンプルの直後に、スティールされたことを示す情報を含むサンプルが連続する期間を、プログラムAが中断された期間として特定する。以下の説明では、プログラムが中断された期間を「プログラムに属するスティール期間」と表記する場合がある。
これにより、情報処理装置100は、プログラム単位で、プログラムに属するスティール期間を特定可能になる。換言すれば、情報処理装置100は、プログラムに属するスティール期間分のスティール時間であって、プログラム実行時間から除外することが好ましいスティール時間を特定することができる。結果として、情報処理装置100は、プログラムの実行時間を計測する精度の向上を図ることができる。
図7(B)は、プログラムAの実行中にスティールされ、スティール期間の後にプログラムAが再開された直後にプログラムAが実行終了し、プログラムBが実行開始された場合である。このため、図7(B)では、プログラムAを識別する情報を含む複数のサンプルに続いて、スティールされたことを示す情報を含む複数のサンプルが続き、プログラムAを識別する情報を含むサンプルなしに、プログラムBを識別する情報を含むサンプルが続く。
図7(B)の例では、情報処理装置100は、サンプリングデータ400を参照し、プログラムAを識別する情報を含むサンプルの直後に、スティールされたことを示す情報を含むサンプルが連続する期間を、プログラムAに属するスティール期間として特定する。
これにより、情報処理装置100は、プログラム単位で、プログラムに属するスティール期間を特定可能になる。換言すれば、情報処理装置100は、スティール期間分のスティール時間を、どのプログラムの実行時間から除外するかを特定可能になり、プログラムの実行時間を計測する精度の向上を図ることができる。
図7(C)は、プログラムAの実行終了時にスティールされ、スティール期間の後にプログラムBが実行開始された場合である。このため、図7(C)では、プログラムAを識別する情報を含む複数のサンプルに続いて、スティールされたことを示す情報を含む複数のサンプルが続き、プログラムBを識別する情報を含むサンプルが続く。
図7(C)の例では、情報処理装置100は、サンプリングデータ400を参照し、プログラムAを識別する情報を含むサンプルの直後に、スティールされたことを示す情報を含むサンプルが連続する期間を、プログラムAに属するスティール期間として特定する。
これにより、情報処理装置100は、プログラム単位で、プログラムに属するスティール期間を特定可能になる。換言すれば、情報処理装置100は、スティール期間分のスティール時間を、どのプログラムの実行時間から除外するかを特定可能になり、プログラムの実行時間を計測する精度の向上を図ることができる。ここで、図8の説明に移行する。
図8に示すように、情報処理装置100は、プログラムに属するスティール期間を特定すると、プログラムに属するスティール期間にサンプリングされたサンプルに、プログラムを識別する情報を付与して、サンプリングデータ400を更新しておく。図8の例では、情報処理装置100は、サンプルs3〜s22のPIDと、TIDと、関数名とのフィールド602〜604に、PID「100」と、TID「10」と、関数名「F」とを設定する。これにより、情報処理装置100は、プログラム単位でスティール期間を記憶することができる。
また、情報処理装置100は、ゲストOSにおいて実行されたプログラムの実行時間を、プログラム単位で算出する。情報処理装置100は、例えば、下記式(1)を用いて、関数Fの実行期間に含まれるスティール期間それぞれの時間Δsteal_time(F)を算出する。ここで、Δnumber_of_sampling(A)は、関数Fのスティール期間におけるサンプル数である。sampling_rate_timeは、サンプリングの間隔である。サンプリングの間隔は、例えば、1msである。
Figure 0006672808
次に、情報処理装置100は、下記式(2)を用いて、関数Fの実行期間に含まれるスティール期間それぞれの時間Δsteal_time(F)の総和ΣΔsteal_time(F)を、関数Fのスティール時間steal_time(F)として算出する。
Figure 0006672808
同様に、情報処理装置100は、下記式(3)を用いて、プロセスPのスティール時間steal_time(P)を算出する。ここで、Δsteal_time(P)は、プロセスPの実行期間に含まれるスティール期間それぞれの時間である。
Figure 0006672808
また、情報処理装置100は、下記式(4)を用いて、スレッドTのスティール時間steal_time(T)を算出する。ここで、Δsteal_time(T)は、スレッドTの実行期間に含まれるスティール期間それぞれの時間である。
Figure 0006672808
これにより、情報処理装置100は、ゲストOSにおいて実行されたプログラムの実行時間を、プログラム単位でスティール時間を除外して算出することができる。このため、情報処理装置100は、プログラムの実行時間を精度よく計測することができる。
ここでは、サンプリング間隔が、一定であると見なした場合、例えば、1msであると見なした場合について説明したが、これに限らない。例えば、サンプリング間隔は、誤差によって一定にならない場合がある。そこで、情報処理装置100は、サンプリングデータ400に含まれるサンプリングが行われた時点を示す情報として、サンプリングが行われる都度取得された時刻を採用することにより、プログラムの実行時間の算出精度の向上を図ってもよい。
情報処理装置100は、例えば、サンプル間の時刻の差分をサンプリング間隔として算出する。情報処理装置100は、スティール期間の最初のサンプルから最後のサンプルまでのサンプリング間隔を積算し、スティール期間の時間Δsteal_timeを算出する。これにより、情報処理装置100は、上記式(2)〜(4)を用いて、関数Fのスティール時間steal_time(F)、プロセスPのスティール時間steal_time(P)、スレッドTのスティール時間steal_time(T)を算出する。
また、情報処理装置100は、サンプリング間隔を積算せず、スティール期間の最初のサンプルの時刻と最後のサンプルの時刻との差分を、スティール期間の時間Δsteal_timeとして算出してもよい。ここで、情報処理装置100は、サンプリングデータ400全体を読み込んでからスティール時間を算出してもよいし、サンプリングデータ400を時系列に沿って走査しながらスティール時間を算出してもよい。
(第1算出処理手順)
次に、図9を用いて、第1算出処理手順の一例について説明する。
図9は、第1算出処理手順の一例を示すフローチャートである。図9において、情報処理装置100は、変数n=0を設定する(ステップS901)。次に、情報処理装置100は、時系列に沿ってサンプリングデータ400から1サンプルの読み込みを行う(ステップS902)。
そして、情報処理装置100は、読み込むサンプルがあるか否かを判定する(ステップS903)。ここで、読み込むサンプルがある場合(ステップS903:Yes)、情報処理装置100は、読み込んだサンプルが、スティールであるか否かを判定する(ステップS904)。ここで、スティールではない場合(ステップS904:No)、情報処理装置100は、読み込んだサンプルのPID、TID、関数名を、直前プログラムの識別情報として記憶し(ステップS905)、ステップS902の処理に戻る。
一方で、スティールである場合(ステップS904:Yes)、情報処理装置100は、変数n=n+1を設定する(ステップS906)。次に、情報処理装置100は、時系列に沿ってサンプリングデータ400から1サンプルの読み込みを行う(ステップS907)。そして、情報処理装置100は、読み込んだサンプルが、スティールであるか否かを判定する(ステップS908)。ここで、スティールである場合(ステップS908:Yes)、情報処理装置100は、ステップS906の処理に戻る。
一方で、スティールではない場合(ステップS908:No)、情報処理装置100は、変数nと直前プログラムの識別情報とに基づいて、上記式(1)〜(4)などを用いて、プログラムのスティール時間をプログラム単位で積算する(ステップS909)。次に、情報処理装置100は、変数n=0に設定する(ステップS910)。そして、情報処理装置100は、ステップS902の処理に戻る。
また、ステップS903において読み込むサンプルがない場合(ステップS903:No)、情報処理装置100は、プログラム単位で積算したスティール時間に基づいてプログラム単位で実行時間を算出し(ステップS911)、第1算出処理を終了する。これにより、情報処理装置100は、プログラム単位でスティール時間を除外した実行時間を算出し、プログラムの実行時間を計測する精度の向上を図ることができる。
(情報処理装置100の動作例2)
次に、図10および図11を用いて、情報処理装置100の動作例2について説明する。
〈情報処理装置100がスティール時間を算出する第2例〉
まず、図10を用いて、情報処理装置100がスティール時間を算出する第2例について説明する。
図10は、情報処理装置100がスティール時間を算出する第2例を示す説明図である。ここで、あるプログラムの実行終了時にスティールされ、スティール期間の後に別のプログラムが実行開始された場合、スティール期間はいずれのプログラムにも影響しない。換言すれば、当該スティール期間は、いずれのプログラムにも属さない。
そこで、動作例2では、情報処理装置100は、いずれのプログラムにも属さないスティール期間を判別し、いずれのプログラムにも属さないスティール期間分のスティール時間についてはいずれのプログラムの見かけ上の実行時間からも減算しないようにする。
図10(D)は、プログラムAの実行中にスティールされ、スティール期間の後にプログラムAが再開された場合である。このため、図10(D)では、プログラムAを識別する情報を含む複数のサンプルに続いて、スティールされたことを示す情報を含む複数のサンプルが続き、再びプログラムAを識別する情報を含む複数のサンプルに続く。
図10(D)の例では、情報処理装置100は、サンプリングデータ400を参照し、プログラムAを識別する情報を含むサンプルに挟まれ、スティールされたことを示す情報を含むサンプルが連続する期間を特定する。そして、情報処理装置100は、特定した期間を、プログラムAに属するスティール期間とする。
これにより、情報処理装置100は、プログラム単位で、プログラムに属するスティール期間を特定可能になる。換言すれば、情報処理装置100は、プログラムに属するスティール期間分のスティール時間であって、プログラム実行時間から除外することが好ましいスティール時間を特定することができる。結果として、情報処理装置100は、プログラムの実行時間を計測する精度の向上を図ることができる。
図10(E)は、プログラムAの実行中にスティールされ、スティール期間の後にプログラムAが再開された直後にプログラムAが実行終了し、プログラムBが実行開始された場合である。このため、図10(E)では、プログラムAを識別する情報を含む複数のサンプルに続いて、スティールされたことを示す情報を含む複数のサンプルが続き、プログラムAを識別する情報を含むサンプルなしに、プログラムBを識別する情報を含むサンプルが続く。
図10(E)の例では、情報処理装置100は、サンプリングデータ400を参照し、プログラムAを識別する情報を含むサンプルと、プログラムBを識別する情報を含むサンプルとを特定する。次に、情報処理装置100は、プログラムAを識別する情報を含むサンプルと、プログラムBを識別する情報を含むサンプルとに挟まれた、スティールされたことを示す情報を含むサンプルが連続する期間を特定する。そして、情報処理装置100は、特定した期間をいずれのプログラムにも属さないスティール期間とする。
これにより、情報処理装置100は、いずれのプログラムにも属さないスティール期間を特定可能になる。換言すれば、情報処理装置100は、いずれのプログラムにも属さないスティール期間分のスティール時間であって、いずれのプログラム実行時間からも除外しなくてもよいスティール時間を特定することができる。結果として、情報処理装置100は、プログラムの実行時間を計測する精度の向上を図ることができる。
図10(F)は、プログラムAの実行終了時にスティールされ、スティール期間の後にプログラムBが実行開始された場合である。このため、図10(F)では、プログラムAを識別する情報を含む複数のサンプルに続いて、スティールされたことを示す情報を含む複数のサンプルが続き、プログラムBを識別する情報を含むサンプルが続く。
図10(F)の例では、情報処理装置100は、サンプリングデータ400を参照し、プログラムAを識別する情報を含むサンプルと、プログラムBを識別する情報を含むサンプルとを特定する。次に、情報処理装置100は、プログラムAを識別する情報を含むサンプルと、プログラムBを識別する情報を含むサンプルとに挟まれた、スティールされたことを示す情報を含むサンプルが連続する期間を特定する。そして、情報処理装置100は、特定した期間をいずれのプログラムにも属さないスティール期間とする。
これにより、情報処理装置100は、いずれのプログラムにも属さないスティール期間を特定可能になる。換言すれば、情報処理装置100は、いずれのプログラムにも属さないスティール期間分のスティール時間であって、いずれのプログラム実行時間からも除外しなくてもよいスティール時間を特定することができる。結果として、情報処理装置100は、プログラムの実行時間を計測する精度の向上を図ることができる。
そして、情報処理装置100は、動作例1と同様に、サンプリングデータ400のサンプルにプログラムを識別する情報を付与して、サンプリングデータ400を更新する。また、情報処理装置100は、動作例1と同様に、ゲストOSにおいて実行されるプログラムの実行時間をプログラム単位で計測する。これにより、情報処理装置100は、ゲストOSにおいて実行されるプログラムの実行時間をプログラム単位で精度よく計測することができる。
(第2算出処理手順)
次に、図11を用いて、第2算出処理手順の一例について説明する。
図11は、第2算出処理手順の一例を示すフローチャートである。図11において、情報処理装置100は、変数n=0を設定する(ステップS1101)。次に、情報処理装置100は、時系列に沿ってサンプリングデータ400から1サンプルの読み込みを行う(ステップS1102)。
そして、情報処理装置100は、読み込むサンプルがあるか否かを判定する(ステップS1103)。ここで、読み込むサンプルがある場合(ステップS1103:Yes)、情報処理装置100は、読み込んだサンプルが、スティールであるか否かを判定する(ステップS1104)。ここで、スティールではない場合(ステップS1104:No)、情報処理装置100は、読み込んだサンプルのPID、TID、関数名を、直前プログラムの識別情報として記憶し(ステップS1105)、ステップS1102の処理に戻る。
一方で、スティールである場合(ステップS1104:Yes)、情報処理装置100は、変数n=n+1を設定する(ステップS1106)。次に、情報処理装置100は、時系列に沿ってサンプリングデータ400から1サンプルの読み込みを行う(ステップS1107)。そして、情報処理装置100は、読み込んだサンプルが、スティールであるか否かを判定する(ステップS1108)。ここで、スティールである場合(ステップS1108:Yes)、情報処理装置100は、ステップS1106の処理に戻る。
一方で、スティールではない場合(ステップS1108:No)、情報処理装置100は、読み込んだサンプルのPID、TID、関数名が、直前プログラムの識別情報と一致するか否かを判定する(ステップS1109)。ここで、一致しない場合(ステップS1109:No)、情報処理装置100は、ステップS1111の処理に移行する。
一方で、一致する場合(ステップS1109:Yes)、情報処理装置100は、変数nと直前プログラムの識別情報とに基づいて、上記式(1)〜(4)などを用いて、プログラムのスティール時間をプログラム単位で積算する(ステップS1110)。次に、情報処理装置100は、変数n=0に設定する(ステップS1111)。そして、情報処理装置100は、ステップS1102の処理に戻る。
また、ステップS1103において読み込むサンプルがない場合(ステップS1103:No)、情報処理装置100は、プログラム単位で積算したスティール時間に基づいてプログラム単位で実行時間を算出し(ステップS1112)、第2算出処理を終了する。これにより、情報処理装置100は、プログラム単位でスティール時間を除外した実行時間を算出し、プログラムの実行時間を計測する精度の向上を図ることができる。
(情報処理装置100の動作例3)
次に、図12および図13を用いて、情報処理装置100の動作例3について説明する。まず、情報処理装置100は、動作例1や動作例2と同様に、プログラムに属するスティール期間を特定し、プログラムに属するスティール期間にサンプリングされたサンプルにプログラムを識別する情報を付与して、サンプリングデータ400を更新する。
〈情報処理装置100がスティール時間を算出する第3例〉
次に、図12を用いて、情報処理装置100がスティール時間を算出する第3例について説明する。
図12は、情報処理装置100がスティール時間を算出する第3例を示す説明図である。情報処理装置100は、動作例1や動作例2とは異なり、プロファイル解析を行うことにより、スティール時間を算出してもよい。
情報処理装置100は、例えば、サンプリングデータ400のうち「PID=P、TID=T、関数名=F、[steal]」が設定されたサンプルの割合を、%(PID=P,TID=T,関数名=steal(F))として計測する。そして、情報処理装置100は、下記式(5)を用いて、関数Fのスティール時間steal_time(F)を算出する。ここで、time(F)は、関数Fの実行を開始してから終了するまでの時間である。
Figure 0006672808
同様に、情報処理装置100は、サンプリングデータ400のうち「PID=P、[steal]」が設定されたサンプルの割合を、%(PID=steal(P))として計測する。そして、情報処理装置100は、下記式(6)を用いて、プロセスPのスティール時間steal_time(P)を算出する。ここで、time(P)は、プロセスPの実行を開始してから終了するまでの時間である。
Figure 0006672808
同様に、情報処理装置100は、サンプリングデータ400のうち「PID=P、TID=T、[steal]」が設定されたサンプルの割合を、%(PID=P,TID=steal(T))として計測する。そして、情報処理装置100は、下記式(7)を用いて、スレッドTのスティール時間steal_time(T)を算出する。ここで、time(T)は、スレッドTの実行を開始してから終了するまでの時間である。
Figure 0006672808
(第3算出処理手順)
次に、図13を用いて、第3算出処理手順の一例について説明する。
図13は、第3算出処理手順の一例を示すフローチャートである。図13において、情報処理装置100は、時系列に沿ってサンプリングデータ400から1サンプルの読み込みを行う(ステップS1301)。
次に、情報処理装置100は、読み込むサンプルがあるか否かを判定する(ステップS1302)。ここで、読み込むサンプルがある場合(ステップS1302:Yes)、情報処理装置100は、読み込んだサンプルが、スティールであるか否かを判定する(ステップS1303)。ここで、スティールではない場合(ステップS1303:No)、情報処理装置100は、ステップS1307の処理に移行する。
一方で、スティールである場合(ステップS1303:Yes)、情報処理装置100は、読み込んだサンプルのPID、TID、関数名を、読み込んだサンプルに付与してサンプリングデータ400を更新する(ステップS1304)。
次に、情報処理装置100は、時系列に沿ってサンプリングデータ400から1サンプルの読み込みを行う(ステップS1305)。そして、情報処理装置100は、読み込んだサンプルが、スティールであるか否かを判定する(ステップS1306)。ここで、スティールである場合(ステップS1306:Yes)、情報処理装置100は、ステップS1304の処理に戻る。
一方で、スティールではない場合(ステップS1306:No)、情報処理装置100は、読み込んだサンプルのPID、TID、関数名を、直前プログラムの識別情報として記憶し(ステップS1307)、ステップS1301の処理に戻る。
また、ステップS1302において読み込むサンプルがない場合(ステップS1302:No)、情報処理装置100は、第3算出処理を終了する。これにより、情報処理装置100は、プロファイル解析を行って、サンプリングデータ400のうち、スティール期間についてのサンプルの割合を、プログラム単位で算出することができ、プログラム単位でスティール時間を算出可能にすることができる。
以上説明したように、情報処理装置100によれば、所定の時刻ごとに、当該時刻に仮想マシンプログラムにおいて実行中であるプログラムを示すサンプリングデータ400を取得することができる。次に、情報処理装置100によれば、サンプリングデータ400に基づいて、仮想マシンプログラムが中断された期間を特定することができる。また、情報処理装置100によれば、サンプリングデータ400に基づいて、仮想マシンプログラムが中断された期間の直前または直後の少なくともいずれかに実行中であるプログラムを特定することができる。
そして、情報処理装置100は、サンプリングデータ400に基づいて、プログラムの開始から終了までの時間から、仮想マシンプログラムが中断された期間分の時間を減算した結果を示すデータを生成し、プログラムを識別するデータに対応付けて出力することができる。これにより、情報処理装置100は、スティール時間を算出して、スティール時間を除外したプログラムの実行時間を算出することができ、プログラムの実行時間を計測する精度の向上を図ることができる。
また、情報処理装置100によれば、取得したサンプリングデータ400に基づいて、仮想マシンプログラムが中断された期間の直前、かつ、直後に実行中であるプログラムの開始から終了までの時間から、期間分の時間を減算した結果を示すデータを生成することができる。そして、情報処理装置100によれば、生成したデータを、プログラムを識別するデータに対応付けて出力することができる。これにより、情報処理装置100は、プログラムの切り替えが行われる間にあるスティール期間については、プログラムの実行を開始してから終了するまでの時間から減算しないようにして、プログラムの実行時間を計測する精度の向上を図ることができる。
また、情報処理装置100によれば、仮想マシンプログラムが中断された期間として、仮想マシンが中断された期間を採用することができる。これにより、情報処理装置100は、ハイパーバイザの制御によらず仮想マシンプログラムが中断された期間についてはスティール期間として扱わず、プログラムの実行時間を計測する精度の向上を図ることができる。
また、情報処理装置100によれば、実行時間を示すデータを生成する対象のプログラムとして、仮想マシンプログラムにおいて実行するプロセス、プロセス内のスレッド、または、スレッド内の関数の少なくともいずれかを採用することができる。これにより、情報処理装置100は、異なる実行単位のプログラムそれぞれのスティール時間を除外した実行時間を算出することができる。
なお、本実施の形態で説明した実行時間補正方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本実行時間補正プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本実行時間補正プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)所定の時刻ごとに、当該時刻に仮想マシンにおいて実行中であるプログラムを示すデータを取得し、
取得した前記データに基づいて、前記仮想マシンプログラムが中断された期間の直前または直後の少なくともいずれかに実行中であるプログラムの開始から終了までの時間から、前記期間分の時間を減算した結果を示すデータを、前記プログラムを識別するデータに対応付けて出力する、
制御部を有することを特徴とする情報処理装置。
(付記2)前記制御部は、
取得した前記データに基づいて、前記仮想マシンプログラムが中断された期間の直前、かつ、直後に実行中であるプログラムの開始から終了までの時間から、前記期間分の時間を減算した結果を示すデータを、前記プログラムを識別するデータに対応付けて出力する、ことを特徴とする付記1に記載の情報処理装置。
(付記3)取得した前記データは、さらに、前記仮想マシンを制御する制御プログラムによって前記仮想マシンが中断された期間を特定するデータを含み、
前記仮想マシンプログラムが中断された期間は、前記仮想マシンが中断された期間である、ことを特徴とする付記1または2に記載の情報処理装置。
(付記4)前記プログラムは、前記仮想マシンプログラムにおいて実行するプロセス、プロセス内のスレッド、または、スレッド内の関数の少なくともいずれかである、ことを特徴とする付記1〜3のいずれか一つに記載の情報処理装置。
(付記5)コンピュータが、
所定の時刻ごとに、当該時刻に仮想マシンにおいて実行中であるプログラムを示すデータを取得し、
取得した前記データに基づいて、前記仮想マシンプログラムが中断された期間の直前または直後の少なくともいずれかに実行中であるプログラムの開始から終了までの時間から、前記期間分の時間を減算した結果を示すデータを、前記プログラムを識別するデータに対応付けて出力する、
処理を実行することを特徴とする実行時間補正方法。
(付記6)コンピュータに、
所定の時刻ごとに、当該時刻に仮想マシンにおいて実行中であるプログラムを示すデータを取得し、
取得した前記データに基づいて、前記仮想マシンプログラムが中断された期間の直前または直後の少なくともいずれかに実行中であるプログラムの開始から終了までの時間から、前記期間分の時間を減算した結果を示すデータを、前記プログラムを識別するデータに対応付けて出力する、
処理を実行させることを特徴とする実行時間補正プログラム。
100 情報処理装置
200 バス
201 CPU
202 メモリ
203 I/F
204 ディスクドライブ
205 ディスク
210 ネットワーク
301 取得部
302 特定部
303 解析部
304 出力部
400 サンプリングデータ
401,402 VM
403,404 コンテキスト退避領域
405 ハイパーバイザ
601〜606 フィールド
s1〜s23 サンプル

Claims (4)

  1. 所定の時刻ごとに、当該時刻に仮想マシンにおいて実行中であるプログラムを示すデータを取得し、
    取得した前記データに基づいて、前記仮想マシンにおいてプログラムの実行が中断された期間の直前および直後実行中であるプログラムの開始から終了までの時間から、前記期間分の時間を減算した結果を示すデータを、前記直前および直後に実行中であるプログラムを識別するデータに対応付けて出力する、
    制御部を有することを特徴とする情報処理装置。
  2. 取得した前記データは、さらに、前記仮想マシンを制御する制御プログラムによって前記仮想マシンが中断された期間を特定するデータを含み、
    前記仮想マシンにおいてプログラムの実行が中断された期間は、前記仮想マシンが中断された期間である、ことを特徴とする請求項1に記載の情報処理装置。
  3. コンピュータが、
    所定の時刻ごとに、当該時刻に仮想マシンにおいて実行中であるプログラムを示すデータを取得し、
    取得した前記データに基づいて、前記仮想マシンにおいてプログラムの実行が中断された期間の直前および直後に実行中であるプログラムの開始から終了までの時間から、前記期間分の時間を減算した結果を示すデータを、前記直前および直後に実行中であるプログラムを識別するデータに対応付けて出力する、
    処理を実行することを特徴とする実行時間補正方法。
  4. コンピュータに、
    所定の時刻ごとに、当該時刻に仮想マシンにおいて実行中であるプログラムを示すデータを取得し、
    取得した前記データに基づいて、前記仮想マシンにおいてプログラムの実行が中断された期間の直前および直後に実行中であるプログラムの開始から終了までの時間から、前記期間分の時間を減算した結果を示すデータを、前記直前および直後に実行中であるプログラムを識別するデータに対応付けて出力する、
    処理を実行させることを特徴とする実行時間補正プログラム。
JP2016004151A 2016-01-13 2016-01-13 情報処理装置、実行時間補正方法、および実行時間補正プログラム Active JP6672808B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2016004151A JP6672808B2 (ja) 2016-01-13 2016-01-13 情報処理装置、実行時間補正方法、および実行時間補正プログラム
US15/384,994 US10409636B2 (en) 2016-01-13 2016-12-20 Apparatus and method to correct an execution time of a program executed by a virtual machine

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016004151A JP6672808B2 (ja) 2016-01-13 2016-01-13 情報処理装置、実行時間補正方法、および実行時間補正プログラム

Publications (2)

Publication Number Publication Date
JP2017126146A JP2017126146A (ja) 2017-07-20
JP6672808B2 true JP6672808B2 (ja) 2020-03-25

Family

ID=59275712

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016004151A Active JP6672808B2 (ja) 2016-01-13 2016-01-13 情報処理装置、実行時間補正方法、および実行時間補正プログラム

Country Status (2)

Country Link
US (1) US10409636B2 (ja)
JP (1) JP6672808B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6691295B2 (ja) * 2016-07-01 2020-04-28 富士通株式会社 情報処理装置、プログラム実行状態表示方法およびプログラム実行状態表示プログラム
CN109783221B (zh) * 2017-11-14 2020-12-29 ***通信有限公司研究院 一种虚拟机资源分配方法、装置及资源服务器
WO2021258340A1 (zh) * 2020-06-24 2021-12-30 京东方科技集团股份有限公司 发布***、推送方法、应用设备、接收装置及服务管理设备

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0468451A (ja) * 1990-07-09 1992-03-04 Mitsubishi Electric Corp プログラム実行時間分析装置
EP1012722B1 (en) * 1997-05-14 2002-08-07 Compuware Corporation Accurate profile and timing information for multitasking systems
US6002872A (en) * 1998-03-31 1999-12-14 International Machines Corporation Method and apparatus for structured profiling of data processing systems and applications
JP3491617B2 (ja) * 2001-03-01 2004-01-26 日本電気株式会社 運用レポート作成方式、運用レポート作成方法および運用レポート作成用プログラム
JP2005025372A (ja) * 2003-06-30 2005-01-27 Toshiba Corp 計算機システムのcpu負荷分析装置、そのcpu負荷分析方法及びcpu負荷分析用プログラム
US20060156072A1 (en) * 2004-01-10 2006-07-13 Prakash Khot System and method for monitoring a computer apparatus
US7698705B1 (en) * 2004-10-19 2010-04-13 Oracle America, Inc. Method and system for managing CPU time consumption
JP4899511B2 (ja) * 2006-02-08 2012-03-21 富士通株式会社 システム分析プログラム、システム分析装置、およびシステム分析方法
JP4871174B2 (ja) * 2007-03-09 2012-02-08 株式会社日立製作所 仮想計算機システム
JP5326374B2 (ja) 2008-06-19 2013-10-30 富士通セミコンダクター株式会社 プロセッサ、性能プロファイリング装置、性能プロファイリングプログラムおよび性能プロファイリング方法
JP2014139702A (ja) 2011-04-28 2014-07-31 Panasonic Corp 仮想計算機システムとその制御方法、プログラム、および集積回路
JP6079317B2 (ja) 2013-03-05 2017-02-15 富士通株式会社 仮想計算機システム及びその管理方法並びに仮想計算機システムの管理プログラム

Also Published As

Publication number Publication date
US10409636B2 (en) 2019-09-10
JP2017126146A (ja) 2017-07-20
US20170199761A1 (en) 2017-07-13

Similar Documents

Publication Publication Date Title
US11609840B2 (en) Systems, methods, and devices for vertically integrated instrumentation and trace reconstruction
CN106462488B (zh) 调试期间的性能优化提示呈现
US10452417B2 (en) Methods, apparatus, and articles of manufacture to virtualize performance counters
JP5353227B2 (ja) 性能測定プログラム及び性能測定方法並びに性能測定機能を有する情報処理装置。
US8418148B2 (en) Thread execution analyzer
JP6672808B2 (ja) 情報処理装置、実行時間補正方法、および実行時間補正プログラム
KR20110070468A (ko) 인스트루먼테이션 실행 장치 및 방법
US20150006961A1 (en) Capturing trace information using annotated trace output
US10922779B2 (en) Techniques for multi-mode graphics processing unit profiling
CN107003828B (zh) 图形指令的仪器化
Li et al. Application execution time prediction for effective cpu provisioning in virtualization environment
Rajotte et al. Real‐time linux analysis using low‐impact tracer
US8539171B2 (en) Analysis and timeline visualization of storage channels
US12001316B2 (en) Systems, methods, and devices for vertically integrated instrumentation and trace reconstruction
JP2008234354A (ja) Cpu負荷分析装置およびプログラム
JP2019125134A (ja) 検証支援プログラム、検証支援方法、および情報処理装置
JPH0934754A (ja) プログラムの性能測定装置と方法
Tripp et al. Tightfit: Adaptive parallelization with foresight
JP2014002443A (ja) 使用量算出装置及びコンピュータプログラム及び使用量算出方法
CN116594750A (zh) 一种函数调用收集方法、装置、设备、存储介质及产品
Redegeld Formal verification of control software in X-Ray systems
Odell et al. Browser Developer Tools

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180912

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190730

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190903

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20191030

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20200204

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200217

R150 Certificate of patent or registration of utility model

Ref document number: 6672808

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150