Hello, Michal. On Tue, May 19, 2015 at 02:13:21PM +0200, Michal Hocko wrote: > 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) { Ah, missed that part. > 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. Hmmm... is it guaranteed that if a threadgroup owns a mm, the mm's owner would be the threadgroup leader? If not, the current code is broken too as it always takes the first member which is the threadgroup leader and if that's not the mm owner we may skip immigration while migrating the whole process. I suppose the right thing to do here is iterating the taskset and find the mm owner? Thanks. -- tejun -- 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>