Re: [rvm-research] Call-Site Information
Aritra Sengupta <[email protected]> Sun, 12 Jun 2016 09:24:22 -0700
| Newsgroups | gmane.comp.java.jikes.rvm.devel |
|---|---|
| Message-ID | <CAHdE_JpGyL68s=gNM6yV6pOPS1dC=8R4OBxOtis0ge=t5XsmDg@mail.gmail.com> |
Hi Shoaib,
Is there a reason why you skip instrumentation in case of
resolved classes in the baseline compiler using emit_resolved_new()? It
could just be that this case is not covered.
Thanks,
Aritra Sengupta.
PhD Candidate,
Ohio State University.
On Sun, Jun 12, 2016 at 6:57 AM, Shoaib Akram <[email protected]> wrote:
> 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
>
>
------------------------------------------------------------------------------
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