mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Randy Dunlap <randy.dunlap@oracle.com>
To: Christoph Lameter <clameter@sgi.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Michal Piotrowski <michal.k.k.piotrowski@gmail.com>,
	linux-kernel@vger.kernel.org
Subject: Re: 2.6.22-rc2-mm1
Date: Wed, 23 May 2007 18:21:45 -0700	[thread overview]
Message-ID: <20070523182145.7d7f1f7e.randy.dunlap@oracle.com> (raw)
In-Reply-To: <Pine.LNX.4.64.0705231635370.23144@schroedinger.engr.sgi.com>

On Wed, 23 May 2007 16:36:07 -0700 (PDT) Christoph Lameter wrote:

> On Wed, 23 May 2007, Andrew Morton wrote:
> 
> > A few words in slub.txt, perhaps?

Thanks for the update.  A few nits below.

> SLUB: More documentation
> 
> Update documentation to describe how to read a SLUB error report.
> Add slub parameters to Documentation/kernel-parameters.
> 
> Signed-off-by: Christoph Lameter <clameter@sgi.com>
> 
> ---
>  Documentation/kernel-parameters.txt |   37 +++++++++-
>  Documentation/vm/slub.txt           |  133 +++++++++++++++++++++++++++++++++---
>  2 files changed, 157 insertions(+), 13 deletions(-)
> 
> Index: slub/Documentation/kernel-parameters.txt
> ===================================================================
> --- slub.orig/Documentation/kernel-parameters.txt	2007-05-23 15:41:58.000000000 -0700
> +++ slub/Documentation/kernel-parameters.txt	2007-05-23 15:57:07.000000000 -0700
> @@ -1610,6 +1610,37 @@ and is between 256 and 4096 characters. 
>  
>  	slram=		[HW,MTD]
>  
> +	slub_debug	[MM, SLUB]
> +			Enabling slub_debug will allow to determine the culprit

			s/will allow/allows/
	then
			allows _____ (the verb needs an object)
			e.g., someone | us | you (clameter@sgi.com :)

> +			if slab objects become corrupted. Enabling slub_debug
> +			creates guard zones around objects and poisons objects
> +			when not in use. Also tracks the last alloc / free.
> +			For more information see Documentation/vm/slub.txt.
> +
> +	slub_max_order= [MM, SLUB]
> +			Determines the maximum allowed order for slabs. Setting
> +			this too high may cause fragmentation.
> +			For more information see Documentation/vm/slub.txt.
> +
> +	slub_min_objects=	[M, SLUB]

				MM

> +			The minimum objects per slab. SLUB will increase the
> +			slab order up to slub_max_order to generate a
> +			sufficiently big slab to satisfy the number of objects.
> +			The higher the number of objects the smaller the overhead
> +			of tracking slabs.
> +			For more information see Documentation/vm/slub.txt.
> +

> Index: slub/Documentation/vm/slub.txt
> ===================================================================
> --- slub.orig/Documentation/vm/slub.txt	2007-05-23 15:59:05.000000000 -0700
> +++ slub/Documentation/vm/slub.txt	2007-05-23 16:34:20.000000000 -0700
> @@ -1,13 +1,9 @@
>  Short users guide for SLUB
>  --------------------------
>  
> -First of all slub should transparently replace SLAB. If you enable
> -SLUB then everything should work the same (Note the word "should".
> -There is likely not much value in that word at this point).
> -
>  The basic philosophy of SLUB is very different from SLAB. SLAB
>  requires rebuilding the kernel to activate debug options for all
> -SLABS. SLUB always includes full debugging but its off by default.
> +slab caches. SLUB always includes full debugging but its off by default.

                                                        it is

>  SLUB can enable debugging only for selected slabs in order to avoid
>  an impact on overall system performance which may make a bug more
>  difficult to find.
> @@ -76,13 +72,28 @@ of objects.
>  Careful with tracing: It may spew out lots of information and never stop if
>  used on the wrong slab.
>  
> -SLAB Merging
> +Slab merging
>  ------------
>  
> -If no debugging is specified then SLUB may merge similar slabs together
> +If no debug options are specified then SLUB may merge similar slabs together
>  in order to reduce overhead and increase cache hotness of objects.
>  slabinfo -a displays which slabs were merged together.
>  
> +Slab validation
> +---------------
> +
> +SLUB can validate all object if the kernel was booted with slub_debug. In
> +order to do so you must have the slabinfo tool. Then you can do
> +
> +slabinfo -v
> +
> +which will test all objects. Output will be generated to the syslog.
> +
> +This also works in a more limited way if boot was without slab debug.
> +In that case slabinfo -v will simply tests all reachable objects. Usually

                      drop: will

