初始化函數
注意務必調用 this
rte_metrics_init
/* init latency stats */ /* @TODO should we remove this in product env? */ rte_metrics_init(numa); if (rte_latencystats_init(1, NULL)) { printf("Could not allocate latency data,\n"); }
updateblog
/* 這個函數週期調用,好比1s調用一次,會更新latency數據並打印出以前的統計值 */ static void print_latency(void) { struct rte_metric_value * metrics; struct rte_metric_value * metrics; struct rte_metric_name * names; int len ; int ret; int i,j; len = 4; /* rte_metrics_get_names(NULL, 0); // 這裏僅僅用來獲取個數,爲後續申請內存使用,若已固定知道則能夠忽略。 if (len <= 0) { printf("Get metrics count: %d error\n", len); return; }*/ metrics = malloc(sizeof(struct rte_metric_value) * len); names = malloc(sizeof(struct rte_metric_name) * len); if (metrics == NULL || names == NULL) { printf("Cannot allocate memory\n"); free(metrics); free(names); return; } len = rte_metrics_get_names(names,len); if (len <= 0) { printf("Get metrics name: %d error\n", len); return; } for(j = 0; j < 2; j++) { ret = rte_metrics_get_values(j, metrics, len); if (ret < 0 || ret > len) { printf("Cannot get metrics values\n"); free(metrics); free(names); return; } PAL_LOG("Metrics for port %d:\n", j); for (i = 0; i < len; i++) printf(" %s: %"PRIu64"\n",names[metrics[i].key].name, metrics[i].value); } free(metrics); free(names); rte_latencystats_update(); }