Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1607280

Re: [PATCH net-next 7/8] vhost_net: try batch dequing from skb array

From Jason Wang <jasowang@redhat.com>
Newsgroups linux.kernel
Subject Re: [PATCH net-next 7/8] vhost_net: try batch dequing from skb array
Date 2017-03-23 10:20 +0100
Message-ID <to74t-bk-3@gated-at.bofh.it> (permalink)
References <tnjr3-6vs-3@gated-at.bofh.it> <tnjr4-6vs-15@gated-at.bofh.it> <tnPhi-3Fu-75@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw



On 2017年03月22日 22:16, Michael S. Tsirkin wrote:
> On Tue, Mar 21, 2017 at 12:04:46PM +0800, Jason Wang wrote:
>> We used to dequeue one skb during recvmsg() from skb_array, this could
>> be inefficient because of the bad cache utilization and spinlock
>> touching for each packet. This patch tries to batch them by calling
>> batch dequeuing helpers explicitly on the exported skb array and pass
>> the skb back through msg_control for underlayer socket to finish the
>> userspace copying.
>>
>> Tests were done by XDP1:
>> - small buffer:
>>    Before: 1.88Mpps
>>    After : 2.25Mpps (+19.6%)
>> - mergeable buffer:
>>    Before: 1.83Mpps
>>    After : 2.10Mpps (+14.7%)
>>
>> Signed-off-by: Jason Wang <jasowang@redhat.com>
>> ---
>>   drivers/vhost/net.c | 64 +++++++++++++++++++++++++++++++++++++++++++++++++----
>>   1 file changed, 60 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
>> index 9b51989..53f09f2 100644
>> --- a/drivers/vhost/net.c
>> +++ b/drivers/vhost/net.c
>> @@ -28,6 +28,8 @@
>>   #include <linux/if_macvlan.h>
>>   #include <linux/if_tap.h>
>>   #include <linux/if_vlan.h>
>> +#include <linux/skb_array.h>
>> +#include <linux/skbuff.h>
>>   
>>   #include <net/sock.h>
>>   
>> @@ -85,6 +87,7 @@ struct vhost_net_ubuf_ref {
>>   	struct vhost_virtqueue *vq;
>>   };
>>   
>> +#define VHOST_RX_BATCH 64
>>   struct vhost_net_virtqueue {
>>   	struct vhost_virtqueue vq;
>>   	size_t vhost_hlen;
>> @@ -99,6 +102,10 @@ struct vhost_net_virtqueue {
>>   	/* Reference counting for outstanding ubufs.
>>   	 * Protected by vq mutex. Writers must also take device mutex. */
>>   	struct vhost_net_ubuf_ref *ubufs;
>> +	struct skb_array *rx_array;
>> +	void *rxq[VHOST_RX_BATCH];
>> +	int rt;
>> +	int rh;
>>   };
>>   
>>   struct vhost_net {
>> @@ -201,6 +208,8 @@ static void vhost_net_vq_reset(struct vhost_net *n)
>>   		n->vqs[i].ubufs = NULL;
>>   		n->vqs[i].vhost_hlen = 0;
>>   		n->vqs[i].sock_hlen = 0;
>> +		n->vqs[i].rt = 0;
>> +		n->vqs[i].rh = 0;
>>   	}
>>   
>>   }
>> @@ -503,13 +512,30 @@ static void handle_tx(struct vhost_net *net)
>>   	mutex_unlock(&vq->mutex);
>>   }
>>   
>> -static int peek_head_len(struct sock *sk)
>> +static int peek_head_len_batched(struct vhost_net_virtqueue *rvq)
> Pls rename to say what it actually does: fetch skbs

Ok.

>
>> +{
>> +	if (rvq->rh != rvq->rt)
>> +		goto out;
>> +
>> +	rvq->rh = rvq->rt = 0;
>> +	rvq->rt = skb_array_consume_batched_bh(rvq->rx_array, rvq->rxq,
>> +						VHOST_RX_BATCH);
> A comment explaining why is is -bh would be helpful.

Ok.

Thanks

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH net-next 0/8] vhost-net rx batching Jason Wang <jasowang@redhat.com> - 2017-03-21 05:20 +0100
  [PATCH net-next 3/8] tun: export skb_array Jason Wang <jasowang@redhat.com> - 2017-03-21 05:20 +0100
  [PATCH net-next 1/8] ptr_ring: introduce batch dequeuing Jason Wang <jasowang@redhat.com> - 2017-03-21 05:20 +0100
    Re: [PATCH net-next 1/8] ptr_ring: introduce batch dequeuing Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> - 2017-03-21 11:30 +0100
      Re: [PATCH net-next 1/8] ptr_ring: introduce batch dequeuing Jason Wang <jasowang@redhat.com> - 2017-03-22 04:20 +0100
    Re: [PATCH net-next 1/8] ptr_ring: introduce batch dequeuing "Michael S. Tsirkin" <mst@redhat.com> - 2017-03-22 14:50 +0100
      Re: [PATCH net-next 1/8] ptr_ring: introduce batch dequeuing Jason Wang <jasowang@redhat.com> - 2017-03-23 09:10 +0100
  [PATCH net-next 5/8] tun: support receiving skb through msg_control Jason Wang <jasowang@redhat.com> - 2017-03-21 05:20 +0100
  [PATCH net-next 7/8] vhost_net: try batch dequing from skb array Jason Wang <jasowang@redhat.com> - 2017-03-21 05:20 +0100
    Re: [PATCH net-next 7/8] vhost_net: try batch dequing from skb array "Michael S. Tsirkin" <mst@redhat.com> - 2017-03-22 15:20 +0100
      Re: [PATCH net-next 7/8] vhost_net: try batch dequing from skb array Jason Wang <jasowang@redhat.com> - 2017-03-23 10:20 +0100
  [PATCH net-next 4/8] tap: export skb_array Jason Wang <jasowang@redhat.com> - 2017-03-21 05:20 +0100
  [PATCH net-next 6/8] tap: support receiving skb from msg_control Jason Wang <jasowang@redhat.com> - 2017-03-21 05:20 +0100

csiph-web