public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
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

  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