Date: Fri, 29 Jun 2007 08:36:36 +0800 From: David Xu <davidxu@freebsd.org> To: Jeff Roberson <jroberson@chesapeake.net> Cc: arch@freebsd.org Subject: Re: Add wakeup_with() before 7.0? Message-ID: <46845414.609@freebsd.org> In-Reply-To: <20070628123314.W552@10.0.0.1> References: <20070628123314.W552@10.0.0.1>
next in thread | previous in thread | raw e-mail | index | archive | help
Jeff Roberson wrote: > I propose to add a new api for wakeup before 7.0. This new api would > accept a wait channel and a flags argument. here's the relevant part of > the diff: > > +void wakeup_with(void *chan, int flags) __nonnull(1); > +#define WAKEUP_ONE 0x00001 /* Only wakeup on > thread. */ > +#define WAKEUP_ALL 0x00002 /* Wake-up all waiters. */ > +#define WAKEUP_LOCAL 0x00004 /* Wake-up on the local > cpu. */ > +#define WAKEUP_TAIL 0x00008 /* Wake-up the newest > waiter. */ > > This allows wakeup callers to hint the scheduler about various > information. WAKEUP_LOCAL would allow us to prefer affinity for the > waking cpu. I have patches to use this in pipe code and socket buffer > code that improve performance in some workloads. WAKEUP_TAIL could be > used for accept() which I have heard can significantly improve webserver > performance. > Add my 1 cent here, AFAIK WAKEUP_LOCAL means the current thread will sleep or give up cpu soon, so there is no needs to wake up a thread on another cpu, right ? > To implement this change sched_wakeup() and setrunnable() need the flags > plummed all the way through. I would like feedback on whether people > think the api breakage should go in now to enable these optimizations > for 7.0, potentially without committing users of these flags right away. > Alternatively we could break the api later or just skip it until 8.0. > > Thanks, > Jeff
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?46845414.609>