From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 6CDE1A0527 for ; Mon, 9 Nov 2020 19:43:29 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 65C6F72ED; Mon, 9 Nov 2020 19:43:28 +0100 (CET) Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) by dpdk.org (Postfix) with ESMTP id 2864672ED for ; Mon, 9 Nov 2020 19:43:27 +0100 (CET) Received: by mail-wm1-f52.google.com with SMTP id 10so460493wml.2 for ; Mon, 09 Nov 2020 10:43:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+69J5lBHvvOhWMoGQDD/703/Cs+jFr3W2qKxD+iTHY0=; b=MkNL6r8x2Go9gU/uSMll5RJ0yqGYNY8AONgzLdV75qp4lMeyfRdXirOIFLIj/bwvAZ XLr6R2k/XYlUpLze6ZdB7HJPwjEb4qIYNsyaZNv2JbLiL90TufwQrSchyDK4LaOsurff /k1m3CeugZdYAyeSKLlbJTPxBKqqGXgY77wUxAe+XM4dgoh3BeCXhhzaUgNrYfYadmBh 9p6SJuqp30+yZBnCb39ra/0eyeWn7q1H0Z39Bo4IaPywaSGdKkiXkzwW1LQHAtPWH04d F7KhBY3Y9qKy+ZS1MuUd16h38ZAeT7ubG6/o2eDNPB+dF3QK0Y5PvM0tvkSosSEIGAkq F1og== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+69J5lBHvvOhWMoGQDD/703/Cs+jFr3W2qKxD+iTHY0=; b=X2gIwXkSg8D5ARz7uWPabm+jwJ5rA1GVRAstzWeYPzGisnKTrHX8ZuS6vxWn7696IX PC3RrchnB3afXeBvxG/JevMgHs6HJQpaPf4VpSVG7sqgJf53RGxzHrRJAV4t30K3s2x7 xNfwen9r0kpn/VzcGPbw2CAhg6B5ijUJx1j6uAboo2k8wK0s47HVwbo4xhp/iMXsyPd2 KcawKGmutBppAzurmjtu1dTvmxbX9EzeyYHFs2Jrb5/NOcDJ12Lj/VpIljR4XvC2hh1w dsDACfY6s7fZoxIW/5TmXc9AT8XWhsNfYc+iOQWCZRH44+Ka/kiGApX76b5VmeeOwWj6 ShPg== X-Gm-Message-State: AOAM532jAIJX9lXO6Y+zz3K7PZT5Dgwp5/lVgKP+jPqclfl1ILo+41zM C3KvdNsRC+jSJyB0AGJvEv8= X-Google-Smtp-Source: ABdhPJxewh2jog1TMQwj4syy9fhRGJ3m1n2KsJlEK9NCuByoT1eU6WTiCgqizbHfhyLj6RTAb8OwYA== X-Received: by 2002:a1c:bac1:: with SMTP id k184mr556314wmf.76.1604947405905; Mon, 09 Nov 2020 10:43:25 -0800 (PST) Received: from localhost ([88.98.246.218]) by smtp.gmail.com with ESMTPSA id d134sm332145wmd.8.2020.11.09.10.43.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Nov 2020 10:43:25 -0800 (PST) From: luca.boccassi@gmail.com To: David Christensen Cc: Chenbo Xia , Maxime Coquelin , dpdk stable Date: Mon, 9 Nov 2020 18:40:27 +0000 Message-Id: <20201109184111.3463090-39-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20201109184111.3463090-1-luca.boccassi@gmail.com> References: <20201028104606.3504127-207-luca.boccassi@gmail.com> <20201109184111.3463090-1-luca.boccassi@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-stable] patch 'net/vhost: fix xstats after clearing stats' has been queued to stable release 19.11.6 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" Hi, FYI, your patch has been queued to stable release 19.11.6 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 11/11/20. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Queued patches are on a temporary branch at: https://github.com/bluca/dpdk-stable This queued commit can be viewed at: https://github.com/bluca/dpdk-stable/commit/8123d107105e2e4685730975890b31f2a143029c Thanks. Luca Boccassi --- >From 8123d107105e2e4685730975890b31f2a143029c Mon Sep 17 00:00:00 2001 From: David Christensen Date: Thu, 15 Oct 2020 10:49:37 -0700 Subject: [PATCH] net/vhost: fix xstats after clearing stats [ upstream commit d4fbb27459954bdbb9240d16b47bdfccf47c6e34 ] The PMD API allows stats and xstats values to be cleared separately. This is a problem for the vhost PMD since some of the xstats values are derived from existing stats values. For example: testpmd> show port xstats all ... tx_unicast_packets: 17562959 ... testpmd> clear port stats all ... show port xstats all ... tx_unicast_packets: 18446744073709551615 ... Modify the driver so that stats and xstats values are stored, updated, and cleared separately. Fixes: 4d6cf2ac93dc ("net/vhost: add extended statistics") Signed-off-by: David Christensen Reviewed-by: Chenbo Xia Reviewed-by: Maxime Coquelin --- drivers/net/vhost/rte_eth_vhost.c | 76 +++++++++++++++---------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c index 85f91f0b9d..323efb3c07 100644 --- a/drivers/net/vhost/rte_eth_vhost.c +++ b/drivers/net/vhost/rte_eth_vhost.c @@ -68,6 +68,9 @@ enum vhost_xstats_pkts { VHOST_BROADCAST_PKT, VHOST_MULTICAST_PKT, VHOST_UNICAST_PKT, + VHOST_PKT, + VHOST_BYTE, + VHOST_MISSED_PKT, VHOST_ERRORS_PKT, VHOST_ERRORS_FRAGMENTED, VHOST_ERRORS_JABBER, @@ -143,11 +146,11 @@ struct vhost_xstats_name_off { /* [rx]_is prepended to the name string here */ static const struct vhost_xstats_name_off vhost_rxport_stat_strings[] = { {"good_packets", - offsetof(struct vhost_queue, stats.pkts)}, + offsetof(struct vhost_queue, stats.xstats[VHOST_PKT])}, {"total_bytes", - offsetof(struct vhost_queue, stats.bytes)}, + offsetof(struct vhost_queue, stats.xstats[VHOST_BYTE])}, {"missed_pkts", - offsetof(struct vhost_queue, stats.missed_pkts)}, + offsetof(struct vhost_queue, stats.xstats[VHOST_MISSED_PKT])}, {"broadcast_packets", offsetof(struct vhost_queue, stats.xstats[VHOST_BROADCAST_PKT])}, {"multicast_packets", @@ -183,11 +186,11 @@ static const struct vhost_xstats_name_off vhost_rxport_stat_strings[] = { /* [tx]_ is prepended to the name string here */ static const struct vhost_xstats_name_off vhost_txport_stat_strings[] = { {"good_packets", - offsetof(struct vhost_queue, stats.pkts)}, + offsetof(struct vhost_queue, stats.xstats[VHOST_PKT])}, {"total_bytes", - offsetof(struct vhost_queue, stats.bytes)}, + offsetof(struct vhost_queue, stats.xstats[VHOST_BYTE])}, {"missed_pkts", - offsetof(struct vhost_queue, stats.missed_pkts)}, + offsetof(struct vhost_queue, stats.xstats[VHOST_MISSED_PKT])}, {"broadcast_packets", offsetof(struct vhost_queue, stats.xstats[VHOST_BROADCAST_PKT])}, {"multicast_packets", @@ -281,23 +284,6 @@ vhost_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats, if (n < nxstats) return nxstats; - for (i = 0; i < dev->data->nb_rx_queues; i++) { - vq = dev->data->rx_queues[i]; - if (!vq) - continue; - vq->stats.xstats[VHOST_UNICAST_PKT] = vq->stats.pkts - - (vq->stats.xstats[VHOST_BROADCAST_PKT] - + vq->stats.xstats[VHOST_MULTICAST_PKT]); - } - for (i = 0; i < dev->data->nb_tx_queues; i++) { - vq = dev->data->tx_queues[i]; - if (!vq) - continue; - vq->stats.xstats[VHOST_UNICAST_PKT] = vq->stats.pkts - + vq->stats.missed_pkts - - (vq->stats.xstats[VHOST_BROADCAST_PKT] - + vq->stats.xstats[VHOST_MULTICAST_PKT]); - } for (t = 0; t < VHOST_NB_XSTATS_RXPORT; t++) { xstats[count].value = 0; for (i = 0; i < dev->data->nb_rx_queues; i++) { @@ -328,7 +314,7 @@ vhost_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats, } static inline void -vhost_count_multicast_broadcast(struct vhost_queue *vq, +vhost_count_xcast_packets(struct vhost_queue *vq, struct rte_mbuf *mbuf) { struct rte_ether_addr *ea = NULL; @@ -340,20 +326,27 @@ vhost_count_multicast_broadcast(struct vhost_queue *vq, pstats->xstats[VHOST_BROADCAST_PKT]++; else pstats->xstats[VHOST_MULTICAST_PKT]++; + } else { + pstats->xstats[VHOST_UNICAST_PKT]++; } } static void -vhost_update_packet_xstats(struct vhost_queue *vq, - struct rte_mbuf **bufs, - uint16_t count) +vhost_update_packet_xstats(struct vhost_queue *vq, struct rte_mbuf **bufs, + uint16_t count, uint64_t nb_bytes, + uint64_t nb_missed) { 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]++; @@ -369,7 +362,7 @@ vhost_update_packet_xstats(struct vhost_queue *vq, else if (pkt_len > 1522) pstats->xstats[VHOST_1523_TO_MAX_PKT]++; } - vhost_count_multicast_broadcast(vq, bufs[i]); + vhost_count_xcast_packets(vq, bufs[i]); } } @@ -379,6 +372,7 @@ 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; @@ -413,10 +407,11 @@ eth_vhost_rx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs) if (r->internal->vlan_strip) rte_vlan_strip(bufs[i]); - r->stats.bytes += bufs[i]->pkt_len; + nb_bytes += bufs[i]->pkt_len; } - vhost_update_packet_xstats(r, bufs, nb_rx); + r->stats.bytes += nb_bytes; + vhost_update_packet_xstats(r, bufs, nb_rx, nb_bytes, 0); out: rte_atomic32_set(&r->while_queuing, 0); @@ -430,6 +425,8 @@ eth_vhost_tx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs) struct vhost_queue *r = q; uint16_t i, nb_tx = 0; uint16_t nb_send = 0; + uint64_t nb_bytes = 0; + uint64_t nb_missed = 0; if (unlikely(rte_atomic32_read(&r->allow_queuing) == 0)) return 0; @@ -470,20 +467,23 @@ eth_vhost_tx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs) break; } + for (i = 0; likely(i < nb_tx); i++) + nb_bytes += bufs[i]->pkt_len; + + nb_missed = nb_bufs - nb_tx; + r->stats.pkts += nb_tx; + r->stats.bytes += nb_bytes; r->stats.missed_pkts += nb_bufs - nb_tx; - for (i = 0; likely(i < nb_tx); i++) - r->stats.bytes += bufs[i]->pkt_len; + vhost_update_packet_xstats(r, bufs, nb_tx, nb_bytes, nb_missed); - vhost_update_packet_xstats(r, bufs, nb_tx); - - /* According to RFC2863 page42 section ifHCOutMulticastPkts and - * ifHCOutBroadcastPkts, the counters "multicast" and "broadcast" - * are increased when packets are not transmitted successfully. + /* According to RFC2863, ifHCOutUcastPkts, ifHCOutMulticastPkts and + * ifHCOutBroadcastPkts counters are increased when packets are not + * transmitted successfully. */ for (i = nb_tx; i < nb_bufs; i++) - vhost_count_multicast_broadcast(r, bufs[i]); + vhost_count_xcast_packets(r, bufs[i]); for (i = 0; likely(i < nb_tx); i++) rte_pktmbuf_free(bufs[i]); -- 2.27.0 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2020-11-09 18:40:12.749315510 +0000 +++ 0039-net-vhost-fix-xstats-after-clearing-stats.patch 2020-11-09 18:40:11.163311780 +0000 @@ -1 +1 @@ -From d4fbb27459954bdbb9240d16b47bdfccf47c6e34 Mon Sep 17 00:00:00 2001 +From 8123d107105e2e4685730975890b31f2a143029c Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit d4fbb27459954bdbb9240d16b47bdfccf47c6e34 ] + @@ -25 +26,0 @@ -Cc: stable@dpdk.org @@ -35 +36 @@ -index f2712036fc..5845bb15f3 100644 +index 85f91f0b9d..323efb3c07 100644 @@ -38 +39 @@ -@@ -71,6 +71,9 @@ enum vhost_xstats_pkts { +@@ -68,6 +68,9 @@ enum vhost_xstats_pkts { @@ -48 +49 @@ -@@ -147,11 +150,11 @@ struct vhost_xstats_name_off { +@@ -143,11 +146,11 @@ struct vhost_xstats_name_off { @@ -63 +64 @@ -@@ -187,11 +190,11 @@ static const struct vhost_xstats_name_off vhost_rxport_stat_strings[] = { +@@ -183,11 +186,11 @@ static const struct vhost_xstats_name_off vhost_rxport_stat_strings[] = { @@ -78 +79 @@ -@@ -285,23 +288,6 @@ vhost_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats, +@@ -281,23 +284,6 @@ vhost_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats, @@ -102 +103 @@ -@@ -332,7 +318,7 @@ vhost_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats, +@@ -328,7 +314,7 @@ vhost_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats, @@ -111 +112 @@ -@@ -344,20 +330,27 @@ vhost_count_multicast_broadcast(struct vhost_queue *vq, +@@ -340,20 +326,27 @@ vhost_count_multicast_broadcast(struct vhost_queue *vq, @@ -142 +143 @@ -@@ -373,7 +366,7 @@ vhost_update_packet_xstats(struct vhost_queue *vq, +@@ -369,7 +362,7 @@ vhost_update_packet_xstats(struct vhost_queue *vq, @@ -151 +152 @@ -@@ -383,6 +376,7 @@ eth_vhost_rx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs) +@@ -379,6 +372,7 @@ eth_vhost_rx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs) @@ -159 +160 @@ -@@ -417,10 +411,11 @@ eth_vhost_rx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs) +@@ -413,10 +407,11 @@ eth_vhost_rx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs) @@ -173 +174 @@ -@@ -434,6 +429,8 @@ eth_vhost_tx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs) +@@ -430,6 +425,8 @@ eth_vhost_tx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs) @@ -182 +183 @@ -@@ -474,20 +471,23 @@ eth_vhost_tx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs) +@@ -470,20 +467,23 @@ eth_vhost_tx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs)