Annotation of /trunk/kernel26-magellan/patches-2.6.16-r12/0020-2.6.16-vm-mapped-1.diff
Parent Directory | Revision Log
Revision 72 -
(hide annotations)
(download)
Mon Jun 5 09:25:38 2006 UTC (18 years, 3 months ago) by niro
File size: 4800 byte(s)
Mon Jun 5 09:25:38 2006 UTC (18 years, 3 months ago) by niro
File size: 4800 byte(s)
ver bump to 2.6.16-r12: - updated to linux-2.6.16.19 - updated to ck11
1 | niro | 72 | Turn the "swappiness" knob into one with well defined semantics. Rename it |
2 | "mapped" to correspond directly with the percentage of mapped ram or | ||
3 | "applications" as users think of it. Currently the swappiness algorithm can | ||
4 | easily lead to swapping situations on simple file copies due to the distress | ||
5 | algorithm which too easily overrides the swappiness value. Add a | ||
6 | "hardmaplimit" tunable, on by default, which only allows the vm to override | ||
7 | the "mapped" tunable when distress is at its greatest to prevent false | ||
8 | out-of-memory situations. | ||
9 | |||
10 | Signed-off-by: Con Kolivas <kernel@kolivas.org> | ||
11 | |||
12 | include/linux/swap.h | 3 ++- | ||
13 | include/linux/sysctl.h | 3 ++- | ||
14 | kernel/sysctl.c | 16 ++++++++++++---- | ||
15 | mm/vmscan.c | 17 +++++++++++------ | ||
16 | 4 files changed, 27 insertions(+), 12 deletions(-) | ||
17 | |||
18 | Index: linux-2.6.16-ck1/include/linux/swap.h | ||
19 | =================================================================== | ||
20 | --- linux-2.6.16-ck1.orig/include/linux/swap.h 2006-03-20 20:46:55.000000000 +1100 | ||
21 | +++ linux-2.6.16-ck1/include/linux/swap.h 2006-03-20 20:46:56.000000000 +1100 | ||
22 | @@ -175,7 +175,8 @@ extern void swap_setup(void); | ||
23 | /* linux/mm/vmscan.c */ | ||
24 | extern int try_to_free_pages(struct zone **, gfp_t); | ||
25 | extern int shrink_all_memory(int); | ||
26 | -extern int vm_swappiness; | ||
27 | +extern int vm_mapped; | ||
28 | +extern int vm_hardmaplimit; | ||
29 | |||
30 | #ifdef CONFIG_NUMA | ||
31 | extern int zone_reclaim_mode; | ||
32 | Index: linux-2.6.16-ck1/include/linux/sysctl.h | ||
33 | =================================================================== | ||
34 | --- linux-2.6.16-ck1.orig/include/linux/sysctl.h 2006-03-20 20:46:55.000000000 +1100 | ||
35 | +++ linux-2.6.16-ck1/include/linux/sysctl.h 2006-03-20 20:46:56.000000000 +1100 | ||
36 | @@ -175,7 +175,7 @@ enum | ||
37 | VM_OVERCOMMIT_RATIO=16, /* percent of RAM to allow overcommit in */ | ||
38 | VM_PAGEBUF=17, /* struct: Control pagebuf parameters */ | ||
39 | VM_HUGETLB_PAGES=18, /* int: Number of available Huge Pages */ | ||
40 | - VM_SWAPPINESS=19, /* Tendency to steal mapped memory */ | ||
41 | + VM_MAPPED=19, /* percent mapped min while evicting cache */ | ||
42 | VM_LOWMEM_RESERVE_RATIO=20,/* reservation ratio for lower memory zones */ | ||
43 | VM_MIN_FREE_KBYTES=21, /* Minimum free kilobytes to maintain */ | ||
44 | VM_MAX_MAP_COUNT=22, /* int: Maximum number of mmaps/address-space */ | ||
45 | @@ -190,6 +190,7 @@ enum | ||
46 | VM_ZONE_RECLAIM_MODE=31, /* reclaim local zone memory before going off node */ | ||
47 | VM_ZONE_RECLAIM_INTERVAL=32, /* time period to wait after reclaim failure */ | ||
48 | VM_SWAP_PREFETCH=33, /* swap prefetch */ | ||
49 | + VM_HARDMAPLIMIT=34, /* Make mapped a hard limit */ | ||
50 | }; | ||
51 | |||
52 | |||
53 | Index: linux-2.6.16-ck1/kernel/sysctl.c | ||
54 | =================================================================== | ||
55 | --- linux-2.6.16-ck1.orig/kernel/sysctl.c 2006-03-20 20:46:55.000000000 +1100 | ||
56 | +++ linux-2.6.16-ck1/kernel/sysctl.c 2006-03-20 20:46:56.000000000 +1100 | ||
57 | @@ -791,16 +791,24 @@ static ctl_table vm_table[] = { | ||
58 | .proc_handler = &proc_dointvec, | ||
59 | }, | ||
60 | { | ||
61 | - .ctl_name = VM_SWAPPINESS, | ||
62 | - .procname = "swappiness", | ||
63 | - .data = &vm_swappiness, | ||
64 | - .maxlen = sizeof(vm_swappiness), | ||
65 | + .ctl_name = VM_MAPPED, | ||
66 | + .procname = "mapped", | ||
67 | + .data = &vm_mapped, | ||
68 | + .maxlen = sizeof(vm_mapped), | ||
69 | .mode = 0644, | ||
70 | .proc_handler = &proc_dointvec_minmax, | ||
71 | .strategy = &sysctl_intvec, | ||
72 | .extra1 = &zero, | ||
73 | .extra2 = &one_hundred, | ||
74 | }, | ||
75 | + { | ||
76 | + .ctl_name = VM_HARDMAPLIMIT, | ||
77 | + .procname = "hardmaplimit", | ||
78 | + .data = &vm_hardmaplimit, | ||
79 | + .maxlen = sizeof(int), | ||
80 | + .mode = 0644, | ||
81 | + .proc_handler = &proc_dointvec, | ||
82 | + }, | ||
83 | #ifdef CONFIG_HUGETLB_PAGE | ||
84 | { | ||
85 | .ctl_name = VM_HUGETLB_PAGES, | ||
86 | Index: linux-2.6.16-ck1/mm/vmscan.c | ||
87 | =================================================================== | ||
88 | --- linux-2.6.16-ck1.orig/mm/vmscan.c 2006-03-20 20:46:55.000000000 +1100 | ||
89 | +++ linux-2.6.16-ck1/mm/vmscan.c 2006-03-20 20:46:56.000000000 +1100 | ||
90 | @@ -124,10 +124,11 @@ struct shrinker { | ||
91 | #endif | ||
92 | |||
93 | /* | ||
94 | - * From 0 .. 100. Higher means more swappy. | ||
95 | + * From 0 .. 100. Lower means more swappy. | ||
96 | */ | ||
97 | -int vm_swappiness = 60; | ||
98 | -static long total_memory; | ||
99 | +int vm_mapped __read_mostly = 66; | ||
100 | +int vm_hardmaplimit __read_mostly = 1; | ||
101 | +static long total_memory __read_mostly; | ||
102 | |||
103 | static LIST_HEAD(shrinker_list); | ||
104 | static DECLARE_RWSEM(shrinker_rwsem); | ||
105 | @@ -1232,10 +1233,14 @@ refill_inactive_zone(struct zone *zone, | ||
106 | * The distress ratio is important - we don't want to start | ||
107 | * going oom. | ||
108 | * | ||
109 | - * A 100% value of vm_swappiness overrides this algorithm | ||
110 | - * altogether. | ||
111 | + * This distress value is ignored if we apply a hardmaplimit except | ||
112 | + * in extreme distress. | ||
113 | + * | ||
114 | + * A 0% value of vm_mapped overrides this algorithm altogether. | ||
115 | */ | ||
116 | - swap_tendency = mapped_ratio / 2 + distress + vm_swappiness; | ||
117 | + swap_tendency = mapped_ratio * 100 / (vm_mapped + 1); | ||
118 | + if (!vm_hardmaplimit || distress == 100) | ||
119 | + swap_tendency += distress; | ||
120 | |||
121 | /* | ||
122 | * Now use this metric to decide whether to start moving mapped |