Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 23 Jan 2000 20:26:15 -0500 (EST)
From:      Mikhail Teterin <mi@kot.ne.mediaone.net>
To:        Jason Evans <jasone@canonware.com>
Cc:        Mikhail Teterin <mi@kot.ne.mediaone.net>, David Schwartz <davids@webmaster.com>, bde@freebsd.org, hackers@freebsd.org
Subject:   Re: kern/13644
Message-ID:  <200001240126.UAA44772@rtfm.newton>
In-Reply-To: <20000123121055.F27689@sturm.canonware.com> from Jason Evans at "Jan 23, 2000 12:10:55 pm"

next in thread | previous in thread | raw e-mail | index | archive | help
Jason Evans once stated:

=I thought  Bruce was  pretty clear  when he  explained that  such upper
=bounds  are not  possible unless  the  operating system  can make  hard
=real-time guarantees. 

His  explanation contradicted  ALL of  the documentation  I was  able to
find, and he chose not to comment on the contradiction.

=FreeBSD  is  clearly not  capable  of  hard  real-time. If  I  remember
=correctly,  neither are  any of  the operating  systems from  which you
=quoted man pages. That makes *all* of those man pages inaccurate.

In other words, we found a flow in the most (all?) Unix implementations?
Including FreeBSD. Alright.

=In fact,  as explained in earlier  email, the timeout is  rounded up in
=order to be certain that the process isn't woken up too early.

I did not  want to be dragged into discussing  the implementation, which
is  something I'm  only  beginning to  learn. But,  perhaps,  it can  be
rounded DOWN instead? An application written by the man-page will expect
to be  waken up EARLY  (like TCL's  implementation of after(n)),  but no
man-page  hints at  the possibility  to be  waken up  LATE. And  yes, it
should,  of course,  understand  that it  may not  actually  get to  run
because of the scheduling issues.

=Our man page is wrong:
=
=	If  timeout  is  a   non-nil  pointer,  it  specifies  a
=	maximum interval to wait  for the selection to complete.

=If you  can come up  with some better wording  that you can  convince a
=committer is  accurate and comprehensible, you  might consider pursuing
=this issue. That's the only direction  I have any interest in following
=this discussion in, however.

That's very nice, thank you. How about re-opening the PR?

Peter Jeremy wrote:

=Please  provide a  test program  and results  from these  other vendors
=demonstrating that their select() will return before the specified time
=limit in the absence of any other event.

Never  claimed it  will... All  of the  man pages  say, it  is possible,
though. They do NOT  say it is possible to return  AFTER. Of course, the
program may  not get  to actually run  right then. Just  like it  may be
delayed returning from a printf()...

The test program is very simple -- one line of TCL:

	time {after 20} 100

This will report how many microseconds  did a select for 20 milliseconds
_really_ take -- an average over 100 attempts. On an idle DUAL processor
PentiumII-300, with 3.4-STABLE, the typical result is 29937 microseconds
per  iteration. On  SunOS  tornado 5.5.1  Generic_103640-24 sun4m  sparc
SUNW,SPARCstation-20  it  is a  little  better:  28167 microseconds  per
iteration. Similarly  for Irix. The  TCL's over-head can be  measured by
something simple, like:

	time {set a 5} 100
	3 microseconds per iteration # On FreeBSD
	16 microseconds per iteration # On SunOS
	28 microseconds per iteration # On Irix 6.5

HOWEVER!  The  reason  I  brought  up the  other  vendors,  was  not  to
claim, their  IMPLEMENTATION was better  then FreeBSD's, but  that their
DOCUMENTATION was  the same as  ours. Bruce was  saying our man  page is
broken. I wanted  him, or someone else, to confirm  that all those other
vendors are incorrect in their man pages too.

You are saying, the man-pages are correct (contradicting Bruce)...

=It's probably worthwhile adding a  comment to select(2) similar to that
=in sleep(3), noting that "system activity  may lengthen the sleep by an
=indeterminate amount."

	-mi


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200001240126.UAA44772>