15.01.2015 Views

4th International Conference on Principles and Practices ... - MADOC

4th International Conference on Principles and Practices ... - MADOC

4th International Conference on Principles and Practices ... - MADOC

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

instrumented program <strong>and</strong> obtained the dynamic executi<strong>on</strong><br />

trace which includes c<strong>on</strong>cept informati<strong>on</strong>, we are now in a<br />

positi<strong>on</strong> to perform some dynamic analysis.<br />

3.2 Dynamic Analysis for C<strong>on</strong>cept Proporti<strong>on</strong>s<br />

The first analysis simply processes the dynamic c<strong>on</strong>cept<br />

trace <strong>and</strong> calculates the overall amount of time spent in each<br />

c<strong>on</strong>cept. (At this stage we do not permit nesting of c<strong>on</strong>cepts,<br />

so code can <strong>on</strong>ly bel<strong>on</strong>g to a single c<strong>on</strong>cept at any point in<br />

executi<strong>on</strong> time.) This analysis is similar to st<strong>and</strong>ard functi<strong>on</strong><br />

profiling, except that it is now based <strong>on</strong> specificati<strong>on</strong>level<br />

features of programs, rather than low-level syntactic<br />

features such as functi<strong>on</strong> calls.<br />

The tool outputs its data in a format suitable for use with<br />

the Kcachegrind profiling <strong>and</strong> visualizati<strong>on</strong> toolkit [1]. Figure<br />

3 shows a screenshot of the Kcachegrind system, with<br />

data from the BasicPredictors program. It is clear to see<br />

that most of the time is spent in the system c<strong>on</strong>cept. It is<br />

also interesting to note that predictor c<strong>on</strong>text is far more<br />

expensive than predictor compute. This is a well-known<br />

fact in the value predicti<strong>on</strong> literature [19].<br />

3.3 Dynamic Analysis for C<strong>on</strong>cept Phases<br />

While the analysis above is useful for determining overall<br />

time spent in each c<strong>on</strong>cept, it gives no indicati<strong>on</strong> of the<br />

temporal relati<strong>on</strong>ship between c<strong>on</strong>cepts.<br />

It is comm<strong>on</strong>ly acknowledged that programs go through different<br />

phases of executi<strong>on</strong> which may be visible at the microarchitectural<br />

[7] <strong>and</strong> method [9, 15] levels of detail. It<br />

should be possible to visualize phases at the higher level of<br />

c<strong>on</strong>cepts also.<br />

So the visualizati<strong>on</strong> in Figure 4 attempts to plot c<strong>on</strong>cepts<br />

against executi<strong>on</strong> time. The different c<strong>on</strong>cepts are highlighted<br />

in different colours, with time running horiz<strong>on</strong>tally<br />

from left-to-right. Again, this informati<strong>on</strong> is extracted from<br />

the dynamic c<strong>on</strong>cept trace using a simple perl script, this<br />

time visualized as HTML within any st<strong>and</strong>ard web browser.<br />

There are many algorithms to perform phase detecti<strong>on</strong> but<br />

even just by observati<strong>on</strong>, it is possible to see three phases<br />

in this program. The startup phase has l<strong>on</strong>g periods of<br />

system (opening <strong>and</strong> reading files) <strong>and</strong> predictor c<strong>on</strong>text<br />

(setting up initial table) c<strong>on</strong>cept executi<strong>on</strong>. This is followed<br />

by a periodic phase of predicti<strong>on</strong> c<strong>on</strong>cepts, alternately<br />

predictor c<strong>on</strong>text <strong>and</strong> predictor compute. Finally there<br />

is a result report <strong>and</strong> shutdown phase.<br />

3.4 Applying this Informati<strong>on</strong><br />

How can these visualizati<strong>on</strong>s be used They are ideal for<br />

visualizati<strong>on</strong> <strong>and</strong> program comprehensi<strong>on</strong>. They may also<br />

be useful tools for debugging (since c<strong>on</strong>cept anomalies often<br />

indicate bugs [22]) <strong>and</strong> profiling (since they show where most<br />

of the executi<strong>on</strong> time is spent).<br />

Extensi<strong>on</strong>s are possible. At the moment we <strong>on</strong>ly draw a<br />

single bar. It would be necessary to move to something<br />

resembling a Gantt chart if we allow nested c<strong>on</strong>cepts (so a<br />

source code entity can bel<strong>on</strong>g to more than <strong>on</strong>e c<strong>on</strong>cept at<br />

<strong>on</strong>ce) or if we have multiple threads of executi<strong>on</strong> (so more<br />

than <strong>on</strong>e c<strong>on</strong>cept is being executed at <strong>on</strong>ce).<br />

4. DYNAMIC ANALYSIS FOR LARGE JAVA<br />

PROGRAM<br />

The sec<strong>on</strong>d case study uses Jikes RVM [2] which is a reas<strong>on</strong>ably<br />

large Java system. It is a producti<strong>on</strong>-quality adaptive<br />

JVM written in Java. It has become a significant vehicle for<br />

JVM research, particularly into adaptive compilati<strong>on</strong> mechanisms<br />

<strong>and</strong> garbage collecti<strong>on</strong>. All the tests reported in this<br />

secti<strong>on</strong> use Jikes RVM versi<strong>on</strong> 2.4.4 <strong>on</strong> IA32 Linux.<br />

A comm<strong>on</strong> complaint from new users of Jikes RVM is that<br />

it is hard to underst<strong>and</strong> how the different adaptive runtime<br />

mechanisms operate <strong>and</strong> interact. So this case study selects<br />

some high-level c<strong>on</strong>cepts from the adaptive infrastructure,<br />

thus enabling visualizati<strong>on</strong> of runtime behaviour.<br />

After some navigati<strong>on</strong> of the Jikes RVM source code, we<br />

inserted c<strong>on</strong>cepts tags around a few key points that encapsulate<br />

adaptive mechanisms like garbage collecti<strong>on</strong> <strong>and</strong><br />

method compilati<strong>on</strong>. Note that all code not in such a c<strong>on</strong>cept<br />

(both Jikes RVM code <strong>and</strong> user applicati<strong>on</strong> code) is in<br />

the default system c<strong>on</strong>cept.<br />

4.1 Garbage Collecti<strong>on</strong><br />

Figure 5 shows c<strong>on</strong>cept visualizati<strong>on</strong> of two runs of the<br />

_201_compress benchmark from SPEC JVM98. The top<br />

run has an initial <strong>and</strong> maximum heap size of 20MB (-Xms20M<br />

-Xmx20M) whereas the bottom run has an initial <strong>and</strong> maximum<br />

heap size of 200MB. It is clear to see that garbage<br />

collecti<strong>on</strong> occurs far more frequently in the smaller heap,<br />

as might be expected. In the top run, the garbage collector<br />

executes frequently <strong>and</strong> periodically, doing a n<strong>on</strong>-trivial<br />

amount of work as it compacts the heap. In the bottom<br />

run, there is a single trivial call to System.gc() as part of<br />

the initial benchmark harness code. After this, garbage collecti<strong>on</strong><br />

is never required so we assume that the heap size is<br />

larger than the memory footprint of the benchmark.<br />

Many other garbage collecti<strong>on</strong> investigati<strong>on</strong>s are possible.<br />

So far we have <strong>on</strong>ly c<strong>on</strong>sidered varying the heap c<strong>on</strong>figurati<strong>on</strong>.<br />

It is also possible to change the garbage collecti<strong>on</strong><br />

algorithms in Jikes RVM, <strong>and</strong> determine from c<strong>on</strong>cept visualizati<strong>on</strong>s<br />

what effect this has <strong>on</strong> runtime performance.<br />

4.2 Runtime Compilati<strong>on</strong><br />

In the investigati<strong>on</strong> above, the compilati<strong>on</strong> c<strong>on</strong>cept <strong>on</strong>ly<br />

captures optimizing compiler behaviour. However since Jikes<br />

RVM is an adaptive compilati<strong>on</strong> system, it has several levels<br />

of compilati<strong>on</strong>. The cheapest compiler to run (but <strong>on</strong>e<br />

that generates least efficient code) is known as the baseline<br />

compiler. This is a simple macro-expansi<strong>on</strong> routine<br />

from Java bytecode instructi<strong>on</strong>s to IA32 assembler. Higher<br />

levels of code efficiency (<strong>and</strong> corresp<strong>on</strong>ding compilati<strong>on</strong> expense!)<br />

are provided by the sophisticated optimizing compiler,<br />

which can operate at different levels since it has many<br />

flags to enable or disable various optimizati<strong>on</strong> strategies. In<br />

general, Jikes RVM initially compiles applicati<strong>on</strong> methods<br />

using the baseline compiler. The adaptive m<strong>on</strong>itoring system<br />

identifies ‘hot’ methods that are frequently executed,<br />

<strong>and</strong> these are c<strong>and</strong>idates for optimizing compilati<strong>on</strong>. The<br />

hottest methods should be the most heavily optimized methods.<br />

34

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!