  Modern software systems are often equipped with hundreds to thousands of
configuration options, many of which greatly affect performance. Unfortunately,
properly setting these configurations is challenging for developers due to the
complex and dynamic nature of system workload and environment. In this paper,
we first conduct an empirical study to understand performance-related
configurations and the challenges of setting them in the real-world. Guided by
our study, we design a systematic and general control-theoretic framework,
SmartConf, to automatically set and dynamically adjust performance-related
configurations to meet required operating constraints while optimizing other
performance metrics. Evaluation shows that SmartConf is effective in solving
real-world configuration problems, often providing better performance than even
the best static configuration developers can choose under existing
configuration systems.
