Oversubscription in thin provisioning
OpenStack Block Storage enables you to choose a volume back end based
on virtual capacities for thin provisioning using the oversubscription
ratio.
A reference implementation is provided for the default LVM driver.
The illustration below uses the LVM driver as an example.
Configure oversubscription
settings
To support oversubscription in thin provisioning, a flag
max_over_subscription_ratio
is introduced into
cinder.conf
. This is a float representation of the
oversubscription ratio when thin provisioning is involved. Default ratio
is 20.0, meaning provisioned capacity can be 20 times of the total
physical capacity. A ratio of 10.5 means provisioned capacity can be
10.5 times of the total physical capacity. A ratio of 1.0 means
provisioned capacity cannot exceed the total physical capacity. A ratio
lower than 1.0 is ignored and the default value is used instead.
This parameter also can be set as
max_over_subscription_ratio=auto
. When using auto, Cinder
will automatically calculate the
max_over_subscription_ratio
based on the provisioned
capacity and the used space. This allows the creation of a larger number
of volumes at the beginning of the pool’s life, and start to restrict
the creation as the free space approaches to 0 or the reserved
limit.
Note
max_over_subscription_ratio
can be configured for each
back end when multiple-storage back ends are enabled. It is provided as
a reference implementation and is used by the LVM driver. However, it is
not a requirement for a driver to use this option from
cinder.conf
.
max_over_subscription_ratio
is for configuring a back
end. For a driver that supports multiple pools per back end, it can
report this ratio for each pool. The LVM driver does not support
multiple pools.
Setting this value to ‘auto’. The values calculated by Cinder can
dynamically vary according to the pool’s provisioned capacity and
consumed space.
The existing reserved_percentage
flag is used to prevent
over provisioning. This flag represents the percentage of the back-end
capacity that is reserved.
Note
There is a change on how reserved_percentage
is used. It
was measured against the free capacity in the past. Now it is measured
against the total capacity.
Capabilities
Drivers can report the following capabilities for a back end or a
pool:
thin_provisioning_support = True(or False)
thick_provisioning_support = True(or False)
provisioned_capacity_gb = PROVISIONED_CAPACITY
max_over_subscription_ratio = MAX_RATIO
Where PROVISIONED_CAPACITY
is the apparent allocated
space indicating how much capacity has been provisioned and
MAX_RATIO
is the maximum oversubscription ratio. For the
LVM driver, it is max_over_subscription_ratio
in
cinder.conf
.
Two capabilities are added here to allow a back end or pool to claim
support for thin provisioning, or thick provisioning, or both.
The LVM driver reports thin_provisioning_support=True
and thick_provisioning_support=False
if the
lvm_type
flag in cinder.conf
is
thin
. Otherwise it reports
thin_provisioning_support=False
and
thick_provisioning_support=True
.
Volume type extra specs
If volume type is provided as part of the volume creation request, it
can have the following extra specs defined:
'capabilities:thin_provisioning_support': '<is> True' or '<is> False'
'capabilities:thick_provisioning_support': '<is> True' or '<is> False'
Note
capabilities
scope key before
thin_provisioning_support
and
thick_provisioning_support
is not required. So the
following works too:
'thin_provisioning_support': '<is> True' or '<is> False'
'thick_provisioning_support': '<is> True' or '<is> False'
The above extra specs are used by the scheduler to find a back end
that supports thin provisioning, thick provisioning, or both to match
the needs of a specific volume type.
Volume replication extra
specs
OpenStack Block Storage has the ability to create volume replicas.
Administrators can define a storage policy that includes replication by
adjusting the cinder volume driver. Volume replication for OpenStack
Block Storage helps safeguard OpenStack environments from data loss
during disaster recovery.
To enable replication when creating volume types, configure the
cinder volume with
capabilities:replication="<is> True"
.
Each volume created with the replication capability set to
True
generates a copy of the volume on a storage back
end.
One use case for replication involves an OpenStack cloud environment
installed across two data centers located nearby each other. The
distance between the two data centers in this use case is the length of
a city.
At each data center, a cinder host supports the Block Storage
service. Both data centers include storage back ends.
Depending on the storage requirements, there can be one or two cinder
hosts. The administrator accesses the
/etc/cinder/cinder.conf
configuration file and sets
capabilities:replication="<is> True"
.
If one data center experiences a service failure, administrators can
redeploy the VM. The VM will run using a replicated, backed up volume on
a host in the second data center.
Capacity filter
In the capacity filter, max_over_subscription_ratio
is
used when choosing a back end if thin_provisioning_support
is True and max_over_subscription_ratio
is greater than
1.0.
Capacity weigher
In the capacity weigher, virtual free capacity is used for ranking if
thin_provisioning_support
is True. Otherwise, real free
capacity will be used as before.