Re: [PATCH v3 2/2] memcg: avoid THP split in task migration

From: Daisuke Nishimura
Date: Fri Mar 09 2012 - 01:04:28 EST


On Fri, 9 Mar 2012 12:24:48 +0900
KAMEZAWA Hiroyuki <kamezawa.hiroyu@xxxxxxxxxxxxxx> wrote:

> On Thu, 8 Mar 2012 18:33:14 -0800 (PST)
> Hugh Dickins <hughd@xxxxxxxxxx> wrote:
>
> > On Fri, 9 Mar 2012, KAMEZAWA Hiroyuki wrote:
> > > > +
> > > > + page = pmd_page(pmd);
> > > > + VM_BUG_ON(!page || !PageHead(page));
> > > > + if (!move_anon() || page_mapcount(page) != 1)
> > > > + return 0;
> > >
> > > Could you add this ?
> > > ==
> > > static bool move_check_shared_map(struct page *page)
> > > {
> > > /*
> > > * Handling of shared pages between processes is a big trouble in memcg.
> > > * Now, we never move shared-mapped pages between memcg at 'task' moving because
> > > * we have no hint which task the page is really belongs to. For example,
> > > * When a task does "fork()-> move to the child other group -> exec()", the charges
> > > * should be stay in the original cgroup.
> > > * So, check mapcount to determine we can move or not.
> > > */
> > > return page_mapcount(page) != 1;
> > > }
> >
> > That's a helpful elucidation, thank you. However...
> >
> > That is not how it has actually been behaving for the last 18 months
> > (because of the "> 2" bug), so in practice you are asking for a change
> > in behaviour there.
> >
> Yes.
>
>
> > And it's not how it has been and continues to behave with file pages.
> >
> It's ok to add somethink like..
>
> if (PageAnon(page) && !move_anon())
> return false;
> ...
>
> > Isn't getting that behaviour in fork-move-exec just a good reason not
> > to set move_charge_at_immigrate?
> >
> Hmm. Maybe.
>
> > I think there are other scenarios where you do want all the pages to
> > move if move_charge_at_immigrate: and that's certainly easier to
> > describe and to understand and to code.
> >
> > But if you do insist on not moving the shared, then it needs to involve
> > something like mem_cgroup_count_swap_user() on PageSwapCache pages,
> > rather than just the bare page_mapcount().
> >
>
> This 'moving swap account' was a requirement from a user (NEC?).
> But no user doesn't say 'I want to move shared pages between cgroups at task
> move !' and I don't like to move shared objects.
>
> > I'd rather delete than add code here!
> >
>
> As a user, for Fujitsu, I believe it's insane to move task between cgroups.
> So, I have no benefit from this code, at all.
> Ok, maybe I'm not a stakeholder,here.
>
I agree that moving tasks between cgroup is not a sane operation,
users won't do it so frequently, but I cannot prevent that.
That's why I implemented this feature.

> If users say all shared pages should be moved, ok, let's move.
> But change of behavior should be documented and implemented in an independet
> patch. CC'ed Nishimura-san, he implemetned this, a real user.
>
To be honest, shared anon is not my concern. My concern is
shared memory(that's why, mapcount is not checked as for file pages.
I assume all processes sharing the same shared memory will be moved together).
So, it's all right for me to change the behavior for shared anon(or leave
it as it is).


Thanks,
Daisuke Nishimura.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/