strange performance differences of 1.2.2 vs 1.2.5
dormando
dormando at rydia.net
Sun Jun 1 22:56:47 UTC 2008
That's a good guess (Brian? You know about that?:) ... but a bit doubtful.
That gettimeofday(2) call that was changed is only made once per second
asyncronously. In order to have such a large performance impact we'd be
looking at some more broad changes.
-Dormando
> Summary: For 90% of all cases: "clock_gettime(CLOCK_MONOTONIC, ...)" ==
> good. "gettimeofday(2)" == bad.
>
>
> I haven't benched 1.2.5, but I'd bet a beer that the culprit is the
> following 1.2.5 change:
>
> * Use gettimeofday(2) instead of time(2).
>
>
> For background on why gettimeofday(2) is more expensive, see the
> following thread:
>
> http://lists.freebsd.org/mailman/htdig/freebsd-current/2005-October/057280.html
>
>
> or for a brief discussion of this in a white paper format:
>
> http://dsd.lbl.gov/publications/imc-2003.pdf
>
> Essentially, gettimeofday(2) is supposed to be highly accurate according
> to POSIX, FreeBSD guarantees accuracy and Linux makes no such guarantees
> (hence the performance hit when going from time(2) to gettimeofday(2)
> for BSD and not Linux). Proper implementation of gettimeofday(2)
> requires synchronization across CPUs, whereas time(2) does not.
> memcached *should not* use gettimeofday(2) unless highly accurate and
> sub-second resolution is a requirement. If highly precise, but
> inaccurate time keeping is acceptable, clock_gettime(CLOCK_MONOTONIC,
> ...) should be used instead (using a system call that requires CPU
> synchronization is the opposite of good for a performance oriented daemon).
>
> The above thread has all the gory details, but the performance of time
> system calls is an FAQ that should be widely understood at this point.
>
> -sc
>
More information about the memcached
mailing list