DPDK latencystats庫使用方案

 

初始化函數

注意務必調用 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();
}
相關文章
相關標籤/搜索