From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail172.messagelabs.com (mail172.messagelabs.com [216.82.254.3]) by kanga.kvack.org (Postfix) with ESMTP id 11D8C6B01AE for ; Sun, 28 Mar 2010 22:17:43 -0400 (EDT) Date: Mon, 29 Mar 2010 11:13:16 +0900 From: Daisuke Nishimura Subject: Re: [PATCH 33 of 41] transparent hugepage vmstat Message-Id: <20100329111316.7c01e1ff.nishimura@mxp.nes.nec.co.jp> In-Reply-To: References: Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org To: Andrea Arcangeli Cc: linux-mm@kvack.org, Andrew Morton , Marcelo Tosatti , Adam Litke , Avi Kivity , Izik Eidus , Hugh Dickins , Nick Piggin , Rik van Riel , Mel Gorman , Dave Hansen , Benjamin Herrenschmidt , Ingo Molnar , Mike Travis , KAMEZAWA Hiroyuki , Christoph Lameter , Chris Wright , bpicco@redhat.com, KOSAKI Motohiro , Balbir Singh , Arnd Bergmann , "Michael S. Tsirkin" , Peter Zijlstra , Johannes Weiner , Daisuke Nishimura List-ID: On Fri, 26 Mar 2010 18:00:37 +0100, Andrea Arcangeli wrote: > From: Andrea Arcangeli > > Add hugepage stat information to /proc/vmstat and /proc/meminfo. > I'm sorry if it has been discussed already, but shouldn't we also count LRU_(IN)ACTIVE_LRU properly ? Is it a TODO ? Thanks, Daisuke Nishimura. > Signed-off-by: Andrea Arcangeli > Acked-by: Rik van Riel > --- > > diff --git a/fs/proc/meminfo.c b/fs/proc/meminfo.c > --- a/fs/proc/meminfo.c > +++ b/fs/proc/meminfo.c > @@ -101,6 +101,9 @@ static int meminfo_proc_show(struct seq_ > #ifdef CONFIG_MEMORY_FAILURE > "HardwareCorrupted: %5lu kB\n" > #endif > +#ifdef CONFIG_TRANSPARENT_HUGEPAGE > + "AnonHugePages: %8lu kB\n" > +#endif > , > K(i.totalram), > K(i.freeram), > @@ -151,6 +154,10 @@ static int meminfo_proc_show(struct seq_ > #ifdef CONFIG_MEMORY_FAILURE > ,atomic_long_read(&mce_bad_pages) << (PAGE_SHIFT - 10) > #endif > +#ifdef CONFIG_TRANSPARENT_HUGEPAGE > + ,K(global_page_state(NR_ANON_TRANSPARENT_HUGEPAGES) * > + HPAGE_PMD_NR) > +#endif > ); > > hugetlb_report_meminfo(m); > diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h > --- a/include/linux/mmzone.h > +++ b/include/linux/mmzone.h > @@ -112,6 +112,7 @@ enum zone_stat_item { > NUMA_LOCAL, /* allocation from local node */ > NUMA_OTHER, /* allocation from other node */ > #endif > + NR_ANON_TRANSPARENT_HUGEPAGES, > NR_VM_ZONE_STAT_ITEMS }; > > /* > diff --git a/mm/huge_memory.c b/mm/huge_memory.c > --- a/mm/huge_memory.c > +++ b/mm/huge_memory.c > @@ -724,6 +724,9 @@ static void __split_huge_page_refcount(s > put_page(page_tail); > } > > + __dec_zone_page_state(page, NR_ANON_TRANSPARENT_HUGEPAGES); > + __mod_zone_page_state(zone, NR_ANON_PAGES, HPAGE_PMD_NR); > + > ClearPageCompound(page); > compound_unlock(page); > spin_unlock_irq(&zone->lru_lock); > diff --git a/mm/rmap.c b/mm/rmap.c > --- a/mm/rmap.c > +++ b/mm/rmap.c > @@ -795,8 +795,13 @@ void page_add_anon_rmap(struct page *pag > struct vm_area_struct *vma, unsigned long address) > { > int first = atomic_inc_and_test(&page->_mapcount); > - if (first) > - __inc_zone_page_state(page, NR_ANON_PAGES); > + if (first) { > + if (!PageTransHuge(page)) > + __inc_zone_page_state(page, NR_ANON_PAGES); > + else > + __inc_zone_page_state(page, > + NR_ANON_TRANSPARENT_HUGEPAGES); > + } > if (unlikely(PageKsm(page))) > return; > > @@ -824,7 +829,10 @@ void page_add_new_anon_rmap(struct page > VM_BUG_ON(address < vma->vm_start || address >= vma->vm_end); > SetPageSwapBacked(page); > atomic_set(&page->_mapcount, 0); /* increment count (starts at -1) */ > - __inc_zone_page_state(page, NR_ANON_PAGES); > + if (!PageTransHuge(page)) > + __inc_zone_page_state(page, NR_ANON_PAGES); > + else > + __inc_zone_page_state(page, NR_ANON_TRANSPARENT_HUGEPAGES); > __page_set_anon_rmap(page, vma, address); > if (page_evictable(page, vma)) > lru_cache_add_lru(page, LRU_ACTIVE_ANON); > @@ -871,7 +879,11 @@ void page_remove_rmap(struct page *page) > } > if (PageAnon(page)) { > mem_cgroup_uncharge_page(page); > - __dec_zone_page_state(page, NR_ANON_PAGES); > + if (!PageTransHuge(page)) > + __dec_zone_page_state(page, NR_ANON_PAGES); > + else > + __dec_zone_page_state(page, > + NR_ANON_TRANSPARENT_HUGEPAGES); > } else { > __dec_zone_page_state(page, NR_FILE_MAPPED); > mem_cgroup_update_file_mapped(page, -1); > diff --git a/mm/vmstat.c b/mm/vmstat.c > --- a/mm/vmstat.c > +++ b/mm/vmstat.c > @@ -657,6 +657,9 @@ static const char * const vmstat_text[] > "numa_local", > "numa_other", > #endif > +#ifdef CONFIG_TRANSPARENT_HUGEPAGE > + "nr_anon_transparent_hugepages", > +#endif > > #ifdef CONFIG_VM_EVENT_COUNTERS > "pgpgin", > > -- > To unsubscribe, send a message with 'unsubscribe linux-mm' in > the body to majordomo@kvack.org. For more info on Linux MM, > see: http://www.linux-mm.org/ . > Don't email: email@kvack.org -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org