tools/bpf: adjust rlimit RLIMIT_MEMLOCK for test_dev_cgroup
Subsystems (5)
PATCH 1/1 tools/bpf: adjust rlimit RLIMIT_MEMLOCK for test_dev_cgroup
The default rlimit RLIMIT_MEMLOCK is 64KB. In certain cases, e.g. in a test machine mimicking our production system, this test may fail due to unable to charge the required memory for prog load:
$ ./test_dev_cgroup libbpf: load bpf program failed: Operation not permitted libbpf: failed to load program 'cgroup/dev' libbpf: failed to load object './dev_cgroup.o' Failed to load DEV_CGROUP program ...
Changing the default rlimit RLIMIT_MEMLOCK to unlimited makes the test pass.
This patch also fixed a problem where when bpf_prog_load fails, cleanup_cgroup_environment() should not be called since setup_cgroup_environment() has not been invoked. Otherwise,
the following confusing message will appear:
...
(/home/yhs/local/linux/tools/testing/selftests/bpf/cgroup_helpers.c:95:
errno: No such file or directory) Opening Cgroup Procs: /mnt/cgroup.procs
...
--- tools/testing/selftests/bpf/test_dev_cgroup.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
tools/testing/selftests/bpf/test_dev_cgroup.c +8 -1
@@ -10,6 +10,8 @@#include <string.h> #include <errno.h> #include <assert.h> +#include <sys/time.h> +#include <sys/resource.h> #include <linux/bpf.h> #include <bpf/bpf.h>
@@ -23,15 +25,19 @@int main (int argc,char **argv) { +struct rlimit limit = {RLIM_INFINITY ,RLIM_INFINITY };struct bpf_object *obj;int error =EXIT_FAILURE ;int prog_fd, cgroup_fd;__u32 prog_cnt; +if (setrlimit (RLIMIT_MEMLOCK , &limit) <0 ) +perror ("Unable to lift memlock rlimit" ); +if (bpf_prog_load (DEV_CGROUP_PROG ,BPF_PROG_TYPE_CGROUP_DEVICE , &obj, &prog_fd)) {printf ("Failed to load DEV_CGROUP program\n" ); - goto err; + goto out; }if (setup_cgroup_environment ()) {
@@ -89,5 +95,6 @@ int main(int argc, char **argv) err:cleanup_cgroup_environment (); +out:return error; }
Signature · 1 line
2.9.5
Alexei Starovoitov
AppliedQuoted 23 lines · Yonghong Song
The default rlimit
RLIMIT_MEMLOCKis 64KB. In certain cases, e.g. in a test machine mimicking our production system, this test may fail due to unable to charge the required memory for prog load:$ ./test_dev_cgroup libbpf: load bpf program failed: Operation not permitted libbpf: failed to load program 'cgroup/dev' libbpf: failed to load object './dev_cgroup.o' Failed to load DEV_CGROUP program ...Changing the default rlimit
RLIMIT_MEMLOCKto unlimited makes the test pass.This patch also fixed a problem where when
bpf_prog_loadfails,cleanup_cgroup_environment()should not be called sincesetup_cgroup_environment()has not been invoked. Otherwise,
the following confusing message will appear:
...
(/home/yhs/local/linux/tools/testing/selftests/bpf/cgroup_helpers.c:95:
errno: No such file or directory) Opening Cgroup Procs:/mnt/cgroup.procs
...
Quoted 1 line
Signed-off-by Yonghong Song <[email protected]>
Applied, Thanks Yonghong.