← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1438240] [NEW] nova libvirt driver does not handle resizing with 'hw:cpu_policy' flag

 

*** This bug is a duplicate of bug 1417667 ***
    https://bugs.launchpad.net/bugs/1417667

Public bug reported:

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>

** Affects: nova
     Importance: Undecided
         Status: New


** Tags: libvirt

** Description changed:

  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
+     http://specs.openstack.org/openstack/nova-specs/specs/juno/approved
  /virt-driver-cpu-pinning.html
  
  ---
  
  # 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>
+     <vcpu placement='static' cpuset='10-19,30-39'>10</vcpu>
  
  After:
  
-     <vcpu placement='static' cpuset='0-9,20-29'>10</vcpu>
+     <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>
+     <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/>
+     <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
  
- No. 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:
+ 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>
+     <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>
+   <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 added: libvirt

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to OpenStack Compute (nova).
https://bugs.launchpad.net/bugs/1438240

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

Status in OpenStack Compute (Nova):
  New

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>

To manage notifications about this bug go to:
https://bugs.launchpad.net/nova/+bug/1438240/+subscriptions


Follow ups

References