public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "Michael Kerrisk (man-pages)" <mtk.manpages@gmail.com>
To: Tejun Heo <tj@kernel.org>
Cc: mtk.manpages@gmail.com, lkml <linux-kernel@vger.kernel.org>,
	Lennart Poettering <lennart@poettering.net>
Subject: Re: Writing "+pids" to cgroup.subtree_control flie yields EINVAL
Date: Tue, 5 Dec 2017 08:45:19 +0100	[thread overview]
Message-ID: <8fa060d2-07c7-7306-3d93-781c919f24eb@gmail.com> (raw)
In-Reply-To: <20171204214710.GM2421075@devbig577.frc2.facebook.com>

[dropping Lennart into CC]

Hello Tejun,

On 12/04/2017 10:47 PM, Tejun Heo wrote:
> Hello, Michael.
> 
> On Mon, Dec 04, 2017 at 10:35:13PM +0100, Michael Kerrisk (man-pages) wrote:
>> I was trying to do some simple testing ot the CPU controller
>> that is merged into 4.15, and ran immediately into some confusion.
>> In the root cgroup on a freshly booted 4.150-rc1, I try the following:
>>
>> # pwd
>> /sys/fs/cgroup/unified
>> # echo '+cpu' > cgroup.subtree_control 
>> sh: echo: write error: Invalid argument
>>
>> What am I missing> I presume I'm missing something obvious, although
>> nothing jumped out at me as I read the cgroups-v2.txt file.
> 
> Checking whether I messed up something really basic... hmmm doesn't
> seem that way.  What do /sys/fs/cgroup/unified/cgroup.controllers and
> /proc/cgroups say?

Oh -- they're all sensible:

In the root cgroup:

# cat cgroup.controllers 
cpu io memory pids

$ cat /proc/cgroups 
#subsys_name	hierarchy	num_cgroups	enabled
cpuset	0	142	1
cpu	0	142	1
cpuacct	0	142	1
blkio	0	142	1
memory	0	142	1
devices	0	142	1
freezer	0	142	1
net_cls	0	142	1
perf_event	0	142	1
net_prio	0	142	1
hugetlb	0	142	1
pids	0	142	1

But, I through some trial and error and printk() I worked out

a) If I first move all tasks to the root cgroup, then I can
write '+cpu' to the cgroup.subtree_control file in the root
cgroup.

b) The reason for my initial problems was this test in
the kernel in cpu_cgroup_can_attach():

#ifdef CONFIG_RT_GROUP_SCHED
                if (!sched_rt_can_attach(css_tg(css), task))
                        return -EINVAL;
#else
                /* We don't support RT-tasks being in separate groups */
                if (task->sched_class != &fair_sched_class)
                        return -EINVAL;
#endif

I don't have CONFIG_RT_GROUP_SCHED, and the second 'if' was yielding
false because of some SCHED_RR processes that are in some of the nonroot
cgroups created by systemd, namely:

# ps ax -L -o 'pid tid cls rtprio comm'|grep RR
  685   723  RR     99 rtkit-daemon
  972   979  RR      5 alsa-sink-ALC26
  972   982  RR      5 alsa-source-ALC
 1594  1597  RR      5 alsa-sink-ALC26
 1594  1600  RR      5 alsa-source-ALC

So, one solution is to move those processes to the root cgroup,
and then it's possible to write '+pids' to cgroup.subtree_control.

Is enabling CONFIG_RT_GROUP_SCHED also a solution? (I have
not had a chance to test that yet.)

Anyway, it seems like this should be documented somewhere in the
kernel Documentation files, since it may be that others will run
into this as well. I'm not quite sure what should be added to the
documentation. Do you have some idea?

Thanks,

Michael

-- 
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Linux/UNIX System Programming Training: http://man7.org/training/

  reply	other threads:[~2017-12-05  7:45 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-04 21:35 Writing "+pids" to cgroup.subtree_control flie yields EINVAL Michael Kerrisk (man-pages)
2017-12-04 21:47 ` Tejun Heo
2017-12-05  7:45   ` Michael Kerrisk (man-pages) [this message]
2017-12-05 16:00     ` Tejun Heo
2017-12-05 16:44       ` Michael Kerrisk (man-pages)
2017-12-05 17:13         ` [PATCH cgroup/for-4.15-fixes] cgroup: add warning about RT not being supported on cgroup2 Tejun Heo
2017-12-05 18:24           ` Michael Kerrisk (man-pages)
2017-12-05 18:29             ` [PATCH v2 " Tejun Heo
2017-12-05 18:53               ` Michael Kerrisk (man-pages)
2017-12-05 19:48                 ` Tejun Heo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8fa060d2-07c7-7306-3d93-781c919f24eb@gmail.com \
    --to=mtk.manpages@gmail.com \
    --cc=lennart@poettering.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tj@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox