https://blueprints.launchpad.net/cinder/+spec/limit-volume-copy-bps-per-backend
Currently, cinder has a global configuration to limit a volume copy bandwidth to mitigate slow down of instances volume access during large image copies. ( https://blueprints.launchpad.net/cinder/+spec/limit-volume-copy-bandwidth )
This spec proposes to make this config variable per backend.
The current global config has some issues.
Make the cinder.conf parameter ‘volume_copy_bps_limit’ writable in each backend section. (If volume_copy_bps_limit is specified in DEFAULT section as existing design, that value is used as a global default. This keeps backwards compatibility.)
The bps limit is divided if multiple volume copy operations run concurrently. For example, if volume_copy_bps_limit is set to 100MB/s, and 2 copies are running at the same time in a backend, each copy can use up to 50MB/s. If one of the copies finished, the other copy’s limit is updated to 100MB/s.
On initialization of VolumeDriver class, a ‘Throttle’ class object is created and stored in ‘_throttle’ member for each backend driver object, that manages the total bandwidth allowed and volume copy operations in flight.
It should be passed to copy_volume() as following, so that it can set/update the bandwidth limit.
volume_utils.copy_volume(…, throttle=self._throttle)
In copy_volume method, Throttle class method is called to setup cgroups (or some other QoS feature, when the Throttle class is overridden).
None
None
None
None
None
None
When volume copy I/O bandwidth is limited, it takes more time to complete volume copy. Users are required to balance between volume copy performance and interference to instances performance.
None
- start a volume copy, then the bps limit is set to 100MB/s
- start a second volume copy, then the limit is updated to 50MB/s for both
- finish one of the copies, then the limit is resumed to 100MB/s
The cinder client documentation about volume_copy_bps_limit in cinder.conf should address that copy bps limit can be specified for each backend driver by writing this config in the backend section.
None
Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.