> -----Original Message-----
> From: [email protected] [mailto:rsyslog-
> [email protected]] On Behalf Of Jeff Moyer
> Sent: Monday, June 15, 2009 5:13 PM
> To: rsyslog-users
> Subject: Re: [rsyslog] high-performance, low-precision time API under
linux?
> 
> "Rainer Gerhards" <[email protected]> writes:
> 
> >> -----Original Message-----
> >> From: [email protected] [mailto:rsyslog-
> >> [email protected]] On Behalf Of Aaron Wiebe
> >> Sent: Monday, June 15, 2009 4:56 PM
> >> To: rsyslog-users
> >> Subject: Re: [rsyslog] high-performance, low-precision time API under
> > linux?
> >>
> >> I'm slightly confused - whats wrong with gettimeofday()?  It may be
> >> higher precision, but it still
> >> gives you the ability to find the nearest second with a few extra
> > operations.
> >>
> >> -Aaron
> >
> > Much too slow. For example, you can often write a sector quicker to disk
> than
> > gettimeofday() returns...
> 
> Really?  That doesn't sound right to me.  Writing a sector to disk can
> take 8ms or more.  One would hope gettimeofday would be faster than
> that, given that it reports microseconds.  ;)  The exact resolution, of
> course, depends on how your kernel is configured.  Here are the
> measurements (in CPU cycles) I get running each call (time(NULL) and
> gettimeofday(&tv, NULL)) 1000 times:
> 
> $ ./some-cycle-costs
>                                     fewest cycles  avg cycles
> syscall(NR_time)                    2134           2721.99
> syscall(NR_gettimeofday)            2156           2622.87

I've updated the blog post with my test program and some numbers:

http://blog.gerhards.net/2009/06/high-peformance-low-precision-time-api.html

(sorry for keeping this on the blog, but that makes it far easier to also ask
at other places...)

> If I understand your original question properly, you don't need to
> always have a timer running.  You can only schedule a timer when there
> is I/O buffered.  I'm not sure whether your code lends itself to that or
> not.

The code in question would not just be used for buffered writes. The problem
is also that I need to frequently re-set the timer, because it must not write
data if any new has arrived. In order to do this re-set handling properly, I
also need to know the system time.

Of course, I can schedule a specific timer while data is unwritten. But that
is just another tick processing if I don't reset the timer when there is no
need. But... all suggestions are welcome. The overall idea is that I would
like to implement something like the original callouot table. However,
callout worked on a tick. I intended to replace that with timers (more
precisely their pthreads-equivalent, which would give me some aids in awaking
the system in unexpected cases). That was the plan, but I overlooked that it
required many of the costly time() calls.

Rainer

> I would be interested in hearing more about what conditions cause
> gettimeofday to be so slow.
> 
> Cheers,
> Jeff
> 
> >> On Mon, Jun 15, 2009 at 10:48 AM, Rainer
> >> Gerhards<[email protected]> wrote:
> >> > Hi all,
> >> >
> >> > I am having a hard time finding a suitable-fast but tickles solution
to
> >> > obtaining low-precision time API under Linux. Please read here:
> >> >
> >> >
> >
http://blog.gerhards.net/2009/06/high-peformance-low-precision-time-api.html
> >> >
> >> > If I don't find a better solution, I'll probably be forced to run
> > rsyslogd
> >> on
> >> > a tick, which would not be a good thing from a power consumption point
of
> >> > view.
> >> >
> >> > Comments and suggestions are highly appreciated.
> >> >
> >> > Thanks,
> >> > Rainer
> _______________________________________________
> rsyslog mailing list
> http://lists.adiscon.net/mailman/listinfo/rsyslog
> http://www.rsyslog.com
_______________________________________________
rsyslog mailing list
http://lists.adiscon.net/mailman/listinfo/rsyslog
http://www.rsyslog.com

Reply via email to