--- 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 12:39:44.597833744 -0700 +++ linux-2.6/mm/page_alloc.c 2008-03-17 15:09:22.582746591 -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 15:09:19.930700085 -0700 +++ linux-2.6/mm/slub.c 2008-03-17 15:09:22.586746882 -0700 @@ -1057,6 +1057,7 @@ static struct page *allocate_slab(struct * Allocation may have failed due to fragmentation. * Try a lower order alloc if possible */ + printk("SLUB: Fallback for %s\n", s->name); page = alloc_slab_page(flags, node, get_order(s->size)); if (page) { pages = 1 << compound_order(page);