On Tue 19-05-15 14:13:21, Michal Hocko wrote: > On Mon 18-05-15 15:49:51, Tejun Heo wrote: > > If move_charge flag is set, memcg tries to move memory charges to the > > destnation css. The current implementation migrates memory whenever > > any thread of a process is migrated making the behavior somewhat > > arbitrary. > > This is not true. We have: > mm = get_task_mm(p); > if (!mm) > return 0; > /* We move charges only when we move a owner of the mm */ > if (mm->owner == p) { > > So we are ignoring threads which are not owner of the mm struct and that > should be the thread group leader AFAICS. > > mm_update_next_owner is rather complex (maybe too much and it would > deserve some attention) so there might really be some corner cases but > the whole memcg code relies on mm->owner rather than thread group leader > so I would keep the same logic here. > > > Let's tie memory operations to the threadgroup leader so > > that memory is migrated only when the leader is migrated. > > This would lead to another strange behavior when the group leader is not > owner (if that is possible at all) and the memory wouldn't get migrated > at all. > > I am trying to wrap my head around mm_update_next_owner and maybe we can > change it to use the thread group leader but this needs more thinking... OK, I guess I see the reason now. CLONE_VM doesn't imply CLONE_THREAD so we can have a separate task (with it's own group leader) which handles its own signals while it still shares the address space. So we cannot really use the group leader here. -- Michal Hocko SUSE Labs -- 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>