Received: by 2002:a05:7412:3784:b0:e2:908c:2ebd with SMTP id jk4csp62400rdb; Fri, 29 Sep 2023 16:57:25 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGpnE53FVmRbtMrf2VDSUy6K5IdfsjHx+dzZDOO70iAILRvG6LG+WfEFvoGF0086RzLM47H X-Received: by 2002:a05:6a00:1396:b0:68a:2272:23e9 with SMTP id t22-20020a056a00139600b0068a227223e9mr6832782pfg.17.1696031844737; Fri, 29 Sep 2023 16:57:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1696031844; cv=none; d=google.com; s=arc-20160816; b=zlEmMrtf1xusJIjNa39ZdJ13NgnL4bBdYgcdwtnBDGD4dGdkL9niOSf6Bse/M5yJ1y dMXebE6HsDGOMVmWwOka+VgqXzHJocNUJuz7drIHLgCua9YwOGD7zKMIL4IptjqI9lBF 9m2mI4I1UEQ3gTao6jvYQNpn3Hy+VlQpE3M0fzD5K7zhCsQIAbwu5BHQ5dFNc3uYXdMA ++lExBtJ87I6Rxz7A3dVBUPAmNAtlVMDwOEyMRhlNTCAmCoP1SWG5I9fw+smYrVpr74U oJOSdIxewqwH6Ooo7m5cH1+qze9OT0RaN2XzN0yKe1z6zXEVQ+S3WNDJo3HpaM5OFdM/ dFuA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=QxcU5o8Zg0M6jb420o2zIxJRSsKU6LzkAHBX3GqSFms=; fh=GrOh8lyhpWnv6fQ7PEuyh7hTNeBQucAMexY2PVem5IM=; b=KbFG5wloe7Ed6GbgsoK1fHh9W5cPUWS8tA5phOXWHgbuTf7LS4DHfRPEz9MwlBtqA1 jH9kj1rq4hjsRszL60jL8RdkRtK4WoDvCkhP5UlMGs7Bkc2qexDZFJVfKWOsiKY4jYiu guKE5tzYFrOL2R99v3JRGTku6+uwxaBamXhPWjNlLnNCCa6L1m34RwcHiXnxyhsMSc8Y sLMKkS5EPYTtpHWXaCEmtu7GIrqijq9Zi7CuDGWzP+6wUqwfvWPhcMH8DPcOyhSAUy2D 9cahvdNbdGmWUTh7W5RuLrnZd1VQKi1A6Al6QoETLUl+obeE1G78c1zmEYywU73YKlEL n9nA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=ImdhAu3A; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Return-Path: Received: from howler.vger.email (howler.vger.email. [23.128.96.34]) by mx.google.com with ESMTPS id p4-20020a056a000a0400b0069347c30c78si6918767pfh.230.2023.09.29.16.57.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 29 Sep 2023 16:57:24 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) client-ip=23.128.96.34; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=ImdhAu3A; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by howler.vger.email (Postfix) with ESMTP id 820F580977B6; Fri, 29 Sep 2023 11:01:52 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at howler.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233788AbjI2SBe (ORCPT + 99 others); Fri, 29 Sep 2023 14:01:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49158 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233764AbjI2SB0 (ORCPT ); Fri, 29 Sep 2023 14:01:26 -0400 Received: from out-199.mta0.migadu.com (out-199.mta0.migadu.com [91.218.175.199]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AEE4A1B4 for ; Fri, 29 Sep 2023 11:01:24 -0700 (PDT) X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1696010482; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=QxcU5o8Zg0M6jb420o2zIxJRSsKU6LzkAHBX3GqSFms=; b=ImdhAu3ALKSdHrgwpMCUhyBJ4W47XhCUnKHwtUs8l/RzPj6hc/NfPFnlbT6TZr/umtTkJh xhHHggDB8z5vJqFJ1wexSJW0oPmubHVLru/4OppYheK+YhIChrW1Atc7eG+tLhXmZpg8Xt CFlnH7b6YjSVLnA1ud3LguQ/xHfr6LM= From: Roman Gushchin To: linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org, cgroups@vger.kernel.org, Johannes Weiner , Michal Hocko , Shakeel Butt , Muchun Song , Dennis Zhou , Andrew Morton , David Rientjes , Vlastimil Babka , Roman Gushchin Subject: [PATCH v1 3/5] mm: kmem: make memcg keep a reference to the original objcg Date: Fri, 29 Sep 2023 11:00:53 -0700 Message-ID: <20230929180056.1122002-4-roman.gushchin@linux.dev> In-Reply-To: <20230929180056.1122002-1-roman.gushchin@linux.dev> References: <20230929180056.1122002-1-roman.gushchin@linux.dev> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Migadu-Flow: FLOW_OUT X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (howler.vger.email [0.0.0.0]); Fri, 29 Sep 2023 11:01:53 -0700 (PDT) Keep a reference to the original objcg object for the entire life of a memcg structure. This allows to simplify the synchronization on the kernel memory allocation paths: pinning a (live) memcg will also pin the corresponding objcg. The memory overhead of this change is minimal because object cgroups usually outlive their corresponding memory cgroups even without this change, so it's only an additional pointer per memcg. Signed-off-by: Roman Gushchin (Cruise) --- include/linux/memcontrol.h | 8 +++++++- mm/memcontrol.c | 5 +++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 1c1ebb269ac1..e59dea9d8666 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -299,7 +299,13 @@ struct mem_cgroup { #ifdef CONFIG_MEMCG_KMEM int kmemcg_id; - struct obj_cgroup __rcu *objcg; + /* + * memcg->objcg is wiped out as a part of the objcg repaprenting + * process. memcg->orig_objcg preserves a pointer (and a reference) + * to the original objcg until the end of live of memcg. + */ + struct obj_cgroup __rcu *objcg; + struct obj_cgroup *orig_objcg; /* list of inherited objcgs, protected by objcg_lock */ struct list_head objcg_list; #endif diff --git a/mm/memcontrol.c b/mm/memcontrol.c index ec28f9cfc2f0..e9890f6e4da7 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -3803,6 +3803,8 @@ static int memcg_online_kmem(struct mem_cgroup *memcg) objcg->memcg = memcg; rcu_assign_pointer(memcg->objcg, objcg); + obj_cgroup_get(objcg); + memcg->orig_objcg = objcg; static_branch_enable(&memcg_kmem_online_key); @@ -5297,6 +5299,9 @@ static void __mem_cgroup_free(struct mem_cgroup *memcg) { int node; + if (memcg->orig_objcg) + obj_cgroup_put(memcg->orig_objcg); + for_each_node(node) free_mem_cgroup_per_node_info(memcg, node); kfree(memcg->vmstats); -- 2.42.0