From: Roman Gushchin <guro@fb.com>
To: Stanislav Fomichev <sdf@fomichev.me>
Cc: "bpf@vger.kernel.org" <bpf@vger.kernel.org>,
Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
Tejun Heo <tj@kernel.org>, Kernel Team <Kernel-team@fb.com>,
"cgroups@vger.kernel.org" <cgroups@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH bpf-next 4/4] selftests/bpf: add auto-detach test
Date: Wed, 22 May 2019 23:19:59 +0000 [thread overview]
Message-ID: <20190522231954.GB20167@tower.DHCP.thefacebook.com> (raw)
In-Reply-To: <20190522222438.GB3032@mini-arch>
On Wed, May 22, 2019 at 03:24:38PM -0700, Stanislav Fomichev wrote:
> On 05/22, Roman Gushchin wrote:
> > Add a kselftest to cover bpf auto-detachment functionality.
> > The test creates a cgroup, associates some resources with it,
> > attaches a couple of bpf programs and deletes the cgroup.
> >
> > Then it checks that bpf programs are going away in 5 seconds.
> >
> > Expected output:
> > $ ./test_cgroup_attach
> > #override:PASS
> > #multi:PASS
> > #autodetach:PASS
> > test_cgroup_attach:PASS
> >
> > On a kernel without auto-detaching:
> > $ ./test_cgroup_attach
> > #override:PASS
> > #multi:PASS
> > #autodetach:FAIL
> > test_cgroup_attach:FAIL
> >
> > Signed-off-by: Roman Gushchin <guro@fb.com>
> > ---
> > .../selftests/bpf/test_cgroup_attach.c | 108 +++++++++++++++++-
> > 1 file changed, 107 insertions(+), 1 deletion(-)
> >
> > diff --git a/tools/testing/selftests/bpf/test_cgroup_attach.c b/tools/testing/selftests/bpf/test_cgroup_attach.c
> > index 93d4fe295e7d..36441fd0f392 100644
> > --- a/tools/testing/selftests/bpf/test_cgroup_attach.c
> > +++ b/tools/testing/selftests/bpf/test_cgroup_attach.c
> > @@ -456,9 +456,115 @@ static int test_multiprog(void)
> > return rc;
> > }
> >
> > +static int test_autodetach(void)
> > +{
> > + __u32 prog_cnt = 4, attach_flags;
> > + int allow_prog[2] = {0};
> > + __u32 prog_ids[2] = {0};
> > + int cg = 0, i, rc = -1;
> > + void *ptr = NULL;
> > + int attempts;
> > +
> > +
> > + for (i = 0; i < ARRAY_SIZE(allow_prog); i++) {
> > + allow_prog[i] = prog_load_cnt(1, 1 << i);
> > + if (!allow_prog[i])
> > + goto err;
> > + }
> > +
> > + if (setup_cgroup_environment())
> > + goto err;
> > +
> > + /* create a cgroup, attach two programs and remember their ids */
> > + cg = create_and_get_cgroup("/cg_autodetach");
> > + if (cg < 0)
> > + goto err;
> > +
> > + if (join_cgroup("/cg_autodetach"))
> > + goto err;
> > +
> > + for (i = 0; i < ARRAY_SIZE(allow_prog); i++) {
> > + if (bpf_prog_attach(allow_prog[i], cg, BPF_CGROUP_INET_EGRESS,
> > + BPF_F_ALLOW_MULTI)) {
> > + log_err("Attaching prog[%d] to cg:egress", i);
> > + goto err;
> > + }
> > + }
> > +
> > + /* make sure that programs are attached and run some traffic */
> > + assert(bpf_prog_query(cg, BPF_CGROUP_INET_EGRESS, 0, &attach_flags,
> > + prog_ids, &prog_cnt) == 0);
> > + assert(system(PING_CMD) == 0);
> > +
> > + /* allocate some memory (4Mb) to pin the original cgroup */
> > + ptr = malloc(4 * (1 << 20));
> > + if (!ptr)
> > + goto err;
> > +
> > + /* close programs and cgroup fd */
> > + for (i = 0; i < ARRAY_SIZE(allow_prog); i++) {
> > + close(allow_prog[i]);
> > + allow_prog[i] = 0;
> > + }
> > +
> > + close(cg);
> > + cg = 0;
> > +
> > + /* leave the cgroup and remove it. don't detach programs */
> > + cleanup_cgroup_environment();
> > +
>
> [..]
> > + /* programs must stay pinned by the allocated memory */
> > + for (i = 0; i < ARRAY_SIZE(prog_ids); i++) {
> > + int fd = bpf_prog_get_fd_by_id(prog_ids[i]);
> > +
> > + if (fd < 0)
> > + goto err;
> > + close(fd);
> > + }
> This looks a bit flaky. It's essentially the same check you later
> do in a for loop. I guess there is a chance that async auto-detach
> might happen right after cleanup_cgroup_environment and before this for loop?
Ah, this section remained from an earlier version which had another step.
I'll remove it completely, it's totally useless now.
Thanks!
prev parent reply other threads:[~2019-05-22 23:20 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-22 21:29 [PATCH bpf-next 0/4] cgroup bpf auto-detachment Roman Gushchin
2019-05-22 21:29 ` [PATCH bpf-next 1/4] bpf: decouple the lifetime of cgroup_bpf from cgroup itself Roman Gushchin
2019-05-22 21:29 ` [PATCH bpf-next 2/4] selftests/bpf: convert test_cgrp2_attach2 example into kselftest Roman Gushchin
2019-05-22 21:29 ` [PATCH bpf-next 3/4] selftests/bpf: enable all available cgroup v2 controllers Roman Gushchin
2019-05-22 22:18 ` Stanislav Fomichev
2019-05-22 23:16 ` Roman Gushchin
2019-05-22 21:29 ` [PATCH bpf-next 4/4] selftests/bpf: add auto-detach test Roman Gushchin
2019-05-22 22:24 ` Stanislav Fomichev
2019-05-22 23:19 ` Roman Gushchin [this message]
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=20190522231954.GB20167@tower.DHCP.thefacebook.com \
--to=guro@fb.com \
--cc=Kernel-team@fb.com \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=cgroups@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=sdf@fomichev.me \
--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
all inboxes | Powered by JetHome®