← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1550317] [NEW] 'hw:cpu_thread_policy=isolate' does not schedule on non-HT hosts

 

Public bug reported:

The 'isolate' policy is supposed to function on both hosts with
HyperThreading (HT) and those without. The former works, but the latter
does not. This appears to be a regression. Results below.

---

# Platform

Testing was conducted on two single-node, Fedora 23-based
(4.3.5-300.fc23.x86_64) OpenStack instances (built with devstack). The systems
are a dual-socket, ten core, systems with HT enabled on one and disabled
on the other (2 sockets * 10 cores * 1/2 threads
= 20/40 "pCPUs". 0-9/0-9,20-29 = node0, 10-19/10-19,30-39 = node1).

Commit `8bafc9` of Nova was used.

# Steps

## Create flavors

    $ openstack flavor create pinned.isolate \
        --id 103 --ram 2048 --disk 0 --vcpus 4
    $ openstack flavor set pinned.isolate \
        --property "hw:cpu_policy=dedicated" \
        --property "hw:cpu_thread_policy=isolate"

## Validate a HT-enabled node

This should match the expectations of the spec and provide a single thread
to guests while avoiding other guests scheduling on the other host
sibling threads. Therefore, the guest should see four sockets, one core
per socket, and one thread per core.

    $ openstack server create --flavor=pinned.isolate \
        --image=cirros-0.3.4-x86_64-uec --wait test1

    $ sudo virsh list
     Id    Name                           State
    ----------------------------------------------------
     3     instance-00000003              running

    $ sudo virsh dumpxml 3
    <domain type='kvm' id='3'>
      <name>instance-00000003</name>
      ...
      <vcpu placement='static'>4</vcpu>
      <cputune>
        <shares>4096</shares>
        <vcpupin vcpu='0' cpuset='1'/>
        <vcpupin vcpu='1' cpuset='0'/>
        <vcpupin vcpu='2' cpuset='25'/>
        <vcpupin vcpu='3' cpuset='8'/>
        <emulatorpin cpuset='0-1,8,25'/>
      </cputune>
      <numatune>
        <memory mode='strict' nodeset='0'/>
        <memnode cellid='0' mode='strict' nodeset='0'/>
      </numatune>
      ...
      <cpu>
        <topology sockets='4' cores='1' threads='1'/>
        <numa>
          <cell id='0' cpus='0-3' memory='2097152' unit='KiB'/>
        </numa>
      </cpu>
      ...
    </domain>

    $ openstack server delete test1

No problems here.

## Validate a HT-disabled node

This should work exactly the same here as it did on the HT-enabled host,
minus the reservation of any thread sibling (there aren't any)

    $ openstack server create --flavor=pinned.isolate \
        --image=cirros-0.3.4-x86_64-uec --wait test1
    Error creating server: test1

    Error creating server

    $ openstack server list
    +--------------------------------------+-------+--------+----------+
    | ID                                   | Name  | Status | Networks |
    +--------------------------------------+-------+--------+----------+
    | 1f212d45-585e-41df-abd7-6abb12ca86a1 | test1 | ERROR  |          |
    +--------------------------------------+-------+--------+----------+

** Affects: nova
     Importance: Undecided
         Status: New

-- 
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/1550317

Title:
  'hw:cpu_thread_policy=isolate' does not schedule on non-HT hosts

Status in OpenStack Compute (nova):
  New

Bug description:
  The 'isolate' policy is supposed to function on both hosts with
  HyperThreading (HT) and those without. The former works, but the
  latter does not. This appears to be a regression. Results below.

  ---

  # Platform

  Testing was conducted on two single-node, Fedora 23-based
  (4.3.5-300.fc23.x86_64) OpenStack instances (built with devstack). The systems
  are a dual-socket, ten core, systems with HT enabled on one and disabled
  on the other (2 sockets * 10 cores * 1/2 threads
  = 20/40 "pCPUs". 0-9/0-9,20-29 = node0, 10-19/10-19,30-39 = node1).

  Commit `8bafc9` of Nova was used.

  # Steps

  ## Create flavors

      $ openstack flavor create pinned.isolate \
          --id 103 --ram 2048 --disk 0 --vcpus 4
      $ openstack flavor set pinned.isolate \
          --property "hw:cpu_policy=dedicated" \
          --property "hw:cpu_thread_policy=isolate"

  ## Validate a HT-enabled node

  This should match the expectations of the spec and provide a single thread
  to guests while avoiding other guests scheduling on the other host
  sibling threads. Therefore, the guest should see four sockets, one core
  per socket, and one thread per core.

      $ openstack server create --flavor=pinned.isolate \
          --image=cirros-0.3.4-x86_64-uec --wait test1

      $ sudo virsh list
       Id    Name                           State
      ----------------------------------------------------
       3     instance-00000003              running

      $ sudo virsh dumpxml 3
      <domain type='kvm' id='3'>
        <name>instance-00000003</name>
        ...
        <vcpu placement='static'>4</vcpu>
        <cputune>
          <shares>4096</shares>
          <vcpupin vcpu='0' cpuset='1'/>
          <vcpupin vcpu='1' cpuset='0'/>
          <vcpupin vcpu='2' cpuset='25'/>
          <vcpupin vcpu='3' cpuset='8'/>
          <emulatorpin cpuset='0-1,8,25'/>
        </cputune>
        <numatune>
          <memory mode='strict' nodeset='0'/>
          <memnode cellid='0' mode='strict' nodeset='0'/>
        </numatune>
        ...
        <cpu>
          <topology sockets='4' cores='1' threads='1'/>
          <numa>
            <cell id='0' cpus='0-3' memory='2097152' unit='KiB'/>
          </numa>
        </cpu>
        ...
      </domain>

      $ openstack server delete test1

  No problems here.

  ## Validate a HT-disabled node

  This should work exactly the same here as it did on the HT-enabled host,
  minus the reservation of any thread sibling (there aren't any)

      $ openstack server create --flavor=pinned.isolate \
          --image=cirros-0.3.4-x86_64-uec --wait test1
      Error creating server: test1

      Error creating server

      $ openstack server list
      +--------------------------------------+-------+--------+----------+
      | ID                                   | Name  | Status | Networks |
      +--------------------------------------+-------+--------+----------+
      | 1f212d45-585e-41df-abd7-6abb12ca86a1 | test1 | ERROR  |          |
      +--------------------------------------+-------+--------+----------+

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


Follow ups