Skip to content

Commit 19d9a70

Browse files
authored
Update ebpf socket (netdata#11441)
1 parent 1e415e4 commit 19d9a70

File tree

9 files changed

+148
-122
lines changed

9 files changed

+148
-122
lines changed

collectors/ebpf.plugin/ebpf.h

+1
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ typedef struct ebpf_tracepoint {
105105

106106
// Chart definitions
107107
#define NETDATA_EBPF_FAMILY "ebpf"
108+
#define NETDATA_EBPF_IP_FAMILY "ip"
108109
#define NETDATA_FILESYSTEM_FAMILY "filesystem"
109110
#define NETDATA_EBPF_MOUNT_GLOBAL_FAMILY "mount_points"
110111
#define NETDATA_EBPF_CHART_TYPE_LINE "line"

collectors/ebpf.plugin/ebpf_apps.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
#define NETDATA_APPS_FILE_GROUP "file_access"
1515
#define NETDATA_APPS_VFS_GROUP "vfs (eBPF)"
1616
#define NETDATA_APPS_PROCESS_GROUP "process (eBPF)"
17-
#define NETDATA_APPS_NET_GROUP "net (eBPF)"
17+
#define NETDATA_APPS_NET_GROUP "net"
1818
#define NETDATA_APPS_CACHESTAT_GROUP "page cache (eBPF)"
1919
#define NETDATA_APPS_DCSTAT_GROUP "directory cache (eBPF)"
2020

collectors/ebpf.plugin/ebpf_socket.c

+65-61
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,43 @@
1111
*
1212
*****************************************************************/
1313

14-
static char *socket_dimension_names[NETDATA_MAX_SOCKET_VECTOR] = { "sent", "received", "close", "sent",
15-
"received", "retransmitted" };
16-
static char *socket_id_names[NETDATA_MAX_SOCKET_VECTOR] = { "tcp_sendmsg", "tcp_cleanup_rbuf", "tcp_close",
17-
"udp_sendmsg", "udp_recvmsg", "tcp_retransmit_skb" };
14+
static char *socket_dimension_names[NETDATA_MAX_SOCKET_VECTOR] = { "received", "sent", "close",
15+
"received", "sent", "retransmitted" };
16+
static char *socket_id_names[NETDATA_MAX_SOCKET_VECTOR] = { "tcp_cleanup_rbuf", "tcp_sendmsg", "tcp_close",
17+
"udp_recvmsg", "udp_sendmsg", "tcp_retransmit_skb" };
1818

1919
static ebpf_local_maps_t socket_maps[] = {{.name = "tbl_bandwidth",
2020
.internal_input = NETDATA_COMPILED_CONNECTIONS_ALLOWED,
21-
.user_input = NETDATA_MAXIMUM_CONNECTIONS_ALLOWED},
21+
.user_input = NETDATA_MAXIMUM_CONNECTIONS_ALLOWED,
22+
.type = NETDATA_EBPF_MAP_STATIC,
23+
.map_fd = ND_EBPF_MAP_FD_NOT_INITIALIZED},
24+
{.name = "tbl_global_sock",
25+
.internal_input = NETDATA_SOCKET_COUNTER,
26+
.user_input = 0, .type = NETDATA_EBPF_MAP_STATIC,
27+
.map_fd = ND_EBPF_MAP_FD_NOT_INITIALIZED},
28+
{.name = "tbl_lports",
29+
.internal_input = NETDATA_SOCKET_COUNTER,
30+
.user_input = 0, .type = NETDATA_EBPF_MAP_STATIC,
31+
.map_fd = ND_EBPF_MAP_FD_NOT_INITIALIZED},
2232
{.name = "tbl_conn_ipv4",
2333
.internal_input = NETDATA_COMPILED_CONNECTIONS_ALLOWED,
24-
.user_input = NETDATA_MAXIMUM_CONNECTIONS_ALLOWED},
34+
.user_input = NETDATA_MAXIMUM_CONNECTIONS_ALLOWED,
35+
.type = NETDATA_EBPF_MAP_STATIC,
36+
.map_fd = ND_EBPF_MAP_FD_NOT_INITIALIZED},
2537
{.name = "tbl_conn_ipv6",
2638
.internal_input = NETDATA_COMPILED_CONNECTIONS_ALLOWED,
27-
.user_input = NETDATA_MAXIMUM_CONNECTIONS_ALLOWED},
28-
{.name = "tbl_nv_udp_conn_stats",
39+
.user_input = NETDATA_MAXIMUM_CONNECTIONS_ALLOWED,
40+
.type = NETDATA_EBPF_MAP_STATIC,
41+
.map_fd = ND_EBPF_MAP_FD_NOT_INITIALIZED},
42+
{.name = "tbl_nv_udp",
2943
.internal_input = NETDATA_COMPILED_UDP_CONNECTIONS_ALLOWED,
30-
.user_input = NETDATA_MAXIMUM_UDP_CONNECTIONS_ALLOWED},
44+
.user_input = NETDATA_MAXIMUM_UDP_CONNECTIONS_ALLOWED,
45+
.type = NETDATA_EBPF_MAP_STATIC,
46+
.map_fd = ND_EBPF_MAP_FD_NOT_INITIALIZED},
47+
{.name = "socket_ctrl", .internal_input = NETDATA_CONTROLLER_END,
48+
.user_input = 0,
49+
.type = NETDATA_EBPF_MAP_CONTROLLER,
50+
.map_fd = ND_EBPF_MAP_FD_NOT_INITIALIZED},
3151
{.name = NULL, .internal_input = 0, .user_input = 0}};
3252

