Re: [PATCH v2 2/5] memcg: provide root figures from system totals

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



(2013/03/06 17:30), Glauber Costa wrote:
> On 03/06/2013 04:27 AM, Kamezawa Hiroyuki wrote:
>> (2013/03/05 22:10), Glauber Costa wrote:
>>> For the root memcg, there is no need to rely on the res_counters if hierarchy
>>> is enabled The sum of all mem cgroups plus the tasks in root itself, is
>>> necessarily the amount of memory used for the whole system. Since those figures
>>> are already kept somewhere anyway, we can just return them here, without too
>>> much hassle.
>>>
>>> Limit and soft limit can't be set for the root cgroup, so they are left at
>>> RESOURCE_MAX. Failcnt is left at 0, because its actual meaning is how many
>>> times we failed allocations due to the limit being hit. We will fail
>>> allocations in the root cgroup, but the limit will never the reason.
>>>
>>> Signed-off-by: Glauber Costa <glommer@xxxxxxxxxxxxx>
>>> CC: Michal Hocko <mhocko@xxxxxxx>
>>> CC: Kamezawa Hiroyuki <kamezawa.hiroyu@xxxxxxxxxxxxxx>
>>> CC: Johannes Weiner <hannes@xxxxxxxxxxx>
>>> CC: Mel Gorman <mgorman@xxxxxxx>
>>> CC: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
>>
>> I think this patch's calculation is wrong.
>>
> where exactly ?
> 
>>> ---
>>>    mm/memcontrol.c | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>>>    1 file changed, 64 insertions(+)
>>>
>>> diff --git a/mm/memcontrol.c b/mm/memcontrol.c
>>> index b8b363f..bfbf1c2 100644
>>> --- a/mm/memcontrol.c
>>> +++ b/mm/memcontrol.c
>>> @@ -4996,6 +4996,56 @@ static inline u64 mem_cgroup_usage(struct mem_cgroup *memcg, bool swap)
>>>    	return val << PAGE_SHIFT;
>>>    }
>>>    
>>> +static u64 memcg_read_root_rss(void)
>>> +{
>>> +	struct task_struct *p;
>>> +
>>> +	u64 rss = 0;
>>> +	read_lock(&tasklist_lock);
>>> +	for_each_process(p) {
>>> +		if (!p->mm)
>>> +			continue;
>>> +		task_lock(p);
>>> +		rss += get_mm_rss(p->mm);
>>> +		task_unlock(p);
>>> +	}
>>> +	read_unlock(&tasklist_lock);
>>> +	return rss;
>>> +}
>>
>> I think you can use rcu_read_lock() instead of tasklist_lock.
>> Isn't it enough to use NR_ANON_LRU rather than this ?
> 
> Is it really just ANON_LRU ? get_mm_rss also include filepages, which
> are not in this list.

And mlocked ones counted as Unevictable
> 
> Maybe if we sum up *all* LRUs we would get the right result ?
> 
_MEM...i.e. ...usage_in_bytes is the sum of all LRUs.

> About the tasklist lock, if I get values from the LRUs, maybe. Otherwise
> it is still necessary, no ?

tasklist is RCU list and we don't need locking at reading values, I think.

Thanks,
-Kame




--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@xxxxxxxxx.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>


[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]