<oai_dc:dc xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
  <dc:contributor>Binder, Walter</dc:contributor>
  <dc:creator>Zheng, Yudi</dc:creator>
  <dc:date>2017-05-02</dc:date>
  <dc:description xmlns:ns0="xml" ns0:lang="en">Managed language platforms such as the Java Virtual Machine rely on a dynamic  compiler to achieve high performance. Despite the benefits that dynamic compilation  provides, it also introduces some challenges to program profiling. Firstly, profilers  based on bytecode instrumentation may yield wrong results in the presence of an  optimizing dynamic compiler, either due to not being aware of optimizations, or  because the inserted instrumentation code disrupts such optimizations. To avoid such  perturbations, we present a technique to make profilers based on bytecode  instrumentation aware of the optimizations performed by the dynamic compiler, and  make the dynamic compiler aware of the inserted code. We implement our technique  for separating inserted instrumentation code from base-program code in Oracle's  Graal compiler, integrating our extension into the OpenJDK Graal project. We  demonstrate its significance with concrete profilers. On the one hand, we improve  accuracy of existing profiling techniques, for example, to quantify the impact of escape  analysis on bytecode-level allocation profiling, to analyze object life-times, and to  evaluate the impact of method inlining when profiling method invocations. On the other  hand, we also illustrate how our technique enables new kinds of profilers, such as a  profiler for non-inlined callsites, and a testing framework for locating performance bugs  in dynamic compiler implementations. Secondly, the lack of profiling support at the  intermediate representation (IR) level complicates the understanding of program  behavior in the compiled code. This issue cannot be addressed by bytecode  instrumentation because it cannot precisely capture the occurrence of IR-level  operations. Binary instrumentation is not suited either, as it lacks a mapping from the  collected low-level metrics to higher-level operations of the observed program. To fill  this gap, we present an easy-to-use event-based framework for profiling operations at  the IR level. We integrate the IR profiling framework in the Graal compiler, together with  our instrumentation-separation technique. We illustrate our approach with a profiler that  tracks the execution of memory barriers within compiled code. In addition, using a  deoptimization profiler based on our IR profiling framework, we conduct an empirical  study on deoptimization in the Graal compiler. We focus on situations which cause  program execution to switch from machine code to the interpreter, and compare  application performance using three different deoptimization strategies which influence  the amount of extra compilation work done by Graal. Using an adaptive deoptimization  strategy, we manage to improve the average start-up performance of benchmarks  from the DaCapo, ScalaBench, and Octane suites by avoiding wasted compilation  work. We also find that different deoptimization strategies have little impact on steady- state performance.</dc:description>
  <dc:format>application/pdf</dc:format>
  <dc:identifier>https://localhost:5000/ark:/12658/srd1318732</dc:identifier>
  <dc:identifier>https://susi.usi.ch/global/documents/318732</dc:identifier>
  <dc:identifier>https://susi.usi.ch/documents/318732/files/2017INFO003.pdf</dc:identifier>
  <dc:language>eng</dc:language>
  <dc:relation>info:eu-repo/semantics/altIdentifier/urn/urn:nbn:ch:rero-006-116130</dc:relation>
  <dc:relation>info:eu-repo/semantics/altIdentifier/ark/12658/srd1318732</dc:relation>
  <dc:rights>info:eu-repo/semantics/openAccess</dc:rights>
  <dc:rights>License undefined</dc:rights>
  <dc:subject xmlns:ns1="xml" ns1:lang="en">Dynamic compilers</dc:subject>
  <dc:subject xmlns:ns2="xml" ns2:lang="en">Profiling</dc:subject>
  <dc:subject xmlns:ns3="xml" ns3:lang="en">Bytecode instrumentation</dc:subject>
  <dc:subject xmlns:ns4="xml" ns4:lang="en">Intermediate representation</dc:subject>
  <dc:subject xmlns:ns5="xml" ns5:lang="en">Profile-guided optimization</dc:subject>
  <dc:subject xmlns:ns6="xml" ns6:lang="en">Deoptimization</dc:subject>
  <dc:subject>info:eu-repo/classification/udc/004</dc:subject>
  <dc:title xmlns:ns7="xml" ns7:lang="en">Observable dynamic compilation</dc:title>
  <dc:type>http://purl.org/coar/resource_type/c_db06</dc:type>
</oai_dc:dc>