3353
static netdata_idx_t *socket_hash_values = NULL;
@@ -50,7 +70,6 @@ netdata_socket_t *socket_values;
5070

5171
ebpf_network_viewer_port_list_t *listen_ports = NULL;
5272

53-
static int *map_fd = NULL;
5473
static struct bpf_object *objects = NULL;
5574
static struct bpf_link **probe_links = NULL;
5675

@@ -289,30 +308,24 @@ static void ebpf_socket_send_data(ebpf_module_t *em)
289308

290309
// We read bytes from function arguments, but bandiwdth is given in bits,
291310
// so we need to multiply by 8 to convert for the final value.
292-
write_count_chart(
293-
NETDATA_TCP_FUNCTION_COUNT, NETDATA_EBPF_FAMILY, socket_publish_aggregated, 3);
294-
write_io_chart(
295-
NETDATA_TCP_FUNCTION_BITS, NETDATA_EBPF_FAMILY, socket_id_names[0], common_tcp.write*8/1000,
296-
socket_id_names[1], common_tcp.read*8/1000);
311+
write_count_chart(NETDATA_TCP_FUNCTION_COUNT, NETDATA_EBPF_IP_FAMILY, socket_publish_aggregated, 3);
312+
write_io_chart(NETDATA_TCP_FUNCTION_BITS, NETDATA_EBPF_IP_FAMILY, socket_id_names[0],
313+
common_tcp.read * 8/BITS_IN_A_KILOBIT, socket_id_names[1],
314+
common_tcp.write * 8/BITS_IN_A_KILOBIT);
297315
if (em->mode < MODE_ENTRY) {
298-
write_err_chart(
299-
NETDATA_TCP_FUNCTION_ERROR, NETDATA_EBPF_FAMILY, socket_publish_aggregated, 2);
300-
}
301-
write_count_chart(
302-
NETDATA_TCP_RETRANSMIT, NETDATA_EBPF_FAMILY, &socket_publish_aggregated[NETDATA_IDX_TCP_RETRANSMIT],
303-
1);
304-
305-
write_count_chart(
306-
NETDATA_UDP_FUNCTION_COUNT, NETDATA_EBPF_FAMILY, &socket_publish_aggregated[NETDATA_IDX_UDP_RECVBUF],
307-
2);
308-
write_io_chart(
309-
NETDATA_UDP_FUNCTION_BITS, NETDATA_EBPF_FAMILY,
310-
socket_id_names[3],(long long)common_udp.write*8/100,
311-
socket_id_names[4], (long long)common_udp.read*8/1000);
316+
write_err_chart(NETDATA_TCP_FUNCTION_ERROR, NETDATA_EBPF_IP_FAMILY, socket_publish_aggregated, 2);
317+
}
318+
write_count_chart(NETDATA_TCP_RETRANSMIT, NETDATA_EBPF_IP_FAMILY,
319+
&socket_publish_aggregated[NETDATA_IDX_TCP_RETRANSMIT],1);
320+
321+
write_count_chart(NETDATA_UDP_FUNCTION_COUNT, NETDATA_EBPF_IP_FAMILY,
322+
&socket_publish_aggregated[NETDATA_IDX_UDP_RECVBUF],2);
323+
write_io_chart(NETDATA_UDP_FUNCTION_BITS, NETDATA_EBPF_IP_FAMILY,
324+
socket_id_names[3], (long long)common_udp.read * 8/BITS_IN_A_KILOBIT,
325+
socket_id_names[4], (long long)common_udp.write * 8/BITS_IN_A_KILOBIT);
312326
if (em->mode < MODE_ENTRY) {
313-
write_err_chart(
314-
NETDATA_UDP_FUNCTION_ERROR, NETDATA_EBPF_FAMILY, &socket_publish_aggregated[NETDATA_UDP_START],
315-
2);
327+
write_err_chart(NETDATA_UDP_FUNCTION_ERROR, NETDATA_EBPF_IP_FAMILY,
328+
&socket_publish_aggregated[NETDATA_UDP_START], 2);
316329
}
317330
}
318331

