From patchwork Thu Aug 19 10:21:57 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rebecca Troy X-Patchwork-Id: 97116 X-Patchwork-Delegate: gakhil@marvell.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 A79E9A0C47; Thu, 19 Aug 2021 12:22:20 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 632ED4067E; Thu, 19 Aug 2021 12:22:20 +0200 (CEST) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by mails.dpdk.org (Postfix) with ESMTP id E02CE40141 for ; Thu, 19 Aug 2021 12:22:18 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10080"; a="216560179" X-IronPort-AV: E=Sophos;i="5.84,334,1620716400"; d="scan'208";a="216560179" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Aug 2021 03:22:17 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,334,1620716400"; d="scan'208";a="522380497" Received: from silpixa00400904.ir.intel.com ([10.243.23.83]) by FMSMGA003.fm.intel.com with ESMTP; 19 Aug 2021 03:22:15 -0700 From: Rebecca Troy To: dev@dpdk.org Cc: roy.fan.zhang@intel.com, ciara.power@intel.com, Rebecca Troy , Akhil Goyal , Declan Doherty Date: Thu, 19 Aug 2021 10:21:57 +0000 Message-Id: <20210819102157.1190022-1-rebecca.troy@intel.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH] cryptodev: add telemetry callbacks 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" The cryptodev library now registers commands with telemetry, and implements the corresponding callback functions. These commands allow a list of cryptodevs and stats for a cryptodev to be queried. An example usage can be seen below: Connecting to /var/run/dpdk/rte/dpdk_telemetry.v2 {"version": "DPDK 21.11.0-rc0", "pid": 1135019, "max_output_len": 16384} --> / {"/": ["/", "/cryptodev/list", "/cryptodev/stats", ...]} --> /cryptodev/list {"/cryptodev/list": {"0000:1a:01.0_qat_sym": 0, "0000:1a:01.0_qat_asym": \ 1}} --> /cryptodev/stats,0 {"/cryptodev/stats": {"enqueued_count": 0, "dequeued_count": 0, \ "enqueue_err_count": 0, "dequeue_err_count": 0}} Signed-off-by: Rebecca Troy Acked-by: Fan Zhang --- lib/cryptodev/rte_cryptodev.c | 62 +++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/lib/cryptodev/rte_cryptodev.c b/lib/cryptodev/rte_cryptodev.c index 447aa9d519..1e3ab633cc 100644 --- a/lib/cryptodev/rte_cryptodev.c +++ b/lib/cryptodev/rte_cryptodev.c @@ -36,6 +36,7 @@ #include #include #include +#include #include "rte_crypto.h" #include "rte_cryptodev.h" @@ -2427,3 +2428,64 @@ rte_cryptodev_allocate_driver(struct cryptodev_driver *crypto_drv, return nb_drivers++; } + +static int +cryptodev_handle_dev_list(const char *cmd __rte_unused, + const char *params __rte_unused, + struct rte_tel_data *d) +{ + int dev_id; + + if (rte_cryptodev_count() < 1) + return -1; + + rte_tel_data_start_dict(d); + for (dev_id = 0; dev_id < RTE_CRYPTO_MAX_DEVS; dev_id++) + if (rte_cryptodev_pmd_is_valid_dev(dev_id)) + rte_tel_data_add_dict_int(d, + rte_cryptodev_name_get(dev_id), dev_id); + + return 0; +} + +#define ADD_DICT_STAT(stats, s) rte_tel_data_add_dict_u64(d, #s, stats.s) + +static int +cryptodev_handle_dev_stats(const char *cmd __rte_unused, + const char *params, + struct rte_tel_data *d) +{ + struct rte_cryptodev_stats cryptodev_stats; + int dev_id, ret; + char *end_param; + + if (params == NULL || strlen(params) == 0 || !isdigit(*params)) + return -1; + + dev_id = strtoul(params, &end_param, 0); + if (*end_param != '\0') + CDEV_LOG_ERR("Extra parameters passed to cryptodev telemetry command, ignoring"); + if (!rte_cryptodev_pmd_is_valid_dev(dev_id)) + return -1; + + ret = rte_cryptodev_stats_get(dev_id, &cryptodev_stats); + if (ret < 0) + return -1; + + rte_tel_data_start_dict(d); + ADD_DICT_STAT(cryptodev_stats, enqueued_count); + ADD_DICT_STAT(cryptodev_stats, dequeued_count); + ADD_DICT_STAT(cryptodev_stats, enqueue_err_count); + ADD_DICT_STAT(cryptodev_stats, dequeue_err_count); + + return 0; +} + +RTE_INIT(cryptodev_init_telemetry) +{ + rte_telemetry_register_cmd("/cryptodev/list", cryptodev_handle_dev_list, + "Returns list of available cryptodev names and IDs."); + rte_telemetry_register_cmd("/cryptodev/stats", + cryptodev_handle_dev_stats, + "Returns the stats for a cryptodev. Parameters: int dev_id"); +}