Hi Leo, On Sat, Aug 26, 2023 at 12:30 AM Leo Yan <leo.yan@xxxxxxxxxx> wrote: > > Hi Namhyung, > > On Tue, Aug 22, 2023 at 09:26:05PM -0700, Namhyung Kim wrote: > > [...] > > > > > > +Why ring buffers are mapped with above two different modes? Here the > > > > > +write direction matters. The forward writing starts to save data from > > > > > +the beginning of the ring buffer and wrap around when overflow, which is > > > > > +used with the read-write mode in the normal ring buffer. When the > > > > > +consumer doesn't keep up with the producer, it would lose some data, the > > > > > +kernel keeps how many records it lost and generates the > > > > > +``PERF_RECORD_LOST`` records in the next time when it finds a space in the > > > > > +ring buffer. > > > > > > > > Thanks for the update. It's unclear to me if all 4 combination of > > > > (rw, ro) x (fwd, bwd) are possible (yes!). The rw mode and back- > > > > ward is also possible but just not used for perf tool. > > > > > > I can add a matrix for the combinations: > > > > > > The combination is supported in perf tool: > > > > > > ---+------------+----------- > > > | Forward | Backward > > > ---+------------+----------- > > > rw | Yes | No > > > ---+------------+----------- > > > ro | X | Yes > > > ---+------------+----------- > > > > > > Yes: is supported > > > No: is not supported > > > X: is not feasible > > > > I think they are all supported. You can use rw mode with backward > > direction but it's just not intuitive. Also ro mode with forward direction > > is working but there's a chance to miss the start position of the > > previous event. > > I am a bit confused for the all four modes are supported. > > From the code [1], we can see there have only two combinations: > > - overwrite + read-only mode (PROT_READ); > - no-overwrite + read-write mode (PROT_READ | PROT_WRITE); > > And I think perf tool must use the backward writing for "overwrite", > and use the forward writing for "non-overwrite" mode. I think the > code [2] can help us to conclude this. I mean the kernel supports all the combinations but perf tool uses the selected two. IIUC you are describing the kernel behavior, right? Thanks, Namhyung > > In the end, the perf tool doesn't support the combinations: > > - overwrite + read-write mode > - no-overwrite + read-only mode > > I have sent a v6 patch, please let me know if you have any concerns or > if I misunderstand anything. Thanks! > > Leo > > [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/tools/lib/perf/evlist.c#n474 > [2] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/tools/lib/perf/mmap.c#n141