mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Pekka Enberg <penberg@kernel.org>
To: Christoph Lameter <cl@linux.com>
Cc: linux-kernel@vger.kernel.org, rientjes@google.com
Subject: Re: [slub p4 6/7] slub: per cpu cache for partial pages
Date: Sat, 20 Aug 2011 13:40:11 +0300 (EEST)	[thread overview]
Message-ID: <alpine.DEB.2.00.1108201339580.3008@localhost6.localdomain6> (raw)
In-Reply-To: <20110809211302.222722588@linux.com>

> @@ -2919,7 +3071,34 @@ static int kmem_cache_open(struct kmem_c
>  	 * The larger the object size is, the more pages we want on the partial
>  	 * list to avoid pounding the page allocator excessively.
>  	 */
> -	set_min_partial(s, ilog2(s->size));
> +	set_min_partial(s, ilog2(s->size) / 2);

Why do we want to make minimum size smaller?

> +
> +	/*
> +	 * cpu_partial determined the maximum number of objects kept in the
> +	 * per cpu partial lists of a processor.
> +	 *
> +	 * Per cpu partial lists mainly contain slabs that just have one
> +	 * object freed. If they are used for allocation then they can be
> +	 * filled up again with minimal effort. The slab will never hit the
> +	 * per node partial lists and therefore no locking will be required.
> +	 *
> +	 * This setting also determines
> +	 *
> +	 * A) The number of objects from per cpu partial slabs dumped to the
> +	 *    per node list when we reach the limit.
> +	 * B) The number of objects in partial partial slabs to extract from the
> +	 *    per node list when we run out of per cpu objects. We only fetch 50%
> +	 *    to keep some capacity around for frees.
> +	 */
> +	if (s->size >= PAGE_SIZE)
> +		s->cpu_partial = 2;
> +	else if (s->size >= 1024)
> +		s->cpu_partial = 6;
> +	else if (s->size >= 256)
> +		s->cpu_partial = 13;
> +	else
> +		s->cpu_partial = 30;

How did you come up with these limits?

> Index: linux-2.6/include/linux/mm_types.h
> ===================================================================
> --- linux-2.6.orig/include/linux/mm_types.h	2011-08-05 12:06:57.571873039 -0500
> +++ linux-2.6/include/linux/mm_types.h	2011-08-09 13:05:13.201582001 -0500
> @@ -79,9 +79,21 @@ struct page {
>  	};
>
>  	/* Third double word block */
> -	struct list_head lru;		/* Pageout list, eg. active_list
> +	union {
> +		struct list_head lru;	/* Pageout list, eg. active_list
>  					 * protected by zone->lru_lock !
>  					 */
> +		struct {		/* slub per cpu partial pages */
> +			struct page *next;	/* Next partial slab */
> +#ifdef CONFIG_64BIT
> +			int pages;	/* Nr of partial slabs left */
> +			int pobjects;	/* Approximate # of objects */
> +#else
> +			short int pages;
> +			short int pobjects;
> +#endif
> +		};
> +	};

Why are the sizes different on 32-bit and 64-bit? Does this change 'struct
page' size?

  reply	other threads:[~2011-08-20 10:40 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-09 21:12 [slub p4 0/7] slub: per cpu partial lists V4 Christoph Lameter
2011-08-09 21:12 ` [slub p4 1/7] slub: free slabs without holding locks (V2) Christoph Lameter
2011-08-20 10:32   ` Pekka Enberg
2011-08-20 15:58     ` Christoph Lameter
2011-08-09 21:12 ` [slub p4 2/7] slub: Remove useless statements in __slab_alloc Christoph Lameter
2011-08-20 10:44   ` Pekka Enberg
2011-08-20 16:01     ` Christoph Lameter
2011-08-09 21:12 ` [slub p4 3/7] slub: Prepare inuse field in new_slab() Christoph Lameter
2011-08-09 21:12 ` [slub p4 4/7] slub: pass kmem_cache_cpu pointer to get_partial() Christoph Lameter
2011-08-09 21:12 ` [slub p4 5/7] slub: return object pointer from get_partial() / new_slab() Christoph Lameter
2011-08-09 21:12 ` [slub p4 6/7] slub: per cpu cache for partial pages Christoph Lameter
2011-08-20 10:40   ` Pekka Enberg [this message]
2011-08-20 16:00     ` Christoph Lameter
     [not found]   ` <CAF1ivSaH9fh6_QvuBkLc5t=zC4mPEAD5ZzsxOuPruDwG9MiZzw@mail.gmail.com>
2011-08-24  7:26     ` Lin Ming
2011-08-24 13:57       ` Christoph Lameter
2011-08-09 21:12 ` [slub p4 7/7] slub: update slabinfo tools to report per cpu partial list statistics Christoph Lameter
2011-08-13 18:28 ` [slub p4 0/7] slub: per cpu partial lists V4 David Rientjes
2011-08-15  8:44   ` Pekka Enberg
2011-08-15 14:29   ` Christoph Lameter
2011-08-20 10:48 ` Pekka Enberg

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=alpine.DEB.2.00.1108201339580.3008@localhost6.localdomain6 \
    --to=penberg@kernel.org \
    --cc=cl@linux.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rientjes@google.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

all inboxes | Powered by JetHome®