> +these are in the cpu slabs and the partial slabs. Full slabs are not

                    CPU

> +tracked by SLUB in a non debug situation.
> +
>  Getting more performance
>  ------------------------
>  
> @@ -91,9 +102,9 @@ list_lock once in a while to deal with p
>  governed by the order of the allocation for each slab. The allocations
>  can be influenced by kernel parameters:
>  
> -slub_min_objects=x		(default 8)
> +slub_min_objects=x		(default 4)
>  slub_min_order=x		(default 0)
> -slub_max_order=x		(default 4)
> +slub_max_order=x		(default 1)
>  
>  slub_min_objects allows to specify how many objects must at least fit
>  into one slab in order for the allocation order to be acceptable.
> @@ -109,5 +120,107 @@ longer be checked. This is useful to avo
>  super large order pages to fit slub_min_objects of a slab cache with
>  large object sizes into one high order page.
>  
> +SLUB Debug output
> +-----------------
> +
> +Here is a sample of slub debug output:
> +
> +@@@ SLUB kmalloc-8: Restoring redzone (0xcc) from 0xc90f6d28-0xc90f6d2b
> +
...
> +
> +If SLUB encounters a corrupted object then it will perform the following
> +actions

   actions:

> +
> +1. Isolation and report of the issue
> +
> +This will be a message in the system log starting with
> +
> +*** SLUB <slab cache affected>: <What went wrong>@<object address>
> +offset=<offset of object into slab> flags=<slabflags>
> +inuse=<objects in use in this slab> freelist=<first free object in slab>
> +
> +2. Report on how the problem was dealt with in order to ensure the continued
> +operation of the system.
> +
> +These are messages in the system log beginning with
> +
> +@@@ SLUB <slab cache affected>: <corrective action taken>
> +
> +
> +In the above sample SLUB found that the Redzone of an active object has
> +been overwritten. Here a string of 8 characters was written into a slab that
> +has the length of 8 characters. However, a 8 character string needs a
> +terminating 0. That zero has overwritten the first byte of the Redzone field.
> +After reporting the details of the issue encountered the @@@ SLUB message
> +tell us that SLUB has restored the redzone to its proper value and then
> +system operations continue.
> +
> +Various types of lines can follow the @@@ SLUB line:
> +
> +Bytes b4 <address> : <bytes>
> +	Show a few bytes before the object where the problem was detected.
> +	Can be useful if the corruption does not stop with the start of the
> +	object.
> +
> +Object <address> : <bytes>
> +	The bytes of the object. If the object is inactive then the bytes
> +	typically contain poisoning values. Any non poison value shows a

                                                non-poison

> +	corruption by a write after free.
> +
> +Redzone <address> : <bytes>
> +	The redzone following the object. The redzone is used to detect
> +	writes after the object. All bytes should always have the same
> +	value. If there is any deviation then it is due to a write after
> +	the object boundary.
> +
> +Freepointer
> +	The pointer to the next free object in the slab. May become
> +	corrupted if overwriting continues after the red zone.
> +
> +Last alloc:
> +Last free:
> +	Shows the address from which the object was allocated/freed last.
> +	We note the pid, the time and the cpu that did so. This is usually

                                          CPU

> +	the most useful information to figure out where things went wrong.
> +	Here get_modalias did an kmalloc(8) instead of a kmalloc(9).
> +
> +Filler <address> : <bytes>
> +	Unused data to fill up the space in order to get the next object
> +	properly aligned. In the debug case we make sure that there are
> +	at least 4 bytes of filler. This allow for the detection of writes
> +	before the object.
> +
> +Following the filler will be a stackdump. That stackdump describes the
> +location where the error was detected. The cause of the corruption is more
> +likely to be found by looking at the information about the last alloc / free.



How large is the RedZone?  Is it a fixed size or does it vary?

---
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***

  reply	other threads:[~2007-05-24  1:17 UTC|newest]

