From: Mathieu Desnoyers Date: Sun, 25 Sep 2016 14:50:22 +0000 (-0400) Subject: Performance: mark ring buffer do_copy callers always inline X-Git-Tag: v2.9.0-rc1~10 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=00d0f8eb40e77bb8915be29c527f48fb7e006b61;p=lttng-ust.git Performance: mark ring buffer do_copy callers always inline The underlying copy operation is more efficient if the size is a constant, which only happens if this function is inlined in the caller. Otherwise, we end up calling memcpy for each field. Force inlining for performance reasons for: - lib_ring_buffer_write, - lib_ring_buffer_do_strcpy, - lib_ring_buffer_strcpy. Note that in lttng-ust, the probe provider serialization functions need to call the lttng_event_write() client callback, which will fallback to the memcpy operation. Inlining those functions helps for the event header code, which can inline them. Signed-off-by: Mathieu Desnoyers --- diff --git a/libringbuffer/backend.h b/libringbuffer/backend.h index 1364d383..46022ad3 100644 --- a/libringbuffer/backend.h +++ b/libringbuffer/backend.h @@ -71,7 +71,7 @@ lib_ring_buffer_read_offset_address(struct lttng_ust_lib_ring_buffer_backend *bu * backend-specific memcpy() operation. Calls the slow path (_ring_buffer_write) * if copy is crossing a page boundary. */ -static inline +static inline __attribute__((always_inline)) void lib_ring_buffer_write(const struct lttng_ust_lib_ring_buffer_config *config, struct lttng_ust_lib_ring_buffer_ctx *ctx, const void *src, size_t len) @@ -106,7 +106,7 @@ void lib_ring_buffer_write(const struct lttng_ust_lib_ring_buffer_config *config * terminating character is found in @src. Returns the number of bytes * copied. Does *not* terminate @dest with NULL terminating character. */ -static inline +static inline __attribute__((always_inline)) size_t lib_ring_buffer_do_strcpy(const struct lttng_ust_lib_ring_buffer_config *config, char *dest, const char *src, size_t len) { @@ -142,7 +142,7 @@ size_t lib_ring_buffer_do_strcpy(const struct lttng_ust_lib_ring_buffer_config * * character is found in @src before @len - 1 characters are copied, pad * the buffer with @pad characters (e.g. '#'). */ -static inline +static inline __attribute__((always_inline)) void lib_ring_buffer_strcpy(const struct lttng_ust_lib_ring_buffer_config *config, struct lttng_ust_lib_ring_buffer_ctx *ctx, const char *src, size_t len, int pad)