Received: by 2002:a5d:9c59:0:0:0:0:0 with SMTP id 25csp471046iof; Mon, 6 Jun 2022 07:02:20 -0700 (PDT) X-Google-Smtp-Source: ABdhPJykdjlFWzj/Psao10VIyyVdNQZkklvqaOsWYNcYfsHt+NKyvKJcYE9WfbYRMSPug3GWHODT X-Received: by 2002:a17:902:8605:b0:15d:10dc:1c6f with SMTP id f5-20020a170902860500b0015d10dc1c6fmr24462441plo.4.1654524139899; Mon, 06 Jun 2022 07:02:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654524139; cv=none; d=google.com; s=arc-20160816; b=Ni5EN733IBafJGzb2sm5WfFFyGrVGEBs6ApnlkpA7yz4cO7avFfiweOejGdsu+Mnlz 08nfQJuSlWGUtT10k0ntv/4LqeLLVwC9ppsSFBPUvb7LvxG9+EZLdptEyM9JYKLmxm75 MKHcGKpjtSUndRrN8MpFsqy3xahe/KQZNONUiwEp937GcFJFKaX9e4XK9TYKzfoY945L 5VKjJ3LlpL2bzs4axodPv9ZyB1PQ2p1+sVIfROMWjbwvfv4PVGdjFZP5eKc3JtbCiutI E6HpA+yBKGccxKdY/PSRg6ZuBAOZBtqy9W8EKZFkmpHWHCbuypJRC9QHZNBp44/3TPAc 9trA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=jaFngek02KK0QVo0Pp9IxJtKrA9CbibYgveWzH0AeXs=; b=zCboV3ie43IrxNbowwK2X94s2UkT041rIh2Ygx8mTA+cUnz31zkfBKlKNHTslBz8ZO KKMoGWHjb/DeajV2/ESzo8Q/qs3r6od3DKuC7ZsXpC/cB31Bfy8sSdB+6OMAb8MUHzyt WnJx0tIRasGAKsUYFSVep1rEFoCXFBokNs283HoztJq6x02W4dTQ+KuBmYTVTcDxRTGc s0LCBKSa6w9zrhYf5sVgBGP5mLKK8aIRQYLfaF36xsHbnH6NSfNo45q74cI3t2nL2HPD tWWsRvClIeimed7ieFN3rxhwAoixyFQCiQuWrS0zZSAm8IxQwTycwwF6sXO/tmi+VM70 aCCw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcdkim header.b=DY+sozS6; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [23.128.96.19]) by mx.google.com with ESMTPS id b21-20020a170902d31500b00161f1960b5dsi21822073plc.291.2022.06.06.07.02.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 06 Jun 2022 07:02:19 -0700 (PDT) Received-SPF: softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) client-ip=23.128.96.19; Authentication-Results: mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcdkim header.b=DY+sozS6; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id DC965DC811; Mon, 6 Jun 2022 06:49:46 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239256AbiFFNtj (ORCPT + 99 others); Mon, 6 Jun 2022 09:49:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53100 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239248AbiFFNth (ORCPT ); Mon, 6 Jun 2022 09:49:37 -0400 Received: from alexa-out-sd-01.qualcomm.com (alexa-out-sd-01.qualcomm.com [199.106.114.38]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 535DCB1C39; Mon, 6 Jun 2022 06:49:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1654523376; x=1686059376; h=date:from:to:cc:subject:message-id:references: mime-version:in-reply-to; bh=jaFngek02KK0QVo0Pp9IxJtKrA9CbibYgveWzH0AeXs=; b=DY+sozS6dsl9NhmNeqobBQwfXkDubuBHELp9s7hYfJWIljb0pOByIe94 U4F+UIu+IAlHalU7AMf7cCtTNPMPm2mhDQsGm8J7sXKsJezoweUMha3HN c7HHvb7OQLjeE6YhK+hUdBpwK2y4+f/6s+k57vWzj5N7+vG+f4MK/96vO g=; Received: from unknown (HELO ironmsg01-sd.qualcomm.com) ([10.53.140.141]) by alexa-out-sd-01.qualcomm.com with ESMTP; 06 Jun 2022 06:49:35 -0700 X-QCInternal: smtphost Received: from nasanex01c.na.qualcomm.com ([10.47.97.222]) by ironmsg01-sd.qualcomm.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Jun 2022 06:49:34 -0700 Received: from nalasex01a.na.qualcomm.com (10.47.209.196) by nasanex01c.na.qualcomm.com (10.47.97.222) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.22; Mon, 6 Jun 2022 06:49:34 -0700 Received: from qian (10.80.80.8) by nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.22; Mon, 6 Jun 2022 06:49:32 -0700 Date: Mon, 6 Jun 2022 09:49:30 -0400 From: Qian Cai To: Vasily Averin CC: Andrew Morton , , , , Shakeel Butt , Roman Gushchin , Michal =?iso-8859-1?Q?Koutn=FD?= , Vlastimil Babka , Michal Hocko , Florian Westphal , "David S. Miller" , Jakub Kicinski , Paolo Abeni , Eric Dumazet , Subject: Re: [PATCH memcg v6] net: set proper memcg for net_init hooks allocations Message-ID: References: <6b362c6e-9c80-4344-9430-b831f9871a3c@openvz.org> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nalasex01a.na.qualcomm.com (10.47.209.196) X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=no 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 On Fri, Jun 03, 2022 at 07:19:43AM +0300, Vasily Averin wrote: > __register_pernet_operations() executes init hook of registered > pernet_operation structure in all existing net namespaces. > > Typically, these hooks are called by a process associated with > the specified net namespace, and all __GFP_ACCOUNT marked > allocation are accounted for corresponding container/memcg. > > However __register_pernet_operations() calls the hooks in the same > context, and as a result all marked allocations are accounted > to one memcg for all processed net namespaces. > > This patch adjusts active memcg for each net namespace and helps > to account memory allocated inside ops_init() into the proper memcg. > > Signed-off-by: Vasily Averin > Acked-by: Roman Gushchin > Acked-by: Shakeel Butt > --- ... > diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h > index 9ecead1042b9..dad16b484cd5 100644 > --- a/include/linux/memcontrol.h > +++ b/include/linux/memcontrol.h > @@ -1755,6 +1755,42 @@ static inline void count_objcg_event(struct obj_cgroup *objcg, > rcu_read_unlock(); > } > > +/** > + * get_mem_cgroup_from_obj - get a memcg associated with passed kernel object. > + * @p: pointer to object from which memcg should be extracted. It can be NULL. > + * > + * Retrieves the memory group into which the memory of the pointed kernel > + * object is accounted. If memcg is found, its reference is taken. > + * If a passed kernel object is uncharged, or if proper memcg cannot be found, > + * as well as if mem_cgroup is disabled, NULL is returned. > + * > + * Return: valid memcg pointer with taken reference or NULL. > + */ > +static inline struct mem_cgroup *get_mem_cgroup_from_obj(void *p) > +{ > + struct mem_cgroup *memcg; > + > + rcu_read_lock(); > + do { > + memcg = mem_cgroup_from_obj(p); > + } while (memcg && !css_tryget(&memcg->css)); > + rcu_read_unlock(); > + return memcg; > +} ... > diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c > index 0ec2f5906a27..6b9f19122ec1 100644 > --- a/net/core/net_namespace.c > +++ b/net/core/net_namespace.c > @@ -18,6 +18,7 @@ > #include > #include > #include > +#include > #include > #include > > @@ -1143,7 +1144,13 @@ static int __register_pernet_operations(struct list_head *list, > * setup_net() and cleanup_net() are not possible. > */ > for_each_net(net) { > + struct mem_cgroup *old, *memcg; > + > + memcg = mem_cgroup_or_root(get_mem_cgroup_from_obj(net)); > + old = set_active_memcg(memcg); > error = ops_init(ops, net); > + set_active_memcg(old); > + mem_cgroup_put(memcg); > if (error) > goto out_undo; > list_add_tail(&net->exit_list, &net_exit_list); > -- > 2.36.1 This triggers a few boot warnings like those. virt_to_phys used for non-linear address: ffffd8efe2d2fe00 (init_net) WARNING: CPU: 87 PID: 3170 at arch/arm64/mm/physaddr.c:12 __virt_to_phys CPU: 87 PID: 3170 Comm: modprobe Tainted: G B W 5.19.0-rc1-next-20220606 #138 pstate: 60400009 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) pc : __virt_to_phys lr : __virt_to_phys sp : ffff800051cc76b0 x29: ffff800051cc76b0 x28: ffffd8efb5ba6ab8 x27: ffffd8efb5ba6b2c x26: ffffd8efb1bccb20 x25: ffffd8efbaaf8200 x24: ffff800051cc77f0 x23: ffffd8efb744a000 x22: ffffd8efbb1bc000 x21: 0000600000000000 x20: 0000d8efe2d2fe00 x19: ffffd8efe2d2fe00 x18: 0000000000000443 x17: 0000000000000000 x16: 0000000000000002 x15: ffffd8efb9db2000 x14: 0000000000000001 x13: 0000000000000000 x12: ffff6806c88f8986 x11: 1fffe806c88f8985 x10: ffff6806c88f8985 x9 : dfff800000000000 x8 : ffff4036447c4c2b x7 : 0000000000000001 x6 : ffff6806c88f8985 x5 : ffff4036447c4c28 x4 : ffff6806c88f8986 x3 : ffffd8efb34b3850 x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffff400335f99a80 Call trace: __virt_to_phys mem_cgroup_from_obj __register_pernet_operations register_pernet_operations register_pernet_subsys nfnetlink_init [nfnetlink] load_module __do_sys_finit_module __arm64_sys_finit_module invoke_syscall el0_svc_common.constprop.0 do_el0_svc el0_svc el0t_64_sync_handler el0t_64_sync irq event stamp: 0 hardirqs last enabled at (0): 0x0 hardirqs last disabled at (0): copy_process softirqs last enabled at (0): copy_process softirqs last disabled at (0): 0x0 virt_to_phys used for non-linear address: ffffd8efe2d2fe00 (init_net) WARNING: CPU: 156 PID: 3176 at arch/arm64/mm/physaddr.c:12 __virt_to_phys CPU: 156 PID: 3176 Comm: modprobe Tainted: G B W 5.19.0-rc1-next-20220606 #138 pstate: 60400009 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) pc : __virt_to_phys lr : __virt_to_phys sp : ffff800051b376e0 x29: ffff800051b376e0 x28: ffffd8efb5ba6ab8 x27: ffffd8efb5ba6b2c x26: ffffd8efb286e910 x25: ffffd8efbaaf8200 x24: ffff800051b37820 x23: ffffd8efb744a000 x22: ffffd8efbb1bc000 x21: 0000600000000000 x20: 0000d8efe2d2fe00 x19: ffffd8efe2d2fe00 x18: 00000000000001cb x17: 0000000000000000 x16: 0000000000000002 x15: ffffd8efb9db2000 x14: 0000000000000001 x13: 0000000000000000 x12: ffff6806c8a03f86 x8 : ffff40364501fc2b x7 : 0000000000000001 x6 : ffff6806c8a03f85 x5 : ffff40364501fc28 x4 : ffff6806c8a03f86 x3 : ffffd8efb34b3850 x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffff40033376b4c0 Call trace: __virt_to_phys mem_cgroup_from_obj __register_pernet_operations register_pernet_operations register_pernet_subsys nf_tables_module_init [nf_tables] do_one_initcall do_init_module load_module __do_sys_finit_module __arm64_sys_finit_module invoke_syscall el0_svc_common.constprop.0 do_el0_svc el0_svc el0t_64_sync_handler el0t_64_sync irq event stamp: 0 hardirqs last enabled at (0): 0x0 hardirqs last disabled at (0): copy_process softirqs last enabled at (0): copy_process softirqs last disabled at (0): 0x0