OpenStack Compute (Nova)
Go to file
Kashyap Chamarthy 14c38ac0f2 libvirt: Post-migration, set cache value for Cinder volume(s)
This was noticed in a downstream bug when a Nova instance with Cinder
volume (in this case, both the Nova instance storage _and_ Cinder volume
are located on Ceph) is migrated to a target Compute node, the disk
cache value for the Cinder volume gets changed.  I.e. the QEMU
command-line for the Cinder volume stored on Ceph turns into the
following:

Pre-migration, QEMU command-line for the Nova instance:

    [...] -drive file=rbd:volumes/volume-[...],cache=writeback

Post-migration, QEMU command-line for the Nova instance:

    [...] -drive file=rbd:volumes/volume-[...],cache=none

Furthermore, Jason Dillaman from Ceph confirms RBD cache being enabled
pre-migration:

    $ ceph --admin-daemon /var/run/qemu/ceph-client.openstack.[...] \
        config get rbd_cache
    {
        "rbd_cache": "true"
    }

And disabled, post-migration:

    $ ceph --admin-daemon /var/run/qemu/ceph-client.openstack.[...] \
        config get rbd_cache
    {
        "rbd_cache": "false"
    }

This change in cache value post-migration causes I/O latency on the
Cinder volume.

From a chat with Daniel Berrangé on IRC: Prior to live migration, Nova
rewrites all the <disk> elements, and passes this updated guest XML
across to target libvirt.  And it is never calling _set_cache_mode()
when doing this.  So `nova.conf`'s `writeback` setting is getting lost,
leaving the default `cache=none` setting.  And this mistake (of leaving
the default cache value to 'none') will of course be correct when you
reboot the guest on the target later.

So:

  - Call _set_cache_mode() in _get_volume_config() method -- because it
    is a callback function to _update_volume_xml() in
    nova/virt/libvirt/migration.py.

  - And remove duplicate calls to _set_cache_mode() in
    _get_guest_storage_config() and attach_volume().

  - Fix broken unit tests; adjust test_get_volume_config() to reflect
    the disk cache mode.

Thanks: Jason Dillaman of Ceph for observing the change in cache modes
        in a downstream bug analysis, Daniel Berrangé for help in
        analysis from a Nova libvirt driver POV, and Stefan Hajnoczi
        from QEMU for help on I/O latency instrumentation with `perf`.

Closes-bug: 1706083
Change-Id: I4184382b49dd2193d6a21bfe02ea973d02d8b09f
2017-07-26 15:54:58 +02:00
api-guide/source api-ref: Add X-Openstack-Request-Id description 2017-07-10 14:03:14 +00:00
api-ref/source Merge "Handle uuids in os-hypervisors API" 2017-07-20 01:03:27 +00:00
contrib Merge "changed quantum to neutron in vif-openstack" 2014-03-05 10:45:05 +00:00
devstack Don't run ssh validation in cells v1 job 2017-05-26 20:18:09 -04:00
doc Merge "Handle uuids in os-hypervisors API" 2017-07-20 01:03:27 +00:00
etc/nova libvirt: remove scality volume driver 2017-05-19 14:51:37 -04:00
gate move gate hooks to gate/ 2017-01-04 11:05:16 +00:00
nova libvirt: Post-migration, set cache value for Cinder volume(s) 2017-07-26 15:54:58 +02:00
placement-api-ref/source Merge "[placement] Add api-ref for aggregates" 2017-06-12 16:38:26 +00:00
plugins/xenserver XenAPI Remove useless files when use os-xenapi lib 2017-01-10 18:06:17 -08:00
releasenotes Merge "Use URIOpt" 2017-07-20 04:04:56 +00:00
tools [placement] Fix placement-api-ref check tool 2017-05-24 12:15:28 +03:00
.coveragerc Remove nova/openstack/* from .coveragerc 2016-10-12 16:20:49 -04:00
.gitignore Structure for simply managing placement-api-ref 2017-03-24 15:15:53 +03:00
.gitreview Add .gitreview config file for gerrit. 2011-10-24 15:07:19 -04:00
.mailmap Add mailmap entry 2014-05-07 12:14:26 -07:00
.testr.conf [placement] Adjust the name of the gabbi tests 2016-09-20 19:14:44 +00:00
CONTRIBUTING.rst Workflow documentation is now in infra-manual 2014-12-05 03:30:37 +00:00
HACKING.rst Enable global hacking checks and removed local checks 2017-02-10 15:09:37 +01:00
LICENSE initial commit 2010-05-27 23:05:26 -07:00
MAINTAINERS Add a maintainers file 2015-05-23 03:22:07 +10:00
README.rst Optimize the link address 2017-04-07 08:56:37 +08:00
babel.cfg Get rid of distutils.extra. 2012-02-08 19:30:39 -08:00
bindep.txt List system dependencies for running common tests 2016-08-24 06:49:32 +02:00
requirements.txt Updated from global requirements 2017-07-20 04:10:32 +00:00
setup.cfg Merge "Update URL home-page in documents according to document migration" 2017-07-19 17:31:51 +00:00
setup.py Updated from global requirements 2017-03-02 11:50:48 +00:00
test-requirements.txt [placement] Update allocation-candidates.yaml for gabbi 1.35 2017-07-17 13:04:48 +00:00
tests-functional-py3.txt Remove invalid URL in gabbi tests 2017-01-17 21:10:45 +00:00
tests-py3.txt Skip unit tests for SSL + py3 2017-03-02 14:30:16 +08:00
tox.ini doc: Enable pep8 on doc generation code 2017-07-12 14:20:25 +01:00

README.rst

Team and repository tags

image

OpenStack Nova

OpenStack Nova provides a cloud computing fabric controller, supporting a wide variety of compute technologies, including: libvirt (KVM, Xen, LXC and more), Hyper-V, VMware, XenServer and OpenStack Ironic.

OpenStack Nova is distributed under the terms of the Apache License, Version 2.0. The full terms and conditions of this license are detailed in the LICENSE file.

API

To learn how to use Nova's API, consult the documentation available online at:

https://developer.openstack.org/api-guide/compute/ https://developer.openstack.org/api-ref/compute/

For more information on OpenStack APIs, SDKs and CLIs, please see:

https://www.openstack.org/appdev/ https://developer.openstack.org/

Operators

To learn how to deploy and configure OpenStack Nova, consult the documentation available online at:

https://docs.openstack.org

For information about the different compute (hypervisor) drivers supported by Nova, please read:

https://docs.openstack.org/developer/nova/feature_classification.html

In the unfortunate event that bugs are discovered, they should be reported to the appropriate bug tracker. If you obtained the software from a 3rd party operating system vendor, it is often wise to use their own bug tracker for reporting problems. In all other cases use the master OpenStack bug tracker, available at:

https://bugs.launchpad.net/nova

Developers

For information on how to contribute to Nova, please see the contents of the CONTRIBUTING.rst.

Any new code must follow the development guidelines detailed in the HACKING.rst file, and pass all unit tests.

Further developer focused documentation is available at:

https://docs.openstack.org/developer/nova/