Christoph Lameter
0ff38490c8
[PATCH] zone_reclaim: dynamic slab reclaim
...
Currently one can enable slab reclaim by setting an explicit option in
/proc/sys/vm/zone_reclaim_mode. Slab reclaim is then used as a final
option if the freeing of unmapped file backed pages is not enough to free
enough pages to allow a local allocation.
However, that means that the slab can grow excessively and that most memory
of a node may be used by slabs. We have had a case where a machine with
46GB of memory was using 40-42GB for slab. Zone reclaim was effective in
dealing with pagecache pages. However, slab reclaim was only done during
global reclaim (which is a bit rare on NUMA systems).
This patch implements slab reclaim during zone reclaim. Zone reclaim
occurs if there is a danger of an off node allocation. At that point we
1. Shrink the per node page cache if the number of pagecache
pages is more than min_unmapped_ratio percent of pages in a zone.
2. Shrink the slab cache if the number of the nodes reclaimable slab pages
(patch depends on earlier one that implements that counter)
are more than min_slab_ratio (a new /proc/sys/vm tunable).
The shrinking of the slab cache is a bit problematic since it is not node
specific. So we simply calculate what point in the slab we want to reach
(current per node slab use minus the number of pages that neeed to be
allocated) and then repeately run the global reclaim until that is
unsuccessful or we have reached the limit. I hope we will have zone based
slab reclaim at some point which will make that easier.
The default for the min_slab_ratio is 5%
Also remove the slab option from /proc/sys/vm/zone_reclaim_mode.
[akpm@osdl.org: cleanups]
Signed-off-by: Christoph Lameter <clameter@sgi.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-09-26 08:48:51 -07:00
..
irq
[PATCH] genirq core: fix handle_level_irq()
2006-09-19 07:57:20 -07:00
power
[PATCH] prevent swsusp with PAE
2006-09-06 11:00:02 -07:00
time
[PATCH] time: rename clocksource functions
2006-06-26 09:58:21 -07:00
.gitignore
gitignore: ignore more generated files
2006-01-03 11:35:26 +01:00
acct.c
[PATCH] Fix sighand->siglock usage in kernel/acct.c
2006-07-14 21:53:54 -07:00
audit.c
[PATCH] sanity check audit_buffer
2006-09-11 13:32:17 -04:00
audit.h
[PATCH] audit: AUDIT_PERM support
2006-09-11 13:32:30 -04:00
auditfilter.c
[PATCH] audit: AUDIT_PERM support
2006-09-11 13:32:30 -04:00
auditsc.c
[PATCH] audit: AUDIT_PERM support
2006-09-11 13:32:30 -04:00
capability.c
[PATCH] sched: cleanup, remove task_t, convert to struct task_struct
2006-07-03 15:27:11 -07:00
compat.c
[PATCH] N32 sigset and __COMPAT_ENDIAN_SWAP__
2006-06-25 10:01:15 -07:00
configs.c
Remove obsolete #include <linux/config.h>
2006-06-30 19:25:36 +02:00
cpu.c
cpu hotplug: simplify and hopefully fix locking
2006-07-23 12:12:16 -07:00
cpuset.c
[PATCH] Add __GFP_THISNODE to avoid fallback to other nodes and ignore cpuset/memory policy restrictions
2006-09-26 08:48:50 -07:00
delayacct.c
[PATCH] task delay accounting fixes
2006-09-01 11:39:08 -07:00
dma.c
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
exec_domain.c
Remove obsolete #include <linux/config.h>
2006-06-30 19:25:36 +02:00
exit.c
[PATCH] eligible_child: remove an obsolete ->tgid check
2006-09-02 14:51:27 -07:00
extable.c
[PATCH] symbol_put_addr() locks kernel
2006-05-15 11:20:55 -07:00
fork.c
[PATCH] task delay accounting fixes
2006-09-01 11:39:08 -07:00
futex.c
[PATCH] Use the correct restart option for futex_lock_pi
2006-09-08 10:22:50 -07:00
futex_compat.c
[PATCH] futex: Apply recent futex fixes to futex_compat
2006-08-06 08:57:49 -07:00
hrtimer.c
[PATCH] fix hrtimer percpu usage typo
2006-08-14 12:54:28 -07:00
itimer.c
[PATCH] hrtimers: remove data field
2006-03-26 08:57:03 -08:00
kallsyms.c
[PATCH] null-terminate over-long /proc/kallsyms symbols
2006-07-14 21:53:52 -07:00
Kconfig.hz
[PATCH] i386: Selectable Frequency of the Timer Interrupt
2005-06-23 09:45:10 -07:00
Kconfig.preempt
[PATCH] sched: voluntary kernel preemption
2005-06-25 16:24:45 -07:00
kexec.c
[POWERPC] Add the use of the firmware soft-reset-nmi to kdump.
2006-06-28 15:18:52 +10:00
kfifo.c
[PATCH] gfp flags annotations - part 1
2005-10-08 15:00:57 -07:00
kmod.c
[PATCH] bug fix in kernel/kmod.c
2006-09-16 12:54:32 -07:00
kprobes.c
[PATCH] IA64: kprobe invalidate icache of jump buffer
2006-07-31 13:28:38 -07:00
ksysfs.c
Remove obsolete #include <linux/config.h>
2006-06-30 19:25:36 +02:00
kthread.c
[PATCH] remove kernel/kthread.c:kthread_stop_sem()
2006-07-14 21:53:52 -07:00
lockdep.c
[PATCH] lockdep: core, reduce per-lock class-cache size
2006-07-10 13:24:14 -07:00
lockdep_internals.h
[PATCH] lockdep: double the number of stack-trace entries
2006-09-13 07:32:14 -07:00
lockdep_proc.c
[PATCH] lockdep: procfs
2006-07-03 15:27:04 -07:00
Makefile
[PATCH] per-task-delay-accounting: taskstats interface
2006-07-14 21:53:56 -07:00
module.c
[PATCH] load_module: no BUG if module_subsys uninitialized
2006-09-25 17:38:36 -07:00
mutex-debug.c
[PATCH] lockdep: prove mutex locking correctness
2006-07-03 15:27:04 -07:00
mutex-debug.h
[PATCH] lockdep: better lock debugging
2006-07-03 15:27:01 -07:00
mutex.c
[PATCH] lockdep: prove mutex locking correctness
2006-07-03 15:27:04 -07:00
mutex.h
[PATCH] lockdep: prove mutex locking correctness
2006-07-03 15:27:04 -07:00
panic.c
[PATCH] lockdep: do not touch console state when tainting the kernel
2006-09-06 11:00:02 -07:00
params.c
Remove obsolete #include <linux/config.h>
2006-06-30 19:25:36 +02:00
pid.c
[PATCH] sched: cleanup, remove task_t, convert to struct task_struct
2006-07-03 15:27:11 -07:00
posix-cpu-timers.c
[PATCH] arm_timer: remove a racy and obsolete PF_EXITING check
2006-06-17 10:52:13 -07:00
posix-timers.c
[PATCH] hrtimers: remove data field
2006-03-26 08:57:03 -08:00
printk.c
[PATCH] vt: printk: Fix framebuffer console triggering might_sleep assertion
2006-08-06 08:57:47 -07:00
profile.c
[PATCH] Profiling: require buffer allocation on the correct node
2006-09-26 08:48:50 -07:00
ptrace.c
[PATCH] sched: cleanup, remove task_t, convert to struct task_struct
2006-07-03 15:27:11 -07:00
rcupdate.c
[PATCH] rcu_do_batch: make ->qlen decrement irq safe
2006-09-13 07:32:14 -07:00
rcutorture.c
[PATCH] rcutorture: add call_rcu_bh() operations
2006-06-27 17:32:40 -07:00
relay.c
[PATCH] relay: consolidate sendfile() and read() code
2006-03-23 19:58:45 +01:00
resource.c
[PATCH] memory hotadd fixes: find_next_system_ram catch range fix
2006-08-06 08:57:48 -07:00
rtmutex-debug.c
[PATCH] sched: cleanup, remove task_t, convert to struct task_struct
2006-07-03 15:27:11 -07:00
rtmutex-debug.h
[PATCH] lockdep: better lock debugging
2006-07-03 15:27:01 -07:00
rtmutex-tester.c
[PATCH] Add try_to_freeze() to rt-test kthreads
2006-07-14 21:53:53 -07:00
rtmutex.c
[PATCH] reference rt-mutex-design in rtmutex.c
2006-07-31 13:28:43 -07:00
rtmutex.h
[PATCH] lockdep: better lock debugging
2006-07-03 15:27:01 -07:00
rtmutex_common.h
[PATCH] pi-futex: futex_lock_pi/futex_unlock_pi support
2006-06-27 17:32:47 -07:00
rwsem.c
[PATCH] lockdep: prove rwsem locking correctness
2006-07-03 15:27:04 -07:00
sched.c
[PATCH] Fix longstanding load balancing bug in the scheduler
2006-09-26 08:48:43 -07:00
seccomp.c
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
signal.c
Fix force_sig_info() semantics after cleanups
2006-08-02 20:17:49 -07:00
softirq.c
[PATCH] Reducing local_bh_enable/disable overhead in irqtrace
2006-07-31 13:28:42 -07:00
softlockup.c
[PATCH] cpu hotplug: replace __devinit* with __cpuinit* for cpu notifications
2006-07-31 13:28:39 -07:00
spinlock.c
[PATCH] lockdep ifdef fix
2006-09-06 11:00:01 -07:00
stacktrace.c
[PATCH] lockdep: stacktrace subsystem, core
2006-07-03 15:27:02 -07:00
stop_machine.c
[PATCH] Remove redundant up() in stop_machine()
2006-08-27 11:01:31 -07:00
sys.c
[PATCH] Fix prctl privilege escalation and suid_dumpable (CVE-2006-2451)
2006-07-12 12:50:25 -07:00
sys_ni.c
[PATCH] sys_move_pages: 32bit support (i386, x86_64)
2006-06-23 07:42:53 -07:00
sysctl.c
[PATCH] zone_reclaim: dynamic slab reclaim
2006-09-26 08:48:51 -07:00
taskstats.c
[NETLINK]: Extend netlink messaging interface
2006-09-22 14:53:43 -07:00
time.c
[PATCH] Time: Introduce arch generic time accessors
2006-06-26 09:58:20 -07:00
timer.c
[PATCH] sys_getppid oopses on debug kernel
2006-08-14 12:54:29 -07:00
uid16.c
[PATCH] Add more prevent_tail_call()
2006-04-19 16:27:18 -07:00
unwind.c
[PATCH] x86_64: allow unwinder to build without module support
2006-06-26 10:48:18 -07:00
user.c
[PATCH] selinux: add hooks for key subsystem
2006-06-22 15:05:55 -07:00
wait.c
[PATCH] uninline init_waitqueue_head()
2006-07-10 13:24:25 -07:00
workqueue.c
[PATCH] workqueue: remove lock_cpu_hotplug()
2006-08-14 12:54:29 -07:00