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;
}
|