JP6540340B2 - Function call information collecting method and function call information collecting program - Google Patents

Function call information collecting method and function call information collecting program Download PDF

Info

Publication number
JP6540340B2
JP6540340B2 JP2015152834A JP2015152834A JP6540340B2 JP 6540340 B2 JP6540340 B2 JP 6540340B2 JP 2015152834 A JP2015152834 A JP 2015152834A JP 2015152834 A JP2015152834 A JP 2015152834A JP 6540340 B2 JP6540340 B2 JP 6540340B2
Authority
JP
Japan
Prior art keywords
call information
function
compressed
program
information
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
JP2015152834A
Other languages
Japanese (ja)
Other versions
JP2017033303A (en
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 JP2015152834A priority Critical patent/JP6540340B2/en
Priority to US15/168,282 priority patent/US9858170B2/en
Publication of JP2017033303A publication Critical patent/JP2017033303A/en
Application granted granted Critical
Publication of JP6540340B2 publication Critical patent/JP6540340B2/en
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/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • 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
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/302Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3024Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3065Monitoring arrangements determined by the means or processing involved in reporting the monitored data
    • G06F11/3072Monitoring arrangements determined by the means or processing involved in reporting the monitored data where the reporting involves data filtering, e.g. pattern matching, time or event triggered, adaptive or policy-based reporting
    • G06F11/3082Monitoring arrangements determined by the means or processing involved in reporting the monitored data where the reporting involves data filtering, e.g. pattern matching, time or event triggered, adaptive or policy-based reporting the data filtering being achieved by aggregating or compressing the monitored data
    • 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
    • G06F11/348Circuit details, i.e. tracer hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/865Monitoring of software
    • 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)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明は、関数呼び出し情報収集方法及び関数呼び出し情報収集プログラムに関する。   The present invention relates to a function call information collection method and a function call information collection program.

プログラムの実行性能を高めたり、性能特性を分析することを目的として、プログラムの性能プロファイルを採取することが行われる。性能プロファイルには、例えば、プログラム実行中に処理された関数の実行頻度がある。実行頻度の高い関数の性能を向上させることで、プログラム全体の性能を向上させることができる。   A program performance profile is collected for the purpose of enhancing program execution performance and analyzing performance characteristics. The performance profile includes, for example, the frequency of execution of functions processed during program execution. By improving the performance of frequently executed functions, the performance of the entire program can be improved.

実行頻度を求める方法の1つとして、一定時間毎にCPUの命令カウンタの値すなわち実行番地をサンプリングしてメモリ等に保存し、プログラムの実行終了後に保存した番地に対応する関数を決定することで関数毎の出現回数を実行回数として算出する方法がある。出現回数は、一定時間毎にサンプリングされたタイミングで実行されている関数の回数であり、実際に関数が実行された回数とは異なる。ただし、繰り返し実行される関数は実行時間が長くなり、繰り返し実行される関数の出現回数は多くなる。   One of the methods to determine the execution frequency is to sample the value of the CPU's instruction counter, that is, the execution address, at fixed intervals, save it in a memory etc, and determine the function corresponding to the saved address after program execution is completed. There is a method of calculating the number of occurrences of each function as the number of executions. The number of occurrences is the number of functions executed at timings sampled at fixed time intervals, which is different from the number of times the function is actually executed. However, the function to be repeatedly executed has a long execution time, and the number of appearances of the function to be repeatedly executed is large.

関数の実行頻度は、関数の呼び出し関係に基づいて分析されることが多い。例えば、関数Cの実行回数を100回とするとき、80回は関数A→関数B→関数Cの順で呼ばれた場合であり、残りの20回は関数X→関数Y→関数Z→関数Cの順で呼ばれた場合であるといった分析が行われる。   The execution frequency of a function is often analyzed based on the calling relationship of the function. For example, assuming that the execution number of the function C is 100 times, 80 times is the case of being called in the order of function A → function B → function C, and the remaining 20 times are function X → function Y → function Z → function It is analyzed that the case is called in the order of C.

なお、メソッドを一例とするプロファイル情報取得対象を指定し、指定されたプロファイル情報取得対象が実行中か否かを一定時間間隔で監視し、実行中であるときにプロファイル情報を取得することで、取得のためのオーバヘッドを小さくする従来技術がある。   A profile information acquisition target, for example, a method, is specified, and whether or not the specified profile information acquisition target is being executed is monitored at constant time intervals, and profile information is acquired when the target is being executed, There are prior art techniques that reduce the overhead for acquisition.

また、ソースプログラム中の関数呼び出しを検出してコールペアの種別毎に識別番号を付し、識別番号毎に関数呼び出しの回数を格納するテーブル領域を設定することで、プロファイル処理時のメモリ領域とオーバヘッドを削減する従来技術がある。   Also, by detecting function calls in the source program, assigning identification numbers to each type of call pair, and setting a table area for storing the number of function calls for each identification number, memory area and overhead during profile processing There is a prior art to reduce the

また、ソースプログラムに、動的呼び出し側関数と動的呼び出され側関数の組み合わせである動的コールペア毎に呼び出し回数を格納するテーブルの領域を設定する処理を挿入することで、コールペア情報を収集する際の計算量とメモリ量を削減する従来技術がある。   Also, call pair information is collected by inserting in the source program a process to set the area of the table that stores the number of calls for each dynamic call pair that is a combination of the dynamic calling function and the dynamic calling side function. There is a conventional technique for reducing the amount of calculation and memory required for the process.

特開2005−141392号公報Unexamined-Japanese-Patent No. 2005-141392 特開平11−212837号公報Japanese Patent Application Laid-Open No. 11-212837 特開2006−202134号公報JP, 2006-202134, A

関数の呼び出し関係に基づいて関数の実行頻度を分析する場合、関数呼び出し関係の情報もメモリに格納する必要があり、メモリに格納されるプロファイル情報が多くなるという問題がある。メモリに格納されるプロファイル情報が多くなると、プロファイル情報の採取対象であるプログラムの実行性能に影響を与える場合もある。   When analyzing the execution frequency of a function based on the calling relationship of the function, the information on the calling relationship of the function also needs to be stored in the memory, and there is a problem that many pieces of profile information stored in the memory. When the amount of profile information stored in the memory increases, the execution performance of the program for which profile information is to be collected may be affected.

本発明は、1つの側面では、関数呼び出し関係の情報のメモリ上の量を削減することを目的とする。   The present invention, in one aspect, aims to reduce the amount of memory of function call related information.

本願の開示する関数呼び出し情報収集方法は、1つの態様において、関数が実行される際に、該関数の呼び出し情報を収集し、収集した呼び出し情報を非可逆圧縮するか否かを選択する処理をコンピュータが実行する。そして、非可逆圧縮を選択した場合には、前記呼び出し情報を非可逆圧縮してサンプリングデータとして記憶部に格納し、非可逆圧縮を選択しなかった場合には、前記呼び出し情報を圧縮することなく、又は、可逆圧縮して前記記憶部にサンプリングデータとして格納し、前記記憶部に格納したサンプリングデータを読み出し、該読み出したサンプリングデータに含まれる圧縮されなかった呼び出し情報又は可逆圧縮された呼び出し情報を用いて、非可逆圧縮された呼び出し情報と、圧縮されなかった呼び出し情報又は可逆圧縮された呼び出し情報とを対応付けた逆圧縮表を作成し、非可逆圧縮された呼び出し情報から元の呼び出し情報を前記逆圧縮表に基づいて復元し、圧縮されなかった呼び出し情報又は可逆圧縮された呼び出し情報と復元された呼び出し情報に基づいて関数の呼び出し関係を集計する処理をコンピュータが実行する。 In one aspect, the function call information collection method disclosed in the present application is a process of collecting call information of the function when the function is executed, and selecting whether to irreversibly compress the collected call information. Computer runs. When the lossy compression is selected, the call information is losslessly compressed and stored as sampling data in the storage unit. When the lossless compression is not selected, the call information is not compressed. Alternatively, the data is losslessly compressed and stored as sampling data in the storage unit, and the sampling data stored in the storage unit is read out, and the non-compressed call information or losslessly-compressed call information included in the read sampling data is read Create an inverse compression table that associates lossy-compressed call information with non-compressed call information or lossless-compressed call information, and uses original loss information from lossy-compressed call information Based on the reverse compression table, the call information that has not been compressed and is not compressed or the losslessly compressed call information Computer executes processing for aggregating the relation of calls on the basis of the call information.

1実施態様によれば、関数呼び出し関係の情報のメモリ上の量を削減することができる。   According to one embodiment, the amount of memory of function call relationship information can be reduced.

