Re: Fine-grained locking for POSIX local sockets (UNIX domain sockets)

From: David Xu <davidxu_at_freebsd.org>
Date: Wed, 10 May 2006 10:38:37 +0800
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
Received on Wed May 10 2006 - 00:38:38 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:55 UTC