There is the need to use the objects per slab in the first part of
__slab_alloc() which is still pretty hot. Copy the number of objects
per slab into the kmem_cache_cpu structure. That way we can get the
value from a cache line that we already need to touch. This brings
the kmem_cache_cpu structure up to 4 even words.
There is no increase in the size of kmem_cache_cpu since the size of object
is rounded to the next word.
Signed-off-by: Christoph Lameter <clameter@sgi.com>
---
include/linux/slub_def.h | 1 +
mm/slub.c | 3 ++-
2 files changed, 3 insertions(+), 1 deletion(-)
Index: linux-2.6/include/linux/slub_def.h
===================================================================
--- linux-2.6.orig/include/linux/slub_def.h 2007-10-26 19:09:16.000000000 -0700
+++ linux-2.6/include/linux/slub_def.h 2007-10-27 07:55:12.000000000 -0700
@@ -17,6 +17,7 @@ struct kmem_cache_cpu {
int node;
unsigned int offset;
unsigned int objsize;
+ unsigned int objects;
};
struct kmem_cache_node {
Index: linux-2.6/mm/slub.c
===================================================================
--- linux-2.6.orig/mm/slub.c 2007-10-27 07:52:12.000000000 -0700
+++ linux-2.6/mm/slub.c 2007-10-27 07:55:12.000000000 -0700
@@ -1512,7 +1512,7 @@ load_freelist:
object = c->page->freelist;
c->freelist = object[c->offset];
- c->page->inuse = s->objects;
+ c->page->inuse = c->objects;
c->page->freelist = c->page->end;
c->node = page_to_nid(c->page);
unlock_out:
@@ -1896,6 +1896,7 @@ static void init_kmem_cache_cpu(struct k
c->node = 0;
c->offset = s->offset / sizeof(void *);
c->objsize = s->objsize;
+ c->objects = s->objects;
}
static void init_kmem_cache_node(struct kmem_cache_node *n)
--
-
| Jeff Garzik | Re: Wasting our Freedom |
| Chuck Ebbert | Why do so many machines need "noapic"? |
| Mathieu Desnoyers | [RFC patch 08/18] cnt32_to_63 should use smp_rmb() |
| Richard Hughes | Add INPUT support to toshiba_acpi |
git: | |
| Jan | [PATCH/RFC] Allow writing loose objects that are corrupted in a pack file |
| Elijah Newren | Trying to use git-filter-branch to compress history by removing large, obsolete bi... |
| Thomas Koch | is gitosis secure? |
| Matthieu Moy | git push to a non-bare repository |
| frantisek holop | booting openbsd on eee without cd-rom |
| GVG GVG | ssh_exchange_identification: Connection closed by remote host |
| Otto Moerbeek | Re: identifying sparse files and get ride of them trick available? |
| Renaud Allard | very weak bridge performance |
| Linux Kernel Mailing List | [ALSA] hda: Added new IDT codec family |
| Linux Kernel Mailing List | usb-storage: clean up unusual_devs.h |
| Linux Kernel Mailing List | USB: Enhance usage of pm_message_t |
| Linux Kernel Mailing List | resource: allow MMIO exclusivity for device drivers |
