Jitrino.OPT Internal Profiler Tool

This document defines the internal profiler tool (iprof) for Jitrino.OPT code generator and describes how to use it. The internal profiler can instrument code so that per-method counters of executed (not just compiled) instructions can be dumped. Operation of iprof is configured in the iprof.cfg file, as described in this document.

To enable iprof, do the following:

  1. Put extra options: -Djit.arg.codegen.iprof=on XcleanupOnExit TODO: where to put these options? do you mean, 'specify on vm startup', just 'specify on the command line' or something?
  2. Place the configuration file iprof.cfg in the same directory where you are starting DRLVM.

Configuring the Profiler

The configuration file iprof.cfg consists of a list of global parameters and a list of counters, as defined in this section.

Available global parameters

Config.PrintBBStats=false #(boolean)

This parameter turns on statistics dumping for all basic blocks of a method.

Counters

Counters collect information about executed instructions defined by the filter. Counters have the following attributes:

Example

###########
[begin]
Counter.CALL.Mnemonic=CALL
[end]
 
[begin]
Counter.AddCounter.Title=ADD_EAX_COUNTER
Counter.AddCounter.Mnemonic=ADD
Counter.AddCounter.Operand.0.RegName=EAX
[end]
###########

All properties of an instruction correspond to names of entities of the Jitrino IA-32 code generator, for example:

Mnemonic_CALL => CALL
OpndKind_Mem => Mem
Operand attributes
Operand.OpNum Operand number (can be *)
Operand.OpNum.OpndRole Operand role
Operand.OpNum.OpndKind Operand kind
Operand.OpNum.RegName Register name
Operand.OpNum.MemOpndKind Memory operand kind
Instruction attributes
Mnemonic Instruction mnemonic
OperandNumber Number of operands
Run-time information attributes
RuntimeInfo.Kind Runtime information kind
RuntimeInfo.HelperID VM Helper identifier
RuntimeInfo.IntHelperName Internal helper name
Call instruction attributes
isNative
isStatic
isSynchronized
isNoInlining
isInstance
isFinal
isVirtual
isAbstract
isClassInitializer
isInstanceInitializer
isStrict
isRequireSecObject
isInitLocals
isOverridden

The counter does not work for other instructions.

Re-using Filter Parameters between Counters

Filter parameters of a counter can be re-used and extended by another counter, for example:

[begin]
Counter.CALL_Inst.Mnemonic=CALL
[end]
[begin]
Counter.I_HELPER_CALL=CALL_Inst
Counter.I_HELPER_CALL.RuntimeInfo.Kind=InternalHelperAddress
[end]

Warning

Space characters should not be used outside comments.

Dumping of Counters

The iprof tool creates the file iprof.stat on exit of a DRLVM session in the directory where DRLVM was started. Tabbed text format can be edited by spreadsheets.

Example of iprof Configuration File

Config.PrintBBStats=true
[begin]
#for counting of all instructions you can specify any word as Mnemonic
Counter.Insts.Mnemonic=Any
[end]
 
#hardcoded counters with only parameter "title"
###############################################
[begin]
#Size of java bytecode of a method
Counter.ByteCodeSize
[end]
#
[begin]
#Number of execution times of the hottest basic block of a method
Counter.MaxBBExec
[end]
[begin]
##ID nuber of the hottest basic block
Counter.HottestBBNum
[end]
#
[begin]
##Number of exception handlers of a method
Counter.ExcHandlersNum
[end]
#
[begin]
#Number of calls of a method
Counter.MethodExec
Counter.MethodExec.Title=Number of calls of a method
[end]
#
[begin]
#Basic block execution count
Counter.BBExec
[end]
################################################
[begin]
Counter.OpNum.OpndNumber=3
[end]
[begin]
#count instructions with memory access in first five operands
Counter.MemOpnd.IsOR=true
Counter.MemOpnd.Operand.*.OpndKind=Mem
#Counter.MemOpnd.Operand.1.OpndKind=Mem
[end]
[begin]
Counter.UseOpnd.Operand.0.OpndRole=Use
[end]
[begin]
Counter.EAXOpnd.Operand.0.RegName=EAX
[end]
[begin]
Counter.HeapOpnd.Operand.0.MemOpndKind=Heap
[end]
[begin]
Counter.Method.isNative=true
Counter.Method.isStatic=true
Counter.Method.isSynchronized=true
Counter.Method.isNoInlining=true
Counter.Method.isInstance=true
Counter.Method.isFinal=true
Counter.Method.isVirtual=true
Counter.Method.isAbstract=true
Counter.Method.isClassInitializer=true
Counter.Method.isInstanceInitializer=true
Counter.Method.isStrict=true
Counter.Method.isRequireSecObject=true
Counter.Method.isInitLocals=true
Counter.Method.isOverridden=true
[end]
 
[begin]
Counter.CALL.Mnemonic=CALL
[end]
[begin]
Counter.I_HELPER_CALL=CALL
Counter.I_HELPER_CALL.RuntimeInfo.Kind=InternalHelperAddress
[end]
[begin]
Counter.HELPER_CALL=CALL
Counter.HELPER_CALL.RuntimeInfo.Kind=HelperAddress
Counter.HELPER_CALL.RuntimeInfo.HelperID=LdString
[end]