diff options
| author | Linus Torvalds <torvalds@home.osdl.org> | 2003-07-05 23:23:55 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.osdl.org> | 2003-07-05 23:23:55 -0700 |
| commit | 82a333fa1948869322f32a67223ea8d0ae9ad8ba (patch) | |
| tree | 281e9cb8b9aa8461c9540d46e30b95b1bf8cd086 /include | |
| parent | e939c913081c23c84e77fc1e5a480b1eead393ee (diff) | |
Simplify and speed up mmap read-around handling
This improves cold-cache program startup noticeably for me, and
simplifies the read-ahead logic at the same time. The rules for
read-ahead are:
- if the vma is marked random, we just do the regular one-page case.
Obvious.
- if the vma is marked "linear access", we use the regular readahead
code. No change in behaviour there (well, we also only consider it a
_miss_ if it was marked linear access - the "readahead" and
"readaround" things are now totally independent of each other)
- otherwise, we look at how many hits/misses we've had for this
particular file open for mmap, and if we've had noticeably more
misses than hits, we don't bother with read-around.
In particular, this means that the "real" read-ahead logic literally
only needs to worry about finding sequential accesses, and does not
have to worry about the common executable mmap access patthers that
have very different behaviour.
Some constant tweaking may be a good idea.
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/fs.h | 2 | ||||
| -rw-r--r-- | include/linux/mm.h | 4 |
2 files changed, 2 insertions, 4 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h index 7a5f305101c5..77dd4b13dc43 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -420,6 +420,8 @@ struct file_ra_state { unsigned long ahead_start; /* Ahead window */ unsigned long ahead_size; unsigned long ra_pages; /* Maximum readahead window */ + unsigned long mmap_hit; /* Cache hit stat for mmap accesses */ + unsigned long mmap_miss; /* Cache miss stat for mmap accesses */ }; struct file { diff --git a/include/linux/mm.h b/include/linux/mm.h index d75f64725853..858914b2dbd3 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -571,10 +571,6 @@ void page_cache_readahead(struct address_space *mapping, struct file_ra_state *ra, struct file *filp, unsigned long offset); -void page_cache_readaround(struct address_space *mapping, - struct file_ra_state *ra, - struct file *filp, - unsigned long offset); void handle_ra_miss(struct address_space *mapping, struct file_ra_state *ra, pgoff_t offset); unsigned long max_sane_readahead(unsigned long nr); |