図1は、実施例に係る性能情報収集プログラムを説明するための図である。FIG. 1 is a diagram for explaining a performance information collection program according to an embodiment. 図2は、性能収集用割込みプログラムの動作を説明するための図である。FIG. 2 is a diagram for explaining the operation of the performance collection interrupt program. 図3は、性能収集対象のプログラムの動作を説明するための図である。FIG. 3 is a diagram for explaining the operation of a program whose performance is to be collected. 図4は、関数呼び出し時にスタックに積まれるデータを説明するための図である。FIG. 4 is a diagram for explaining data stacked on the stack at the time of function call. 図5Aは、関数の呼び出し時に実行されるコードの一例を示す図である。FIG. 5A is a diagram showing an example of code executed when calling a function. 図5Bは、関数の戻り時に実行されるコードの一例を示す図である。FIG. 5B is a diagram showing an example of code executed upon return of the function. 図6は、サンプリングデータの形式を示す図である。FIG. 6 is a diagram showing the format of sampling data. 図7は、unwind_stackプログラムの処理のフローを示すフローチャートである。FIG. 7 is a flowchart showing the flow of processing of the unwind_stack program. 図8は、分析プログラムの機能構成を示す図である。FIG. 8 is a diagram showing a functional configuration of an analysis program. 図9Aは、分析プログラムの第1のパスを説明するための図である。FIG. 9A is a diagram for explaining a first pass of the analysis program. 図9Bは、分析プログラムの第2のパスを説明するための図である。FIG. 9B is a diagram for explaining a second pass of the analysis program. 図10Aは、第1のパスの処理のフローを示すフローチャートである。FIG. 10A is a flowchart showing the flow of processing of the first pass. 図10Bは、第2のパスの処理のフローを示すフローチャートであるFIG. 10B is a flowchart showing the flow of processing of the second pass. 図11Aは、サンプリング結果の集計処理の第1の例を示すフローチャートである。FIG. 11A is a flowchart illustrating a first example of tallying processing of sampling results. 図11Bは、サンプリング結果の集計処理の第2の例を示すフローチャートである。FIG. 11B is a flowchart illustrating a second example of tallying processing of sampling results. 図12は、トライ木の一例を示す図である。FIG. 12 is a diagram showing an example of a trie tree. 図13は、性能情報収集プログラムを実行するコンピュータの構成を示す図である。FIG. 13 is a diagram showing the configuration of a computer that executes the performance information collection program.

以下に、本願の開示する関数呼び出し情報収集方法及び関数呼び出し情報収集プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。   Hereinafter, embodiments of the function call information collection method and the function call information collection program disclosed in the present application will be described in detail based on the drawings. Note that this embodiment does not limit the disclosed technology.

まず、実施例に係る性能情報収集プログラムについて説明する。図1は、実施例に係る性能情報収集プログラムを説明するための図である。図1に示すように、性能情報収集プログラム1は、サンプリングプログラム2と、分析プログラム4とを有する。   First, a performance information collection program according to an embodiment will be described. FIG. 1 is a diagram for explaining a performance information collection program according to an embodiment. As shown in FIG. 1, the performance information collection program 1 has a sampling program 2 and an analysis program 4.

サンプリングプログラム2は、関数呼び出し関係の情報をサンプリングするためのプログラムであり、サンプリングした関数呼び出し関係の情報をサンプリングデータとしてサンプリングデータ記憶部3に格納する。サンプリングプログラム2は、unwind_stackプログラム21と、性能収集用割込みプログラム22を有する。   The sampling program 2 is a program for sampling information on function calling relationship, and stores the information on the sampled function calling relationship in the sampling data storage unit 3 as sampling data. The sampling program 2 has an unwind_stack program 21 and a performance collection interrupt program 22.

unwind_stackプログラム21は、スタックから関数呼び出し関係の情報を取得してサンプリングデータとしてレジスタに格納する。unwind_stackプログラム21は、性能収集が行われるプログラムである性能収集対象プログラムの各関数の実行開始時に実行される。   The unwind_stack program 21 acquires function call relationship information from the stack and stores it as sampling data in a register. The unwind_stack program 21 is executed at the start of execution of each function of the performance collection target program, which is a program for which performance collection is performed.

性能収集用割込みプログラム22は、一定時間間隔で起動され、unwind_stackプログラム21がレジスタに格納したサンプリングデータをメモリに格納する。メモリに格納されたサンプリングデータは、性能情報の収集が終了した時点等にサンプリングデータ記憶部3に書き出される。   The performance collection interrupt program 22 is activated at fixed time intervals, and stores the sampling data stored in the register by the unwind_stack program 21 in the memory. The sampling data stored in the memory is written out to the sampling data storage unit 3 when the collection of the performance information is finished.

なお、unwind_stackプログラム21が関数呼び出し関係の情報を取得するタイミングは各関数の実行開始時であり、性能収集用割込みプログラム22が関数呼び出し関係の情報をメモリに格納するタイミングは一定時間間隔である。すなわち、両者は異なる。   The timing at which the unwind_stack program 21 acquires the information on the function calling relationship is at the start of the execution of each function, and the timing at which the performance collection interrupt program 22 stores the information on the function calling relationship in the memory is a fixed time interval. That is, they are different.

分析プログラム4は、サンプリングデータ記憶部3から関数呼び出し関係の情報を読み出して関数の呼び出し関係に基づく関数の出現回数を集計し、集計結果を集計結果記憶部5に格納する。   The analysis program 4 reads out information on the function calling relationship from the sampling data storage unit 3, counts the number of appearances of the function based on the function calling relationship, and stores the counting result in the counting result storage unit 5.

次に、性能収集用割込みプログラム22の動作について説明する。図2は、性能収集用割込みプログラム22の動作を説明するための図である。図2では、メモリ61のヒープ61bに格納された性能収集対象コード71が実行されているとする。ここで、性能収集対象コード71は、性能収集対象プログラムの実行コードである。性能収集対象コード71には、unwind_stackプログラム21の実行コードであるunwind_stackコード71aが含まれる。   Next, the operation of the performance collection interrupt program 22 will be described. FIG. 2 is a diagram for explaining the operation of the performance collection interrupt program 22. As shown in FIG. In FIG. 2, it is assumed that the performance collection target code 71 stored in the heap 61 b of the memory 61 is being executed. Here, the performance collection target code 71 is an execution code of the performance collection target program. The performance collection target code 71 includes an unwind_stack code 71 a which is an execution code of the unwind_stack program 21.

ヒープ61bは、動的に確保可能なメモリ領域であり、プログラムの実行コードやデータ等が格納される領域である。ヒープ61bには、性能収集対象コード71以外にハッシュ関数コード72、性能収集用割込みコード73、サンプリングバッファ74が含まれる。ハッシュ関数コード72は、ハッシュ値を計算するハッシュ関数の実行コードである。性能収集用割込みコード73は、性能収集用割込みプログラム22の実行コードである。サンプリングバッファ74は、性能収集用割込みプログラム22により収集されたサンプリングデータを格納する領域である。   The heap 61 b is a memory area that can be secured dynamically, and is an area for storing an execution code of a program, data, and the like. The heap 61 b includes, in addition to the performance collection target code 71, a hash function code 72, a performance collection interrupt code 73, and a sampling buffer 74. The hash function code 72 is an execution code of a hash function that calculates a hash value. The performance collection interrupt code 73 is an execution code of the performance collection interrupt program 22. The sampling buffer 74 is an area for storing sampling data collected by the performance collection interrupt program 22.

図2に示すように、CPU62の性能を監視するPMU(Performance Monitoring Units)62aがCPU62に対して性能収集用割込みを定期的に発生する(1)。なお、PMU62aの代わりにクロックカウンタ、タイマ等がCPU62に対して性能収集用割込みを定期的に発生してもよい。   As shown in FIG. 2, a PMU (Performance Monitoring Units) 62a that monitors the performance of the CPU 62 periodically generates a performance collection interrupt to the CPU 62 (1). A clock counter, timer or the like may periodically generate an interrupt for performance collection to the CPU 62 instead of the PMU 62a.

そして、CPU62は、割込み処理を実行する(2)。具体的には、CPU62は、命令ポインタ81の値を性能収集用割込みコード73の先頭とし、性能収集用割込みコード73を実行する。ここで、命令ポインタ81は、実行するコードのアドレスを記憶するレジスタであり、CPU62のレジスタセット80に含まれる。   Then, the CPU 62 executes an interrupt process (2). Specifically, the CPU 62 sets the value of the instruction pointer 81 as the head of the performance collection interrupt code 73, and executes the performance collection interrupt code 73. Here, the instruction pointer 81 is a register that stores the address of the code to be executed, and is included in the register set 80 of the CPU 62.

性能収集用割込みコード73は、m(mは正の整数)個の呼び出し関係格納専用レジスタ85から関数呼び出し関係の情報を読み出してサンプリングバッファ74にサンプリングデータとして書き込む(3)。ここで、呼び出し関係格納専用レジスタ85は、レジスタセット80に含まれる汎用レジスタ84の一部である。unwind_stackプログラム21により関数呼び出し関係の情報がm個の呼び出し関係格納専用レジスタ85に格納される。   The performance collection interrupt code 73 reads out function call relationship information from the m (m is a positive integer) number of call relationship storage dedicated registers 85 and writes the information as sampling data in the sampling buffer 74 (3). Here, the call relation storage dedicated register 85 is a part of the general purpose register 84 included in the register set 80. Information on function call relationships is stored in m call relationship storage dedicated registers 85 by the unwind_stack program 21.

