From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-bk0-f45.google.com (mail-bk0-f45.google.com [209.85.214.45]) by dpdk.org (Postfix) with ESMTP id 3EE6B333 for ; Fri, 13 Sep 2013 16:23:01 +0200 (CEST) Received: by mail-bk0-f45.google.com with SMTP id mx11so500811bkb.18 for ; Fri, 13 Sep 2013 07:23:38 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id; bh=/om2RsfkcsJim4n/iyaJuxDzMuRIh3gVNeLHXd4cuPQ=; b=SyRvuTTk4tne12Sgn+xaa4DN8TQyIyJRWBUKXbGvgtwFIN3cL9kY7bd8jW092J9Vb0 nChY2YWhD04gQXr5XFe0jJ0jfUx1W89A3bFkO8+V94qwUgLJMmA5qwgG3Qk9eQGhupSF zHDuszp40dfi4WyeijDtpd82pm1A3Ym+YykHvYqf39+OirUy7gPXJ2om78DURzJJKE/K 6ftEcURbJYJOYe3Y+pip+c8ZZjSy1IBiToL3dWHGsZYfvrKwQCyRuwu1oYtQQpJoS3E7 Vdo00Gcc3Dtrcr6YECRhzW1vDJr3oPjCYC4IEvVQ8OJx0XUsuTI92QMDiAe8DSiwFk7u vbzA== X-Gm-Message-State: ALoCoQnRLAl/w7FKLju238vneakkRUUqGmc/JajFgoJ5/+6V4r100BOUyLUt8jDNWWYVzshe0gpP X-Received: by 10.204.60.66 with SMTP id o2mr11966629bkh.22.1379082218157; Fri, 13 Sep 2013 07:23:38 -0700 (PDT) Received: from 6wind.com (guy78-3-82-239-227-177.fbx.proxad.net. [82.239.227.177]) by mx.google.com with ESMTPSA id kk2sm3013113bkb.10.1969.12.31.16.00.00 (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Fri, 13 Sep 2013 07:23:37 -0700 (PDT) From: Ivan Boule To: dev@dpdk.org Date: Fri, 13 Sep 2013 16:23:27 +0200 Message-Id: <1379082207-5628-1-git-send-email-ivan.boule@6wind.com> X-Mailer: git-send-email 1.7.10.4 Subject: [dpdk-dev] [PATCH] ethdev: add pause frame counters for em/igb/ixgbe X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 13 Sep 2013 14:23:01 -0000 Add into the `rte_eth_stats` data structure 4 (64-bit) counters of XOFF/XON pause frames received and sent on a given port. Update em, igb, and ixgbe drivers to return the value of the 4 XOFF/XON counters through the `rte_eth_stats_get` function exported by the DPDK API. Display the value of the 4 XOFF/XON counters in the `testpmd` application. Signed-off-by: Ivan Boule --- app/test-pmd/config.c | 8 ++++++++ app/test-pmd/testpmd.c | 10 ++++++++++ lib/librte_ether/rte_ethdev.h | 4 ++++ lib/librte_pmd_e1000/em_ethdev.c | 6 ++++++ lib/librte_pmd_e1000/igb_ethdev.c | 6 ++++++ lib/librte_pmd_ixgbe/ixgbe_ethdev.c | 6 ++++++ 6 files changed, 40 insertions(+) diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index 0b66671..0be0db8 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -167,6 +167,14 @@ nic_stats_display(portid_t port_id) } } + /* Display statistics of XON/XOFF pause frames, if any. */ + if ((stats.tx_pause_xon | stats.rx_pause_xon | + stats.tx_pause_xoff | stats.rx_pause_xoff) > 0) { + printf(" RX-XOFF: %-10"PRIu64" RX-XON: %-10"PRIu64"\n", + stats.rx_pause_xoff, stats.rx_pause_xon); + printf(" TX-XOFF: %-10"PRIu64" TX-XON: %-10"PRIu64"\n", + stats.tx_pause_xoff, stats.tx_pause_xon); + } printf(" %s############################%s\n", nic_stats_border, nic_stats_border); } diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index 58833ac..69eb26c 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -674,6 +674,16 @@ fwd_port_stats_display(portid_t port_id, struct rte_eth_stats *stats) if (stats->rx_nombuf > 0) printf(" RX-nombufs:%14"PRIu64"\n", stats->rx_nombuf); } + + /* Display statistics of XON/XOFF pause frames, if any. */ + if ((stats->tx_pause_xon | stats->rx_pause_xon | + stats->tx_pause_xoff | stats->rx_pause_xoff) > 0) { + printf(" RX-XOFF: %-14"PRIu64" RX-XON: %-14"PRIu64"\n", + stats->rx_pause_xoff, stats->rx_pause_xon); + printf(" TX-XOFF: %-14"PRIu64" TX-XON: %-14"PRIu64"\n", + stats->tx_pause_xoff, stats->tx_pause_xon); + } + #ifdef RTE_TEST_PMD_RECORD_BURST_STATS if (port->rx_stream) pkt_burst_stats_display("RX", diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h index 86eb295..12ecad1 100644 --- a/lib/librte_ether/rte_ethdev.h +++ b/lib/librte_ether/rte_ethdev.h @@ -193,6 +193,10 @@ struct rte_eth_stats { uint64_t rx_nombuf; /**< Total number of RX mbuf allocation failures. */ uint64_t fdirmatch; /**< Total number of RX packets matching a filter. */ uint64_t fdirmiss; /**< Total number of RX packets not matching any filter. */ + uint64_t tx_pause_xon; /**< Total nb. of XON pause frame sent. */ + uint64_t rx_pause_xon; /**< Total nb. of XON pause frame received. */ + uint64_t tx_pause_xoff; /**< Total nb. of XOFF pause frame sent. */ + uint64_t rx_pause_xoff; /**< Total nb. of XOFF pause frame received. */ uint64_t q_ipackets[RTE_ETHDEV_QUEUE_STAT_CNTRS]; /**< Total number of queue RX packets. */ uint64_t q_opackets[RTE_ETHDEV_QUEUE_STAT_CNTRS]; diff --git a/lib/librte_pmd_e1000/em_ethdev.c b/lib/librte_pmd_e1000/em_ethdev.c index d0d2d79..5e00b98 100644 --- a/lib/librte_pmd_e1000/em_ethdev.c +++ b/lib/librte_pmd_e1000/em_ethdev.c @@ -801,6 +801,12 @@ eth_em_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *rte_stats) rte_stats->opackets = stats->gptc; rte_stats->ibytes = stats->gorc; rte_stats->obytes = stats->gotc; + + /* XON/XOFF pause frames stats registers */ + rte_stats->tx_pause_xon = stats->xontxc; + rte_stats->rx_pause_xon = stats->xonrxc; + rte_stats->tx_pause_xoff = stats->xofftxc; + rte_stats->rx_pause_xoff = stats->xoffrxc; } static void diff --git a/lib/librte_pmd_e1000/igb_ethdev.c b/lib/librte_pmd_e1000/igb_ethdev.c index 9936583..f62426e 100644 --- a/lib/librte_pmd_e1000/igb_ethdev.c +++ b/lib/librte_pmd_e1000/igb_ethdev.c @@ -911,6 +911,12 @@ eth_igb_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *rte_stats) /* Tx Errors */ rte_stats->oerrors = stats->ecol + stats->latecol; + /* XON/XOFF pause frames */ + rte_stats->tx_pause_xon = stats->xontxc; + rte_stats->rx_pause_xon = stats->xonrxc; + rte_stats->tx_pause_xoff = stats->xofftxc; + rte_stats->rx_pause_xoff = stats->xoffrxc; + rte_stats->ipackets = stats->gprc; rte_stats->opackets = stats->gptc; rte_stats->ibytes = stats->gorc; diff --git a/lib/librte_pmd_ixgbe/ixgbe_ethdev.c b/lib/librte_pmd_ixgbe/ixgbe_ethdev.c index 1f2d9da..7dab5e2 100644 --- a/lib/librte_pmd_ixgbe/ixgbe_ethdev.c +++ b/lib/librte_pmd_ixgbe/ixgbe_ethdev.c @@ -1425,6 +1425,12 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) stats->oerrors = 0; + /* XON/XOFF pause frames */ + stats->tx_pause_xon = hw_stats->lxontxc; + stats->rx_pause_xon = hw_stats->lxonrxc; + stats->tx_pause_xoff = hw_stats->lxofftxc; + stats->rx_pause_xoff = hw_stats->lxoffrxc; + /* Flow Director Stats registers */ hw_stats->fdirmatch += IXGBE_READ_REG(hw, IXGBE_FDIRMATCH); hw_stats->fdirmiss += IXGBE_READ_REG(hw, IXGBE_FDIRMISS); -- 1.7.10.4