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 D7A60CA0FE4 for ; Fri, 30 Aug 2024 11:58:26 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 422E96B012A; Fri, 30 Aug 2024 07:58:26 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 3D23F6B012B; Fri, 30 Aug 2024 07:58:26 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 299706B012C; Fri, 30 Aug 2024 07:58:26 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 0BB8A6B012A for ; Fri, 30 Aug 2024 07:58:26 -0400 (EDT) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id A5C6014180D for ; Fri, 30 Aug 2024 11:58:25 +0000 (UTC) X-FDA: 82508764170.20.8C10A20 Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) by imf09.hostedemail.com (Postfix) with ESMTP id A3C0D140023 for ; Fri, 30 Aug 2024 11:58:22 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=suse.com header.s=google header.b=Y6i68v+V; spf=pass (imf09.hostedemail.com: domain of mhocko@suse.com designates 209.85.128.52 as permitted sender) smtp.mailfrom=mhocko@suse.com; dmarc=pass (policy=quarantine) header.from=suse.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1725019013; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=R/ZmkthQxbD6V/BZNBsTW2rTGIetq2FpOcyt+DGfaOM=; b=Xe0URmSG1q3VIlfLJ0U2MBcYgMGshiZU8B5O2ZrjXE6m8tXU0d7l9BHfGop7krvfAPH9+Y 8tixQ5TM3ecVCWtymogFLlDQax7/Q4jS1yggXpabr7nsptGqqzFq/0buFIXpVIHxIjk6Lz 3shhTI0CUGjqbgNF7F7Pq4YWEICXDlI= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725019013; a=rsa-sha256; cv=none; b=CLhl22d9xq8pP4NVvUuHir1TUU+1JIr+EpAGJoUP7MJw0EFm7m/tg6/ADUiOERECQoV4cn wkNIzGNUcvzrST3nayEimEBHYdip5A8Dt5Nm9STBT6QL8hl5N8a3acKojv4fl69FXH7prM 2hE7uBvEosKsz3Cmb5D3C2An7qJP3KQ= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=suse.com header.s=google header.b=Y6i68v+V; spf=pass (imf09.hostedemail.com: domain of mhocko@suse.com designates 209.85.128.52 as permitted sender) smtp.mailfrom=mhocko@suse.com; dmarc=pass (policy=quarantine) header.from=suse.com Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-428e3129851so15453865e9.3 for ; Fri, 30 Aug 2024 04:58:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1725019101; x=1725623901; darn=kvack.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=R/ZmkthQxbD6V/BZNBsTW2rTGIetq2FpOcyt+DGfaOM=; b=Y6i68v+VrMsH9ZN3sr4msUU3TFiIkpwLFd9bhPg36F7xRy/wdR8+KjYD2koSyyehGj rhMisslmUM42M6iiu+d+mW4Fhc9xiffLFDf2bGVWCEHEB+DgINNU16W5W2qCtpE1Bq0h tkLBzMNV/EZ9+EVSfHF0T0T3rTtG2remQFOSNq6VkQiYV7rjFkiw3qQtcFjDV8mx46CT GQ3EoEo1wSqRJOq3Xfbk1+xpzmHSBU35VYKE+a8pKZ5qPng9ordDO+zvrfh10RktwP8m NaliR1B13o/dGcPF1wzmnz/U1GB4lV7ve2Gw3wfaJLQsHIik3Hz/k774zNsMS6WN83g0 iTFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725019101; x=1725623901; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=R/ZmkthQxbD6V/BZNBsTW2rTGIetq2FpOcyt+DGfaOM=; b=Lf2qNB4EcBpEL4RR/d82BLiQ2CTRTkezYCd9ErvzHTTUb34bm+bfYDotQJS0SkOvrd fMPjj2Cm8nKjBh+X8eHU+9qzTO+rBnWldmf3up6FC5AXuoqOcic62IJAlEfaIDve1k2C Qk8Wq+7VVUKgAB6Uh2S9YV2+2DIDC2Z5TLmVp/jpS6A0ajL/M48d+Qp71H/lpxsl/mYR 82rhVuDeyiB0S/IfZpB5eDAdYwgRHygQq7G9CC+MBEpp8V9R2BtJ8eF0YX2QTXTROjEe 7oYop8uxUNegr3KRVdP5vE3rRjW8/lyuBwe5daJcpTaSeMgzshUhwcitSPlOgk6GsY3h EnUQ== X-Forwarded-Encrypted: i=1; AJvYcCXRs18ihxunw1Y8x49AvDuBb+4wXW1M6DZSWADLyfP/2UXCzXE15jrFQpTvTC7sl/W0j0h6JfqtXA==@kvack.org X-Gm-Message-State: AOJu0YxuWo8dzZixsmFKYZ8PyIjMUuvES7ii2bTLfNKArZcl4L6TXw/y 4GwEKX5jPsBIGrrs86cBvU82mP2mDXDHvofW0uC9KPfs52H/mgZkp3eVbA8n44PgCiXdKYqBZcQ x X-Google-Smtp-Source: AGHT+IFzYA7AZ7liIiwfeRU2/wB4g/pDYvGX+i+cDd+u5PekZ13lqdSLE2abq0T2/0yeckMQce+6BA== X-Received: by 2002:a05:600c:4586:b0:427:9922:4526 with SMTP id 5b1f17b1804b1-42bb01ae423mr49199545e9.7.1725019100856; Fri, 30 Aug 2024 04:58:20 -0700 (PDT) Received: from localhost (109-81-82-19.rct.o2.cz. [109.81.82.19]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-374b960ef94sm565620f8f.103.2024.08.30.04.58.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 30 Aug 2024 04:58:20 -0700 (PDT) Date: Fri, 30 Aug 2024 13:58:19 +0200 From: Michal Hocko To: Zhiguo Jiang Cc: Andrew Morton , Uladzislau Rezki , Christoph Hellwig , linux-mm@kvack.org, linux-kernel@vger.kernel.org, opensource.kernel@vivo.com Subject: Re: [PATCH] mm: fix vmalloc memcg accounting issue Message-ID: References: <20240830113956.1355-1-justinjiang@vivo.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240830113956.1355-1-justinjiang@vivo.com> X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: A3C0D140023 X-Stat-Signature: cxarqf5uhjm5kzec4x6rafhehnfyfdga X-HE-Tag: 1725019102-183845 X-HE-Meta: U2FsdGVkX18+u8mW+q3ciicaMnz+xrvjDGRU3j5dPAEucvhtuWwNsuhXrcuaSTjO6va5AvBFlWcy8mxBticlXlUZZb9lQ0ZdPWe/IF86crF2QPRaghLZTsb6uV0uQLoYy3JhWeHCLAAYfA4G2J+WWD6p3UVfw0E/r9WiQc1OV/pAyXKpTfg89Xp9xjDBZGtrqug8s/QeuDO+XmNPB9a7lW0OcT7QHbndXNg5RJqiGvYqVRG6ftWNnpdAEgJEQt94uxaLshGqPmrOmPt1CuApZVUIYPOrSpmRUGyPdMinrUp/uie/IgQMRx/5Tjdq81xCkgkAKFn20z3ZzUBKCNOKveuxb8GXB2WUd1t9p4P6oSga5XuD63EDOnqQ9iVybdAxDRJrsZeHqWXWRDGkJUt9/pNOF5YMXkyxZc8BR/YNhE/gL3GtxPlqkvt/PGWm3jqJhJ2Ho/7QruRlyFbd7tWxYFeji9AHsDCIIVFdkggydMOgckW919qhhfBju7t5eaEI95e9m8+ZR9tK4iZrZtTYG7y6nGS/V5sw+FFT+apKFkx6DKbdQeUfm5Xfqh6kLYqKVxhPm4c4Im+KYPIx1wJ3hto2qhPrYB9AXujExQDfXLVCGy1gJ+HS/XjFeAVphGkRmaBveLHDUXkWx/671Fi/FrMlQyrlwor+i/mU8U2NdzCCQHxeCzUyqP0tNvZtuOaGwHMFADsPoVzr1+zHRd6MLfGSQl2ArIG5IFadMOiP17TkVHhXeKtkX8nfwibShlB8ImNuNBfx0be/t8lobCSXJKOQqyBy7LEaqH1bKcrz0fBpKXAxBOAuhlx0Y/4YUW9+p6t4aypWj6qwrFFFojS5bQuBBZth82NwMc8TqJ7/xXAdBbaFK5JyAd51NBykXsKjKcYA4kX9UNtlJyumdLesKWb8DdCBcjhDJBzfyRZ2qURywp+kIL+MJvmmlij1D6dZgRjM8AqJBTdYLI1GVNt ZIwAHAhv +JUifBhsOCLcWEbIeb6UVY8KHNFYNemJWhkkin0nDy3CEoeqQ3bFN+jtMN8We8hsJjUAPOYAd87Dw+n9SsGrvcZSyIWFbefcVw+Wdf+nWBLVcahARF22XRCTjxa64vFOWR9tWz/UWbxkY9c6c/wPRLfNRMnC81/U9RewhONoTJG/0xn02ESqzj/zRcSbHItf6pvVDLuT99rqw1n8qwdizT1qr2bwDDsi74vMnsqD24ovz2QFC7UAwZ+SPJ34xcDGoqeN5z0to/iQzjeqMYQQQ9eMUlqg/tApDpXjx91ydJuKomiO8xIfm5RZoGE4xu/mfTZ/KN8+2ky2Xi/IwDRVNXILCjQ== 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: List-Subscribe: List-Unsubscribe: On Fri 30-08-24 19:39:56, Zhiguo Jiang wrote: > The oepration of adding 1 for the MEMCG_VMALLOC count value has a > judgment "if (gfp_mask & __GFP_ACCOUNT)" in vmalloc(), but subtracting > 1 does not have this judgment in vfree(), which leads to the non-aligned > count value operation. This patch fixes this issue. Are you really observing this or have you just concluded this from reading the code? AFAIR mod_memcg_page_state will not account if page doesn't have memcg associated with it which means it is not charged. > Signed-off-by: Zhiguo Jiang > --- > include/linux/vmalloc.h | 1 + > mm/vmalloc.c | 13 ++++++++++--- > 2 files changed, 11 insertions(+), 3 deletions(-) > > diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h > index ad2ce7a6ab7a..0253feec371f > --- a/include/linux/vmalloc.h > +++ b/include/linux/vmalloc.h > @@ -38,6 +38,7 @@ struct iov_iter; /* in uio.h */ > #define VM_DEFER_KMEMLEAK 0 > #endif > #define VM_SPARSE 0x00001000 /* sparse vm_area. not all pages are present. */ > +#define VM_MEMCG_ACCOUNT 0x00002000 /* mark vm pages alloced with __GFP_ACCOUNT for memcg accounting. */ > > /* bits [20..32] reserved for arch specific ioremap internals */ > > diff --git a/mm/vmalloc.c b/mm/vmalloc.c > index d977c280b1c4..aff1bf7a8798 > --- a/mm/vmalloc.c > +++ b/mm/vmalloc.c > @@ -3125,6 +3125,12 @@ static struct vm_struct *__get_vm_area_node(unsigned long size, > size += PAGE_SIZE; > > area->flags = flags; > + /* > + * Set memcg accounting flag in vm_struct, used for > + * vfree() align vmalloc here. > + */ > + if (gfp_mask & __GFP_ACCOUNT) > + area->flags |= VM_MEMCG_ACCOUNT; > area->caller = caller; > > va = alloc_vmap_area(size, align, start, end, node, gfp_mask, 0, area); > @@ -3367,7 +3373,9 @@ void vfree(const void *addr) > struct page *page = vm->pages[i]; > > BUG_ON(!page); > - mod_memcg_page_state(page, MEMCG_VMALLOC, -1); > + > + if (vm->flags & VM_MEMCG_ACCOUNT) > + mod_memcg_page_state(page, MEMCG_VMALLOC, -1); > /* > * High-order allocs for huge vmallocs are split, so > * can be freed as an array of order-0 allocations > @@ -3662,7 +3670,7 @@ static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask, > node, page_order, nr_small_pages, area->pages); > > atomic_long_add(area->nr_pages, &nr_vmalloc_pages); > - if (gfp_mask & __GFP_ACCOUNT) { > + if (area->flags & VM_MEMCG_ACCOUNT) { > int i; > > for (i = 0; i < area->nr_pages; i++) > @@ -3813,7 +3821,6 @@ void *__vmalloc_node_range_noprof(unsigned long size, unsigned long align, > } > goto fail; > } > - > /* > * Prepare arguments for __vmalloc_area_node() and > * kasan_unpoison_vmalloc(). > -- > 2.39.0 > -- Michal Hocko SUSE Labs