その後、性能情報収集時間が終了すると、性能収集用割込みプログラム22によるデータ収集が終了し(4)、サンプリングプログラム2は、サンプリングデータの永続化、すなわち、サンプリングデータのサンプリングデータ記憶部3への書き込みを行う(5)。なお、サンプリングデータのサンプリングデータ記憶部3への書き込みは、サンプリングバッファ74に空きがなくなったときにも行われる。   Thereafter, when the performance information collection time ends, data collection by the performance collection interrupt program 22 ends (4), and the sampling program 2 makes the sampling data permanent, that is, writes the sampling data to the sampling data storage unit 3 Do (5). The writing of the sampling data to the sampling data storage unit 3 is also performed when the sampling buffer 74 runs out of space.

このように、性能収集用割込みプログラム22は、一定時間間隔で起動され、起動された時点で呼び出し関係格納専用レジスタ85が記憶する関数呼び出し関係の情報をサンプリングバッファ74に格納することで、関数呼び出し関係の情報を収集することができる。   As described above, the performance collection interrupt program 22 is activated at a constant time interval, and stores the information on the function call relationship stored in the call relationship storage dedicated register 85 at the time of activation in the sampling buffer 74, Relationship information can be collected.

次に、unwind_stackプログラム21の動作について図3〜図7を用いて説明する。まず、性能収集対象プログラムの動作について説明する。図3は、性能収集対象のプログラムの動作を説明するための図である。   Next, the operation of the unwind_stack program 21 will be described with reference to FIGS. First, the operation of the performance collection target program will be described. FIG. 3 is a diagram for explaining the operation of a program whose performance is to be collected.

図3に示すように、性能収集対象コード71の実行が開始され(1)、命令ポインタ81が指すアドレスの命令が順番に実行される。そして、実行の途中で関数の呼び出しが行われる(2)と、命令ポインタ81が記憶する戻り命令アドレスがスタック61aにpushされる(3)。ここで、スタック61aは、メモリ61内でデータをFILO(First In Last Out)で格納する領域である。スタック61aのデータを格納する位置はレジスタセット80に含まれるスタックポインタ82で指定される。   As shown in FIG. 3, the execution of the performance collection target code 71 is started (1), and the instructions of the address pointed by the instruction pointer 81 are sequentially executed. Then, when the function is called in the middle of execution (2), the return instruction address stored by the instruction pointer 81 is pushed onto the stack 61a (3). Here, the stack 61 a is an area for storing data in the memory 61 by First In Last Out (FILO). The position where the data of the stack 61 a is stored is designated by the stack pointer 82 included in the register set 80.

そして、関数の実行が終了すると、スタック61aにpushされた戻り命令アドレスがpopされ(4)、命令ポインタ81に設定されることにより、関数からの戻りが行われる(5)。   Then, when the execution of the function is completed, the return instruction address pushed on the stack 61a is popped (4) and set in the instruction pointer 81, whereby the return from the function is performed (5).

このように、関数が呼び出される度にスタック61aに戻り命令アドレスが積まれる。そこで、unwind_stackプログラム21は、スタック61aに積まれた一連の戻り命令アドレスを関数呼び出し関係の情報として呼び出し関係格納専用レジスタ85に格納する。   Thus, whenever the function is called, the stack 61a is returned and the instruction address is stacked. Therefore, the unwind_stack program 21 stores the series of return instruction addresses stacked on the stack 61 a in the call relationship storage dedicated register 85 as information on function call relationships.

なお、スタック61aには、関数呼び出し時に戻り命令アドレス以外のデータも格納される。図4は、関数呼び出し時にスタック61aに積まれるデータを説明するための図である。図4では、バイナリコード61cが実行されている途中で関数myfuncが呼ばれた場合を示す。また、図4において、ベースポインタ83は、呼び出された関数の局所変数を格納する場所であるスタックフレームの1つ前の領域を指すポインタである。ベースポインタ83が指す領域には、直前のベースポインタ83の値が格納される。   Note that data other than the return instruction address is also stored in the stack 61a when the function is called. FIG. 4 is a diagram for explaining data to be stacked on the stack 61a at the time of function call. FIG. 4 shows the case where the function myfunc is called while the binary code 61c is being executed. Also, in FIG. 4, the base pointer 83 is a pointer that points to an area immediately before the stack frame which is a place for storing local variables of the called function. In the area pointed to by the base pointer 83, the value of the immediately preceding base pointer 83 is stored.

図4に示すように、関数myfuncが呼ばれると、スタック61aには、戻り命令アドレス91と、直前のベースポインタの値92と、myfunc用スタックフレーム93が積まれる。ここで、戻り命令アドレス91と直前のベースポインタの値92は固定長であるが、スタックフレームの長さは、関数で使用される局所変数の個数に依存して可変である。そこで、unwind_stackプログラム21は、直前のベースポインタの値92を順番に辿ることによって、一連の戻り命令アドレスをスタック61aから取得する。   As shown in FIG. 4, when the function myfunc is called, the return instruction address 91, the value 92 of the immediately preceding base pointer, and the stack frame 93 for myfunc are stacked on the stack 61a. Here, although the return instruction address 91 and the value 92 of the immediately preceding base pointer have a fixed length, the length of the stack frame is variable depending on the number of local variables used in the function. Therefore, the unwind_stack program 21 acquires a series of return instruction addresses from the stack 61a by sequentially tracing the value 92 of the immediately preceding base pointer.

ベースポインタ83とスタックフレームは、関数の呼び出し時に実行されるコードによりスタック61aに積まれる。図5Aは、関数の呼び出し時に実行されるコードの一例を示す図である。図5Aにおいて、push ebpは、ベースポインタ83の値をスタック61aに保存する命令である。mov ebp,espは、現在のスタックフレームを指すようにベースポインタ83の値を変更する。sub esp,xは、局所変数の大きさの分スタックポインタ82の値を減らす。なお、スタック61aには、上位アドレスから下位アドレスに向かってデータが積まれる。また、unwind_stackプログラム21は、push ebpの前で呼ばれ、一連の戻り命令アドレスをスタック61aから取得する。   The base pointer 83 and the stack frame are stacked on the stack 61a by the code executed when the function is called. FIG. 5A is a diagram showing an example of code executed when calling a function. In FIG. 5A, push ebp is an instruction to save the value of the base pointer 83 on the stack 61a. mov ebp, esp changes the value of the base pointer 83 to point to the current stack frame. sub esp, x reduces the value of the stack pointer 82 by the size of the local variable. Data is stacked on the stack 61 a from the upper address to the lower address. Also, the unwind_stack program 21 is called before the push ebp, and acquires a series of return instruction addresses from the stack 61a.

図5Bは、関数の戻り時に実行されるコードの一例を示す図である。図5Bにおいて、mov esp,ebpは、局所変数を除去する。pop ebpは、ベースポインタ83の値を復帰する。retは、呼び出された関数から戻る。   FIG. 5B is a diagram showing an example of code executed upon return of the function. In FIG. 5B, mov esp, ebp removes local variables. pop ebp returns the value of the base pointer 83. ret returns from the called function.

図6は、サンプリングデータの形式を示す図である。図6に示すように、サンプリングデータの形式には、(a)パック形式と(b)ハッシュ形式がある。サンプリングデータの先頭1ビットによりパック形式かハッシュ形式かが区別される。パック形式では、1つのサンプリングデータに固定長の戻り命令アドレスがN(Nは正の整数)個詰められる。なお、パック形式では、戻り命令アドレスは可逆圧縮されてもよい。   FIG. 6 is a diagram showing the format of sampling data. As shown in FIG. 6, there are (a) pack format and (b) hash format as sampling data formats. The first 1 bit of the sampling data distinguishes between the pack format and the hash format. In the packed format, N (N is a positive integer) return instruction addresses of fixed length are packed into one sampling data. In the pack format, the return instruction address may be losslessly compressed.

ハッシュ形式では、1つのサンプリングデータは、N個の戻り命令アドレスから計算されたハッシュ値である。図6(b)において、HASHはハッシュ関数である。戻り命令アドレス1…NはN個の戻り命令アドレスを表す。ハッシュ形式では、サンプリングデータは可変長であり、サンプリングデータのサイズは小さくなる。 In the hash format, one sampling data is a hash value calculated from N return instruction addresses. In FIG. 6 (b), HASH is a hash function. The return instruction addresses 1... N represent N return instruction addresses. In the hash format, sampling data is of variable length, and the size of sampling data is smaller.

なお、ハッシュ形式では、図6(c)に示すように、サンプリングデータを固定長とし、ハッシュ値を埋めて余ったスペースに、N個の戻り命令アドレスより前のM−N(MはN以上の正の整数)個の戻り命令アドレスをパック形式で詰める形式としてもよい。この形式は、1つのサンプリングデータがハッシュ値だけである形式と比較して、1つのサンプリングデータの情報量を増やすことができる。   In the hash format, as shown in FIG. 6C, the sampling data has a fixed length, and M-N (M is N or more) before N return instruction addresses in the space left after filling the hash value. (Positive integers of) may be packed in pack format. This format can increase the amount of information of one sampling data as compared to a format in which one sampling data is only a hash value.

