Understanding and Tuning the Performance of Synchronized Methods in Java with Program Analysis and Software Visualization Tools
Understanding the behavior and performance of concurrent multithreaded programs remains
a difficult problem for software engineers. As software relies on the addition of
multiple processors to increase throughput and execution speed, software must become
increasingly multithreaded to reap the performance gains. Multithreaded programs however
have to coordinate and share resources, a... read morend where these resources are shared (known as a
critical section) becomes a potential performance bottleneck. Programmers want to
maximize performance by taking extra effort to write concurrent software, but they also
want to ensure that time spent in a critical section is minimized to reduce the amount
of code that executes sequentially. Often times programmers favor correctness, but do
not pay attention to performance within critical sections. In this dissertation critical
sections are investigated specifically because high variability in their execution time
can be a key component of a program not matching performance expectations. This high
variability within executions of a critical section can unpredictably impede threads
from making progress and be a source of software hangs. These occasional transient
program hangs in critical sections interrupt a smooth user experience, and are difficult
to find and reproduce as they are infrequent and hard to reproduce. Thus, there is a
need to research and develop tools that can uncover new insights into critical sections.
Thesis Statement: Static, dynamic, and software visualization analysis tools
specifically focused on critical sections are needed to help uncover unexplored
variability in critical sections to avoid unintended software hangs. This dissertation
presents the discoveries I have found through a series of novel tools built to analyze
concurrent Java programs. I will be presenting the following tools: 1. Iceberg, a static
and dynamic program analysis tool for identifying features of critical sections in Java.
2. Critical Section Investigator, which is a tool that visualizes the call trees of
executions of a various critical sections to understand where time is spent. 3. A
Microarray call-graph visualization tool, which is a new visualization that helps
programmers comprehend the software engineering architecture of large programs. In
particular, programmers can see call graphs of large multithreaded programs. Together
these new tools can be used by programmers to understand the performance of their
critical sections and uncover difficult to find software hangs caused by variable
performance in critical section executions.
Thesis (Ph.D.)--Tufts University, 2017.
Submitted to the Dept. of Computer Science.
Advisor: Samuel Guyer.
Committee: Kathleen Fisher, Remco Chang, Mark Hempstead, and Tao Schardl.
Keyword: Computer science.read less