mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 04:02:20 +00:00
memcg: reduce memory size of mem_cgroup_events_index
Patch series "memcg: reduce memory consumption by memcg stats", v4. Most of the memory overhead of a memcg object is due to memcg stats maintained by the kernel. Since stats updates happen in performance critical codepaths, the stats are maintained per-cpu and numa specific stats are maintained per-node * per-cpu. This drastically increase the overhead on large machines i.e. large of CPUs and multiple numa nodes. This patch series tries to reduce the overhead by at least not allocating the memory for stats which are not memcg specific. This patch (of 8): mem_cgroup_events_index is a translation table to get the right index of the memcg relevant entry for the general vm_event_item. At the moment, it is defined as integer array. However on a typical system the max entry of vm_event_item (NR_VM_EVENT_ITEMS) is 113, so we don't need to use int as storage type of the array. For now just use int8_t as type and add a BUILD_BUG_ON(). Another benefit of this change is that the translation table fits in 2 cachelines while previously it would require 8 cachelines (assuming 64 bytes cacheline). Link: https://lkml.kernel.org/r/20240501172617.678560-1-shakeel.butt@linux.dev Link: https://lkml.kernel.org/r/20240501172617.678560-2-shakeel.butt@linux.dev Signed-off-by: Shakeel Butt <shakeel.butt@linux.dev> Reviewed-by: Roman Gushchin <roman.gushchin@linux.dev> Reviewed-by: Yosry Ahmed <yosryahmed@google.com> Reviewed-by: T.J. Mercier <tjmercier@google.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Michal Hocko <mhocko@kernel.org> Cc: Muchun Song <muchun.song@linux.dev> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
a4c43b8a09
commit
59142d87ab
@ -606,11 +606,13 @@ static const unsigned int memcg_vm_event_stat[] = {
|
||||
};
|
||||
|
||||
#define NR_MEMCG_EVENTS ARRAY_SIZE(memcg_vm_event_stat)
|
||||
static int mem_cgroup_events_index[NR_VM_EVENT_ITEMS] __read_mostly;
|
||||
static int8_t mem_cgroup_events_index[NR_VM_EVENT_ITEMS] __read_mostly;
|
||||
|
||||
static void init_memcg_events(void)
|
||||
{
|
||||
int i;
|
||||
int8_t i;
|
||||
|
||||
BUILD_BUG_ON(NR_VM_EVENT_ITEMS >= S8_MAX);
|
||||
|
||||
for (i = 0; i < NR_MEMCG_EVENTS; ++i)
|
||||
mem_cgroup_events_index[memcg_vm_event_stat[i]] = i + 1;
|
||||
|
Loading…
Reference in New Issue
Block a user