page_alloc.c (4f98a2fee8acdb4ac84545df98cccecfd130f8db) page_alloc.c (556adecba110bf5f1db6c6b56416cfab5bcab698)
1/*
2 * linux/mm/page_alloc.c
3 *
4 * Manages the free list, the system allocates free pages here.
5 * Note that kmalloc() lives in slab.c
6 *
7 * Copyright (C) 1991, 1992, 1993, 1994 Linus Torvalds
8 * Swap reorganised 29.12.95, Stephen Tweedie

--- 4249 unchanged lines hidden (view full) ---

4258 setup_zone_migrate_reserve(zone);
4259 spin_unlock_irqrestore(&zone->lru_lock, flags);
4260 }
4261
4262 /* update totalreserve_pages */
4263 calculate_totalreserve_pages();
4264}
4265
1/*
2 * linux/mm/page_alloc.c
3 *
4 * Manages the free list, the system allocates free pages here.
5 * Note that kmalloc() lives in slab.c
6 *
7 * Copyright (C) 1991, 1992, 1993, 1994 Linus Torvalds
8 * Swap reorganised 29.12.95, Stephen Tweedie

--- 4249 unchanged lines hidden (view full) ---

4258 setup_zone_migrate_reserve(zone);
4259 spin_unlock_irqrestore(&zone->lru_lock, flags);
4260 }
4261
4262 /* update totalreserve_pages */
4263 calculate_totalreserve_pages();
4264}
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 */
4289void 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/*
4267 * Initialise min_free_kbytes.
4268 *
4269 * For small machines we want it small (128k min). For large machines
4270 * we want it large (64MB max). But it is not linear, because network
4271 * bandwidth does not increase linearly with machine size. We use
4272 *
4273 * min_free_kbytes = 4 * sqrt(lowmem_kbytes), for better accuracy:

--- 21 unchanged lines hidden (view full) ---

4295
4296 min_free_kbytes = int_sqrt(lowmem_kbytes * 16);
4297 if (min_free_kbytes < 128)
4298 min_free_kbytes = 128;
4299 if (min_free_kbytes > 65536)
4300 min_free_kbytes = 65536;
4301 setup_per_zone_pages_min();
4302 setup_per_zone_lowmem_reserve();
4306/*
4307 * Initialise min_free_kbytes.
4308 *
4309 * For small machines we want it small (128k min). For large machines
4310 * we want it large (64MB max). But it is not linear, because network
4311 * bandwidth does not increase linearly with machine size. We use
4312 *
4313 * min_free_kbytes = 4 * sqrt(lowmem_kbytes), for better accuracy:

--- 21 unchanged lines hidden (view full) ---

4335
4336 min_free_kbytes = int_sqrt(lowmem_kbytes * 16);
4337 if (min_free_kbytes < 128)
4338 min_free_kbytes = 128;
4339 if (min_free_kbytes > 65536)
4340 min_free_kbytes = 65536;
4341 setup_per_zone_pages_min();
4342 setup_per_zone_lowmem_reserve();
4343 setup_per_zone_inactive_ratio();
4303 return 0;
4304}
4305module_init(init_per_zone_pages_min)
4306
4307/*
4308 * min_free_kbytes_sysctl_handler - just a wrapper around proc_dointvec() so
4309 * that we can call two helper functions whenever min_free_kbytes
4310 * changes.

--- 375 unchanged lines hidden ---
4344 return 0;
4345}
4346module_init(init_per_zone_pages_min)
4347
4348/*
4349 * min_free_kbytes_sysctl_handler - just a wrapper around proc_dointvec() so
4350 * that we can call two helper functions whenever min_free_kbytes
4351 * changes.

--- 375 unchanged lines hidden ---