On Wed, Dec 14, 2022 at 2:04 AM Jiri Olsa <jolsa@xxxxxxxxxx> wrote: > > Both bpf_trace_printk and bpf_trace_vprintk helpers use static buffer > guarded with trace_printk_lock spin lock. > > The spin lock contention causes issues with bpf programs attached to > contention_begin tracepoint [1] [2]. > > Andrii suggested we could get rid of the contention by using trylock, > but we could actually get rid of the spinlock completely by using > percpu buffers the same way as for bin_args in bpf_bprintf_prepare > function. > > Adding 4 per cpu buffers (1k each) which should be enough for all > possible nesting contexts (normal, softirq, irq, nmi) or possible > (yet unlikely) probe within the printk helpers. > > In very unlikely case we'd run out of the nesting levels the printk > will be omitted. > > [1] https://lore.kernel.org/bpf/CACkBjsakT_yWxnSWr4r-0TpPvbKm9-OBmVUhJb7hV3hY8fdCkw@xxxxxxxxxxxxxx/ > [2] https://lore.kernel.org/bpf/CACkBjsaCsTovQHFfkqJKto6S4Z8d02ud1D7MPESrHa1cVNNTrw@xxxxxxxxxxxxxx/ > > Reported-by: Hao Sun <sunhao.th@xxxxxxxxx> > Suggested-by: Andrii Nakryiko <andrii@xxxxxxxxxx> > Signed-off-by: Jiri Olsa <jolsa@xxxxxxxxxx> Acked-by: Song Liu <song@xxxxxxxxxx>