From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753207AbbCIMEe (ORCPT ); Mon, 9 Mar 2015 08:04:34 -0400 Received: from mail-ig0-f170.google.com ([209.85.213.170]:37396 "EHLO mail-ig0-f170.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752138AbbCIMEa (ORCPT ); Mon, 9 Mar 2015 08:04:30 -0400 References: <20150309043051.GA13380@node.dhcp.inet.fi> From: Greg Thelen To: David Rientjes Cc: Andrew Morton , Naoya Horiguchi , Davidlohr Bueso , "Kirill A. Shutemov" , linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: Re: [patch v2] mm, hugetlb: abort __get_user_pages if current has been oom killed In-reply-to: Date: Mon, 09 Mar 2015 05:04:25 -0700 Message-ID: MIME-Version: 1.0 Content-Type: text/plain Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Mar 09 2015, David Rientjes wrote: > If __get_user_pages() is faulting a significant number of hugetlb pages, > usually as the result of mmap(MAP_LOCKED), it can potentially allocate a > very large amount of memory. > > If the process has been oom killed, this will cause a lot of memory to > be overcharged to its memcg since it has access to memory reserves or > could potentially deplete all system memory reserves. s/memcg/hugetlb_cgroup/ but I don't think hugetlb has any fatal_signal_pending() based overcharging. I no objection to the patch, but this doesn't seems like a cgroup thing, so the commit log could stand a tweak. > In the same way that commit 4779280d1ea4 ("mm: make get_user_pages() > interruptible") aborted for pending SIGKILLs when faulting non-hugetlb > memory, based on the premise of commit 462e00cc7151 ("oom: stop > allocating user memory if TIF_MEMDIE is set"), hugetlb page faults now > terminate when the process has been oom killed. > > Cc: Naoya Horiguchi > Cc: Davidlohr Bueso > Cc: "Kirill A. Shutemov" > Signed-off-by: David Rientjes > --- > v2: check signal inside follow_huegtlb_page() loop per Kirill > > mm/hugetlb.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/mm/hugetlb.c b/mm/hugetlb.c > --- a/mm/hugetlb.c > +++ b/mm/hugetlb.c > @@ -3276,6 +3276,15 @@ long follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma, > struct page *page; > > /* > + * If we have a pending SIGKILL, don't keep faulting pages and > + * potentially allocating memory. > + */ > + if (unlikely(fatal_signal_pending(current))) { > + remainder = 0; > + break; > + } > + > + /* > * Some archs (sparc64, sh*) have multiple pte_ts to > * each hugepage. We have to make sure we get the > * first, for the page indexing below to work.