summaryrefslogtreecommitdiffstats
path: root/VNFs/DPPD-PROX/display_mempools.c
blob: 2982104bde5f163c66dd741e71a75aa2d027d108 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/*
// Copyright (c) 2010-2017 Intel Corporation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
*/

#include "display_mempools.h"
#include "stats_mempool.h"
#include "display.h"
#include "defaults.h"

static struct display_page display_page_mempools;
static struct display_column *nb_col;
static struct display_column *queue_col;
static struct display_column *occup_col;
static struct display_column *used_col;
static struct display_column *free_col;
static struct display_column *total_col;
static struct display_column *mem_used_col;
static struct display_column *mem_free_col;
static struct display_column *mem_tot_col;

static void display_mempools_draw_frame(struct screen_state *screen_state)
{
	const uint32_t n_mempools = stats_get_n_mempools();

	display_page_init(&display_page_mempools);

	struct display_table *port = display_page_add_table(&display_page_mempools);
	struct display_table *stats = display_page_add_table(&display_page_mempools);

	display_table_init(port, "Port");
	display_table_init(stats, "Sampled statistics");

	nb_col = display_table_add_col(port);
	queue_col = display_table_add_col(port);
	display_column_init(nb_col, "Nb", 4);
	display_column_init(queue_col, "Queue", 5);

	occup_col = display_table_add_col(stats);
	display_column_init(occup_col, "Occup (%)", 9);
	used_col = display_table_add_col(stats);
	display_column_init(used_col, "Used (#)", 12);
	free_col = display_table_add_col(stats);
	display_column_init(free_col, "Free (#)", 12);
	total_col = display_table_add_col(stats);
	display_column_init(total_col, "Total (#)", 13);

	mem_used_col = display_table_add_col(stats);
	display_column_init(mem_used_col, "Mem Used (KB)", 13);
	mem_free_col = display_table_add_col(stats);
	display_column_init(mem_free_col, "Mem Free (KB)", 13);
	mem_tot_col = display_table_add_col(stats);
	display_column_init(mem_tot_col, "Mem Tot (KB)", 12);

	display_page_draw_frame(&display_page_mempools, n_mempools);

	for (uint16_t i = 0; i < n_mempools; ++i) {
		struct mempool_stats *ms = stats_get_mempool_stats(i);

		display_column_print(nb_col, i, "%4u", ms->port);
		display_column_print(queue_col, i, "%5u", ms->queue);
		display_column_print(total_col, i, "%13zu", ms->size);
		display_column_print(mem_tot_col, i, "%12zu", ms->size * MBUF_SIZE/1024);
	}
}

static void display_mempools_draw_stats(struct screen_state *state)
{
	const uint32_t n_mempools = stats_get_n_mempools();

	for (uint16_t i = 0; i < n_mempools; ++i) {
		struct mempool_stats *ms = stats_get_mempool_stats(i);
		const size_t used = ms->size - ms->free;
		const uint32_t used_frac = used*10000/ms->size;

		display_column_print(occup_col, i, "%6u.%02u", used_frac/100, used_frac % 100);
		display_column_print(used_col, i, "%12zu", used);
		display_column_print(free_col, i, "%12zu", ms->free);

		display_column_print(mem_free_col, i, "%13zu", used * MBUF_SIZE/1024);
		display_column_print(mem_used_col, i, "%13zu", ms->free * MBUF_SIZE/1024);
	}
}

static int display_mempools_get_height(void)
{
	return stats_get_n_mempools();
}

static struct display_screen display_screen_mempools = {
	.draw_frame = display_mempools_draw_frame,
	.draw_stats = display_mempools_draw_stats,
	.get_height = display_mempools_get_height,
	.title = "mempools",
};

struct display_screen *display_mempools(void)
{
	return &display_screen_mempools;
}