Thread (3 messages) 3 messages, 2 authors, 2016-05-03

Re: [PATCH] vhost_net: stop polling socket during rx processing

From: Jason Wang <jasowang@redhat.com>
Date: 2016-05-03 02:52:51
Also in: kvm, lkml, virtualization


On 04/28/2016 02:19 PM, Jason Wang wrote:
On 04/27/2016 07:28 PM, Michael S. Tsirkin wrote:
quoted
quoted
On Tue, Apr 26, 2016 at 03:35:53AM -0400, Jason Wang wrote:
quoted
quoted
We don't stop polling socket during rx processing, this will lead
unnecessary wakeups from under layer net devices (E.g
sock_def_readable() form tun). Rx will be slowed down in this
way. This patch avoids this by stop polling socket during rx
processing. A small drawback is that this introduces some overheads in
light load case because of the extra start/stop polling, but single
netperf TCP_RR does not notice any change. In a super heavy load case,
e.g using pktgen to inject packet to guest, we get about ~17%
improvement on pps:

before: ~1370000 pkt/s
after:  ~1500000 pkt/s

Signed-off-by: Jason Wang <jasowang@redhat.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>

There is one other possible enhancement: we actually have the wait queue
lock taken in _wake_up, but we give it up only to take it again in the
handler.

It would be nicer to just remove the entry when we wake
the vhost thread. Re-add it if required.
I think that something like the below would give you the necessary API.
Pls feel free to use it if you are going to implement a patch on top
doing this - that's not a reason not to include this simple patch
though.
Thanks, this looks useful, will give it a try.
Want to try, but looks like this will result a strange API:

- poll were removed automatically during wakeup, handler does not need
to care about this
- but handler still need to re-add the poll explicitly in the code

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