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

Philippe Proulx eeppeliteloop at gmail.com
Fri Nov 4 14:22:04 UTC 2016


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

>
>
>>     /*
>>    * 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


More information about the lttng-dev mailing list