From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matan Azrad Subject: [PATCH v3 2/2] net/failsafe: add timestamp to stats snapshot Date: Sat, 21 Oct 2017 20:54:46 +0000 Message-ID: <1508619286-7096-2-git-send-email-matan@mellanox.com> References: <1508423514-28557-1-git-send-email-matan@mellanox.com> <1508619286-7096-1-git-send-email-matan@mellanox.com> Mime-Version: 1.0 Content-Type: text/plain Cc: dev@dpdk.org To: Gaetan Rivet Return-path: Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01on0041.outbound.protection.outlook.com [104.47.1.41]) by dpdk.org (Postfix) with ESMTP id 657D71B300 for ; Sat, 21 Oct 2017 22:55:02 +0200 (CEST) In-Reply-To: <1508619286-7096-1-git-send-email-matan@mellanox.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Fail-safe attempts to read an ultimate statistics on removal time; if that fails, it uses the latest recorded snapshot. This patch adds timestamp for each stats snapshot to allow a time report since the last snapshot in case of the above failure. By this way, the user can estimate the stats read accuracy. Signed-off-by: Matan Azrad --- drivers/net/failsafe/failsafe_ether.c | 17 ++++++++++++----- drivers/net/failsafe/failsafe_ops.c | 10 ++++++++-- drivers/net/failsafe/failsafe_private.h | 7 ++++++- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/drivers/net/failsafe/failsafe_ether.c b/drivers/net/failsafe/failsafe_ether.c index 0282891..6cb435f 100644 --- a/drivers/net/failsafe/failsafe_ether.c +++ b/drivers/net/failsafe/failsafe_ether.c @@ -35,6 +35,7 @@ #include #include +#include #include "failsafe_private.h" @@ -317,12 +318,18 @@ /* Attempt to read current stats. */ err = rte_eth_stats_get(PORT_ID(sdev), &stats); - if (err) - WARN("Could not access latest statistics from sub-device %d," - " using latest snapshot.\n", SUB_ID(sdev)); + if (err) { + uint64_t timestamp = sdev->stats_snapshot.timestamp; + + WARN("Could not access latest statistics from sub-device %d.\n", + SUB_ID(sdev)); + if (timestamp != 0) + WARN("Using latest snapshot taken before %lu seconds.\n", + (rte_rdtsc() - timestamp) / rte_get_tsc_hz()); + } failsafe_stats_increment(&PRIV(sdev->fs_dev)->stats_accumulator, - err ? &sdev->stats_snapshot : &stats); - memset(&sdev->stats_snapshot, 0, sizeof(struct rte_eth_stats)); + err ? &sdev->stats_snapshot.stats : &stats); + memset(&sdev->stats_snapshot, 0, sizeof(sdev->stats_snapshot)); } static inline int diff --git a/drivers/net/failsafe/failsafe_ops.c b/drivers/net/failsafe/failsafe_ops.c index d360965..f460551 100644 --- a/drivers/net/failsafe/failsafe_ops.c +++ b/drivers/net/failsafe/failsafe_ops.c @@ -38,6 +38,7 @@ #include #include #include +#include #include "failsafe_private.h" @@ -592,13 +593,18 @@ rte_memcpy(stats, &PRIV(dev)->stats_accumulator, sizeof(*stats)); FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) { - ret = rte_eth_stats_get(PORT_ID(sdev), &sdev->stats_snapshot); + struct rte_eth_stats *snapshot = &sdev->stats_snapshot.stats; + uint64_t *timestamp = &sdev->stats_snapshot.timestamp; + + ret = rte_eth_stats_get(PORT_ID(sdev), snapshot); if (ret) { ERROR("Operation rte_eth_stats_get failed for sub_device %d with error %d", i, ret); + *timestamp = 0; return ret; } - failsafe_stats_increment(stats, &sdev->stats_snapshot); + *timestamp = rte_rdtsc(); + failsafe_stats_increment(stats, snapshot); } return 0; } diff --git a/drivers/net/failsafe/failsafe_private.h b/drivers/net/failsafe/failsafe_private.h index d343ebf..d81cc3c 100644 --- a/drivers/net/failsafe/failsafe_private.h +++ b/drivers/net/failsafe/failsafe_private.h @@ -93,6 +93,11 @@ enum dev_state { DEV_STARTED, }; +struct fs_stats { + struct rte_eth_stats stats; + uint64_t timestamp; +}; + struct sub_device { /* Exhaustive DPDK device description */ struct rte_devargs devargs; @@ -103,7 +108,7 @@ struct sub_device { /* Device state machine */ enum dev_state state; /* Last stats snapshot passed to user */ - struct rte_eth_stats stats_snapshot; + struct fs_stats stats_snapshot; /* Some device are defined as a command line */ char *cmdline; /* fail-safe device backreference */ -- 1.8.3.1