[lttng-dev] [PATCH lttng-ust] Implement LTTNG_UST_BLOCKING_RETRY_TIMEOUT

Philippe Proulx eeppeliteloop at gmail.com
Fri Nov 4 14:25:34 UTC 2016


On Fri, Nov 4, 2016 at 10:23 AM, Jonathan Rajotte Julien
<Jonathan.rajotte-julien at efficios.com> wrote:
>
>
> On 2016-11-04 10:22 AM, Philippe Proulx wrote:
>>
>> On Fri, Nov 4, 2016 at 10:13 AM, Jonathan Rajotte Julien
>> <Jonathan.rajotte-julien at efficios.com> wrote:
>>>
>>> Nitpicking:
>>>
>>> Should this be RETRY_DELAY_MS since other name scheme use the *_MS suffix
>>> ?
>>>
>>> e.g:
>>> LTTNG_UST_RING_BUFFER_RETRY_DELAY_MS
>>> CONFIG_LTTNG_UST_DEFAULT_BLOCKING_RETRY_TIMEOUT_MS
>>> timeout_left_ms
>>
>> Counterexample: LTTNG_UST_REGISTER_TIMEOUT.
>>
>> Phil
>
>
> Well we have a problem.

Why? AFAIK the LTTng env. variables have no _MS suffix.

See <http://lttng.org/man/8/lttng-sessiond/v2.8/#doc-_environment_variables>
and <http://lttng.org/man/8/lttng-relayd/v2.8/#doc-_environment_variables>.

Phil

>
> Jonathan
>
>>
>>>
>>>>      /*
>>>>     * Non-static to ensure the compiler does not optimize away the xor.
>>>> @@ -149,6 +150,14 @@ static struct timer_signal_data timer_signal = {
>>>>          .lock = PTHREAD_MUTEX_INITIALIZER,
>>>>    };
>>>>    +int lttng_ust_blocking_retry_timeout =
>>>> +               CONFIG_LTTNG_UST_DEFAULT_BLOCKING_RETRY_TIMEOUT_MS;
>>>> +
>>>> +void lttng_ust_ringbuffer_set_retry_timeout(int timeout)
>>>> +{
>>>> +       lttng_ust_blocking_retry_timeout = timeout;
>>>> +}
>>>> +
>>>>    /**
>>>>     * lib_ring_buffer_reset - Reset ring buffer to initial values.
>>>>     * @buf: Ring buffer.
>>>> @@ -1985,6 +1994,23 @@ void lib_ring_buffer_switch_slow(struct
>>>> lttng_ust_lib_ring_buffer *buf, enum swi
>>>>          lib_ring_buffer_switch_old_end(buf, chan, &offsets, tsc,
>>>> handle);
>>>>    }
>>>>    +static
>>>> +bool handle_blocking_retry(int *timeout_left_ms)
>>>> +{
>>>> +       int timeout = *timeout_left_ms, delay;
>>>> +
>>>> +       if (caa_likely(!timeout))
>>>> +               return false;   /* Do not retry, discard event. */
>>>> +       if (timeout < 0)        /* Wait forever. */
>>>> +               delay = RETRY_DELAY;
>>>> +       else
>>>> +               delay = min_t(int, timeout, RETRY_DELAY);
>>>> +       (void) poll(NULL, 0, delay);
>>>> +       if (timeout > 0)
>>>> +               *timeout_left_ms -= delay;
>>>> +       return true;    /* Retry. */
>>>> +}
>>>> +
>>>>    /*
>>>>     * Returns :
>>>>     * 0 if ok
>>>> @@ -2001,6 +2027,7 @@ int lib_ring_buffer_try_reserve_slow(struct
>>>> lttng_ust_lib_ring_buffer *buf,
>>>>          const struct lttng_ust_lib_ring_buffer_config *config =
>>>> &chan->backend.config;
>>>>          struct lttng_ust_shm_handle *handle = ctx->handle;
>>>>          unsigned long reserve_commit_diff, offset_cmp;
>>>> +       int timeout_left_ms = lttng_ust_blocking_retry_timeout;
>>>>      retry:
>>>>          offsets->begin = offset_cmp = v_read(config, &buf->offset);
>>>> @@ -2083,6 +2110,9 @@ retry:
>>>>                                  >= chan->backend.buf_size)) {
>>>>                                  unsigned long nr_lost;
>>>>    +                             if
>>>> (handle_blocking_retry(&timeout_left_ms))
>>>> +                                       goto retry;
>>>> +
>>>>                                  /*
>>>>                                   * We do not overwrite non consumed
>>>> buffers
>>>>                                   * and we are full : record is lost.
>>>
>>>
>>> --
>>> Jonathan R. Julien
>>> Efficios
>>>
>>>
>>> _______________________________________________
>>> lttng-dev mailing list
>>> lttng-dev at lists.lttng.org
>>> https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
>
>
> --
> Jonathan R. Julien
> Efficios
>


More information about the lttng-dev mailing list