Date: Mon, 6 Mar 2006 11:39:12 -0800 (PST) From: Matthew Dillon <dillon@apollo.backplane.com> To: John Baldwin <jhb@freebsd.org> Cc: dima <_pppp@mail.ru>, arch@freebsd.org, Poul-Henning Kamp <phk@phk.freebsd.dk>, Robert Watson <rwatson@freebsd.org>, freebsd-arch@freebsd.org Subject: Re: wakeup idea... Message-ID: <200603061939.k26JdCj8065218@apollo.backplane.com> References: <E1FGG1v-000BKH-00._pppp-mail-ru@f36.mail.ru> <200603061353.13756.jhb@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
I've tried many variations of the idea of passing a real structure to sleep/wakeup and eventually gave up on trying to change the API. It is just too useful to be able to pass an arbitrary 'id' as a the rendezvous point. But, what I *did* do was implement scheduling primitives that sleep/wakeup uses to do the actual descheduling and rescheduling of the kernel thread, and there are a number of mechanisms in DragonFly which use those primitives directly rather then using sleep/wakeup. In particular, the interrupt thread procedure, softclock thread, and DragonFly's LWKT messaging subsystem (e.g. lwkt_default_waitport()). So what I would recommend is that the sleep/wakeup API *NOT* be changed, but instead you simplify the lower level APIs that sleep/wakeup uses to the point where other high performance APIs in the system, such as lockmgr, can call them directly without making a mess. -Matt
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200603061939.k26JdCj8065218>