diff options
Diffstat (limited to 'mm/page_alloc.c')
-rw-r--r-- | mm/page_alloc.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 740a16a32c22..79c0981b1d32 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -4263,6 +4263,46 @@ void setup_per_zone_pages_min(void) | |||
4263 | calculate_totalreserve_pages(); | 4263 | calculate_totalreserve_pages(); |
4264 | } | 4264 | } |
4265 | 4265 | ||
4266 | /** | ||
4267 | * setup_per_zone_inactive_ratio - called when min_free_kbytes changes. | ||
4268 | * | ||
4269 | * The inactive anon list should be small enough that the VM never has to | ||
4270 | * do too much work, but large enough that each inactive page has a chance | ||
4271 | * to be referenced again before it is swapped out. | ||
4272 | * | ||
4273 | * The inactive_anon ratio is the target ratio of ACTIVE_ANON to | ||
4274 | * INACTIVE_ANON pages on this zone's LRU, maintained by the | ||
4275 | * pageout code. A zone->inactive_ratio of 3 means 3:1 or 25% of | ||
4276 | * the anonymous pages are kept on the inactive list. | ||
4277 | * | ||
4278 | * total target max | ||
4279 | * memory ratio inactive anon | ||
4280 | * ------------------------------------- | ||
4281 | * 10MB 1 5MB | ||
4282 | * 100MB 1 50MB | ||
4283 | * 1GB 3 250MB | ||
4284 | * 10GB 10 0.9GB | ||
4285 | * 100GB 31 3GB | ||
4286 | * 1TB 101 10GB | ||
4287 | * 10TB 320 32GB | ||
4288 | */ | ||
4289 | void setup_per_zone_inactive_ratio(void) | ||
4290 | { | ||
4291 | struct zone *zone; | ||
4292 | |||
4293 | for_each_zone(zone) { | ||
4294 | unsigned int gb, ratio; | ||
4295 | |||
4296 | /* Zone size in gigabytes */ | ||
4297 | gb = zone->present_pages >> (30 - PAGE_SHIFT); | ||
4298 | ratio = int_sqrt(10 * gb); | ||
4299 | if (!ratio) | ||
4300 | ratio = 1; | ||
4301 | |||
4302 | zone->inactive_ratio = ratio; | ||
4303 | } | ||
4304 | } | ||
4305 | |||
4266 | /* | 4306 | /* |
4267 | * Initialise min_free_kbytes. | 4307 | * Initialise min_free_kbytes. |
4268 | * | 4308 | * |
@@ -4300,6 +4340,7 @@ static int __init init_per_zone_pages_min(void) | |||
4300 | min_free_kbytes = 65536; | 4340 | min_free_kbytes = 65536; |
4301 | setup_per_zone_pages_min(); | 4341 | setup_per_zone_pages_min(); |
4302 | setup_per_zone_lowmem_reserve(); | 4342 | setup_per_zone_lowmem_reserve(); |
4343 | setup_per_zone_inactive_ratio(); | ||
4303 | return 0; | 4344 | return 0; |
4304 | } | 4345 | } |
4305 | module_init(init_per_zone_pages_min) | 4346 | module_init(init_per_zone_pages_min) |