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.8 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 2F964C433DF for ; Thu, 28 May 2020 23:30:21 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id E5BB82071A for ; Thu, 28 May 2020 23:30:20 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=fb.com header.i=@fb.com header.b="TOsTBYq1" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E5BB82071A Authentication-Results: mail.kernel.org; dmarc=fail (p=reject 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 39D32800B7; Thu, 28 May 2020 19:30:20 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 2FE8380010; Thu, 28 May 2020 19:30:20 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 14FEA800B7; Thu, 28 May 2020 19:30:20 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0150.hostedemail.com [216.40.44.150]) by kanga.kvack.org (Postfix) with ESMTP id F282380010 for ; Thu, 28 May 2020 19:30:19 -0400 (EDT) Received: from smtpin14.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id AC36B181AEF09 for ; Thu, 28 May 2020 23:30:19 +0000 (UTC) X-FDA: 76867723758.14.shelf50_5a23261085830 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin14.hostedemail.com (Postfix) with ESMTP id 9CFDA1822987A for ; Thu, 28 May 2020 23:30:19 +0000 (UTC) X-HE-Tag: shelf50_5a23261085830 X-Filterd-Recvd-Size: 5294 Received: from mx0a-00082601.pphosted.com (mx0b-00082601.pphosted.com [67.231.153.30]) by imf14.hostedemail.com (Postfix) with ESMTP for ; Thu, 28 May 2020 23:30:19 +0000 (UTC) Received: from pps.filterd (m0089730.ppops.net [127.0.0.1]) by m0089730.ppops.net (8.16.0.42/8.16.0.42) with SMTP id 04SNKQ1b004273 for ; Thu, 28 May 2020 16:30:18 -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=VNT8G35PxauoHL3tpEL/btzLQRvwD1I98TLHDbaW+Tw=; b=TOsTBYq1u5TOCTPNvu+CvVGGmBb+2/IEjWTuh3h+9HJ0SbGFH3MJy4Xr8BAjZDaoFXiz PwPWXqMvmTBTHEbNOE/Wx6Yl3tNYv5bHk+4t3R7D9MXjzc25X1VDsdU0fsSeF/IS7iOG qtNpgRUWBUUjeeEsZhAdm6UYTXJoKwOJ5UY= Received: from maileast.thefacebook.com ([163.114.130.16]) by m0089730.ppops.net with ESMTP id 31a24ubd61-7 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Thu, 28 May 2020 16:30:18 -0700 Received: from intmgw001.41.prn1.facebook.com (2620:10d:c0a8:1b::d) by mail.thefacebook.com (2620:10d:c0a8:82::c) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1979.3; Thu, 28 May 2020 16:30:16 -0700 Received: by devvm1291.vll0.facebook.com (Postfix, from userid 111017) id 8E22A16E5966; Thu, 28 May 2020 16:25:10 -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 v1 4/5] mm: memcg: charge memcg percpu memory to the parent cgroup Date: Thu, 28 May 2020 16:25:07 -0700 Message-ID: <20200528232508.1132382-5-guro@fb.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200528232508.1132382-1-guro@fb.com> References: <20200528232508.1132382-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.687 definitions=2020-05-28_08:2020-05-28,2020-05-28 signatures=0 X-Proofpoint-Spam-Details: rule=fb_default_notspam policy=fb_default score=0 impostorscore=0 bulkscore=0 phishscore=0 spamscore=0 clxscore=1015 suspectscore=2 priorityscore=1501 mlxlogscore=765 lowpriorityscore=0 cotscore=-2147483648 adultscore=0 mlxscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2004280000 definitions=main-2005280148 X-FB-Internal: deliver X-Rspamd-Queue-Id: 9CFDA1822987A X-Spamd-Result: default: False [0.00 / 100.00] X-Rspamd-Server: rspam02 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 5007d1585a4a..0dd0d05a011c 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -5020,13 +5020,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); @@ -5100,11 +5102,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 @@ -5153,7 +5157,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