forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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 <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
- Loading branch information
Andrew Morton
authored and
Linus Torvalds
committed
Jan 9, 2006
1 parent
bec6b0c
commit 9d0243b
Showing
9 changed files
with
107 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
/* | ||
* Implement the manual drop-all-pagecache function | ||
*/ | ||
|
||
#include <linux/kernel.h> | ||
#include <linux/mm.h> | ||
#include <linux/fs.h> | ||
#include <linux/writeback.h> | ||
#include <linux/sysctl.h> | ||
#include <linux/gfp.h> | ||
|
||
/* A global variable is a bit ugly, but it keeps the code simple */ | ||
int sysctl_drop_caches; | ||
|
||
static void drop_pagecache_sb(struct super_block *sb) | ||
{ | ||
struct inode *inode; | ||
|
||
spin_lock(&inode_lock); | ||
list_for_each_entry(inode, &sb->s_inodes, i_sb_list) { | ||
if (inode->i_state & (I_FREEING|I_WILL_FREE)) | ||
continue; | ||
invalidate_inode_pages(inode->i_mapping); | ||
} | ||
spin_unlock(&inode_lock); | ||
} | ||
|
||
void drop_pagecache(void) | ||
{ | ||
struct super_block *sb; | ||
|
||
spin_lock(&sb_lock); | ||
restart: | ||
list_for_each_entry(sb, &super_blocks, s_list) { | ||
sb->s_count++; | ||
spin_unlock(&sb_lock); | ||
down_read(&sb->s_umount); | ||
if (sb->s_root) | ||
drop_pagecache_sb(sb); | ||
up_read(&sb->s_umount); | ||
spin_lock(&sb_lock); | ||
if (__put_super_and_need_restart(sb)) | ||
goto restart; | ||
} | ||
spin_unlock(&sb_lock); | ||
} | ||
|
||
void drop_slab(void) | ||
{ | ||
int nr_objects; | ||
|
||
do { | ||
nr_objects = shrink_slab(1000, GFP_KERNEL, 1000); | ||
} while (nr_objects > 10); | ||
} | ||
|
||
int drop_caches_sysctl_handler(ctl_table *table, int write, | ||
struct file *file, void __user *buffer, size_t *length, loff_t *ppos) | ||
{ | ||
proc_dointvec_minmax(table, write, file, buffer, length, ppos); | ||
if (write) { | ||
if (sysctl_drop_caches & 1) | ||
drop_pagecache(); | ||
if (sysctl_drop_caches & 2) | ||
drop_slab(); | ||
} | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters