From 55276cd2a2ea3e918d2c625a384c7fa99fee9295 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Wed, 26 Mar 2025 22:11:40 +0200 Subject: initial io_ async tracepoints --- internal/c/generate_tracepoints_c.raku | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'internal/c/generate_tracepoints_c.raku') diff --git a/internal/c/generate_tracepoints_c.raku b/internal/c/generate_tracepoints_c.raku index b3f1a59..9f31d2b 100644 --- a/internal/c/generate_tracepoints_c.raku +++ b/internal/c/generate_tracepoints_c.raku @@ -48,6 +48,7 @@ role TracepointTemplate { my Str @parts; @parts.push: qq:to/BPF_C_CODE/; + /// {%vals.lc} is a struct {%vals} SEC("tracepoint/syscalls/{%vals}") int handle_{%vals.lc}(struct {ctx-struct} *ctx) \{ __u32 pid, tid; @@ -194,6 +195,9 @@ class Format { multi method set-format-impl($, 'filename', 'const char *') { $!format-impl = PathnameTracepoint.new('filename') } multi method set-format-impl($, 'ret', 'long') { $!format-impl = RetTracepoint.new } + # Async I/O, at least capture the count and the durations + multi method set-format-impl(Str $s where /^sys_enter_io_/, $, $) { $!format-impl = NullTracepoint.new } + # All remaining tracepoints are ignored multi method set-format-impl($, $, $) { } @@ -204,7 +208,7 @@ class Format { method can-generate returns Bool { so $!format-impl.^can('generate-bpf-c-tracepoint') } method enter-reject returns Bool { $!format-impl !~~ any( - FdTracepoint, NameTracepoint, OpenTracepoint, PathnameTracepoint, FcntlTracepoint + FdTracepoint, NameTracepoint, OpenTracepoint, PathnameTracepoint, FcntlTracepoint, NullTracepoint ) } } @@ -244,10 +248,10 @@ my Format @formats = gather for SysTraceFormat.parse($*IN.slurp, actions => SysTraceFormatActions.new).made.values -> %syscall { if !all(%syscall.values.map(*.can-generate)) { - say "// Ignoring {%syscall.values.map(*.name).sort} as possibly not file I/O related"; + say "/// Ignoring {%syscall.values.map(*.name).sort} as possibly not file I/O related"; next; } elsif %syscall.enter-reject { - say "// Ignoring {%syscall.values.map(*.name).sort} as enter-rejected"; + say "/// Ignoring {%syscall.values.map(*.name).sort} as enter-rejected"; next; } -- cgit v1.2.3