  Cloud platforms' rapid growth is raising significant concerns about their
carbon emissions. To reduce emissions, future cloud platforms will need to
increase their reliance on renewable energy sources, such as solar and wind,
which have zero emissions but are highly unreliable. Unfortunately, today's
energy systems effectively mask this unreliability in hardware, which prevents
applications from optimizing their carbon-efficiency, or work done per kilogram
of carbon emitted. To address this problem, we design an "ecovisor", which
virtualizes the energy system and exposes software-defined control of it to
applications. An ecovisor enables each application to handle clean energy's
unreliability in software based on its own specific requirements. We implement
a small-scale ecovisor prototype that virtualizes a physical energy system to
enable software-based application-level i) visibility into variable grid
carbon-intensity and renewable generation and ii) control of server power usage
and battery charging/discharging. We evaluate the ecovisor approach by showing
how multiple applications can concurrently exercise their virtual energy system
in different ways to better optimize carbon-efficiency based on their specific
requirements compared to a general system-wide policy.
