From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by dpdk.org (Postfix) with ESMTP id 9F7881B606 for ; Wed, 19 Dec 2018 13:08:24 +0100 (CET) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id A3DDF88308; Wed, 19 Dec 2018 12:08:23 +0000 (UTC) Received: from [10.36.112.26] (ovpn-112-26.ams2.redhat.com [10.36.112.26]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 1519817197; Wed, 19 Dec 2018 12:08:18 +0000 (UTC) To: Jens Freimann Cc: dev@dpdk.org, tiwei.bie@intel.com, zhihong.wang@intel.com References: <20181211134804.10318-1-maxime.coquelin@redhat.com> <20181211134804.10318-4-maxime.coquelin@redhat.com> <20181219094743.yjuqrbwk6mjiilt4@jenstp.localdomain> From: Maxime Coquelin Message-ID: <1995d39a-c273-fb05-9c0e-de3c7b10caf8@redhat.com> Date: Wed, 19 Dec 2018 13:08:16 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.3.1 MIME-Version: 1.0 In-Reply-To: <20181219094743.yjuqrbwk6mjiilt4@jenstp.localdomain> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Wed, 19 Dec 2018 12:08:23 +0000 (UTC) Subject: Re: [dpdk-dev] [PATCH v2 3/3] net/virtio: improve batching in mergeable path X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 19 Dec 2018 12:08:24 -0000 On 12/19/18 10:47 AM, Jens Freimann wrote: > On Tue, Dec 11, 2018 at 02:48:04PM +0100, Maxime Coquelin wrote: >> This patch improves both descriptors dequeue and refill, >> by using the same bathing strategy as done in in-order path. > > s/bathing/batching/ > >> >> Signed-off-by: Maxime Coquelin >> --- >> drivers/net/virtio/virtio_rxtx.c | 237 ++++++++++++++++--------------- >> 1 file changed, 126 insertions(+), 111 deletions(-) >> >> diff --git a/drivers/net/virtio/virtio_rxtx.c >> b/drivers/net/virtio/virtio_rxtx.c >> index ebe5c74b5..59bcac2f7 100644 >> --- a/drivers/net/virtio/virtio_rxtx.c >> +++ b/drivers/net/virtio/virtio_rxtx.c >> @@ -267,41 +267,42 @@ virtqueue_enqueue_refill_inorder(struct >> virtqueue *vq, >> } >> >> static inline int >> -virtqueue_enqueue_recv_refill(struct virtqueue *vq, struct rte_mbuf >> *cookie) >> +virtqueue_enqueue_recv_refill(struct virtqueue *vq, struct rte_mbuf >> **cookie, >> +                uint16_t num) >> { >>     struct vq_desc_extra *dxp; >>     struct virtio_hw *hw = vq->hw; >> -    struct vring_desc *start_dp; >> -    uint16_t needed = 1; >> -    uint16_t head_idx, idx; >> +    struct vring_desc *start_dp = vq->vq_ring.desc; >> +    uint16_t idx, i; >> >>     if (unlikely(vq->vq_free_cnt == 0)) >>         return -ENOSPC; >> -    if (unlikely(vq->vq_free_cnt < needed)) >> +    if (unlikely(vq->vq_free_cnt < num)) >>         return -EMSGSIZE; >> >> -    head_idx = vq->vq_desc_head_idx; >> -    if (unlikely(head_idx >= vq->vq_nentries)) >> +    if (unlikely(vq->vq_desc_head_idx >= vq->vq_nentries)) >>         return -EFAULT; >> >> -    idx = head_idx; >> -    dxp = &vq->vq_descx[idx]; >> -    dxp->cookie = (void *)cookie; >> -    dxp->ndescs = needed; >> +    for (i = 0; i < num; i++) { >> +        idx = vq->vq_desc_head_idx; >> +        dxp = &vq->vq_descx[idx]; >> +        dxp->cookie = (void *)cookie[i]; > > I think code is safe as it is, but should we check if cookie actually > points to something? I don't think it is needed, we check in virtqueue_dequeue_burst_rx that cookie isn't NULL before using it. Thanks, Maxime > I tested this patch and saw the same performance improvement, so > > Tested-by: Jens Freimann > Reviewed-by: Jens Freimann > > regards, > Jens