diff options
author | Davidlohr Bueso <davidlohr@hp.com> | 2014-06-04 19:06:46 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-06-04 19:53:57 -0400 |
commit | 4f115147ff802267d0aa41e361c5aa5bd933d896 (patch) | |
tree | 27afdf3f60c21fde601df63d9e9998b0c758a3fe /mm/vmacache.c | |
parent | 6f04f48dc9c0433e2bb687f5f7f7af1aba97b04d (diff) |
mm,vmacache: add debug data
Introduce a CONFIG_DEBUG_VM_VMACACHE option to enable counting the cache
hit rate -- exported in /proc/vmstat.
Any updates to the caching scheme needs this kind of data, thus it can
save some work re-implementing the counting all the time.
Signed-off-by: Davidlohr Bueso <davidlohr@hp.com>
Cc: Aswin Chandramouleeswaran <aswin@hp.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/vmacache.c')
-rw-r--r-- | mm/vmacache.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/mm/vmacache.c b/mm/vmacache.c index 1037a3bab505..658ed3b3e38d 100644 --- a/mm/vmacache.c +++ b/mm/vmacache.c | |||
@@ -78,6 +78,8 @@ struct vm_area_struct *vmacache_find(struct mm_struct *mm, unsigned long addr) | |||
78 | if (!vmacache_valid(mm)) | 78 | if (!vmacache_valid(mm)) |
79 | return NULL; | 79 | return NULL; |
80 | 80 | ||
81 | count_vm_vmacache_event(VMACACHE_FIND_CALLS); | ||
82 | |||
81 | for (i = 0; i < VMACACHE_SIZE; i++) { | 83 | for (i = 0; i < VMACACHE_SIZE; i++) { |
82 | struct vm_area_struct *vma = current->vmacache[i]; | 84 | struct vm_area_struct *vma = current->vmacache[i]; |
83 | 85 | ||
@@ -85,8 +87,10 @@ struct vm_area_struct *vmacache_find(struct mm_struct *mm, unsigned long addr) | |||
85 | continue; | 87 | continue; |
86 | if (WARN_ON_ONCE(vma->vm_mm != mm)) | 88 | if (WARN_ON_ONCE(vma->vm_mm != mm)) |
87 | break; | 89 | break; |
88 | if (vma->vm_start <= addr && vma->vm_end > addr) | 90 | if (vma->vm_start <= addr && vma->vm_end > addr) { |
91 | count_vm_vmacache_event(VMACACHE_FIND_HITS); | ||
89 | return vma; | 92 | return vma; |
93 | } | ||
90 | } | 94 | } |
91 | 95 | ||
92 | return NULL; | 96 | return NULL; |
@@ -102,11 +106,15 @@ struct vm_area_struct *vmacache_find_exact(struct mm_struct *mm, | |||
102 | if (!vmacache_valid(mm)) | 106 | if (!vmacache_valid(mm)) |
103 | return NULL; | 107 | return NULL; |
104 | 108 | ||
109 | count_vm_vmacache_event(VMACACHE_FIND_CALLS); | ||
110 | |||
105 | for (i = 0; i < VMACACHE_SIZE; i++) { | 111 | for (i = 0; i < VMACACHE_SIZE; i++) { |
106 | struct vm_area_struct *vma = current->vmacache[i]; | 112 | struct vm_area_struct *vma = current->vmacache[i]; |
107 | 113 | ||
108 | if (vma && vma->vm_start == start && vma->vm_end == end) | 114 | if (vma && vma->vm_start == start && vma->vm_end == end) { |
115 | count_vm_vmacache_event(VMACACHE_FIND_HITS); | ||
109 | return vma; | 116 | return vma; |
117 | } | ||
110 | } | 118 | } |
111 | 119 | ||
112 | return NULL; | 120 | return NULL; |