diff options
author | Andrew Morton <akpm@osdl.org> | 2006-01-08 04:00:39 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-08 23:12:40 -0500 |
commit | 9d0243bca345d5ce25d3f4b74b7facb3a6df1232 (patch) | |
tree | a3a0a763bf83a483282dc1c3caab587941a98fc2 /include | |
parent | bec6b0c89b234090681a4516e20ac5debe3e7c59 (diff) |
[PATCH] drop-pagecache
Add /proc/sys/vm/drop_caches. When written to, this will cause the kernel to
discard as much pagecache and/or reclaimable slab objects as it can. THis
operation requires root permissions.
It won't drop dirty data, so the user should run `sync' first.
Caveats:
a) Holds inode_lock for exorbitant amounts of time.
b) Needs to be taught about NUMA nodes: propagate these all the way through
so the discarding can be controlled on a per-node basis.
This is a debugging feature: useful for getting consistent results between
filesystem benchmarks. We could possibly put it under a config option, but
it's less than 300 bytes.
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/mm.h | 7 | ||||
-rw-r--r-- | include/linux/sysctl.h | 1 |
2 files changed, 8 insertions, 0 deletions
diff --git a/include/linux/mm.h b/include/linux/mm.h index bc01fff3aa01..83c651f25188 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
@@ -1036,5 +1036,12 @@ int in_gate_area_no_task(unsigned long addr); | |||
1036 | /* /proc/<pid>/oom_adj set to -17 protects from the oom-killer */ | 1036 | /* /proc/<pid>/oom_adj set to -17 protects from the oom-killer */ |
1037 | #define OOM_DISABLE -17 | 1037 | #define OOM_DISABLE -17 |
1038 | 1038 | ||
1039 | int drop_caches_sysctl_handler(struct ctl_table *, int, struct file *, | ||
1040 | void __user *, size_t *, loff_t *); | ||
1041 | int shrink_slab(unsigned long scanned, gfp_t gfp_mask, | ||
1042 | unsigned long lru_pages); | ||
1043 | void drop_pagecache(void); | ||
1044 | void drop_slab(void); | ||
1045 | |||
1039 | #endif /* __KERNEL__ */ | 1046 | #endif /* __KERNEL__ */ |
1040 | #endif /* _LINUX_MM_H */ | 1047 | #endif /* _LINUX_MM_H */ |
diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h index a9b80fc7f0f3..4cd267fe87ec 100644 --- a/include/linux/sysctl.h +++ b/include/linux/sysctl.h | |||
@@ -180,6 +180,7 @@ enum | |||
180 | VM_VFS_CACHE_PRESSURE=26, /* dcache/icache reclaim pressure */ | 180 | VM_VFS_CACHE_PRESSURE=26, /* dcache/icache reclaim pressure */ |
181 | VM_LEGACY_VA_LAYOUT=27, /* legacy/compatibility virtual address space layout */ | 181 | VM_LEGACY_VA_LAYOUT=27, /* legacy/compatibility virtual address space layout */ |
182 | VM_SWAP_TOKEN_TIMEOUT=28, /* default time for token time out */ | 182 | VM_SWAP_TOKEN_TIMEOUT=28, /* default time for token time out */ |
183 | VM_DROP_PAGECACHE=29, /* int: nuke lots of pagecache */ | ||
183 | }; | 184 | }; |
184 | 185 | ||
185 | 186 | ||