From: Jason Wang <jasowang@redhat.com>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: Anthony Liguori <aliguori@us.ibm.com>,
netdev@vger.kernel.org, Tom Lendacky <toml@us.ibm.com>,
Cristian Viana <vianac@br.ibm.com>
Subject: Re: [PATCH 1/2] vhost: allow multiple workers threads
Date: Tue, 21 Feb 2012 12:51:46 +0800 [thread overview]
Message-ID: <4F4322E2.6010308@redhat.com> (raw)
In-Reply-To: <20120219144145.GA16620@redhat.com>
On 02/19/2012 10:41 PM, Michael S. Tsirkin wrote:
> On Fri, Feb 17, 2012 at 05:02:05PM -0600, Anthony Liguori wrote:
>> > This patch allows vhost to have multiple worker threads for devices such as
>> > virtio-net which may have multiple virtqueues.
>> >
>> > Since virtqueues are a lockless ring queue, in an ideal world data is being
>> > produced by the producer as fast as data is being consumed by the consumer.
>> > These loops will continue to consume data until none is left.
>> >
>> > vhost currently multiplexes the consumer side of the queue on a single thread
>> > by attempting to read from the queue until everything is read or it cannot
>> > process anymore. This means that activity on one queue may stall another queue.
> There's actually an attempt to address this: look up
> VHOST_NET_WEIGHT in the code. I take it, this isn't effective?
>
>> > This is exacerbated when using any form of polling to read from the queues (as
>> > we'll introduce in the next patch). By spawning a thread per-virtqueue, this
>> > is addressed.
>> >
>> > The only problem with this patch right now is how the wake up of the threads is
>> > done. It's essentially a broadcast and we have seen lock contention as a
>> > result.
> On which lock?
>
>> > We've tried some approaches to signal a single thread but I'm not
>> > confident that that code is correct yet so I'm only sending the broadcast
>> > version.
> Yes, that looks like an obvious question.
>
>> > Here are some performance results from this change. There's a modest
>> > improvement with stream although a fair bit of variability too.
>> >
>> > With RR, there's pretty significant improvements as the instance rate drives up.
> Interesting. This was actually tested at one time and we saw
> a significant performance improvement from using
> a single thread especially with a single
> stream in the guest. Profiling indicated that
> with a single thread we get too many context
> switches between TX and RX, since guest networking
> tends to run TX and RX processing on the same
> guest VCPU.
>
> Maybe we were wrong or maybe this went away
> for some reason. I'll see if this can be reproduced.
>
I've tried a similar test in Jan. The test uses one dedicated vhost
thread to handle tx requests and another one for rx. Test result shows
much degradation as the both of the #exits and #irq are increased. There
are some differences as I test between local host and guest, and the
guest does not have very recent virtio changes ( unlocked kick and
exposing index immediately ). I would try the recent kernel.
next prev parent reply other threads:[~2012-02-21 4:51 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-17 23:02 [PATCH 0/2][RFC] vhost: improve transmit rate with virtqueue polling Anthony Liguori
2012-02-17 23:02 ` [PATCH 1/2] vhost: allow multiple workers threads Anthony Liguori
2012-02-19 14:41 ` Michael S. Tsirkin
2012-02-20 15:50 ` Tom Lendacky
2012-02-20 19:27 ` Michael S. Tsirkin
2012-02-20 19:46 ` Anthony Liguori
2012-02-20 21:00 ` Michael S. Tsirkin
2012-02-21 1:04 ` Shirley Ma
2012-02-21 3:21 ` Michael S. Tsirkin
2012-02-21 4:03 ` Shirley Ma
2012-03-05 13:21 ` Anthony Liguori
2012-03-05 20:43 ` Shirley Ma
2012-02-21 4:32 ` Jason Wang
2012-02-21 4:51 ` Jason Wang [this message]
2012-02-17 23:02 ` [PATCH 2/2] vhost-net: add a spin_threshold parameter Anthony Liguori
2012-02-19 14:51 ` Michael S. Tsirkin
2012-02-21 1:35 ` Shirley Ma
2012-02-21 5:34 ` Jason Wang
2012-02-21 6:28 ` Shirley Ma
2012-02-21 6:38 ` Jason Wang
2012-02-21 11:09 ` Shirley Ma
2012-02-21 16:08 ` Sridhar Samudrala
2012-03-12 8:12 ` Dor Laor
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4F4322E2.6010308@redhat.com \
--to=jasowang@redhat.com \
--cc=aliguori@us.ibm.com \
--cc=mst@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=toml@us.ibm.com \
--cc=vianac@br.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.