On (10/05/07 15:27), Christoph Lameter didst pronounce: > On Thu, 10 May 2007, Mel Gorman wrote: > > > On (10/05/07 15:11), Christoph Lameter didst pronounce: > > > On Thu, 10 May 2007, Mel Gorman wrote: > > > > > > > I see the gfpmask was 0x84020. That doesn't look like __GFP_WAIT was > > > > set, > > > > right? Does that mean that SLUB is trying to allocate pages atomically? > > > > If so, > > > > it would explain why this situation could still occur even though > > > > high-order > > > > allocations that could sleep would succeed. > > > > > > SLUB is following the gfp mask of the caller like all well behaved slab > > > allocators do. If the caller does not set __GFP_WAIT then the page > > > allocator also cannot wait. > > > > Then SLUB should not use the higher orders for slab allocations that cannot > > sleep during allocations. What could be done in the longer term is decide > > how to tell kswapd to keep pages free at an order other than 0 when it is > > known there are a large number of high-order long-lived allocations like > > this. > > I cannot predict how allocations on a slab will be performed. In order > to avoid the higher order allocations in we would have to add a flag > that tells SLUB at slab creation creation time that this cache will be > used for atomic allocs and thus we can avoid configuring slabs in such a > way that they use higher order allocs. >
It is an option. I had the gfp flags passed in to kmem_cache_create() in mind for determining this but SLUB creates slabs differently and different flags could be passed into kmem_cache_alloc() of course. > The other solution is not to use higher order allocations by dropping the > antifrag patches in mm that allow SLUB to use higher order allocations. > But then there would be no higher order allocations at all that would > use the benefits of antifrag measures. That would be an immediate solution. Another alternative is that anti-frag used to also group high-order allocations together and make it hard to fallback to those areas for non-atomic allocations. It is currently backed out by the patch dont-group-high-order-atomic-allocations.patch because it was intended for rare high-order short-lived allocations such as e1000 that are currently dealt with by MIGRATE_RESERVE (bias-the-location-of-pages-freed-for-min_free_kbytes-in-the-same-max_order_nr_pages-blocks.patch) . The high-order atomic groupings may help here because the high-order allocations are long-lived and would claim contiguous areas. The last alternative I think I mentioned already is to have the minimum order kswapd reclaims as the same order SLUB uses instead of 0 so that min_free_kbytes is kept at higher orders than current. -- Mel Gorman Part-time Phd Student Linux Technology Center University of Limerick IBM Dublin Software Lab - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/