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:
-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?iprof.cfg in the same directory
where you are starting DRLVM.The configuration file iprof.cfg consists of a list of global parameters
and a list of counters, as defined in this section.
Config.PrintBBStats=false #(boolean)
This parameter turns on statistics dumping for all basic blocks of a method.
Counters collect information about executed instructions defined by the filter. Counters have the following attributes:
[begin]/[end] section starting with Counter.,
and all symbols after it and up to
the next period . or an
equal mark = or \n constitute the name of the counter.AND expression. You can also use the
IsOr filter attribute to provide an OR operation for all filter parameters, for example:
Counter.Name0.IsOr=trueExample
########### [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.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
Mnemonic Instruction mnemonic
OperandNumber Number of operands
RuntimeInfo.Kind Runtime information kind
RuntimeInfo.HelperID VM Helper identifier
RuntimeInfo.IntHelperName Internal helper name
isNative
isStatic
isSynchronized
isNoInlining
isInstance
isFinal
isVirtual
isAbstract
isClassInitializer
isInstanceInitializer
isStrict
isRequireSecObject
isInitLocals
isOverridden
The counter does not work for other instructions.
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.
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.
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]