From: Richard Palethorpe <rpalethorpe@suse.de>
To: Li Wang <liwang@redhat.com>
Cc: LTP List <ltp@lists.linux.it>,
Luke Nowakowski-Krijger <luke.nowakowskikrijger@canonical.com>
Subject: Re: [LTP] [PATCH 1/4] controllers/memcg: update stress test to work under cgroup2
Date: Thu, 02 Dec 2021 09:23:27 +0000 [thread overview]
Message-ID: <87pmqfcp4j.fsf@suse.de> (raw)
In-Reply-To: <CAEemH2cZvK29mrN2xD_EOPx7w3UXFBHrWmAdg+rv5K2vcP3qNA@mail.gmail.com>
Hello Li and Luke
Li Wang <liwang@redhat.com> writes:
> On Thu, Dec 2, 2021 at 6:24 AM Luke Nowakowski-Krijger <luke.nowakowskikrijger@canonical.com> wrote:
>
> Hi Li,
>
> On Wed, Dec 1, 2021 at 1:13 AM Li Wang <liwang@redhat.com> wrote:
>
> Hi Luke,
>
> Thanks for looking into this.
>
> On Sat, Nov 27, 2021 at 8:05 AM Luke Nowakowski-Krijger <luke.nowakowskikrijger@canonical.com> wrote:
>
> Update tests to be able to work when memory controller is mounted under
> cgroup2 hierarchy.
>
> I'm thinking whether we could achieve these setup functions
> more generic in cgroup_lib.sh, which to avoid the redundancy
> behavior over and over again in each cgroup sub-test.
+1 this is very necessary IMO
>
> Yes I agree. As I was doing the same things a few times I was beginning to wonder if there was a better way. I would be willing to look further into
> expanding the cgroup_lib.sh and resubmitting my recent patches with
> those changes.
>
> Thanks a lot!
>
>
> About the compatibility of cgroup V1 and V2 in test, I'd suggest
> following what the LTP C library did in include/tst_cgroup.h.
> https://github.com/linux-test-project/ltp/blob/master/doc/c-test-api.txt#L2024
>
> The solution may be briefly as:
>
> 1. scan system mounted CGroup path, and judge the situation as one of below:
> * only CGroup V2 mounted
> * only CGroup V1 mounted
> * both CGroup V2 and V1 mounted
> * no CGroup mounted
> 2. make use of the system mounted CGroup V2 or TSKIP
> * goto step 5
> 3. make use of the system mounted CGroup V1
> * goto step 5
> 4. do mount Cgroup as what we needed (V1 or V2) in test
> * goto step 5
> 5. do cleanup
>
> Yes this would be the way to go through setting up a controller and checking everything.
> Going through the steps you mentioned for mounting a single controller and returning that path wouldn't be too hard but
> it seems to get more complicated when we want some guarantee of having multiple controllers in a hierarchy (if we even
> would want to support something like that, which for testing purposes wouldnt seem unheard of).
>
> Right, it is the complicated part and you can take a reference how
> the current C API handles it.
Actually we can use the C API. This would avoid a whole bunch of
issues. It requires creating a utility which we can use from shell
(e.g. tst_cgctl).
We *may* have to track state somehow. Either we could run the utility as
a daemon initially and communicate with a socket to execute commands. Or
we could save/serialise some state to environment/shell
variables. Alternatively we can probably rescan the system each
time. The only state really required is the test's PID which is needed
to find the correct CGroup in the LTP sub-hierarchy.
Still that is probably easier than dealing with all of the corner cases
twice.
>
> TBH, I even think to skip the handling on mixed mounting with V1
> and V2, that is too messy/overthinking and not suggested using way.
>
> We'd better face the future and ideally as myself hoping,
> V2 will replace V1 everywhere someday:).
There are still controllers/features that don't exist on V2. Meanwhile
there are features that only exist on V2. So if someone wants both, then
they have to mount both. Regardless, this was the default in systemd, so
we are stuck with it for about 20 years and can't ignore it ;-)
>
>
> Maybe something mimicking the tst_cgroup_require() from the C api would be useful here? I imagine this is where we would
> do the checking and mounting logic that you were describing. We would just also have to include checking if the controllers
> we are requiring can be mounted / already exist together.
>
> For example I am imaging something mimicking the C api something like:
> tst_cgroup_require "cpu"
> tst_cgroup_require "cpuset"
> root_mount_point =$(tst_cgroup_get_mountpoint)
>
> I prefer this one a bit, not only it's consistent with C API but it also
> can do CGroup mounting in tst_cgroup_require for a system without
> V1 nor V2 mounting. Then I'd suggest having tst_cgroup_cleanup to
> help umount that which makes things more clear to understand.
>
> Anyway, it depends on the details achieve, maybe there is a better
> solution we haven't found.
Yes, or if it is a utility then
$ test_cpu_cg_dir = $(tst_cgroup require cpu)
$ test_cpu_cg_dir = $(tst_cgroup require memory)
maybe with an option to pass the PID to indetify the test. I guess there
might be some existing env variable the shell API sets we could use as well.
$ tst_cgroup cleanup --pid $MAIN_PID
--
Thank you,
Richard.
--
Mailing list info: https://lists.linux.it/listinfo/ltp
next prev parent reply other threads:[~2021-12-02 9:50 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-27 0:04 [LTP] [PATCH 0/4] Update cgroup_fj and memcg controller tests to work under cgroup2 Luke Nowakowski-Krijger
2021-11-27 0:04 ` [LTP] [PATCH 1/4] controllers/memcg: update stress test " Luke Nowakowski-Krijger
2021-12-01 9:13 ` Li Wang
2021-12-01 22:17 ` Luke Nowakowski-Krijger
2021-12-02 7:46 ` Li Wang
2021-12-02 9:23 ` Richard Palethorpe [this message]
2021-12-02 19:28 ` Luke Nowakowski-Krijger
2021-12-03 10:25 ` Li Wang
2021-12-03 20:44 ` Luke Nowakowski-Krijger
2021-12-06 8:31 ` Richard Palethorpe
2021-12-09 21:42 ` Luke Nowakowski-Krijger
2021-12-10 10:40 ` Cyril Hrubis
2021-12-10 10:45 ` Cyril Hrubis
2021-12-13 8:50 ` Richard Palethorpe
2021-11-27 0:04 ` [LTP] [PATCH 2/4] controllers/memcg: Skip functional tests when mounted under cgroup2 hierarchy Luke Nowakowski-Krijger
2021-11-27 0:04 ` [LTP] [PATCH 3/4] controllers/cgroup_fj: Update cgroup_fj_common to work under cgroup2 Luke Nowakowski-Krijger
2021-11-27 0:04 ` [LTP] [PATCH 4/4] controllers/cgroup_fj: Update cgroup_fj_function " Luke Nowakowski-Krijger
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=87pmqfcp4j.fsf@suse.de \
--to=rpalethorpe@suse.de \
--cc=liwang@redhat.com \
--cc=ltp@lists.linux.it \
--cc=luke.nowakowskikrijger@canonical.com \
/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