[RFC PATCH 00/10] VirtioNet RSS support

Andrew Melnychenko posted 10 patches 2 years, 9 months ago
Test syntax-check failed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/20210728081714.715287-1-andrew@daynix.com
There is a newer version of this series
docs/formatdomain.rst        | 16 +++++++
src/conf/domain_conf.c       | 31 +++++++++++++-
src/conf/domain_conf.h       |  2 +
src/libvirt_private.syms     |  1 +
src/qemu/qemu_capabilities.c | 48 +++++++++++++++++++++
src/qemu/qemu_capabilities.h |  5 +++
src/qemu/qemu_command.c      | 46 +++++++++++++++++++-
src/qemu/qemu_command.h      |  2 +
src/qemu/qemu_hotplug.c      | 30 ++++++++++++-
src/qemu/qemu_interface.c    | 54 +++++++++++++++++++++++
src/qemu/qemu_interface.h    |  2 +
src/qemu/qemu_monitor.c      |  9 ++++
src/qemu/qemu_monitor.h      |  3 ++
src/qemu/qemu_monitor_json.c | 50 ++++++++++++++++++++++
src/qemu/qemu_monitor_json.h |  3 ++
src/qemu/qemu_validate.c     | 16 +++++++
src/util/virsocket.c         | 83 ++++++++++++++++++++++++++++++++++++
src/util/virsocket.h         |  2 +
18 files changed, 399 insertions(+), 4 deletions(-)
[RFC PATCH 00/10] VirtioNet RSS support
Posted by Andrew Melnychenko 2 years, 9 months ago
This series of patches add RSS property support for virtio-net-pci.

Virtio RSS effectively works with TAP devices, it requires additional
vectors for VirtioNet, queues for TAP device, and vCPU cores.
Example of device configuration:
```
<interface type="network">
  <mac address="52:54:00:c4:90:25"/>
  <source network="default"/>
  <model type="virtio"/>
  <driver name="qemu" queues="9" rss="on" rss_hash_report="off"/>
  <address type="pci" domain="0x0000" bus="0x01" slot="0x00" function="0x0"/>
</interface>
```

Capability "rss" enables RSS, "rss_hash_report" - enables hashes in vheader.
Qemu uses eBPF program as RSS driver.
For loading RSS eBPF program, the helper is used.
Path to the helper is provided by Qemu through "query-helper-paths" qmp command.
The helper "qemu-ebpf-rss-helper" is built with Qemu and may differ from build to build.
So it's required that the Qemu should provide a proper helper path.
Libvirt would call the helper and receive the program and map fd through unix socket.
Fds would be passed to Qemu in "ebpf_rss_fds" property by passing to child process or unix socket.
If libvirt would fail at helper call or Qemu didn't provide the path,
the Qemu would be launched without "ebpf_rss_fds" property.
Without "ebpf_rss_fds" property, Qemu would try to load eBPF program by
itself - usually, it would require additional system permissions.
Qemu may use "in-qemu" RSS as a fallback option, which will not require system
permissions, but doesn't work with vhost TAP.

Qemu patches: https://lists.nongnu.org/archive/html/qemu-devel/2021-07/msg03535.html

