Skip site navigation (1)Skip section navigation (2)
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>