> On 7/22/07, Michael Kerrisk <mtk-manpages@xxxxxxx> wrote:
> > The value returned by read(2)ing from a timerfd file descriptor is
> > the
> > number of timer overruns. In 2.6.22, this value is 4 bytes, limiting
> > the overrun count to 2^32. Consider an application where the timer
> > frequency
> > was 100 kHz (feasible in the not-too-distant future, I would guess),
> > then
> > the overrun counter would cycle after ~40000 seconds (~11 hours).
> > Furthermore returning 4 bytes from the read() is inconsistent with
> > eventfd
> > file descriptors, which return 8 byte integers from a read().
>
> I'm feeling slow, and think I'm missing something. Why is this an
> issue? Wouldn't userspace just keep track of the last overrun count,
> and subtract the two to get the overruns-since-last-read?
The value returned by read() is the number of overruns since
the last read().
> That makes
> it oblivious to rollovers, unless it can't manage to do a read once
> every 11 hours.
That's the point that the change is meant to address.
> (This is the same sort of thing we already have to deal with in
> certain situations, such as network stat counters on 32 bit
> platforms.)
But userspace can't deal with the condition accurately,
so why
require userspace to worry about this when we could just use
a 64-bit value instead?