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 --- |