Re: [rvm-research] Call-Site Information
Shoaib Akram <[email protected]> Sun, 12 Jun 2016 15:57:14 +0200
| Newsgroups | gmane.comp.java.jikes.rvm.devel |
|---|---|
| Message-ID | <CAB7d=923TL6ku4gGKqkHP0YxfdsujPgHgwANALEYKKAd-+Wrgg@mail.gmail.com> |
Hi Mike,
Sure. This step is part of a larger project. First, some background. I am
using the generational mark-sweep collector with a 4 MB nursery and 3 GB
mark-sweep mature space. The mature space is never collected. The idea is
to record some statistics per object (those in the mature space) in a table
as an (object, statistics) tuple. I am intercepting all reads and writes
using barriers to collect the statistics I want. At the end of the
execution of program, I want to see each object's statistics along with its
allocation site. To accomplish the later, I first add an extra word to
MiscHeader. Then, since I am not interested in the context right now, I
include the OriginTracking.java file from your patch. Now, the places where
I calculate the site id using the OriginTracking:getValueFromLocation()
function are located in two files:
(1) rvm/src/org/jikesrvm/compilers/baseline/ia32/BaselineCompiler.java
(2) rvm/src/org/jikesrvm/compilers/opt/hir2lir/ExpandRuntimeServices.java
In the baseline compiler, I add instrumentation to four functions: (1)
emit_unresolved_new, (2) emit_resolved_newarray,
(3) emit_unresolved_newarray, and (4) emit_multianewarray. So, at the end
of each of these functions, I call the insertInitAllocSite(), which looks
like this (credit to your patch here):
private final void insertInitAllocSite() {
asm.emitPUSH_Reg(T0);
// push the value so the lowest bit of the header word is 0, which
is expected for alignment-based scanning
int value = OriginTracking.getValueFromLocation(method, biStart) <<
2;
asm.emitPUSH_Imm(value);
genParameterRegisterLoad(asm, 2);
asm.emitCALL_Abs(Magic.getTocPointer().plus(Entrypoints.initAllocSiteContextInsensitiveMethod.getOffset()));
}
Similarly, in the optimizing compiler, I add instrumentation wherever I
see: (1) NEW_opcode, (2) NEW_UNRESOLVED_opcode, (3) NEWARRAY_opcode, and
(4) NEWARRAY_UNRESOLVED_opcode.
This time, the insertInitAllocSite() looks like this:
private Instruction insertInitAllocSite(Instruction inst, RegisterOperand
objOperand, IR ir) {
RVMMethod target;
Instruction callInst;
target = Entrypoints.initAllocSiteContextInsensitiveMethod;
int value =
OriginTracking.getValueFromLocation(inst.position.getMethod(),
inst.bcIndex) << 2;
callInst = Call.create2(CALL,
null,
IRTools.AC(target.getOffset()),
MethodOperand.STATIC(target),
objOperand.copyRO(),
IRTools.IC(value));
Instruction nextInst = inst.nextInstructionInCodeOrder();
inst.insertAfter(callInst);
return nextInst;
}
EntryPoints are correctly defined. At the end of the execution of the
program, I print out the table of statistics and allocation sites. The
issue is that, for some objects, the allocation site is reported as
"MAGIC_NUMBER," which is the number I used to initialize the extra word in
MiscHeader. So, I am just wondering if some objects are following a
different allocation path(?) Hope I was able to provide all the relevant
details.
Regards,
Shoaib.
On Sat, Jun 11, 2016 at 11:34 PM, Michael Bond <[email protected]>
wrote:
> Hi Shoaib,
>
> It's hard to tell what exactly's going on or what your code changes are.
> Could you please provide more detail?
>
> Cheers,
> Mike
>
>
> On 06/11/2016 12:31 AM, Shoaib Akram wrote:
>
> Sorry Mike. I din’t state my question clearly enough. For some objects,
> the extra word in the MiscHeader I reserve for encoding the site id is
> never modified. It is the same value with what I initialized it with in
> MiscHeader.java. For others it is overwritten by either the instrumentation
> in the baseline or the optimizing compiler.
>
>
> On Jun 11, 2016, at 1:06 AM, Michael Bond < <[email protected]>
> [email protected]> wrote:
>
> Hi Shoaib,
>
> This sounds like the expected behavior: the value in an object's
> MiscHeader is preserved even after GC copies it. Are you wanting something
> else to happen? (If so, try modifying how copying in GC works; there are
> method that you can implement/modify called "postCopyAlloc" or something
> like that to modify what's in the MiscHeader.)
>
> If I'm missing the point, can you say what's the high-level thing you're
> trying to do? Maybe people on this list will have suggestions for what's
> the best way to do that.
>
> Cheers,
> Mike
>
> On 06/10/2016 01:29 PM, Shoaib Akram wrote:
>
> Thanks Mike! I used the patch to encode the static allocation site ids in
> the object header. I added instrumentation code to both the baseline
> compiler and the optimizing compiler (BaselineCompilerImpl.java and
> opt/hir2lir/ExpandRuntimeServices.java), wherever new allocations are being
> handled. But for some objects, the allocation site id in MiscHeader at the
> end of the execution of programs is still the same value I used during
> initialization. I understand this happening for objects in the boot space
> But I don't see why this is happening to objects in the mature and the
> large space. Am I missing something?
>
> On Wed, May 25, 2016 at 4:10 AM, Michael Bond <
> <[email protected]>[email protected]> wrote:
>
>> Hi Shoaib,
>>
>> Yes, this is definitely possible. There are two different ways to do it:
>>
>> (1) Insert instrumentation at compile time that "knows" the static
>> allocation site. For example, during compile time, assign a unique integer
>> for every allocation site, and generate instrumentation that writes that
>> integer into the object header.
>>
>> (2) Insert instrumentation at compile time that figures out the
>> allocation site at run time. It can do this by looking at the frame pointer
>> and compiled method ID as you say; it gets a little bit complex with
>> optimized code and inlining.
>>
>> My group's patch for calling context profiling (
>> https://sourceforge.net/p/jikesrvm/research-archive/44/) has code
>> related to both approaches.
>>
>> One gotcha: There's an issue in Jikes RVM (<=3.1.3, at least) such that
>> if the left-most word (by default, this'll be the MiscHeader word) has the
>> least-significant bit as 1 instead of 0, Jikes RVM will crash (at least
>> with certain GCs?). You can avoid this by making sure it's always 0 or by
>> putting the MiscHeader to the right of the TIB pointer; see our Octet patch
>> for an example of the latter (
>> https://sourceforge.net/p/jikesrvm/research-archive/43/).
>>
>> Regarding your question about calling into Jikes RVM from MMTk: this is
>> definitely possible, but it's required to go through a specific interface.
>> See classes in org.mmtk.vm such as org.mmtk.vm.Barriers (an abstract method
>> that has a Jikes RVM-specific implementation). You can add your own method
>> to own of the these classes; the method can access Jikes RVM stuff but be
>> called from MMTk.
>>
>> Cheers,
>> Mike
>>
>>
>> On 05/24/2016 02:28 PM, Shoaib Akram wrote:
>>
>> Hi All,
>>
>> Hello from PerformanceLab @ Ghent University in Belgium. I want to ask if
>> there is support in JikesRVM to identify the call-site of an allocation.
>> Suppose I have the code below:
>>
>> 1 public IntersectionState() {
>> 2 stack = new StackNode[MAX_STACK_SIZE * 2];
>> 3 for (int i = 0; i < stack.length; i++)
>> 4 stack[i] = new StackNode();
>> 5 rstack = new float[53 * 256];
>> 6 }
>>
>> Each time a new object is allocated (line no. 4 above), I want to store
>> the call-site information (line 4) in the header of the object. Is it
>> possible to get the unique identity of the method and index within the
>> method, where a new object is being allocated from?
>>
>> There are some routines in runtime/Magic.java that let you get the
>> current frame pointer or the id of the compiled method, but I am not sure
>> if they usable from within MMTk(?) Does anyone know an an easy way to get
>> the site information at allocation time?
>>
>> Thanks in advance!
>>
>> --
>> *Shoaib Akram*
>> *ELIS - Gent University*
>> *Belgium*
>>
>>
>> ------------------------------------------------------------------------------
>> Mobile security can be enabling, not merely restricting. Employees who
>> bring their own devices (BYOD) to work are irked by the imposition of MDM
>> restrictions. Mobile Device Manager Plus allows you to control only the
>> apps on BYO-devices by containerizing them, leaving personal data untouched!https://ad.doubleclick.net/ddm/clk/304595813;131938128;j
>>
>>
>>
>> _______________________________________________
>> Jikesrvm-researchers mailing [email protected]://lists.sourceforge.net/lists/listinfo/jikesrvm-researchers
>>
>>
>>
>>
>> ------------------------------------------------------------------------------
>> Mobile security can be enabling, not merely restricting. Employees who
>> bring their own devices (BYOD) to work are irked by the imposition of MDM
>> restrictions. Mobile Device Manager Plus allows you to control only the
>> apps on BYO-devices by containerizing them, leaving personal data
>> untouched!
>> https://ad.doubleclick.net/ddm/clk/304595813;131938128;j
>> _______________________________________________
>> Jikesrvm-researchers mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/jikesrvm-researchers
>>
>>
>
>
> --
> *Shoaib Akram*
> *ELIS - Gent University*
> *Belgium*
>
>
> ------------------------------------------------------------------------------
> What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic
> patterns at an interface-level. Reveals which users, apps, and protocols are
> consuming the most bandwidth. Provides multi-vendor support for NetFlow,
> J-Flow, sFlow and other flows. Make informed decisions using capacity
> planning reports. https://ad.doubleclick.net/ddm/clk/305295220;132659582;e
>
>
>
> _______________________________________________
> Jikesrvm-researchers mailing [email protected]://lists.sourceforge.net/lists/listinfo/jikesrvm-researchers
>
>
>
> ------------------------------------------------------------------------------
> What NetFlow Analyzer can do for you? Monitors network bandwidth and
> traffic
> patterns at an interface-level. Reveals which users, apps, and protocols
> are
> consuming the most bandwidth. Provides multi-vendor support for NetFlow,
> J-Flow, sFlow and other flows. Make informed decisions using capacity
> planning reports.
> https://ad.doubleclick.net/ddm/clk/305295220;132659582;e_______________________________________________
> Jikesrvm-researchers mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/jikesrvm-researchers
>
>
>
>
> ------------------------------------------------------------------------------
> What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic
> patterns at an interface-level. Reveals which users, apps, and protocols are
> consuming the most bandwidth. Provides multi-vendor support for NetFlow,
> J-Flow, sFlow and other flows. Make informed decisions using capacity
> planning reports. https://ad.doubleclick.net/ddm/clk/305295220;132659582;e
>
>
>
> _______________________________________________
> Jikesrvm-researchers mailing [email protected]://lists.sourceforge.net/lists/listinfo/jikesrvm-researchers
>
>
>
>
> ------------------------------------------------------------------------------
> What NetFlow Analyzer can do for you? Monitors network bandwidth and
> traffic
> patterns at an interface-level. Reveals which users, apps, and protocols
> are
> consuming the most bandwidth. Provides multi-vendor support for NetFlow,
> J-Flow, sFlow and other flows. Make informed decisions using capacity
> planning reports. https://ad.doubleclick.net/ddm/clk/305295220;132659582;e
> _______________________________________________
> Jikesrvm-researchers mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/jikesrvm-researchers
>
>
--
*Shoaib Akram*
*ELIS - Gent University*
*Belgium*
------------------------------------------------------------------------------
What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic
patterns at an interface-level. Reveals which users, apps, and protocols are
consuming the most bandwidth. Provides multi-vendor support for NetFlow,
J-Flow, sFlow and other flows. Make informed decisions using capacity
planning reports. https://ad.doubleclick.net/ddm/clk/305295220;132659582;e
_______________________________________________
Jikesrvm-researchers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jikesrvm-researchers