Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 21 Aug 2000 21:01:13 -0400 (EDT)
From:      Robert Watson <rwatson@freebsd.org>
To:        Jonas Bulow <jonas.bulow@servicefactory.se>
Cc:        hackers@freebsd.org
Subject:   Re: freebsd and non-preemtive threads
Message-ID:  <Pine.NEB.3.96L.1000821200949.89810I-100000@fledge.watson.org>
In-Reply-To: <3997C2C5.83AFE056@servicefactory.se>

next in thread | previous in thread | raw e-mail | index | archive | help

Both Coda and Arla make use of an LWP implementation originating at CMU. 
I believe that the implementation can make use of timers to add
preemption, but know that in Coda preemption is not supported: LWPs are
used to represent in-process (potentially blocking) RPCs on both the
client and server, and are quite light weight, meaning low context-switch
overhead with minimal kernel involvement.  As a result, AFS and Coda
servers tend to run with hundreds, if not thousands of threads: a feat not
possible in many 1:1 userland thread/kernel mappings (Linux kernel
threads, for example), and often not all that scalable in m:n models.
However, as with other library-based thread mechanisms, you have to be
careful to direct potentially blocking calls through the thread-aware
versions of the calls so as not to block all other threads.  As the LWP
code used in AFS/Coda/Arla uses select() for blocking/timeout management,
there are some scalability issues with lots of blocked threads--these
might be improved through use of poll() or kqueue().

For reference, my recollection is that peemption-aware userland thread
libraries tend to make alot of timer syscalls, losing some of the
advantage of being a userland thread library (low context switch cost, few
transistions between user/kerneland).  The AFS LWP code included a
fasttime() mechanism that took advantage of the ability to mmap kernel
memory under SunOS, allowing direct access to the timer variable in
kernel, without a context switch.  I do not believe that native ports to
Linux/FreeBSD/et al have retained this capability, especially given its
requirements for privilege.  However, it would be easy to imagine a kernel
module exporting a /dev/time, which had the singular ability of allowing
the mmaping of a page containing only the kernel's timer variables,
permitting syscall-free precise time access from userland using atomic
memory access calls.

  Robert N M Watson 

robert@fledge.watson.org              http://www.watson.org/~robert/
PGP key fingerprint: AF B5 5F FF A6 4A 79 37  ED 5F 55 E9 58 04 6A B1
TIS Labs at Network Associates, Safeport Network Services



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.NEB.3.96L.1000821200949.89810I-100000>