Re: a proposed callout API
- From: Julian Elischer <julian@xxxxxxxxxxxx>
- Date: Tue, 28 Nov 2006 14:54:24 -0800
John Baldwin wrote:
On Monday 13 November 2006 15:53, Poul-Henning Kamp wrote:The proposed API
----------------
tick_t XXX_ns_tick(unsigned nsec, unsigned *low, unsigned *high);
Caculate the tick value for a given timeout.
Optionally return theoretical lower and upper limits to
actual value,
tick_t XXX_s_tick(unsigned seconds)
Caculate the tick value for a given timeout.
The point behind these two functions is that we do not want to
incur a scaling operating at every arming of a callout. Very
few callouts use varying timeouts (and for those, no avoidance
is possible), but for the rest, precalculating the correct
(opaque) number is a good optimization.
One note and one question. First, the note. I was planning on rototilling our sleep() APIs to 1) handle multiple locking primitives, and 2) use explicit timescales rather than hz. I had intended on using microseconds with a negative value indicating a relative timeout (so an 'uptime' timeout, i.e. trigger X us from now) and a positive value indicating an absolute timeout (time_t-ish, and subject to ntp changes). Partly because (IIRC) Windows does something similar (negative: relative, positive: absolute, and in microseconds too IIRC) and Darwin as well. Part of the idea was to fix places that abused tsleep(..., 1), etc. to figure out a "real" sleep interval. With your proposal, I would probably change the various sleep routines to take a tick_t instead. That leads me to my question if if you would want to support the notion of absolute vs relative timeouts?
Also, my other API change I was going to do was something like this:
msleep() -> mtx_sleep()
msleep_spin() -> sl_sleep() (or some such, was talking with ups@ at BSDCan about divorcing spin locks from mutexes altogether, including a separate API namespace, since it's practically already separate as it is)
I've mentionned several times that I think making both the spinlock and Mutex code use the same mutex structure is a problem because one cannot do any run-time checking to ensure that the correct call is being used.. one must instead do runtime checking which is slower and may not hit all unusual cases (except in unusual circumstances).
_______________________________________________
new functions such as: rw_sleep(), sx_sleep() (ZFS wants this I think), but this is rather secondary. I'd just rather get the pain and suffering over all at once.
freebsd-arch@xxxxxxxxxxx mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-arch
To unsubscribe, send any mail to "freebsd-arch-unsubscribe@xxxxxxxxxxx"
- Follow-Ups:
- Re: a proposed callout API
- From: Julian Elischer
- Re: a proposed callout API
- References:
- a proposed callout API
- From: Poul-Henning Kamp
- Re: a proposed callout API
- From: John Baldwin
- a proposed callout API
- Prev by Date: Re: a proposed callout API
- Next by Date: Re: a proposed callout API
- Previous by thread: Re: a proposed callout API
- Next by thread: Re: a proposed callout API
- Index(es):
Relevant Pages
|