[dpdk-dev] Increasing number of txd and rxd from 256 to 1024 for virtio-net-pmd-1.1

James Yu ypyu2011 at gmail.com
Wed Nov 27 06:15:02 CET 2013


Running one directional traffic from Spirent traffic generator to l2fwd
running inside a guest OS on a RHEL 6.2 KVM host, I encountered performance
issue and need to increase the number of rxd and txd from 256 to 1024.
There was not enough freeslots for packets to be transmitted in this routine
      virtio_send_packet(){
      ....
        if (tq->freeslots < nseg + 1) {
                return -1;
        }
      ....
      }

How do I solve the performance issue by one of the following
1. increase the number of rxd and txd from 256 to 1024
        This should prevent packets could not be stored into the ring due
to lack of freeslots. But l2fwd fails to run and indicate the number must
be equal to 256.
2. increase the MAX_PKT_BURST
        But this is not ideal since it will increase the delay while
improving the throughput
3. other mechanism that you know can improve it ?
        Is there any other approach to have enough freeslots to store the
packets before passing down to PCI ?


Thanks

James


This is the performance numbers I measured on the l2fwd printout for the
receiving part. I added codes inside l2fwd to do tx part.
====================================================================================
vhost-net is enabled on KVM host, # of cache buffer 4096, Ubuntu 12.04.3
LTS (3.2.0-53-generic); kvm 1.2.0, libvirtd: 0.9.8
64 Bytes/pkt from Spirent @ 223k pps, running test for 10 seconds.
====================================================================================
DPDK 1.3 + virtio + 256 txd/rxd + nice -19 priority (l2fwd, guest kvm
process)
bash command: nice -n -19
/root/dpdk/dpdk-1.3.1r2/examples/l2fwd/build/l2fwd -c 3 -n 1 -b 000:00:03.0
-b 000:00:07.0 -b 000:00:0a.0 -b 000:00:09.0 -d
/root/dpdk/virtio-net-pmd-1.1/librte_pmd_virtio.so -- -q 1 -p 1
====================================================================================
Spirent -> l2fwd (receiving 10G) (RX on KVM guest)
    MAX_PKT_BURST     10seconds (<1% loss)  Packets Per Second
-------------------------------------------------------------------------------------------------------------------------------
    32                              74k pps
    64                              80k pps
    128                           126kpps
    256                           133kpps

l2fw -> Spirent (10G port) (transmitting) (using one-directional one port
(port 0) setup)
    MAX_PKT_BURST     < 1% packet loss
    32                             88kpp


**********************************
The same test run on e1000 ports

====================================================================================
DPDK 1.3 + e1000 + 1024 txd/rxd + nice -19 priority (l2fwd, guest kvm
process)
bash command: nice -n -19
/root/dpdk/dpdk-1.3.1r2/examples/l2fwd/build/l2fwd -c 3 -n 1 -b 000:00:03.0
-b 000:00:07.0 -b 000:00:0a.0 -b 000:00:09.0 -- -q 1 -p 1
====================================================================================
Spirent -> l2fwd (RECEIVING 10G)
    MAX_PKT_BURST     <= 1% packet loss
    32                             110k pps

l2fw -> Spirent (10G port) (TRANSMITTING) (using one-directional one port
(port 0) setup)
    MAX_PKT_BURST     pkts transmitted on l2fwd
    32                            171k pps (0% dropped)
    240                          203k pps (6% dropped, 130k pps received on
eth6 (assumed on Spirent)) **
**: not enough freeslots in tx ring
==> this indicate the effects of small txd/rxd (256) when more traffic is
generated, the packets can not
    be sent due to lack of freeslots in tx ring. I guess this is the
symptom occurs in the virtio_net


More information about the dev mailing list