From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-f72.google.com (mail-ed1-f72.google.com [209.85.208.72]) by kanga.kvack.org (Postfix) with ESMTP id 1D37F6B201E for ; Tue, 20 Nov 2018 06:42:22 -0500 (EST) Received: by mail-ed1-f72.google.com with SMTP id x98-v6so1155243ede.0 for ; Tue, 20 Nov 2018 03:42:22 -0800 (PST) Received: from mx1.suse.de (mx2.suse.de. [195.135.220.15]) by mx.google.com with ESMTPS id 12-v6si314165eja.151.2018.11.20.03.42.20 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 20 Nov 2018 03:42:20 -0800 (PST) Date: Tue, 20 Nov 2018 12:42:19 +0100 From: Michal Hocko Subject: Re: [RFC PATCH 3/3] mm, proc: report PR_SET_THP_DISABLE in proc Message-ID: <20181120114219.GG22247@dhcp22.suse.cz> References: <20181120103515.25280-1-mhocko@kernel.org> <20181120103515.25280-4-mhocko@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20181120103515.25280-4-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: linux-api@vger.kernel.org Cc: Andrew Morton , Alexey Dobriyan , linux-mm@kvack.org, LKML , David Rientjes Damn, David somehow didn't make it to the CC list. Sorry about that. On Tue 20-11-18 11:35:15, Michal Hocko wrote: > From: Michal Hocko > > David Rientjes has reported that 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//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//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 > > Fixes: 1860033237d4 ("mm: make PR_SET_THP_DISABLE immediately active") > Signed-off-by: Michal Hocko > --- > Documentation/filesystems/proc.txt | 3 +++ > fs/proc/array.c | 10 ++++++++++ > 2 files changed, 13 insertions(+) > > diff --git a/Documentation/filesystems/proc.txt b/Documentation/filesystems/proc.txt > index 06562bab509a..7995e9322889 100644 > --- a/Documentation/filesystems/proc.txt > +++ b/Documentation/filesystems/proc.txt > @@ -182,6 +182,7 @@ For example, to get the status information of a process, all you have to do is > VmSwap: 0 kB > HugetlbPages: 0 kB > CoreDumping: 0 > + THP_enabled: 1 > Threads: 1 > SigQ: 0/28578 > SigPnd: 0000000000000000 > @@ -256,6 +257,8 @@ Table 1-2: Contents of the status files (as of 4.8) > HugetlbPages size of hugetlb memory portions > CoreDumping process's memory is currently being dumped > (killing the process may lead to a corrupted core) > + THP_enabled process is allowed to use THP (returns 0 when > + PR_SET_THP_DISABLE is set on the process > Threads number of threads > SigQ number of signals queued/max. number for queue > SigPnd bitmap of pending signals for the thread > 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) > seq_putc(m, '\n'); > } > > +static inline void task_thp_status(struct seq_file *m, struct mm_struct *mm) > +{ > + bool thp_enabled = IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE); > + > + if (thp_enabled) > + thp_enabled = !test_bit(MMF_DISABLE_THP, &mm->flags); > + seq_printf(m, "THP_enabled:\t%d\n", thp_enabled); > +} > + > int proc_pid_status(struct seq_file *m, struct pid_namespace *ns, > struct pid *pid, struct task_struct *task) > { > @@ -406,6 +415,7 @@ int proc_pid_status(struct seq_file *m, struct pid_namespace *ns, > if (mm) { > task_mem(m, mm); > task_core_dumping(m, mm); > + task_thp_status(m, mm); > mmput(mm); > } > task_sig(m, task); > -- > 2.19.1 -- Michal Hocko SUSE Labs