また、図6では、先頭の1ビットを用いてパック形式かハッシュ形式かが区別されるが、パック形式では、戻り命令アドレスが詰められることからサンプリングデータに特徴があるので、先頭の1ビットは省略してもよい。   Further, in FIG. 6, although the first 1 bit is used to distinguish between the pack format and the hash format, the pack format is characterized by sampling data because the return instruction address is packed, so the first 1 bit is It may be omitted.

unwind_stackプログラム21は、ハッシュ形式又はパック形式でN個の戻り命令アドレスをm個の呼び出し関係格納専用レジスタ85に格納する。具体的には、unwind_stackプログラム21は、N個の戻り命令アドレスをm個の呼び出し関係格納専用レジスタ85に格納する際に乱数又は疑似乱数を用いてハッシュ形式又はパック形式を選択し、選択した形式で格納する。   The unwind_stack program 21 stores the N return instruction addresses in the hash format or pack format in the m call relationship storage dedicated registers 85. Specifically, the unwind_stack program 21 selects a hash format or a pack format using random numbers or pseudo random numbers when storing the N return instruction addresses in the m call relation storage dedicated registers 85, and the selected format Store in

なお、unwind_stackプログラム21は、1ビットの選択フラグを関数毎に用意し、関数が呼び出されたときに選択フラグを書き換え、選択フラグが0のときはパック形式を選択し、選択フラグが1のときはハッシュ形式を選択してもよい。   Note that the unwind_stack program 21 prepares a 1-bit selection flag for each function, rewrites the selection flag when the function is called, selects the pack format if the selection flag is 0, and selects 1 if the selection flag is 1 May choose hash format.

図7は、unwind_stackプログラム21の処理のフローを示すフローチャートである。図7に示すように、unwind_stackプログラム21は、ハッシュ形式がパック形式かを決定し、繰り返し回数の上限Dを決定する(ステップS1)。ここで、D=Nであるが、図6(c)に示したハッシュ形式の場合、D=Mである。   FIG. 7 is a flowchart showing the process flow of the unwind_stack program 21. As shown in FIG. 7, the unwind_stack program 21 determines whether the hash format is a pack format, and determines the upper limit D of the number of repetitions (step S1). Here, D = N, but in the case of the hash format shown in FIG. 6C, D = M.

そして、unwind_stackプログラム21は、作業用レジスタ1にベースポインタ83の値をセットし(ステップS2)、スタックポインタ82の参照先のメモリ61の内容を戻り命令アドレス1として出力する(ステップS3)。そして、unwind_stackプログラム21は、iが2以上D以下であるか否かを判定し(ステップS4)、iが2以上D以下でない場合には、ステップS9へ移動する。ここで、iは、unwind_stackプログラム21が戻り命令アドレスを1つ取得する度に1増加する繰り返し変数であり、初期値は2である。 Then, the unwind_stack program 21 sets the value of the base pointer 83 in the working register 1 (step S2), and outputs the content of the memory 61 referred to by the stack pointer 82 as the return instruction address 1 (step S3). Then, the unwind_stack program 21 determines whether i is 2 or more and D or less (step S4), and when i is not 2 or more and D or less, the process moves to step S9. Here, i is a repeat variable that is incremented by one each time the unwind_stack program 21 obtains one return instruction address, and the initial value is two.

iが2以上D以下である場合には、unwind_stackプログラム21は、作業用レジスタ2に作業用レジスタ1の内容のメモリ61の内容をセットする(ステップS5)。この結果、作業用レジスタ2には、呼び出し側のベースポインタ83の値がセットされる。 If i is 2 or more and D or less, the unwind_stack program 21 sets the contents of the memory 61 of the contents of the work register 1 in the work register 2 (step S5). As a result, the value of the base pointer 83 of the caller is set in the working register 2 .

そして、unwind_stackプログラム21は、作業レジスタ2の値は健全か否かを判定する(ステップS6)。作業レジスタ2の値はベースポインタ83の値であるので、unwind_stackプログラム21は、スタック61aのいずれかの領域を指しているか否かで健全性をチェックする。また、1つ前のベースポインタ83の値は、現在のベースポインタ83の値から1つの関数に関する情報を格納する領域分だけ大きい値であり、1つの関数に関する情報を格納する領域の大きさは、局所変数の数に依存するが、ある程度の範囲内である。したがって、unwind_stackプログラム21は、このようなベースポインタ83の値の特徴を利用して健全性をチェックする。 Then, the unwind_stack program 21 determines whether the value of the work register 2 is normal (step S6). Since the value of the work register 2 is the value of the base pointer 83, the unwind_stack program 21 checks the soundness according to whether or not it points to any area of the stack 61a. Also, the value of the immediately preceding base pointer 83 is a value larger than the current value of the base pointer 83 by the area for storing information on one function, and the size of the area for storing information on one function is , Depending on the number of local variables, but within a certain range. Therefore, the unwind_stack program 21 uses such a feature of the value of the base pointer 83 to check the soundness.

そして、作業レジスタ2の値が健全でない場合には、unwind_stackプログラム21は、ステップS9へ移動する。一方、作業レジスタ2の値が健全である場合には、unwind_stackプログラム21は、作業レジスタ2の参照アドレスに隣接するメモリ61(例えば、(作業用レジスタ2の内容+8)のアドレスになる)の内容を戻り命令アドレスiとして出力する(ステップS7)。なお、ここでは、アドレスは64ビット=8バイトとしている。そして、unwind_stackプログラム21は、作業用レジスタ1に作業用レジスタ2の値をセットし(ステップS8)、iに1を加えてステップS4へ戻る。 Then, if the value of the work register 2 is not sound, the unwind_stack program 21 moves to step S9. On the other hand, when the value of the work register 2 is healthy, the Unwind_stack program 21, the contents of the memory 61 which is adjacent to the reference address of the working register 2 (for example, the address of the (content +8 working register 2)) Is returned as the instruction address i (step S7). Here, the address is 64 bits = 8 bytes. Then, the unwind_stack program 21 sets the value of the working register 2 in the working register 1 (step S8), adds 1 to i, and returns to step S4.

そして、unwind_stackプログラム21は、ステップS3及びステップS7で出力した(戻り命令アドレス1、・・・、戻り命令アドレスD)を入力し(ステップS9)、呼び出し関係の保持形式を判定する(ステップS10)。その結果、呼び出し関係の保持形式がハッシュ形式である場合には、unwind_stackプログラム21は、(戻り命令アドレス1、・・・、戻り命令アドレスD)をハッシュ関数に通した後、呼び出し関係格納専用レジスタ85に格納する(ステップS11)。一方、呼び出し関係の保持形式がパック形式である場合には、unwind_stackプログラム21は、(戻り命令アドレス1、・・・、戻り命令アドレスD)をパック形式にて、呼び出し関係格納専用レジスタ85に格納する(ステップS12)。 Then, the unwind_stack program 21 inputs (return instruction address 1 , ..., return instruction address D ) output in step S3 and step S7 (step S9), and determines the holding format of the calling relationship (step S10). . As a result, if the holding form of the call relation is a hash form, the unwind_stack program 21 passes (return instruction address 1 ,..., Return instruction address D ) to the hash function, and then the call relation storage dedicated register It stores in 85 (step S11). On the other hand, if the holding format of the calling relationship is a pack format, the unwind_stack program 21 stores (return instruction address 1 ,..., Return instruction address D ) in the calling relationship storage dedicated register 85 in a pack format. (Step S12).

このように、unwind_stackプログラム21は、ベースポインタ83の値を用いてスタック61aを辿って一連の戻り命令アドレスを取得し、ハッシュ形式又はパック形式で呼び出し関係格納専用レジスタ85に格納する。また、呼び出し関係格納専用レジスタ85に格納された一連の戻り命令アドレスは、性能収集用割込みプログラム22によってメモリ61に格納される。したがって、unwind_stackプログラム21は、ハッシュ形式を使用しない場合と比較して、関数呼び出し関係の情報のメモリ61での量を削減することができる。   Thus, the unwind_stack program 21 follows the stack 61a using the value of the base pointer 83 to obtain a series of return instruction addresses, and stores them in the call relationship storage dedicated register 85 in hash format or pack format. Further, a series of return instruction addresses stored in the call relation storage dedicated register 85 are stored in the memory 61 by the performance collection interrupt program 22. Therefore, the unwind_stack program 21 can reduce the amount of information on the function call relationship in the memory 61 as compared to the case where the hash format is not used.

次に、分析プログラム4について図8〜図12を用いて説明する。図8は、分析プログラム4の機能構成を示す図である。図8に示すように、分析プログラム4は、サンプリング形式判別部41と、ハッシュ部42と、呼び出し関係復元部43と、呼び出し関係別集計部44とを有する。   Next, the analysis program 4 will be described with reference to FIGS. FIG. 8 is a diagram showing a functional configuration of the analysis program 4. As shown in FIG. 8, the analysis program 4 includes a sampling type determination unit 41, a hash unit 42, a call relationship restoration unit 43, and a call relationship aggregation unit 44.

なお、分析プログラム4は、サンプリングデータ記憶部3が記憶するサンプリングデータを2回のパスで処理する。第1のパスでは、分析プログラム4は、パック形式のサンプリングレコードのみを用いて逆ハッシュ表43aを作成する、ここで、サンプリングレコードとは、1つのサンプリングデータである。また、逆ハッシュ表43aは、ハッシュ値から関数呼び出し関係の情報を検索するためのテーブルである。第2のパスでは、分析プログラム4は、全サンプリングレコードを用いて関数呼び出し関係の集計を行う。そこで、以下では分析プログラム4の各機能部の処理をパス毎に説明する。   The analysis program 4 processes the sampling data stored in the sampling data storage unit 3 in two passes. In the first pass, the analysis program 4 creates the reverse hash table 43a using only packed format sampling records, where the sampling records are one sampling data. In addition, the reverse hash table 43a is a table for searching for information on function call relationships from hash values. In the second pass, the analysis program 4 tabulates function call relationships using all sampling records. So, below, processing of each functional part of analysis program 4 is explained for every path.

図9Aは、分析プログラム4の第1のパスを説明するための図である。図9Aに示すように、サンプリング形式判別部41は、サンプリングデータ記憶部3からサンプリングレコードを読み出し、データ形式を判定する。そして、サンプリング形式判別部41は、データ形式がパック形式の場合には、サンプリングレコードをハッシュ部42に渡し、データ形式がハッシュ形式の場合には、サンプリングレコードに対する処理は行わない。   FIG. 9A is a diagram for explaining a first pass of the analysis program 4. As shown in FIG. 9A, the sampling format determination unit 41 reads the sampling record from the sampling data storage unit 3 and determines the data format. The sampling format determination unit 41 passes the sampling record to the hash unit 42 when the data format is a pack format, and does not perform processing on the sampling record when the data format is a hash format.

ハッシュ部42は、サンプリングレコードに含まれる関数呼び出し関係の情報のハッシュ値を算出し、算出したハッシュ値と関数呼び出し関係の情報を呼び出し関係復元部43に渡す。呼び出し関係復元部43は、ハッシュ値と関数呼び出し関係の情報を対応付けて逆ハッシュ表43aに登録する。   The hash unit 42 calculates the hash value of the information on the function calling relationship included in the sampling record, and passes the calculated hash value and the information on the function calling relationship to the call relationship restoring unit 43. The call relationship restoration unit 43 associates the hash value with the information on the function call relationship and registers the information in the reverse hash table 43a.

図9Bは、分析プログラム4の第2のパスを説明するための図である。図9Bに示すように、サンプリング形式判別部41は、サンプリングデータ記憶部3からサンプリングレコードを読み出し、データ形式を判定する。そして、サンプリング形式判別部41は、データ形式がハッシュ形式の場合には、サンプリングレコードを呼び出し関係復元部43に渡し、データ形式がパック形式の場合には、サンプリングレコードを呼び出し関係別集計部44に渡す。   FIG. 9B is a diagram for explaining the second pass of the analysis program 4. As shown in FIG. 9B, the sampling format determination unit 41 reads the sampling record from the sampling data storage unit 3 and determines the data format. Then, when the data format is a hash format, the sampling format determination unit 41 passes the sampling record to the call relationship restoration unit 43, and when the data format is a pack format, the sampling record is called to the call aggregation unit 44. hand over.

呼び出し関係復元部43は、ハッシュ形式のサンプリングレコードに含まれるハッシュ値を用いて逆ハッシュ表43aを検索し、関数呼び出し関係の情報を復元する。そして、呼び出し関係復元部43は、復元した関数呼び出し関係の情報をサンプリングレコードの形式にして呼び出し関係別集計部44に渡す。   The call relationship restoration unit 43 searches the reverse hash table 43a using the hash value included in the hash type sampling record, and restores the information on the function call relationship. Then, the call relation restoring unit 43 transfers the restored information on the function call relation to the call relation totaling unit 44 in the form of a sampling record.

呼び出し関係別集計部44は、サンプリング形式判別部41及び呼び出し関係復元部43から渡されたサンプリングレコードを関数呼び出し関係毎に集計し、集計結果を集計結果記憶部5に書き出す。   The call relationship-based aggregation unit 44 aggregates the sampling records passed from the sampling format determination unit 41 and the call relationship restoration unit 43 for each function call relationship, and writes the aggregation results in the aggregation result storage unit 5.

図10Aは、第1のパスの処理のフローを示すフローチャートである。図10Aに示すように、分析プログラム4は、サンプリングデータ記憶部3から全サンプリングレコードを順番に読み出し(ステップS21)、各サンプリングレコードに対してステップS21とステップS26で挟まれた処理を行う。   FIG. 10A is a flowchart showing the flow of processing of the first pass. As shown in FIG. 10A, the analysis program 4 reads out all sampling records in order from the sampling data storage unit 3 (step S21), and performs the processing sandwiched between step S21 and step S26 for each sampling record.

なお、図10A〜図11Bにおいて、「i=0,MaxN,1」は、iを繰り返し変数として0から1ずつ増加させながらiがMaxNになるまで処理を繰り返すことを表す。ここで、MaxNはサンプリングレコードの数−1である。   In FIG. 10A to FIG. 11B, “i = 0, MaxN, 1” indicates that the process is repeated until i becomes MaxN while increasing i from 0 with i as a repeat variable. Here, MaxN is the number of sampling records minus one.

分析プログラム4は、変数DにDATA[i]をセットし(ステップS22)、Dはパック形式か否かを判定する(ステップS23)。ここで、DATA[i]は、i番目のサンプリングレコードを表す。そして、Dがパック形式でない場合には、分析プログラム4は、次のサンプリングレコードを処理する。   The analysis program 4 sets DATA [i] to the variable D (step S22), and determines whether D is in a pack format (step S23). Here, DATA [i] represents the i-th sampling record. Then, if D is not in the pack format, the analysis program 4 processes the next sampling record.

一方、Dがパック形式である場合には、分析プログラム4は、変数vにDの戻り命令アドレス1…Nから計算したハッシュ値をセットする(ステップS24)。すなわち、v=HASH(戻り命令アドレス1…N)とする。そして、分析プログラム4は、キーをv、値を戻り命令アドレスのリスト、すなわち、戻り命令アドレス1…Nとして、逆ハッシュ表43aに登録する(ステップS25)。 On the other hand, when D is in the pack format, the analysis program 4 sets the variable v to the hash value calculated from the return instruction address 1 ... N of D (step S24). That is, v = HASH (return instruction address 1... N ). Then, the analysis program 4 registers the key v and the value as a list of return instruction addresses, ie, return instruction addresses 1... N in the reverse hash table 43a (step S25).

このように、分析プログラム4は、第1のパスでパック形式のサンプリングレコードから逆ハッシュ表43aを作成することによって、第2のパスで逆ハッシュ表43aを用いてハッシュ形式のサンプリングレコードを復元することができる。   Thus, the analysis program 4 restores the hash type sampling record using the reverse hash table 43a in the second pass by creating the reverse hash table 43a from the pack type sampling record in the first pass. be able to.

図10Bは、第2のパスの処理のフローを示すフローチャートである。なお、図10Bでは、ハッシュ形式は図6(c)に示した形式である。図10Bに示すように、分析プログラム4は、サンプリングデータ記憶部3から全サンプリングレコードを順番に読み出し、各サンプリングレコードに対してステップS31とステップS38で挟まれた処理を行う。   FIG. 10B is a flowchart showing a flow of processing of the second pass. In FIG. 10B, the hash format is the format shown in FIG. 6 (c). As shown in FIG. 10B, the analysis program 4 reads out all the sampling records in order from the sampling data storage unit 3, and performs the processing sandwiched between step S31 and step S38 for each sampling record.

分析プログラム4は、変数DにDATA[i]をセットし(ステップS32)、Dはパック形式か否かを判定する(ステップS33)。その結果、Dがパック形式である場合には、分析プログラム4は、DをファイルDATA#2に格納する(ステップS34)。すなわち、分析プログラム4は、i番目のサンプリングレコードDATA#2[i]=Dとする。   The analysis program 4 sets DATA [i] to the variable D (step S32), and determines whether D is in the pack format (step S33). As a result, if D is in a pack format, the analysis program 4 stores D in the file DATA # 2 (step S34). That is, the analysis program 4 sets the ith sampling record DATA # 2 [i] = D.

一方、Dがパック形式でない場合には、分析プログラム4は、D.HASHをキーとして、逆ハッシュ表43aを検索し、検索結果を戻り命令アドレスリストLとする(ステップS35)。ここで、D.HASHは、ハッシュ形式のサンプリングレコードDのハッシュ値の部分である。すなわち、逆ハッシュ表43aを検索する関数をsearchとすると、戻り命令アドレスリストL=search(D.HASH)である。   On the other hand, when D is not in the pack format, the analysis program 4 determines whether D.I. The reverse hash table 43a is searched using HASH as a key, and the search result is set as a return instruction address list L (step S35). Here, D. "HASH" is a portion of the hash value of the sampling record D in hash format. That is, assuming that the function for searching the reverse hash table 43a is search, the return instruction address list L = search (D.HASH).

