From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michal Hocko Subject: Re: [RFC PATCH 3/3] mm, proc: report PR_SET_THP_DISABLE in proc Date: Tue, 20 Nov 2018 12:42:19 +0100 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 Return-path: Content-Disposition: inline In-Reply-To: <20181120103515.25280-4-mhocko@kernel.org> Sender: linux-kernel-owner@vger.kernel.org To: linux-api@vger.kernel.org Cc: Andrew Morton , Alexey Dobriyan , linux-mm@kvack.org, LKML , David Rientjes List-Id: linux-api@vger.kernel.org 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