lkml.org 
[lkml]   [2016]   [Mar]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCHv4 06/25] mm, rmap: account file thp pages
    Date
    Let's add FileHugeMapped field into meminfo. It indicates how many time
    we map file THP

    NR_ANON_TRANSPARENT_HUGEPAGES is renamed to NR_ANON_THPS.

    Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    ---
    drivers/base/node.c | 10 ++++++----
    fs/proc/meminfo.c | 5 +++--
    include/linux/mmzone.h | 3 ++-
    mm/huge_memory.c | 2 +-
    mm/rmap.c | 12 ++++++------
    mm/vmstat.c | 1 +
    6 files changed, 19 insertions(+), 14 deletions(-)

    diff --git a/drivers/base/node.c b/drivers/base/node.c
    index 560751bad294..9cc4e9dad47e 100644
    --- a/drivers/base/node.c
    +++ b/drivers/base/node.c
    @@ -113,6 +113,7 @@ static ssize_t node_read_meminfo(struct device *dev,
    "Node %d SUnreclaim: %8lu kB\n"
    #ifdef CONFIG_TRANSPARENT_HUGEPAGE
    "Node %d AnonHugePages: %8lu kB\n"
    + "Node %d FileHugeMapped: %8lu kB\n"
    #endif
    ,
    nid, K(node_page_state(nid, NR_FILE_DIRTY)),
    @@ -131,10 +132,11 @@ static ssize_t node_read_meminfo(struct device *dev,
    node_page_state(nid, NR_SLAB_UNRECLAIMABLE)),
    nid, K(node_page_state(nid, NR_SLAB_RECLAIMABLE)),
    #ifdef CONFIG_TRANSPARENT_HUGEPAGE
    - nid, K(node_page_state(nid, NR_SLAB_UNRECLAIMABLE))
    - , nid,
    - K(node_page_state(nid, NR_ANON_TRANSPARENT_HUGEPAGES) *
    - HPAGE_PMD_NR));
    + nid, K(node_page_state(nid, NR_SLAB_UNRECLAIMABLE)),
    + nid, K(node_page_state(nid, NR_ANON_THPS) *
    + HPAGE_PMD_NR),
    + nid, K(node_page_state(nid, NR_FILE_THP_MAPPED) *
    + HPAGE_PMD_NR));
    #else
    nid, K(node_page_state(nid, NR_SLAB_UNRECLAIMABLE)));
    #endif
    diff --git a/fs/proc/meminfo.c b/fs/proc/meminfo.c
    index 83720460c5bc..50666e987fbd 100644
    --- a/fs/proc/meminfo.c
    +++ b/fs/proc/meminfo.c
    @@ -105,6 +105,7 @@ static int meminfo_proc_show(struct seq_file *m, void *v)
    #endif
    #ifdef CONFIG_TRANSPARENT_HUGEPAGE
    "AnonHugePages: %8lu kB\n"
    + "FileHugeMapped: %8lu kB\n"
    #endif
    #ifdef CONFIG_CMA
    "CmaTotal: %8lu kB\n"
    @@ -162,8 +163,8 @@ static int meminfo_proc_show(struct seq_file *m, void *v)
    , atomic_long_read(&num_poisoned_pages) << (PAGE_SHIFT - 10)
    #endif
    #ifdef CONFIG_TRANSPARENT_HUGEPAGE
    - , K(global_page_state(NR_ANON_TRANSPARENT_HUGEPAGES) *
    - HPAGE_PMD_NR)
    + , K(global_page_state(NR_ANON_THPS) * HPAGE_PMD_NR)
    + , K(global_page_state(NR_FILE_THP_MAPPED) * HPAGE_PMD_NR)
    #endif
    #ifdef CONFIG_CMA
    , K(totalcma_pages)
    diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
    index c60df9257cc7..85fd4aac53a1 100644
    --- a/include/linux/mmzone.h
    +++ b/include/linux/mmzone.h
    @@ -158,7 +158,8 @@ enum zone_stat_item {
    WORKINGSET_REFAULT,
    WORKINGSET_ACTIVATE,
    WORKINGSET_NODERECLAIM,
    - NR_ANON_TRANSPARENT_HUGEPAGES,
    + NR_ANON_THPS,
    + NR_FILE_THP_MAPPED,
    NR_FREE_CMA_PAGES,
    NR_VM_ZONE_STAT_ITEMS };

    diff --git a/mm/huge_memory.c b/mm/huge_memory.c
    index 2e9e6f4afe40..44468fb7cdbf 100644
    --- a/mm/huge_memory.c
    +++ b/mm/huge_memory.c
    @@ -2982,7 +2982,7 @@ static void __split_huge_pmd_locked(struct vm_area_struct *vma, pmd_t *pmd,

    if (atomic_add_negative(-1, compound_mapcount_ptr(page))) {
    /* Last compound_mapcount is gone. */
    - __dec_zone_page_state(page, NR_ANON_TRANSPARENT_HUGEPAGES);
    + __dec_zone_page_state(page, NR_ANON_THPS);
    if (TestClearPageDoubleMap(page)) {
    /* No need in mapcount reference anymore */
    for (i = 0; i < HPAGE_PMD_NR; i++)
    diff --git a/mm/rmap.c b/mm/rmap.c
    index 66808955a5e0..359ec5cff9b0 100644
    --- a/mm/rmap.c
    +++ b/mm/rmap.c
    @@ -1227,10 +1227,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)))
    @@ -1268,7 +1266,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);
    @@ -1298,6 +1296,7 @@ void page_add_file_rmap(struct page *page, bool compound)
    }
    if (!atomic_inc_and_test(compound_mapcount_ptr(page)))
    goto out;
    + __inc_zone_page_state(page, NR_FILE_THP_MAPPED);
    } else {
    if (!atomic_inc_and_test(&page->_mapcount))
    goto out;
    @@ -1330,6 +1329,7 @@ static void page_remove_file_rmap(struct page *page, bool compound)
    }
    if (!atomic_add_negative(-1, compound_mapcount_ptr(page)))
    goto out;
    + __dec_zone_page_state(page, NR_FILE_THP_MAPPED);
    } else {
    if (!atomic_add_negative(-1, &page->_mapcount))
    goto out;
    @@ -1363,7 +1363,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)) {
    /*
    diff --git a/mm/vmstat.c b/mm/vmstat.c
    index 74f8c918ac4b..943b37f17007 100644
    --- a/mm/vmstat.c
    +++ b/mm/vmstat.c
    @@ -762,6 +762,7 @@ const char * const vmstat_text[] = {
    "workingset_activate",
    "workingset_nodereclaim",
    "nr_anon_transparent_hugepages",
    + "nr_file_transparent_hugepages_mapped",
    "nr_free_cma",

    /* enum writeback_stat_item counters */
    --
    2.7.0
    \
     
     \ /
      Last update: 2016-03-12 00:41    [W:4.142 / U:1.228 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site