summaryrefslogtreecommitdiffstats
path: root/collectors/ebpf.plugin/ebpf_socket.c
diff options
context:
space:
mode:
authorthiagoftsm <thiagoftsm@gmail.com>2023-02-27 12:38:15 +0000
committerGitHub <noreply@github.com>2023-02-27 12:38:15 +0000
commit33d9fcb642322d6450b3b61ef47287c95111d9a6 (patch)
tree41239eadec68bb882b70b70518e2e64e85427bbe /collectors/ebpf.plugin/ebpf_socket.c
parent919239f3d4b886bcb2f0c1a8b9e38c93be34c80a (diff)
Use vector allocation whenever is possible (eBPF) (#14591)
Diffstat (limited to 'collectors/ebpf.plugin/ebpf_socket.c')
-rw-r--r--collectors/ebpf.plugin/ebpf_socket.c53
1 files changed, 49 insertions, 4 deletions
diff --git a/collectors/ebpf.plugin/ebpf_socket.c b/collectors/ebpf.plugin/ebpf_socket.c
index 6b359888d0..450f8cf383 100644
--- a/collectors/ebpf.plugin/ebpf_socket.c
+++ b/collectors/ebpf.plugin/ebpf_socket.c
@@ -5,6 +5,10 @@
#include "ebpf.h"
#include "ebpf_socket.h"
+// ----------------------------------------------------------------------------
+// ARAL vectors used to speed up processing
+ARAL *ebpf_aral_socket_pid;
+
/*****************************************************************
*
* GLOBAL VARIABLES
@@ -431,6 +435,46 @@ static inline int ebpf_socket_load_and_attach(struct socket_bpf *obj, ebpf_modul
/*****************************************************************
*
+ * ARAL FUNCTIONS
+ *
+ *****************************************************************/
+
+/**
+ * eBPF socket Aral init
+ *
+ * Initiallize array allocator that will be used when integration with apps is enabled.
+ */
+static inline void ebpf_socket_aral_init()
+{
+ ebpf_aral_socket_pid = ebpf_allocate_pid_aral("ebpf-socket", sizeof(ebpf_socket_publish_apps_t));
+}
+
+/**
+ * eBPF socket get
+ *
+ * Get a ebpf_socket_publish_apps_t entry to be used with a specific PID.
+ *
+ * @return it returns the address on success.
+ */
+ebpf_socket_publish_apps_t *ebpf_socket_stat_get(void)
+{
+ ebpf_socket_publish_apps_t *target = aral_mallocz(ebpf_aral_socket_pid);
+ memset(target, 0, sizeof(ebpf_socket_publish_apps_t));
+ return target;
+}
+
+/**
+ * eBPF socket release
+ *
+ * @param stat Release a target after usage.
+ */
+void ebpf_socket_release(ebpf_socket_publish_apps_t *stat)
+{
+ aral_freez(ebpf_aral_socket_pid, stat);
+}
+
+/*****************************************************************
+ *
* FUNCTIONS TO CLOSE THE THREAD
*
*****************************************************************/
@@ -2227,7 +2271,7 @@ void ebpf_socket_fill_publish_apps(uint32_t current_pid, ebpf_bandwidth_t *eb)
{
ebpf_socket_publish_apps_t *curr = socket_bandwidth_curr[current_pid];
if (!curr) {
- curr = callocz(1, sizeof(ebpf_socket_publish_apps_t));
+ curr = ebpf_socket_stat_get();
socket_bandwidth_curr[current_pid] = curr;
}
@@ -2947,10 +2991,11 @@ static void ebpf_socket_allocate_global_vectors(int apps)
memset(socket_publish_aggregated, 0 ,NETDATA_MAX_SOCKET_VECTOR * sizeof(netdata_publish_syscall_t));
socket_hash_values = callocz(ebpf_nprocs, sizeof(netdata_idx_t));
- if (apps)
+ if (apps) {
+ ebpf_socket_aral_init();
socket_bandwidth_curr = callocz((size_t)pid_max, sizeof(ebpf_socket_publish_apps_t *));
-
- bandwidth_vector = callocz((size_t)ebpf_nprocs, sizeof(ebpf_bandwidth_t));
+ bandwidth_vector = callocz((size_t)ebpf_nprocs, sizeof(ebpf_bandwidth_t));
+ }
socket_values = callocz((size_t)ebpf_nprocs, sizeof(netdata_socket_t));
if (network_viewer_opt.enabled) {