Thesis (Ph. D.)--University of Rochester. Department of Computer Science, 2019.
Efficient resource management is a growing problem due to the ever increasing scale
and complexity of computational systems and the applications that use them. Modern
multicore systems offer abundant compute resources to exploit application-level parallelism.
The multiple compute cores within a single system share resources such as
processor pipelines, caches, interconnects, and memory, presenting opportunities for
efficient data sharing and resource utilization. These multicore systems are regularly
employed in large clusters and clouds, hosting a multitude of applications and services
simultaneously. While a tremendous amount of research has been aimed at solving
various problems in offering infrastructure as a service, managing multiple applications
and achieving high utilization and efficiency remains a challenge. The quest to
increase utilization may result in higher resource contention and correspondingly unpredictable
and often significantly degraded performance. Moreover, the degree of data
and resource sharing among different cores is nonuniform, and is dependent on the
architecture and applications involved. Identifying and enabling the efficient and synergistic
sharing of data and resources while also minimizing resource contention and
saturation is key to simultaneously achieving higher individual application performance
and overall system efficiency.
In this dissertation, we argue that it is possible to provide efficient and deterministic
performance in both individual and distributed multicore systems using a holistic
approach that simultaneously guides application resource acquisition and manages
hardware resources and task placement. Our resource management strategy combines
information from the execution environment with application-defined quality of service
targets to achieve overall system efficiency while meeting individual application
progress guarantees. We demonstrate that aggregate information from low overhead
hardware performance counters is sufficient to characterize individual application resource
demands and bottlenecks specific to the execution environment. Using this information,
we develop a hierarchical resource management strategy that can: monitor
performance critical architectural resources and control task placement for optimal use
of these resources; understand application bottlenecks, scalability, and parallel efficiency
to reallocate resources while guaranteeing quality of service; and consolidate
the above information from individual machines into a shared state to guide resource
reservation in a distributed setting in order to simultaneously achieve higher individual
application performance and overall system efficiency by reducing resource contention
and saturation.