  High-performance computing (HPC) storage systems become increasingly critical
to scientific applications given the data-driven discovery paradigm shift. As a
storage solution for large-scale HPC systems, dozens of applications share the
same storage system, and will compete and can interfere with each other.
Application interference can dramatically degrade the overall storage system
performance. Therefore, developing a flexible and effective storage solution to
assure a certain level of resources per application, i.e. the
Quality-of-Service (QoS) support, is critical. One of the common solution to
achieve QoS assurance for storage systems is using provisioning
technique~\cite{3}. Provisioning refers to the ability of providing certain
amount of resources for applications and expected workloads. However,
provisioning has limitations such as requiring the detailed knowledge of the
expected workloads. In addition, the storage workloads are transient hence
expensive to be satisfied. Due to these limitations, providing QoS storage
systems through provisioning is challenging.
  In this research, a software-defined approach~\cite{0} is proposed as a
flexible solution to achieve QoS guarantee for storage systems. The driving
force of using a software-defined approach instead of the traditional
approaches, is that it has the ability to enable a more flexible, scalable, and
efficient platform. For example, if any changes occurred in the system, it does
not necessarily need to re-configure thousands of devices; instead, with
re-configuring a logically centralized component, other devices will be
automatically notified.
