On Wed, Sep 28, 2011 at 1:59 AM, KAMEZAWA Hiroyuki <kamezawa.hiroyu@xxxxxxxxxxxxxx> wrote: > On Wed, 28 Sep 2011 01:19:50 -0700 > Michel Lespinasse <walken@xxxxxxxxxx> wrote: >> It tends to perform worse if we try making it multithreaded. What >> happens is that the scanning threads call page_referenced() a lot, and >> if they both try scanning pages that belong to the same file that >> causes the mapping's i_mmap_mutex lock to bounce. Same things happens >> if they try scanning pages that belong to the same anon VMA too. >> > > Hmm. with brief thinking, if you can scan list of page tables, > you can set young flags without any locks. > For inode pages, you can hook page lookup, I think. It would be possible to avoid taking rmap locks by instead scanning all page tables, and transferring the pte young bits observed there to the PageYoung page flag. This is a significant design change, but would indeed work. Just to clarify the idea, how would you go about finding all page tables to scan ? The most straightforward approach would be iterate over all processes and scan their address spaces, but I don't think we can afford to hold tasklist_lock (even for reads) for so long, so we'd have to be a bit smarter than that... I can think of a few different ways but I'd like to know if you have something specific in mind first. -- Michel "Walken" Lespinasse A program is never fully debugged until the last user dies. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>