Re: [PATCH v1 2/2] perf auxtrace: Optimize barriers with load-acquire and store-release
From: Adrian Hunter <adrian.hunter@intel.com>
Date: 2021-05-31 19:03:22
Also in:
lkml
From: Adrian Hunter <adrian.hunter@intel.com>
Date: 2021-05-31 19:03:22
Also in:
lkml
On 31/05/21 6:10 pm, Leo Yan wrote:
Hi Peter, Adrian, On Wed, May 19, 2021 at 10:03:19PM +0800, Leo Yan wrote:quoted
Load-acquire and store-release are one-way permeable barriers, which can be used to guarantee the memory ordering between accessing the buffer data and the buffer's head / tail. This patch optimizes the memory ordering with the load-acquire and store-release barriers.Is this patch okay for you? Besides this patch, I have an extra question. You could see for accessing the AUX buffer's head and tail, it also support to use compiler build-in functions for atomicity accessing: __sync_val_compare_and_swap() __sync_bool_compare_and_swap() Since now we have READ_ONCE()/WRITE_ONCE(), do you think we still need to support __sync_xxx_compare_and_swap() atomicity?
I don't remember, but it seems to me atomicity is needed only for a 32-bit perf running with a 64-bit kernel.
I checked the code for updating head and tail for the perf ring buffer (see ring_buffer_read_head() and ring_buffer_write_tail() in the file tools/include/linux/ring_buffer.h), which doesn't support __sync_xxx_compare_and_swap() anymore. This is why I wander if should drop __sync_xxx_compare_and_swap() atomicity for AUX ring buffer as well. Thanks, Leo