aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorTheodore Ts'o <tytso@mit.edu>2013-02-28 23:58:56 -0500
committerTheodore Ts'o <tytso@mit.edu>2013-02-28 23:58:56 -0500
commit246307745c406379996e6ed6411f0e20f1ce1449 (patch)
tree71b78d765ba7406c6755cad807944da6a99e5980 /include
parent8e919d13048cd5acaadb2b15b48acbfb8832d3c2 (diff)
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>
Diffstat (limited to 'include')
-rw-r--r--include/trace/events/ext4.h40
1 files changed, 12 insertions, 28 deletions
diff --git a/include/trace/events/ext4.h b/include/trace/events/ext4.h
index c0457c0d1a68..4ee471003859 100644
--- a/include/trace/events/ext4.h
+++ b/include/trace/events/ext4.h
@@ -2255,64 +2255,48 @@ TRACE_EVENT(ext4_es_lookup_extent_exit,
2255 __entry->found ? __entry->status : 0) 2255 __entry->found ? __entry->status : 0)
2256); 2256);
2257 2257
2258TRACE_EVENT(ext4_es_reclaim_extents_count,
2259 TP_PROTO(struct super_block *sb, int nr_cached),
2260
2261 TP_ARGS(sb, nr_cached),
2262
2263 TP_STRUCT__entry(
2264 __field( dev_t, dev )
2265 __field( int, nr_cached )
2266 ),
2267
2268 TP_fast_assign(
2269 __entry->dev = sb->s_dev;
2270 __entry->nr_cached = nr_cached;
2271 ),
2272
2273 TP_printk("dev %d,%d cached objects nr %d",
2274 MAJOR(__entry->dev), MINOR(__entry->dev),
2275 __entry->nr_cached)
2276);
2277
2278TRACE_EVENT(ext4_es_shrink_enter, 2258TRACE_EVENT(ext4_es_shrink_enter,
2279 TP_PROTO(struct super_block *sb, int nr_to_scan), 2259 TP_PROTO(struct super_block *sb, int nr_to_scan, int cache_cnt),
2280 2260
2281 TP_ARGS(sb, nr_to_scan), 2261 TP_ARGS(sb, nr_to_scan, cache_cnt),
2282 2262
2283 TP_STRUCT__entry( 2263 TP_STRUCT__entry(
2284 __field( dev_t, dev ) 2264 __field( dev_t, dev )
2285 __field( int, nr_to_scan ) 2265 __field( int, nr_to_scan )
2266 __field( int, cache_cnt )
2286 ), 2267 ),
2287 2268
2288 TP_fast_assign( 2269 TP_fast_assign(
2289 __entry->dev = sb->s_dev; 2270 __entry->dev = sb->s_dev;
2290 __entry->nr_to_scan = nr_to_scan; 2271 __entry->nr_to_scan = nr_to_scan;
2272 __entry->cache_cnt = cache_cnt;
2291 ), 2273 ),
2292 2274
2293 TP_printk("dev %d,%d nr to scan %d", 2275 TP_printk("dev %d,%d nr_to_scan %d cache_cnt %d",
2294 MAJOR(__entry->dev), MINOR(__entry->dev), 2276 MAJOR(__entry->dev), MINOR(__entry->dev),
2295 __entry->nr_to_scan) 2277 __entry->nr_to_scan, __entry->cache_cnt)
2296); 2278);
2297 2279
2298TRACE_EVENT(ext4_es_shrink_exit, 2280TRACE_EVENT(ext4_es_shrink_exit,
2299 TP_PROTO(struct super_block *sb, int shrunk_nr), 2281 TP_PROTO(struct super_block *sb, int shrunk_nr, int cache_cnt),
2300 2282
2301 TP_ARGS(sb, shrunk_nr), 2283 TP_ARGS(sb, shrunk_nr, cache_cnt),
2302 2284
2303 TP_STRUCT__entry( 2285 TP_STRUCT__entry(
2304 __field( dev_t, dev ) 2286 __field( dev_t, dev )
2305 __field( int, shrunk_nr ) 2287 __field( int, shrunk_nr )
2288 __field( int, cache_cnt )
2306 ), 2289 ),
2307 2290
2308 TP_fast_assign( 2291 TP_fast_assign(
2309 __entry->dev = sb->s_dev; 2292 __entry->dev = sb->s_dev;
2310 __entry->shrunk_nr = shrunk_nr; 2293 __entry->shrunk_nr = shrunk_nr;
2294 __entry->cache_cnt = cache_cnt;
2311 ), 2295 ),
2312 2296
2313 TP_printk("dev %d,%d nr to scan %d", 2297 TP_printk("dev %d,%d shrunk_nr %d cache_cnt %d",
2314 MAJOR(__entry->dev), MINOR(__entry->dev), 2298 MAJOR(__entry->dev), MINOR(__entry->dev),
2315 __entry->shrunk_nr) 2299 __entry->shrunk_nr, __entry->cache_cnt)
2316); 2300);
2317 2301
2318#endif /* _TRACE_EXT4_H */ 2302#endif /* _TRACE_EXT4_H */