--- mm/page_alloc.c | 3 +++ mm/slub.c | 1 + 2 files changed, 4 insertions(+) Index: linux-2.6/mm/page_alloc.c =================================================================== --- linux-2.6.orig/mm/page_alloc.c 2008-03-17 11:09:34.549410711 -0700 +++ linux-2.6/mm/page_alloc.c 2008-03-17 11:24:57.248332362 -0700 @@ -1477,6 +1477,9 @@ __alloc_pages(gfp_t gfp_mask, unsigned i if (should_fail_alloc_page(gfp_mask, order)) return NULL; + /* 50% of order 3 allocs fail */ + if (order == 3 && system_state == SYSTEM_RUNNING && (jiffies % 2)) + return NULL; restart: z = zonelist->zones; /* the list of zones suitable for gfp_mask */ Index: linux-2.6/mm/slub.c =================================================================== --- linux-2.6.orig/mm/slub.c 2008-03-17 11:14:17.567547824 -0700 +++ linux-2.6/mm/slub.c 2008-03-17 11:18:02.777891812 -0700 @@ -1540,6 +1540,7 @@ new_slab: (s->flags & __PAGE_ALLOC_FALLBACK)) { if (gfpflags & __GFP_WAIT) local_irq_enable(); + printk("SLUB: Fallback for %s\n", s->name); object = kmalloc_large(s->objsize, gfpflags); if (gfpflags & __GFP_WAIT) local_irq_disable();