forked from mirrors/linux
		
	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: Shakeel Butt <shakeelb@google.com> Suggested-by: Eric Dumazet <edumazet@google.com> Reviewed-by: Kirill Tkhai <ktkhai@virtuozzo.com> Reviewed-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									4205c88eaf
								
							
						
					
					
						commit
						e699e2c6a6
					
				
					 1 changed files with 5 additions and 2 deletions
				
			
		| 
						 | 
					@ -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)
 | 
				
			||||||
	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)
 | 
				
			||||||
				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)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue