On Thu, Feb 15, 2018 at 04:46:44AM -0800, Matthew Wilcox wrote: > On Thu, Jan 25, 2018 at 03:21:44PM +0800, Aaron Lu wrote: > > When freeing a batch of pages from Per-CPU-Pages(PCP) back to buddy, > > the zone->lock is held and then pages are chosen from PCP's migratetype > > list. While there is actually no need to do this 'choose part' under > > lock since it's PCP pages, the only CPU that can touch them is us and > > irq is also disabled. > > I have no objection to this patch. If you're looking for ideas for > future improvement though, I wonder whether using a LIST_HEAD is the > best way to store these pages temporarily. If you batch them into a > pagevec and then free the entire pagevec, the CPU should be a little > faster scanning a short array than walking a linked list.
Thanks for the suggestion. > It would also puts a hard boundary on how long zone->lock is held, as > you'd drop it and go back for another batch after 15 pages. That might > be bad, of course. Yes that's a concern. As Mel reponded in another email, I think I'll just keep using list here. > > Another minor change I'd like to see is free_pcpages_bulk updating > pcp->count itself; all of the callers do it currently. Sounds good, I'll prepare a separate patch for this, thanks!