Skip to content

Commit 2e99bd6

Browse files
Jie Haitmonjalo
authored andcommitted
ring: add telemetry command for ring info
This patch supports dump of ring information by its name. An example using this command is shown below: --> /ring/info,MP_mb_pool_0 { "/ring/info": { "name": "MP_mb_pool_0", "socket": 0, "flags": 0, "producer_type": "MP", "consumer_type": "MC", "size": 262144, "mask": "0x3ffff", "capacity": 262143, "used_count": 153197, "mz_name": "RG_MP_mb_pool_0", "mz_len": 2097536, "mz_hugepage_sz": 1073741824, "mz_socket_id": 0, "mz_flags": "0x0" } } Signed-off-by: Jie Hai <[email protected]> Reviewed-by: Honnappa Nagarahalli <[email protected]> Acked-by: Konstantin Ananyev <[email protected]> Acked-by: Huisong Li <[email protected]> Acked-by: Chengwen Feng <[email protected]> Acked-by: Morten Brørup <[email protected]>
1 parent 36e5c1b commit 2e99bd6

File tree

1 file changed

+95
-0
lines changed

1 file changed

+95
-0
lines changed

lib/ring/rte_ring.c

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,8 +459,103 @@ ring_handle_list(const char *cmd __rte_unused,
459459
return 0;
460460
}
461461

462+
static const char *
463+
ring_prod_sync_type_to_name(struct rte_ring *r)
464+
{
465+
switch (r->prod.sync_type) {
466+
case RTE_RING_SYNC_MT:
467+
return "MP";
468+
case RTE_RING_SYNC_ST:
469+
return "SP";
470+
case RTE_RING_SYNC_MT_RTS:
471+
return "MP_RTS";
472+
case RTE_RING_SYNC_MT_HTS:
473+
return "MP_HTS";
474+
default:
475+
return "Unknown";
476+
}
477+
}
478+
479+
static const char *
480+
ring_cons_sync_type_to_name(struct rte_ring *r)
481+
{
482+
switch (r->cons.sync_type) {
483+
case RTE_RING_SYNC_MT:
484+
return "MC";
485+
case RTE_RING_SYNC_ST:
486+
return "SC";
487+
case RTE_RING_SYNC_MT_RTS:
488+
return "MC_RTS";
489+
case RTE_RING_SYNC_MT_HTS:
490+
return "MC_HTS";
491+
default:
492+
return "Unknown";
493+
}
494+
}
495+
496+
struct ring_info_cb_arg {
497+
char *ring_name;
498+
struct rte_tel_data *d;
499+
};
500+
501+
static void
502+
ring_info_cb(struct rte_ring *r, void *arg)
503+
{
504+
struct ring_info_cb_arg *ring_arg = (struct ring_info_cb_arg *)arg;
505+
struct rte_tel_data *d = ring_arg->d;
506+
const struct rte_memzone *mz;
507+
508+
if (strncmp(r->name, ring_arg->ring_name, RTE_RING_NAMESIZE))
509+
return;
510+
511+
rte_tel_data_add_dict_string(d, "name", r->name);
512+
rte_tel_data_add_dict_int(d, "socket", r->memzone->socket_id);
513+
rte_tel_data_add_dict_int(d, "flags", r->flags);
514+
rte_tel_data_add_dict_string(d, "producer_type",
515+
ring_prod_sync_type_to_name(r));
516+
rte_tel_data_add_dict_string(d, "consumer_type",
517+
ring_cons_sync_type_to_name(r));
518+
rte_tel_data_add_dict_uint(d, "size", r->size);
519+
rte_tel_data_add_dict_uint_hex(d, "mask", r->mask, 0);
520+
rte_tel_data_add_dict_uint(d, "capacity", r->capacity);
521+
rte_tel_data_add_dict_uint(d, "used_count", rte_ring_count(r));
522+
523+
mz = r->memzone;
524+
if (mz == NULL)
525+
return;
526+
rte_tel_data_add_dict_string(d, "mz_name", mz->name);
527+
rte_tel_data_add_dict_uint(d, "mz_len", mz->len);
528+
rte_tel_data_add_dict_uint(d, "mz_hugepage_sz", mz->hugepage_sz);
529+
rte_tel_data_add_dict_int(d, "mz_socket_id", mz->socket_id);
530+
rte_tel_data_add_dict_uint_hex(d, "mz_flags", mz->flags, 0);
531+
}
532+
533+
static int
534+
ring_handle_info(const char *cmd __rte_unused, const char *params,
535+
struct rte_tel_data *d)
536+
{
537+
char name[RTE_RING_NAMESIZE] = {0};
538+
struct ring_info_cb_arg ring_arg;
539+
540+
if (params == NULL || strlen(params) == 0 ||
541+
strlen(params) >= RTE_RING_NAMESIZE)
542+
return -EINVAL;
543+
544+
rte_strlcpy(name, params, RTE_RING_NAMESIZE);
545+
546+
ring_arg.ring_name = name;
547+
ring_arg.d = d;
548+
549+
rte_tel_data_start_dict(d);
550+
ring_walk(ring_info_cb, &ring_arg);
551+
552+
return 0;
553+
}
554+
462555
RTE_INIT(ring_init_telemetry)
463556
{
464557
rte_telemetry_register_cmd("/ring/list", ring_handle_list,
465558
"Returns list of available rings. Takes no parameters");
559+
rte_telemetry_register_cmd("/ring/info", ring_handle_info,
560+
"Returns ring info. Parameters: ring_name.");
466561
}

0 commit comments

Comments
 (0)