From: "Michael Kerrisk" <mtk-manpages@gmx.net>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: davidel@xmailserver.org, vda.linux@googlemail.com,
rdunlap@xenotime.net, tglx@linutronix.de,
linux-kernel@vger.kernel.org, torvalds@linux-foundation.org,
drepper@redhat.com, stable@kernel.org, hch@lst.de,
jengelh@computergmbh.de, corbet@lwn.net
Subject: Re: timerfd redux
Date: Thu, 13 Sep 2007 08:14:27 +0200 [thread overview]
Message-ID: <20070913061427.321790@gmx.net> (raw)
In-Reply-To: <20070912193920.441cf901.akpm@linux-foundation.org>
> > [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.
In the other thread I commented that the userspace solution
starts to look pretty complex, and I doubt that it can
be made to work in all cases.
> Does Davide have a proposal for the non-destructive fetch?
I don't think so, since he disagrees about it's necessity.
> > 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.
I think this would be wise. I'd like to talk with Davide some
more about the possibilities.
Cheers,
Michael
--
Michael Kerrisk
maintainer of Linux man pages Sections 2, 3, 4, 5, and 7
Want to help with man page maintenance?
Grab the latest tarball at
http://www.kernel.org/pub/linux/docs/manpages ,
read the HOWTOHELP file and grep the source
files for 'FIXME'.
next prev parent reply other threads:[~2007-09-13 6:14 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
2007-09-13 6:14 ` Michael Kerrisk [this message]
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=20070913061427.321790@gmx.net \
--to=mtk-manpages@gmx.net \
--cc=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=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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome