Ring buffer size [Was: Re: What is "Kernel OOPs"?]
On Thu, Mar 04, 2004 at 05:44:46PM -0800, Vineet Kumar wrote:
> * (Einstein9112@yahoo.com)[20040304 09:19]:
> > dmesg just displays what the kernel outputs during boot. Usually you
> > want to type "dmesg | less" so that you can scroll through all the
> > messages.
>
> More precisely, kernel messages are sent to a buffer known
> as the "kernel ring buffer". dmesg displays the contents of
> this buffer. Many messages are recorded there during boot,
> but it's not only boot messages that go there. In
> particular, for a long-running (or long-winded) system,
> dmesg may not show messages from boot, since more recent
> messages may have pushed those old boot messages out of the
> ring buffer.
I've been compiling everything from the cryptographic menu into my
kernels (dunno whether I need all that or not), but since then, when it
boots, the output from the cryptographic tests apparently overflow the
standard 16K buffer, so that, even just after a boot, part of the dmesg
output is cut off. I don't know the ultimate effect - it could make the
system slower- but I've added this patch to my kernel sources:
--------------- cut -----------------
diff -Naur -x .config linux-2.4.23-orig/kernel/printk.c linux-2.4.23/kernel/printk.c
--- linux-2.4.23-orig/kernel/printk.c 2003-12-02 18:24:01.000000000 -0600
+++ linux-2.4.23/kernel/printk.c 2003-12-08 20:29:04.000000000 -0600
@@ -37,7 +37,7 @@
#elif defined(CONFIG_SMP)
#define LOG_BUF_LEN (32768)
#else
-#define LOG_BUF_LEN (16384) /* This must be a power of two */
+#define LOG_BUF_LEN (32768) /*FIXED! This must be a power of two */
#endif
#else /* CONFIG_LOG_BUF_SHIFT */
#define LOG_BUF_LEN (1 << CONFIG_LOG_BUF_SHIFT)
----------------- cut ----------------
It could be cleaner - I could have eliminated the elif condition and
simply had a single define, but this works. Oh, and you have to use the
"-s32768" option with dmesg to display the whole output.
Reply to: