All of lore.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.