5.3 KiB
Add ability to support discard/unmap/trim for Cinder backend
https://blueprints.launchpad.net/nova/+spec/cinder-backend-report-discard
Currently, libvirt/qemu has support for a discard option when attaching a volume to an instance. With this feature, the unmap/trim command can be sent from guest to the physical storage device.
A cinder back-end will report a connection capability that Nova will use in attaching a volume.
Problem description
Currently there is no way for Nova to know if a Cinder back end supports discard/trim/unmap functionality. Functionality is being added in Cinder to supply this information. The spec seeks to add the ability to consume that information.
Use Cases
If a Cinder backend uses media that can make use of discard functionality there should be a way to do this. This will improve long term performance of such back ends.
Proposed change
Code will be added to check for a 'discard' property returned to Nova from the Cinder attach API. When present and set to True we will modify the config returned by the libvirt volume driver to contain:
driver_discard = "unmap"
This will only give the desired support if the instance is configured with a interface and bus type that will support Trim/Unmap commands. In the case where it is possible to detect that discard will not actually work for the instance we will log a warning, but continue on with the attach anyway.
Currently the virtio-blk backend does not support discard.
There will be several ways to get an instance that will support
discard, one example is to use the virtio-scsi storage interface with a
scsi bus type. To create an instance with this support it must be booted
from an image configured with hw_scsi_model=virtio-scsi
and
hw_disk_bus=scsi
.
It is important to note that the nova.conf option hw_disk_discard is NOT read for this feature. We rely entirely on Cinder to specify whether or not discard should be used for the volume.
Alternatives
Alternatives include adding discard for all drives if the operator has set hw_disk_discard but it was decided this was not a good way to solve the problem as you could not mix different underlying volume providers easily.
We could also hot-plug a SCSI controller that is capable of supporting discard when attaching Cinder volumes. This would allow for mixing a non-trim boot disk from an image and then attaching a Cinder volume that would get the benefits. The risk is that the instance may not be able to actually support doing UNMAP.
Data model impact
None
REST API impact
None
Security impact
None
Notifications impact
None
Other end user impact
None
Performance Impact
There will be a performance gain for back ends that benefit from having discard functionality.
See https://en.wikipedia.org/wiki/Trim_(computing) for more info.
Other deployer impact
Deployers wanting to use this feature with their Cinder backend will need to ensure the instances are configured with a SCSI model and bus that support discard. This includes IDE, AHCI, and Xen disks. virtio-blk is the only backend missing this support.
A simple way to enable this is to modify Glance images to contain the following properties:
hw_scsi_model=virtio-scsi
hw_disk_bus=scsi
In addition compute nodes will need to be using libvirt 1.0.6 or higher and QEMU 1.6.0 or higher.
Developer impact
None
Implementation
Assignee(s)
Primary assignee: * Patrick East
Work Items
- Modify volume attach code in libvirt driver to check for the new Cinder connection property.
- Add unit tests for new functionality, modify any existing as needed.
- Configure Pure Storage 3rd party CI system to enable the feature and validate it as a Cinder CI. This configuration change will be made available to any other 3rd party CI maintainer to allow additional systems to test with this feature enabled.
Dependencies
- Cinder Blueprint (Completed and released in Liberty):
-
https://blueprints.launchpad.net/cinder/+spec/cinder-backend-report-discard
Testing
Unit tests needs to include all permutations of the discard flag from Cinder.
We could enable one of the jenkins jobs to be configured to enable this. A nice starting point would maybe be the Ceph jobs. Potentially a Tempest test could be added behind a config option to validate volume attachments do get the correct discard settings.
Documentation Impact
We may want to add documentation to the Cloud Administrator Guide on how to utilize this feature.
References
- Cinder Blueprint:
-
https://blueprints.launchpad.net/cinder/+spec/cinder-backend-report-discard
- Cinder Spec:
-
http://specs.openstack.org/openstack/cinder-specs/specs/liberty/cinder-backend-report-discard.html
History
Release Name | Description |
---|---|
Mitaka | Introduced |