A drawback of multi-tenancy in classic Solaris is that, where storage is shared, a single application on a system can monopolize access to local storage by a stream of synchronous I/O requests, effectively blocking the system from servicing I/O requests from other zones and applications, and causing performance slowdowns for other tenants.
In SmartOS, we've added a feature to track I/O, and throttle it from misbehaving zones by adding a small delay to each read or write, thus ensuring that other zones also get a turn at reading/writing to disk. This is an operator-configurable setting, see below.
Disk I/O throttling only comes into effect when a system is under load from multiple tenants. When a system is relatively quiet, a single tenant can enjoy faster I/O without bothering the neighbors.
A detailed overview of the I/O throttle is available here.
Each zone has an I/O priority which determines its priority relative to other zones. Unlike RAM and CPU shares, which correspond to a finite resource, the I/O priorities are all relative, so three zones with priorities (200, 200, 100) will elicit the same behavior as three zones with priorities (100, 100, 50).
If priority is not explicitly set for a zone, it gets the default priority (1).
It can be set via zonecfg:
or get/set using prctl: