@cryptotaxi247 / netdata-1 / commits / 35884c7a8

Fix issues in sync thread (eBPF plugin) (#15174)

thiagoftsm committed Jun 19, 2023 at 15:32 UTC 35884c7a8447fbeb699cae6a2a20dc0a2137c659
1 file changed +18 -15
collectors/ebpf.plugin/ebpf_sync.c
+18 -15
@@ -349,6 +349,7 @@ static int ebpf_sync_initialize_syscall(ebpf_module_t *em)
349 for (i = 0; local_syscalls[i].syscall; i++) {
350 ebpf_sync_syscalls_t *w = &local_syscalls[i];
351 w->sync_maps = local_syscalls[i].sync_maps;
352 + em->maps = local_syscalls[i].sync_maps;
353 if (w->enabled) {
354 if (em->load & EBPF_LOAD_LEGACY) {
355 if (ebpf_sync_load_legacy(w, em))
@@ -360,20 +361,23 @@ static int ebpf_sync_initialize_syscall(ebpf_module_t *em)
361 else {
362 char syscall[NETDATA_EBPF_MAX_SYSCALL_LENGTH];
363 ebpf_select_host_prefix(syscall, NETDATA_EBPF_MAX_SYSCALL_LENGTH, w->syscall, running_on_kernel);
363 - w->sync_obj = sync_bpf__open();
364 - if (!w->sync_obj) {
365 - errors++;
366 - } else {
367 - if (ebpf_is_function_inside_btf(default_btf, syscall)) {
364 + if (ebpf_is_function_inside_btf(default_btf, syscall)) {
365 + w->sync_obj = sync_bpf__open();
366 + if (!w->sync_obj) {
367 + w->enabled = false;
368 + errors++;
369 + } else {
370 if (ebpf_sync_load_and_attach(w->sync_obj, em, syscall, i)) {
371 + w->enabled = false;
372 errors++;
373 }
371 - } else {
372 - if (ebpf_sync_load_legacy(w, em))
373 - errors++;
374 }
375 - em->thread_name = saved_name;
375 + } else {
376 + info("Cannot find syscall %s we are not going to monitor it.", syscall);
377 + w->enabled = false;
378 }
379 +
380 + em->thread_name = saved_name;
381 }
382 #endif
383 }
@@ -402,7 +406,7 @@ static int ebpf_sync_initialize_syscall(ebpf_module_t *em)
406 */
407 static void ebpf_sync_read_global_table(int maps_per_core)
408 {
405 - netdata_idx_t stored[ebpf_nprocs];
409 + netdata_idx_t stored[NETDATA_MAX_PROCESSOR];
410 uint32_t idx = NETDATA_SYNC_CALL;
411 int i;
412 for (i = 0; local_syscalls[i].syscall; i++) {
@@ -456,7 +460,7 @@ static void ebpf_send_sync_chart(char *id,
460 */
461 static void sync_send_data()
462 {
459 - if (local_syscalls[NETDATA_SYNC_FSYNC_IDX].enabled || local_syscalls[NETDATA_SYNC_FDATASYNC_IDX].enabled) {
463 + if (local_syscalls[NETDATA_SYNC_FSYNC_IDX].enabled && local_syscalls[NETDATA_SYNC_FDATASYNC_IDX].enabled) {
464 ebpf_send_sync_chart(NETDATA_EBPF_FILE_SYNC_CHART, NETDATA_SYNC_FSYNC_IDX, NETDATA_SYNC_FDATASYNC_IDX);
465 }
466
@@ -465,7 +469,7 @@ static void sync_send_data()
469 sync_counter_publish_aggregated[NETDATA_SYNC_MSYNC_IDX].dimension,
470 sync_hash_values[NETDATA_SYNC_MSYNC_IDX]);
471
468 - if (local_syscalls[NETDATA_SYNC_SYNC_IDX].enabled || local_syscalls[NETDATA_SYNC_SYNCFS_IDX].enabled) {
472 + if (local_syscalls[NETDATA_SYNC_SYNC_IDX].enabled && local_syscalls[NETDATA_SYNC_SYNCFS_IDX].enabled) {
473 ebpf_send_sync_chart(NETDATA_EBPF_SYNC_CHART, NETDATA_SYNC_SYNC_IDX, NETDATA_SYNC_SYNCFS_IDX);
474 }
475
@@ -551,7 +555,7 @@ static void ebpf_create_sync_chart(char *id,
555 */
556 static void ebpf_create_sync_charts(int update_every)
557 {
554 - if (local_syscalls[NETDATA_SYNC_FSYNC_IDX].enabled || local_syscalls[NETDATA_SYNC_FDATASYNC_IDX].enabled)
558 + if (local_syscalls[NETDATA_SYNC_FSYNC_IDX].enabled && local_syscalls[NETDATA_SYNC_FDATASYNC_IDX].enabled)
559 ebpf_create_sync_chart(NETDATA_EBPF_FILE_SYNC_CHART,
560 "Monitor calls for <code>fsync(2)</code> and <code>fdatasync(2)</code>.", 21300,
561 NETDATA_SYNC_FSYNC_IDX, NETDATA_SYNC_FDATASYNC_IDX, update_every);
@@ -561,7 +565,7 @@ static void ebpf_create_sync_charts(int update_every)
565 "Monitor calls for <code>msync(2)</code>.", 21301,
566 NETDATA_SYNC_MSYNC_IDX, NETDATA_SYNC_MSYNC_IDX, update_every);
567
564 - if (local_syscalls[NETDATA_SYNC_SYNC_IDX].enabled || local_syscalls[NETDATA_SYNC_SYNCFS_IDX].enabled)
568 + if (local_syscalls[NETDATA_SYNC_SYNC_IDX].enabled && local_syscalls[NETDATA_SYNC_SYNCFS_IDX].enabled)
569 ebpf_create_sync_chart(NETDATA_EBPF_SYNC_CHART,
570 "Monitor calls for <code>sync(2)</code> and <code>syncfs(2)</code>.", 21302,
571 NETDATA_SYNC_SYNC_IDX, NETDATA_SYNC_SYNCFS_IDX, update_every);
@@ -616,7 +620,6 @@ void *ebpf_sync_thread(void *ptr)
620 netdata_thread_cleanup_push(ebpf_sync_exit, ptr);
621
622 ebpf_module_t *em = (ebpf_module_t *)ptr;
619 - em->maps = sync_maps;
623
624 ebpf_set_sync_maps();
625 ebpf_sync_parse_syscalls();