@@ -445,34 +458,34 @@ void ebpf_socket_send_apps_data(ebpf_module_t *em, struct target *root)
445458
*/
446459
static void ebpf_create_global_charts(ebpf_module_t *em)
447460
{
448-
ebpf_create_chart(NETDATA_EBPF_FAMILY,
461+
ebpf_create_chart(NETDATA_EBPF_IP_FAMILY,
449462
NETDATA_TCP_FUNCTION_COUNT,
450463
"Calls to internal functions",
451464
EBPF_COMMON_DIMENSION_CALL,
452-
NETDATA_SOCKET_GROUP,
465+
NETDATA_SOCKET_KERNEL_FUNCTIONS,
453466
NULL,
454467
NETDATA_EBPF_CHART_TYPE_LINE,
455468
21070,
456469
ebpf_create_global_dimension,
457470
socket_publish_aggregated,
458471
3, NETDATA_EBPF_MODULE_NAME_SOCKET);
459472

460-
ebpf_create_chart(NETDATA_EBPF_FAMILY, NETDATA_TCP_FUNCTION_BITS,
473+
ebpf_create_chart(NETDATA_EBPF_IP_FAMILY, NETDATA_TCP_FUNCTION_BITS,
461474
"TCP bandwidth", EBPF_COMMON_DIMENSION_BITS,
462-
NETDATA_SOCKET_GROUP,
475+
NETDATA_SOCKET_KERNEL_FUNCTIONS,
463476
NULL,
464477
NETDATA_EBPF_CHART_TYPE_LINE,
465478
21071,
466479
ebpf_create_global_dimension,
467480
socket_publish_aggregated,
468-
3, NETDATA_EBPF_MODULE_NAME_SOCKET);
481+
2, NETDATA_EBPF_MODULE_NAME_SOCKET);
469482

470483
if (em->mode < MODE_ENTRY) {
471-
ebpf_create_chart(NETDATA_EBPF_FAMILY,
484+
ebpf_create_chart(NETDATA_EBPF_IP_FAMILY,
472485
NETDATA_TCP_FUNCTION_ERROR,
473486
"TCP errors",
474487
EBPF_COMMON_DIMENSION_CALL,
475-
NETDATA_SOCKET_GROUP,
488+
NETDATA_SOCKET_KERNEL_FUNCTIONS,
476489
NULL,
477490
NETDATA_EBPF_CHART_TYPE_LINE,
478491
21072,
@@ -481,33 +494,33 @@ static void ebpf_create_global_charts(ebpf_module_t *em)
481494
2, NETDATA_EBPF_MODULE_NAME_SOCKET);
482495
}
483496

484-
ebpf_create_chart(NETDATA_EBPF_FAMILY,
497+
ebpf_create_chart(NETDATA_EBPF_IP_FAMILY,
485498
NETDATA_TCP_RETRANSMIT,
486499
"Packages retransmitted",
487500
EBPF_COMMON_DIMENSION_CALL,
488-
NETDATA_SOCKET_GROUP,
501+
NETDATA_SOCKET_KERNEL_FUNCTIONS,
489502
NULL,
490503
NETDATA_EBPF_CHART_TYPE_LINE,
491504
21073,
492505
ebpf_create_global_dimension,
493506
&socket_publish_aggregated[NETDATA_IDX_TCP_RETRANSMIT],
494507
1, NETDATA_EBPF_MODULE_NAME_SOCKET);
495508

496-
ebpf_create_chart(NETDATA_EBPF_FAMILY,
509+
ebpf_create_chart(NETDATA_EBPF_IP_FAMILY,
497510
NETDATA_UDP_FUNCTION_COUNT,
498511
"UDP calls",
499512
EBPF_COMMON_DIMENSION_CALL,
500-
NETDATA_SOCKET_GROUP,
513+
NETDATA_SOCKET_KERNEL_FUNCTIONS,
501514
NULL,
502515
NETDATA_EBPF_CHART_TYPE_LINE,
503516
21074,
504517
ebpf_create_global_dimension,
505518
&socket_publish_aggregated[NETDATA_IDX_UDP_RECVBUF],
506519
2, NETDATA_EBPF_MODULE_NAME_SOCKET);
507520

508-
ebpf_create_chart(NETDATA_EBPF_FAMILY, NETDATA_UDP_FUNCTION_BITS,
521+
ebpf_create_chart(NETDATA_EBPF_IP_FAMILY, NETDATA_UDP_FUNCTION_BITS,
509522
"UDP bandwidth", EBPF_COMMON_DIMENSION_BITS,
510-
NETDATA_SOCKET_GROUP,
523+
NETDATA_SOCKET_KERNEL_FUNCTIONS,
511524
NULL,
512525
NETDATA_EBPF_CHART_TYPE_LINE,
513526
21075,
@@ -516,11 +529,11 @@ static void ebpf_create_global_charts(ebpf_module_t *em)
516529
2, NETDATA_EBPF_MODULE_NAME_SOCKET);
517530

518531
if (em->mode < MODE_ENTRY) {
519-
ebpf_create_chart(NETDATA_EBPF_FAMILY,
532+
ebpf_create_chart(NETDATA_EBPF_IP_FAMILY,
520533
NETDATA_UDP_FUNCTION_ERROR,
521534
"UDP errors",
522535
EBPF_COMMON_DIMENSION_CALL,
523-
NETDATA_SOCKET_GROUP,
536+
NETDATA_SOCKET_KERNEL_FUNCTIONS,
524537
NULL,
525538
NETDATA_EBPF_CHART_TYPE_LINE,
526539
21076,
@@ -1439,7 +1452,7 @@ static void read_listen_table()
14391452
uint16_t key = 0;
14401453
uint16_t next_key = 0;
14411454

1442-
int fd = map_fd[NETDATA_SOCKET_LISTEN_TABLE];
1455+
int fd = socket_maps[NETDATA_SOCKET_LPORTS].map_fd;
14431456
uint8_t value;
14441457
while (bpf_map_get_next_key(fd, &key, &next_key) == 0) {
14451458
int test = bpf_map_lookup_elem(fd, &key, &value);
@@ -1478,8 +1491,8 @@ void *ebpf_socket_read_hash(void *ptr)
14781491
heartbeat_t hb;
14791492
heartbeat_init(&hb);
14801493
usec_t step = NETDATA_SOCKET_READ_SLEEP_MS * em->update_time;
1481-
int fd_ipv4 = map_fd[NETDATA_SOCKET_IPV4_HASH_TABLE];
1482-
int fd_ipv6 = map_fd[NETDATA_SOCKET_IPV6_HASH_TABLE];
1494+
int fd_ipv4 = socket_maps[NETDATA_SOCKET_TABLE_IPV4].map_fd;
1495+
int fd_ipv6 = socket_maps[NETDATA_SOCKET_TABLE_IPV6].map_fd;
14831496
int network_connection = em->optional;
14841497
while (!close_ebpf_plugin) {
14851498
usec_t dt = heartbeat_next(&hb, step);
@@ -1506,7 +1519,7 @@ static void read_hash_global_tables()
15061519
netdata_idx_t res[NETDATA_SOCKET_COUNTER];
15071520

15081521
netdata_idx_t *val = socket_hash_values;
1509-
int fd = map_fd[NETDATA_SOCKET_GLOBAL_HASH_TABLE];
1522+
int fd = socket_maps[NETDATA_SOCKET_GLOBAL].map_fd;
15101523
for (idx = 0; idx < NETDATA_SOCKET_COUNTER; idx++) {
15111524
if (!bpf_map_lookup_elem(fd, &idx, val)) {
15121525
uint64_t total = 0;
@@ -1588,7 +1601,7 @@ void ebpf_socket_bandwidth_accumulator(ebpf_bandwidth_t *out)
15881601
*/
15891602
static void ebpf_socket_update_apps_data()
15901603
{
1591-
int fd = map_fd[NETDATA_SOCKET_APPS_HASH_TABLE];
1604+
int fd = socket_maps[NETDATA_SOCKET_TABLE_BANDWIDTH].map_fd;
15921605
ebpf_bandwidth_t *eb = bandwidth_vector;
15931606
uint32_t key;
15941607
struct pid_stat *pids = root_of_pids;
@@ -1930,14 +1943,6 @@ static void ebpf_socket_allocate_global_vectors(size_t length)
19301943
outbound_vectors.plot = callocz(network_viewer_opt.max_dim, sizeof(netdata_socket_plot_t));
19311944
}
19321945

1933-
/**
1934-
* Set local function pointers, this function will never be compiled with static libraries
1935-
*/
1936-
static void set_local_pointers()
1937-
{
1938-
map_fd = socket_data.map_fd;
1939-
}
1940-
19411946
/**
19421947
* Initialize Inbound and Outbound
19431948
*
@@ -2887,7 +2892,6 @@ void *ebpf_socket_thread(void *ptr)
28872892
goto endsocket;
28882893
}
28892894

2890-
set_local_pointers();
28912895
if (running_on_kernel < NETDATA_EBPF_KERNEL_5_0)
28922896
em->mode = MODE_ENTRY;
28932897

collectors/ebpf.plugin/ebpf_socket.h

+5-8
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,6 @@
99

1010
// Vector indexes
1111
#define NETDATA_UDP_START 3
12-
#define NETDATA_RETRANSMIT_START 5
13-
14-
#define NETDATA_SOCKET_APPS_HASH_TABLE 0
15-
#define NETDATA_SOCKET_IPV4_HASH_TABLE 1
16-
#define NETDATA_SOCKET_IPV6_HASH_TABLE 2
17-
#define NETDATA_SOCKET_GLOBAL_HASH_TABLE 4
18-
#define NETDATA_SOCKET_LISTEN_TABLE 5
1912

2013
#define NETDATA_SOCKET_READ_SLEEP_MS 800000ULL
2114

@@ -35,9 +28,12 @@
3528

3629
enum ebpf_socket_table_list {
3730
NETDATA_SOCKET_TABLE_BANDWIDTH,
31+
NETDATA_SOCKET_GLOBAL,
32+
NETDATA_SOCKET_LPORTS,
3833
NETDATA_SOCKET_TABLE_IPV4,
3934
NETDATA_SOCKET_TABLE_IPV6,
40-
NETDATA_SOCKET_TABLE_UDP
35+
NETDATA_SOCKET_TABLE_UDP,
36+
NETDATA_SOCKET_TABLE_CTRL
4137
};
4238

4339
enum ebpf_socket_publish_index {
@@ -78,6 +74,7 @@ typedef enum ebpf_socket_idx {
7874
} ebpf_socket_index_t;
7975

8076
#define NETDATA_SOCKET_GROUP "Socket"
77+
#define NETDATA_SOCKET_KERNEL_FUNCTIONS "kernel"
8178
#define NETDATA_NETWORK_CONNECTIONS_GROUP "Network connections"
8279

8380
// Global chart name

libnetdata/ebpf/ebpf.c

+15-10
Original file line numberDiff line numberDiff line change
@@ -533,24 +533,31 @@ int ebpf_load_config(struct config *config, char *filename)
533533

534534
static netdata_run_mode_t ebpf_select_mode(char *mode)
535535
{
536-
if (!strcasecmp(mode, "return"))
536+
if (!strcasecmp(mode,EBPF_CFG_LOAD_MODE_RETURN ))
537537
return MODE_RETURN;
538538
else if (!strcasecmp(mode, "dev"))
539539
return MODE_DEVMODE;
540540

541541
return MODE_ENTRY;
542542
}
543543

544+
static void ebpf_select_mode_string(char *output, size_t len, netdata_run_mode_t sel)
545+
{
546+
if (sel == MODE_RETURN)
547+
strncpyz(output, EBPF_CFG_LOAD_MODE_RETURN, len);
548+
else
549+
strncpyz(output, EBPF_CFG_LOAD_MODE_DEFAULT, len);
550+
}
551+
544552
/**
545553
* @param modules structure that will be updated
546-
* @param user_cfg is this an user configuration?
547554
*/
548-
void ebpf_update_module_using_config(ebpf_module_t *modules, int user_cfg)
555+
void ebpf_update_module_using_config(ebpf_module_t *modules)
549556
{
550-
if (user_cfg) {
551-
char *mode = appconfig_get(modules->cfg, EBPF_GLOBAL_SECTION, EBPF_CFG_LOAD_MODE, EBPF_CFG_LOAD_MODE_DEFAULT);
552-
modules->mode = ebpf_select_mode(mode);
553-
}
557+
char default_value[EBPF_MAX_MODE_LENGTH + 1];
558+
ebpf_select_mode_string(default_value, EBPF_MAX_MODE_LENGTH, modules->mode);
559+
char *mode = appconfig_get(modules->cfg, EBPF_GLOBAL_SECTION, EBPF_CFG_LOAD_MODE, default_value);
560+
modules->mode = ebpf_select_mode(mode);
554561

555562
modules->update_time = (int)appconfig_get_number(modules->cfg, EBPF_GLOBAL_SECTION,
556563
EBPF_CFG_UPDATE_EVERY, modules->update_time);
@@ -577,17 +584,15 @@ void ebpf_update_module(ebpf_module_t *em)
577584
{
578585
char filename[FILENAME_MAX+1];
579586
ebpf_mount_config_name(filename, FILENAME_MAX, ebpf_user_config_dir, em->config_file);
580-
int from_user = 1;
581587
if (!ebpf_load_config(em->cfg, filename)) {
582588
ebpf_mount_config_name(filename, FILENAME_MAX, ebpf_stock_config_dir, em->config_file);
583-
from_user = 0;
584589
if (!ebpf_load_config(em->cfg, filename)) {
585590
error("Cannot load the ebpf configuration file %s", em->config_file);
586591
return;
587592
}
588593
}
589594

590-
ebpf_update_module_using_config(em, from_user);
595+
ebpf_update_module_using_config(em);
591596
}
592597

593598
//----------------------------------------------------------------------------------------------------------------------

libnetdata/ebpf/ebpf.h

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#define EBPF_CFG_LOAD_MODE "ebpf load mode"
1616
#define EBPF_CFG_LOAD_MODE_DEFAULT "entry"
1717
#define EBPF_CFG_LOAD_MODE_RETURN "return"
18+
#define EBPF_MAX_MODE_LENGTH 6
1819

1920
#define EBPF_CFG_UPDATE_EVERY "update every"
2021
#define EBPF_CFG_PID_SIZE "pid table size"

packaging/ebpf.checksums

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1-
3a2a6ae05c38d798b3230ba8018f1794530abf41d5826bc9e0f10bf688d63e3f netdata-kernel-collector-glibc-v0.7.7.tar.xz
2-
29331d14a104db423cc5849b67be0796c5320f08bbd1fe5b76000bc0a60eaab1 netdata-kernel-collector-musl-v0.7.7.tar.xz
3-
60b09083653ae1e0f143c3c6ed0420bbcf7278f1997795bf8f72cc7e154db344 netdata-kernel-collector-static-v0.7.7.tar.xz
1+
a56eece7b09b795a3a75e317baff0bc46b3207a0a5535c179dc4bce6a144de36 netdata-kernel-collector-glibc-v0.7.8.1.tar.xz
2+
5e98ed15ab8ba667065f17f9722f4cf86f2932e454015c2a5c169ccb950bbb33 netdata-kernel-collector-musl-v0.7.8.1.tar.xz
3+
d93dff80d0b0e41478f734f44edfdb1bf1cfbd57db4c9f4fc34d703f436a77a6 netdata-kernel-collector-static-v0.7.8.1.tar.xz
4+

packaging/ebpf.version

+2-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
v0.7.7
1+
v0.7.8.1
2+

0 commit comments

Comments
 (0)