diff options
author | Jerin Jacob <jerinj@marvell.com> | 2021-02-15 15:29:42 +0530 |
---|---|---|
committer | Matias Elo <matias.elo@nokia.com> | 2021-07-21 11:02:15 +0300 |
commit | 2a6bd22254c74a4bc5b28460aa0d0131ee8c8f3d (patch) | |
tree | e92b996dbc12569b1acb69e2a05c06313bbd2549 | |
parent | d9aaba1b356856713023775534ac34cb34e5dac8 (diff) |
api: proto_stats: introduce generic protocol stats framework
Add generic protocol stats framework where protocol stats object
supports basic operations like creation, lookup, access and destroy
of stats object is supported. Each object supports a set of
stats based on object params.
This generic framework is also useful when we have to associate stats
objects to fast path with minimal overhead as it is as close to HW
implementation as possible.
Signed-off-by: Nithin Dabilpuram <ndabilpuram@marvell.com>
Signed-off-by: Jerin Jacob <jerinj@marvell.com>
Reviewed-by: Janne Peltonen <janne.peltonen@nokia.com>
-rw-r--r-- | include/Makefile.am | 10 | ||||
-rw-r--r-- | include/odp/api/abi-default/proto_stats.h | 40 | ||||
-rw-r--r-- | include/odp/api/proto_stats.h | 28 | ||||
-rw-r--r-- | include/odp/api/spec/proto_stats.h | 139 | ||||
-rw-r--r-- | include/odp/arch/arm32-linux/odp/api/abi/proto_stats.h | 5 | ||||
-rw-r--r-- | include/odp/arch/arm64-linux/odp/api/abi/proto_stats.h | 5 | ||||
-rw-r--r-- | include/odp/arch/default-linux/odp/api/abi/proto_stats.h | 5 | ||||
-rw-r--r-- | include/odp/arch/mips64-linux/odp/api/abi/proto_stats.h | 5 | ||||
-rw-r--r-- | include/odp/arch/power64-linux/odp/api/abi/proto_stats.h | 5 | ||||
-rw-r--r-- | include/odp/arch/x86_32-linux/odp/api/abi/proto_stats.h | 5 | ||||
-rw-r--r-- | include/odp/arch/x86_64-linux/odp/api/abi/proto_stats.h | 5 | ||||
-rw-r--r-- | platform/linux-generic/Makefile.am | 1 | ||||
-rw-r--r-- | platform/linux-generic/include-abi/odp/api/abi/proto_stats.h | 37 |
13 files changed, 290 insertions, 0 deletions
diff --git a/include/Makefile.am b/include/Makefile.am index e5fa867c6..c0e598991 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -37,6 +37,7 @@ odpapiinclude_HEADERS = \ odp/api/packet_io_stats.h \ odp/api/protocols.h \ odp/api/pool.h \ + odp/api/proto_stats.h \ odp/api/queue.h \ odp/api/queue_types.h \ odp/api/random.h \ @@ -92,6 +93,7 @@ odpapispecinclude_HEADERS = \ odp/api/spec/protocols.h \ odp/api/spec/pool.h \ odp/api/spec/pool_types.h \ + odp/api/spec/proto_stats.h \ odp/api/spec/queue.h \ odp/api/spec/queue_types.h \ odp/api/spec/random.h \ @@ -144,6 +146,7 @@ odpapiabidefaultinclude_HEADERS = \ odp/api/abi-default/packet_types.h \ odp/api/abi-default/packet_flags.h \ odp/api/abi-default/packet_io.h \ + odp/api/abi-default/proto_stats.h \ odp/api/abi-default/pool.h \ odp/api/abi-default/queue.h \ odp/api/abi-default/queue_types.h \ @@ -193,6 +196,7 @@ odpapiabiarchinclude_HEADERS = \ odp/arch/arm32-linux/odp/api/abi/packet_flags.h \ odp/arch/arm32-linux/odp/api/abi/packet_io.h \ odp/arch/arm32-linux/odp/api/abi/pool.h \ + odp/arch/arm32-linux/odp/api/abi/proto_stats.h \ odp/arch/arm32-linux/odp/api/abi/queue.h \ odp/arch/arm32-linux/odp/api/abi/queue_types.h \ odp/arch/arm32-linux/odp/api/abi/rwlock.h \ @@ -237,6 +241,7 @@ odpapiabiarchinclude_HEADERS = \ odp/arch/arm64-linux/odp/api/abi/packet_flags.h \ odp/arch/arm64-linux/odp/api/abi/packet_io.h \ odp/arch/arm64-linux/odp/api/abi/pool.h \ + odp/arch/arm64-linux/odp/api/abi/proto_stats.h \ odp/arch/arm64-linux/odp/api/abi/queue.h \ odp/arch/arm64-linux/odp/api/abi/queue_types.h \ odp/arch/arm64-linux/odp/api/abi/rwlock.h \ @@ -281,6 +286,7 @@ odpapiabiarchinclude_HEADERS = \ odp/arch/default-linux/odp/api/abi/packet_flags.h \ odp/arch/default-linux/odp/api/abi/packet_io.h \ odp/arch/default-linux/odp/api/abi/pool.h \ + odp/arch/default-linux/odp/api/abi/proto_stats.h \ odp/arch/default-linux/odp/api/abi/queue.h \ odp/arch/default-linux/odp/api/abi/queue_types.h \ odp/arch/default-linux/odp/api/abi/rwlock.h \ @@ -325,6 +331,7 @@ odpapiabiarchinclude_HEADERS = \ odp/arch/mips64-linux/odp/api/abi/packet_flags.h \ odp/arch/mips64-linux/odp/api/abi/packet_io.h \ odp/arch/mips64-linux/odp/api/abi/pool.h \ + odp/arch/mips64-linux/odp/api/abi/proto_stats.h \ odp/arch/mips64-linux/odp/api/abi/queue.h \ odp/arch/mips64-linux/odp/api/abi/queue_types.h \ odp/arch/mips64-linux/odp/api/abi/rwlock.h \ @@ -369,6 +376,7 @@ odpapiabiarchinclude_HEADERS = \ odp/arch/power64-linux/odp/api/abi/packet_flags.h \ odp/arch/power64-linux/odp/api/abi/packet_io.h \ odp/arch/power64-linux/odp/api/abi/pool.h \ + odp/arch/power64-linux/odp/api/abi/proto_stats.h \ odp/arch/power64-linux/odp/api/abi/queue.h \ odp/arch/power64-linux/odp/api/abi/queue_types.h \ odp/arch/power64-linux/odp/api/abi/rwlock.h \ @@ -413,6 +421,7 @@ odpapiabiarchinclude_HEADERS = \ odp/arch/x86_32-linux/odp/api/abi/packet_flags.h \ odp/arch/x86_32-linux/odp/api/abi/packet_io.h \ odp/arch/x86_32-linux/odp/api/abi/pool.h \ + odp/arch/x86_32-linux/odp/api/abi/proto_stats.h \ odp/arch/x86_32-linux/odp/api/abi/queue.h \ odp/arch/x86_32-linux/odp/api/abi/queue_types.h \ odp/arch/x86_32-linux/odp/api/abi/rwlock.h \ @@ -457,6 +466,7 @@ odpapiabiarchinclude_HEADERS = \ odp/arch/x86_64-linux/odp/api/abi/packet_flags.h \ odp/arch/x86_64-linux/odp/api/abi/packet_io.h \ odp/arch/x86_64-linux/odp/api/abi/pool.h \ + odp/arch/x86_64-linux/odp/api/abi/proto_stats.h \ odp/arch/x86_64-linux/odp/api/abi/queue.h \ odp/arch/x86_64-linux/odp/api/abi/queue_types.h \ odp/arch/x86_64-linux/odp/api/abi/rwlock.h \ diff --git a/include/odp/api/abi-default/proto_stats.h b/include/odp/api/abi-default/proto_stats.h new file mode 100644 index 000000000..209521b5a --- /dev/null +++ b/include/odp/api/abi-default/proto_stats.h @@ -0,0 +1,40 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(C) 2021 Marvell. + */ + +/** + * @file + * + * ODP Proto Stats + */ + +#ifndef ODP_ABI_PROTO_STATS_H_ +#define ODP_ABI_PROTO_STATS_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include <odp/api/std_types.h> + +/** @internal Dummy type for strong typing */ +typedef struct { char dummy; /**< @internal Dummy */ } _odp_abi_proto_stats_t; + +/** @ingroup odp_proto_stats + * Operations on a proto stats object. + * @{ + */ + +typedef _odp_abi_proto_stats_t *odp_proto_stats_t; + +#define ODP_PROTO_STATS_INVALID ((odp_proto_stats_t)0) + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/odp/api/proto_stats.h b/include/odp/api/proto_stats.h new file mode 100644 index 000000000..9b434a16e --- /dev/null +++ b/include/odp/api/proto_stats.h @@ -0,0 +1,28 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(C) 2021 Marvell. + */ + +/** + * @file + * + * ODP proto stats + */ + +#ifndef ODP_API_PROTO_STATS_H_ +#define ODP_API_PROTO_STATS_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include <odp/api/std_types.h> +#include <odp/api/abi/queue.h> +#include <odp/api/abi/proto_stats.h> + +#include <odp/api/spec/proto_stats.h> + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/odp/api/spec/proto_stats.h b/include/odp/api/spec/proto_stats.h new file mode 100644 index 000000000..a4a27af16 --- /dev/null +++ b/include/odp/api/spec/proto_stats.h @@ -0,0 +1,139 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(C) 2021 Marvell. + */ + +/** + * @file + * + * ODP Proto Stats + */ + +#ifndef ODP_API_SPEC_PROTO_STATS_H_ +#define ODP_API_SPEC_PROTO_STATS_H_ +#include <odp/visibility_begin.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup odp_proto_stats + * @{ + */ + +/** + * @def ODP_PROTO_STATS_INVALID + * Invalid proto stats handle + */ + +/** ODP proto stats params */ +typedef struct odp_proto_stats_param_t { +} odp_proto_stats_param_t; + +/** + * Proto stats capabilities + */ +typedef struct odp_proto_stats_capability_t { +} odp_proto_stats_capability_t; + +/** + * Initialize proto stats parameters + * + * Initialize an odp_proto_stats_param_t to its default values. + * By default all the statistics are disabled. + * + * @param param Proto stats parameter pointer. + */ +void odp_proto_stats_param_init(odp_proto_stats_param_t *param); + +/** + * Get proto stats capability + * + * Get supported protocol statistics and metadata for a PKTIO. + * + * @param pktio Packet IO handle + * @param[out] capa Pointer where capabilities are updated + * + * @retval 0 on success + * @retval <0 on failure + */ +int odp_proto_stats_capability(odp_pktio_t pktio, odp_proto_stats_capability_t *capa); + +/** + * Create a proto stats object + * + * Create a proto stats object with given name and parameters. + * A proto stats object can be created with any set of statistics but only the + * statistics that are supported by a PKTIO are updated in a proto stats object + * for that PKTIO associated packets. Same proto stats object can be used with + * any PKTIO. + * + * @param name Object name + * @param param Proto stats parameters + * + * @return Proto stats object handle + * @retval ODP_PROTO_STATS_INVALID on failure + */ +odp_proto_stats_t odp_proto_stats_create(const char *name, const odp_proto_stats_param_t *param); + +/** + * Lookup a proto stats object by name + * + * Lookup an already created proto stats object by name. + * + * @param name Proto stats object name + * + * @return Proto stats object handle + * @retval ODP_PROTO_STATS_INVALID on failure + */ +odp_proto_stats_t odp_proto_stats_lookup(const char *name); + +/** + * Destroy a proto stats object + * + * Destroy a proto stats object already created. + * + * @param stat Proto stats handle + * + * @retval 0 on success + * @retval <0 on failure + */ +int odp_proto_stats_destroy(odp_proto_stats_t stat); + +/** ODP proto stats counters */ +typedef struct odp_proto_stats_data_t { +} odp_proto_stats_data_t; + +/** + * Get all proto stats counters + * + * Get current values of all counters of the proto stats object. + * The values of counters that are not enabled in the proto stats object are undefined. + * + * @param stat Proto stats object handle + * @param[out] data Pointer to a caller allocated structure where the statistics will + * be written to. + * + * @retval =0 on success + * @retval <0 on failure + */ +int odp_proto_stats(odp_proto_stats_t stat, odp_proto_stats_data_t *data); + +/** + * Print proto stats object info to ODP log. + * + * Print implementation-defined proto stats debug information to ODP log. + * + * @param stat Proto stats object handle + */ +void odp_proto_stats_print(odp_proto_stats_t stat); + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#include <odp/visibility_end.h> +#endif diff --git a/include/odp/arch/arm32-linux/odp/api/abi/proto_stats.h b/include/odp/arch/arm32-linux/odp/api/abi/proto_stats.h new file mode 100644 index 000000000..81108faa5 --- /dev/null +++ b/include/odp/arch/arm32-linux/odp/api/abi/proto_stats.h @@ -0,0 +1,5 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(C) 2021 Marvell. + */ + +#include <odp/api/abi-default/proto_stats.h> diff --git a/include/odp/arch/arm64-linux/odp/api/abi/proto_stats.h b/include/odp/arch/arm64-linux/odp/api/abi/proto_stats.h new file mode 100644 index 000000000..81108faa5 --- /dev/null +++ b/include/odp/arch/arm64-linux/odp/api/abi/proto_stats.h @@ -0,0 +1,5 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(C) 2021 Marvell. + */ + +#include <odp/api/abi-default/proto_stats.h> diff --git a/include/odp/arch/default-linux/odp/api/abi/proto_stats.h b/include/odp/arch/default-linux/odp/api/abi/proto_stats.h new file mode 100644 index 000000000..81108faa5 --- /dev/null +++ b/include/odp/arch/default-linux/odp/api/abi/proto_stats.h @@ -0,0 +1,5 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(C) 2021 Marvell. + */ + +#include <odp/api/abi-default/proto_stats.h> diff --git a/include/odp/arch/mips64-linux/odp/api/abi/proto_stats.h b/include/odp/arch/mips64-linux/odp/api/abi/proto_stats.h new file mode 100644 index 000000000..81108faa5 --- /dev/null +++ b/include/odp/arch/mips64-linux/odp/api/abi/proto_stats.h @@ -0,0 +1,5 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(C) 2021 Marvell. + */ + +#include <odp/api/abi-default/proto_stats.h> diff --git a/include/odp/arch/power64-linux/odp/api/abi/proto_stats.h b/include/odp/arch/power64-linux/odp/api/abi/proto_stats.h new file mode 100644 index 000000000..81108faa5 --- /dev/null +++ b/include/odp/arch/power64-linux/odp/api/abi/proto_stats.h @@ -0,0 +1,5 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(C) 2021 Marvell. + */ + +#include <odp/api/abi-default/proto_stats.h> diff --git a/include/odp/arch/x86_32-linux/odp/api/abi/proto_stats.h b/include/odp/arch/x86_32-linux/odp/api/abi/proto_stats.h new file mode 100644 index 000000000..81108faa5 --- /dev/null +++ b/include/odp/arch/x86_32-linux/odp/api/abi/proto_stats.h @@ -0,0 +1,5 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(C) 2021 Marvell. + */ + +#include <odp/api/abi-default/proto_stats.h> diff --git a/include/odp/arch/x86_64-linux/odp/api/abi/proto_stats.h b/include/odp/arch/x86_64-linux/odp/api/abi/proto_stats.h new file mode 100644 index 000000000..81108faa5 --- /dev/null +++ b/include/odp/arch/x86_64-linux/odp/api/abi/proto_stats.h @@ -0,0 +1,5 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(C) 2021 Marvell. + */ + +#include <odp/api/abi-default/proto_stats.h> diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am index b12066365..55c37856a 100644 --- a/platform/linux-generic/Makefile.am +++ b/platform/linux-generic/Makefile.am @@ -70,6 +70,7 @@ odpapiabiarchinclude_HEADERS += \ include-abi/odp/api/abi/packet_types.h \ include-abi/odp/api/abi/packet_flags.h \ include-abi/odp/api/abi/packet_io.h \ + include-abi/odp/api/abi/proto_stats.h \ include-abi/odp/api/abi/pool.h \ include-abi/odp/api/abi/queue.h \ include-abi/odp/api/abi/queue_types.h \ diff --git a/platform/linux-generic/include-abi/odp/api/abi/proto_stats.h b/platform/linux-generic/include-abi/odp/api/abi/proto_stats.h new file mode 100644 index 000000000..2ebfa57cd --- /dev/null +++ b/platform/linux-generic/include-abi/odp/api/abi/proto_stats.h @@ -0,0 +1,37 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(C) 2021 Marvell. + */ + +/** + * @file + * + * ODP proto stats + */ + +#ifndef ODP_API_ABI_PROTO_STATS_H_ +#define ODP_API_ABI_PROTO_STATS_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include <odp/api/std_types.h> +#include <odp/api/plat/strong_types.h> + +/** @ingroup odp_proto_stats + * @{ + */ + +typedef ODP_HANDLE_T(odp_proto_stats_t); + +#define ODP_PROTO_STATS_INVALID _odp_cast_scalar(odp_proto_stats_t, 0) + +/** + * @} + */ + +#ifdef __cplusplus +} +#endif + +#endif |