  In today's enterprise storage systems, supported data services such as
snapshot delete or drive rebuild can cause tremendous performance interference
if executed inline along with heavy foreground IO, often leading to missing
SLOs (Service Level Objectives). Typical storage system applications such as
web or VDI (Virtual Desktop Infrastructure) follow a repetitive high/low
workload pattern that can be learned and forecasted. We propose a
priority-based background scheduler that learns this repetitive pattern and
allows storage systems to maintain peak performance and in turn meet service
level objectives (SLOs) while supporting a number of data services. When
foreground IO demand intensifies, system resources are dedicated to service
foreground IO requests and any background processing that can be deferred are
recorded to be processed in future idle cycles as long as forecast shows that
storage pool has remaining capacity. The smart background scheduler adopts a
resource partitioning model that allows both foreground and background IO to
execute together as long as foreground IOs are not impacted where the scheduler
harness any free cycle to clear background debt. Using traces from VDI
application, we show how our technique surpasses a method that statically limit
the deferred background debt and improve SLO violations from 54.6% when using a
fixed background debt watermark to merely a 6.2% if dynamically set by our
smart background scheduler.
