nova libvirt driver does not handle resizing with 'hw:cpu_policy' flag

Bug #1438240 reported by Stephen Finucane
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
OpenStack Compute (nova)
New
Undecided
Unassigned

Bug Description

We conduced a series of resize checks on instances with/without the CPU pinning parameters provided as part of this blueprint:

    http://specs.openstack.org/openstack/nova-specs/specs/juno/approved/virt-driver-cpu-pinning.html

This is related to 1417667 (https://bugs.launchpad.net/nova/+bug/1417667).

---

# Testing Configuration

Testing was conducted on a single-node, Fedora 21-based (3.17.8-300.fc21.x86_64) OpenStack instance (built with devstack). Three flavors were created:

* no-pinning ('hw:cpu_policy=shared')
* pinning ('hw:cpu_policy=dedicated' and 'hw:numa-nodes=1')
* pinning-no-numa ('hw:cpu_policy=dedicated')

# Results

## no pinning -> pinning

Doesn't work. Attempting to do this results in little difference in the output XML.

Before:

    <vcpu placement='static' cpuset='10-19,30-39'>10</vcpu>

After:

    <vcpu placement='static' cpuset='0-9,20-29'>10</vcpu>

STEP: Create a VM with a 'no-pinning' flavor. Dump XML with virsh. Resize and confirm to 'pinning' flavor. Dump XML with virsh.

## no pinning -> pinning (without available CPUs)

Doesn't work (due to above). Pinning does not occur so there is no reason for failure.

STEPS: Create three 10-vcpu VMs with a 'pinning' flavor. Create two 10-vcpu VMs with a 'no-pinning' flavor. Resize and confirm one of latter to 'pinning' flavor. Ensure failure.

## pinning w/ no numa topology -> pinning with numa topology

Doesn't work. There is only one (unrelated) change in the output XML:

Before:

    <disk type='file' device='disk'>
        ...
        <backingStore type='file' index='1'>
            <format type='raw'/>
            <source file='/opt/stack/data/nova/instances/_base/598e2b66ae396bb852a504ea4a7471df6b847f8b'/>
            <backingStore/>
        </backingStore>

After:

    <disk type='file' device='disk'>
        ...
        <backingStore/>

STEPS: Create a VM with a 'pinning-no-numa' flavor. Dump XML with virsh. Resize and confirm to 'pinning' flavor. Dump XML with virsh.

## pinning -> no pinning

Doesn't work. Attempting to do this results in no serious change in the output XML. Here's the important elements of the XML for a resized (pinning -> no pinning) instance:

    <vcpu placement='static'>10</vcpu>
    <cputune>
        <shares>10240</shares>
        <vcpupin vcpu='0' cpuset='17'/>
        <vcpupin vcpu='1' cpuset='37'/>
        <vcpupin vcpu='2' cpuset='18'/>
        <vcpupin vcpu='3' cpuset='38'/>
        <vcpupin vcpu='4' cpuset='19'/>
        <vcpupin vcpu='5' cpuset='39'/>
        <vcpupin vcpu='6' cpuset='33'/>
        <vcpupin vcpu='7' cpuset='13'/>
        <vcpupin vcpu='8' cpuset='34'/>
        <vcpupin vcpu='9' cpuset='14'/>
        <emulatorpin cpuset='13-14,17-19,33-34,37-39'/>
    </cputune>
    <numatune>
        <memory mode='strict' nodeset='1'/>
        <memnode cellid='0' mode='strict' nodeset='1'/>
    </numatune>
    <cpu>
        <topology sockets='5' cores='1' threads='2'/>
        <numa>
            <cell id='0' cpus='0-9' memory='4194304' unit='KiB'/>
        </numa>
    </cpu>

Versus the unresized, no pinning instance:

  <vcpu placement='static' cpuset='10-19,30-39'>10</vcpu>
  <cputune>
    <shares>10240</shares>
  </cputune>
  <cpu>
    <topology sockets='10' cores='1' threads='1'/>
  </cpu>

Tags: libvirt
description: updated
tags: added: libvirt
description: updated
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.