Commit e699e2c6 authored by Shakeel Butt's avatar Shakeel Butt Committed by David S. Miller

net, mm: account sock objects to kmemcg

Currently the kernel accounts the memory for network traffic through
mem_cgroup_[un]charge_skmem() interface. However the memory accounted
only includes the truesize of sk_buff which does not include the size of
sock objects. In our production environment, with opt-out kmem
accounting, the sock kmem caches (TCP[v6], UDP[v6], RAW[v6], UNIX) are
among the top most charged kmem caches and consume a significant amount
of memory which can not be left as system overhead. So, this patch
converts the kmem caches of all sock objects to SLAB_ACCOUNT.
Signed-off-by: default avatarShakeel Butt <shakeelb@google.com>
Suggested-by: default avatarEric Dumazet <edumazet@google.com>
Reviewed-by: default avatarKirill Tkhai <ktkhai@virtuozzo.com>
Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 4205c88e
...@@ -3243,7 +3243,8 @@ static int req_prot_init(const struct proto *prot) ...@@ -3243,7 +3243,8 @@ static int req_prot_init(const struct proto *prot)
rsk_prot->slab = kmem_cache_create(rsk_prot->slab_name, rsk_prot->slab = kmem_cache_create(rsk_prot->slab_name,
rsk_prot->obj_size, 0, rsk_prot->obj_size, 0,
prot->slab_flags, NULL); SLAB_ACCOUNT | prot->slab_flags,
NULL);
if (!rsk_prot->slab) { if (!rsk_prot->slab) {
pr_crit("%s: Can't create request sock SLAB cache!\n", pr_crit("%s: Can't create request sock SLAB cache!\n",
...@@ -3258,7 +3259,8 @@ int proto_register(struct proto *prot, int alloc_slab) ...@@ -3258,7 +3259,8 @@ int proto_register(struct proto *prot, int alloc_slab)
if (alloc_slab) { if (alloc_slab) {
prot->slab = kmem_cache_create_usercopy(prot->name, prot->slab = kmem_cache_create_usercopy(prot->name,
prot->obj_size, 0, prot->obj_size, 0,
SLAB_HWCACHE_ALIGN | prot->slab_flags, SLAB_HWCACHE_ALIGN | SLAB_ACCOUNT |
prot->slab_flags,
prot->useroffset, prot->usersize, prot->useroffset, prot->usersize,
NULL); NULL);
...@@ -3281,6 +3283,7 @@ int proto_register(struct proto *prot, int alloc_slab) ...@@ -3281,6 +3283,7 @@ int proto_register(struct proto *prot, int alloc_slab)
kmem_cache_create(prot->twsk_prot->twsk_slab_name, kmem_cache_create(prot->twsk_prot->twsk_slab_name,
prot->twsk_prot->twsk_obj_size, prot->twsk_prot->twsk_obj_size,
0, 0,
SLAB_ACCOUNT |
prot->slab_flags, prot->slab_flags,
NULL); NULL);
if (prot->twsk_prot->twsk_slab == NULL) if (prot->twsk_prot->twsk_slab == NULL)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment