Insert Special Code Sequence After Object allocation
Xin Tong
xerox.time.tech at gmail.com
Tue Nov 27 23:20:54 PST 2012
Is there a way to turn off UseTLAB BTW ? it is turned on by default here.
void PhaseMacroExpand::expand_allocate_common(
AllocateNode* alloc, // allocation node to be expanded
Node* length, // array length for an array allocation
const TypeFunc* slow_call_type, // Type of slow call
address slow_call_address // Address of slow call
)
{
...
printf("UseTLAB is %d\n", UseTLAB);
if (C->env()->dtrace_alloc_probes() ||
!UseTLAB && (!Universe::heap()->supports_inline_contig_alloc() ||
(UseConcMarkSweepGC && CMSIncrementalMode))) {
// Force slow-path allocation
printf("Force slow-path allocation\n");
always_slow = true;
initial_slow_test = NULL;
}
...
}
Xin
On Wed, Nov 28, 2012 at 1:51 AM, Xin Tong <xerox.time.tech at gmail.com> wrote:
> On Wed, Nov 28, 2012 at 1:35 AM, Krystal Mo <krystal.mo at oracle.com> wrote:
>> On 11/28/2012 02:02 PM, Xin Tong wrote:
>>>
>>> On Wed, Nov 28, 2012 at 12:58 AM, Xin Tong <xerox.time.tech at gmail.com>
>>> wrote:
>>>>
>>>> On Tue, Nov 27, 2012 at 11:23 PM, Krystal Mo <krystal.mo at oracle.com>
>>>> wrote:
>>>>>
>>>>> Hi Xin,
>>>>>
>>>>> Depends on what the code sequence is and what it does.
>>>>>
>>>>> If the code sequence you're inserting can be represented in C2's IR
>>>>> nodes,
>>>>> then you can try to add those nodes in either
>>>>> PhaseMacroExpand::expand_allocate_common() or
>>>>> PhaseMacroExpand::initialize_object(), or somewhere else around.
>>>>>
>>>> It is a few assembly instructions. can i wrap the assemblies in a
>>>> function that hasa prologue and epilogue to save everything. and does
>>>> the IR has any way of calling a function ?
>>>>
>>>> Xin
>>>
>>> Or another thing i am willing to do is to force the JIT to always fail
>>> on the inlined allocation and force it to the out-of-line ( VM
>>> managed) allocation. I just do not want to turn the JIT completely off
>>> as that have an big impact on the behaviours of the program. Is this
>>> doable ?
>>
>> Sure, if you're willing take the performance hit.
>>
>> It's easy: in PhaseMacroExpand::expand_allocate_common(), just make sure the
>> local variables initial_slow_test and always_slow are assigned NULL and true
>> respectively, and there you go. It'll call into
>> OptoRuntime::new_instance_C().
>>
>
> I change the bool always_slow = true; it runs ok. but when i change
> Node* initial_slow_test = NULL ;
> //alloc->in(AllocateNode::InitialTest);
> the VM crashes. Is it necessary to make initial_slow_test to NULL ? is
> not initial_slow_test used to initialize allocattion from slow path ?
>
> # A fatal error has been detected by the Java Runtime Environment:
> #
> # SIGSEGV (0xb) at pc=0x00007fd6d0e58572, pid=18333, tid=140560399947520
> #
> # JRE version: 7.0
> # Java VM: OpenJDK 64-Bit Server VM (23.2-b09 mixed mode linux-amd64
> compressed oops)
> # Problematic frame:
> # V [libjvm.so+0x7b6572] BoolNode::make_predicate(Node*, PhaseGVN*)+0x22
> #
> # Failed to write core dump. Core dumps have been disabled. To enable
> core dumping, try "ulimit -c unlimited" before starting Java again
> #
> # An error report file with more information is saved as:
> # /home/xtong/fastcache/benchmarks/SPECJBB2005/hs_err_pid18333.log
> #
> # If you would like to submit a bug report, please visit:
> # http://bugreport.sun.com/bugreport/crash.jsp
> #
> ./run.sh: line 13: 18333 Aborted (core dumped) java
> -Xms1024m -Xmx2048m spec.jbb.JBBmain -propfile SPECjbb.props
>
>
> Xin
>
>
>
>> - Kris
>>
>>
>>> Xin
>>>
>>>>> If your code sequence cannot be represented in C2's IR, well, that will
>>>>> take
>>>>> some effort. The AllocateNode is lost after PhaseMacroExpand, so you
>>>>> can't
>>>>> use it as a mark to insert your code. You might want to use
>>>>> prefetchAlloc in
>>>>> the AD files as a place to insert code, if that works for your purpose.
>>>>>
>>>>> That said, though, if the code sequence could be written in Java
>>>>> bytecode,
>>>>> that'll be the easiest solution: don't have to touch the VM, just do
>>>>> bytecode instrumentation.
>>>>>
>>>>> - Kris
>>>>>
>>>>>
>>>>> On 2012/11/28 10:36, Xin Tong wrote:
>>>>>>
>>>>>> I would like to insert a special binary code sequence after the
>>>>>> allocation of a java object in the opto JIT code. can anyone tell me
>>>>>> how to do that ?
>>>>>>
>>>>>> Xin
>>
>>
More information about the hotspot-compiler-dev
mailing list