Messages in this thread | | | Date | Wed, 25 Jul 2012 01:00:37 +0800 | From | Jiang Liu <> | Subject | Re: [RFC PATCH v2] SLUB: enhance slub to handle memory nodes without normal memory |
| |
On 07/24/2012 10:45 PM, Christoph Lameter wrote: > On Tue, 24 Jul 2012, Jiang Liu wrote: > >> >> diff --git a/mm/slub.c b/mm/slub.c >> index 8c691fa..3976745 100644 >> --- a/mm/slub.c >> +++ b/mm/slub.c >> @@ -2803,6 +2803,17 @@ static inline int alloc_kmem_cache_cpus(struct kmem_cache *s) >> >> static struct kmem_cache *kmem_cache_node; >> >> +static bool node_has_normal_memory(int node) >> +{ >> + int i; >> + >> + for (i = ZONE_NORMAL; i >= 0; i--) >> + if (populated_zone(&NODE_DATA(node)->node_zones[i])) >> + return true; >> + >> + return false; >> +} > > There is already a N_NORMAL_MEMORY node map that contains a list of node > that have *normal* memory usable by slab allocators etc. I think the > cleanest solution would be to clear the corresponding node bits for your > special movable only zones. Then you wont be needing to modify other > subsystems anymore. > Hi Chris, Thanks for your comments! I have thought about the solution mentioned, but seems it doesn't work. We have node masks for both N_NORMAL_MEMORY and N_HIGH_MEMORY to distinguish between normal and highmem on platforms such as x86. But we still don't have such a mechanism to distinguish between "normal" and "movable" memory. So for memory nodes with only movable zones, we still set N_NORMAL_MEMORY for them. One possible solution is to add a node mask for "N_NORMAL_OR_MOVABLE_MEMORY", but haven't tried that yet. Will have a try for that. Thanks! Gerry
| |