Re: [PATCH -V6 07/14] memcg: Add HugeTLB extension
From: Aneesh Kumar K.V <hidden>
Date: 2012-05-30 14:43:52
Also in:
linux-mm, lkml
"Aneesh Kumar K.V" [off-list ref] writes:
On Thu, May 24, 2012 at 02:52:26PM -0700, David Rientjes wrote:quoted
On Mon, 16 Apr 2012, Aneesh Kumar K.V wrote:quoted
This patch implements a memcg extension that allows us to control HugeTLB allocations via memory controller. The extension allows to limit the HugeTLB usage per control group and enforces the controller limit during page fault. Since HugeTLB doesn't support page reclaim, enforcing the limit at page fault time implies that, the application will get SIGBUS signal if it tries to access HugeTLB pages beyond its limit. This requires the application to know beforehand how much HugeTLB pages it would require for its use. The charge/uncharge calls will be added to HugeTLB code in later patch. Support for memcg removal will be added in later patches.Again, I disagree with this approach because it's adding the functionality to memcg when it's unnecessary; it would be a complete legitimate usecase to want to limit the number of globally available hugepages to a set of tasks without incurring the per-page tracking from memcg. This can be implemented as a seperate cgroup and as we move to a single hierarchy, you lose no functionality if you mount both cgroups from what is done here. It would be much cleaner in terms of - build: not requiring ifdefs and dependencies on CONFIG_HUGETLB_PAGE, which is a prerequisite for this functionality and is not for CONFIG_CGROUP_MEM_RES_CTLR,I am not sure we have large number of #ifdef as you have outlined above. Most of the hugetlb limit code is well isolated already. If we were to split it as a seperate controller, we will be duplicating code related cgroup deletion, migration support etc from memcg, because in case of memcg and hugetlb limit they depend on struct page. So I would expect we would be end up #ifdef around that code or duplicate them in the new controller if we were to do hugetlb limit as a seperate controller. Another reason for it to be part of memcg is, it is normal to look at hugetlb usage also as a memory usage. One of the feedback I got for the earlier post is to see if i can enhace the current code to make sure memory.usage_in_bytes can also account for hugetlb usage. People would also like to look at memory.limit_in_bytes to limit total usage. (inclusive of hugetlb).quoted
- code: seperating hugetlb bits out from memcg bits to avoid growing mm/memcontrol.c beyond its current 5650 lines, andI can definitely look at spliting mm/memcontrol.cquoted
- performance: not incurring any overhead of enabling memcg for per- page tracking that is unnecessary if users only want to limit hugetlb pages.
Since Andrew didn't sent the patchset to Linus because of this discussion, I looked at reworking the patchset as a seperate controller. The patchset I sent here http://thread.gmane.org/gmane.linux.kernel.mm/79230 have seen minimal testing. I also folded the fixup patches Andrew had in -mm to original patchset. Let me know if the changes looks good. -aneesh -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>