diff options
| author | hellsgod <hellsgod@gmx.ch> | 2013-09-16 17:39:52 +0200 |
|---|---|---|
| committer | Mister Oyster <oysterized@gmail.com> | 2017-12-26 13:06:59 +0100 |
| commit | b258591718be6cb32b1f0b14180e75dad56897e0 (patch) | |
| tree | 550f2b2223f0ec8d8a41acf8e63b8b944b412013 /mm/readahead.c | |
| parent | a4004def3f9f4159d8ea05d0802e1ce7f4fde4d5 (diff) | |
Readahead: Optimize divide/multiply by power of 2 using L/R shift (thx ramgear)
Signed-off-by: Joe Maples <joe@frap129.org>
Diffstat (limited to 'mm/readahead.c')
| -rw-r--r-- | mm/readahead.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/mm/readahead.c b/mm/readahead.c index 15d44735b..6929d473d 100644 --- a/mm/readahead.c +++ b/mm/readahead.c @@ -222,7 +222,7 @@ int force_page_cache_readahead(struct address_space *mapping, struct file *filp, while (nr_to_read) { int err; - unsigned long this_chunk = (2 * 1024 * 1024) / PAGE_CACHE_SIZE; + unsigned long this_chunk = (2097152) >> PAGE_CACHE_SHIFT; if (this_chunk > nr_to_read) this_chunk = nr_to_read; @@ -246,7 +246,7 @@ int force_page_cache_readahead(struct address_space *mapping, struct file *filp, unsigned long max_sane_readahead(unsigned long nr) { return min(nr, (node_page_state(numa_node_id(), NR_INACTIVE_FILE) - + node_page_state(numa_node_id(), NR_FREE_PAGES)) / 2); + + node_page_state(numa_node_id(), NR_FREE_PAGES)) >> 1); } /* @@ -259,10 +259,10 @@ static unsigned long get_init_ra_size(unsigned long size, unsigned long max) { unsigned long newsize = roundup_pow_of_two(size); - if (newsize <= max / 32) - newsize = newsize * 4; - else if (newsize <= max / 4) - newsize = newsize * 2; + if (newsize <= (max >> 5)) + newsize = newsize << 2; + else if (newsize <= (max >> 2)) + newsize = newsize << 1; else newsize = max; @@ -279,10 +279,10 @@ static unsigned long get_next_ra_size(struct file_ra_state *ra, unsigned long cur = ra->size; unsigned long newsize; - if (cur < max / 16) - newsize = 4 * cur; + if (cur < (max >> 4)) + newsize = cur >> 2; else - newsize = 2 * cur; + newsize = cur >> 1; return min(newsize, max); } @@ -370,7 +370,7 @@ static int try_context_readahead(struct address_space *mapping, * it is a strong indication of long-run stream (or whole-file-read) */ if (size >= offset) - size *= 2; + size <<= 1; ra->start = offset; ra->size = min(size + req_size, max); |
