Tim Kientzle wrote:
I recall Matt talking about implementing gettimeofday()
without a syscall. The basic idea is to have the kernel
record some constants in a page that's mapped across
all processes, then libc can just read the time from
a known location.
It might be nice to combine this with some of the
other ideas being tossed around here:
* On each clock tick, store a base time in
a known location (page mapped read-only, no-execute
across all memory maps)
* libc can just read the base time (accurate
to the clock rate) from a constant. Very, very fast.
* For higher resolution, the kernel could record
TSC and CPU clock speed data (per-CPU? Hmmm...)
and libc could use that to fine-tune the time?
Still some details I need to think through...
Tim
One of the problems to implement it is that atomic operations,
if there are multiple integer needs to be updated by kernel,
userland maybe gets an inconsistent result, the way to avoid the
problem is using two generation numbers.
http://gsu.linux.org.tr/~mpekmezci/kernelapi/unitedlinux/arch/x86_64/kernel/vsyscall.c.html
check do_vgettimeofday(struct timeval * tv):
Another problem is how you tell userland the address of the kernel
page ? do you use fixed address or tell it via program headers like
the PT_TLS set by kernel, check /usr/src/lib/libc/gen/tls.c.
David Xu
_______________________________________________
freebsd-performance@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-performance
To unsubscribe, send any mail to "[EMAIL PROTECTED]"