khugepaged: drain all LRU caches before scanning pages
Having a page in LRU add cache offsets page refcount and gives false-negative on PageLRU(). It reduces collapse success rate. Drain all LRU add caches before scanning. It happens relatively rare and should not disturb the system too much. Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Tested-by: Zi Yan <ziy@nvidia.com> Reviewed-by: William Kucharski <william.kucharski@oracle.com> Reviewed-by: Zi Yan <ziy@nvidia.com> Acked-by: Yang Shi <yang.shi@linux.alibaba.com> Cc: Andrea Arcangeli <aarcange@redhat.com> Cc: John Hubbard <jhubbard@nvidia.com> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Ralph Campbell <rcampbell@nvidia.com> Link: http://lkml.kernel.org/r/20200416160026.16538-4-kirill.shutemov@linux.intel.com Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
ffe945e633
commit
a980df33e9
1 changed files with 2 additions and 0 deletions
|
@ -2079,6 +2079,8 @@ static void khugepaged_do_scan(void)
|
|||
|
||||
barrier(); /* write khugepaged_pages_to_scan to local stack */
|
||||
|
||||
lru_add_drain_all();
|
||||
|
||||
while (progress < pages) {
|
||||
if (!khugepaged_prealloc_page(&hpage, &wait))
|
||||
break;
|
||||
|
|
Loading…
Reference in a new issue