> On Dec 16, 2020, at 18:40, Martin Pieuchot <m...@openbsd.org> wrote:
> 
> On 16/12/20(Wed) 23:23, Claudio Jeker wrote:
>>> On Wed, Dec 16, 2020 at 04:50:42PM -0300, Martin Pieuchot wrote:
>>> [...] 
>>> Why did we choose to use a variable over NULL?  Any technical reason?
>> 
>> The sleep subsytem requires a non-NULL value for ident. Changing this
>> seems not trivial.
> 
> I'd say this is an implementation detail, nothing prevent us to use a
> "private" ident value if NULL is passed to tsleep(9) :)
> 
>>> I'm wondering it the locality of the variable might not matter in a
>>> distant future.  Did you dig a bit deeper about the FreeBSD solution?
>>> Why did they choose a per-CPU value?
>> 
>> Currently all sleep channels are hashed into IIRC 128 buckets. If all
>> timeouts use the same sleep channel then this queue may get overcrowded.
>> I guess only instrumentation and measurements will tell us how bad the
>> sleep queue is hashed.
> 
> So using a global as sleep channel is not optimum?  Would it be better
> to use an address on the stack?  If so we could make sleep_setup() accept
> NULL and use 'sls' for example.

Yes, I think that scheme would dodge any issues with overuse of a
single global channel.  Plus, "tsleep_nsec(NULL, ...)" looks about
right.  Passing NULL as the wakeup channel to say "I don't want any
wakeup(9) broadcasts" is intuitive.  More intuitive than handrolling a
private channel on the stack or (as clever as I think it is) "deadchan".

Reply via email to