Re: gettimeofday() in 2.6.24

Previous thread: I²C by Michelle Konzack on Tuesday, April 15, 2008 - 6:15 pm. (1 message)

Next thread: [PATCH] Re: Bad network performance over 2Gbps by Kok, Auke on Thursday, April 17, 2008 - 1:37 pm. (8 messages)
To: <linux-kernel@...>
Date: Thursday, April 17, 2008 - 1:31 pm

Hi, I was trying to figure out how gettimeofday() measures time in
2.6.24-arm2, in which a free-running timer is added to improve the
resolution of gettimeofday() from 10ms to us, I can trace down to
do_gettimeofday() as follows:

http://lxr.linux.no/linux+v2.6.24/arch/arm/kernel/time.c#L240
239#ifndef CONFIG_GENERIC_TIME
240void do_gettimeofday(struct timeval *tv)
241{
242 unsigned long flags;
243 unsigned long seq;
244 unsigned long usec, sec;
245
246 do {
247 seq = read_seqbegin_irqsave(&xtime_lock, flags);
248 usec = system_timer->offset();
249 sec = xtime.tv_sec;
250 usec += xtime.tv_nsec / 1000;
251 } while (read_seqretry_irqrestore(&xtime_lock, seq, flags));
252
253 /* usec may have gone up a lot: be safe */
254 while (usec >= 1000000) {
255 usec -= 1000000;
256 sec++;
257 }
258
259 tv->tv_sec = sec;
260 tv->tv_usec = usec;
261}
262
263EXPORT_SYMBOL(do_gettimeofday);

but I haven't quite figured out how gettimeofday() actually gets time
from this added timer, also how xtime is updated?

Thanks, Jack
--

To: Jack Harvard <jack.harvard@...>
Cc: <linux-kernel@...>
Date: Thursday, April 17, 2008 - 2:13 pm

system_timer->offset() uses the added timer to return the number of
usecs since the last timer tick. It's potentially different for each
specific type of arm blade, and the function often has "gettimeoffset"
in the name.

"xtime" is updated in the core kernel code.

Chris
--

To: Chris Friesen <cfriesen@...>
Cc: <linux-kernel@...>
Date: Friday, April 18, 2008 - 4:54 am

is "xtime" updated by the time tick clock timer, i.e., the timer which
generates interrupts every 1/HZ second to the kernel. Put it in
another way,
does gettimeofday get time in two parts 1) seconds from xtime.tv_sec,
updated by timer0, 2) microseconds from xtime.tv_nsec +
system_timer->offset(), updated by timer0 and timer3.

Do you mean the code here
"http://lxr.linux.no/linux+v2.6.24/kernel/time/timekeeping.c#L45"
--

To: Jack Harvard <jack.harvard@...>
Cc: <linux-kernel@...>
Date: Friday, April 18, 2008 - 10:35 am

Yes, I think xtime is updated by the tick timer.

system_timer->offset() may be updated by different mechanisms, depending

No. As I said, the function usually has "gettimeoffset" in the name and
it's specific to arm so it would be under arch/arm. For instance, on
Xscale boards it's ixp2000_gettimeoffset() in arch/arm/mach-ixp2000/core.c.

For more information you might want to look at the code in arch/arm or
else talk to the arm developers on the linux-arm-kernel mailing list.

Chris
--

Previous thread: I²C by Michelle Konzack on Tuesday, April 15, 2008 - 6:15 pm. (1 message)

Next thread: [PATCH] Re: Bad network performance over 2Gbps by Kok, Auke on Thursday, April 17, 2008 - 1:37 pm. (8 messages)