mm, rmap: account shmem thp pages
Let's add ShmemHugePages and ShmemPmdMapped fields into meminfo and smaps. It indicates how many times we allocate and map shmem THP. NR_ANON_TRANSPARENT_HUGEPAGES is renamed to NR_ANON_THPS. Link: http://lkml.kernel.org/r/1466021202-61880-27-git-send-email-kirill.shutemov@linux.intel.com Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
fc127da085
commit
65c453778a
@@ -1212,10 +1212,8 @@ void do_page_add_anon_rmap(struct page *page,
|
||||
* pte lock(a spinlock) is held, which implies preemption
|
||||
* disabled.
|
||||
*/
|
||||
if (compound) {
|
||||
__inc_zone_page_state(page,
|
||||
NR_ANON_TRANSPARENT_HUGEPAGES);
|
||||
}
|
||||
if (compound)
|
||||
__inc_zone_page_state(page, NR_ANON_THPS);
|
||||
__mod_zone_page_state(page_zone(page), NR_ANON_PAGES, nr);
|
||||
}
|
||||
if (unlikely(PageKsm(page)))
|
||||
@@ -1253,7 +1251,7 @@ void page_add_new_anon_rmap(struct page *page,
|
||||
VM_BUG_ON_PAGE(!PageTransHuge(page), page);
|
||||
/* increment count (starts at -1) */
|
||||
atomic_set(compound_mapcount_ptr(page), 0);
|
||||
__inc_zone_page_state(page, NR_ANON_TRANSPARENT_HUGEPAGES);
|
||||
__inc_zone_page_state(page, NR_ANON_THPS);
|
||||
} else {
|
||||
/* Anon THP always mapped first with PMD */
|
||||
VM_BUG_ON_PAGE(PageTransCompound(page), page);
|
||||
@@ -1283,6 +1281,8 @@ void page_add_file_rmap(struct page *page, bool compound)
|
||||
}
|
||||
if (!atomic_inc_and_test(compound_mapcount_ptr(page)))
|
||||
goto out;
|
||||
VM_BUG_ON_PAGE(!PageSwapBacked(page), page);
|
||||
__inc_zone_page_state(page, NR_SHMEM_PMDMAPPED);
|
||||
} else {
|
||||
if (PageTransCompound(page)) {
|
||||
VM_BUG_ON_PAGE(!PageLocked(page), page);
|
||||
@@ -1321,6 +1321,8 @@ static void page_remove_file_rmap(struct page *page, bool compound)
|
||||
}
|
||||
if (!atomic_add_negative(-1, compound_mapcount_ptr(page)))
|
||||
goto out;
|
||||
VM_BUG_ON_PAGE(!PageSwapBacked(page), page);
|
||||
__dec_zone_page_state(page, NR_SHMEM_PMDMAPPED);
|
||||
} else {
|
||||
if (!atomic_add_negative(-1, &page->_mapcount))
|
||||
goto out;
|
||||
@@ -1354,7 +1356,7 @@ static void page_remove_anon_compound_rmap(struct page *page)
|
||||
if (!IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE))
|
||||
return;
|
||||
|
||||
__dec_zone_page_state(page, NR_ANON_TRANSPARENT_HUGEPAGES);
|
||||
__dec_zone_page_state(page, NR_ANON_THPS);
|
||||
|
||||
if (TestClearPageDoubleMap(page)) {
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user