Skip to content

Commit f71b6a7

Browse files
douglas-raillard-armmarcbonnici
authored andcommitted
collector/ftrace: Use top-level buffer instance
Abandon the use of non-toplevel buffer instance (-B parameter), as they are not worth the hassle. A number of frace features do not interact well with them such as: * bprint event emitted by trace_printk(), that always lands in the top-level buffer no matter what. * synthetic events that can also only reasonably be emitted in the top-level buffer as of Linux 6.13
1 parent f02a0a3 commit f71b6a7

File tree

1 file changed

+30
-11
lines changed

1 file changed

+30
-11
lines changed

devlib/collector/ftrace.py

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,19 @@ def event_is_in_list(event, events):
200200

201201
self._selected_events = selected_events
202202

203+
@property
204+
def _buffer_size(self):
205+
top = self.top_buffer_size
206+
nontop = self.buffer_size
207+
if top is None and nontop is None:
208+
return None
209+
elif top is None:
210+
return nontop
211+
elif nontop is None:
212+
return top
213+
else:
214+
return max(top, nontop)
215+
203216
@property
204217
def event_string(self):
205218
return _build_trace_events(self._selected_events)
@@ -254,19 +267,25 @@ def reset(self):
254267
except TargetStableError:
255268
kprobe_events = None
256269

257-
self.target.execute('{} reset -B devlib'.format(self.target_binary),
270+
self.target.execute('{} reset'.format(self.target_binary),
258271
as_root=True, timeout=TIMEOUT)
259272

273+
274+
# This code is currently not necessary as we are not using alternate
275+
# instances (not using -B parameter). If we end up using it again, it
276+
# may very well be that trace-cmd at that point takes care of that
277+
# problem itself somehow, so this should be re-evaluated.
278+
260279
# trace-cmd start will not set the top-level buffer size if passed -B
261280
# parameter, but unfortunately some events still end up there (e.g.
262281
# print event). So we still need to set that size, otherwise the buffer
263282
# might be too small and some event lost.
264-
top_buffer_size = self.top_buffer_size if self.top_buffer_size else self.buffer_size
265-
if top_buffer_size:
266-
self.target.write_value(
267-
self.target.path.join(self.tracing_path, 'buffer_size_kb'),
268-
top_buffer_size, verify=False
269-
)
283+
# top_buffer_size = self.top_buffer_size or self.buffer_size
284+
# if top_buffer_size:
285+
# self.target.write_value(
286+
# self.target.path.join(self.tracing_path, 'buffer_size_kb'),
287+
# top_buffer_size, verify=False
288+
# )
270289

271290
if self.functions:
272291
self.target.write_value(self.function_profile_file, 0, verify=False)
@@ -315,11 +334,11 @@ async def start(self):
315334
with contextlib.suppress(TargetStableError):
316335
self.target.write_value('/proc/sys/kernel/kptr_restrict', 0)
317336

318-
params = '-B devlib {buffer_size} {cmdlines_size} {clock} {events} {tracer} {functions}'.format(
337+
params = '{buffer_size} {cmdlines_size} {clock} {events} {tracer} {functions}'.format(
319338
events=self.event_string,
320339
tracer=tracer_string,
321340
functions=tracecmd_functions,
322-
buffer_size='-b {}'.format(self.buffer_size) if self.buffer_size is not None else '',
341+
buffer_size='-b {}'.format(self._buffer_size) if self._buffer_size is not None else '',
323342
clock='-C {}'.format(self.trace_clock) if self.trace_clock else '',
324343
cmdlines_size='--cmdlines-size {}'.format(self.saved_cmdlines_nr) if self.saved_cmdlines_nr is not None else '',
325344
)
@@ -381,7 +400,7 @@ def stop(self):
381400
bg_cmd.communicate()
382401
bg_cmd.__exit__(None, None, None)
383402
elif mode == 'write-to-memory':
384-
self.target.execute('{} stop -B devlib'.format(self.target_binary),
403+
self.target.execute('{} stop'.format(self.target_binary),
385404
timeout=TIMEOUT, as_root=True)
386405
else:
387406
raise ValueError(f'Unknown mode {mode}')
@@ -404,7 +423,7 @@ def get_data(self):
404423
# Interrupting trace-cmd record will make it create the file
405424
pass
406425
elif mode == 'write-to-memory':
407-
cmd = f'{self.target_binary} extract -B devlib -o {self.target_output_file} && {busybox} chmod 666 {self.target_output_file}'
426+
cmd = f'{self.target_binary} extract -o {self.target_output_file} && {busybox} chmod 666 {self.target_output_file}'
408427
self.target.execute(cmd, timeout=TIMEOUT, as_root=True)
409428
else:
410429
raise ValueError(f'Unknown mode {mode}')

0 commit comments

Comments
 (0)