Performance: mark ring buffer do_copy callers always inline
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Sun, 25 Sep 2016 14:50:22 +0000 (10:50 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Sun, 25 Sep 2016 14:50:22 +0000 (10:50 -0400)
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 <mathieu.desnoyers@efficios.com>
libringbuffer/backend.h

index 1364d383f4006b7c9db851aeb0813d8e55cbd2b6..46022ad3c5767d7f46db917ee41d2f6e72a98c7b 100644 (file)
@@ -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)
This page took 0.025491 seconds and 4 git commands to generate.