Inconsistent time measurement in Nginx
Zexuan Luo
spacewanderlzx at gmail.com
Tue Sep 28 02:27:55 UTC 2021
Hi, Nginx developers:
Currently, the request_time uses ngx_timeofday to get the time, which
finally will call gettimeofday. Meanwhile, the upstream_x_time series
uses ngx_current_msec to calculate the time, which finally will call
ngx_monotonic_time.
On Linux, the gettimeofday will call clock_gettime(CLOCK_REALTIME,
&ts) while the ngx_monotonic_time will call
clock_gettime(CLOCK_MONOTONIC_COARSE, &ts).
So the request_time uses CLOCK_REALTIME and the upstream_x_time series
uses CLOCK_MONOTONIC_COARSE. As they are different sources, sometimes
we observe that the upstream_response_time is larger than
request_time. This behavior is unexpected and has caused bug in our
software.
A similar report can be also found in
https://stackoverflow.com/questions/53978695/how-can-request-time-be-less-than-upstream-response-time-in-nginx.
Is this behavior intended? Why not use the same time measurement for
all metrics? Thanks for your reply.
More information about the nginx-devel
mailing list