On Tue, 23 Nov 2010 16:44:50 +0900 Minchan Kim <minchan.kim@xxxxxxxxx> wrote: > On Tue, Nov 23, 2010 at 4:15 PM, Andrew Morton > <akpm@xxxxxxxxxxxxxxxxxxxx> wrote: > > On Tue, 23 Nov 2010 15:05:39 +0900 Minchan Kim <minchan.kim@xxxxxxxxx> wrote: > > > >> On Tue, Nov 23, 2010 at 2:48 PM, Andrew Morton > >> >> > move it to the head of the LRU anyway. __But given that the user has > >> >> > >> >> Why does it move into head of LRU? > >> >> If the page which isn't mapped doesn't have PG_referenced, it would be > >> >> reclaimed. > >> > > >> > If it's dirty or under writeback it can't be reclaimed! > >> > >> I see your point. And it's why I add it to head of inactive list. > > > > But that *guarantees* that the page will get a full trip around the > > inactive list. __And this will guarantee that potentially useful pages > > are reclaimed before the pages which we *know* the user doesn't want! > > Bad! > > > > Whereas if we queue it to the tail, it will only get that full trip if > > reclaim happens to run before the page is cleaned. __And we just agreed > > that reclaim isn't likely to run immediately, because pages are being > > freed. > > > > So we face a choice between guaranteed eviction of potentially-useful > > pages (which are very expensive to reestablish) versus a *possible* > > need to move an unreclaimable page to the head of the LRU, which is > > cheap. > > How about flagging SetPageReclaim when we add it to head of inactive? > If page write is complete, end_page_writeback would move it to tail of > inactive. ooh, that sounds clever. We'd want to do that for both PageDirty() and for PageWriteback() pages. But if we do it for PageDirty() pages, we'd need to clear PageReclaim() if someone reuses the page for some reason. We'll end up with pages all over the place which have PageReclaim set. I guess we could clear PageReclaim() in mark_page_accessed(), but that's hardly going to give us full coverage. hmm. Maybe just do it for PageWriteback pages. Then userspace can do sync_file_range(SYNC_FILE_RANGE_WRITE); fadvise(DONTNEED); and all those pages which now have PageWriteback set will also get PageReclaim set. But we'd need to avoid races against end_io when setting PageReclaim against the PageWriteback pages - if the interrupt happens while we're setting PageReclaim, it will end up being incorrectly set. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom policy in Canada: sign http://dissolvethecrtc.ca/ Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>