From 2bba4d89f656ce434d3fab130889321ec81e3d96 Mon Sep 17 00:00:00 2001 From: JIN Jie Date: Wed, 6 Nov 2024 14:24:58 +0800 Subject: [PATCH] fix: BPF map size setting --- .../samples/rust/socket-tracer/Cargo.lock | 8 +++++++ agent/src/ebpf/user/extended/extended.c | 5 +++++ agent/src/ebpf/user/extended/extended.h | 6 ++++++ agent/src/ebpf/user/load.c | 21 +++++++++++++------ 4 files changed, 34 insertions(+), 6 deletions(-) diff --git a/agent/src/ebpf/samples/rust/socket-tracer/Cargo.lock b/agent/src/ebpf/samples/rust/socket-tracer/Cargo.lock index a76f0387e1b..2463e19f276 100644 --- a/agent/src/ebpf/samples/rust/socket-tracer/Cargo.lock +++ b/agent/src/ebpf/samples/rust/socket-tracer/Cargo.lock @@ -332,6 +332,12 @@ dependencies = [ "twox-hash", ] +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+/~https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" + [[package]] name = "serde" version = "1.0.144" @@ -458,7 +464,9 @@ dependencies = [ "libc", "log", "object", + "regex", "rustc-demangle", + "semver", "thiserror", ] diff --git a/agent/src/ebpf/user/extended/extended.c b/agent/src/ebpf/user/extended/extended.c index c93e936c8a2..5d0564b9eb0 100755 --- a/agent/src/ebpf/user/extended/extended.c +++ b/agent/src/ebpf/user/extended/extended.c @@ -74,6 +74,11 @@ void __attribute__ ((weak)) extended_map_preprocess(struct ebpf_map *map) { } +uint32_t __attribute__ ((weak)) extended_feature_flags(struct ebpf_map *map) +{ + return 0; +} + void __attribute__ ((weak)) extended_print_cp_tracer_status(void) { } diff --git a/agent/src/ebpf/user/extended/extended.h b/agent/src/ebpf/user/extended/extended.h index 13d5aa9193c..c90a7c482a5 100644 --- a/agent/src/ebpf/user/extended/extended.h +++ b/agent/src/ebpf/user/extended/extended.h @@ -78,6 +78,12 @@ bool extended_require_dwarf(int pid, const char *path); */ void extended_map_preprocess(struct ebpf_map *map); +/** + * @brief **extended_feature_flags()** Get enabled features in extened profile + * @param map The pointer to the map to be created + */ +uint32_t extended_feature_flags(struct ebpf_map *map); + /** * @brief **extended_print_cp_tracer_status()** Extended Profile runtime * status output. diff --git a/agent/src/ebpf/user/load.c b/agent/src/ebpf/user/load.c index 47dce94cee7..2bc0fd7cbeb 100644 --- a/agent/src/ebpf/user/load.c +++ b/agent/src/ebpf/user/load.c @@ -935,12 +935,21 @@ int ebpf_obj_load(struct ebpf_object *obj) map_flags = BPF_F_NO_PREALLOC; } - bool map_enabled = map->def.type == BPF_MAP_TYPE_PROG_ARRAY; - map_enabled |= ((map->def.feat_flags & FEATURE_FLAG_UPROBE_GOLANG) != 0 && is_golang_trace_enabled()); - map_enabled |= ((map->def.feat_flags & FEATURE_FLAG_UPROBE_OPENSSL) != 0 && is_openssl_trace_enabled()); - map_enabled |= ((map->def.feat_flags & FEATURE_FLAG_PROFILE_ONCPU) != 0 && oncpu_profiler_enabled()); - map_enabled |= ((map->def.feat_flags & FEATURE_FLAG_DWARF_UNWINDING) != 0 && get_dwarf_enabled()); - if (!map_enabled) { + uint32_t enabled_feats = map->def.feat_flags; + if (!is_golang_trace_enabled()) { + enabled_feats &= ~FEATURE_FLAG_UPROBE_GOLANG; + } + if (!is_openssl_trace_enabled()) { + enabled_feats &= ~FEATURE_FLAG_UPROBE_OPENSSL; + } + if (!oncpu_profiler_enabled()) { + enabled_feats &= ~FEATURE_FLAG_PROFILE_ONCPU; + } + if (!get_dwarf_enabled()) { + enabled_feats &= ~FEATURE_FLAG_DWARF_UNWINDING; + } + enabled_feats &= ~extended_feature_flags(map); + if (enabled_feats == 0) { map->def.max_entries = 1; }