From b0be1dc17a44e06ce49c5ae97c9d25e7db0d5f8c Mon Sep 17 00:00:00 2001 From: thiagoftsm Date: Sun, 8 Oct 2023 18:38:22 -0300 Subject: [PATCH] Update algorithms (#59) --- kernel-collector | 2 +- src/cachestat.bpf.c | 52 +++++++++++++++++++++++++-------------- src/cachestat.c | 3 +-- src/dc.bpf.c | 16 ++++++------ src/fd.bpf.c | 12 ++++++--- src/netdata_core_common.h | 7 ++++++ src/process.bpf.c | 25 +++++++++++-------- src/shm.bpf.c | 6 +++-- src/socket.bpf.c | 3 ++- src/swap.bpf.c | 8 ++++-- src/vfs.bpf.c | 25 +++++++++++++------ 11 files changed, 101 insertions(+), 58 deletions(-) diff --git a/kernel-collector b/kernel-collector index 6021b1a..d4beb16 160000 --- a/kernel-collector +++ b/kernel-collector @@ -1 +1 @@ -Subproject commit 6021b1a73077737ddeadd95140caaf24466ee58d +Subproject commit d4beb16f0de0cabc359acab7aa531fbdbdd4d084 diff --git a/src/cachestat.bpf.c b/src/cachestat.bpf.c index c69d3d1..55671fd 100644 --- a/src/cachestat.bpf.c +++ b/src/cachestat.bpf.c @@ -38,10 +38,8 @@ struct { * ***********************************************************************************/ -static __always_inline int netdata_cachetat_not_update_apps(__u32 idx) +static __always_inline int netdata_cachetat_not_update_apps() { - libnetdata_update_global(&cstat_global, idx, 1); - __u32 key = NETDATA_CONTROLLER_APPS_ENABLED; __u32 *apps = bpf_map_lookup_elem(&cstat_ctrl ,&key); if (apps && *apps) @@ -54,18 +52,22 @@ static __always_inline int netdata_common_page_cache_lru() { netdata_cachestat_t *fill, data = {}; - if (netdata_cachetat_not_update_apps(NETDATA_KEY_CALLS_ADD_TO_PAGE_CACHE_LRU)) + libnetdata_update_global(&cstat_global, NETDATA_KEY_MISSES, 1); + + if (netdata_cachetat_not_update_apps()) return 0; __u32 key = 0; - fill = netdata_get_pid_structure(&key, &cstat_ctrl, &cstat_pid); + __u32 tgid = 0; + fill = netdata_get_pid_structure(&key, &tgid, &cstat_ctrl, &cstat_pid); if (fill) { - libnetdata_update_u64(&fill->add_to_page_cache_lru, 1); + libnetdata_update_s64(&fill->misses, 1); } else { data.ct = bpf_ktime_get_ns(); + libnetdata_update_uid_gid(&data.uid, &data.gid); bpf_get_current_comm(&data.name, TASK_COMM_LEN); - data.add_to_page_cache_lru = 1; + data.misses = 1; bpf_map_update_elem(&cstat_pid, &key, &data, BPF_ANY); libnetdata_update_global(&cstat_ctrl, NETDATA_CONTROLLER_PID_TABLE_ADD, 1); @@ -77,19 +79,22 @@ static __always_inline int netdata_common_page_cache_lru() static __always_inline int netdata_common_page_accessed() { netdata_cachestat_t *fill, data = {}; + libnetdata_update_global(&cstat_global, NETDATA_KEY_TOTAL, 1); - if (netdata_cachetat_not_update_apps(NETDATA_KEY_CALLS_MARK_PAGE_ACCESSED)) + if (netdata_cachetat_not_update_apps()) return 0; __u32 key = 0; - fill = netdata_get_pid_structure(&key, &cstat_ctrl, &cstat_pid); + __u32 tgid = 0; + fill = netdata_get_pid_structure(&key, &tgid, &cstat_ctrl, &cstat_pid); if (fill) { - libnetdata_update_u64(&fill->mark_page_accessed, 1); + libnetdata_update_s64(&fill->total, 1); } else { data.ct = bpf_ktime_get_ns(); + libnetdata_update_uid_gid(&data.uid, &data.gid); bpf_get_current_comm(&data.name, TASK_COMM_LEN); - data.mark_page_accessed = 1; + data.total = 1; bpf_map_update_elem(&cstat_pid, &key, &data, BPF_ANY); libnetdata_update_global(&cstat_ctrl, NETDATA_CONTROLLER_PID_TABLE_ADD, 1); @@ -102,18 +107,21 @@ static __always_inline int netdata_common_page_dirtied() { netdata_cachestat_t *fill, data = {}; - if (netdata_cachetat_not_update_apps(NETDATA_KEY_CALLS_ACCOUNT_PAGE_DIRTIED)) + libnetdata_update_sglobal(&cstat_global, NETDATA_KEY_MISSES, -1); + if (netdata_cachetat_not_update_apps()) return 0; __u32 key = 0; - fill = netdata_get_pid_structure(&key, &cstat_ctrl, &cstat_pid); + __u32 tgid = 0; + fill = netdata_get_pid_structure(&key, &tgid, &cstat_ctrl, &cstat_pid); if (fill) { - libnetdata_update_u64(&fill->account_page_dirtied, 1); + libnetdata_update_s64(&fill->misses, -1); } else { data.ct = bpf_ktime_get_ns(); + libnetdata_update_uid_gid(&data.uid, &data.gid); bpf_get_current_comm(&data.name, TASK_COMM_LEN); - data.account_page_dirtied = 1; + data.misses = -1; bpf_map_update_elem(&cstat_pid, &key, &data, BPF_ANY); libnetdata_update_global(&cstat_ctrl, NETDATA_CONTROLLER_PID_TABLE_ADD, 1); @@ -126,18 +134,24 @@ static __always_inline int netdata_common_buffer_dirty() { netdata_cachestat_t *fill, data = {}; - if (netdata_cachetat_not_update_apps(NETDATA_KEY_CALLS_MARK_BUFFER_DIRTY)) + libnetdata_update_sglobal(&cstat_global, NETDATA_KEY_TOTAL, -1); + libnetdata_update_global(&cstat_global, NETDATA_KEY_DIRTY, 1); + if (netdata_cachetat_not_update_apps()) return 0; __u32 key = 0; - fill = netdata_get_pid_structure(&key, &cstat_ctrl, &cstat_pid); + __u32 tgid = 0; + fill = netdata_get_pid_structure(&key, &tgid, &cstat_ctrl, &cstat_pid); if (fill) { - libnetdata_update_u64(&fill->mark_buffer_dirty, 1); + libnetdata_update_s64(&fill->total, -1); + libnetdata_update_u64(&fill->dirty, 1); } else { data.ct = bpf_ktime_get_ns(); + libnetdata_update_uid_gid(&data.uid, &data.gid); bpf_get_current_comm(&data.name, TASK_COMM_LEN); - data.mark_buffer_dirty = 1; + data.dirty = 1; + data.total = -1; bpf_map_update_elem(&cstat_pid, &key, &data, BPF_ANY); libnetdata_update_global(&cstat_ctrl, NETDATA_CONTROLLER_PID_TABLE_ADD, 1); diff --git a/src/cachestat.c b/src/cachestat.c index e74041b..142f7a5 100644 --- a/src/cachestat.c +++ b/src/cachestat.c @@ -203,8 +203,7 @@ static pid_t ebpf_update_tables(int global, int apps) if (ret) fprintf(stderr, "Cannot insert value to global table."); - netdata_cachestat_t stats = { .add_to_page_cache_lru = 1, .mark_page_accessed = 1, - .account_page_dirtied = 1, .mark_buffer_dirty = 1 }; + netdata_cachestat_t stats = { .ct = 0, .uid = 0, .tgid = 0, .total = 1, .misses = 1, .dirty = 1 }; idx = (pid_t)pid; ret = bpf_map_update_elem(apps, &idx, &stats, 0); diff --git a/src/dc.bpf.c b/src/dc.bpf.c index 00c2402..a522cd2 100644 --- a/src/dc.bpf.c +++ b/src/dc.bpf.c @@ -52,17 +52,19 @@ static __always_inline int netdata_common_lookup_fast() { netdata_dc_stat_t *fill, data = {}; __u32 key = 0; + __u32 tgid = 0; libnetdata_update_global(&dcstat_global, NETDATA_KEY_DC_REFERENCE, 1); if (netdata_dc_not_update_apps()) return 0; - fill = netdata_get_pid_structure(&key, &dcstat_ctrl, &dcstat_pid); + fill = netdata_get_pid_structure(&key, &tgid, &dcstat_ctrl, &dcstat_pid); if (fill) { libnetdata_update_u64(&fill->references, 1); } else { data.references = 1; + libnetdata_update_uid_gid(&data.uid, &data.gid); bpf_get_current_comm(&data.name, TASK_COMM_LEN); bpf_map_update_elem(&dcstat_pid, &key, &data, BPF_ANY); @@ -76,17 +78,19 @@ static __always_inline int netdata_common_d_lookup(long ret) { netdata_dc_stat_t *fill, data = {}; __u32 key = 0; + __u32 tgid = 0; libnetdata_update_global(&dcstat_global, NETDATA_KEY_DC_SLOW, 1); if (netdata_dc_not_update_apps()) return 0; - fill = netdata_get_pid_structure(&key, &dcstat_ctrl, &dcstat_pid); + fill = netdata_get_pid_structure(&key, &tgid, &dcstat_ctrl, &dcstat_pid); if (fill) { libnetdata_update_u64(&fill->slow, 1); } else { data.slow = 1; + libnetdata_update_uid_gid(&data.uid, &data.gid); bpf_get_current_comm(&data.name, TASK_COMM_LEN); bpf_map_update_elem(&dcstat_pid, &key, &data, BPF_ANY); @@ -96,15 +100,9 @@ static __always_inline int netdata_common_d_lookup(long ret) // file not found if (!ret) { libnetdata_update_global(&dcstat_global, NETDATA_KEY_DC_MISS, 1); - fill = netdata_get_pid_structure(&key, &dcstat_ctrl, &dcstat_pid); + fill = netdata_get_pid_structure(&key, &tgid, &dcstat_ctrl, &dcstat_pid); if (fill) { libnetdata_update_u64(&fill->missed, 1); - } else { - data.missed = 1; - bpf_get_current_comm(&data.name, TASK_COMM_LEN); - bpf_map_update_elem(&dcstat_pid, &key, &data, BPF_ANY); - - libnetdata_update_global(&dcstat_ctrl, NETDATA_CONTROLLER_PID_TABLE_ADD, 1); } } diff --git a/src/fd.bpf.c b/src/fd.bpf.c index c6da566..883224c 100644 --- a/src/fd.bpf.c +++ b/src/fd.bpf.c @@ -62,14 +62,16 @@ static __always_inline int netdata_apps_do_sys_openat2(long ret) if (!netdata_are_apps_enabled()) return 0; - __u32 key; - fill = netdata_get_pid_structure(&key, &fd_ctrl, &tbl_fd_pid); + __u32 key = 0; + __u32 tgid = 0; + fill = netdata_get_pid_structure(&key, &tgid, &fd_ctrl, &tbl_fd_pid); if (fill) { libnetdata_update_u32(&fill->open_call, 1) ; if (ret < 0) libnetdata_update_u32(&fill->open_err, 1) ; } else { data.ct = bpf_ktime_get_ns(); + libnetdata_update_uid_gid(&data.uid, &data.gid); bpf_get_current_comm(&data.name, TASK_COMM_LEN); data.open_call = 1; if (ret < 0) @@ -100,14 +102,16 @@ static __always_inline int netdata_apps_close_fd(int ret) if (!netdata_are_apps_enabled()) return 0; - __u32 key; - fill = netdata_get_pid_structure(&key, &fd_ctrl, &tbl_fd_pid); + __u32 key = 0; + __u32 tgid = 0; + fill = netdata_get_pid_structure(&key, &tgid, &fd_ctrl, &tbl_fd_pid); if (fill) { libnetdata_update_u32(&fill->close_call, 1) ; if (ret < 0) libnetdata_update_u32(&fill->close_err, 1) ; } else { data.ct = bpf_ktime_get_ns(); + libnetdata_update_uid_gid(&data.uid, &data.gid); bpf_get_current_comm(&data.name, TASK_COMM_LEN); data.close_call = 1; if (ret < 0) diff --git a/src/netdata_core_common.h b/src/netdata_core_common.h index 23a946e..3c8908e 100644 --- a/src/netdata_core_common.h +++ b/src/netdata_core_common.h @@ -35,6 +35,13 @@ typedef struct ebpf_specify_name { bool retprobe; } ebpf_specify_name_t; +enum cachestat_counters_user_ring { + NETDATA_KEY_CALLS_ADD_TO_PAGE_CACHE_LRU, + NETDATA_KEY_CALLS_MARK_PAGE_ACCESSED, + NETDATA_KEY_CALLS_ACCOUNT_PAGE_DIRTIED, + NETDATA_KEY_CALLS_MARK_BUFFER_DIRTY +}; + /** * Update names * diff --git a/src/process.bpf.c b/src/process.bpf.c index ce88474..4461dc0 100644 --- a/src/process.bpf.c +++ b/src/process.bpf.c @@ -65,13 +65,14 @@ static __always_inline int netdata_process_not_update_apps() static __always_inline int netdata_common_release_task() { struct netdata_pid_stat_t *fill; - __u32 key = NETDATA_CONTROLLER_APPS_ENABLED; + __u32 key = 0; + __u32 tgid = 0; libnetdata_update_global(&tbl_total_stats, NETDATA_KEY_CALLS_RELEASE_TASK, 1); if (netdata_process_not_update_apps()) return 0; - fill = netdata_get_pid_structure(&key, &process_ctrl, &tbl_pid_stats); + fill = netdata_get_pid_structure(&key, &tgid, &process_ctrl, &tbl_pid_stats); if (fill) { libnetdata_update_u32(&fill->release_call, 1) ; fill->removeme = 1; @@ -84,7 +85,8 @@ static __always_inline int netdata_common_release_task() static __always_inline int netdata_common_fork_clone(int ret) { - __u32 key = NETDATA_CONTROLLER_APPS_ENABLED; + __u32 key = 0; + __u32 tgid = 0; struct netdata_pid_stat_t data = { }; struct netdata_pid_stat_t *fill; @@ -95,7 +97,7 @@ static __always_inline int netdata_common_fork_clone(int ret) if (netdata_process_not_update_apps()) return 0; - fill = netdata_get_pid_structure(&key, &process_ctrl, &tbl_pid_stats); + fill = netdata_get_pid_structure(&key, &tgid, &process_ctrl, &tbl_pid_stats); if (fill) { fill->release_call = 0; @@ -126,13 +128,14 @@ SEC("tracepoint/sched/sched_process_exit") int netdata_tracepoint_sched_process_exit(struct netdata_sched_process_exit *ptr) { struct netdata_pid_stat_t *fill; - __u32 key = NETDATA_CONTROLLER_APPS_ENABLED; + __u32 key = 0; + __u32 tgid = 0; libnetdata_update_global(&tbl_total_stats, NETDATA_KEY_CALLS_DO_EXIT, 1); if (netdata_process_not_update_apps()) return 0; - fill = netdata_get_pid_structure(&key, &process_ctrl, &tbl_pid_stats); + fill = netdata_get_pid_structure(&key, &tgid, &process_ctrl, &tbl_pid_stats); if (fill) { libnetdata_update_u32(&fill->exit_call, 1) ; } @@ -146,7 +149,8 @@ int netdata_tracepoint_sched_process_exec(struct netdata_sched_process_exec *ptr { struct netdata_pid_stat_t data = { }; struct netdata_pid_stat_t *fill; - __u32 key = NETDATA_CONTROLLER_APPS_ENABLED; + __u32 key = 0; + __u32 tgid = 0; // This is necessary, because it represents the main function to start a thread libnetdata_update_global(&tbl_total_stats, NETDATA_KEY_CALLS_PROCESS, 1); @@ -154,7 +158,7 @@ int netdata_tracepoint_sched_process_exec(struct netdata_sched_process_exec *ptr if (netdata_process_not_update_apps()) return 0; - fill = netdata_get_pid_structure(&key, &process_ctrl, &tbl_pid_stats); + fill = netdata_get_pid_structure(&key, &tgid, &process_ctrl, &tbl_pid_stats); if (fill) { fill->release_call = 0; libnetdata_update_u32(&fill->create_process, 1) ; @@ -176,7 +180,8 @@ int netdata_tracepoint_sched_process_fork(struct netdata_sched_process_fork *ptr { struct netdata_pid_stat_t data = { }; struct netdata_pid_stat_t *fill; - __u32 key = NETDATA_CONTROLLER_APPS_ENABLED; + __u32 key = 0; + __u32 tgid = 0; libnetdata_update_global(&tbl_total_stats, NETDATA_KEY_CALLS_PROCESS, 1); @@ -190,7 +195,7 @@ int netdata_tracepoint_sched_process_fork(struct netdata_sched_process_fork *ptr if (netdata_process_not_update_apps()) return 0; - fill = netdata_get_pid_structure(&key, &process_ctrl, &tbl_pid_stats); + fill = netdata_get_pid_structure(&key, &tgid, &process_ctrl, &tbl_pid_stats); if (fill) { fill->release_call = 0; libnetdata_update_u32(&fill->create_process, 1); diff --git a/src/shm.bpf.c b/src/shm.bpf.c index cd06860..98a694c 100644 --- a/src/shm.bpf.c +++ b/src/shm.bpf.c @@ -68,12 +68,14 @@ static __always_inline int netdata_update_apps(__u32 idx) { netdata_shm_t data = {}; - __u32 key; - netdata_shm_t *fill = netdata_get_pid_structure(&key, &shm_ctrl, &tbl_pid_shm); + __u32 key = 0; + __u32 tgid = 0; + netdata_shm_t *fill = netdata_get_pid_structure(&key, &tgid, &shm_ctrl, &tbl_pid_shm); if (fill) { netdata_update_stored_data(fill, idx); } else { data.ct = bpf_ktime_get_ns(); + libnetdata_update_uid_gid(&data.uid, &data.gid); bpf_get_current_comm(&data.name, TASK_COMM_LEN); netdata_set_structure_value(&data, idx); diff --git a/src/socket.bpf.c b/src/socket.bpf.c index c4cf01e..53f0645 100644 --- a/src/socket.bpf.c +++ b/src/socket.bpf.c @@ -109,7 +109,8 @@ static __always_inline short unsigned int set_idx_value(netdata_socket_idx_t *ns if (nsi->dport == 0) return AF_UNSPEC; - nsi->pid = netdata_get_pid(&socket_ctrl); + __u32 tgid = 0; + nsi->pid = netdata_get_pid(&socket_ctrl, &tgid); return family; } diff --git a/src/swap.bpf.c b/src/swap.bpf.c index 65809de..ef1b402 100644 --- a/src/swap.bpf.c +++ b/src/swap.bpf.c @@ -55,14 +55,16 @@ static __always_inline int common_readpage() libnetdata_update_global(&tbl_swap, NETDATA_KEY_SWAP_READPAGE_CALL, 1); __u32 key = 0; + __u32 tgid = 0; if (netdata_swap_not_update_apps()) return 0; - netdata_swap_access_t *fill = netdata_get_pid_structure(&key, &swap_ctrl, &tbl_pid_swap); + netdata_swap_access_t *fill = netdata_get_pid_structure(&key, &tgid, &swap_ctrl, &tbl_pid_swap); if (fill) { libnetdata_update_u64(&fill->read, 1); } else { data.ct = bpf_ktime_get_ns(); + libnetdata_update_uid_gid(&data.uid, &data.gid); bpf_get_current_comm(&data.name, TASK_COMM_LEN); data.read = 1; @@ -81,14 +83,16 @@ static __always_inline int common_writepage() libnetdata_update_global(&tbl_swap, NETDATA_KEY_SWAP_WRITEPAGE_CALL, 1); __u32 key = 0; + __u32 tgid = 0; if (netdata_swap_not_update_apps()) return 0; - netdata_swap_access_t *fill = netdata_get_pid_structure(&key, &swap_ctrl, &tbl_pid_swap); + netdata_swap_access_t *fill = netdata_get_pid_structure(&key, &tgid, &swap_ctrl, &tbl_pid_swap); if (fill) { libnetdata_update_u64(&fill->write, 1); } else { data.ct = bpf_ktime_get_ns(); + libnetdata_update_uid_gid(&data.uid, &data.gid); bpf_get_current_comm(&data.name, TASK_COMM_LEN); data.write = 1; diff --git a/src/vfs.bpf.c b/src/vfs.bpf.c index d004fcc..9652c27 100644 --- a/src/vfs.bpf.c +++ b/src/vfs.bpf.c @@ -41,6 +41,7 @@ struct { static __always_inline void netdata_fill_common_vfs_data(struct netdata_vfs_stat_t *data) { data->ct = bpf_ktime_get_ns(); + libnetdata_update_uid_gid(&data->uid, &data->gid); bpf_get_current_comm(&data->name, TASK_COMM_LEN); } @@ -71,10 +72,11 @@ static __always_inline int netdata_common_vfs_write(__u64 tot, ssize_t ret) libnetdata_update_global(&tbl_vfs_stats, NETDATA_KEY_BYTES_VFS_WRITE, tot); __u32 key = 0; + __u32 tgid = 0; if (netdata_vfs_not_update_apps()) return 0; - fill = netdata_get_pid_structure(&key, &vfs_ctrl, &tbl_vfs_pid); + fill = netdata_get_pid_structure(&key, &tgid, &vfs_ctrl, &tbl_vfs_pid); if (fill) { libnetdata_update_u32(&fill->write_call, 1) ; @@ -112,10 +114,11 @@ static __always_inline int netdata_common_vfs_writev(__u64 tot, ssize_t ret) libnetdata_update_global(&tbl_vfs_stats, NETDATA_KEY_BYTES_VFS_WRITEV, tot); __u32 key = 0; + __u32 tgid = 0; if (netdata_vfs_not_update_apps()) return 0; - fill = netdata_get_pid_structure(&key, &vfs_ctrl, &tbl_vfs_pid); + fill = netdata_get_pid_structure(&key, &tgid, &vfs_ctrl, &tbl_vfs_pid); if (fill) { libnetdata_update_u32(&fill->writev_call, 1) ; @@ -152,10 +155,11 @@ static __always_inline int netdata_common_vfs_read(__u64 tot, ssize_t ret) libnetdata_update_global(&tbl_vfs_stats, NETDATA_KEY_BYTES_VFS_READ, tot); __u32 key = 0; + __u32 tgid = 0; if (netdata_vfs_not_update_apps()) return 0; - fill = netdata_get_pid_structure(&key, &vfs_ctrl, &tbl_vfs_pid); + fill = netdata_get_pid_structure(&key, &tgid, &vfs_ctrl, &tbl_vfs_pid); if (fill) { libnetdata_update_u32(&fill->read_call, 1) ; @@ -192,10 +196,11 @@ static __always_inline int netdata_common_vfs_readv(__u64 tot, ssize_t ret) libnetdata_update_global(&tbl_vfs_stats, NETDATA_KEY_BYTES_VFS_READV, tot); __u32 key = 0; + __u32 tgid = 0; if (netdata_vfs_not_update_apps()) return 0; - fill = netdata_get_pid_structure(&key, &vfs_ctrl, &tbl_vfs_pid); + fill = netdata_get_pid_structure(&key, &tgid, &vfs_ctrl, &tbl_vfs_pid); if (fill) { libnetdata_update_u32(&fill->readv_call, 1) ; @@ -231,10 +236,11 @@ static __always_inline int netdata_common_vfs_unlink(int ret) libnetdata_update_global(&tbl_vfs_stats, NETDATA_KEY_CALLS_VFS_UNLINK, 1); __u32 key = 0; + __u32 tgid = 0; if (netdata_vfs_not_update_apps()) return 0; - fill = netdata_get_pid_structure(&key, &vfs_ctrl, &tbl_vfs_pid); + fill = netdata_get_pid_structure(&key, &tgid, &vfs_ctrl, &tbl_vfs_pid); if (fill) { libnetdata_update_u32(&fill->unlink_call, 1) ; @@ -267,10 +273,11 @@ static __always_inline int netdata_common_vfs_fsync(int ret) libnetdata_update_global(&tbl_vfs_stats, NETDATA_KEY_CALLS_VFS_FSYNC, 1); __u32 key = 0; + __u32 tgid = 0; if (netdata_vfs_not_update_apps()) return 0; - fill = netdata_get_pid_structure(&key, &vfs_ctrl, &tbl_vfs_pid); + fill = netdata_get_pid_structure(&key, &tgid, &vfs_ctrl, &tbl_vfs_pid); if (fill) { libnetdata_update_u32(&fill->fsync_call, 1) ; @@ -304,10 +311,11 @@ static __always_inline int netdata_common_vfs_open(int ret) libnetdata_update_global(&tbl_vfs_stats, NETDATA_KEY_CALLS_VFS_OPEN, 1); __u32 key = 0; + __u32 tgid = 0; if (netdata_vfs_not_update_apps()) return 0; - fill = netdata_get_pid_structure(&key, &vfs_ctrl, &tbl_vfs_pid); + fill = netdata_get_pid_structure(&key, &tgid, &vfs_ctrl, &tbl_vfs_pid); if (fill) { libnetdata_update_u32(&fill->open_call, 1) ; @@ -341,10 +349,11 @@ static __always_inline int netdata_common_vfs_create(int ret) libnetdata_update_global(&tbl_vfs_stats, NETDATA_KEY_CALLS_VFS_CREATE, 1); __u32 key = 0; + __u32 tgid = 0; if (netdata_vfs_not_update_apps()) return 0; - fill = netdata_get_pid_structure(&key, &vfs_ctrl, &tbl_vfs_pid); + fill = netdata_get_pid_structure(&key, &tgid, &vfs_ctrl, &tbl_vfs_pid); if (fill) { libnetdata_update_u32(&fill->create_call, 1) ;