From patchwork Wed Oct 9 14:16:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Wei Hu (Xavier)" X-Patchwork-Id: 60803 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 0DD5D1E8AB; Wed, 9 Oct 2019 16:17:17 +0200 (CEST) Received: from smtp.tom.com (smtprz15.163.net [106.3.154.248]) by dpdk.org (Postfix) with ESMTP id A41E61E53A for ; Wed, 9 Oct 2019 16:17:10 +0200 (CEST) Received: from my-app01.tom.com (my-app01.tom.com [127.0.0.1]) by freemail01.tom.com (Postfix) with ESMTP id EEE7C1C82C24 for ; Wed, 9 Oct 2019 22:17:27 +0800 (CST) Received: from my-app01.tom.com (HELO smtp.tom.com) ([127.0.0.1]) by my-app01 (TOM SMTP Server) with SMTP ID 812506802 for ; Wed, 09 Oct 2019 22:17:27 +0800 (CST) Received: from antispam1.tom.com (unknown [172.25.16.55]) by freemail01.tom.com (Postfix) with ESMTP id E4CCC1C8276B for ; Wed, 9 Oct 2019 22:17:27 +0800 (CST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tom.com; s=201807; t=1570630647; bh=tfi0p//QISJyFjZZ9/Ue5wV7rq/k7IDdOAezfSE2jR0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=I0VWUyELUnRXxp0tO3uKE73BkHEEgo42eL1UKNvNofiFK9H4iM9Y1DvftaoA3x8Ra LTXJQADrB3KwghOX5TBB3y2NfT8R9anaBWf5N2Osq7iW3KQMgZsYVceKGZbYX8YAnB m25AfAUtv07tkBwBIYzXpbwIICXNOPiwIP/uZOs0= Received: from antispam1.tom.com (antispam1.tom.com [127.0.0.1]) by antispam1.tom.com (Postfix) with ESMTP id 7AF1F10016AE for ; Wed, 9 Oct 2019 22:16:01 +0800 (CST) X-Virus-Scanned: Debian amavisd-new at antispam1.tom.com Received: from antispam1.tom.com ([127.0.0.1]) by antispam1.tom.com (antispam1.tom.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 56FvOJN6rvj9 for ; Wed, 9 Oct 2019 22:15:59 +0800 (CST) Received: from localhost.localdomain (unknown [114.119.4.74]) by antispam1.tom.com (Postfix) with ESMTPA id 9B1CF1001471; Wed, 9 Oct 2019 22:15:59 +0800 (CST) From: "Wei Hu (Xavier)" To: dev@dpdk.org Cc: xavier.huwei@huawei.com Date: Wed, 9 Oct 2019 22:16:50 +0800 Message-Id: <20191009141653.39364-2-xavier.huwei@tom.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191009141653.39364-1-xavier.huwei@tom.com> References: <20191009141653.39364-1-xavier.huwei@tom.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 1/4] net/hns3: modify the statistics for sending and receiving messages 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Hao Chen In receiving direction, for FCS error messages, drivers no longer record them in rte_eth_stats.ipackets statistics. In sending direction, for messages of illegal length, too long or equals 0, drivers will not notify the network card hardware to send them, will not continue to send the remaining message in burst, and will not record them in rte_eth_stats.opackets statistics. Signed-off-by: Hao Chen Signed-off-by: Wei Hu (Xavier) --- drivers/net/hns3/hns3_rxtx.c | 11 ++--- drivers/net/hns3/hns3_rxtx.h | 3 -- drivers/net/hns3/hns3_stats.c | 84 ++++++++--------------------------- 3 files changed, 22 insertions(+), 76 deletions(-) diff --git a/drivers/net/hns3/hns3_rxtx.c b/drivers/net/hns3/hns3_rxtx.c index 184b8e4b6..709e07c80 100644 --- a/drivers/net/hns3/hns3_rxtx.c +++ b/drivers/net/hns3/hns3_rxtx.c @@ -660,7 +660,6 @@ hns3_rx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t nb_desc, rxq->l4_csum_erros = 0; rxq->ol3_csum_erros = 0; rxq->ol4_csum_erros = 0; - rxq->errors = 0; rte_spinlock_lock(&hw->lock); dev->data->rx_queues[idx] = rxq; @@ -816,14 +815,12 @@ hns3_handle_bdinfo(struct hns3_rx_queue *rxq, struct rte_mbuf *rxm, if (unlikely(l234_info & BIT(HNS3_RXD_L2E_B))) { rxq->l2_errors++; - rxq->errors++; return -EINVAL; } if (unlikely(rxm->pkt_len == 0 || (l234_info & BIT(HNS3_RXD_TRUNCAT_B)))) { rxq->pkt_len_errors++; - rxq->errors++; return -EINVAL; } @@ -979,6 +976,7 @@ hns3_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) first_seg->pkt_len = pkt_len; first_seg->port = rxq->port_id; first_seg->hash.rss = rte_le_to_cpu_32(rxdp->rx.rss_hash); + first_seg->ol_flags |= PKT_RX_RSS_HASH; if (unlikely(hns3_get_bit(bd_base_info, HNS3_RXD_LUM_B))) { first_seg->hash.fdir.hi = rte_le_to_cpu_32(rxdp->rx.fd_id); @@ -1097,7 +1095,6 @@ hns3_tx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t nb_desc, txq->next_to_clean = 0; txq->tx_bd_ready = txq->nb_tx_desc; txq->port_id = dev->data->port_id; - txq->pkt_len_errors = 0; txq->configured = true; txq->io_base = (void *)((char *)hw->io_base + HNS3_TQP_REG_OFFSET + idx * HNS3_TQP_REG_SIZE); @@ -1604,10 +1601,8 @@ hns3_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) * will be ignored. */ if (unlikely(tx_pkt->pkt_len > HNS3_MAX_FRAME_LEN || - tx_pkt->pkt_len == 0)) { - txq->pkt_len_errors++; - continue; - } + tx_pkt->pkt_len == 0)) + break; m_seg = tx_pkt; if (unlikely(nb_buf > HNS3_MAX_TX_BD_PER_PKT)) { diff --git a/drivers/net/hns3/hns3_rxtx.h b/drivers/net/hns3/hns3_rxtx.h index 358f12984..daf51f409 100644 --- a/drivers/net/hns3/hns3_rxtx.h +++ b/drivers/net/hns3/hns3_rxtx.h @@ -252,7 +252,6 @@ struct hns3_rx_queue { uint64_t l4_csum_erros; uint64_t ol3_csum_erros; uint64_t ol4_csum_erros; - uint64_t errors; /* num of error rx packets recorded by driver */ }; struct hns3_tx_queue { @@ -272,8 +271,6 @@ struct hns3_tx_queue { bool tx_deferred_start; /* don't start this queue in dev start */ bool configured; /* indicate if tx queue has been configured */ - - uint64_t pkt_len_errors; }; #define HNS3_TX_CKSUM_OFFLOAD_MASK ( \ diff --git a/drivers/net/hns3/hns3_stats.c b/drivers/net/hns3/hns3_stats.c index a0252eacc..9948beb17 100644 --- a/drivers/net/hns3/hns3_stats.c +++ b/drivers/net/hns3/hns3_stats.c @@ -235,12 +235,6 @@ static const struct hns3_xstats_name_offset hns3_rx_bd_error_strings[] = { HNS3_RX_BD_ERROR_STATS_FIELD_OFFSET(ol4_csum_erros)} }; -/* The statistic of errors in Tx */ -static const struct hns3_xstats_name_offset hns3_tx_error_strings[] = { - {"TX_PKT_LEN_ERRORS", - HNS3_TX_ERROR_STATS_FIELD_OFFSET(pkt_len_errors)} -}; - #define HNS3_NUM_MAC_STATS (sizeof(hns3_mac_strings) / \ sizeof(hns3_mac_strings[0])) @@ -253,9 +247,6 @@ static const struct hns3_xstats_name_offset hns3_tx_error_strings[] = { #define HNS3_NUM_RX_BD_ERROR_XSTATS (sizeof(hns3_rx_bd_error_strings) / \ sizeof(hns3_rx_bd_error_strings[0])) -#define HNS3_NUM_TX_ERROR_XSTATS (sizeof(hns3_tx_error_strings) / \ - sizeof(hns3_tx_error_strings[0])) - #define HNS3_FIX_NUM_STATS (HNS3_NUM_MAC_STATS + HNS3_NUM_ERROR_INT_XSTATS + \ HNS3_NUM_RESET_XSTATS) @@ -434,6 +425,7 @@ hns3_stats_get(struct rte_eth_dev *eth_dev, struct rte_eth_stats *rte_stats) struct hns3_hw *hw = &hns->hw; struct hns3_tqp_stats *stats = &hw->tqp_stats; struct hns3_rx_queue *rxq; + struct hns3_tx_queue *txq; uint64_t cnt; uint64_t num; uint16_t i; @@ -446,25 +438,32 @@ hns3_stats_get(struct rte_eth_dev *eth_dev, struct rte_eth_stats *rte_stats) return ret; } - rte_stats->ipackets = stats->rcb_rx_ring_pktnum_rcd; - rte_stats->opackets = stats->rcb_tx_ring_pktnum_rcd; - rte_stats->rx_nombuf = eth_dev->data->rx_mbuf_alloc_failed; - - num = RTE_MIN(RTE_ETHDEV_QUEUE_STAT_CNTRS, hw->tqps_num); - for (i = 0; i < num; i++) { - rte_stats->q_ipackets[i] = stats->rcb_rx_ring_pktnum[i]; - rte_stats->q_opackets[i] = stats->rcb_tx_ring_pktnum[i]; - } - + /* Get the error stats of received packets */ num = RTE_MIN(RTE_ETHDEV_QUEUE_STAT_CNTRS, eth_dev->data->nb_rx_queues); for (i = 0; i != num; ++i) { rxq = eth_dev->data->rx_queues[i]; if (rxq) { - cnt = rxq->errors; + cnt = rxq->l2_errors + rxq->pkt_len_errors; rte_stats->q_errors[i] = cnt; + rte_stats->q_ipackets[i] = + stats->rcb_rx_ring_pktnum[i] - cnt; rte_stats->ierrors += cnt; } } + /* Get the error stats of transmitted packets */ + num = RTE_MIN(RTE_ETHDEV_QUEUE_STAT_CNTRS, eth_dev->data->nb_tx_queues); + for (i = 0; i < num; i++) { + txq = eth_dev->data->tx_queues[i]; + if (txq) + rte_stats->q_opackets[i] = stats->rcb_tx_ring_pktnum[i]; + } + + rte_stats->oerrors = 0; + rte_stats->ipackets = stats->rcb_rx_ring_pktnum_rcd - + rte_stats->ierrors; + rte_stats->opackets = stats->rcb_tx_ring_pktnum_rcd - + rte_stats->oerrors; + rte_stats->rx_nombuf = eth_dev->data->rx_mbuf_alloc_failed; return 0; } @@ -477,7 +476,6 @@ hns3_stats_reset(struct rte_eth_dev *eth_dev) struct hns3_tqp_stats *stats = &hw->tqp_stats; struct hns3_cmd_desc desc_reset; struct hns3_rx_queue *rxq; - struct hns3_tx_queue *txq; uint16_t i; int ret; @@ -518,12 +516,7 @@ hns3_stats_reset(struct rte_eth_dev *eth_dev) rxq->l4_csum_erros = 0; rxq->ol3_csum_erros = 0; rxq->ol4_csum_erros = 0; - rxq->errors = 0; } - - txq = eth_dev->data->tx_queues[i]; - if (txq) - txq->pkt_len_errors = 0; } memset(stats, 0, sizeof(struct hns3_tqp_stats)); @@ -554,11 +547,9 @@ hns3_xstats_calc_num(struct rte_eth_dev *dev) if (hns->is_vf) return dev->data->nb_rx_queues * HNS3_NUM_RX_BD_ERROR_XSTATS + - dev->data->nb_tx_queues * HNS3_NUM_TX_ERROR_XSTATS + HNS3_NUM_RESET_XSTATS; else return dev->data->nb_rx_queues * HNS3_NUM_RX_BD_ERROR_XSTATS + - dev->data->nb_tx_queues * HNS3_NUM_TX_ERROR_XSTATS + HNS3_FIX_NUM_STATS; } @@ -585,7 +576,6 @@ hns3_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats, struct hns3_mac_stats *mac_stats = &hw->mac_stats; struct hns3_reset_stats *reset_stats = &hw->reset.stats; struct hns3_rx_queue *rxq; - struct hns3_tx_queue *txq; uint16_t i, j; char *addr; int count; @@ -644,16 +634,6 @@ hns3_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats, } } - /* Get the Tx errors stats */ - for (j = 0; j != dev->data->nb_tx_queues; ++j) { - for (i = 0; i < HNS3_NUM_TX_ERROR_XSTATS; i++) { - txq = dev->data->tx_queues[j]; - addr = (char *)txq + hns3_tx_error_strings[i].offset; - xstats[count].value = *(uint64_t *)addr; - xstats[count].id = count; - count++; - } - } return count; } @@ -727,14 +707,6 @@ hns3_dev_xstats_get_names(__rte_unused struct rte_eth_dev *dev, count++; } } - for (j = 0; j < dev->data->nb_tx_queues; j++) { - for (i = 0; i < HNS3_NUM_TX_ERROR_XSTATS; i++) { - snprintf(xstats_names[count].name, - sizeof(xstats_names[count].name), - "tx_q%u%s", j, hns3_tx_error_strings[i].name); - count++; - } - } return count; } @@ -772,7 +744,6 @@ hns3_dev_xstats_get_by_id(struct rte_eth_dev *dev, const uint64_t *ids, struct hns3_mac_stats *mac_stats = &hw->mac_stats; struct hns3_reset_stats *reset_stats = &hw->reset.stats; struct hns3_rx_queue *rxq; - struct hns3_tx_queue *txq; const uint32_t cnt_stats = hns3_xstats_calc_num(dev); uint64_t *values_copy; uint64_t len; @@ -831,15 +802,6 @@ hns3_dev_xstats_get_by_id(struct rte_eth_dev *dev, const uint64_t *ids, } } - for (j = 0; j != dev->data->nb_tx_queues; ++j) { - for (i = 0; i < HNS3_NUM_TX_ERROR_XSTATS; i++) { - txq = dev->data->tx_queues[j]; - addr = (char *)txq + hns3_tx_error_strings[i].offset; - values_copy[count] = *(uint64_t *)addr; - count++; - } - } - for (i = 0; i < size; i++) { if (ids[i] >= cnt_stats) { hns3_err(hw, "ids[%d] (%" PRIx64 ") is invalid, " @@ -928,14 +890,6 @@ hns3_dev_xstats_get_names_by_id(struct rte_eth_dev *dev, count_name++; } } - for (j = 0; j != dev->data->nb_rx_queues; ++j) { - for (i = 0; i < HNS3_NUM_TX_ERROR_XSTATS; i++) { - snprintf(xstats_names_copy[count_name].name, - sizeof(xstats_names_copy[count_name].name), - "tx_q%u%s", j, hns3_tx_error_strings[i].name); - count_name++; - } - } for (i = 0; i < size; i++) { if (ids[i] >= cnt_stats) {