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 ?