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 4F8F2C433F5 for ; Wed, 6 Apr 2022 05:02:37 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D22816B0072; Wed, 6 Apr 2022 01:02:26 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CD0586B0073; Wed, 6 Apr 2022 01:02:26 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B982A6B0074; Wed, 6 Apr 2022 01:02:26 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0081.hostedemail.com [216.40.44.81]) by kanga.kvack.org (Postfix) with ESMTP id A69F06B0072 for ; Wed, 6 Apr 2022 01:02:26 -0400 (EDT) Received: from smtpin31.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id 61AD6183432B7 for ; Wed, 6 Apr 2022 05:02:16 +0000 (UTC) X-FDA: 79325257872.31.BD451BD Received: from mail-il1-f176.google.com (mail-il1-f176.google.com [209.85.166.176]) by imf28.hostedemail.com (Postfix) with ESMTP id D4691C002C for ; Wed, 6 Apr 2022 05:02:15 +0000 (UTC) Received: by mail-il1-f176.google.com with SMTP id 8so1134081ilq.4 for ; Tue, 05 Apr 2022 22:02:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=ODFzchJR5kzOOfH4oglWE4R0LrU8T2pOGN5A8BVCo3U=; b=iMReHv3tyRw5iMCz8nsm/TtFplAGB7XpTHYj0K2oYkopUO6t4HwextVI8qORbbaGVj EcG+otqi5GlQjjflDzYc/8/cPtEpyqO3dNxlnzJKfu+IR7lNPe3753enKC7p/QIJaoQB E5bNM6wedRbxPbQly/PW5sdWT1jhLumZ1DhChya1ZXjop4FkX/srSN03RigmnkAbxSQy DsSFdZpZENI96/TGkG9xn3EbM1mQlUIGBUGMiA696nNZ5U+rNv3/rX/Ged9OUqbcn0oA 2C4qiqpazawaBhaYDkL8Mltvia8Eze08LMWcaSxYL81rjiQFUnfKupEslHqjwoJoipBd dhMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=ODFzchJR5kzOOfH4oglWE4R0LrU8T2pOGN5A8BVCo3U=; b=0Wu1dBpvLRRyesW2lSzt14uoWtuZcEYByY/arIKld5V9ogUNYGG6gqhEfzCvmc08qq vZk+Aug9vcrZl/q51OokBJ8BHrUAqv6acTqgtlR0fo/R5IC5wPKkyDu+JdX8ozoJMe8n 45QpG5Rr/7BCMoMphwRWuSDNSBgSR+CD2oW8ddddpLk/EhYRvR0VU9rJMZSFB0lNb+va dXrbbHyilS2nljRHf90JScTSmwMOpFpqvTwSl1AeyUDom21Nfj4pRoJc6G9toD5T4kWW JNeYqyJEOMJi/uiocFhqdGra6kKLz7IzxIElzVfhpWlToj0VAuslR/375ReZM+xziIRo M8Ig== X-Gm-Message-State: AOAM532HvuP2m1tdj+6G6JmcFvVcjRjDB3Szgb+4kO15sxZMtho6QbM4 ahWXFL6zKrXtdxEOGcPjUrzPuhuCo8XIHf4ugWY66g== X-Google-Smtp-Source: ABdhPJwmuOvaNZWgsnAQnzJtXTjwwmG83FNEFBIyD4x+uWELL3Nws5M3TxO3jqYqbmSel0TB3jot31p6pdHCt7GwWqw= X-Received: by 2002:a92:cd8b:0:b0:2c9:ded9:f20d with SMTP id r11-20020a92cd8b000000b002c9ded9f20dmr3149531ilb.300.1649221334940; Tue, 05 Apr 2022 22:02:14 -0700 (PDT) MIME-Version: 1.0 References: <20220331084151.2600229-1-yosryahmed@google.com> <87y20nzyw4.fsf@yhuang6-desk2.ccr.corp.intel.com> <87o81fujdc.fsf@yhuang6-desk2.ccr.corp.intel.com> <87bkxfudrk.fsf@yhuang6-desk2.ccr.corp.intel.com> In-Reply-To: <87bkxfudrk.fsf@yhuang6-desk2.ccr.corp.intel.com> From: Wei Xu Date: Tue, 5 Apr 2022 22:02:03 -0700 Message-ID: Subject: Re: [PATCH resend] memcg: introduce per-memcg reclaim interface To: "Huang, Ying" Cc: Michal Hocko , Yosry Ahmed , Johannes Weiner , Shakeel Butt , Andrew Morton , David Rientjes , Tejun Heo , Zefan Li , Roman Gushchin , Cgroups , "open list:DOCUMENTATION" , Linux Kernel Mailing List , Linux MM , Jonathan Corbet , Yu Zhao , Dave Hansen , Greg Thelen Content-Type: text/plain; charset="UTF-8" X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: D4691C002C X-Stat-Signature: rat13kinoaytbjn13n93mui34xogp8or Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=iMReHv3t; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf28.hostedemail.com: domain of weixugc@google.com designates 209.85.166.176 as permitted sender) smtp.mailfrom=weixugc@google.com X-Rspam-User: X-HE-Tag: 1649221335-335599 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: On Tue, Apr 5, 2022 at 7:50 PM Huang, Ying wrote: > > Wei Xu writes: > > > On Tue, Apr 5, 2022 at 5:49 PM Huang, Ying wrote: > >> > >> Wei Xu writes: > >> > >> > On Sat, Apr 2, 2022 at 1:13 AM Huang, Ying wrote: > >> >> > >> >> Wei Xu writes: > >> >> > >> >> > On Fri, Apr 1, 2022 at 6:54 AM Michal Hocko wrote: > >> >> >> > >> >> >> On Thu 31-03-22 08:41:51, Yosry Ahmed wrote: > >> >> >> > From: Shakeel Butt > >> >> >> > > >> >> > >> >> [snip] > >> >> > >> >> >> > Possible Extensions: > >> >> >> > -------------------- > >> >> >> > > >> >> >> > - This interface can be extended with an additional parameter or flags > >> >> >> > to allow specifying one or more types of memory to reclaim from (e.g. > >> >> >> > file, anon, ..). > >> >> >> > > >> >> >> > - The interface can also be extended with a node mask to reclaim from > >> >> >> > specific nodes. This has use cases for reclaim-based demotion in memory > >> >> >> > tiering systens. > >> >> >> > > >> >> >> > - A similar per-node interface can also be added to support proactive > >> >> >> > reclaim and reclaim-based demotion in systems without memcg. > >> >> >> > > >> >> >> > For now, let's keep things simple by adding the basic functionality. > >> >> >> > >> >> >> Yes, I am for the simplicity and this really looks like a bare minumum > >> >> >> interface. But it is not really clear who do you want to add flags on > >> >> >> top of it? > >> >> >> > >> >> >> I am not really sure we really need a node aware interface for memcg. > >> >> >> The global reclaim interface will likely need a different node because > >> >> >> we do not want to make this CONFIG_MEMCG constrained. > >> >> > > >> >> > A nodemask argument for memory.reclaim can be useful for memory > >> >> > tiering between NUMA nodes with different performance. Similar to > >> >> > proactive reclaim, it can allow a userspace daemon to drive > >> >> > memcg-based proactive demotion via the reclaim-based demotion > >> >> > mechanism in the kernel. > >> >> > >> >> I am not sure whether nodemask is a good way for demoting pages between > >> >> different types of memory. For example, for a system with DRAM and > >> >> PMEM, if specifying DRAM node in nodemask means demoting to PMEM, what > >> >> is the meaning of specifying PMEM node? reclaiming to disk? > >> >> > >> >> In general, I have no objection to the idea in general. But we should > >> >> have a clear and consistent interface. Per my understanding the default > >> >> memcg interface is for memory, regardless of memory types. The memory > >> >> reclaiming means reduce the memory usage, regardless of memory types. > >> >> We need to either extending the semantics of memory reclaiming (to > >> >> include memory demoting too), or add another interface for memory > >> >> demoting. > >> > > >> > Good point. With the "demote pages during reclaim" patch series, > >> > reclaim is already extended to demote pages as well. For example, > >> > can_reclaim_anon_pages() returns true if demotion is allowed and > >> > shrink_page_list() can demote pages instead of reclaiming pages. > >> > >> These are in-kernel implementation, not the ABI. So we still have > >> the opportunity to define the ABI now. > >> > >> > Currently, demotion is disabled for memcg reclaim, which I think can > >> > be relaxed and also necessary for memcg-based proactive demotion. I'd > >> > like to suggest that we extend the semantics of memory.reclaim to > >> > cover memory demotion as well. A flag can be used to enable/disable > >> > the demotion behavior. > >> > >> If so, > >> > >> # echo A > memory.reclaim > >> > >> means > >> > >> a) "A" bytes memory are freed from the memcg, regardless demoting is > >> used or not. > >> > >> or > >> > >> b) "A" bytes memory are reclaimed from the memcg, some of them may be > >> freed, some of them may be just demoted from DRAM to PMEM. The total > >> number is "A". > >> > >> For me, a) looks more reasonable. > >> > > > > We can use a DEMOTE flag to control the demotion behavior for > > memory.reclaim. If the flag is not set (the default), then > > no_demotion of scan_control can be set to 1, similar to > > reclaim_pages(). > > If we have to use a flag to control the behavior, I think it's better to > have a separate interface (e.g. memory.demote). But do we really need b)? > I am fine with either approach: a separate interface similar to memory.reclaim, but dedicated to demotion, or multiplexing memory.reclaim for demotion with a flag. My understanding is that with the "demote pages during reclaim" support, b) is the expected behavior, or more precisely, pages that cannot be demoted may be freed or swapped out. This is reasonable. Demotion-only can also be supported via some arguments to the interface and changes to demotion code in the kernel. After all, this interface is being designed to be extensible based on the discussions so far. > > The question is then whether we want to rename memory.reclaim to > > something more general. I think this name is fine if reclaim-based > > demotion is an accepted concept. > > Best Regards, > Huang, Ying