From: ebiederm@xmission.com (Eric W. Biederman)
To: torvalds@transmeta.com (Linus Torvalds)
Cc: linux-kernel@vger.kernel.org
Subject: Re: [PATCH] 'select' failure or signal should not update timeout
Date: 21 Jul 2002 09:36:10 -0600 [thread overview]
Message-ID: <m13cudnled.fsf@frodo.biederman.org> (raw)
In-Reply-To: <ahau4q$1n2$1@penguin.transmeta.com>
torvalds@transmeta.com (Linus Torvalds) writes:
> In article <200207200038.g6K0cZO12086@devserv.devel.redhat.com>,
> Alan Cox <alan@redhat.com> wrote:
> >> <http://www.opengroup.org/onlinepubs/007904975/functions/select.html>
> >> says that 'select' may modify its timeout argument only "upon
> >> successful completion". However, the Linux kernel sometimes modifies
> >> the timeout argument even when 'select' fails or is interrupted.
> >
> >This is extremely useful behaviour. POSIX is broken here. Fix it in the
> >C library or somewhere it doesn't harm the clueful
>
> Personally, I've gotten to the point where I think that the select()
> time is broken.
>
> The thing is, nobody should really ever use timeouts, because the notion
> of "I want to sleep X seconds" is simply not _useful_ if the process
> also just got delayed by a page-out event as it said so. What does "X
> seconds" mean at that point? It's ambiguous - and the kernel will (quite
> naturally) just always assume that it is "X seconds from when the kernel
> got notified".
>
> A _useful_ interface would be to say "I want to sleep to at most time X"
> or "to at least time X". Those are unambiguous things to say, and are
> not open to interpretation.
Sleeping until at most time X is only useful if the kernel can actually
make a guarantee like that. If you are doing hard real time fine, otherwise
that doesn't work to well.
> The "I want to sleep until at least time X" (or "at most time X") also
> has the added advantage that it is inherently re-startable - restarting
> the sleep has _no_ rounding issues, and again no ambiguity.
>
> Note that select() is definitely not the only offender here. Other
> system calls like "nanosleep()" have the exact same problem - what do
> you do if you get interrupted by a signal and need to restart?
>
> The Linux behaviour of modifying the timeout is a half-assed try for
> restartability, but the problem is that (a) nobody else does that or
> expects it to happen, despite the man-pages originally claiming that
> they were supposed to and (b) it inherently has rounding problems and
> other ambiguities - making it even less useful.
>
> Oh, well.
>
> I suspect almost nobody actually uses the Linux timeout feature because
> of the nonportability issues, making the whole mess even less tasty.
Actually I have had occasion in dosemu to not use the timeout features
because it did not do a good job of attempting to sleep for X seconds.
There can be a lot of time from when the kernel updates the timeout
value, and when the system call is restarted.
The desired semantics in this case were I want to sleep until time X,
and I want to wake up as soon afterwards as is reasonable. Calling
gettimeofday before restarting the system call resulted in a much
better approximation of the desired result.
Eric
next prev parent reply other threads:[~2002-07-21 15:44 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <200207171430.g6HEUvY23619@aztec.santafe.edu>
2002-07-19 9:52 ` [PATCH] 'select' failure or signal should not update timeout Paul Eggert
2002-07-20 0:38 ` Alan Cox
2002-07-20 5:57 ` Linus Torvalds
2002-07-21 15:36 ` Eric W. Biederman [this message]
2002-07-24 13:44 ` Jamie Lokier
2002-07-24 18:48 ` Linus Torvalds
2002-07-24 19:07 ` Chris Friesen
2002-07-24 23:30 ` Jamie Lokier
2002-07-25 6:32 ` Rusty Russell
2002-07-25 18:31 ` george anzinger
2002-07-28 5:40 ` David Schwartz
2002-07-25 16:35 ` Eric W. Biederman
2002-07-25 17:15 ` Jamie Lokier
2002-07-21 16:00 ` Christoph Rohland
2002-07-21 16:43 ` Linus Torvalds
2002-07-21 17:51 ` dean gaudet
2002-07-22 3:59 ` Edgar Toernig
2002-07-22 6:51 ` Christoph Rohland
2002-07-21 16:26 ` Ingo Molnar
2002-07-21 20:14 ` Richard Stallman
2002-07-20 3:59 dank
-- strict thread matches above, loose matches on Subject: below --
2002-07-21 3:34 Peter T. Breuer
2002-07-28 10:33 linux
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m13cudnled.fsf@frodo.biederman.org \
--to=ebiederm@xmission.com \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@transmeta.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox