ext4: optimize ext4_es_shrink()

When the system is under memory pressure, ext4_es_srhink() will get
called very often.  So optimize returning the number of items in the
file system's extent status cache by keeping a per-filesystem count,
instead of calculating it each time by scanning all of the inodes in
the extent status cache.

Also rename the slab used for the extent status cache to be
"ext4_extent_status" so it's obviousl the slab in question is created
by ext4.

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Cc: Zheng Liu <gnehzuil.liu@gmail.com>
This commit is contained in:
Theodore Ts'o
2013-02-28 23:58:56 -05:00
parent 8e919d1304
commit 246307745c
3 changed files with 26 additions and 54 deletions

View File

@@ -2255,64 +2255,48 @@ TRACE_EVENT(ext4_es_lookup_extent_exit,
__entry->found ? __entry->status : 0)
);
TRACE_EVENT(ext4_es_reclaim_extents_count,
TP_PROTO(struct super_block *sb, int nr_cached),
TP_ARGS(sb, nr_cached),
TP_STRUCT__entry(
__field( dev_t, dev )
__field( int, nr_cached )
),
TP_fast_assign(
__entry->dev = sb->s_dev;
__entry->nr_cached = nr_cached;
),
TP_printk("dev %d,%d cached objects nr %d",
MAJOR(__entry->dev), MINOR(__entry->dev),
__entry->nr_cached)
);
TRACE_EVENT(ext4_es_shrink_enter,
TP_PROTO(struct super_block *sb, int nr_to_scan),
TP_PROTO(struct super_block *sb, int nr_to_scan, int cache_cnt),
TP_ARGS(sb, nr_to_scan),
TP_ARGS(sb, nr_to_scan, cache_cnt),
TP_STRUCT__entry(
__field( dev_t, dev )
__field( int, nr_to_scan )
__field( int, cache_cnt )
),
TP_fast_assign(
__entry->dev = sb->s_dev;
__entry->nr_to_scan = nr_to_scan;
__entry->cache_cnt = cache_cnt;
),
TP_printk("dev %d,%d nr to scan %d",
TP_printk("dev %d,%d nr_to_scan %d cache_cnt %d",
MAJOR(__entry->dev), MINOR(__entry->dev),
__entry->nr_to_scan)
__entry->nr_to_scan, __entry->cache_cnt)
);
TRACE_EVENT(ext4_es_shrink_exit,
TP_PROTO(struct super_block *sb, int shrunk_nr),
TP_PROTO(struct super_block *sb, int shrunk_nr, int cache_cnt),
TP_ARGS(sb, shrunk_nr),
TP_ARGS(sb, shrunk_nr, cache_cnt),
TP_STRUCT__entry(
__field( dev_t, dev )
__field( int, shrunk_nr )
__field( int, cache_cnt )
),
TP_fast_assign(
__entry->dev = sb->s_dev;
__entry->shrunk_nr = shrunk_nr;
__entry->cache_cnt = cache_cnt;
),
TP_printk("dev %d,%d nr to scan %d",
TP_printk("dev %d,%d shrunk_nr %d cache_cnt %d",
MAJOR(__entry->dev), MINOR(__entry->dev),
__entry->shrunk_nr)
__entry->shrunk_nr, __entry->cache_cnt)
);
#endif /* _TRACE_EXT4_H */