Commit 7f48e14
btf: use weak pointers for the kernel BTF global cache
The globalCache holds strong references to the kernel and module BTF
specs, keeping ~20 MiB of raw BTF data alive for the entire process
lifetime even after all eBPF programs have been loaded and CO-RE
relocation is complete.
Replace the strong *Spec fields with weak.Pointer[Spec] (available since
Go 1.24, already the minimum version). The semantics are unchanged for
callers: loadCachedKernelSpec and loadCachedKernelModuleSpec still return
strong *Spec references that keep the spec alive for the duration of any
in-progress loading. Once all callers release their references (i.e. after
all CollectionSpecs are GC'd), the cached specs are collected automatically
without requiring an explicit FlushKernelSpec call.
FlushKernelSpec is preserved and still works; it now zeros the weak
pointers rather than nil-ing strong ones.
Measured saving in a long-running eBPF gadget manager (inspektor-gadget):
~24 MiB heap at steady state after all gadgets finish loading.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>1 parent f88fcad commit 7f48e14
1 file changed
Lines changed: 25 additions & 15 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
| 12 | + | |
12 | 13 | | |
13 | 14 | | |
14 | 15 | | |
| |||
17 | 18 | | |
18 | 19 | | |
19 | 20 | | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
20 | 25 | | |
21 | 26 | | |
22 | | - | |
23 | | - | |
| 27 | + | |
| 28 | + | |
24 | 29 | | |
25 | | - | |
| 30 | + | |
26 | 31 | | |
27 | 32 | | |
28 | 33 | | |
29 | 34 | | |
30 | 35 | | |
31 | 36 | | |
32 | 37 | | |
33 | | - | |
34 | | - | |
| 38 | + | |
| 39 | + | |
35 | 40 | | |
36 | 41 | | |
37 | 42 | | |
| |||
50 | 55 | | |
51 | 56 | | |
52 | 57 | | |
53 | | - | |
| 58 | + | |
54 | 59 | | |
55 | 60 | | |
56 | 61 | | |
| |||
61 | 66 | | |
62 | 67 | | |
63 | 68 | | |
64 | | - | |
65 | | - | |
| 69 | + | |
| 70 | + | |
66 | 71 | | |
67 | 72 | | |
68 | 73 | | |
69 | 74 | | |
70 | 75 | | |
71 | 76 | | |
72 | 77 | | |
73 | | - | |
| 78 | + | |
74 | 79 | | |
75 | 80 | | |
76 | 81 | | |
| |||
91 | 96 | | |
92 | 97 | | |
93 | 98 | | |
94 | | - | |
| 99 | + | |
95 | 100 | | |
96 | 101 | | |
97 | 102 | | |
| |||
109 | 114 | | |
110 | 115 | | |
111 | 116 | | |
112 | | - | |
| 117 | + | |
113 | 118 | | |
114 | 119 | | |
115 | 120 | | |
| |||
118 | 123 | | |
119 | 124 | | |
120 | 125 | | |
121 | | - | |
| 126 | + | |
122 | 127 | | |
123 | 128 | | |
124 | 129 | | |
| |||
239 | 244 | | |
240 | 245 | | |
241 | 246 | | |
242 | | - | |
243 | | - | |
| 247 | + | |
| 248 | + | |
244 | 249 | | |
245 | 250 | | |
| 251 | + | |
246 | 252 | | |
247 | 253 | | |
248 | | - | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
249 | 259 | | |
250 | 260 | | |
251 | 261 | | |
| |||
0 commit comments