aboutsummaryrefslogtreecommitdiffstats
path: root/fs/proc/array.c
diff options
context:
space:
mode:
authorMichal Hocko <mhocko@suse.com>2018-12-28 03:38:25 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2018-12-28 15:11:50 -0500
commita1400af755631f5267f7cc3d0fda5ba72f58d7d3 (patch)
tree4f178a11b1ae64bc94bb7b073b3efb5a6558b9b1 /fs/proc/array.c
parent7635d9cbe8327e131a1d3d8517dc186c2796ce2e (diff)
mm, proc: report PR_SET_THP_DISABLE in proc
David Rientjes has reported that commit 1860033237d4 ("mm: make PR_SET_THP_DISABLE immediately active") has changed the way how we report THPable VMAs to the userspace. Their monitoring tool is triggering false alarms on PR_SET_THP_DISABLE tasks because it considers an insufficient THP usage as a memory fragmentation resp. memory pressure issue. Before the said commit each newly created VMA inherited VM_NOHUGEPAGE flag and that got exposed to the userspace via /proc/<pid>/smaps file. This implementation had its downsides as explained in the commit message but it is true that the userspace doesn't have any means to query for the process wide THP enabled/disabled status. PR_SET_THP_DISABLE is a process wide flag so it makes a lot of sense to export in the process wide context rather than per-vma. Introduce a new field to /proc/<pid>/status which export this status. If PR_SET_THP_DISABLE is used then it reports false same as when the THP is not compiled in. It doesn't consider the global THP status because we already export that information via sysfs Link: http://lkml.kernel.org/r/20181211143641.3503-4-mhocko@kernel.org Fixes: 1860033237d4 ("mm: make PR_SET_THP_DISABLE immediately active") Signed-off-by: Michal Hocko <mhocko@suse.com> Acked-by: Vlastimil Babka <vbabka@suse.cz> Reported-by: David Rientjes <rientjes@google.com> Cc: Dan Williams <dan.j.williams@intel.com> Cc: Jan Kara <jack@suse.cz> Cc: Mike Rapoport <rppt@linux.ibm.com> Cc: Paul Oppenheimer <bepvte@gmail.com> Cc: William Kucharski <william.kucharski@oracle.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/proc/array.c')
-rw-r--r--fs/proc/array.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/fs/proc/array.c b/fs/proc/array.c
index 0ceb3b6b37e7..9d428d5a0ac8 100644
--- a/fs/proc/array.c
+++ b/fs/proc/array.c
@@ -392,6 +392,15 @@ static inline void task_core_dumping(struct seq_file *m, struct mm_struct *mm)
392 seq_putc(m, '\n'); 392 seq_putc(m, '\n');
393} 393}
394 394
395static inline void task_thp_status(struct seq_file *m, struct mm_struct *mm)
396{
397 bool thp_enabled = IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE);
398
399 if (thp_enabled)
400 thp_enabled = !test_bit(MMF_DISABLE_THP, &mm->flags);
401 seq_printf(m, "THP_enabled:\t%d\n", thp_enabled);
402}
403
395int proc_pid_status(struct seq_file *m, struct pid_namespace *ns, 404int proc_pid_status(struct seq_file *m, struct pid_namespace *ns,
396 struct pid *pid, struct task_struct *task) 405 struct pid *pid, struct task_struct *task)
397{ 406{
@@ -406,6 +415,7 @@ int proc_pid_status(struct seq_file *m, struct pid_namespace *ns,
406 if (mm) { 415 if (mm) {
407 task_mem(m, mm); 416 task_mem(m, mm);
408 task_core_dumping(m, mm); 417 task_core_dumping(m, mm);
418 task_thp_status(m, mm);
409 mmput(mm); 419 mmput(mm);
410 } 420 }
411 task_sig(m, task); 421 task_sig(m, task);