On Sun, May 1, 2011 at 10:47 PM, KOSAKI Motohiro <kosaki.motohiro@xxxxxxxxxxxxxx> wrote: >> > +/* This structure is used for keeping LRU ordering of isolated page */ >> > +struct pages_lru { >> > + Â Â Â Âstruct page *page; Â Â Â/* isolated page */ >> > + Â Â Â Âstruct page *prev_page; /* previous page of isolate page as LRU order */ >> > + Â Â Â Âstruct page *next_page; /* next page of isolate page as LRU order */ >> > + Â Â Â Âstruct list_head lru; >> > +}; >> > Â/* >> >> So this thing has to be allocated from somewhere. We can't put it >> on the stack as we're already in danger there so we must be using >> kmalloc. In the reclaim paths, this should be avoided obviously. >> For compaction, we might hurt the compaction success rates if pages >> are pinned with control structures. It's something to be wary of. >> >> At LSF/MM, I stated a preference for swapping the source and >> destination pages in the LRU. This unfortunately means that the LRU >> now contains a page in the process of being migrated to and the backout >> paths for migration failure become a lot more complex. Reclaim should >> be ok as it'll should fail to lock the page and recycle it in the list. >> This avoids allocations but I freely admit that I'm not in the position >> to implement such a thing right now :( > > I like swaping to fake page. one way pointer might become dangerous. vmscan can > detect fake page and ignore it. I guess it means swapping between migrated-from page and migrated-to page. Right? If so, migrated-from page is already removed from LRU list and migrated-to page isn't LRU as it's page allocated newly so they don't have any LRU information. How can we swap them? We need space keeps LRU information before removing the page from LRU list. :( Could you explain in detail about swapping if I miss something? About one way pointer, I think it's no problem. Worst case I imagine is to put the page in head of LRU list. It means it's same issue now. So it doesn't make worse than now. > > ie, > is_fake_page(page) > { > Â Â Â Âif (is_stack_addr((void*)page)) > Â Â Â Â Â Â Â Âreturn true; > Â Â Â Âreturn false; > } > > Also, I like to use stack rather than kmalloc in compaction. > Compaction is a procedure of reclaim. As you know, we had a problem about using of stack during reclaim path. I admit kmalloc-thing isn't good. I will try to solve the issue as TODO. Thanks for the review, KOSAKI. -- Kind regards, Minchan Kim -- 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 internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href