Andrew Melnychenko (10):
  domain_conf: Added configs for RSS and Hash report.
  qemu_capabilities: Added capabilites for qemu's "rss" and "hash".
  qemu_command: Added "rss" and "hash" properties.
  virsocket: Added receive for multiple fds.
  qemu_capabilities: Added capability for qemu's "ebpf_rss_fds".
  qemu_capabilities: Added capability for ebpf helper path.
  qemu_interface: Added ebpf helper call.
  qemu_command: Added ebpf RSS helper call for NIC creation.
  qemu_hotplug: Added helper call for hotplug NIC.
  docs: Added descriptions for "rss" and "rss_hash_report"
    configurations.

 docs/formatdomain.rst        | 16 +++++++
 src/conf/domain_conf.c       | 31 +++++++++++++-
 src/conf/domain_conf.h       |  2 +
 src/libvirt_private.syms     |  1 +
 src/qemu/qemu_capabilities.c | 48 +++++++++++++++++++++
 src/qemu/qemu_capabilities.h |  5 +++
 src/qemu/qemu_command.c      | 46 +++++++++++++++++++-
 src/qemu/qemu_command.h      |  2 +
 src/qemu/qemu_hotplug.c      | 30 ++++++++++++-
 src/qemu/qemu_interface.c    | 54 +++++++++++++++++++++++
 src/qemu/qemu_interface.h    |  2 +
 src/qemu/qemu_monitor.c      |  9 ++++
 src/qemu/qemu_monitor.h      |  3 ++
 src/qemu/qemu_monitor_json.c | 50 ++++++++++++++++++++++
 src/qemu/qemu_monitor_json.h |  3 ++
 src/qemu/qemu_validate.c     | 16 +++++++
 src/util/virsocket.c         | 83 ++++++++++++++++++++++++++++++++++++
 src/util/virsocket.h         |  2 +
 18 files changed, 399 insertions(+), 4 deletions(-)

-- 
2.31.1

Re: [RFC PATCH 00/10] VirtioNet RSS support
Posted by Andrew Melnichenko 2 years, 8 months ago
Ping

On Wed, Jul 28, 2021 at 11:17 AM Andrew Melnychenko <andrew@daynix.com>
wrote:

> This series of patches add RSS property support for virtio-net-pci.
>
> Virtio RSS effectively works with TAP devices, it requires additional
> vectors for VirtioNet, queues for TAP device, and vCPU cores.
> Example of device configuration:
> ```
> <interface type="network">
>   <mac address="52:54:00:c4:90:25"/>
>   <source network="default"/>
>   <model type="virtio"/>
>   <driver name="qemu" queues="9" rss="on" rss_hash_report="off"/>
>   <address type="pci" domain="0x0000" bus="0x01" slot="0x00"
> function="0x0"/>
> </interface>
> ```
>
> Capability "rss" enables RSS, "rss_hash_report" - enables hashes in
> vheader.
> Qemu uses eBPF program as RSS driver.
> For loading RSS eBPF program, the helper is used.
> Path to the helper is provided by Qemu through "query-helper-paths" qmp
> command.
> The helper "qemu-ebpf-rss-helper" is built with Qemu and may differ from
> build to build.
> So it's required that the Qemu should provide a proper helper path.
> Libvirt would call the helper and receive the program and map fd through
> unix socket.
> Fds would be passed to Qemu in "ebpf_rss_fds" property by passing to child
> process or unix socket.
> If libvirt would fail at helper call or Qemu didn't provide the path,
> the Qemu would be launched without "ebpf_rss_fds" property.
> Without "ebpf_rss_fds" property, Qemu would try to load eBPF program by
> itself - usually, it would require additional system permissions.
> Qemu may use "in-qemu" RSS as a fallback option, which will not require
> system
> permissions, but doesn't work with vhost TAP.
>
> Qemu patches:
> https://lists.nongnu.org/archive/html/qemu-devel/2021-07/msg03535.html
>
> Andrew Melnychenko (10):
>   domain_conf: Added configs for RSS and Hash report.
>   qemu_capabilities: Added capabilites for qemu's "rss" and "hash".
>   qemu_command: Added "rss" and "hash" properties.
>   virsocket: Added receive for multiple fds.
>   qemu_capabilities: Added capability for qemu's "ebpf_rss_fds".
>   qemu_capabilities: Added capability for ebpf helper path.
>   qemu_interface: Added ebpf helper call.
>   qemu_command: Added ebpf RSS helper call for NIC creation.
>   qemu_hotplug: Added helper call for hotplug NIC.
>   docs: Added descriptions for "rss" and "rss_hash_report"
>     configurations.
>
>  docs/formatdomain.rst        | 16 +++++++
>  src/conf/domain_conf.c       | 31 +++++++++++++-
>  src/conf/domain_conf.h       |  2 +
>  src/libvirt_private.syms     |  1 +
>  src/qemu/qemu_capabilities.c | 48 +++++++++++++++++++++
>  src/qemu/qemu_capabilities.h |  5 +++
>  src/qemu/qemu_command.c      | 46 +++++++++++++++++++-
>  src/qemu/qemu_command.h      |  2 +
>  src/qemu/qemu_hotplug.c      | 30 ++++++++++++-
>  src/qemu/qemu_interface.c    | 54 +++++++++++++++++++++++
>  src/qemu/qemu_interface.h    |  2 +
>  src/qemu/qemu_monitor.c      |  9 ++++
>  src/qemu/qemu_monitor.h      |  3 ++
>  src/qemu/qemu_monitor_json.c | 50 ++++++++++++++++++++++
>  src/qemu/qemu_monitor_json.h |  3 ++
>  src/qemu/qemu_validate.c     | 16 +++++++
>  src/util/virsocket.c         | 83 ++++++++++++++++++++++++++++++++++++
>  src/util/virsocket.h         |  2 +
>  18 files changed, 399 insertions(+), 4 deletions(-)
>
> --
> 2.31.1
>
>
Re: [RFC PATCH 00/10] VirtioNet RSS support
Posted by Nikolay Shirokovskiy 2 years, 6 months ago
Hi, Andrew.

