Re: early printk timings way off

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Tim Schmielau wrote:
> So, one jump (probably the first) happens when time_init sets use_tsc.
> Do we understand the other jump as well?

I haven't specifically tested, but I'd put good money on it being
a result of the initialization of cyc2ns_scale.  Before this
is set, cycles_2_ns() returns 0 (which would explain the _exactly_
0 value).  The value of 27.<something> seconds is very likely the
real value based on the TSC (which would mean the BIOS took
a good long time during boot).

So, in summary, this is probably what's happening:

 * from start_kernel - sched_clock() returns jiffies_64 (which
  is pre-initialized high and is not incrementing yet)
 * when use_tsc is set, sched_clock returns 0, until
 * when cyc2ns_scale is set, sched_clock returns TSC-based values,
  representing time from cold machine start

On other platforms, I have sometimes replaced the call to sched_clock()
in printk() with something else that gives valid data from the very first
kernel instruction.

A while ago Andrew Morton said that maybe the clock used here should be
replaceable, using something like the code below.  Does anyone know
if someone worked on this.  If not I'll take a stab at submitting it.

--- devel/kernel/printk.c~printk_clock	2005-08-21 02:14:05.000000000
-0700
+++ devel-akpm/kernel/printk.c	2005-08-21 02:15:14.000000000 -0700
@@ -488,6 +488,11 @@ static int __init printk_time_setup(char

 __setup("time", printk_time_setup);

+__attribute__((weak)) unsigned long long printk_clock(void)
+{
+	return sched_clock();
+}
+
 /*
  * This is printk.  It can be called from any context.  We want it to
work.
  *
@@ -558,7 +563,7 @@ asmlinkage int vprintk(const char *fmt,
 					loglev_char =
default_message_loglevel
 						+ '0';
 				}
-				t = sched_clock();
+				t = printk_clock();
 				nanosec_rem = do_div(t, 1000000000);
 				tlen = sprintf(tbuf,
 						"<%c>[%5lu.%06lu] ",

Regards,
 -- Tim

=============================
Tim Bird
Architecture Group Chair, CE Linux Forum
Senior Staff Engineer, Sony Electronics
=============================

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]
  Powered by Linux