Re: [PATCH 3/5] mm: memcg detect no memcgs above softlimit under zone reclaim.

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

 



On Sun, Jun 17, 2012 at 7:54 PM, Kamezawa Hiroyuki
<kamezawa.hiroyu@xxxxxxxxxxxxxx> wrote:
> (2012/06/07 3:23), Ying Han wrote:
>> In memcg kernel, cgroup under its softlimit is not targeted under global
>> reclaim. It could be possible that all memcgs are under their softlimit for
>> a particular zone. If that is the case, the current implementation will
>> burn extra cpu cycles without making forward progress.
>>
>> The idea is from LSF discussion where we detect it after the first round of
>> scanning and restart the reclaim by not looking at softlimit at all. This
>> allows us to make forward progress on shrink_zone().
>>
>> Signed-off-by: Ying Han<yinghan@xxxxxxxxxx>
>
> Hm, how about adding sc->ignore_softlimit and preserve the result among priority loops ?
>
> Is it better to check 'ignore_softlimit' at every priority updates ?

The softlimit and usage_in_bytes could change on each memcg, and we
might have to check the ignore_softlimit on each priority loop.

--Ying

>
> Thanks,
> -Kame
>
>> ---
>>   mm/vmscan.c |   18 ++++++++++++++++--
>>   1 files changed, 16 insertions(+), 2 deletions(-)
>>
>> diff --git a/mm/vmscan.c b/mm/vmscan.c
>> index 0560783..5d036f5 100644
>> --- a/mm/vmscan.c
>> +++ b/mm/vmscan.c
>> @@ -2142,6 +2142,10 @@ static void shrink_zone(int priority, struct zone *zone,
>>               .priority = priority,
>>       };
>>       struct mem_cgroup *memcg;
>> +     bool over_softlimit, ignore_softlimit = false;
>> +
>> +restart:
>> +     over_softlimit = false;
>>
>>       memcg = mem_cgroup_iter(root, NULL,&reclaim);
>>       do {
>> @@ -2163,9 +2167,14 @@ static void shrink_zone(int priority, struct zone *zone,
>>                * we have to reclaim under softlimit instead of burning more
>>                * cpu cycles.
>>                */
>> -             if (!global_reclaim(sc) || priority<  DEF_PRIORITY - 2 ||
>> -                             should_reclaim_mem_cgroup(memcg))
>> +             if (ignore_softlimit || !global_reclaim(sc) ||
>> +                             priority<  DEF_PRIORITY - 2 ||
>> +                             should_reclaim_mem_cgroup(memcg)) {
>>                       shrink_mem_cgroup_zone(priority,&mz, sc);
>> +
>> +                     over_softlimit = true;
>> +             }
>> +
>>               /*
>>                * Limit reclaim has historically picked one memcg and
>>                * scanned it with decreasing priority levels until
>> @@ -2182,6 +2191,11 @@ static void shrink_zone(int priority, struct zone *zone,
>>               }
>>               memcg = mem_cgroup_iter(root, memcg,&reclaim);
>>       } while (memcg);
>> +
>> +     if (!over_softlimit) {
>> +             ignore_softlimit = true;
>> +             goto restart;
>> +     }
>>   }
>>
>>   /* Returns true if compaction should go ahead for a high-order request */
>
>

--
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


[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]