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 X-Spam-Level: X-Spam-Status: No, score=-9.9 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5ED8BC433DF for ; Tue, 19 May 2020 20:23:53 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 130C5206C3 for ; Tue, 19 May 2020 20:23:53 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=fb.com header.i=@fb.com header.b="q8NWJEGi" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 130C5206C3 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=fb.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id AF7B580018; Tue, 19 May 2020 16:23:52 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A7F6A900003; Tue, 19 May 2020 16:23:52 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 96F6980018; Tue, 19 May 2020 16:23:52 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0039.hostedemail.com [216.40.44.39]) by kanga.kvack.org (Postfix) with ESMTP id 7ADDC900003 for ; Tue, 19 May 2020 16:23:52 -0400 (EDT) Received: from smtpin08.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id 46508249B for ; Tue, 19 May 2020 20:23:52 +0000 (UTC) X-FDA: 76834594704.08.horse67_790e89c6c120b X-HE-Tag: horse67_790e89c6c120b X-Filterd-Recvd-Size: 5313 Received: from mx0a-00082601.pphosted.com (mx0a-00082601.pphosted.com [67.231.145.42]) by imf44.hostedemail.com (Postfix) with ESMTP for ; Tue, 19 May 2020 20:23:51 +0000 (UTC) Received: from pps.filterd (m0148461.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 04JKNmL8023843 for ; Tue, 19 May 2020 13:23:50 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=facebook; bh=qLFk6ufFmeONZr4z2C6e9VL57rq65msEQhZw44pBqw8=; b=q8NWJEGiSd3LFgKYFZ5rBaFp5M5HlpXt1jgDDAXCkS+Y/D3/w6wwg3dJXLa2WpWRRPbZ 5m9slYCad+7xJDZDuuUYgH4frkFRInPUuIE9HZHui50V+pUufgckgcBTRbxOURlXTgAz 0QbWFNnO8YFTaKEswc61l9SZn/KiSCG7nRs= Received: from maileast.thefacebook.com ([163.114.130.16]) by mx0a-00082601.pphosted.com with ESMTP id 31305s6m21-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Tue, 19 May 2020 13:23:50 -0700 Received: from intmgw003.06.prn3.facebook.com (2620:10d:c0a8:1b::d) by mail.thefacebook.com (2620:10d:c0a8:83::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1847.3; Tue, 19 May 2020 13:23:25 -0700 Received: by devvm1291.vll0.facebook.com (Postfix, from userid 111017) id BC86C12947E1; Tue, 19 May 2020 13:18:08 -0700 (PDT) Smtp-Origin-Hostprefix: devvm From: Roman Gushchin Smtp-Origin-Hostname: devvm1291.vll0.facebook.com To: Andrew Morton , Dennis Zhou , Tejun Heo , Christoph Lameter CC: Johannes Weiner , Michal Hocko , Shakeel Butt , , , , Roman Gushchin Smtp-Origin-Cluster: vll0c01 Subject: [PATCH RFC 4/5] mm: memcg: charge memcg percpu memory to the parent cgroup Date: Tue, 19 May 2020 13:18:05 -0700 Message-ID: <20200519201806.2308480-5-guro@fb.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200519201806.2308480-1-guro@fb.com> References: <20200519201806.2308480-1-guro@fb.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-FB-Internal: Safe Content-Type: text/plain X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.216,18.0.676 definitions=2020-05-19_09:2020-05-19,2020-05-19 signatures=0 X-Proofpoint-Spam-Details: rule=fb_default_notspam policy=fb_default score=0 suspectscore=2 bulkscore=0 impostorscore=0 spamscore=0 phishscore=0 malwarescore=0 mlxlogscore=753 priorityscore=1501 adultscore=0 clxscore=1015 cotscore=-2147483648 mlxscore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2005190175 X-FB-Internal: deliver 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: Memory cgroups are using large chunks of percpu memory to store vmstat data. Yet this memory is not accounted at all, so in the case when there are many (dying) cgroups, it's not exactly clear where all the memory is. Because the size of memory cgroup internal structures can dramatically exceed the size of object or page which is pinning it in the memory, it's not a good idea to simple ignore it. It actually breaks the isolation between cgroups. Let's account the consumed percpu memory to the parent cgroup. Signed-off-by: Roman Gushchin --- mm/memcontrol.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index b3cf8c5e7f71..6463e5bdff9d 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -5016,13 +5016,15 @@ static int alloc_mem_cgroup_per_node_info(struct = mem_cgroup *memcg, int node) if (!pn) return 1; =20 - pn->lruvec_stat_local =3D alloc_percpu(struct lruvec_stat); + pn->lruvec_stat_local =3D alloc_percpu_gfp(struct lruvec_stat, + GFP_KERNEL_ACCOUNT); if (!pn->lruvec_stat_local) { kfree(pn); return 1; } =20 - pn->lruvec_stat_cpu =3D alloc_percpu(struct lruvec_stat); + pn->lruvec_stat_cpu =3D alloc_percpu_gfp(struct lruvec_stat, + GFP_KERNEL_ACCOUNT); if (!pn->lruvec_stat_cpu) { free_percpu(pn->lruvec_stat_local); kfree(pn); @@ -5096,11 +5098,13 @@ static struct mem_cgroup *mem_cgroup_alloc(void) goto fail; } =20 - memcg->vmstats_local =3D alloc_percpu(struct memcg_vmstats_percpu); + memcg->vmstats_local =3D alloc_percpu_gfp(struct memcg_vmstats_percpu, + GFP_KERNEL_ACCOUNT); if (!memcg->vmstats_local) goto fail; =20 - memcg->vmstats_percpu =3D alloc_percpu(struct memcg_vmstats_percpu); + memcg->vmstats_percpu =3D alloc_percpu_gfp(struct memcg_vmstats_percpu, + GFP_KERNEL_ACCOUNT); if (!memcg->vmstats_percpu) goto fail; =20 @@ -5149,7 +5153,9 @@ mem_cgroup_css_alloc(struct cgroup_subsys_state *pa= rent_css) struct mem_cgroup *memcg; long error =3D -ENOMEM; =20 + memalloc_use_memcg(parent); memcg =3D mem_cgroup_alloc(); + memalloc_unuse_memcg(); if (IS_ERR(memcg)) return ERR_CAST(memcg); =20 --=20 2.25.4