[PATCH] Use clock_gettime(REAL_FAST) on DragonFlyBSD

Sepherosa Ziehau sepherosa at gmail.com
Thu Jun 2 15:19:26 UTC 2016


On Thu, Jun 2, 2016 at 11:05 PM, Maxim Dounin <mdounin at mdounin.ru> wrote:
> Hello!
>
> On Thu, Jun 02, 2016 at 08:48:19PM +0800, Sepherosa Ziehau wrote:
>
>> On DragonflyBSD only clock_gettime(*_FAST) avoids system call and time
>> counter read cost (kinda like Linux VDSO).  This gives some
>> improvement for performance and reduces latency.
>
> At least FreeBSD also has clock_gettime(*_FAST), from where it was
> taken to DragonFly BSD.  And Linux 2.6.32+ has
> clock_gettime(*_COARSE).
>
> We do have plans to use monotonic versions, see
> https://trac.nginx.org/nginx/ticket/189.

Yeah, if we can use clock_gettime(REAL_FAST/REAL_COARSE) that would be great :)

Should I submit another patch for it?  I think the clockid can be put
into the config file.

I patched the Dfly specifically, mainly because its gettimeofday is
still a syscall and read time counter.  While both FreeBSD-current and
Linux (which seems to have a sysctl to enable) has VDSO
gettimeofday().

>
>> My testing setup consists two clients and one nginx (recent head code)
>> server, two clients connected to the nginx server through two 10Ge
>> (82599).  15K concurrent connections from each client; client runs a
>> modified version of wrk and each connection only carries one request
>> for an 1KB file.
>>
>> Performance goes from 183Kreqs/s to 184Kreqs/s (admittedly pretty
>> minor).  Average latency reduces 2ms (98ms -> 96ms).  Latency stdev
>> reduces 6ms (198ms -> 192ms).
>
> This doesn't look statistically significant.  Have you tried
> something like ministat(1) to test the results?

I have wrk --latency data:

Before:
  Latency Distribution
     50%   26.03ms
     75%   73.95ms
     90%  285.33ms
     99%    1.04s

After:
  Latency Distribution
     50%   22.63ms
     75%   77.42ms
     90%  278.79ms
     99%    1.01s

Admittedly, kinda like acceptable measurement errors :P.

>
> Note that nginx only uses gettimeofday() once per event loop
> iteration, so I wouldn't expect it to make measureable difference.

Yeah, that's probably why the effect of VDSO like clock_gettime() is
not that obvious as w/ the database application.  But it is still
better than gettimeofday() ;).  It will be good, if we can reach the
consensus to make the move :)

Thanks,
sephe



More information about the nginx-devel mailing list