Libvirt-Enable suppport for discard option for disk device
Support setting discard option for instance's disk. If discard option is enabled, unused/freed blocks can be return back to the storage device. blueprint libvirt-disk-discard-option Change-Id: Idcf7b35c93422d0d13c3ffb33aca3c5eca4f3c94
This commit is contained in:
147
specs/juno/libvirt-disk-discard-option.rst
Normal file
147
specs/juno/libvirt-disk-discard-option.rst
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
..
|
||||||
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||||
|
License.
|
||||||
|
|
||||||
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||||
|
|
||||||
|
======================================================
|
||||||
|
Libvirt-Enable support discard option for disk device
|
||||||
|
======================================================
|
||||||
|
|
||||||
|
https://blueprints.launchpad.net/nova/+spec/libvirt-disk-discard-option
|
||||||
|
|
||||||
|
Most SCSI devices have supported UNMAP command which is used to return unused
|
||||||
|
or freed blocks back to the storage. And SSD drive have a similar command
|
||||||
|
called "Trim" command.
|
||||||
|
|
||||||
|
This blueprint aims to support setting discard option for instance's disk.
|
||||||
|
If discard option is enabled, unused/freed blocks can be return back to the
|
||||||
|
storage device.
|
||||||
|
|
||||||
|
Qemu1.5 has supported setting discard option for the raw disk. In Qemu1.6,
|
||||||
|
qcow2 file supported discard option too.
|
||||||
|
|
||||||
|
Cinder support is out of scope for this spec. This spec only covers disks
|
||||||
|
managed by nova.
|
||||||
|
|
||||||
|
Problem description
|
||||||
|
===================
|
||||||
|
|
||||||
|
Thin provision volume
|
||||||
|
---------------------
|
||||||
|
When we write data to a thin provision volume, storage device will allocate
|
||||||
|
blocks to it and it will grow.
|
||||||
|
But without discard option supported, the blocks will not be freed to the
|
||||||
|
storage device even if we deleted the data in the volume. The result is the
|
||||||
|
thin volume can grow, but can't shrink.
|
||||||
|
With discard option supported, when user deleted the data in the volume,
|
||||||
|
the blocks will be freed to the storage device. The volume will shrink.
|
||||||
|
|
||||||
|
It's useful for both ephemeral volume and cinder volume.
|
||||||
|
|
||||||
|
SSD backed volume
|
||||||
|
--------------------
|
||||||
|
Freeing the unused blocks to the SSD storage is useful to improving the
|
||||||
|
performance and prolonging the lifetime of SSD.
|
||||||
|
|
||||||
|
Proposed change
|
||||||
|
===============
|
||||||
|
|
||||||
|
Add support for the deployer to specify the discard option in the nova.conf by
|
||||||
|
"hw_disk_discard".
|
||||||
|
|
||||||
|
There are two available values for "hw_disk_discard" now::
|
||||||
|
|
||||||
|
"unmap" : Discard requests("trim" or "unmap") are passed to the filesystem.
|
||||||
|
"ignore": Discard requests("trim" or "unmap") are ignored and aren't passed
|
||||||
|
to the filesystem.
|
||||||
|
|
||||||
|
For example::
|
||||||
|
|
||||||
|
hw_disk_discard=unmap #enable discard
|
||||||
|
hw_disk_discard=ignore #disable discard, by default
|
||||||
|
|
||||||
|
For an instance running on a host which has the discard option in nova.conf,
|
||||||
|
nova will produce the XML with a discard option when the nova managed disk
|
||||||
|
is attached.
|
||||||
|
|
||||||
|
Alternatives
|
||||||
|
------------
|
||||||
|
None
|
||||||
|
|
||||||
|
Data model impact
|
||||||
|
-----------------
|
||||||
|
None
|
||||||
|
|
||||||
|
REST API impact
|
||||||
|
---------------
|
||||||
|
None
|
||||||
|
|
||||||
|
Security impact
|
||||||
|
---------------
|
||||||
|
None
|
||||||
|
|
||||||
|
Notifications impact
|
||||||
|
--------------------
|
||||||
|
None
|
||||||
|
|
||||||
|
Other end user impact
|
||||||
|
---------------------
|
||||||
|
None
|
||||||
|
|
||||||
|
Performance Impact
|
||||||
|
------------------
|
||||||
|
Discard option maybe cause performance degradation and fragmentation.
|
||||||
|
But for the storage based on SSD, discard option is good for the performance.
|
||||||
|
|
||||||
|
The users have control over this behaviour in the guest os if they don't want
|
||||||
|
it. They can use the mount parameter or the command tools to control the
|
||||||
|
discard behaviour.
|
||||||
|
|
||||||
|
Other deployer impact
|
||||||
|
---------------------
|
||||||
|
Initially, only the libvirt driver will support this function, and
|
||||||
|
only with qemu/kvm as the hypervisor.
|
||||||
|
|
||||||
|
A serious consideration is needed before enabling discard option.
|
||||||
|
With discard option enabled, the freed blocks of the thin provision volume
|
||||||
|
will be return to the storage and can be reused. But it also maybe cause
|
||||||
|
performance degradation and fragments.
|
||||||
|
So it's reasonable to enable the discard option only when you use the thin
|
||||||
|
provision volume and the storage are UNMAP/TRIM-capable. For example the SSD,
|
||||||
|
the disk-arrays or other distributed storage which supports the UNMAP/TRIM.
|
||||||
|
|
||||||
|
Developer impact
|
||||||
|
----------------
|
||||||
|
None
|
||||||
|
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
Assignee(s)
|
||||||
|
-----------
|
||||||
|
boh.ricky
|
||||||
|
|
||||||
|
Work Items
|
||||||
|
----------
|
||||||
|
|
||||||
|
* Libvirt driver will create a discard option for a disk device which the
|
||||||
|
instance flavor has discard option.
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
============
|
||||||
|
Libvirt(1.0.6) Qemu1.5(raw format) Qemu1.6(qcow2 format)
|
||||||
|
|
||||||
|
Testing
|
||||||
|
=======
|
||||||
|
None
|
||||||
|
|
||||||
|
Documentation Impact
|
||||||
|
====================
|
||||||
|
|
||||||
|
The document should be modified to reflect this new feature.
|
||||||
|
|
||||||
|
References
|
||||||
|
==========
|
||||||
|
None
|
||||||
Reference in New Issue
Block a user