From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751387AbdGQOO0 (ORCPT ); Mon, 17 Jul 2017 10:14:26 -0400 Received: from bombadil.infradead.org ([65.50.211.133]:42609 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751286AbdGQOOY (ORCPT ); Mon, 17 Jul 2017 10:14:24 -0400 Date: Mon, 17 Jul 2017 16:14:09 +0200 From: Peter Zijlstra To: Tejun Heo Cc: lizefan@huawei.com, hannes@cmpxchg.org, mingo@redhat.com, longman@redhat.com, cgroups@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@fb.com, pjt@google.com, luto@amacapital.net, efault@gmx.de, torvalds@linux-foundation.org, guro@fb.com Subject: Re: [PATCH 5/6] cgroup: implement cgroup v2 thread support Message-ID: <20170717141409.sqafufjupsiffnri@hirez.programming.kicks-ass.net> References: <20170717020721.3612468-1-tj@kernel.org> <20170717020721.3612468-6-tj@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170717020721.3612468-6-tj@kernel.org> User-Agent: NeoMutt/20170609 (1.8.3) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sun, Jul 16, 2017 at 10:07:20PM -0400, Tejun Heo wrote: > > v4: - Updated to marking each cgroup threaded as suggested by PeterZ. > > +On creation, a cgroup is always a domain cgroup and can be made > +threaded by writing "threaded" to the "cgroup.type" file. The > +operation is single direction:: > + > + # echo threaded > cgroup.type > + > +Once threaded, the cgroup can't be made a domain again. To enable the > +thread mode, the following conditions must be met. > + > +- As the cgroup will join the parent's resource domain. The parent > + must either be a valid (threaded) domain or a threaded cgroup. > + > +- The cgroup must be empty. No enabled controllers, child cgroups or > + processes. > + > +Topology-wise, a cgroup can be in an invalid state. Please consider > +the following toplogy:: > + > + A (threaded domain) - B (threaded) - C (domain, just created) > + > +C is created as a domain but isn't connected to a parent which can > +host child domains. C can't be used until it is turned into a > +threaded cgroup. "cgroup.type" file will report "domain (invalid)" in > +these cases. Operations which fail due to invalid topology use > +EOPNOTSUPP as the errno. > + > +A domain cgroup is turned into a threaded domain when one of its child > +cgroup becomes threaded or threaded controllers are enabled in the > +"cgroup.subtree_control" file while there are processes in the cgroup. > +A threaded domain reverts to a normal domain when the conditions > +clear. AFAICT this is not in fact what I suggested... :/ My proposal did not have that invalid state. It would simply refuse to change the type from thread to domain in the case where the parent is not a domain. Also, my proposal maintained the normal property inheritance rules. A child cgroup's creation 'type' would be that of its parent and not always be 'domain'. Let me read more (and more careful) to see if there's other things.