Thread (59 messages) 59 messages, 6 authors, 2011-02-03

Re: Network performance with small packets

From: "Michael S. Tsirkin" <mst@redhat.com>
Date: 2011-02-03 06:16:29
Also in: kvm

Possibly related (same subject, not in this thread)

On Wed, Feb 02, 2011 at 10:09:14PM -0800, Shirley Ma wrote:
On Thu, 2011-02-03 at 07:59 +0200, Michael S. Tsirkin wrote:
quoted
quoted
Let's look at the sequence here:

guest start_xmit()
      xmit_skb()
      if ring is full,
              enable_cb()

guest skb_xmit_done()
      disable_cb,
        printk free_old_xmit_skbs <-- it was between more than 1/2
to
quoted
full ring size
      printk vq->num_free 

vhost handle_tx()
      if (guest interrupt is enabled)
              signal guest to free xmit buffers

So between guest queue full/stopped queue/enable call back to guest
receives the callback from host to free_old_xmit_skbs, there were
about
quoted
1/2 to full ring size descriptors available. I thought there were
only a
quoted
few. (I disabled your vhost patch for this test.)

The expected number is vq->num - max skb frags - 2. 
It was various (up to the ring size 256). This is using indirection
buffers, it returned how many freed descriptors, not number of buffers.

Why do you think it is vq->num - max skb frags - 2 here?

Shirley
well queue is stopped which happens when

        if (capacity < 2+MAX_SKB_FRAGS) {
                netif_stop_queue(dev);
                if (unlikely(!virtqueue_enable_cb(vi->svq))) {
                        /* More just got used, free them then recheck.
 * */
                        capacity += free_old_xmit_skbs(vi);
                        if (capacity >= 2+MAX_SKB_FRAGS) {
                                netif_start_queue(dev);
                                virtqueue_disable_cb(vi->svq);
                        }
                }
        }

This should be the most common case.
I guess the case with += free_old_xmit_skbs is what can get us more.
But it should be rare. Can you count how common it is?

-- 
MST
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help