[dpdk-dev] [PATCH v6 1/4] lib: add information metrics library

Thomas Monjalon thomas.monjalon at 6wind.com
Thu Jan 12 14:22:24 CET 2017


2017-01-12 00:03, Remy Horton:
> This patch adds a new information metric library that allows other
> modules to register named metrics and update their values. It is
> intended to be independent of ethdev, rather than mixing ethdev
> and non-ethdev information in xstats.

[...]
> --- a/doc/api/doxy-api.conf
> +++ b/doc/api/doxy-api.conf
> @@ -58,6 +58,7 @@ INPUT                   = doc/api/doxy-api-index.md \
>                            lib/librte_reorder \
>                            lib/librte_ring \
>                            lib/librte_sched \
> +                          lib/librte_metrics \
>                            lib/librte_table \
>                            lib/librte_timer \
>                            lib/librte_vhost

It is not in the right order.
Tip: when you add an item to a list, you should ask yourself what is the
order. There are 3 types of order for the lists in DPDK:
	- chronological (add at the end)
	- alphabetical
	- logical/semantic
The game is to find the right one :)

[...]
> @@ -171,6 +177,7 @@ The libraries prepended with a plus sign were incremented in this version.
>       librte_mbuf.so.2
>       librte_mempool.so.2
>       librte_meter.so.1
> +   + librte_metrics.so.1
>       librte_net.so.1
>       librte_pdump.so.1
>       librte_pipeline.so.3

Right order here ;)

[...]
> --- /dev/null
> +++ b/lib/librte_metrics/rte_metrics.h
> +/** Used to indicate port-independent information */
> +#define RTE_METRICS_NONPORT -1

I do not understand this constant.
Why using the word "port" to name any device?
What means independent?

> +/**
> + * Metric name
> + */
> +struct rte_metric_name {
> +	/** String describing metric */
> +	char name[RTE_METRICS_MAX_NAME_LEN];
> +};

Why a struct for a simple string?

> +/**
> + * Metric name.

Copy/paste typo?

> + */
> +struct rte_metric_value {
> +	/** Numeric identifier of metric */
> +	uint16_t key;

How the key is bound to the name?
Remember how the xstats comments were improved:
	http://dpdk.org/commit/6d52d1d

> +	/** Value for metric */
> +	uint64_t value;
> +};
> +
> +
> +/**
> + * Initializes metric module. This only has to be explicitly called if you
> + * intend to use rte_metrics_reg_metric() or rte_metrics_reg_metrics() from a
> + * secondary process. This function must be called from a primary process.
> + */
> +void rte_metrics_init(void);
> +
> +
> +/**
> + * Register a metric

You need to explain what is implied in registering.
I have the same comment for registering a set of metrics.

[...]
> +int rte_metrics_reg_metric(const char *name);
> +
> +/**
> + * Register a set of metrics
[...]
> +int rte_metrics_reg_metrics(const char **names, uint16_t cnt_names);
> +
> +/**
> + * Get metric name-key lookup table.
> + *
> + * @param names
> + *   Array of names to receive key names
> + *
> + * @param capacity
> + *   Space available in names

What happens if there is not enough space?

> + * @return
> + *   - Non-negative: Success (number of names)
> + *   - Negative: Failure
> + */
> +int rte_metrics_get_names(
> +	struct rte_metric_name *names,
> +	uint16_t capacity);



More information about the dev mailing list