From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 47941C3DA7F for ; Fri, 26 Jul 2024 09:18:01 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CE3DB6B0096; Fri, 26 Jul 2024 05:18:00 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C94396B0099; Fri, 26 Jul 2024 05:18:00 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B5BA26B009B; Fri, 26 Jul 2024 05:18:00 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 940586B0096 for ; Fri, 26 Jul 2024 05:18:00 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 26E12A60D0 for ; Fri, 26 Jul 2024 09:18:00 +0000 (UTC) X-FDA: 82381351920.05.09086CD Received: from mail-ed1-f43.google.com (mail-ed1-f43.google.com [209.85.208.43]) by imf26.hostedemail.com (Postfix) with ESMTP id 204A2140018 for ; Fri, 26 Jul 2024 09:17:57 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=suse.com header.s=google header.b=ItnN1tPi; dmarc=pass (policy=quarantine) header.from=suse.com; spf=pass (imf26.hostedemail.com: domain of mhocko@suse.com designates 209.85.208.43 as permitted sender) smtp.mailfrom=mhocko@suse.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1721985437; a=rsa-sha256; cv=none; b=IzCMRMIeP3Rsm7stlCTb3zQQwVGeUWwSrO4L67MrgDSeS3ZQKHkDqytwydqZfFRV2heOIB 32+gUoB2ExWcEwTsbEsuOuddjkcQd2hzU6B+MVfwvVoH4NOQ5sB2GRlIkYx4A+sfeKRBnL kP7NX+b1r85pUA8IOLq6J7RAsBbamgQ= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=suse.com header.s=google header.b=ItnN1tPi; dmarc=pass (policy=quarantine) header.from=suse.com; spf=pass (imf26.hostedemail.com: domain of mhocko@suse.com designates 209.85.208.43 as permitted sender) smtp.mailfrom=mhocko@suse.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1721985437; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=DBdg6mNGUPcbuWUmi2rLCF5VQjxVbO3U5q1H7NBUlvo=; b=cDpJ7AwlucSqKo3QNfI5nF5MeQ3v5xeP66RP2xHcXua0RAD9iau6+yCfV7pQoBPlctAFfs e2Ff+77aeJJ75G6vhpiEoSZ9Kdx4NpOQg6lWoHLR9xZQchRPUtEBe+100qVWx3oMWOOtAo 3xfWLmeKWMiE1rJsD1DYKa+bBWpT5bM= Received: by mail-ed1-f43.google.com with SMTP id 4fb4d7f45d1cf-5a156557029so2575442a12.2 for ; Fri, 26 Jul 2024 02:17:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1721985476; x=1722590276; darn=kvack.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=DBdg6mNGUPcbuWUmi2rLCF5VQjxVbO3U5q1H7NBUlvo=; b=ItnN1tPi22C5jRhSF1DaOaUYG8T9RsMYgJwoMcIcWxohn2rpbJ1ZoZvRaRUcXyW1Sq nHPm9XKohkv5kFcltVXcN8IODkLu6PyP+3+5l2C8XAMw1q5XzB5nl17VF6vdTqn4HgkA 2XRF080dL3Xce6nAQ/W+KGkA7QeFvvtE7JF2976JiNodSDdk8sK6dlDCGZ1Uy5yGQEBl H5wyDWiY+GZCPWH9iGvPHtkR43kwoQFH3SvT7EwSz0icL4SiGF+UXhFMy6yS9Cd47OSQ g1IY6AhMETp6+gQOy7A5+GL6lHFtBZG8qsxppof1lRSMSq7650YctIKMO/V/2Bo1zArP 4OEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1721985476; x=1722590276; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=DBdg6mNGUPcbuWUmi2rLCF5VQjxVbO3U5q1H7NBUlvo=; b=TEcy1h+G3KeJwfsE/j1Zx+jw15y5mC50/3ZKplQCnAcbnbqguJu5B5NpC0WxefJfSb xhqoYS58ljSFSLc0icJ4w1o6JWqYkfB1LN5XDR3OxfD7iTFZnnVI5Zt1OkjVOslV0AMX sDOB3QeI5OIOWfK7n8AC/DP1JO7jr7DrYYHa7cIvdX97vzWAL9jI0m5JuH8+boSAPQQZ kawlQ1PgsF+QUNyBGY6U2vNQdgV5GTUtCFMtkHXoU+IcFL2bIA/HiCZDPrNmrYNW/AKm FdvYXBgQSj6uHI2XnsEDv6AcdriP0jhKWLbMUMuldYKo5Tnku8oZl8QdDKF9kfd4JQlM a0VA== X-Gm-Message-State: AOJu0YxhdR3N9yQDCJhnam2cNTmsAemTeMtt+xK8AJAy03lxUku476tk G6RjEqJwrl1h0XH6TXulxspmTvUfoVwJWqrbkKfGKkMewI3DDJrq5AY6xoSVGNU= X-Google-Smtp-Source: AGHT+IGxC8XByHC1B4bLYFrxJ47zVM0KLxN8ioKkWJmQFI2t+P0w18j+O+o9I9bFHiaHoP5YPtieIw== X-Received: by 2002:a50:9eec:0:b0:5a2:eab0:4a with SMTP id 4fb4d7f45d1cf-5ac63c52d21mr3357767a12.24.1721985476368; Fri, 26 Jul 2024 02:17:56 -0700 (PDT) Received: from localhost (109-81-83-231.rct.o2.cz. [109.81.83.231]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5ac63593a8esm1674213a12.30.2024.07.26.02.17.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Jul 2024 02:17:56 -0700 (PDT) Date: Fri, 26 Jul 2024 11:17:55 +0200 From: Michal Hocko To: Li Zhijian Cc: linux-mm@kvack.org, Andrew Morton , David Hildenbrand , Oscar Salvador , linux-kernel@vger.kernel.org, Yasunori Gotou Subject: Re: [PATCH RFC] mm: Avoid triggering oom-killer during memory hot-remove operations Message-ID: References: <20240726084456.1309928-1-lizhijian@fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240726084456.1309928-1-lizhijian@fujitsu.com> X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 204A2140018 X-Stat-Signature: bythwnajb1n6ai8ryjmyxricumuekbcc X-Rspam-User: X-HE-Tag: 1721985477-967554 X-HE-Meta: U2FsdGVkX19sOMPPeQpOfdhmnJQJT3r7NU9wcimLYVGjUlOPyJTSqLd5dZJ6QbCB2rDmfo4WpDhgX62+r/ypvdVnwxaqIeTjlm43pjfOB8VR+1f7sLVjaDJq6t0gfXVJG4R9BKvCGnDupk0ASe5FVGs1f2VTpA6+bDSfuYioBI+zxhdQOaOCtsr0lSrADnYc1Iw3uoJiPg3cYlB1K1aKzaPatFlrTNBNdE7wb/IXI/1fdRdPTjwXerTzWhF7BskWlxGnloJkeC/Wlw4CbPyLg7TpoPtlLPz6aZM1Ec1yxVG4PRGMuQKiL5gUhdGYpIA4homk/f1+RkJQYnYQ141DdzvWH7CQ7uMpCt3YzcKEPv1pMvMuvohRtEV3YMa+FUILMFfcd9eTZoLsG3WfXoA1RNyt1aAT3mwUcn+1oNEpCQqd28T3kG5VK4vUN82I/wuM2xdV7thwB96NzSSbtj6qymZrFoniuNyicDSmwX5wdyVTdOSYbc1BLH2TI/GUZHEnUCxRPR1YyPFOsbdyfecgDBmTIT7CABSKe5f5JZXjAy7EC7OLn7ZlVRaUBPUXjYdp3V9lmotvp7cs+lSm/vnMggawcModhnlEWHdcdUi/zgbgPAA2SIRUgoKZU+ruDNYD2TBLbwUNxbvmszA3JrEE5gZXOWSkkXd71ffN99jyvhbH5iqZyHB08bPYb1mzg3aYgskx2IL7VQB9u0qhBt3koAahw45pgeAshveEgGAS0Wi5c3Wn+s2oNZeaiF1aYrkfar6mqaOOAap5D4aDY20aAR+n20xI64PwnNEfAiJbqhoaRdsA7HLa1PGe8odzUVRIklQcIaZFh6BztaZ2EIR9e1oEEjsPs2FSN1k+gD2k7Cf/uRmYDTrsPI9XRLiaoLe+lUgb/8lHc8b2JvNQhMwLxBD5XnKoAwQ7xXu1u719IqTiqJQCD1fFMoEsfIAbZs5zk4K/zzooy7ZJpA+S02j YeH/ouXX CggaYixD3CJrHM5PV/83EMH+lSp3Qvt4UKb7mn2rRvVUzE5VELqNsFOgIDEzaP4ZU1S1/XupgMUrfMnsWl8KujHN6Wn5Q1lbnCDY5U8R85rQkzNPgOYZpc6l53Dz3DRTZP5iYlD/Z1AzD97nadgHZKhmreYHKZMHhC3lpYGC0lkaxSWZA0/UqtBgs6Ve/BkXdbTNYnv8MXtZmSuPnrgQWhxSElHGxyOaXy3K55AWiEpgyA+Mb6mvE4uCyAo3KNG/7jXFkW7kVnC7+mNSUNWRCWyMd3P8d0l3P4mVvHM2bQe0PZa1Xsu9Tz3t05XP78I/BIaWp9ZhXTftPz/9b2iV0qrCVqjtjE7TeuzLAs+A9rKAlNhfbQzQGaCL8EjLGA4et23nQj/xed0tNADU= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Fri 26-07-24 16:44:56, Li Zhijian wrote: > When a process is bound to a node that is being hot-removed, any memory > allocation attempts from that node should fail gracefully without > triggering the OOM-killer. However, the current behavior can cause the > oom-killer to be invoked, leading to the termination of processes on other > nodes, even when there is sufficient memory available in the system. But you said they are bound to the node that is offlined. > Prevent the oom-killer from being triggered by processes bound to a > node undergoing hot-remove operations. Instead, the allocation attempts > from the offlining node will simply fail, allowing the process to handle > the failure appropriately without causing disruption to the system. NAK. Also it is not really clear why process of offlining should behave any different from after the node is offlined. Could you describe an actual problem you are facing with much more details please? > Signed-off-by: Li Zhijian > --- > include/linux/memory_hotplug.h | 6 ++++++ > mm/memory_hotplug.c | 21 +++++++++++++++++++++ > mm/page_alloc.c | 6 ++++++ > 3 files changed, 33 insertions(+) > > diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h > index 7a9ff464608d..0ca804215e11 100644 > --- a/include/linux/memory_hotplug.h > +++ b/include/linux/memory_hotplug.h > @@ -332,6 +332,7 @@ extern int offline_pages(unsigned long start_pfn, unsigned long nr_pages, > extern int remove_memory(u64 start, u64 size); > extern void __remove_memory(u64 start, u64 size); > extern int offline_and_remove_memory(u64 start, u64 size); > +bool is_offlining_node(nodemask_t nodes); > > #else > static inline void try_offline_node(int nid) {} > @@ -348,6 +349,11 @@ static inline int remove_memory(u64 start, u64 size) > } > > static inline void __remove_memory(u64 start, u64 size) {} > + > +static inline bool is_offlining_node(nodemask_t nodes) > +{ > + return false; > +} > #endif /* CONFIG_MEMORY_HOTREMOVE */ > > #ifdef CONFIG_MEMORY_HOTPLUG > diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c > index 431b1f6753c0..da3982751ba9 100644 > --- a/mm/memory_hotplug.c > +++ b/mm/memory_hotplug.c > @@ -1938,6 +1938,22 @@ static int count_system_ram_pages_cb(unsigned long start_pfn, > return 0; > } > > +static nodemask_t offlining_node = NODE_MASK_NONE; > + > +bool is_offlining_node(nodemask_t nodes) > +{ > + return nodes_equal(offlining_node, nodes); > +} > + > +static void offline_pages_start(int node) > +{ > + node_set(node, offlining_node); > +} > + > +static void offline_pages_end(void) > +{ > + offlining_node = NODE_MASK_NONE; > +} > /* > * Must be called with mem_hotplug_lock in write mode. > */ > @@ -1991,6 +2007,7 @@ int __ref offline_pages(unsigned long start_pfn, unsigned long nr_pages, > goto failed_removal; > } > > + offline_pages_start(node); > /* > * Disable pcplists so that page isolation cannot race with freeing > * in a way that pages from isolated pageblock are left on pcplists. > @@ -2107,6 +2124,8 @@ int __ref offline_pages(unsigned long start_pfn, unsigned long nr_pages, > > memory_notify(MEM_OFFLINE, &arg); > remove_pfn_range_from_zone(zone, start_pfn, nr_pages); > + offline_pages_end(); > + > return 0; > > failed_removal_isolated: > @@ -2121,6 +2140,8 @@ int __ref offline_pages(unsigned long start_pfn, unsigned long nr_pages, > (unsigned long long) start_pfn << PAGE_SHIFT, > ((unsigned long long) end_pfn << PAGE_SHIFT) - 1, > reason); > + > + offline_pages_end(); > return ret; > } > > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > index 1780df31d5f5..acdab6b114a5 100644 > --- a/mm/page_alloc.c > +++ b/mm/page_alloc.c > @@ -3563,6 +3563,12 @@ __alloc_pages_may_oom(gfp_t gfp_mask, unsigned int order, > if (page) > goto out; > > + /* hot-remove is on-going, it generally fails to allocate memory from > + * the being removed memory node. Leave it alone. > + */ > + if (is_offlining_node(*ac->nodemask)) > + goto out; > + > /* Coredumps can quickly deplete all memory reserves */ > if (current->flags & PF_DUMPCORE) > goto out; > -- > 2.29.2 > -- Michal Hocko SUSE Labs