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