On Fri, Aug 26, 2022 at 2:26 PM Song Liu <songliubraving@xxxxxx> wrote: > > > > > On Aug 26, 2022, at 2:12 PM, Namhyung Kim <namhyung@xxxxxxxxxx> wrote: > > > > On Fri, Aug 26, 2022 at 1:59 PM Song Liu <songliubraving@xxxxxx> wrote: > >> > >> > >> > >>> On Aug 26, 2022, at 12:30 PM, Namhyung Kim <namhyung@xxxxxxxxxx> wrote: > >>> > >>> On Fri, Aug 26, 2022 at 11:45 AM Song Liu <songliubraving@xxxxxx> wrote: > >>> > >>>>> And actually, we can just read ctx->data and get the raw record, > >>>>> right..? > >>>> > >>>> Played with this for a little bit. ctx->data appears to be not > >>>> reliable sometimes. I guess (not 100% sure) this is because we > >>>> call bpf program before event->orig_overflow_handler. We can > >>>> probably add a flag to specify we want to call orig_overflow_handler > >>>> first. > >>> > >>> I'm not sure. The sample_data should be provided by the caller > >>> of perf_event_overflow. So I guess the bpf program should see > >>> a valid ctx->data. > >> > >> Let's dig into this. Maybe we need some small changes in > >> pe_prog_convert_ctx_access. > > > > Sure, can you explain the problem in detail and share your program? > > I push the code to > > https://git.kernel.org/pub/scm/linux/kernel/git/song/linux.git/log/?h=test-perf-event > > The code is in tools/bpf/perf-test/. > > The problem is we cannot get reliable print of data->cpu_entry in > /sys/kernel/tracing/trace. Ah, right. I've realized that the sample data is passed before full initialized. Please see perf_sample_data_init(). The other members are initialized right before written to the ring buffer in the orig_overflow_handler (__perf_event_output). That explains why pe_prog_convert_ctx_access() handles data and period specially. We need to handle it first. Thanks, Namhyung