そして、分析プログラム4は、2つのリストLとD.ADDRSとを連結し、復元したサンプリングレコードRESTOREDを生成する(ステップS36)。ここで、D.ADDRSは、ハッシュ形式のサンプリングレコードDのハッシュ値を除いた部分である。すなわち、リストを連結する関数をconcatとすると、RESTORED=concat(L,D.ADDRS)である。   And, the analysis program 4 has two lists L and D. Concatenate with ADDRS to generate a restored sampling record RESTORED (step S36). Here, D. The ADDRS is a portion excluding the hash value of the sampling record D in hash format. That is, assuming that a function that concatenates a list is concat, RESTORED = concat (L, D. ADDRS).

そして、分析プログラム4は、DATA#2[i]にRESTOREDを格納する(ステップS37)。すなわち、DATA#2[i]=RESTOREDである。   Then, the analysis program 4 stores RESTORED in DATA # 2 [i] (step S37). That is, DATA # 2 [i] = RESTORED.

そして、全サンプリングレコードの処理が終了すると、分析プログラム4は、DATA#2に含まれる全サンプリングレコードを関数呼び出し関係別に集計する(ステップS39)。   Then, when the processing of all the sampling records is completed, the analysis program 4 counts all the sampling records included in DATA # 2 according to the function calling relationship (step S39).

このように、分析プログラム4は、ハッシュ形式のサンプリングレコードを逆ハッシュ表43aを用いて復元することによって、全サンプリングレコードを関数呼び出し関係別に集計することができる。   In this manner, the analysis program 4 can aggregate all sampling records according to function call relationship by restoring the hash type sampling records using the reverse hash table 43a.

図11Aは、サンプリング結果の集計処理の第1の例を示すフローチャートである。図11Aは、戻り命令アドレス1別にサンプリング結果を集計する処理を示す。図11Aに示すように、分析プログラム4は、ファイルDATA#2から全サンプリングレコードを順番に読み出し、各サンプリングレコードに対してステップS41とステップS47で挟まれた処理を行う。 FIG. 11A is a flowchart illustrating a first example of tallying processing of sampling results. FIG. 11A shows a process of totaling the sampling results for each return instruction address 1 . As shown in FIG. 11A, the analysis program 4 reads out all sampling records in order from the file DATA # 2, and performs the processing sandwiched between step S41 and step S47 for each sampling record.

すなわち、分析プログラム4は、変数DにDATA#2[i]をセットし(ステップS42)、Xに戻り命令アドレス1が存在するか否かを判定する(ステップS43)。ここで、Xは、キーを戻り命令アドレス、値を出現回数とするハッシュ表である。D.ADDR[k]は、サンプリングレコードDの戻り命令アドレスkである(kは1〜Nの整数)。exist(X,K)は、ハッシュ表XにキーKが存在すれば値がtrueとなり、存在しなければ値がfalseとなる関数である。 That is, the analysis program 4 sets DATA # 2 [i] to the variable D (step S42), returns to X, and determines whether or not the instruction address 1 exists (step S43). Here, X is a hash table in which the key is a return instruction address, and the value is the number of occurrences. D. ADDR [k] is the return instruction address k of the sampling record D (k is an integer of 1 to N). exist (X, K) is a function in which the value becomes true if the key K exists in the hash table X, and the value becomes false otherwise.

そして、ハッシュ表Xに戻り命令アドレス1が存在しない場合には、分析プログラム4は、ハッシュ表XにキーがD.ADDR[1]であって値が0であるエントリを追加する(ステップS44)。ここで、insert(X,K,VA)は、ハッシュ表XにキーがKであって値がVAであるエントリを追加する関数である。 Then, if the return is not made to the hash table X and the instruction address 1 does not exist, the analysis program 4 determines that the key is D.. An entry that is ADDR [1] and has a value of 0 is added (step S44). Here, insert (X, K, VA) is a function that adds an entry whose key is K and whose value is VA to the hash table X.

そして、分析プログラム4は、ハッシュ表XからキーがD.ADDR[1]である値を取得してVに格納する(ステップS45)。ここで、lookup(X,K)は、ハッシュ表XからキーがKである値を取得する関数である。   Then, the analysis program 4 determines that the key is D.. The value which is ADDR [1] is acquired and stored in V (step S45). Here, lookup (X, K) is a function for acquiring a value whose key is K from the hash table X.

そして、分析プログラム4は、ハッシュ表XのキーがD.ADDR[1]である値をV+1に更新する(ステップS46)。ここで、update(X,K,VA)は、ハッシュ表XのキーがKである値をVAに更新する関数である。   Then, the analysis program 4 determines that the key of the hash table X is D. The value ADDR [1] is updated to V + 1 (step S46). Here, update (X, K, VA) is a function that updates the value of the hash table X with key K to VA.

このように、分析プログラム4は、D.ADDR[1]別に出現回数を数えることで、戻り命令アドレス1別にサンプリング結果を集計することができる。 Thus, the analysis program 4 is D.I. By counting the number of occurrences for each ADDR [1], it is possible to count the sampling results for each return instruction address 1 .

図11Bは、サンプリング結果の集計処理の第2の例を示すフローチャートである。図11Bは、戻り命令アドレス1,…,Nのサンプリング数の内訳を算出するためにトライ木を作成する処理を示す。ここで、トライ木とは、木構造上のノードの位置とキーが対応付られる木である。後述する図12にトライ木の一例を示す。 FIG. 11B is a flowchart illustrating a second example of tallying processing of sampling results. FIG. 11B shows the process of creating a trie tree to calculate the breakdown of the sampling numbers of the return instruction addresses 1 ,. Here, the trie tree is a tree to which the position of the node on the tree structure is associated with the key. An example of a trie tree is shown in FIG. 12 described later.

図11Bに示すように、分析プログラム4は、ファイルDATA#2から全サンプリングレコードを順番に読み出し、各サンプリングレコードに対してステップS51とステップS57で挟まれた処理を行う。   As shown in FIG. 11B, the analysis program 4 reads out all sampling records in order from the file DATA # 2, and performs the processing sandwiched between step S51 and step S57 for each sampling record.

すなわち、分析プログラム4は、変数DにDATA#2[i]をセットし(ステップS52)、TにD.ADDRSが存在するか否かを判定する(ステップS53)。ここで、Tは、キーを戻り命令アドレスリスト、値を出現回数とするトライ木である。exist(T,K)は、トライ木にキーKが存在すれば値がtrueとなり、存在しなければ値がfalseとなる関数である。   That is, the analysis program 4 sets DATA # 2 [i] to the variable D (step S52), and sets T.D. It is determined whether or not ADDRS exists (step S53). Here, T is a trie tree in which the key is a return instruction address list and the value is the number of occurrences. exist (T, K) is a function in which the value becomes true if the key K exists in the trie tree, and the value becomes false otherwise.

そして、トライ木にD.ADDRSが存在しない場合には、分析プログラム4は、トライ木にキーがD.ADDRSであってトライ木のパスの全ノードの値が0であるエントリを追加する(ステップS54)。ここで、insert(T,K)は、トライ木TにキーがKであってトライ木のパス上の全ノードの値が0であるエントリを追加する関数である。   And D. If ADDRS does not exist, analysis program 4 determines that the key is D. An entry that is ADDRS and in which the value of all nodes in the path of the trie tree is 0 is added (step S54). Here, insert (T, K) is a function that adds an entry whose key is K and all nodes on the path of the trie tree have a value of 0 to the trie tree T.

そして、分析プログラム4は、トライ木からキーがD.ADDRSであるパスの全ノードの値を取得してそれぞれv1、v2、...、vNに格納する(ステップS55)。ここで、lookup(T,K)は、トライ木TからキーがKであるパスの全ノードの値を取得する関数である。 And, the analysis program 4 is the key from the try tree D. Get the values of all nodes of the path that are ADDRS and let v 1 , v 2 ,. . . , V N (step S 55). Here, lookup (T, K) is a function that acquires values of all nodes in a path whose key is K from a trie tree T.

そして、分析プログラム4は、トライ木のキーがD.ADDRSであるパスの各ノードの値をそれぞれv1+1、v2+1、・・・、vN+1に更新する(ステップS56)。ここで、update(T,K,VL)は、トライ木TのキーがKであるパスの各ノードの値を値のリストVLの各値に更新する関数である。 And, the analysis program 4 shows that the key of the try tree D. V The value of each node in the path is ADDRS respectively 1 + 1, v 2 +1, updates ..., a v N +1 (step S56). Here, update (T, K, VL) is a function that updates the value of each node of the path where the key of the try tree T is K, to each value of the value list VL.

このように、分析プログラム4は、D.ADDRSのパスのノード別に出現回数を数えることで、戻り命令アドレス1,…,Nのサンプリング数の内訳を算出することができる。 Thus, the analysis program 4 is D.I. By counting the number of occurrences of each node of the ADDRS path, it is possible to calculate the breakdown of the sampling numbers of the return instruction addresses 1 ,.

