From patchwork Tue Sep 28 01:43:48 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gaoxiang Liu X-Patchwork-Id: 99838 X-Patchwork-Delegate: maxime.coquelin@redhat.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 895CBA0C46; Tue, 28 Sep 2021 03:44:13 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 21C0140E3C; Tue, 28 Sep 2021 03:44:13 +0200 (CEST) Received: from m12-15.163.com (m12-15.163.com [220.181.12.15]) by mails.dpdk.org (Postfix) with ESMTP id CB5A140DF6 for ; Tue, 28 Sep 2021 03:44:10 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:Subject:Date:Message-Id:MIME-Version; bh=eHNFj l1MHtGWG0IOyCMowre1EsiK7fYK489pXTJDtvw=; b=ls6ozy+F0+8CBnIV9wvWi 9POteBN1lIRsfaIrOdn0Rj+4CPO3WrupjjRkE+LpsZCjy3tGyqfo5VRpfk/wCBmL iEJE3yp/ei1IF6lpoivf9Gr1M7CoAIHZlOZjhDqI8jPyMfP8il8bLqqpZNHJ6wxT wcf3SBfxFY1i2lcwOfXbtw= Received: from DESKTOP-ONA2IA7.localdomain (unknown [211.138.116.207]) by smtp11 (Coremail) with SMTP id D8CowAC3xLFWc1JhMw4oAw--.2462S4; Tue, 28 Sep 2021 09:44:08 +0800 (CST) From: Gaoxiang Liu To: maxime.coquelin@redhat.com, chenbo.xia@intel.com Cc: dev@dpdk.org, liugaoxiang@huawei.com, Gaoxiang Liu Date: Tue, 28 Sep 2021 09:43:48 +0800 Message-Id: <20210928014348.1747-1-gaoxiangliu0@163.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210927013022.131-1-gaoxiangliu0@163.com> References: <20210927013022.131-1-gaoxiangliu0@163.com> MIME-Version: 1.0 X-CM-TRANSID: D8CowAC3xLFWc1JhMw4oAw--.2462S4 X-Coremail-Antispam: 1Uf129KBjvJXoWxWw45Kw17ZFy3Gr1kurWkCrg_yoWrXFWfpF y3t3sxAF45XanrtanxArWDZw1rKryfCrW3KFZrGa4S9F4UCry3uayIga4Iqr1UGFW7Ars8 Ar4UtF1UKFWYv3DanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07U53ktUUUUU= X-Originating-IP: [211.138.116.207] X-CM-SenderInfo: xjdr5xxdqjzxjxq6il2tof0z/xtbB3QocOmBHKfpMoQAAso Subject: [dpdk-dev] [PATCH v2] net/vhost: merge vhost stats loop in vhost Tx/Rx X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" To improve performance in vhost Tx/Rx, merge vhost stats loop. eth_vhost_tx has 2 loop of send num iteraion. It can be merge into one. eth_vhost_rx has the same issue as Tx. Fixes: 4d6cf2ac93dc ("net/vhost: add extended statistics") Signed-off-by: Gaoxiang Liu Signed-off-by: Gaoxiang Liu Reviewed-by: Maxime Coquelin Reviewed-by: Maxime Coquelin --- v2: * Fix coding style issues. --- drivers/net/vhost/rte_eth_vhost.c | 62 ++++++++++++++----------------- 1 file changed, 28 insertions(+), 34 deletions(-) diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c index a202931e9a..a4129980f2 100644 --- a/drivers/net/vhost/rte_eth_vhost.c +++ b/drivers/net/vhost/rte_eth_vhost.c @@ -336,38 +336,29 @@ vhost_count_xcast_packets(struct vhost_queue *vq, } static void -vhost_update_packet_xstats(struct vhost_queue *vq, struct rte_mbuf **bufs, - uint16_t count, uint64_t nb_bytes, - uint64_t nb_missed) +vhost_update_single_packet_xstats(struct vhost_queue *vq, struct rte_mbuf *buf) { uint32_t pkt_len = 0; - uint64_t i = 0; uint64_t index; struct vhost_stats *pstats = &vq->stats; - pstats->xstats[VHOST_BYTE] += nb_bytes; - pstats->xstats[VHOST_MISSED_PKT] += nb_missed; - pstats->xstats[VHOST_UNICAST_PKT] += nb_missed; - - for (i = 0; i < count ; i++) { - pstats->xstats[VHOST_PKT]++; - pkt_len = bufs[i]->pkt_len; - if (pkt_len == 64) { - pstats->xstats[VHOST_64_PKT]++; - } else if (pkt_len > 64 && pkt_len < 1024) { - index = (sizeof(pkt_len) * 8) - - __builtin_clz(pkt_len) - 5; - pstats->xstats[index]++; - } else { - if (pkt_len < 64) - pstats->xstats[VHOST_UNDERSIZE_PKT]++; - else if (pkt_len <= 1522) - pstats->xstats[VHOST_1024_TO_1522_PKT]++; - else if (pkt_len > 1522) - pstats->xstats[VHOST_1523_TO_MAX_PKT]++; - } - vhost_count_xcast_packets(vq, bufs[i]); + pstats->xstats[VHOST_PKT]++; + pkt_len = buf->pkt_len; + if (pkt_len == 64) { + pstats->xstats[VHOST_64_PKT]++; + } else if (pkt_len > 64 && pkt_len < 1024) { + index = (sizeof(pkt_len) * 8) + - __builtin_clz(pkt_len) - 5; + pstats->xstats[index]++; + } else { + if (pkt_len < 64) + pstats->xstats[VHOST_UNDERSIZE_PKT]++; + else if (pkt_len <= 1522) + pstats->xstats[VHOST_1024_TO_1522_PKT]++; + else if (pkt_len > 1522) + pstats->xstats[VHOST_1523_TO_MAX_PKT]++; } + vhost_count_xcast_packets(vq, buf); } static uint16_t @@ -376,7 +367,6 @@ eth_vhost_rx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs) struct vhost_queue *r = q; uint16_t i, nb_rx = 0; uint16_t nb_receive = nb_bufs; - uint64_t nb_bytes = 0; if (unlikely(rte_atomic32_read(&r->allow_queuing) == 0)) return 0; @@ -411,11 +401,11 @@ eth_vhost_rx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs) if (r->internal->vlan_strip) rte_vlan_strip(bufs[i]); - nb_bytes += bufs[i]->pkt_len; - } + r->stats.bytes += bufs[i]->pkt_len; + r->stats.xstats[VHOST_BYTE] += bufs[i]->pkt_len; - r->stats.bytes += nb_bytes; - vhost_update_packet_xstats(r, bufs, nb_rx, nb_bytes, 0); + vhost_update_single_packet_xstats(r, bufs[i]); + } out: rte_atomic32_set(&r->while_queuing, 0); @@ -471,16 +461,20 @@ eth_vhost_tx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs) break; } - for (i = 0; likely(i < nb_tx); i++) + for (i = 0; likely(i < nb_tx); i++) { nb_bytes += bufs[i]->pkt_len; + vhost_update_single_packet_xstats(r, bufs[i]); + } nb_missed = nb_bufs - nb_tx; r->stats.pkts += nb_tx; r->stats.bytes += nb_bytes; - r->stats.missed_pkts += nb_bufs - nb_tx; + r->stats.missed_pkts += nb_missed; - vhost_update_packet_xstats(r, bufs, nb_tx, nb_bytes, nb_missed); + r->stats.xstats[VHOST_BYTE] += nb_bytes; + r->stats.xstats[VHOST_MISSED_PKT] += nb_missed; + r->stats.xstats[VHOST_UNICAST_PKT] += nb_missed; /* According to RFC2863, ifHCOutUcastPkts, ifHCOutMulticastPkts and * ifHCOutBroadcastPkts counters are increased when packets are not