From: Joonsoo Kim <iamjoonsoo.kim@lge.com>
To: Pekka Enberg <penberg@kernel.org>
Cc: Christoph Lameter <cl@linux.com>,
Andrew Morton <akpm@linux-foundation.org>,
Joonsoo Kim <js1304@gmail.com>,
David Rientjes <rientjes@google.com>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
Joonsoo Kim <iamjoonsoo.kim@lge.com>
Subject: [PATCH 00/16] slab: overload struct slab over struct page to reduce memory usage
Date: Thu, 22 Aug 2013 17:44:09 +0900 [thread overview]
Message-ID: <1377161065-30552-1-git-send-email-iamjoonsoo.kim@lge.com> (raw)
There is two main topics in this patchset. One is to reduce memory usage
and the other is to change a management method of free objects of a slab.
The SLAB allocate a struct slab for each slab. The size of this structure
except bufctl array is 40 bytes on 64 bits machine. We can reduce memory
waste and cache footprint if we overload struct slab over struct page.
And this patchset change a management method of free objects of a slab.
Current free objects management method of the slab is weird, because
it touch random position of the array of kmem_bufctl_t when we try to
get free object. See following example.
struct slab's free = 6
kmem_bufctl_t array: 1 END 5 7 0 4 3 2
To get free objects, we access this array with following pattern.
6 -> 3 -> 7 -> 2 -> 5 -> 4 -> 0 -> 1 -> END
If we have many objects, this array would be larger and be not in the same
cache line. It is not good for performance.
We can do same thing through more easy way, like as the stack.
This patchset implement it and remove complex code for above algorithm.
This makes slab code much cleaner.
This patchset is based on v3.11-rc6, but tested on v3.10.
Thanks.
Joonsoo Kim (16):
slab: correct pfmemalloc check
slab: change return type of kmem_getpages() to struct page
slab: remove colouroff in struct slab
slab: remove nodeid in struct slab
slab: remove cachep in struct slab_rcu
slab: put forward freeing slab management object
slab: overloading the RCU head over the LRU for RCU free
slab: use well-defined macro, virt_to_slab()
slab: use __GFP_COMP flag for allocating slab pages
slab: change the management method of free objects of the slab
slab: remove kmem_bufctl_t
slab: remove SLAB_LIMIT
slab: replace free and inuse in struct slab with newly introduced
active
slab: use struct page for slab management
slab: remove useless statement for checking pfmemalloc
slab: rename slab_bufctl to slab_freelist
include/linux/mm_types.h | 21 +-
include/linux/slab.h | 9 +-
include/linux/slab_def.h | 4 +-
mm/slab.c | 563 ++++++++++++++++++----------------------------
4 files changed, 237 insertions(+), 360 deletions(-)
--
1.7.9.5
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next reply other threads:[~2013-08-22 8:44 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-22 8:44 Joonsoo Kim [this message]
2013-08-22 8:44 ` [PATCH 01/16] slab: correct pfmemalloc check Joonsoo Kim
2013-09-11 14:30 ` Christoph Lameter
2013-09-12 6:51 ` Joonsoo Kim
2013-08-22 8:44 ` [PATCH 02/16] slab: change return type of kmem_getpages() to struct page Joonsoo Kim
2013-08-22 17:49 ` Christoph Lameter
2013-08-23 6:40 ` Joonsoo Kim
2013-09-11 14:31 ` Christoph Lameter
2013-08-22 8:44 ` [PATCH 03/16] slab: remove colouroff in struct slab Joonsoo Kim
2013-09-11 14:32 ` Christoph Lameter
2013-08-22 8:44 ` [PATCH 04/16] slab: remove nodeid " Joonsoo Kim
2013-08-22 17:51 ` Christoph Lameter
2013-08-23 6:49 ` Joonsoo Kim
2013-08-22 8:44 ` [PATCH 05/16] slab: remove cachep in struct slab_rcu Joonsoo Kim
2013-08-22 17:53 ` Christoph Lameter
2013-08-23 6:53 ` Joonsoo Kim
2013-08-23 13:42 ` Christoph Lameter
2013-08-23 14:24 ` JoonSoo Kim
2013-08-23 15:41 ` Christoph Lameter
2013-08-23 16:12 ` JoonSoo Kim
2013-09-02 8:38 ` [PATCH 0/4] slab: implement byte sized indexes for the freelist of a slab Joonsoo Kim
2013-09-02 8:38 ` [PATCH 1/4] slab: factor out calculate nr objects in cache_estimate Joonsoo Kim
2013-09-02 8:38 ` [PATCH 2/4] slab: introduce helper functions to get/set free object Joonsoo Kim
2013-09-02 8:38 ` [PATCH 3/4] slab: introduce byte sized index for the freelist of a slab Joonsoo Kim
2013-09-02 8:38 ` [PATCH 4/4] slab: make more slab management structure off the slab Joonsoo Kim
2013-09-03 14:15 ` [PATCH 0/4] slab: implement byte sized indexes for the freelist of a slab Christoph Lameter
2013-09-04 8:33 ` Joonsoo Kim
2013-09-05 6:55 ` Joonsoo Kim
2013-09-05 14:33 ` Christoph Lameter
2013-09-06 5:58 ` Joonsoo Kim
2013-09-04 2:17 ` Wanpeng Li
2013-09-04 2:17 ` Wanpeng Li
[not found] ` <5226985f.4475320a.1c61.2623SMTPIN_ADDED_BROKEN@mx.google.com>
2013-09-04 8:28 ` Joonsoo Kim
2013-09-11 14:33 ` [PATCH 05/16] slab: remove cachep in struct slab_rcu Christoph Lameter
2013-08-22 8:44 ` [PATCH 06/16] slab: put forward freeing slab management object Joonsoo Kim
2013-09-11 14:35 ` Christoph Lameter
2013-08-22 8:44 ` [PATCH 07/16] slab: overloading the RCU head over the LRU for RCU free Joonsoo Kim
2013-08-27 22:06 ` Jonathan Corbet
2013-08-28 6:36 ` Joonsoo Kim
2013-09-11 14:39 ` Christoph Lameter
2013-09-12 6:55 ` Joonsoo Kim
2013-09-12 14:21 ` Christoph Lameter
2013-08-22 8:44 ` [PATCH 08/16] slab: use well-defined macro, virt_to_slab() Joonsoo Kim
2013-09-11 14:40 ` Christoph Lameter
2013-08-22 8:44 ` [PATCH 09/16] slab: use __GFP_COMP flag for allocating slab pages Joonsoo Kim
2013-08-22 18:00 ` Christoph Lameter
2013-08-23 6:55 ` Joonsoo Kim
2013-08-22 8:44 ` [PATCH 10/16] slab: change the management method of free objects of the slab Joonsoo Kim
2013-08-22 8:44 ` [PATCH 11/16] slab: remove kmem_bufctl_t Joonsoo Kim
2013-08-22 8:44 ` [PATCH 12/16] slab: remove SLAB_LIMIT Joonsoo Kim
2013-08-22 8:44 ` [PATCH 13/16] slab: replace free and inuse in struct slab with newly introduced active Joonsoo Kim
2013-08-22 8:44 ` [PATCH 14/16] slab: use struct page for slab management Joonsoo Kim
2013-08-22 8:44 ` [PATCH 15/16] slab: remove useless statement for checking pfmemalloc Joonsoo Kim
2013-08-22 8:44 ` [PATCH 16/16] slab: rename slab_bufctl to slab_freelist Joonsoo Kim
2013-08-22 16:47 ` [PATCH 00/16] slab: overload struct slab over struct page to reduce memory usage Christoph Lameter
2013-08-23 6:35 ` Joonsoo Kim
2013-09-04 3:38 ` Wanpeng Li
2013-09-04 3:38 ` Wanpeng Li
[not found] ` <5226ab2c.02092b0a.5eed.ffffd7e4SMTPIN_ADDED_BROKEN@mx.google.com>
2013-09-04 8:25 ` Joonsoo Kim
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=1377161065-30552-1-git-send-email-iamjoonsoo.kim@lge.com \
--to=iamjoonsoo.kim@lge.com \
--cc=akpm@linux-foundation.org \
--cc=cl@linux.com \
--cc=js1304@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=penberg@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