Abstract :
A primary goal of program performance understanding tools is to focus the user´s attention directly on optimization opportunities where significant cost savings may be found. Optimization opportunities fall into (at least) three broad categories: the call context of a general component may obviate the need for some of its generality; cross-cutting program aspects may be implemented suboptimally for the particular context of use; and thread dependencies may cause unintended delays. This paper enhances prior work in call path profiling in several ways. First, it provides two different call path oriented views on program performance, a server view and a thread view. The former helps one optimize for throughput, while the latter is useful for optimizing thread latency. The views incorporate a typed time notation for representing different program activities, such as monitor wait and thread preemption times. Second, the new framework allows aspect-oriented program profiling, even when the original program was not designed in an aspect oriented fashion. Finally, the approach is implemented in a tool, CPPROFJ, an aspect-capable call path profiler for Java. It exploits recent developments in the Java APIs to achieve accurate and portable sampling-based profiling. Three case studies illustrate its use.
Keywords :
Java; application program interfaces; multi-threading; object-oriented programming; reverse engineering; software performance evaluation; CpprofJ; Java; aspect-capable call path profiling; aspect-oriented program profiling; call context; monitor wait; multi-threaded Java; program performance; program performance understanding tools; thread dependencies; thread preemption times; typed time notation; Computer bugs; Cost function; Delay; Design optimization; Java; Monitoring; Program processors; Testing; Throughput; Yarn;