1 #include <linux/unistd.h>
17 char bpf_log_buf
[BPF_LOG_BUF_SIZE
];
19 static void stars(char *str
, long val
, long max
, int width
)
23 for (i
= 0; i
< (width
* val
/ max
) - 1 && i
< width
- 1; i
++)
30 int main(int argc
, char **argv
)
32 unsigned int nr_cpus
= bpf_num_possible_cpus();
33 const char *map_filename
= "/sys/fs/bpf/tc/globals/lwt_len_hist_map";
34 uint64_t values
[nr_cpus
], sum
, max_value
= 0, data
[MAX_INDEX
] = {};
35 uint64_t key
= 0, next_key
, max_key
= 0;
36 char starstr
[MAX_STARS
];
39 map_fd
= bpf_obj_get(map_filename
);
41 fprintf(stderr
, "bpf_obj_get(%s): %s(%d)\n",
42 map_filename
, strerror(errno
), errno
);
46 while (bpf_map_get_next_key(map_fd
, &key
, &next_key
) == 0) {
47 if (next_key
>= MAX_INDEX
) {
48 fprintf(stderr
, "Key %lu out of bounds\n", next_key
);
52 bpf_map_lookup_elem(map_fd
, &next_key
, values
);
55 for (i
= 0; i
< nr_cpus
; i
++)
59 if (sum
&& next_key
> max_key
)
68 for (i
= 1; i
<= max_key
+ 1; i
++) {
69 stars(starstr
, data
[i
- 1], max_value
, MAX_STARS
);
70 printf("%8ld -> %-8ld : %-8ld |%-*s|\n",
71 (1l << i
) >> 1, (1l << i
) - 1, data
[i
- 1],