John Hubbard <jhubbard@xxxxxxxxxx> writes: > On 03/23/2017 07:41 PM, Huang, Ying wrote: >> David Rientjes <rientjes@xxxxxxxxxx> writes: >> >>> On Mon, 20 Mar 2017, Huang, Ying wrote: >>> >>>> From: Huang Ying <ying.huang@xxxxxxxxx> >>>> >>>> Now vzalloc() is used in swap code to allocate various data >>>> structures, such as swap cache, swap slots cache, cluster info, etc. >>>> Because the size may be too large on some system, so that normal >>>> kzalloc() may fail. But using kzalloc() has some advantages, for >>>> example, less memory fragmentation, less TLB pressure, etc. So change >>>> the data structure allocation in swap code to use kvzalloc() which >>>> will try kzalloc() firstly, and fallback to vzalloc() if kzalloc() >>>> failed. >>>> >>> >>> As questioned in -v1 of this patch, what is the benefit of directly >>> compacting and reclaiming memory for high-order pages by first preferring >>> kmalloc() if this does not require contiguous memory? >> >> The memory allocation here is only for swap on time, not for swap out/in >> time. The performance of swap on is not considered critical. But if >> the kmalloc() is used instead of the vmalloc(), the swap out/in >> performance could be improved (marginally). More importantly, the >> interference for the other activity on the system could be reduced, For >> example, less memory fragmentation, less TLB usage of swap subsystem, >> etc. > > Hi Ying, > > I'm a little surprised to see vmalloc calls replaced with > kmalloc-then-vmalloc calls, because that actually makes fragmentation > worse (contrary to the above claim). That's because you will consume > contiguous memory (even though you don't need it to be contiguous), > whereas before, you would have been able to get by with page-at-a-time > for vmalloc. > > So, things like THP will find fewer contiguous chunks, as a result of patches such as this. Hi, John, I don't think so. The pages allocated by vmalloc() cannot be moved during de-fragment. For example, if 512 dis-continuous physical pages are allocated via vmalloc(), at worst, one page will be allocate from one distinct 2MB continous physical pages. This makes 512 * 2MB = 1GB memory cannot be used for THP allocation. Because these pages cannot be defragmented until vfree(). Best Regards, Huang, Ying > -- > thanks, > john h > >> >> Best Regards, >> Huang, Ying >> >> -- >> 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/ . >> Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a> >> -- 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/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>