Re: [rvm-research] Call-Site Information

Robin Garner <[email protected]> Tue, 14 Jun 2016 14:10:52 +1000
Newsgroups gmane.comp.java.jikes.rvm.devel
Message-ID <[email protected]>
Which classes are not being instrumented ?  This might give a clue.

One way to track it down might be to add an assertion to 
MemoryManager.allocSpace if 'site' is MAGIC_NUMBER.

cheers

On 13/06/16 02:30, Shoaib Akram wrote:
> 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] <mailto:[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]
>     <mailto:[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]
>         <mailto:[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
>>>             <<mailto:[email protected]>[email protected]
>>>             <mailto:[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
>>>>             <<mailto:[email protected]>[email protected]
>>>>             <mailto:[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 list
>>>>>                 [email protected]
>>>>>                 <mailto:[email protected]>
>>>>>                 https://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]
>>>>                 <mailto:[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]
>>>>             <mailto:[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]
>>>             <mailto:[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]
>>             <mailto:[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]
>             <mailto:[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]
>         <mailto:[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]
>     <mailto:[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