Supporting RSS with DPDK in a VM

Matheus Stolet mstolet at mpi-sws.org
Wed Aug 2 01:09:19 CEST 2023


Sorry it this is a duplicate, but I believe that last time when I 
replied I forgot to cc the mailing list. First of all, thank you for the 
helpful info, but I have one more question!

How do I get the packets distributed to multiple queues without RSS? I 
turned off  RSS by setting ETH_MQ_RX_NONE. I configured multiple queues 
to be used by QEMU and OvS. Inside my DPDK application I checked the 
nb_rx_queues value inside the rte_eth_dev_info struct and it says I have 
10 rx_queues and max_rx_queues for the virtio device that was bound to 
the dpdk application, so at least this initial configuration seems to be 
working and DPDK is detecting multiple queues. The issue I am having is 
that I am only receiving packets in rx queue 0. From some other similar 
questions it seems like that is the default and specified behaviour, so 
how do I also get the other rx queues to be used? I found some vague 
stuff about using the rte_flow API. I can see how the queue action can 
be used to move packets to specific queues. These packets could even be 
matched based on IP address and TCP ports, but I don't see how to 
somewhat uniformly distribute them between queues without using a hash 
and modulo operator (I believe the rte_flow API doesn't support that).

On 2023-07-28 16:12, Thomas Monjalon wrote:
> Hello,
> 
> You can have packets distributed to multiple queues without RSS.
> 
> If you really wants to enable the RSS algorithms,
> it seems not supported for now with vhost_user.
> It can be enabled with vhost running in the kernel:
> https://qemu.readthedocs.io/en/latest/devel/ebpf_rss.html
> 
> 
> 26/07/2023 00:58, Matheus Stolet:
>> Hello,
>> 
>> I am trying to run a DPDK application with RSS enabled so that I can
>> have multiple rx queues. This application is running inside a VM. This
>> VM is hosted by QEMU using KVM acceleration and OvS with DPDK and
>> vhost-user are used in the backend. So to clarify things there are two
>> DPDK portions to this. The first is the DPDK portion used by OvS that
>> bypasses the host operating system. This is working fine. The other is 
>> a
>> DPDK application inside the virtual machine that will bypass the guest
>> operating system. This is where I am having trouble with.
>> 
>> When I set rte_eth_conf.rxmode.mq_mode = ETH_MQ_RX_RSS in my 
>> application
>> I get the following errors:
>>    Warning: NIC does not support all requested RSS hash functions.
>>    virtio_dev_configure(): RSS support requested but not supported by 
>> the
>> device
>>    Port0 dev_configure = -95
>> 
>> I setup my VM in QEMU to have mq=on and queues=10. I also set the 
>> number
>> of rx_queues when creating the vhost port using ovs to 10. Before
>> binding the interface to DPDK, I used ethtool to verify if the network
>> interface was actually setup to have multiple queues.
>> 
>> Running the 'ethtool -l enps02' command yields the following output:
>>    Pre-set maximums:
>>    RX:             0
>>    TX:             0
>>    Other:          0
>>    Combined:       10
>>    Current hardware settings:
>>    RX:             0
>>    TX:             0
>>    Other:          0
>>    Combined:       10
>> 
>>  From my understanding the combined values indicate that the interface
>> was properly setup to have multiple queues, so why am I getting the
>> unsupported RSS error? Are there other configuration steps that I have
>> to take to get this to work? Is RSS with DPDK not supported at all
>> inside a VM at the moment? Perhaps the "Port0 dev_configure() = -95"
>> error means something else? Without the receive side scaling turned on
>> my application is not able to achieve the desired throughput and won't
>> scale when I assign more cores to the application.
>> 
>> Versions:
>> VM
>> DPDK: 21.11.4
>> Kernel: 5.4.0-148-generic
>> Distribution: Ubuntu 20.04
>> 
>> Host
>> DPDK: 21.11.4
>> QEMU: 8.0.90
>> OvS: 3.0.5
>> Kernel: 5.15.111.1.amd64-smp
>> Distribution: Debian 11
>> 


More information about the users mailing list