All of lore.kernel.org
 help / color / mirror / Atom feed
From: Suren Baghdasaryan <surenb@google.com>
To: akpm@linux-foundation.org
Cc: kent.overstreet@linux.dev, mhocko@suse.com, vbabka@suse.cz,
	 hannes@cmpxchg.org, roman.gushchin@linux.dev, mgorman@suse.de,
	 dave@stgolabs.net, willy@infradead.org, liam.howlett@oracle.com,
	 corbet@lwn.net, void@manifault.com, peterz@infradead.org,
	 juri.lelli@redhat.com, ldufour@linux.ibm.com,
	catalin.marinas@arm.com,  will@kernel.org, arnd@arndb.de,
	tglx@linutronix.de, mingo@redhat.com,
	 dave.hansen@linux.intel.com, x86@kernel.org, peterx@redhat.com,
	 david@redhat.com, axboe@kernel.dk, mcgrof@kernel.org,
	masahiroy@kernel.org,  nathan@kernel.org, dennis@kernel.org,
	tj@kernel.org, muchun.song@linux.dev,  rppt@kernel.org,
	paulmck@kernel.org, pasha.tatashin@soleen.com,
	 yosryahmed@google.com, yuzhao@google.com, dhowells@redhat.com,
	 hughd@google.com, andreyknvl@gmail.com, keescook@chromium.org,
	 ndesaulniers@google.com, vvvvvv@google.com,
	gregkh@linuxfoundation.org,  ebiggers@google.com,
	ytcoode@gmail.com, vincent.guittot@linaro.org,
	 dietmar.eggemann@arm.com, rostedt@goodmis.org,
	bsegall@google.com,  bristot@redhat.com, vschneid@redhat.com,
	cl@linux.com, penberg@kernel.org,  iamjoonsoo.kim@lge.com,
	42.hyeyoo@gmail.com, glider@google.com,  elver@google.com,
	dvyukov@google.com, shakeelb@google.com,
	 songmuchun@bytedance.com, jbaron@akamai.com,
	rientjes@google.com,  minchan@google.com, kaleshsingh@google.com,
	surenb@google.com,  kernel-team@android.com,
	linux-doc@vger.kernel.org,  linux-kernel@vger.kernel.org,
	iommu@lists.linux.dev,  linux-arch@vger.kernel.org,
	linux-fsdevel@vger.kernel.org, linux-mm@kvack.org,
	 linux-modules@vger.kernel.org, kasan-dev@googlegroups.com,
	 cgroups@vger.kernel.org
Subject: [PATCH v2 29/39] mm: percpu: Introduce pcpuobj_ext
Date: Tue, 24 Oct 2023 06:46:26 -0700	[thread overview]
Message-ID: <20231024134637.3120277-30-surenb@google.com> (raw)
In-Reply-To: <20231024134637.3120277-1-surenb@google.com>

From: Kent Overstreet <kent.overstreet@linux.dev>

Upcoming alloc tagging patches require a place to stash per-allocation
metadata.

We already do this when memcg is enabled, so this patch generalizes the
obj_cgroup * vector in struct pcpu_chunk by creating a pcpu_obj_ext
type, which we will be adding to in an upcoming patch - similarly to the
previous slabobj_ext patch.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Dennis Zhou <dennis@kernel.org>
Cc: Tejun Heo <tj@kernel.org>
Cc: Christoph Lameter <cl@linux.com>
Cc: linux-mm@kvack.org
---
 mm/percpu-internal.h | 19 +++++++++++++++++--
 mm/percpu.c          | 30 +++++++++++++++---------------
 2 files changed, 32 insertions(+), 17 deletions(-)

diff --git a/mm/percpu-internal.h b/mm/percpu-internal.h
index cdd0aa597a81..e62d582f4bf3 100644
--- a/mm/percpu-internal.h
+++ b/mm/percpu-internal.h
@@ -32,6 +32,16 @@ struct pcpu_block_md {
 	int			nr_bits;	/* total bits responsible for */
 };
 
