|
- #ifndef __BPF_FUNC_TRACE_H__
- #define __BPF_FUNC_TRACE_H__
-
- #include <bpf/bpf_helpers.h>
-
- struct trace_entry_ctx {
- u64 id;
- u64 start_ns;
- u64 delta_ns;
- };
-
- struct {
- __uint(type, BPF_MAP_TYPE_HASH);
- __type(key, u64);
- __type(value, struct trace_entry_ctx);
- __uint(max_entries, 10240);
- } func_trace_map SEC(".maps");
-
- static __always_inline void func_trace_begain(u64 id)
- {
- struct trace_entry_ctx entry = {
- .start_ns = bpf_ktime_get_ns(),
- .id = id,
- };
-
- bpf_map_update_elem(&func_trace_map, &id, &entry, COMPAT_BPF_ANY);
- }
-
- static __always_inline struct trace_entry_ctx *func_trace_end(u64 id)
- {
- struct trace_entry_ctx *entry;
-
- entry = bpf_map_lookup_elem(&func_trace_map, &id);
- if (!entry) {
- return NULL;
- }
-
- // update any elem you need!
- entry->delta_ns = bpf_ktime_get_ns() - entry->start_ns;
- return entry;
- }
-
- static __always_inline void func_trace_destroy(u64 id)
- {
- bpf_map_delete_elem(&func_trace_map, &id);
- }
-
- #endif
|