Re: [PATCH] fs, mm: account filp and names caches to kmemcg

From: Shakeel Butt
Date: Fri Oct 06 2017 - 15:33:10 EST


>> names_cachep = kmem_cache_create("names_cache", PATH_MAX, 0,
>> - SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL);
>> + SLAB_HWCACHE_ALIGN|SLAB_PANIC|SLAB_ACCOUNT, NULL);
>
> I might be wrong but isn't name cache only holding temporary objects
> used for path resolution which are not stored anywhere?
>

Even though they're temporary, many containers can together use a
significant amount of transient uncharged memory. We've seen machines
with 100s of MiBs in names_cache.

>> filp_cachep = kmem_cache_create("filp", sizeof(struct file), 0,
>> - SLAB_HWCACHE_ALIGN | SLAB_PANIC, NULL);
>> + SLAB_HWCACHE_ALIGN | SLAB_PANIC | SLAB_ACCOUNT, NULL);
>> percpu_counter_init(&nr_files, 0, GFP_KERNEL);
>> }
>
> Don't we have a limit for the maximum number of open files?
>

Yes, there is a system limit of maximum number of open files. However
this limit is shared between different users on the system and one
user can hog this resource. To cater that, we set the maximum limit
very high and let the memory limit of each user limit the number of
files they can open.