We in Virtuozzo are interested in this functionality too. Do you plan to
continue your work on it?

Nikolay

пн, 16 авг. 2021 г. в 15:00, Andrew Melnichenko <andrew@daynix.com>:

> Ping
>
> On Wed, Jul 28, 2021 at 11:17 AM Andrew Melnychenko <andrew@daynix.com>
> wrote:
>
>> This series of patches add RSS property support for virtio-net-pci.
>>
>> Virtio RSS effectively works with TAP devices, it requires additional
>> vectors for VirtioNet, queues for TAP device, and vCPU cores.
>> Example of device configuration:
>> ```
>> <interface type="network">
>>   <mac address="52:54:00:c4:90:25"/>
>>   <source network="default"/>
>>   <model type="virtio"/>
>>   <driver name="qemu" queues="9" rss="on" rss_hash_report="off"/>
>>   <address type="pci" domain="0x0000" bus="0x01" slot="0x00"
>> function="0x0"/>
>> </interface>
>> ```
>>
>> Capability "rss" enables RSS, "rss_hash_report" - enables hashes in
>> vheader.
>> Qemu uses eBPF program as RSS driver.
>> For loading RSS eBPF program, the helper is used.
>> Path to the helper is provided by Qemu through "query-helper-paths" qmp
>> command.
>> The helper "qemu-ebpf-rss-helper" is built with Qemu and may differ from
>> build to build.
>> So it's required that the Qemu should provide a proper helper path.
>> Libvirt would call the helper and receive the program and map fd through
>> unix socket.
>> Fds would be passed to Qemu in "ebpf_rss_fds" property by passing to
>> child process or unix socket.
>> If libvirt would fail at helper call or Qemu didn't provide the path,
>> the Qemu would be launched without "ebpf_rss_fds" property.
>> Without "ebpf_rss_fds" property, Qemu would try to load eBPF program by
>> itself - usually, it would require additional system permissions.
>> Qemu may use "in-qemu" RSS as a fallback option, which will not require
>> system
>> permissions, but doesn't work with vhost TAP.
>>
>> Qemu patches:
>> https://lists.nongnu.org/archive/html/qemu-devel/2021-07/msg03535.html
>>
>> Andrew Melnychenko (10):
>>   domain_conf: Added configs for RSS and Hash report.
>>   qemu_capabilities: Added capabilites for qemu's "rss" and "hash".
>>   qemu_command: Added "rss" and "hash" properties.
>>   virsocket: Added receive for multiple fds.
>>   qemu_capabilities: Added capability for qemu's "ebpf_rss_fds".
>>   qemu_capabilities: Added capability for ebpf helper path.
>>   qemu_interface: Added ebpf helper call.
>>   qemu_command: Added ebpf RSS helper call for NIC creation.
>>   qemu_hotplug: Added helper call for hotplug NIC.
>>   docs: Added descriptions for "rss" and "rss_hash_report"
>>     configurations.
>>
>>  docs/formatdomain.rst        | 16 +++++++
>>  src/conf/domain_conf.c       | 31 +++++++++++++-
>>  src/conf/domain_conf.h       |  2 +
>>  src/libvirt_private.syms     |  1 +
>>  src/qemu/qemu_capabilities.c | 48 +++++++++++++++++++++
>>  src/qemu/qemu_capabilities.h |  5 +++
>>  src/qemu/qemu_command.c      | 46 +++++++++++++++++++-
>>  src/qemu/qemu_command.h      |  2 +
>>  src/qemu/qemu_hotplug.c      | 30 ++++++++++++-
>>  src/qemu/qemu_interface.c    | 54 +++++++++++++++++++++++
>>  src/qemu/qemu_interface.h    |  2 +
>>  src/qemu/qemu_monitor.c      |  9 ++++
>>  src/qemu/qemu_monitor.h      |  3 ++
>>  src/qemu/qemu_monitor_json.c | 50 ++++++++++++++++++++++
>>  src/qemu/qemu_monitor_json.h |  3 ++
>>  src/qemu/qemu_validate.c     | 16 +++++++
>>  src/util/virsocket.c         | 83 ++++++++++++++++++++++++++++++++++++
>>  src/util/virsocket.h         |  2 +
>>  18 files changed, 399 insertions(+), 4 deletions(-)
>>
>> --
>> 2.31.1
>>
>>
Re: [RFC PATCH 00/10] VirtioNet RSS support
Posted by Andrew Melnichenko 2 years, 6 months ago
Hi,
Yes, the work is in progress. Now. I'm working with a proper solution for
the eBPF RSS helper.

On Wed, Oct 20, 2021 at 3:23 PM Nikolay Shirokovskiy <
nshirokovskiy@virtuozzo.com> wrote:

> Hi, Andrew.
>
> We in Virtuozzo are interested in this functionality too. Do you plan to
> continue your work on it?
>
> Nikolay
>
> пн, 16 авг. 2021 г. в 15:00, Andrew Melnichenko <andrew@daynix.com>:
>
>> Ping
>>
>> On Wed, Jul 28, 2021 at 11:17 AM Andrew Melnychenko <andrew@daynix.com>
>> wrote:
>>
>>> This series of patches add RSS property support for virtio-net-pci.
>>>
>>> Virtio RSS effectively works with TAP devices, it requires additional
>>> vectors for VirtioNet, queues for TAP device, and vCPU cores.
>>> Example of device configuration:
>>> ```
>>> <interface type="network">
>>>   <mac address="52:54:00:c4:90:25"/>
>>>   <source network="default"/>
>>>   <model type="virtio"/>
>>>   <driver name="qemu" queues="9" rss="on" rss_hash_report="off"/>
>>>   <address type="pci" domain="0x0000" bus="0x01" slot="0x00"
>>> function="0x0"/>
>>> </interface>
>>> ```
>>>
>>> Capability "rss" enables RSS, "rss_hash_report" - enables hashes in
>>> vheader.
>>> Qemu uses eBPF program as RSS driver.
>>> For loading RSS eBPF program, the helper is used.
>>> Path to the helper is provided by Qemu through "query-helper-paths" qmp
>>> command.
>>> The helper "qemu-ebpf-rss-helper" is built with Qemu and may differ from
>>> build to build.
>>> So it's required that the Qemu should provide a proper helper path.
>>> Libvirt would call the helper and receive the program and map fd through
>>> unix socket.
>>> Fds would be passed to Qemu in "ebpf_rss_fds" property by passing to
>>> child process or unix socket.
>>> If libvirt would fail at helper call or Qemu didn't provide the path,
>>> the Qemu would be launched without "ebpf_rss_fds" property.
>>> Without "ebpf_rss_fds" property, Qemu would try to load eBPF program by
>>> itself - usually, it would require additional system permissions.
>>> Qemu may use "in-qemu" RSS as a fallback option, which will not require
>>> system
>>> permissions, but doesn't work with vhost TAP.
>>>
>>> Qemu patches:
>>> https://lists.nongnu.org/archive/html/qemu-devel/2021-07/msg03535.html
>>>
>>> Andrew Melnychenko (10):
>>>   domain_conf: Added configs for RSS and Hash report.
>>>   qemu_capabilities: Added capabilites for qemu's "rss" and "hash".
>>>   qemu_command: Added "rss" and "hash" properties.
>>>   virsocket: Added receive for multiple fds.
>>>   qemu_capabilities: Added capability for qemu's "ebpf_rss_fds".
>>>   qemu_capabilities: Added capability for ebpf helper path.
>>>   qemu_interface: Added ebpf helper call.
>>>   qemu_command: Added ebpf RSS helper call for NIC creation.
>>>   qemu_hotplug: Added helper call for hotplug NIC.
>>>   docs: Added descriptions for "rss" and "rss_hash_report"
>>>     configurations.
>>>
>>>  docs/formatdomain.rst        | 16 +++++++
>>>  src/conf/domain_conf.c       | 31 +++++++++++++-
>>>  src/conf/domain_conf.h       |  2 +
>>>  src/libvirt_private.syms     |  1 +
>>>  src/qemu/qemu_capabilities.c | 48 +++++++++++++++++++++
>>>  src/qemu/qemu_capabilities.h |  5 +++
>>>  src/qemu/qemu_command.c      | 46 +++++++++++++++++++-
>>>  src/qemu/qemu_command.h      |  2 +
>>>  src/qemu/qemu_hotplug.c      | 30 ++++++++++++-
>>>  src/qemu/qemu_interface.c    | 54 +++++++++++++++++++++++
>>>  src/qemu/qemu_interface.h    |  2 +
>>>  src/qemu/qemu_monitor.c      |  9 ++++
>>>  src/qemu/qemu_monitor.h      |  3 ++
>>>  src/qemu/qemu_monitor_json.c | 50 ++++++++++++++++++++++
>>>  src/qemu/qemu_monitor_json.h |  3 ++
>>>  src/qemu/qemu_validate.c     | 16 +++++++
>>>  src/util/virsocket.c         | 83 ++++++++++++++++++++++++++++++++++++
>>>  src/util/virsocket.h         |  2 +
>>>  18 files changed, 399 insertions(+), 4 deletions(-)
>>>
>>> --
>>> 2.31.1
>>>
>>>
Re: [RFC PATCH 00/10] VirtioNet RSS support
Posted by Nikolay Shirokovskiy 2 years, 6 months ago
чт, 21 окт. 2021 г. в 01:28, Andrew Melnichenko <andrew@daynix.com>:

> Hi,
> Yes, the work is in progress. Now. I'm working with a proper solution for
> the eBPF RSS helper.
>

Ok. Thank you!



>
> On Wed, Oct 20, 2021 at 3:23 PM Nikolay Shirokovskiy <
> nshirokovskiy@virtuozzo.com> wrote:
>
>> Hi, Andrew.
>>
>> We in Virtuozzo are interested in this functionality too. Do you plan to
>> continue your work on it?
>>
>> Nikolay
>>
>> пн, 16 авг. 2021 г. в 15:00, Andrew Melnichenko <andrew@daynix.com>:
>>
>>> Ping
>>>
>>> On Wed, Jul 28, 2021 at 11:17 AM Andrew Melnychenko <andrew@daynix.com>
>>> wrote:
>>>
>>>> This series of patches add RSS property support for virtio-net-pci.
>>>>
>>>> Virtio RSS effectively works with TAP devices, it requires additional
>>>> vectors for VirtioNet, queues for TAP device, and vCPU cores.
>>>> Example of device configuration:
>>>> ```
>>>> <interface type="network">
>>>>   <mac address="52:54:00:c4:90:25"/>
>>>>   <source network="default"/>
>>>>   <model type="virtio"/>
>>>>   <driver name="qemu" queues="9" rss="on" rss_hash_report="off"/>
>>>>   <address type="pci" domain="0x0000" bus="0x01" slot="0x00"
>>>> function="0x0"/>
>>>> </interface>
>>>> ```
>>>>
>>>> Capability "rss" enables RSS, "rss_hash_report" - enables hashes in
>>>> vheader.
>>>> Qemu uses eBPF program as RSS driver.
>>>> For loading RSS eBPF program, the helper is used.
>>>> Path to the helper is provided by Qemu through "query-helper-paths" qmp
>>>> command.
>>>> The helper "qemu-ebpf-rss-helper" is built with Qemu and may differ
>>>> from build to build.
>>>> So it's required that the Qemu should provide a proper helper path.
>>>> Libvirt would call the helper and receive the program and map fd
>>>> through unix socket.
>>>> Fds would be passed to Qemu in "ebpf_rss_fds" property by passing to
>>>> child process or unix socket.
>>>> If libvirt would fail at helper call or Qemu didn't provide the path,
>>>> the Qemu would be launched without "ebpf_rss_fds" property.
>>>> Without "ebpf_rss_fds" property, Qemu would try to load eBPF program by
>>>> itself - usually, it would require additional system permissions.
>>>> Qemu may use "in-qemu" RSS as a fallback option, which will not require
>>>> system
>>>> permissions, but doesn't work with vhost TAP.
>>>>
>>>> Qemu patches:
>>>> https://lists.nongnu.org/archive/html/qemu-devel/2021-07/msg03535.html
>>>>
>>>> Andrew Melnychenko (10):
>>>>   domain_conf: Added configs for RSS and Hash report.
>>>>   qemu_capabilities: Added capabilites for qemu's "rss" and "hash".
>>>>   qemu_command: Added "rss" and "hash" properties.
>>>>   virsocket: Added receive for multiple fds.
>>>>   qemu_capabilities: Added capability for qemu's "ebpf_rss_fds".
>>>>   qemu_capabilities: Added capability for ebpf helper path.
>>>>   qemu_interface: Added ebpf helper call.
>>>>   qemu_command: Added ebpf RSS helper call for NIC creation.
>>>>   qemu_hotplug: Added helper call for hotplug NIC.
>>>>   docs: Added descriptions for "rss" and "rss_hash_report"
>>>>     configurations.
>>>>
>>>>  docs/formatdomain.rst        | 16 +++++++
>>>>  src/conf/domain_conf.c       | 31 +++++++++++++-
>>>>  src/conf/domain_conf.h       |  2 +
>>>>  src/libvirt_private.syms     |  1 +
>>>>  src/qemu/qemu_capabilities.c | 48 +++++++++++++++++++++
>>>>  src/qemu/qemu_capabilities.h |  5 +++
>>>>  src/qemu/qemu_command.c      | 46 +++++++++++++++++++-
>>>>  src/qemu/qemu_command.h      |  2 +
>>>>  src/qemu/qemu_hotplug.c      | 30 ++++++++++++-
>>>>  src/qemu/qemu_interface.c    | 54 +++++++++++++++++++++++
>>>>  src/qemu/qemu_interface.h    |  2 +
>>>>  src/qemu/qemu_monitor.c      |  9 ++++
>>>>  src/qemu/qemu_monitor.h      |  3 ++
>>>>  src/qemu/qemu_monitor_json.c | 50 ++++++++++++++++++++++
>>>>  src/qemu/qemu_monitor_json.h |  3 ++
>>>>  src/qemu/qemu_validate.c     | 16 +++++++
>>>>  src/util/virsocket.c         | 83 ++++++++++++++++++++++++++++++++++++
>>>>  src/util/virsocket.h         |  2 +
>>>>  18 files changed, 399 insertions(+), 4 deletions(-)
>>>>
>>>> --
>>>> 2.31.1
>>>>
>>>>