Bug 1616400 - [RFE] Per-interface multiqueue configuration
Summary: [RFE] Per-interface multiqueue configuration
Keywords:
Status: NEW
Alias: None
Product: Red Hat OpenStack
Classification: Red Hat
Component: openstack-neutron
Version: 10.0 (Newton)
Hardware: Unspecified
OS: Unspecified
unspecified
low
Target Milestone: ---
: ---
Assignee: OSP Team
QA Contact: Eran Kuris
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2018-08-15 19:39 UTC by Andreas Karis
Modified: 2023-07-12 16:01 UTC (History)
2 users (show)

Fixed In Version:
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed:
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Red Hat Issue Tracker OSP-2360 0 None None None 2022-03-24 13:35:17 UTC

Description Andreas Karis 2018-08-15 19:39:27 UTC
Description of problem:
Currently, configuration of multiqueue for instances is dependent on the image property and nova flavor key and is a global per-instance setting (https://access.redhat.com/solutions/3215141). Can we implement the feature from neutron so that we can enable multiqueue on a per-interface basis? This would allow to minimize instance downtime. E.g., if an instance needs to switch from single queue to multi queue, one could unplug the port, delete it, create it and attach again to the instance, instead of having to resize the instance to a different flavor (if that's even currently possible).

Thanks,

Andreas



Version-Release number of selected component (if applicable):


How reproducible:


Steps to Reproduce:
1.
2.
3.

Actual results:


Expected results:


Additional info:

Comment 3 Andreas Karis 2018-08-22 19:09:14 UTC
Hi,

I was just assuming that this was a neutron task, given that I'd do a port-create with neutron. My point is, currently, we set this via the image properties, and this isn't very flexible. We also assume that all interfaces are either multi queue or not. 

libvirt, however, gives us more flexibility:

~~~
[root@overcloud-compute-0 ~]# virsh dumpxml 4 | grep interface -C4
    </controller>
    <controller type='pci' index='0' model='pci-root'>
      <alias name='pci.0'/>
    </controller>
    <interface type='bridge'>
      <mac address='fa:16:3e:9e:31:8e'/>
      <source bridge='qbr09d23991-54'/>
      <target dev='tap09d23991-54'/>
      <model type='virtio'/>
      <driver name='vhost' queues='2'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <interface type='bridge'>
      <mac address='fa:16:3e:f0:00:99'/>
      <source bridge='qbrd84d8d6c-26'/>
      <target dev='tapd84d8d6c-26'/>
      <model type='virtio'/>
      <driver name='vhost' queues='2'/>
      <alias name='net1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </interface>
    <serial type='file'>
      <source path='/var/lib/nova/instances/7462dca7-ad8d-4dd7-aedc-20c39caecf76/console.log'/>
      <target type='isa-serial' port='0'>
        <model name='isa-serial'/>
~~~

~~~
[root@rhel-test-multiqueue ~]# ethtool -l eth1
Channel parameters for eth1:
Pre-set maximums:
RX:		0
TX:		0
Other:		0
Combined:	2
Current hardware settings:
RX:		0
TX:		0
Other:		0
Combined:	1
~~~

~~~
[root@overcloud-compute-0 ~]# cat interface.xml 
    <interface type='bridge'>
      <mac address='fa:16:3e:f0:00:99'/>
      <source bridge='qbrd84d8d6c-26'/>
      <target dev='tapd84d8d6c-26'/>
      <model type='virtio'/>
<!--      <driver name='vhost' queues='2'/> -->
      <alias name='net1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </interface>
~~~

~~~
[root@overcloud-compute-0 ~]# virsh detach-interface --domain instance-00000011 --mac fa:16:3e:f0:00:99
error: command 'detach-interface' requires <type> option
[root@overcloud-compute-0 ~]# virsh detach-interface --domain instance-00000011 --mac fa:16:3e:f0:00:99 --type bridge
Interface detached successfully
[root@overcloud-compute-0 ~]#  virsh attach-device instance-00000011 interface.xml
Device attached successfully
~~~

~~~
[root@rhel-test-multiqueue ~]# ethtool -l eth1
Channel parameters for eth1:
Pre-set maximums:
RX:		0
TX:		0
Other:		0
Combined:	1
Current hardware settings:
RX:		0
TX:		0
Other:		0
Combined:	1
~~~

~~~
[root@overcloud-compute-0 ~]# cat interface.xml 
    <interface type='bridge'>
      <mac address='fa:16:3e:f0:00:99'/>
      <source bridge='qbrd84d8d6c-26'/>
      <target dev='tapd84d8d6c-26'/>
      <model type='virtio'/>
      <driver name='vhost' queues='4'/>
      <alias name='net1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </interface>
~~~

~~~
[root@overcloud-compute-0 ~]# cat interface.xml 
    <interface type='bridge'>
      <mac address='fa:16:3e:f0:00:99'/>
      <source bridge='qbrd84d8d6c-26'/>
      <target dev='tapd84d8d6c-26'/>
      <model type='virtio'/>
      <driver name='vhost' queues='4'/>
      <alias name='net1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </interface>
[root@overcloud-compute-0 ~]# virsh detach-interface --domain instance-00000011 --mac fa:16:3e:f0:00:99 --type bridge
Interface detached successfully
[root@overcloud-compute-0 ~]#  virsh attach-device instance-00000011 interface.xml
Device attached successfully
~~~

~~~
[root@rhel-test-multiqueue ~]# ethtool -l eth1
Channel parameters for eth1:
Pre-set maximums:
RX:		0
TX:		0
Other:		0
Combined:	4
Current hardware settings:
RX:		0
TX:		0
Other:		0
Combined:	1
~~~


Note You need to log in before you can comment on or make changes to this bug.