From: Andrew Morton <akpm@linux-foundation.org>
To: "Michael Kerrisk" <mtk-manpages@gmx.net>
Cc: corbet@lwn.net, jengelh@computergmbh.de, hch@lst.de,
stable@kernel.org, drepper@redhat.com,
torvalds@linux-foundation.org, linux-kernel@vger.kernel.org,
tglx@linutronix.de, rdunlap@xenotime.net,
vda.linux@googlemail.com, davidel@xmailserver.org
Subject: Re: timerfd redux
Date: Wed, 12 Sep 2007 19:39:20 -0700 [thread overview]
Message-ID: <20070912193920.441cf901.akpm@linux-foundation.org> (raw)
In-Reply-To: <20070905153201.236690@gmx.net>
On Wed, 05 Sep 2007 17:32:01 +0200 "Michael Kerrisk" <mtk-manpages@gmx.net> wrote:
> [Was: Re: [PATCH] Revised timerfd() interface]
>
> > Michael, could you please refresh our memories with a brief,
> > from-scratch summary of what the current interface is, followed
> > by a summary of what you believe to be the shortcomings to be?
>
> Andrew,
>
> I'll break this up into parts:
>
> 1. the existing timerfd interface
> 2. timerfd limitations
> 3. possible solutions
> a) Add an argument
> b) Create an interface similar to POSIX timers
> c) Integrate timerfd with POSIX timers
>
> Cheers,
>
> Michael
>
>
> 1: the existing timerfd interface
> =================================
>
> In 2.6.22, Davide added timerfd() with the following interface:
>
> returned_fd = timerfd(int fd, int clockid, int flags,
> struct itimerspec *utimer);
>
> If fd is -1, a new timer is created and started. The syscall
> returns a file descriptor for the timer. 'utimer' specifies
> the initial expiration and interval of the timer.
> 'clockid' is CLOCK_REALTIME or CLOCK_REALTIME. The 'utimer'
> value is relative, unless TFD_TIMER_ABSTIME is specified in
> 'flags', in which case the initial expiration is specified
> absolutely.
>
> If 'fd' is not -1, then the call modifies the existing timer
> referred to by the file descriptor 'fd'. The 'clockid', 'flags',
> and 'utimer' can all be modified. The return value is 'fd'.
>
> The key feature of timerfd() is that the caller can use
> select/poll/epoll to wait on traditional file descriptors and
> one or more timers.
>
> read() from a timerfd file descriptor (should) return a 4-byte
> integer that is the number of timer expirations since the last
> read. (If no expiration has so far occurred, read() will block.)
>
> IMPORTANT POINT: as implemented in 2.6.22, timerfd was broken:
> only a single byte of info was returned by read(). I regard
> this as a virtue: it gives us something closer to a blank slate
> for fixing the problems described below; furthermore,
> arguably at this point we could buy ourselves time by
> pulling timerfd() from 2.6.23, and taking more time to get
> things right in 2.6.24.
>
> (More details on timerfd() can be found here:
> http://lwn.net/Articles/245533/)
OK.
> 2. timerfd limitations
> ======================
>
> Unix has two older timer interfaces:
>
> * setitimer/getitimer and
>
> * POSIX timers (timer_create/timer_settime/timer_gettime).
>
> timerfd() lacks two features that are present in the older
> interfaces:
>
> * Retrieve the previous setting of an existing timer when
> setting a new value for the timer.
>
> * Non-destructively fetch the timer remaining until the
> next expiration of the timer.
>
> The fact that this functionality is present in both older APIs
> strongly suggests that various applications really need both
> functionalities.
Yes, I can imagine applications wanting to do those things.
> (Davide has argued that timerfd() doesn't need the
> get-while-setting functionality because we can create multiple
> timerfd timers. However, POSIX timers also allow multiple
> timer instances, but nevertheless provide get-while-setting.
> I would estimate that this functionality would be useful for
> libraries that want to create and control a (single) timerfd
> file descriptor that is returned to the caller.)
Sure. If you're implementing a timeout and you want to reset it, you might
indeed want to know how close the old one was to expiring.
Davide's proposal sounds like an awkward workaround for missing
functionality.
Does Davide have a proposal for the non-destructive fetch?
> 3. possible solutions
I don't think we'll have this settled and coded in time for 2.6.23. So I
think the prudent thing to do is to push this back to 2.6.24 and not offer
sys_timerfd() in 2.6.23.
next prev parent reply other threads:[~2007-09-13 2:40 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-08-25 6:41 [PATCH] Revised timerfd() interface Michael Kerrisk
2007-08-30 12:01 ` Davide Libenzi
2007-09-04 8:03 ` Michael Kerrisk
2007-09-04 8:18 ` Andrew Morton
2007-09-04 8:24 ` Michael Kerrisk
2007-09-04 15:25 ` Davide Libenzi
2007-09-04 15:39 ` Michael Kerrisk
2007-09-04 22:41 ` Davide Libenzi
2007-09-04 20:49 ` Michael Kerrisk
2007-09-04 22:44 ` Davide Libenzi
2007-09-05 0:08 ` Michael Kerrisk
2007-09-05 12:02 ` Andrew Morton
2007-09-05 16:14 ` Davide Libenzi
2007-09-05 16:23 ` Michael Kerrisk
2007-09-05 19:57 ` Davide Libenzi
2007-09-05 22:50 ` Michael Kerrisk
2007-09-05 23:45 ` Davide Libenzi
2007-09-06 6:58 ` Michael Kerrisk
2007-09-06 23:37 ` Davide Libenzi
2007-09-10 3:15 ` Michael Kerrisk
2007-09-05 12:12 ` Denys Vlasenko
2007-09-05 15:32 ` timerfd redux Michael Kerrisk
2007-09-13 2:39 ` Andrew Morton [this message]
2007-09-13 6:14 ` Michael Kerrisk
2007-09-13 8:13 ` Michael Kerrisk
2007-09-13 8:20 ` Andrew Morton
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=20070912193920.441cf901.akpm@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=corbet@lwn.net \
--cc=davidel@xmailserver.org \
--cc=drepper@redhat.com \
--cc=hch@lst.de \
--cc=jengelh@computergmbh.de \
--cc=linux-kernel@vger.kernel.org \
--cc=mtk-manpages@gmx.net \
--cc=rdunlap@xenotime.net \
--cc=stable@kernel.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=vda.linux@googlemail.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.