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>