Messages in this thread | | | Subject | Re: [PATCH 2/2] [RFC] fadvise: Add _VOLATILE,_ISVOLATILE, and _NONVOLATILE flags | From | John Stultz <> | Date | Tue, 14 Feb 2012 16:29:10 -0800 |
| |
On Wed, 2012-02-15 at 10:51 +1100, Dave Chinner wrote: > Given that it is a single state bit per page (volatile/non volatile) > you could just use a radix tree tag for keeping the state. Changing > the state isn't a performance critical operation, and tagging large > ranges isn't that expensive (e.g. we do that in the writeback code), > so I'm not sure the overhead of a separate tree is necessary here....
Hrm. I'll look into this.
> That doesn't help with the reclaim side of things, but I would have > thought that such functioanlity would be better integrated into the > VM page cache/lru scanning code than adding a shrinker to shrink the > page cache additionally on top of what the VM has already done > before calling the shrinkers. I'm not sure what is best here, > though...
Yea. My previous version did eviction from shmem_writepage(), I believe much as you suggest here, but the concern with that is that you could have a larger volatile range that was for the most part recently in use, but one idle page causes the entire thing to be evicted first. Using least-recently-marked-volatile order seems more natural for the use case (although Dimitry and others have already pointed out that the inheritance from the coalescing of neighboring ranges results in a similar issue).
But I'm open to other ideas and arguments.
Thanks again for the feedback! -john
| |