diff options
author | Andrea Arcangeli <aarcange@redhat.com> | 2011-01-13 18:46:58 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-01-13 20:32:43 -0500 |
commit | 79134171df238171daa4c024a42b77b401ccb00b (patch) | |
tree | af7872d5851e371d09b9fe7eb80f4809713c79fb /mm/rmap.c | |
parent | b9bbfbe30ae088cc88a4b2ba7732baeebd1a0162 (diff) |
thp: transparent hugepage vmstat
Add hugepage stat information to /proc/vmstat and /proc/meminfo.
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com>
Acked-by: Rik van Riel <riel@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/rmap.c')
-rw-r--r-- | mm/rmap.c | 20 |
1 files changed, 16 insertions, 4 deletions
@@ -882,8 +882,13 @@ void do_page_add_anon_rmap(struct page *page, | |||
882 | struct vm_area_struct *vma, unsigned long address, int exclusive) | 882 | struct vm_area_struct *vma, unsigned long address, int exclusive) |
883 | { | 883 | { |
884 | int first = atomic_inc_and_test(&page->_mapcount); | 884 | int first = atomic_inc_and_test(&page->_mapcount); |
885 | if (first) | 885 | if (first) { |
886 | __inc_zone_page_state(page, NR_ANON_PAGES); | 886 | if (!PageTransHuge(page)) |
887 | __inc_zone_page_state(page, NR_ANON_PAGES); | ||
888 | else | ||
889 | __inc_zone_page_state(page, | ||
890 | NR_ANON_TRANSPARENT_HUGEPAGES); | ||
891 | } | ||
887 | if (unlikely(PageKsm(page))) | 892 | if (unlikely(PageKsm(page))) |
888 | return; | 893 | return; |
889 | 894 | ||
@@ -911,7 +916,10 @@ void page_add_new_anon_rmap(struct page *page, | |||
911 | VM_BUG_ON(address < vma->vm_start || address >= vma->vm_end); | 916 | VM_BUG_ON(address < vma->vm_start || address >= vma->vm_end); |
912 | SetPageSwapBacked(page); | 917 | SetPageSwapBacked(page); |
913 | atomic_set(&page->_mapcount, 0); /* increment count (starts at -1) */ | 918 | atomic_set(&page->_mapcount, 0); /* increment count (starts at -1) */ |
914 | __inc_zone_page_state(page, NR_ANON_PAGES); | 919 | if (!PageTransHuge(page)) |
920 | __inc_zone_page_state(page, NR_ANON_PAGES); | ||
921 | else | ||
922 | __inc_zone_page_state(page, NR_ANON_TRANSPARENT_HUGEPAGES); | ||
915 | __page_set_anon_rmap(page, vma, address, 1); | 923 | __page_set_anon_rmap(page, vma, address, 1); |
916 | if (page_evictable(page, vma)) | 924 | if (page_evictable(page, vma)) |
917 | lru_cache_add_lru(page, LRU_ACTIVE_ANON); | 925 | lru_cache_add_lru(page, LRU_ACTIVE_ANON); |
@@ -964,7 +972,11 @@ void page_remove_rmap(struct page *page) | |||
964 | return; | 972 | return; |
965 | if (PageAnon(page)) { | 973 | if (PageAnon(page)) { |
966 | mem_cgroup_uncharge_page(page); | 974 | mem_cgroup_uncharge_page(page); |
967 | __dec_zone_page_state(page, NR_ANON_PAGES); | 975 | if (!PageTransHuge(page)) |
976 | __dec_zone_page_state(page, NR_ANON_PAGES); | ||
977 | else | ||
978 | __dec_zone_page_state(page, | ||
979 | NR_ANON_TRANSPARENT_HUGEPAGES); | ||
968 | } else { | 980 | } else { |
969 | __dec_zone_page_state(page, NR_FILE_MAPPED); | 981 | __dec_zone_page_state(page, NR_FILE_MAPPED); |
970 | mem_cgroup_update_file_mapped(page, -1); | 982 | mem_cgroup_update_file_mapped(page, -1); |