Thread overview: 104+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-05-23  7:42 2.6.22-rc2-mm1 Andrew Morton
2007-05-23  7:48 ` 2.6.22-rc2-mm1 Andrew Morton
2007-05-23  9:22   ` 2.6.22-rc2-mm1 Rafael J. Wysocki
2007-05-23 14:47     ` 2.6.22-rc2-mm1 Alan Stern
2007-05-23 15:54       ` 2.6.22-rc2-mm1 Andrew Morton
2007-05-23 16:09         ` 2.6.22-rc2-mm1 Oleg Nesterov
2007-05-23 17:00         ` 2.6.22-rc2-mm1 Alan Stern
2007-05-23 16:21           ` 2.6.22-rc2-mm1 Oleg Nesterov
2007-05-23 18:41             ` 2.6.22-rc2-mm1 Alan Stern
2007-05-23  9:47 ` 2.6.22-rc2-mm1 Michal Piotrowski
2007-05-23 17:18   ` 2.6.22-rc2-mm1 Christoph Lameter
2007-05-23 21:05     ` 2.6.22-rc2-mm1 Michal Piotrowski
2007-05-23 22:01       ` 2.6.22-rc2-mm1 Andrew Morton
2007-05-23 22:18         ` 2.6.22-rc2-mm1 Michal Piotrowski
2007-05-23 22:27         ` 2.6.22-rc2-mm1 Christoph Lameter
2007-05-23 22:37           ` 2.6.22-rc2-mm1 Andrew Morton
2007-05-23 23:36             ` 2.6.22-rc2-mm1 Christoph Lameter
2007-05-24  1:21               ` Randy Dunlap [this message]
2007-05-24  2:43                 ` 2.6.22-rc2-mm1 Christoph Lameter
2007-05-24  3:00                 ` 2.6.22-rc2-mm1 Christoph Lameter
2007-05-24  3:26                   ` 2.6.22-rc2-mm1 Randy Dunlap
2007-05-24  7:31                   ` 2.6.22-rc2-mm1 Ingo Molnar
2007-05-24 16:40                     ` 2.6.22-rc2-mm1 Christoph Lameter
2007-05-24 21:20                     ` 2.6.22-rc2-mm1 Christoph Lameter
2007-05-24 21:29                       ` 2.6.22-rc2-mm1 Andrew Morton
2007-05-24 21:55                         ` 2.6.22-rc2-mm1 Randy Dunlap
2007-05-24 22:35                           ` 2.6.22-rc2-mm1 Christoph Lameter
2007-05-24 22:53                             ` 2.6.22-rc2-mm1 Andrew Morton
2007-05-30 21:34                             ` [PATCH 1/3] hexdump: more output formatting Randy Dunlap
2007-05-30 21:42                               ` Christoph Lameter
2007-05-30 21:45                                 ` Randy Dunlap
2007-05-31  1:45                                 ` [PATCH 1/3 v2] " Randy Dunlap
2007-05-30 21:56                               ` [PATCH 1/3] " Satyam Sharma
2007-05-30 22:03                                 ` Randy Dunlap
2007-05-30 22:11                                   ` Satyam Sharma
2007-05-30 22:18                                     ` Christoph Lameter
2007-05-30 22:41                                       ` Satyam Sharma
2007-05-30 22:44                                         ` Randy Dunlap
2007-05-30 22:48                                           ` Satyam Sharma
2007-05-30 22:59                                             ` Randy Dunlap
2007-05-30 22:25                                     ` Randy Dunlap
2007-05-30 22:36                               ` Jesper Juhl
2007-05-30 23:04                                 ` Randy Dunlap
2007-05-30 23:07                                   ` Jesper Juhl
2007-05-30 21:34                             ` [PATCH 2/3 -mm] slub: use lib/hexdump Randy Dunlap
2007-05-30 21:45                               ` Christoph Lameter
2007-05-30 21:48                                 ` Randy Dunlap
2007-05-30 21:51                                   ` Christoph Lameter
2007-05-30 21:54                                     ` Randy Dunlap
2007-05-30 22:03                                       ` Christoph Lameter
2007-05-30 22:06                                         ` Randy Dunlap
2007-05-31  1:39                                           ` Randy Dunlap
2007-05-23 22:24       ` 2.6.22-rc2-mm1 Christoph Lameter
2007-05-23 12:01 ` 2.6.22-rc2-mm1 Gabriel C
2007-05-23 16:01   ` 2.6.22-rc2-mm1 Andrew Morton
2007-05-23 15:02 ` 2.6.22-rc2-mm1 William Lee Irwin III
2007-05-23 15:28 ` 2.6.22-rc2-mm1 William Lee Irwin III
2007-05-23 16:08 ` 2.6.22-rc2-mm1 William Lee Irwin III
2007-05-23 16:29 ` 2.6.22-rc2-mm1 William Lee Irwin III
2007-05-23 17:27 ` 2.6.22-rc2-mm1 William Lee Irwin III
2007-05-23 23:17 ` 2.6.22-rc2-mm1 Zan Lynx
2007-05-23 23:27   ` 2.6.22-rc2-mm1 Andrew Morton
2007-05-23 23:40   ` 2.6.22-rc2-mm1 Jiri Kosina
2007-05-24  3:28     ` 2.6.22-rc2-mm1 Dmitry Torokhov
2007-05-24  7:28       ` 2.6.22-rc2-mm1 Jiri Kosina
2007-05-30 14:08       ` [PATCH] Input: i8042 - cleanup of debug code (was Re: 2.6.22-rc2-mm1) Jiri Kosina
2007-05-30 14:27         ` Dmitry Torokhov
2007-05-30 14:30           ` Jiri Kosina
     [not found]     ` <1180058760.7001.6.camel@oberon.rnd.esoft.com>
