Re: [rvm-research] Call-Site Information

Shoaib Akram <[email protected]> Sun, 12 Jun 2016 18:30:41 +0200
Newsgroups gmane.comp.java.jikes.rvm.devel
Message-ID <CAB7d=93D0MKSbcT3jOo=00b7tF48xgQ05KXinT790x6_qOKW-g@mail.gmail.com>
Hi Aritra,

I do add instrumentation in case of emit_resolved_new() in the baseline
compiler. It just slipped my mind when writing the previous email.

Regards,
Shoaib.

On Sun, Jun 12, 2016 at 6:24 PM, Aritra Sengupta <[email protected]>
wrote:

> 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
>
>


-- 
*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