+struct pcpuobj_ext {
+#ifdef CONFIG_MEMCG_KMEM
+	struct obj_cgroup	*cgroup;
+#endif
+};
+
+#ifdef CONFIG_MEMCG_KMEM
+#define NEED_PCPUOBJ_EXT
+#endif
+
 struct pcpu_chunk {
 #ifdef CONFIG_PERCPU_STATS
 	int			nr_alloc;	/* # of allocations */
@@ -64,8 +74,8 @@ struct pcpu_chunk {
 	int			end_offset;	/* additional area required to
 						   have the region end page
 						   aligned */
-#ifdef CONFIG_MEMCG_KMEM
-	struct obj_cgroup	**obj_cgroups;	/* vector of object cgroups */
+#ifdef NEED_PCPUOBJ_EXT
+	struct pcpuobj_ext	*obj_exts;	/* vector of object cgroups */
 #endif
 
 	int			nr_pages;	/* # of pages served by this chunk */
@@ -74,6 +84,11 @@ struct pcpu_chunk {
 	unsigned long		populated[];	/* populated bitmap */
 };
 
+static inline bool need_pcpuobj_ext(void)
+{
+	return !mem_cgroup_kmem_disabled();
+}
+
 extern spinlock_t pcpu_lock;
 
 extern struct list_head *pcpu_chunk_lists;
diff --git a/mm/percpu.c b/mm/percpu.c
index a7665de8485f..5a6202acffa3 100644
--- a/mm/percpu.c
+++ b/mm/percpu.c
@@ -1392,9 +1392,9 @@ static struct pcpu_chunk * __init pcpu_alloc_first_chunk(unsigned long tmp_addr,
 		panic("%s: Failed to allocate %zu bytes\n", __func__,
 		      alloc_size);
 
-#ifdef CONFIG_MEMCG_KMEM
+#ifdef NEED_PCPUOBJ_EXT
 	/* first chunk is free to use */
-	chunk->obj_cgroups = NULL;
+	chunk->obj_exts = NULL;
 #endif
 	pcpu_init_md_blocks(chunk);
 
@@ -1463,12 +1463,12 @@ static struct pcpu_chunk *pcpu_alloc_chunk(gfp_t gfp)
 	if (!chunk->md_blocks)
 		goto md_blocks_fail;
 
-#ifdef CONFIG_MEMCG_KMEM
-	if (!mem_cgroup_kmem_disabled()) {
-		chunk->obj_cgroups =
+#ifdef NEED_PCPUOBJ_EXT
+	if (need_pcpuobj_ext()) {
+		chunk->obj_exts =
 			pcpu_mem_zalloc(pcpu_chunk_map_bits(chunk) *
-					sizeof(struct obj_cgroup *), gfp);
-		if (!chunk->obj_cgroups)
+					sizeof(struct pcpuobj_ext), gfp);
+		if (!chunk->obj_exts)
 			goto objcg_fail;
 	}
 #endif
@@ -1480,7 +1480,7 @@ static struct pcpu_chunk *pcpu_alloc_chunk(gfp_t gfp)
 
 	return chunk;
 
-#ifdef CONFIG_MEMCG_KMEM
+#ifdef NEED_PCPUOBJ_EXT
 objcg_fail:
 	pcpu_mem_free(chunk->md_blocks);
 #endif
@@ -1498,8 +1498,8 @@ static void pcpu_free_chunk(struct pcpu_chunk *chunk)
 {
 	if (!chunk)
 		return;
-#ifdef CONFIG_MEMCG_KMEM
-	pcpu_mem_free(chunk->obj_cgroups);
+#ifdef NEED_PCPUOBJ_EXT
+	pcpu_mem_free(chunk->obj_exts);
 #endif
 	pcpu_mem_free(chunk->md_blocks);
 	pcpu_mem_free(chunk->bound_map);
@@ -1648,8 +1648,8 @@ static void pcpu_memcg_post_alloc_hook(struct obj_cgroup *objcg,
 	if (!objcg)
 		return;
 
-	if (likely(chunk && chunk->obj_cgroups)) {
-		chunk->obj_cgroups[off >> PCPU_MIN_ALLOC_SHIFT] = objcg;
+	if (likely(chunk && chunk->obj_exts)) {
+		chunk->obj_exts[off >> PCPU_MIN_ALLOC_SHIFT].cgroup = objcg;
 
 		rcu_read_lock();
 		mod_memcg_state(obj_cgroup_memcg(objcg), MEMCG_PERCPU_B,
@@ -1665,13 +1665,13 @@ static void pcpu_memcg_free_hook(struct pcpu_chunk *chunk, int off, size_t size)
 {
 	struct obj_cgroup *objcg;
 
-	if (unlikely(!chunk->obj_cgroups))
+	if (unlikely(!chunk->obj_exts))
 		return;
 
-	objcg = chunk->obj_cgroups[off >> PCPU_MIN_ALLOC_SHIFT];
+	objcg = chunk->obj_exts[off >> PCPU_MIN_ALLOC_SHIFT].cgroup;
 	if (!objcg)
 		return;
-	chunk->obj_cgroups[off >> PCPU_MIN_ALLOC_SHIFT] = NULL;
+	chunk->obj_exts[off >> PCPU_MIN_ALLOC_SHIFT].cgroup = NULL;
 
 	obj_cgroup_uncharge(objcg, pcpu_obj_full_size(size));
 
-- 
2.42.0.758.gaed0368e0e-goog


  parent reply	other threads:[~2023-10-24 13:47 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-24 13:45 [PATCH v2 00/39] Memory allocation profiling Suren Baghdasaryan
2023-10-24 13:45 ` [PATCH v2 01/39] lib/string_helpers: Add flags param to string_get_size() Suren Baghdasaryan
2023-10-24 14:26   ` Andy Shevchenko
2023-10-24 17:08     ` Suren Baghdasaryan
2023-10-24 19:46     ` Kent Overstreet
2023-10-26 13:12       ` Andy Shevchenko
2023-10-26 18:44         ` Kent Overstreet
2023-10-30 20:07           ` Andy Shevchenko
2023-10-30 22:35             ` Kent Overstreet
2023-10-24 13:45 ` [PATCH v2 02/39] scripts/kallysms: Always include __start and __stop symbols Suren Baghdasaryan
2023-10-24 13:46 ` [PATCH v2 03/39] fs: Convert alloc_inode_sb() to a macro Suren Baghdasaryan
2023-10-24 13:46 ` [PATCH v2 04/39] nodemask: Split out include/linux/nodemask_types.h Suren Baghdasaryan
2023-10-24 13:46 ` [PATCH v2 05/39] prandom: Remove unused include Suren Baghdasaryan
2023-10-24 13:46 ` [PATCH v2 06/39] mm: enumerate all gfp flags Suren Baghdasaryan
2023-10-25  5:46   ` Petr Tesařík
2023-10-25 15:28     ` Suren Baghdasaryan
2023-10-28 17:21       ` Petr Tesařík
2023-10-24 13:46 ` [PATCH v2 07/39] mm: introduce slabobj_ext to support slab object extensions Suren Baghdasaryan
2023-10-24 21:35   ` kernel test robot
2023-10-25  4:54   ` kernel test robot
2023-10-24 13:46 ` [PATCH v2 08/39] mm: introduce __GFP_NO_OBJ_EXT flag to selectively prevent slabobj_ext creation Suren Baghdasaryan
2023-10-24 13:46 ` [PATCH v2 09/39] mm/slab: introduce SLAB_NO_OBJ_EXT to avoid obj_ext creation Suren Baghdasaryan
2023-10-24 13:46 ` [PATCH v2 10/39] mm: prevent slabobj_ext allocations for slabobj_ext and kmem_cache objects Suren Baghdasaryan
2023-10-24 13:46 ` [PATCH v2 11/39] slab: objext: introduce objext_flags as extension to page_memcg_data_flags Suren Baghdasaryan
2023-10-24 13:46 ` [PATCH v2 12/39] lib: code tagging framework Suren Baghdasaryan
2023-10-24 13:46 ` [PATCH v2 13/39] lib: code tagging module support Suren Baghdasaryan
2023-10-24 13:46 ` [PATCH v2 14/39] lib: prevent module unloading if memory is not freed Suren Baghdasaryan
2023-10-24 13:46 ` [PATCH v2 15/39] lib: add allocation tagging support for memory allocation profiling Suren Baghdasaryan
2023-10-24 13:46 ` [PATCH v2 16/39] lib: introduce support for page allocation tagging Suren Baghdasaryan
2023-10-24 13:46 ` [PATCH v2 17/39] change alloc_pages name in dma_map_ops to avoid name conflicts Suren Baghdasaryan
2023-10-24 13:46 ` [PATCH v2 18/39] change alloc_pages name in ivpu_bo_ops to avoid conflicts Suren Baghdasaryan
2023-10-24 13:46 ` [PATCH v2 19/39] mm: enable page allocation tagging Suren Baghdasaryan
2023-10-24 13:46 ` [PATCH v2 20/39] mm: create new codetag references during page splitting Suren Baghdasaryan
2023-10-24 13:46 ` [PATCH v2 21/39] mm/page_ext: enable early_page_ext when CONFIG_MEM_ALLOC_PROFILING_DEBUG=y Suren Baghdasaryan
2023-10-24 13:46 ` [PATCH v2 22/39] lib: add codetag reference into slabobj_ext Suren Baghdasaryan
2023-10-24 13:46 ` [PATCH v2 23/39] mm/slab: add allocation accounting into slab allocation and free paths Suren Baghdasaryan
2023-10-24 13:46 ` [PATCH v2 24/39] mm/slab: enable slab allocation tagging for kmalloc and friends Suren Baghdasaryan
2023-10-24 22:40   ` kernel test robot
2023-10-24 13:46 ` [PATCH v2 25/39] mm/slub: Mark slab_free_freelist_hook() __always_inline Suren Baghdasaryan
2023-10-24 13:46 ` [PATCH v2 26/39] mempool: Hook up to memory allocation profiling Suren Baghdasaryan
2023-10-24 23:43   ` kernel test robot
2023-10-24 13:46 ` [PATCH v2 27/39] xfs: Memory allocation profiling fixups Suren Baghdasaryan
2023-10-24 13:46 ` [PATCH v2 28/39] timekeeping: Fix a circular include dependency Suren Baghdasaryan
2023-10-25 17:33   ` Thomas Gleixner
2023-10-26 18:33     ` Suren Baghdasaryan
2023-10-26 23:05       ` Thomas Gleixner
2023-10-26 23:54         ` Kent Overstreet
2023-10-27  6:35           ` Arnd Bergmann
2023-10-27 15:28             ` Nick Desaulniers
2023-10-24 13:46 ` Suren Baghdasaryan [this message]
2023-10-24 13:46 ` [PATCH v2 30/39] mm: percpu: Add codetag reference into pcpuobj_ext Suren Baghdasaryan
2023-10-24 13:46 ` [PATCH v2 31/39] mm: percpu: enable per-cpu allocation tagging Suren Baghdasaryan
2023-10-24 13:46 ` [PATCH v2 32/39] arm64: Fix circular header dependency Suren Baghdasaryan
2023-10-24 13:46 ` [PATCH v2 33/39] mm: vmalloc: Enable memory allocation profiling Suren Baghdasaryan
2023-10-24 17:08   ` kernel test robot
2023-10-25  0:58   ` kernel test robot
2023-10-24 13:46 ` [PATCH v2 34/39] rhashtable: Plumb through alloc tag Suren Baghdasaryan
2023-10-24 13:46 ` [PATCH v2 35/39] lib: add memory allocations report in show_mem() Suren Baghdasaryan
2023-10-24 13:46 ` [PATCH v2 36/39] codetag: debug: skip objext checking when it's for objext itself Suren Baghdasaryan
2023-10-24 13:46 ` [PATCH v2 37/39] codetag: debug: mark codetags for reserved pages as empty Suren Baghdasaryan
2023-10-24 13:46 ` [PATCH v2 38/39] codetag: debug: introduce OBJEXTS_ALLOC_FAIL to mark failed slab_ext allocations Suren Baghdasaryan
2023-10-24 13:46 ` [PATCH v2 39/39] MAINTAINERS: Add entries for code tagging and memory allocation profiling Suren Baghdasaryan
2023-10-24 18:29 ` [PATCH v2 00/39] Memory " Roman Gushchin
2023-10-24 18:38   ` Suren Baghdasaryan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231024134637.3120277-30-surenb@google.com \
    --to=surenb@google.com \
    --cc=42.hyeyoo@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=andreyknvl@gmail.com \
    --cc=arnd@arndb.de \
    --cc=axboe@kernel.dk \
    --cc=bristot@redhat.com \
    --cc=bsegall@google.com \
    --cc=catalin.marinas@arm.com \
    --cc=cgroups@vger.kernel.org \
    --cc=cl@linux.com \
    --cc=corbet@lwn.net \
    --cc=dave.hansen@linux.intel.com \
    --cc=dave@stgolabs.net \
    --cc=david@redhat.com \
    --cc=dennis@kernel.org \
    --cc=dhowells@redhat.com \
    --cc=dietmar.eggemann@arm.com \
    --cc=dvyukov@google.com \
    --cc=ebiggers@google.com \
    --cc=elver@google.com \
    --cc=glider@google.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=hannes@cmpxchg.org \
    --cc=hughd@google.com \
    --cc=iamjoonsoo.kim@lge.com \
    --cc=iommu@lists.linux.dev \
    --cc=jbaron@akamai.com \
    --cc=juri.lelli@redhat.com \
    --cc=kaleshsingh@google.com \
    --cc=kasan-dev@googlegroups.com \
    --cc=keescook@chromium.org \
    --cc=kent.overstreet@linux.dev \
    --cc=kernel-team@android.com \
    --cc=ldufour@linux.ibm.com \
    --cc=liam.howlett@oracle.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-modules@vger.kernel.org \
    --cc=masahiroy@kernel.org \
    --cc=mcgrof@kernel.org \
    --cc=mgorman@suse.de \
    --cc=mhocko@suse.com \
    --cc=minchan@google.com \
    --cc=mingo@redhat.com \
    --cc=muchun.song@linux.dev \
    --cc=nathan@kernel.org \
    --cc=ndesaulniers@google.com \
    --cc=pasha.tatashin@soleen.com \
    --cc=paulmck@kernel.org \
    --cc=penberg@kernel.org \
    --cc=peterx@redhat.com \
    --cc=peterz@infradead.org \
    --cc=rientjes@google.com \
    --cc=roman.gushchin@linux.dev \
    --cc=rostedt@goodmis.org \
    --cc=rppt@kernel.org \
    --cc=shakeelb@google.com \
    --cc=songmuchun@bytedance.com \
    --cc=tglx@linutronix.de \
    --cc=tj@kernel.org \
    --cc=vbabka@suse.cz \
    --cc=vincent.guittot@linaro.org \
    --cc=void@manifault.com \
    --cc=vschneid@redhat.com \
    --cc=vvvvvv@google.com \
    --cc=will@kernel.org \
    --cc=willy@infradead.org \
    --cc=x86@kernel.org \
    --cc=yosryahmed@google.com \
    --cc=ytcoode@gmail.com \
    --cc=yuzhao@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.