2007-05-25  7:23       ` 2.6.22-rc2-mm1 Jiri Kosina
2007-05-23 23:50   ` 2.6.22-rc2-mm1 Andrew Morton
2007-05-24 10:36 ` rmmod e1000 hangs (Was Re: 2.6.22-rc2-mm1) Jeremy Fitzhardinge
2007-05-24 10:47   ` Herbert Xu
2007-05-24 10:54     ` Herbert Xu
2007-05-24 14:44       ` Kok, Auke
2007-05-25 12:54         ` Herbert Xu
2007-05-25 13:04           ` Herbert Xu
2007-05-25 13:32             ` Herbert Xu
2007-05-25 22:12               ` Kok, Auke
2007-05-25 23:48                 ` Jeff Garzik
2007-05-26  0:10                   ` Herbert Xu
2007-05-25 21:20 ` idle=poll burns my box [was Re: 2.6.22-rc2-mm1] J.A. Magallón
2007-05-25 21:52   ` Andrew Morton
2007-05-26 15:59 ` 2.6.22-rc2-mm1 Tilman Schmidt
2007-05-26 16:01   ` 2.6.22-rc2-mm1 Andrew Morton
2007-05-27 22:16     ` 2.6.22-rc2-mm1 Tilman Schmidt
2007-05-27 22:41       ` 2.6.22-rc2-mm1 Kay Sievers
2007-05-28 17:22         ` 2.6.22-rc2-mm1 Cornelia Huck
2007-05-29  7:56           ` 2.6.22-rc2-mm1 Kay Sievers
2007-05-29  7:25         ` 2.6.22-rc2-mm1 Cornelia Huck
2007-05-29 14:43           ` 2.6.22-rc2-mm1 Matt Mackall
2007-05-29 16:55           ` 2.6.22-rc2-mm1 Tilman Schmidt
2007-05-29 17:25             ` 2.6.22-rc2-mm1 Cornelia Huck
2007-06-01 12:38               ` 2.6.22-rc2-mm1 Greg KH
2007-07-03  8:50                 ` 2.6.22-rc2-mm1 Cornelia Huck
2007-07-12  6:00                   ` 2.6.22-rc2-mm1 Greg KH
2007-05-28 10:27 ` 2.6.22-rc2-mm1 - a different BUG: at mm/slab.c:777 __find_general_cachep() Valdis.Kletnieks
2007-05-28 10:43   ` Pekka Enberg
2007-05-28 11:12     ` Valdis.Kletnieks
2007-05-29  4:22 ` 2.6.22-rc2-mm1: SLUB Randy Dunlap
2007-05-29 17:13   ` Christoph Lameter
2007-05-29 18:13     ` Randy Dunlap
2007-05-29 18:30       ` Christoph Lameter
2007-05-29 18:32       ` Christoph Lameter
2007-05-29 18:59         ` Randy Dunlap

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070523182145.7d7f1f7e.randy.dunlap@oracle.com \
    --to=randy.dunlap@oracle.com \
    --cc=akpm@linux-foundation.org \
    --cc=clameter@sgi.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=michal.k.k.piotrowski@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome