> -----Original Message-----
> From: Ilya Maximets [mailto:i.maxim...@samsung.com]
> Sent: Wednesday, March 9, 2016 3:39 PM
> To: Wang, Zhihong <zhihong.w...@intel.com>; dev@openvswitch.org
> Cc: Flavio Leitner <f...@redhat.com>; Traynor, Kevin 
> <kevin.tray...@intel.com>;
> Dyasly Sergey <s.dya...@samsung.com>
> Subject: Re: vhost-user invalid txqid cause discard of packets
> 
> OK. Finally I got it.
> 
> There is not good distribution of rx queues between pmd
> threads for dpdk0 port.
> 
> > # ./ovs/utilities/ovs-appctl dpif-netdev/pmd-rxq-show
> > pmd thread numa_id 0 core_id 13:
> >         port: vhost-user1       queue-id: 1
> >         port: dpdk0     queue-id: 3
> > pmd thread numa_id 0 core_id 14:
> >         port: vhost-user1       queue-id: 2
> > pmd thread numa_id 0 core_id 16:
> >         port: dpdk0     queue-id: 0
> > pmd thread numa_id 0 core_id 17:
> >         port: dpdk0     queue-id: 1
> > pmd thread numa_id 0 core_id 12:
> >         port: vhost-user1       queue-id: 0
> >         port: dpdk0     queue-id: 2
> > pmd thread numa_id 0 core_id 15:
> >         port: vhost-user1       queue-id: 3
> > ------------------------------------------------------
> 
> As we can see above dpdk0 port polled by threads on cores:
> 12, 13, 16 and 17.
> By design of dpif-netdev, there is only one TX queue-id assigned
> to each pmd thread. This queue-id's are sequential similar to
> core-id's. And thread will send packets to queue with exact this
> queue-id regardless of port.
> 
> In our case:
> pmd thread on core 12 will send packets to tx queue 0
> pmd thread on core 13 will send packets to tx queue 1
> ...
> pmd thread on core 17 will send packets to tx queue 5
> 
> So, for dpdk0 port:
> core 12 --> TX queue-id 0
> core 13 --> TX queue-id 1
> core 16 --> TX queue-id 4
> core 17 --> TX queue-id 5
> 
> After truncating in netdev-dpdk:
> core 12 --> TX queue-id 0 % 4 == 0
> core 13 --> TX queue-id 1 % 4 == 1
> core 16 --> TX queue-id 4 % 4 == 0
> core 17 --> TX queue-id 5 % 4 == 1
> 
> As a result only 2 queues used.
> This is not a good behaviour. Thanks for reporting.
> I'll try to fix rx queue distribution in dpif-netdev.
> 
> Best regards, Ilya Maximets.
> 
> P.S. There will be no packet loss on low speeds. Only 2x
>      performance drop.


Yeah, seems a better algorithm will be needed.

Also I see this behavior which I think will lead to packet loss:

In source code qid is calculated at runtime in
__netdev_dpdk_vhost_send:
qid = vhost_dev->tx_q[qid % vhost_dev->real_n_txq].map;

8 cores:
vhost txq: 4, 5, 6, 7 (become 0, 1, 2, 3)

6 cores:
vhost txq: 0, 1, 4, 5 (4 & 5 become -1 after qid calculation at runtime)

And qid == -1 will lead to:
    if (OVS_UNLIKELY(!is_vhost_running(virtio_dev) || qid == -1)) {
        rte_spinlock_lock(&vhost_dev->stats_lock);
        vhost_dev->stats.tx_dropped+= cnt;
        rte_spinlock_unlock(&vhost_dev->stats_lock);
        goto out;
    }

Could you please check if you see this behavior?


_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to