From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-qt1-f171.google.com (mail-qt1-f171.google.com [209.85.160.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8EC492D876B for ; Thu, 16 Jul 2026 04:46:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=209.85.160.171 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784177218; cv=pass; b=JoGtJ2dc33s8bNWBbc0G1DL6N66RRZfaL6Y959h+xnHcdEu5JIoMzeNSzPEmwKP2QneKbAXndKqK77RMmJvb9Lvmavl/qys1jFrWaWod7EQXMevO3f1EDmV2MqtHRwNvncJX2MSzjSHCxvJU+VfVHkOpehZhqYQFmq3ohojm1VQ= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784177218; c=relaxed/simple; bh=r9tMeIfnsk8MTtFIvkaqaDbeip/rrh7jyXC9aKBxDBI=; h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject: To:Cc:Content-Type; b=SslbrLahj7nCjrN6qz6ShySJZUIxPQ5NzqaYXORwvrZyLw08SI9mMR4VzckzyQWAYcC4y/R0xegcho3xXjy/iPYveltvYaUtzGvqK3vvCXuW0hDKHk5ThifgpuXtuuQ7RrG1pk0e6QY4ETxLgg/FPrlFaJsIRpCwmm4QPxiJsGA= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=LLtpNQQF; arc=pass smtp.client-ip=209.85.160.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="LLtpNQQF" Received: by mail-qt1-f171.google.com with SMTP id d75a77b69052e-51c01c79467so165021cf.0 for ; Wed, 15 Jul 2026 21:46:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1784177216; cv=none; d=google.com; s=arc-20260327; b=PRJcucktENap6/61haWOecNXk4uSkseTlTh+E/DvMbgp+sfWVrcTtYuJfo+btNp/Rv /BkaJaa/zrCpQJectL6EwPU+IetYJ7z9Vag0gzbVlIf+7FSQNPSq93C+c1sFofXKNTqN LXq3pR1orsNQro4/EmAnIIXmoerLb5RhKAZbCsSeoqRhvT1E23jqxGKT5ug/Pl+tFvI0 CKg6jzrWVTwfFOufaFLXxXlJDOi9ZMo+koRAak7fTeGbd03eMqxXEI0MZSOFXbc9lpXw WYNgro7tNk2ECzGCsfiALipMLPDI0T+Sh97mNLHGLDnfzhFcx2cPTlNmqHGaGE7VUMjy lasQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=QkYo68g6gezb441tzdBjHayPqeJqE9nrvYdojct+96I=; fh=68bTq15tOysSvuxlJL06Llpw/g8oPZGFOemugY0IPpQ=; b=c75nXQLm6AqyEPQcRN0u6b/r0giUWLDby7PNvhWGrwxCg4w1Iz29IB7sUxTJpMQnP9 pJpkCZNBm4fNqEajW49/7+pVoyV3T+eqw5zhYsvOF703ptrDFrMpkYGX/Dw7VVM4hNI3 Hl5MZBnGrHjJageYrShPG+6RpAHSlvHA0NfieTJ1ZoHUtH2+TD9cJJgsGbRN79RQ8tiV tEvt7Tz2D7BysJghS7HGX/flyD8TYFeu0+B5eK5c3w4MlL72plavUoph+medJw/VZhU7 aQUVZgPw5U2prnpz6MbIxshGTJMufZv0Rhx6Vpnw9fmrcXX8wxOBRhQOq19UdVYuuhHk R7Ow==; darn=vger.kernel.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1784177216; x=1784782016; darn=vger.kernel.org; h=content-transfer-encoding:content-type:cc:to:subject:message-id :date:from:in-reply-to:references:mime-version:from:to:cc:subject :date:message-id:reply-to:content-type; bh=QkYo68g6gezb441tzdBjHayPqeJqE9nrvYdojct+96I=; b=LLtpNQQFuT9nStM15W8P/7lrjXRut/ysswh0UC79Ndg/bHfF5dpQ2a7QMrEgzklpfM w5mCYqi8Hdga3U4exQbGlo/UrGx6m9zw20S4wsYWQxHaDp3wW9foTEHB5qoyo5WAAjOf Dr+aoiWBxP1WxgY8syJVXBCx+6ZXjaGtkw0sEbPai6b3CT9P9C0EpM5GR9i0/Q1WvFBg b6RAkWJeHjWeGLH04rvM3Fp0J/B7uL+MTYWjSkaToN0lJCbZlAhFv1kfuzX8t+B94nNy FJfwa/PBUdY2UR8ZJ28ER8XmI72gfRGeCtyWoX7JKOdibfU+8IfCQX5R5gAKOFWBtD8p odmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784177216; x=1784782016; h=content-transfer-encoding:content-type:cc:to:subject:message-id :date:from:in-reply-to:references:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=QkYo68g6gezb441tzdBjHayPqeJqE9nrvYdojct+96I=; b=MaiXesU0uEqVuj85FYquYwEoPEaPzb3ugGmUPK7kiA58HIbHmMBzMhgASTsnDLSz7j HvM0SAXZ/63rdRvhVWC+Q2JBKDOnPEYRj1X43/TIwtDjJC+p1lnzyDjYCnxTSJKCdfmq E3w9Z3jrItlJU76Pl4rxn4lZBRDyhMyU13BJphoG166CBHUcKpiCz3wKi5M+IuEihLyf Bl9z8MIWpxiz7T3hNtkYwgZQqdpHzOEWZH1OqjcjLDpLW5b9m+/FWpJxJxIQjAZ1wVHA Ti5y627bVIlfU1aNkVS/NTtYNdK8M+Q+25Gz8Mn5gBEITtbTDc6KxZXCjarxFHfk3snK ULVg== X-Forwarded-Encrypted: i=1; AHgh+RomYMcCazMba0XIFlZ2BynvbarWBBR7AeVDqjhuY222Gq3aREFtBVrNA79OhzJnWbow32fEdsFiurRydY8=@vger.kernel.org X-Gm-Message-State: AOJu0YznUEzbg3nTvjyn0sO9dESCBar+EYJbcGiLUKpfLsPSHqCmj4Px lQT07SZP+G+fLKCjKvLP3dU41pxAenwKImx5Ykn9cYyg+K7M4YYf855qgZdQbcaCXQwzt9ler2x /u6wuVOQLFsrSJC1qMhfyslhYlJBAD54NPIbt7+fK X-Gm-Gg: AfdE7cnuKYDHtSavYJFNYBk9GNxDzYK9UMXTdjGYamCbfBYaaleKm+aAEjEeES6lU8n Snz2J3t/44nsChyFA7CwEGrln/2NtMxVYjF5qMFnIsKje9itytDBMEc69GTkJxVQnzmlKISiUAt NHPBj02kGbRmZweiXbu9WO6qlBzhGgwWkNYB2wGFPTrFm0cEjQqFTmR197mQPFzQQMer9qqRrYf A4W22+EGe/3rgwMv2rWzgcvR+jnji8FyDcTto6IIej8cyMkUzSUJmiwrRuEajxR3DnKgDs= X-Received: by 2002:a05:622a:4c11:b0:510:f9b:fb5f with SMTP id d75a77b69052e-51f80c34977mr5409551cf.16.1784177215783; Wed, 15 Jul 2026 21:46:55 -0700 (PDT) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 References: <20260715-b4-objext_split-v1-0-9a49c4ccf4c3@kernel.org> <20260715-b4-objext_split-v1-12-9a49c4ccf4c3@kernel.org> In-Reply-To: <20260715-b4-objext_split-v1-12-9a49c4ccf4c3@kernel.org> From: Suren Baghdasaryan Date: Wed, 15 Jul 2026 21:46:43 -0700 X-Gm-Features: AUfX_mz_aFj-8xOsfsdMXRZ_fQhVoExHnQqcIqo8QRrYZa0FkludBjRw5lIFfIc Message-ID: Subject: Re: [PATCH RFC 12/12] mm/slab: stop allocating objcg pointers when unnecessary To: "Vlastimil Babka (SUSE)" Cc: Harry Yoo , Hao Li , Shakeel Butt , Alexander Potapenko , Marco Elver , Andrew Morton , Christoph Lameter , David Rientjes , Roman Gushchin , linux-mm@kvack.org, linux-kernel@vger.kernel.org, cgroups@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Jul 15, 2026 at 3:11=E2=80=AFAM Vlastimil Babka (SUSE) wrote: > > Start using the slab_needs_objcg() helper to calculate slabobj_ext size. > Caches that we know to never need objcg pointers (currently > KMALLOC_NORMAL caches) will thus stop wasting memory on them when memory > allocation profiling is enabled. > > For things to work properly, we need to also add slab_needs_objcg() > checks to mem_cgroup_from_obj_slab() and memcg_slab_free_hook(), because > when obj_exts array exists for a slab only due to mem_alloc profiling, > we would otherwise attempt to access a non-existing objcg pointer in > that slab. > > The function __memcg_slab_post_alloc_hook() should not be possible to > call for a slab where slab_needs_objcg() is false, but add a DEBUG_VM > check there to prevent breaking this assumption accidentally. > > Signed-off-by: Vlastimil Babka (SUSE) The change looks nice and simple. I'll take some more time to check if we missed anything. Only one nit below. > --- > mm/memcontrol.c | 6 ++++++ > mm/slab.h | 12 ++++++++++-- > mm/slub.c | 3 +++ > 3 files changed, 19 insertions(+), 2 deletions(-) > > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > index 6303a2b1a9d0..09659722ec85 100644 > --- a/mm/memcontrol.c > +++ b/mm/memcontrol.c > @@ -2871,6 +2871,9 @@ struct mem_cgroup *mem_cgroup_from_obj_slab(struct = slab *slab, void *p) > if (!obj_exts) > return NULL; > > + if (!slab_needs_objcg(slab)) > + return NULL; > + > get_slab_obj_exts(obj_exts); > obj_ext =3D slab_obj_ext(slab->slab_cache, slab, obj_exts, p); > objcg =3D *slab_obj_ext_objcgp(obj_ext); > @@ -3581,6 +3584,9 @@ bool __memcg_slab_post_alloc_hook(struct kmem_cache= *s, struct list_lru *lru, > > slab =3D virt_to_slab(p[i]); > > + if (IS_ENABLED(CONFIG_DEBUG_VM) && WARN_ON_ONCE(!slab_nee= ds_objcg(slab))) > + continue; > + > if (!slab_obj_exts(slab) && > alloc_slab_obj_exts(slab, s, flags, slab_alloc_flags)= ) { > continue; > diff --git a/mm/slab.h b/mm/slab.h > index 948d075cdbef..072cc2506756 100644 > --- a/mm/slab.h > +++ b/mm/slab.h > @@ -622,7 +622,15 @@ static inline size_t static_obj_ext_size(void) > > static inline size_t slab_obj_ext_size(struct slab *slab) > { > - return static_obj_ext_size(); Maybe now we should rename static_obj_ext_size() to static_obj_ext_max_size() as it reflects the max possible size of slabobj_ext? > + size_t sz =3D 0; > + > + if (slab_needs_objcg(slab)) > + sz +=3D 1; > + > + if (slab_obj_ext_has_codetag()) > + sz +=3D 1; > + > + return sizeof(struct slabobj_ext) * sz; > } > > #ifdef CONFIG_SLAB_OBJ_EXT > @@ -741,7 +749,7 @@ static inline struct obj_cgroup **slab_obj_ext_objcgp= (struct slabobj_ext *obj_ex > static inline union codetag_ref * > slab_obj_ext_codetag_ref(struct slab *slab, struct slabobj_ext *obj_ext) > { > - if (IS_ENABLED(CONFIG_MEMCG)) > + if (slab_needs_objcg(slab)) > obj_ext +=3D 1; > > return &obj_ext->_ctref; > diff --git a/mm/slub.c b/mm/slub.c > index 771d73abacb6..09c4931e5435 100644 > --- a/mm/slub.c > +++ b/mm/slub.c > @@ -2503,6 +2503,9 @@ void memcg_slab_free_hook(struct kmem_cache *s, str= uct slab *slab, void **p, > if (likely(!obj_exts)) > return; > > + if (!slab_needs_objcg(slab)) > + return; > + > get_slab_obj_exts(obj_exts); > __memcg_slab_free_hook(s, slab, p, objects, obj_exts); > put_slab_obj_exts(obj_exts); > > -- > 2.55.0 >