From: Wu Fengguang The context method will lead to noticable overhead(readahead miss) on very sparse random reads. Having the readahead window to start slowly makes it much better. But still startup quick if the user prefers sparse readahead. Benchmarks of reading randomly 100,000 pages on a 1000,000 pages _sparse_ file: ARA before patch ARA STOCK ================ ================ ================ real 2.779s 2.782s 2.552s 2.606s 2.477s 2.521s user 1.120s 1.184s 1.133s 1.155s 1.097s 1.159s sys 1.248s 1.208s 1.093s 1.086s 1.079s 1.064s Signed-off-by: Wu Fengguang Signed-off-by: Andrew Morton --- mm/readahead.c | 6 ++++++ 1 file changed, 6 insertions(+) diff -puN mm/readahead.c~readahead-context-based-method-slow-start mm/readahead.c --- a/mm/readahead.c~readahead-context-based-method-slow-start +++ a/mm/readahead.c @@ -1439,6 +1439,12 @@ try_context_based_readahead(struct addre return -1; } else if (prev_page || probe_page(mapping, index - 1)) { ra_index = index; + /* + * Slow start of readahead window. + * It helps avoid most readahead miss on sparse random reads. + */ + if (readahead_hit_rate == 1) + ra_min = 1; } else if (readahead_hit_rate > 1) { ra_index = find_segtail_backward(mapping, index, readahead_hit_rate + ra_min); _