図12は、トライ木の一例を示す図である。図12は、6つのサンプリングレコードDATA#2[0]〜DATA#2[5]から作成されるトライ木を示す。ノードは円で図示されており、ノード内に書かれた数が命令アドレスを示している。図12に示すように、トライ木は、ノード1をルートとするサブ木とノード5をルートとするサブ木とから構成される。そして、例えばノード1をルートとするサブ木は、ノード2をルートとするサブ木とノード5のリーフとから構成される。そして、DATA#2[1]=(1,5)は、ノード1→ノード5のパスに対応する。 FIG. 12 is a diagram showing an example of a trie tree. FIG. 12 shows a trie tree created from six sampling records DATA # 2 [0] to DATA # 2 [5]. The nodes are illustrated by circles, and the numbers written in the nodes indicate instruction addresses. As shown in FIG. 12, the trie tree is composed of a sub-tree rooted at node 1 and a sub-tree rooted at node 5 . Then, for example, a sub-tree rooted at node 1 is composed of a sub-tree rooted at node 2 and a leaf of node 5 . Then, DATA # 2 [1] = (1, 5) corresponds to the path of node 1 → node 5 .

ノード1は、DATA#2[0]=(1,2,3)、DATA#2[1]=(1,5)及びDATA#2[3]=(1,2,3,4,7)に出現するので、出現回数は3である。図12では、出現回数は、各ノードの右の四角に囲まれた数で示される。また、例えば、ノード6の出現回数2は、先頭が(5,6)で始まる出現が2回あることを表わしている。 The node 1 has DATA # 2 [0] = (1, 2, 3), DATA # 2 [1] = (1, 5) and DATA # 2 [3] = (1, 2, 3, 4, 7). Appears, so the number of appearances is three. In FIG. 12, the number of occurrences is indicated by the number surrounded by the right square of each node. Also, for example, the appearance frequency 2 of the node 6 represents that there are two appearances of which the head starts with (5, 6).

次に、性能情報収集プログラム1を実行するコンピュータの構成について説明する。図13は、性能情報収集プログラム1を実行するコンピュータの構成を示す図である。図13に示すように、コンピュータ60は、メモリ61と、CPU62と、HDD63と、LANインタフェース64と、入出力インタフェース65と、DVDドライブ66とを有する。   Next, the configuration of a computer that executes the performance information collection program 1 will be described. FIG. 13 is a diagram showing the configuration of a computer that executes the performance information collection program 1. As shown in FIG. 13, the computer 60 has a memory 61, a CPU 62, an HDD 63, a LAN interface 64, an input / output interface 65, and a DVD drive 66.

メモリ61は、プログラムやプログラムの実行途中結果などを記憶するRAM(RandomAccess Memory)であり、CPU62は、メモリ61からプログラムを読み出して実行する中央処理装置である。HDD63は、プログラムやデータを格納するディスク装置であり、LANインタフェース64は、コンピュータ60をLAN経由で他のコンピュータに接続するためのインタフェースである。入出力インタフェース65は、マウスやキーボードなどの入力装置及び表示装置を接続するためのインタフェースであり、DVDドライブ66は、DVDの読み書きを行う装置である。   The memory 61 is a RAM (Random Access Memory) that stores a program or an intermediate result of execution of the program, and the CPU 62 is a central processing unit that reads the program from the memory 61 and executes the program. The HDD 63 is a disk device for storing programs and data, and the LAN interface 64 is an interface for connecting the computer 60 to another computer via a LAN. The input / output interface 65 is an interface for connecting an input device such as a mouse and a keyboard and a display device, and the DVD drive 66 is a device for reading and writing a DVD.

そして、コンピュータ60において実行される性能情報収集プログラム1は、DVDに記憶され、DVDドライブ66によってDVDから読み出されてコンピュータ60にインストールされる。あるいは、性能情報収集プログラム1は、LANインタフェース64を介して接続された他のコンピュータシステムのデータベースなどに記憶され、これらのデータベースから読み出されてコンピュータ60にインストールされる。そして、インストールされた性能情報収集プログラム1は、HDD63に記憶され、メモリ61に読み出されてCPU62によって実行される。   Then, the performance information collection program 1 executed in the computer 60 is stored in the DVD, read from the DVD by the DVD drive 66, and installed in the computer 60. Alternatively, the performance information collection program 1 is stored in a database or the like of another computer system connected via the LAN interface 64, read from these databases, and installed in the computer 60. Then, the installed performance information collection program 1 is stored in the HDD 63, read out to the memory 61, and executed by the CPU 62.

上述してきたように、実施例では、unwind_stackプログラム21は、関数呼び出しが行われると、スタック61aが記憶する一連の戻り命令アドレスを関数呼び出し関係の情報として呼び出し関係格納専用レジスタ85に格納する。このとき、unwind_stackプログラム21は、ハッシュ形式かパック形式のいずれかを選択し、選択した形式で関数呼び出し関係の情報を呼び出し関係格納専用レジスタ85に格納する。したがって、性能情報収集プログラム1は、全てをパック形式で格納する場合と比較して、関数呼び出し関係の情報の量を削減することできる。   As described above, in the embodiment, when the function call is performed, the unwind_stack program 21 stores a series of return instruction addresses stored in the stack 61 a in the call relation storage dedicated register 85 as information of the function call relation. At this time, the unwind_stack program 21 selects either the hash format or the pack format, and stores the information of the function call relationship in the selected format in the call relationship storage dedicated register 85. Therefore, the performance information collection program 1 can reduce the amount of function call relationship information as compared with the case of storing everything in a pack format.

また、実施例では、分析プログラム4は、パック形式のサンプリングレコードから逆ハッシュ表43aを作成し、逆ハッシュ表43aを用いてハッシュ形式のサンプリングレコードを復元する。したがって、性能情報収集プログラム1は、関数呼び出し関係の情報の量を削減するとともに、サンプリングレコード数の減少を防ぐことができる。   Further, in the embodiment, the analysis program 4 creates the reverse hash table 43a from the pack format sampling record, and restores the hash format sampling record using the reverse hash table 43a. Therefore, the performance information collection program 1 can reduce the amount of information on function call relationships and prevent a reduction in the number of sampling records.

また、実施例では、unwind_stackプログラム21は、関数呼び出し関係の情報を呼び出し関係格納専用レジスタ85に格納する。したがって、性能収集用割込みプログラム22は、簡単に関数呼び出し関係の情報を収集することができる。   Further, in the embodiment, the unwind_stack program 21 stores the information on the function call relationship in the call relationship storage dedicated register 85. Therefore, the performance collection interrupt program 22 can easily collect information on function call relationships.

なお、実施例では、関数呼び出し時にスタック61aに戻り命令アドレス、直前のベースポインタの値、局所変数が積まれる場合について説明した。しかしながら、本発明は、これに限定されるものではなく、他のデータがスタック61aにさらに積まれる場合にも同様に適用することができる。   In the embodiment, the case where the return address, the value of the immediately preceding base pointer, and the local variable are stacked on the stack 61a at the time of function call has been described. However, the present invention is not limited to this, and is equally applicable to the case where other data is further stacked on the stack 61a.

また、実施例では、ハッシュ関数を用いて関数呼び出し関係の情報を圧縮する場合について説明した。しかしながら、本発明は、これに限定されるものではなく、ハッシュ関数以外の非可逆圧縮関数を用いて関数呼び出し関係の情報を圧縮する場合にも同様に適用することができる。   Further, in the embodiment, the case of compressing the information of the function calling relationship using the hash function has been described. However, the present invention is not limited to this, and is equally applicable to the case of compressing information of function calling relationship using a non-reversible compression function other than the hash function.

1 性能情報収集プログラム
2 サンプリングプログラム
3 サンプリングデータ記憶部
4 分析プログラム
5 集計結果記憶部
21 unwind_stackプログラム
22 性能収集用割込みプログラム
41 サンプリング形式判別部
42 ハッシュ部
43 呼び出し関係復元部
43a 逆ハッシュ表
44 呼び出し関係別集計部
60 コンピュータ
61 メモリ
61a スタック
61b ヒープ
61c バイナリコード
62 CPU
62a PMU
63 HDD
64 LANインタフェース
65 入出力インタフェース
66 DVDドライブ
71 性能収集対象コード
71a unwind_stackコード
72 ハッシュ関数コード
73 性能収集用割込みコード
74 サンプリングバッファ
80 レジスタセット
81 命令ポインタ
82 スタックポインタ
83 ベースポインタ
84 汎用レジスタ
85 呼び出し関係格納専用レジスタ
91 戻り命令アドレス
92 直前のベースポインタの値
93 myfunc用スタックフレーム
DESCRIPTION OF SYMBOLS 1 performance information collection program 2 sampling program 3 sampling data storage part 4 analysis program 5 tabulation result storage part 21 unwind_stack program 22 interrupt program for performance collection 41 sampling format discrimination part 42 hash part 43 call relation restoration part 43a reverse hash table 44 call relation Totaling unit 60 Computer 61 Memory 61a Stack 61b Heap 61c Binary code 62 CPU
62a PMU
63 HDD
64 LAN interface 65 I / O interface 66 DVD drive 71 Performance collection target code 71a unwind_stack code 72 Hash function code 73 Performance collection interrupt code 74 sampling buffer 80 register set 81 instruction pointer 82 stack pointer 83 base pointer 84 general purpose register 85 call relation storage Dedicated register 91 Return instruction address 92 Value of base pointer immediately before 93 Stack frame for myfunc

Claims (2)

コンピュータが、
関数が実行される際に、該関数の呼び出し情報を収集し、
収集した呼び出し情報を非可逆圧縮するか否かを選択し、
非可逆圧縮を選択した場合には、前記呼び出し情報を非可逆圧縮してサンプリングデータとして記憶部に格納し、非可逆圧縮を選択しなかった場合には、前記呼び出し情報を圧縮することなく、又は、可逆圧縮して前記記憶部にサンプリングデータとして格納し、
前記記憶部に格納したサンプリングデータを読み出し、該読み出したサンプリングデータに含まれる圧縮されなかった呼び出し情報又は可逆圧縮された呼び出し情報を用いて、非可逆圧縮された呼び出し情報と、圧縮されなかった呼び出し情報又は可逆圧縮された呼び出し情報とを対応付けた逆圧縮表を作成し、
非可逆圧縮された呼び出し情報から元の呼び出し情報を前記逆圧縮表に基づいて復元し、
圧縮されなかった呼び出し情報又は可逆圧縮された呼び出し情報と復元された呼び出し情報に基づいて関数の呼び出し関係を集計する
処理を実行することを特徴とする関数呼び出し情報収集方法。
The computer is
When the function is executed, collect call information of the function,
Choose whether to irreversibly compress the collected call information,
When lossy compression is selected, the call information is losslessly compressed and stored as sampling data in the storage unit, and when lossy compression is not selected, the call information is not compressed, or Losslessly compress and store as sampling data in the storage unit ,
The sampling data stored in the storage unit is read out, and the non-reversibly compressed calling information and the non-compressed calling using the non-compressed call information or the losslessly-compressed call information included in the read sampling data Create an inverse compression table that associates information or losslessly compressed call information,
The original call information is restored from the lossy-compressed call information based on the decompression table,
A function call information collecting method comprising: executing a process of tabulating a calling relation of a function based on uncompressed call information or losslessly-compressed call information and restored call information.
コンピュータに、
関数が実行される際に、該関数の呼び出し情報を収集し、
収集した呼び出し情報を非可逆圧縮するか否かを選択し、
非可逆圧縮を選択した場合には、前記呼び出し情報を非可逆圧縮してサンプリングデータとして記憶部に格納し、非可逆圧縮を選択しなかった場合には、前記呼び出し情報を圧縮することなく、又は、可逆圧縮して前記記憶部にサンプリングデータとして格納し、
前記記憶部に格納したサンプリングデータを読み出し、該読み出したサンプリングデータに含まれる圧縮されなかった呼び出し情報又は可逆圧縮された呼び出し情報を用いて、非可逆圧縮された呼び出し情報と、圧縮されなかった呼び出し情報又は可逆圧縮された呼び出し情報とを対応付けた逆圧縮表を作成し、
非可逆圧縮された呼び出し情報から元の呼び出し情報を前記逆圧縮表に基づいて復元し、
圧縮されなかった呼び出し情報又は可逆圧縮された呼び出し情報と復元された呼び出し情報に基づいて関数の呼び出し関係を集計する
処理を実行させることを特徴とする関数呼び出し情報収集プログラム。
On the computer
When the function is executed, collect call information of the function,
Choose whether to irreversibly compress the collected call information,
When lossy compression is selected, the call information is losslessly compressed and stored as sampling data in the storage unit, and when lossy compression is not selected, the call information is not compressed, or Losslessly compress and store as sampling data in the storage unit ,
The sampling data stored in the storage unit is read out, and the non-reversibly compressed calling information and the non-compressed calling using the non-compressed call information or the losslessly-compressed call information included in the read sampling data Create an inverse compression table that associates information or losslessly compressed call information,
The original call information is restored from the lossy-compressed call information based on the decompression table,
What is claimed is: 1. A function call information collection program comprising: executing a process of tabulating a calling relationship of a function based on non-compressed call information or losslessly-compressed call information and restored call information.
JP2015152834A 2015-07-31 2015-07-31 Function call information collecting method and function call information collecting program Active JP6540340B2 (en)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2015152834A JP6540340B2 (en) 2015-07-31 2015-07-31 Function call information collecting method and function call information collecting program
US15/168,282 US9858170B2 (en) 2015-07-31 2016-05-31 Function-calling-information collection method and computer-readable recording medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015152834A JP6540340B2 (en) 2015-07-31 2015-07-31 Function call information collecting method and function call information collecting program

Publications (2)

Publication Number Publication Date
JP2017033303A JP2017033303A (en) 2017-02-09
JP6540340B2 true JP6540340B2 (en) 2019-07-10

Family

ID=57885981

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015152834A Active JP6540340B2 (en) 2015-07-31 2015-07-31 Function call information collecting method and function call information collecting program

Country Status (2)

Country Link
US (1) US9858170B2 (en)
JP (1) JP6540340B2 (en)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6693308B2 (en) * 2016-07-05 2020-05-13 富士通株式会社 Load estimation program, load estimation method, and load estimation device
US10761965B2 (en) * 2018-09-28 2020-09-01 Atlassian Pty Ltd. Detecting method calls based on stack trace data
US11892936B2 (en) * 2022-04-11 2024-02-06 Microsoft Tech nology Licensing, LLC Profiling a program based on a combination of dynamic instrumentation and sampling

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3199013B2 (en) * 1998-01-26 2001-08-13 日本電気株式会社 Language processing method, language processing apparatus, and storage medium storing language processing program
JP4330429B2 (en) 2003-11-05 2009-09-16 株式会社日立製作所 Profile information acquisition apparatus and method
JP2006202134A (en) 2005-01-21 2006-08-03 Nec Micro Systems Ltd Profile information collection method and device
US7734768B2 (en) * 2005-07-26 2010-06-08 International Business Machines Corporation System and method for adaptively collecting performance and event information
JP2007259274A (en) * 2006-03-24 2007-10-04 Sony Corp Retransmission control circuit, transmission apparatus, retransmission control method and retransmission control program
JP2008021066A (en) * 2006-07-12 2008-01-31 Kyocera Mita Corp Tracing function adding method for image forming apparatus, its program, and image forming apparatus having program installed
US9264478B2 (en) * 2012-10-30 2016-02-16 Microsoft Technology Licensing, Llc Home cloud with virtualized input and output roaming over network
EP2770642B1 (en) * 2013-02-26 2022-10-05 Tata Consultancy Services Limited Systems and methods for data archival
US9417988B2 (en) * 2013-02-26 2016-08-16 Red Hat, Inc. Tracking subclasses of and operations performed by generic objects in a computer system
US9491490B1 (en) * 2015-06-12 2016-11-08 Intel Corporation Facilitating environment-based lossy compression of data for efficient rendering of contents at computing devices

Also Published As

Publication number Publication date
US20170031738A1 (en) 2017-02-02
US9858170B2 (en) 2018-01-02
JP2017033303A (en) 2017-02-09

Similar Documents

Publication Publication Date Title
EP2609501B1 (en) Dynamic calculation of sample profile reports
JP6540340B2 (en) Function call information collecting method and function call information collecting program
JP2006012066A (en) Trace analysis system and trace analysis method
CN106844607B (en) SQLite data recovery method suitable for non-integer main key and idle block combination
CN110995273B (en) Data compression method, device, equipment and medium for power database
US20200294629A1 (en) Gene sequencing data compression method and decompression method, system and computer-readable medium
US11675768B2 (en) Compression/decompression using index correlating uncompressed/compressed content
CN112328298A (en) Code library cutting method and device for mobile terminal
CN107169057B (en) Method and device for detecting repeated pictures
KR101842420B1 (en) Information processing apparatus, and data management method
CN113687773A (en) Data compression model training method and device and storage medium
KR20160113167A (en) Optimized data condenser and method
CN111078753A (en) HBase database-based time sequence data storage method and device
JP6931442B2 (en) Coding program, index generator, search program, coding device, index generator, search device, coding method, index generation method and search method
CN111488439B (en) System and method for saving and analyzing log data
US10318483B2 (en) Control method and control device
CN109271463B (en) Method for recovering inodb compressed data of MySQL database
JP2002333998A (en) System for acquiring inside information of virtual machine
JPWO2020065778A1 (en) Information processing equipment, control methods, and programs
JP3191857B2 (en) Simulation execution device and data compression method thereof
CN117194355B (en) Data processing method and device based on database and electronic equipment
JP2018181121A (en) Analyzer, analysis program, and analysis method
CN110019053B (en) Method and terminal for detecting redundant data of Unity3D resource packet
KR102139578B1 (en) Method for restoring data of database through analysis of disc block pattern
JP2003014784A (en) Digital data processing method, processor, and processing program

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180413

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20181228

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190205

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190401

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: 20190514

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190527

R150 Certificate of patent or registration of utility model

Ref document number: 6540340

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150