mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 14:11:52 +00:00
mm, thp: do not queue fully unmapped pages for deferred split
Adding fully unmapped pages into deferred split queue is not productive: these pages are about to be freed or they are pinned and cannot be split anyway. Link: http://lkml.kernel.org/r/20190913091849.11151-1-kirill.shutemov@linux.intel.com Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Reviewed-by: Yang Shi <yang.shi@linux.alibaba.com> Cc: Michal Hocko <mhocko@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
74d4a5797b
commit
f1fe80d4ae
14
mm/rmap.c
14
mm/rmap.c
@ -1292,12 +1292,20 @@ static void page_remove_anon_compound_rmap(struct page *page)
|
|||||||
if (TestClearPageDoubleMap(page)) {
|
if (TestClearPageDoubleMap(page)) {
|
||||||
/*
|
/*
|
||||||
* Subpages can be mapped with PTEs too. Check how many of
|
* Subpages can be mapped with PTEs too. Check how many of
|
||||||
* themi are still mapped.
|
* them are still mapped.
|
||||||
*/
|
*/
|
||||||
for (i = 0, nr = 0; i < HPAGE_PMD_NR; i++) {
|
for (i = 0, nr = 0; i < HPAGE_PMD_NR; i++) {
|
||||||
if (atomic_add_negative(-1, &page[i]._mapcount))
|
if (atomic_add_negative(-1, &page[i]._mapcount))
|
||||||
nr++;
|
nr++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Queue the page for deferred split if at least one small
|
||||||
|
* page of the compound page is unmapped, but at least one
|
||||||
|
* small page is still mapped.
|
||||||
|
*/
|
||||||
|
if (nr && nr < HPAGE_PMD_NR)
|
||||||
|
deferred_split_huge_page(page);
|
||||||
} else {
|
} else {
|
||||||
nr = HPAGE_PMD_NR;
|
nr = HPAGE_PMD_NR;
|
||||||
}
|
}
|
||||||
@ -1305,10 +1313,8 @@ static void page_remove_anon_compound_rmap(struct page *page)
|
|||||||
if (unlikely(PageMlocked(page)))
|
if (unlikely(PageMlocked(page)))
|
||||||
clear_page_mlock(page);
|
clear_page_mlock(page);
|
||||||
|
|
||||||
if (nr) {
|
if (nr)
|
||||||
__mod_node_page_state(page_pgdat(page), NR_ANON_MAPPED, -nr);
|
__mod_node_page_state(page_pgdat(page), NR_ANON_MAPPED, -nr);
|
||||||
deferred_split_huge_page(page);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user