From 16ec84c8bd34ce34dd59a9052e7a24eaa0f427f5 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Sun, 18 Sep 2016 00:25:58 -0400 Subject: [PATCH] Performance: Relax atomicity constraints for crash handling Use a store rather than a cmpxchg() for the update of the sequential commit counter. This speeds up commit. The downside is that short race windows between the if() check to see if the counter is larger than the new value and the update could result in the counter going backwards, in unlikely preemption or signal delivery scenarios. Accept that we may lose a few events in a crash dump for the benefit of tracing speed. Signed-off-by: Mathieu Desnoyers --- libringbuffer/frontend_internal.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libringbuffer/frontend_internal.h b/libringbuffer/frontend_internal.h index 43a2d0a2..c973e6b2 100644 --- a/libringbuffer/frontend_internal.h +++ b/libringbuffer/frontend_internal.h @@ -314,9 +314,9 @@ void lib_ring_buffer_write_commit_counter(const struct lttng_ust_lib_ring_buffer return; commit_seq_old = v_read(config, &shmp_index(handle, buf->commit_hot, idx)->seq); - while ((long) (commit_seq_old - commit_count) < 0) - commit_seq_old = v_cmpxchg(config, &shmp_index(handle, buf->commit_hot, idx)->seq, - commit_seq_old, commit_count); + if (caa_likely((long) (commit_seq_old - commit_count) < 0)) + v_set(config, &shmp_index(handle, buf->commit_hot, idx)->seq, + commit_count); } extern int lib_ring_buffer_create(struct lttng_ust_lib_ring_buffer *buf, -- 2.34.1