On Thu, Aug 13, 2020 at 7:06 PM Eric Dumazet <eduma...@google.com> wrote: > > There has been some heat around prandom_u32() lately, and some people > were wondering if there was a simple way to determine how often > it was used, before considering making it maybe 10 times more expensive. > > This tracepoint exports the generated pseudo random value. > > Tested: > > perf list | grep prandom_u32 > random:prandom_u32 [Tracepoint event] > > perf record -a [-g] [-C1] -e random:prandom_u32 sleep 1 > [ perf record: Woken up 0 times to write data ] > [ perf record: Captured and wrote 259.748 MB perf.data (924087 samples) ] > > perf report --nochildren > ... > 97.67% ksoftirqd/1 [kernel.vmlinux] [k] prandom_u32 > | > ---prandom_u32 > prandom_u32 > | > |--48.86%--tcp_v4_syn_recv_sock > | tcp_check_req > | tcp_v4_rcv > | ... > --48.81%--tcp_conn_request > tcp_v4_conn_request > tcp_rcv_state_process > ... > perf script > > Signed-off-by: Eric Dumazet <eduma...@google.com> > Cc: Willy Tarreau <w...@1wt.eu> > Cc: Sedat Dilek <sedat.di...@gmail.com>
Thanks for the patch and embedding a list of instructions with linux-perf. Tested-by: Sedat Dilek <sedat.di...@gmail.com> - Sedat - > --- > According to MAINTAINERS, lib/random32.c is part of networking... > > include/trace/events/random.h | 17 +++++++++++++++++ > lib/random32.c | 2 ++ > 2 files changed, 19 insertions(+) > > diff --git a/include/trace/events/random.h b/include/trace/events/random.h > index > 32c10a515e2d5438e8d620a0c2313aab5f849b2b..9570a10cb949b5792c4290ba8e82a077ac655069 > 100644 > --- a/include/trace/events/random.h > +++ b/include/trace/events/random.h > @@ -307,6 +307,23 @@ TRACE_EVENT(urandom_read, > __entry->pool_left, __entry->input_left) > ); > > +TRACE_EVENT(prandom_u32, > + > + TP_PROTO(unsigned int ret), > + > + TP_ARGS(ret), > + > + TP_STRUCT__entry( > + __field( unsigned int, ret) > + ), > + > + TP_fast_assign( > + __entry->ret = ret; > + ), > + > + TP_printk("ret=%u" , __entry->ret) > +); > + > #endif /* _TRACE_RANDOM_H */ > > /* This part must be outside protection */ > diff --git a/lib/random32.c b/lib/random32.c > index > 3d749abb9e80d54d8e330e07fb8b773b7bec2b83..932345323af092a93fc2690b0ebbf4f7485ae4f3 > 100644 > --- a/lib/random32.c > +++ b/lib/random32.c > @@ -39,6 +39,7 @@ > #include <linux/random.h> > #include <linux/sched.h> > #include <asm/unaligned.h> > +#include <trace/events/random.h> > > #ifdef CONFIG_RANDOM32_SELFTEST > static void __init prandom_state_selftest(void); > @@ -82,6 +83,7 @@ u32 prandom_u32(void) > u32 res; > > res = prandom_u32_state(state); > + trace_prandom_u32(res); > put_cpu_var(net_rand_state); > > return res; > -- > 2.28.0.220.ged08abb693-goog >