Add spec to optimize upload volume for RBD backend

This patch adds the spec for optimizing the path when we are
uploading a volume from RBD backend to glance RBD store.

Implements: blueprint optimize-upload-volume-to-rbd-store

Change-Id: I7bfc41b9594b8b7fbc6228973c3c276aa1cf5427
This commit is contained in:
Rajat Dhasmana 2021-09-22 03:54:00 -04:00 committed by whoami-rajat
parent 7464b781cf
commit ef9f435679
2 changed files with 174 additions and 6 deletions

View File

@ -0,0 +1,174 @@
..
This work is licensed under a Creative Commons Attribution 3.0 Unported
License.
http://creativecommons.org/licenses/by/3.0/legalcode
==============================================
Optimze upload volume to image for RBD backend
==============================================
https://blueprints.launchpad.net/cinder/+spec/optimize-upload-volume-to-rbd-store
This spec proposes to optimize the upload volume to image operation from cinder
rbd backend to glance rbd store by using COW cloning.
Problem description
-------------------
Currently when doing a upload volume to image operation and the source (cinder)
and destination (glance) backends are rbd, we don't have any optimization
and the generic code path to copy data chunk by chunk is executed.
This can be improved by doing a COW clone as we do it incase of creating volume
from image [1]_.
Use Cases
---------
We want to improve the performance when uploading a volume from cinder rbd backend
to glance rbd store using COW cloning.
Proposed change
---------------
The changes will be needed on both glance and cinder side.
1) Glance
Expose store type and rbd specific store info (like rbd pool name for glance
in this case) via stores info API [2]_.
This can be extended to other stores by providing store specific details with
the stores info API like we do with get pools API [3]_ on cinder side.
Further information regarding its implementation can be provided with a
glance side spec.
2) Cinder
Get the stores info from Glance and find the default store.
If the glance default store is ``rbd`` and cinder is using ``rbd`` backend to
upload the volume to image then we will proceed with the COW clone operation
from the volume pool to the images pool (pool name provided by glance) and
register the image location on glance side.
We will also introduce a new config parameter ``enable_clone_optimization`` to
enable/disable this optimization on cinder side. More information about it
can be found in `Security impact`_ section.
Alternatives
------------
None
Data model impact
-----------------
None
REST API impact
---------------
None. This is RBD driver specific feature.
Security impact
---------------
Since this optimization skips the writing of image that happens on the glance side, it will
also skip the checksum and hash value calculated in that scenario.
We will introduce a new config parameter ``enable_clone_optimization`` to enable/disable
this optimization and also mention the security risks that comes with enabling it. By default,
it will be disabled.
Active/Active HA impact
-----------------------
None
Notifications impact
--------------------
None
Other end user impact
---------------------
None
Performance Impact
------------------
Uploading volume to image in case of cinder RBD to glance RBD will be
significantly improved.
+------------------------------------+---------------+---------------+---------------+
| Image size | 2GB | 3GB | 5GB |
+====================================+===============+===============+===============+
| Time without COW clone | 1min17Sec | 1min15Sec | 2min49Sec |
+------------------------------------+---------------+---------------+---------------+
| Time with COW clone | 1.29Sec | 2.32Sec | 1.63Sec |
+------------------------------------+---------------+---------------+---------------+
| | **-98%** | **-97%** | **-99%** |
+------------------------------------+---------------+---------------+---------------+
Other deployer impact
---------------------
The Cinder service user will need to have read and write to the Glance pool.
Note that Read access might already be granted and only write access needs
to be provided.
Developer impact
----------------
None
Implementation
--------------
Assignee(s)
~~~~~~~~~~~
Primary assignee:
Rajat Dhasmana (whoami-rajat)
Work Items
~~~~~~~~~~
- Query glance for stores info (After exposing details from glance side)
- Do a COW clone if the volume to be uploaded is in glance RBD store
(volume is uploaded in glance default store)
Dependencies
~~~~~~~~~~~~
Glance side changes are required to expose store type and RBD store info
like glance pool name.
Testing
~~~~~~~
* Unit tests
* Tempest or manual testing for checking if RBD image dependency blocks
deletion of source resource
* Upload volume to image
* Delete the original volume
AND
* Upload volume to image
* Create volume from image
* Delete the image
Documentation Impact
~~~~~~~~~~~~~~~~~~~~
None
References
----------
.. [1] https://opendev.org/openstack/cinder/commit/edc11101cbc06bdce95b10cfd00a4849f6c01b33
.. [2] https://docs.openstack.org/api-ref/image/v2/index.html?expanded=list-stores-detail#list-stores
.. [3] https://docs.openstack.org/api-ref/block-storage/v3/?expanded=list-all-back-end-storage-pools-detail#list-all-back-end-storage-pools

View File

@ -1,6 +0,0 @@
.. This file is a place holder. It should be removed by
any patch proposing a spec for the Wallaby release
================================
No specs have yet been approved.
================================