diff options
author | Kirill A. Shutemov <kirill.shutemov@linux.intel.com> | 2020-06-03 16:00:12 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2020-06-03 20:09:46 -0700 |
commit | a980df33e9351e5474c06ec0fd96b2f409e2ff22 (patch) | |
tree | c902f4e3a65408f225a32aa86dea12120505d318 /mm/khugepaged.c | |
parent | ffe945e633b527d5a4577b42cbadec3c7cbcf096 (diff) | |
download | linux-a980df33e9351e5474c06ec0fd96b2f409e2ff22.tar.gz linux-a980df33e9351e5474c06ec0fd96b2f409e2ff22.tar.bz2 linux-a980df33e9351e5474c06ec0fd96b2f409e2ff22.zip |
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>
Diffstat (limited to 'mm/khugepaged.c')
-rw-r--r-- | mm/khugepaged.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/mm/khugepaged.c b/mm/khugepaged.c index c436fd390296..8a74b9705a65 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -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; |