[PATCH] printk: Print cpuid along with the timestamp with CONFIG_PRINTK_TIME

Previous thread: [PATCH] x86: c1e_idle: don't mark TSC unstable if CPU has invariant TSC by Andreas Herrmann on Thursday, September 18, 2008 - 12:12 pm. (6 messages)

Next thread: [PATCH -tip/master] x86: io-apic - restore_IO_APIC_setup NULL pointer quick fix by Cyrill Gorcunov on Thursday, September 18, 2008 - 12:37 pm. (3 messages)
From: Ravikiran G Thirumalai
Date: Thursday, September 18, 2008 - 12:37 pm

I found it useful to have the cpuid of the printing cpu along with the
timestamp -- especially while debugging hangs during bootups.

I don't know why this hasn't been implemened in the kernel yet, and
cannot think of a strong reason not to have it.  Yes, the cpuid prefix will
take 5 more characters per line,  but having  the cpuid info is worth it,
I think.

Thanks,
Kiran

---


Add cpuid information to printk if CONFIG_PRINTK_TIME is enabled.
This information is useful to debug hangs and bootup issues.

Signed-off-by: Ravikiran Thirumalai <kiran@scalex86.org>

Index: linux-git/kernel/printk.c
===================================================================
--- linux-git.orig/kernel/printk.c	2008-09-16 15:37:48.000000000 -0700
+++ linux-git/kernel/printk.c	2008-09-18 12:27:10.489662938 -0700
@@ -739,9 +739,10 @@ asmlinkage int vprintk(const char *fmt, 
 
 				t = cpu_clock(printk_cpu);
 				nanosec_rem = do_div(t, 1000000000);
-				tlen = sprintf(tbuf, "[%5lu.%06lu] ",
+				tlen = sprintf(tbuf, "[%5lu.%06lu:%d] ",
 						(unsigned long) t,
-						nanosec_rem / 1000);
+						nanosec_rem / 1000,
+						printk_cpu);
 
 				for (tp = tbuf; tp < tbuf + tlen; tp++)
 					emit_log_char(*tp);
--

From: Andrew Morton
Date: Thursday, September 18, 2008 - 12:51 pm

On Thu, 18 Sep 2008 12:37:20 -0700

Yes, I guess it could be useful sometimes.  otoh anyone who is down at
that level of detail and is using printk to debug something can add
their own %d/smp_processor_id().

Your patch illogically ties the cpu-id-printing feature to the
printk.time feature.  I guess that's liveable with, but
Documentation/kernel-parameters.txt should be updated.

Anyone who was parsing that output might get a shock, but that's
liveable with too.  Probably their parser will continue to work anwyay.


I don't know whether the usefulness of this feature outweighs its
various costs.  Input is sought.
--

From: Ravikiran G Thirumalai
Date: Thursday, September 18, 2008 - 5:35 pm

Didn't realize Documentation/kernel-parameters.txt had reference and even a
runtime parameter to control this!  I always enabled CONFIG_PRINTK_TIME
to get timestamps. Here's an updated patch.

As for the cpuid with the timestamp, the timestamp that is being
is  the printed the cpu's time stamp.

---

Add cpuid information to printk if CONFIG_PRINTK_TIME is enabled.
This information is useful to debug hangs and boot issues.

Signed-off-by: Ravikiran Thirumalai <kiran@scalex86.org>

Index: linux-git/kernel/printk.c
===================================================================
--- linux-git.orig/kernel/printk.c	2008-09-16 15:37:48.000000000 -0700
+++ linux-git/kernel/printk.c	2008-09-18 12:27:10.489662938 -0700
@@ -739,9 +739,10 @@ asmlinkage int vprintk(const char *fmt, 
 
 				t = cpu_clock(printk_cpu);
 				nanosec_rem = do_div(t, 1000000000);
-				tlen = sprintf(tbuf, "[%5lu.%06lu] ",
+				tlen = sprintf(tbuf, "[%5lu.%06lu:%d] ",
 						(unsigned long) t,
-						nanosec_rem / 1000);
+						nanosec_rem / 1000,
+						printk_cpu);
 
 				for (tp = tbuf; tp < tbuf + tlen; tp++)
 					emit_log_char(*tp);
Index: linux-git/Documentation/kernel-parameters.txt
===================================================================
--- linux-git.orig/Documentation/kernel-parameters.txt	2008-09-16 11:30:13.000000000 -0700
+++ linux-git/Documentation/kernel-parameters.txt	2008-09-18 17:11:35.167079714 -0700
@@ -1687,7 +1687,10 @@ and is between 256 and 4096 characters. 
 			default: off.
 
 	printk.time=	Show timing data prefixed to each printk message line
-			Format: <bool>  (1/Y/y=enable, 0/N/n=disable)
+			Format: <bool>  (1/Y/y=enable, 0/N/n=disable).
+			Per-cpu timestamps are prefixed as
+			"[sssss.uuuuuu:cpuid]" on each and every line printed,
+			if this option is enabled.
 
 	profile=	[KNL] Enable kernel profiling via /proc/profile
 			Format: [schedule,]<number>
--

From: Marcin Slusarz
Date: Friday, September 19, 2008 - 10:15 am

Do we really need this information on UP kernels?
Why don't you add another option for this feature?

Marcin
--

From: Ravikiran G Thirumalai
Date: Friday, September 19, 2008 - 11:39 am

I thought about it, and left it as the way it is to have a consistent format
between UP and SMP.  With most of the modern cpus being multicore, or headed
that way, and since the entire timestamp prefix  can be controlled by a boot
option, is it worth having different formats for UP and SMP?  Most distros
ship SMP kernels anyways.
--

Previous thread: [PATCH] x86: c1e_idle: don't mark TSC unstable if CPU has invariant TSC by Andreas Herrmann on Thursday, September 18, 2008 - 12:12 pm. (6 messages)

Next thread: [PATCH -tip/master] x86: io-apic - restore_IO_APIC_setup NULL pointer quick fix by Cyrill Gorcunov on Thursday, September 18, 2008 - 12:37 pm. (3 messages)