Re: [PATCH v2 0/4] memcg: Low-limit reclaim

Michal Hocko
2014-05-02T12:03:11Z

On Wed 30-04-14 14:52:38, Andrew Morton wrote:
> On Mon, 28 Apr 2014 14:26:41 +0200 Michal Hocko <mhocko@suse.cz> wrote:
>
> > Hi,
> > previous discussions have shown that soft limits cannot be reformed
> > (http://lwn.net/Articles/555249/). This series introduces an alternative
> > approach for protecting memory allocated to processes executing within
> > a memory cgroup controller. It is based on a new tunable that was
> > discussed with Johannes and Tejun held during the kernel summit 2013 and
> > at LSF 2014.
> >
> > This patchset introduces such low limit that is functionally similar
> > to a minimum guarantee. Memcgs which are under their lowlimit are not
> > considered eligible for the reclaim (both global and hardlimit) unless
> > all groups under the reclaimed hierarchy are below the low limit when
> > all of them are considered eligible.
>
> Permitting containers to avoid global reclaim sounds rather worrisome.
>
> Fairness: won't it permit processes to completely protect their memory
> while everything else in the system is getting utterly pounded? We
> need to consider global-vs-memcg fairness as well as memcg-vs-memgc.
>
> Security: can this feature be used to DoS the machine? Set up enough
> hierarchies which are below their low limit and we risk memory
> exhaustion and swap-thrashing and oom-killings for other processes.

Johannes has already pointed out that setting the low limit is really
supposed to be a privileged operation. And, in principle, this is not any
different from any other guarantee.

> All of that being said, your statement doesn't appear to be true ;)

"
Memcgs which are under their lowlimit are ignored during the reclaim
(both global and hardlimit) unless all groups under the reclaimed
hierarchy are below the low limit. Low limit will be ignored in this
case for all groups in the hierarchy.
"

Better?

> > +static void shrink_zone(struct zone *zone, struct scan_control *sc)
> > +{
> > + if (!__shrink_zone(zone, sc, true)) {
> > + /*
> > + * First round of reclaim didn't find anything to reclaim
> > + * because of low limit protection so try again and ignore
> > + * the low limit this time.
> > + */
> > + __shrink_zone(zone, sc, false);
> > + }
> > }
> `

--
Michal Hocko
SUSE Labs