Re: VDSO gettimeofday() x86_64 linux 3.2

From: Andy Lutomirski
Date: Tue Oct 16 2012 - 15:40:08 EST


On Tue, Oct 16, 2012 at 12:33 PM, wilson self <wself00@xxxxxxxxx> wrote:
> current_clocksource is tsc.
>
> the entire source of the test application:
> ---
> #include <stdio.h>
> #include <stdlib.h>
> #include <sys/time.h>
> #include <time.h>
>
> int main() {
> struct timeval tim;
> gettimeofday(&tim, NULL);
> printf("%.6lf seconds\n", tim.tv_sec+tim.tv_usec/1000000.0);
> }
> ---
> nothing fancy going on here.
>
> thanks for the help.

There's lots of hidden fanciness. What glibc version are you using
and how are you linking to glibc? All but the newest glibc versions
use the old vsyscall when statically linked. The newest versions use
the syscall instead. If you're dynamically linking, then gettimeofday
should be okay even with fairly old glibc versions.

(FWIW, glibc maintainership has changed since this was decided. Feel
free to bug the new maintainers if you care about statically-linked
performance. The only other runtime library I know of that uses the
vdso or vsyscalls is Go, and the newest versions do the right thing.)

--Andy
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/