[PATCH] Removed CLOCK_MONOTONIC_COARSE support

Sergey Kandaurov pluknet at nginx.com
Tue Oct 19 12:07:24 UTC 2021



> On 11 Oct 2021, at 21:53, Maxim Dounin <mdounin at mdounin.ru> wrote:
> 
> # HG changeset patch
> # User Maxim Dounin <mdounin at mdounin.ru>
> # Date 1633978301 -10800
> #      Mon Oct 11 21:51:41 2021 +0300
> # Node ID 3217b92006f8807d16134246a064baab64fa7b32
> # Parent  ae7c767aa491fa55d3168dfc028a22f43ac8cf89
> Removed CLOCK_MONOTONIC_COARSE support.
> 
> While clock_gettime(CLOCK_MONOTONIC_COARSE) is faster than
> clock_gettime(CLOCK_MONOTONIC), the latter is fast enough on Linux for
> practical usage, and the difference is negligible compared to other costs
> at each event loop iteration.  On the other hand, CLOCK_MONOTONIC_COARSE
> causes various issues with typical CONFIG_HZ=250, notably very inacurate

"inaccurate"

> limit_rate handling in some edge cases (ticket #1678) and negative difference
> between $request_time and $upstream_response_time (ticket #1965).
> 
> diff --git a/src/core/ngx_times.c b/src/core/ngx_times.c
> --- a/src/core/ngx_times.c
> +++ b/src/core/ngx_times.c
> @@ -200,10 +200,6 @@ ngx_monotonic_time(time_t sec, ngx_uint_
> 
> #if defined(CLOCK_MONOTONIC_FAST)
>     clock_gettime(CLOCK_MONOTONIC_FAST, &ts);
> -
> -#elif defined(CLOCK_MONOTONIC_COARSE)
> -    clock_gettime(CLOCK_MONOTONIC_COARSE, &ts);
> -
> #else
>     clock_gettime(CLOCK_MONOTONIC, &ts);
> #endif
> 

While fast clock is certainly important in general,
and _COARSE is faster even in userspace clock_gettime(),
I tend to agree that it has too coarse granularity,
which causes more harm than good.

-- 
Sergey Kandaurov



More information about the nginx-devel mailing list