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 132EEE7717D for ; Wed, 11 Dec 2024 16:10:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9228F6B0092; Wed, 11 Dec 2024 11:10:05 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 8D1C46B0093; Wed, 11 Dec 2024 11:10:05 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7729A6B0095; Wed, 11 Dec 2024 11:10:05 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 589796B0093 for ; Wed, 11 Dec 2024 11:10:05 -0500 (EST) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 0722F80F6E for ; Wed, 11 Dec 2024 16:10:05 +0000 (UTC) X-FDA: 82883164266.18.AB787D6 Received: from mail-qt1-f171.google.com (mail-qt1-f171.google.com [209.85.160.171]) by imf15.hostedemail.com (Postfix) with ESMTP id 4ED10A0008 for ; Wed, 11 Dec 2024 16:09:37 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=cmpxchg-org.20230601.gappssmtp.com header.s=20230601 header.b=XMcLOaeA; spf=pass (imf15.hostedemail.com: domain of hannes@cmpxchg.org designates 209.85.160.171 as permitted sender) smtp.mailfrom=hannes@cmpxchg.org; dmarc=pass (policy=none) header.from=cmpxchg.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1733933392; 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=ZUp3RhBBfdr/dtfuqHm+FsIlOBYLF3QZPu3JwNbarhc=; b=jCgGjYemo71jjOuNJ1c/OvxfNk4R7Il1GTkeYUtx49Y2SEtoeLcnyXAL1auGaRgimhiTe3 D2/o9XKdpJ8CBXjd+m3FwS20em331HCBQ+PRn2lqxkqqSv7+mngD0CjEcRmdJXNlX79lca AO8ZW9yNnxeYyipW+WyGIE7hEMG7MyU= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1733933392; a=rsa-sha256; cv=none; b=P2Y2H5/QzUzZNrZvHreT2gGyNXWVoSToR/ZaUvuaMufwAz0fQ27gF7HxChRGbNMzE+lLxf +qgKOBmBHupjDbYsyBzPrG5id8CUL3QeZZ/70bUjBMqBRVwsjw4BMGEtawfi9wqrQf1z8j JVl0oJXFnXL+rnK/TOju/SkdWdeufFo= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=cmpxchg-org.20230601.gappssmtp.com header.s=20230601 header.b=XMcLOaeA; spf=pass (imf15.hostedemail.com: domain of hannes@cmpxchg.org designates 209.85.160.171 as permitted sender) smtp.mailfrom=hannes@cmpxchg.org; dmarc=pass (policy=none) header.from=cmpxchg.org Received: by mail-qt1-f171.google.com with SMTP id d75a77b69052e-467631f3ae3so22752121cf.0 for ; Wed, 11 Dec 2024 08:10:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cmpxchg-org.20230601.gappssmtp.com; s=20230601; t=1733933402; x=1734538202; 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=ZUp3RhBBfdr/dtfuqHm+FsIlOBYLF3QZPu3JwNbarhc=; b=XMcLOaeAY+OAsH79ZTHV1Gwm40O6lyvuqL518Cdv9aR9sL+HLDX3m4ouK9fQisJZWY ZT3yGFdNlJ6FELxZTKJbDt3jbmqhITy3gH/LIWtbi1ohLO9IYDwynsJtxAGUioL17shk oNXuA5AngWBkIP1cHz+3V2loXEVHYvC6c+CJQEYtTXF3eKFQ3z/p3MxhLsevjswilVBr LXhftryXqHT3yzPxigVAHGczj4Pz06s5Ae5CEGNrRLpV0VXt2SNScEGV2ykPBM4vv1KG hZ6Bu2Jc7/73raPxubtGDLLcSmizvAZhPHJ4XTrLauBX6kdeomjk2iFzNhSxwXeIX871 Q4Xw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733933402; x=1734538202; 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=ZUp3RhBBfdr/dtfuqHm+FsIlOBYLF3QZPu3JwNbarhc=; b=oSPiLRAcxRXkAFdiW6oTpAtnUTeGqjTIpCVvu1t7JSYyjqbPSha1YuBnN8BbAHoBc7 MAcSE7viSjg9ukBvga4f6xW9XO1k9DA0YfuxqlHdZekmL3epqA8eT6Rq/jWZqDiG1qOQ 4/iAEYGNm+vO70qnEsXiVLHLYkK+OMzx4xsVbzqjNbqJxJxKwqEAIFo0PzHILPEL1jvj Es2jQ6yu0sJKjQz89nFlBXug2v+a9KmjqPFz8HFH+HAViY7tDKAIWAglsqB/uy5qfbdB ABxsba8bUnAN4pi1PaGt2WE44Mf2yvED1hm0DxwMYBsUEZ1F6OA4JN4IcSXwj4OjD6UV BDGw== X-Forwarded-Encrypted: i=1; AJvYcCU6w7jeMTZo8/J/um9Cwqcm85OMH4ujdj5ik9I8MdEnnARw8ykU4pePTxa52btEoNqRgW0UbY2JjA==@kvack.org X-Gm-Message-State: AOJu0Yy874MZpG+hG7F9on/ai+Sf5wMjOK78jzvAQZf8z/rQSFij+Hav XpwaEeDjTBIvWa+YTh1his/8wwy/3ez9Os38FBJ8MUAdcxiE3a4HrXMzNS243F8= X-Gm-Gg: ASbGncv0Tt5hhmnyfgyzm1zgFE9F+1r8gnEndGrIDYUB3Bc57Fu8hL0butgUpSsqeGJ 1D77RP6OdRA9A+6sL3QuYzI5nIo7zFQLw+MGadtB71naUwq6vw7kk7NmMh1LLK9BCmNuSXxzXKF uMZ8ClmojFHuhP9wmCHhvB4Ydw1wlCUoRlzHv2RgpJbUCyMKhUSKKxWjqEDDjpYU8g4HK0FTnqa XR7tdAlDdsi3JLqsWqCJ3tHM+j5vG1BUiLm0rdME2dBblCWDog1 X-Google-Smtp-Source: AGHT+IHCFur8c2yRjAwCiXsHUZUv9CFzmKzR3fV7Tyv8vhH9XqzcHHhtRhxQu8/ilDdv1ZOYjn4iJA== X-Received: by 2002:a05:6214:1d2b:b0:6d8:8a60:ef2c with SMTP id 6a1803df08f44-6dae29c185bmr4727736d6.2.1733933401867; Wed, 11 Dec 2024 08:10:01 -0800 (PST) Received: from localhost ([2603:7000:c01:2716:da5e:d3ff:fee7:26e7]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6d8f5af294asm52335306d6.48.2024.12.11.08.10.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 08:10:01 -0800 (PST) Date: Wed, 11 Dec 2024 11:09:56 -0500 From: Johannes Weiner To: "Matthew Wilcox (Oracle)" Cc: Andrew Morton , Christoph Hellwig , linux-mm@kvack.org, Michal Hocko , Roman Gushchin , Shakeel Butt , Muchun Song , cgroups@vger.kernel.org, stable@vger.kernel.org Subject: Re: [PATCH 2/2] vmalloc: Account memcg per vmalloc Message-ID: <20241211160956.GB3136251@cmpxchg.org> References: <20241211043252.3295947-1-willy@infradead.org> <20241211043252.3295947-2-willy@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20241211043252.3295947-2-willy@infradead.org> X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 4ED10A0008 X-Stat-Signature: g93hp5i8taasu5rgs7bd8yb7qrnuduep X-Rspam-User: X-HE-Tag: 1733933377-854105 X-HE-Meta: U2FsdGVkX1/nQHQPxrS+vrV5EvqAVge86dJv6woVxFAiIu6xwmx5JX24jddDSkuT25AfC39EkmexKKRIVuljzmxWaDJPGd8WKDM/x67f/96NtnXCBbyaTzM4UyQW1Xwu+bJOeul3J5chHYZXFuEoYcyEyWm4eiFh7AOkfeb+g8quE9ylLyWlECz/8gJSEI5GuU57SxG2yHpgO/cYML4uyOqX8D1ikHRyJ0p70RMlTsn0AdLVsz3rD89NMikIhH1Ya4DkvyhTOOgQ1ZP6EowEsJHHip9Uut6Bh0SLGyPv///hV70oM9TrbBxPZyw9e0yaYZp6gRiCrEmUTquV83Zt7DeE7o09+eirJoisueGxgiQGwexto6HQe347MvxeAv3Ku/beyz+pLRCXc7UoaRa8gPwC1FlMzcK96OkC9vA1EbSeiw5oe0y9/mRoaUSM6hKTV6/ST2b55+nk0Il1mQNLyiLTFSLe5AMIRqNfOA7Tjgx/OViFtIE5+HX7Ny6aI7C4rm5Yzu29X2hgqRkMx6ZCSfv3x+JUWSLFy2ctQ/cy3DxP+c6lmVdzOu8lzWTcdahRn2Q0jkwImjOJOq15Vsg3OLus5Voy5mKCGsUGMSz7hOYKI15InflIg2ZrJMQrNc3IOqpMLS3fguzCTL6Hay3Sk4k/rCIDDffjaclfuXe0EcWjLjZvLTusc0FBQgD81O281PYETXisjbKRB6Z8azbbl98Xnf+NaxdA6jiWnS/RZs39gC4D6nq1pv0kak8wofXkoa4mbumTmjiP3gvh3fZA+BPJQmYcgSaHyu4+9BwHPLvd82KLQc4dlDDXmFdfkM9s79md+kOTQFyL7SGEc5ks9GydNKYw/AFf/5Fd9g2C2rGShQNzd9rk/CTKYRD31lSZ7IZINWMM40MoQMgLmpuvbVQaXTaW+vF44kEarUEDgfk2OTh29wex9JWw80p8JQfirnLhDbipKFWK5fFYI5s 2jYijzTj D0aqqiZU/ZkCdf8OXDt9jCSbQvLDu9srjGbC38TSaRNnYHWfDk1yQYbQ4q9q+xRFpWtsMdpKOp1CEK0lpU8NTk8HQDgYRv8GjfzucsI+NU5Yg/TnfQRRy2BNNMIxry4mPq+LCXrfnchKKjHczZCwBdieBmYFpNFb49x5oLvEqMGClNYK3BSJFCqSAXaIfIIKkivbaTZDnOfW7viiNZHJ0E7y2BA2grP4AERt50/zTMXsod9YXQ4cYbW2Q/9ORiSr6NNkEnq66tHIcKnc1AM5li5Ynk7ZYVI+mvVbauLB8JfuYPMVvUX2HKIR6GTRVvNnXWLPlqe9Jj8wIG2bIdRjKRvUy31HyX0MbSRnlYmTyhlBlB8gm3pb8NABOqUBV0xaRpKprRz0CO0zUU1eVEVxXobYd6NGUFiPrTinjHMm3KnHwW0bYpViX3eyO0l1Vzlc/X6dNGI0Jfufag/dXT3Q1deRu0lqpoSe7GwlH+u/B7OXztW1pcv+tD4Wpy6hhxnOSiFh5RlqodAAaIPlnz9x/VQglkzXiV5rVnrX8 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 Wed, Dec 11, 2024 at 04:32:50AM +0000, Matthew Wilcox (Oracle) wrote: > Today we account each page individually to the memcg, which works well > enough, if a little inefficiently (N atomic operations per page instead > of N per allocation). Unfortunately, the stats can get out of sync when > i915 calls vmap() with VM_MAP_PUT_PAGES. The pages being passed were not > allocated by vmalloc, so the MEMCG_VMALLOC counter was never incremented. > But it is decremented when the pages are freed with vfree(). > > Solve all of this by tracking the memcg at the vm_struct level. > This logic has to live in the memcontrol file as it calls several > functions which are currently static. > > Fixes: b944afc9d64d (mm: add a VM_MAP_PUT_PAGES flag for vmap) > Cc: stable@vger.kernel.org > Signed-off-by: Matthew Wilcox (Oracle) > --- > include/linux/memcontrol.h | 7 ++++++ > include/linux/vmalloc.h | 3 +++ > mm/memcontrol.c | 46 ++++++++++++++++++++++++++++++++++++++ > mm/vmalloc.c | 14 ++++++------ > 4 files changed, 63 insertions(+), 7 deletions(-) This would work, but it seems somewhat complicated. The atomics in memcg charging and the vmstat updates are batched, and the per-page overhead is for the most part cheap per-cpu ops. Not an issue per se. You could do for MEMCG_VMALLOC what you did for nr_vmalloc_pages: diff --git a/mm/vmalloc.c b/mm/vmalloc.c index 634162271c00..a889bb04405c 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -3353,7 +3353,11 @@ void vfree(const void *addr) struct page *page = vm->pages[i]; BUG_ON(!page); - mod_memcg_page_state(page, MEMCG_VMALLOC, -1); + + /* Pages were allocated elsewhere */ + if (!(vm->flags & VM_MAP_PUT_PAGES)) + 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