Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1607280
| 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 |
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 | Next — Previous in thread | Next in thread | Find similar | Unroll 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