From: Ben Greear <greearb@candelatech.com>
To: David Ahern <dsahern@gmail.com>, netdev <netdev@vger.kernel.org>
Subject: Re: VRF and/or cgroups problem on Fedora-30, 5.2.21+ kernel
Date: Tue, 26 Nov 2019 09:36:57 -0800 [thread overview]
Message-ID: <5DDD62B9.3070909@candelatech.com> (raw)
In-Reply-To: <b64cb1b5-f9be-27ab-76e8-4fe84b947114@gmail.com>
On 11/25/2019 12:53 PM, David Ahern wrote:
> On 11/25/19 10:35 AM, Ben Greear wrote:
>>>> And surely 'ip' could output a better error than just 'permission
>>>> denied' for
>>>> this error case? Or even something that would show up in dmesg to give
>>>> a clue?
>>>
>>> That error comes from the bpf syscall:
>>>
>>> bpf(BPF_PROG_LOAD, {prog_type=BPF_PROG_TYPE_CGROUP_SOCK, insn_cnt=6,
>>> insns=0x7ffc8e5d1e00, license="GPL", log_level=1, log_size=262144,
>>> log_buf="", kern_version=KERNEL_VERSION(0, 0, 0), prog_flags=0,
>>> prog_name="", prog_ifindex=0,
>>> expected_attach_type=BPF_CGROUP_INET_INGRESS, prog_btf_fd=0,
>>> func_info_rec_size=0, func_info=NULL, func_info_cnt=0,
>>> line_info_rec_size=0, line_info=NULL, line_info_cnt=0}, 112) = -1 EPERM
>>> (Operation not permitted)
>>
>> So, we can change iproute/lib/bpf.c to print a suggestion to increase
>> locked memory
>> if this returns EPERM?
>>
>
> looks like SYS_ADMIN and locked memory are the -EPERM failures.
>
> I do not see any API that returns user->locked_vm, only per-task
> locked_vm. Knowing that number would help a lot in understanding proper
> system settings.
>
> Running 'perf record' while trying to do 'ip vrf exec' is an easy way to
> hit the locked memory exceeded error. We could add a hint to iproute2.
> Something like:
>
> diff --git a/ip/ipvrf.c b/ip/ipvrf.c
> index b9a43675cbd6..15637924f31a 100644
> --- a/ip/ipvrf.c
> +++ b/ip/ipvrf.c
> @@ -281,9 +281,16 @@ static int vrf_configure_cgroup(const char *path,
> int ifindex)
> fprintf(stderr, "Failed to load BPF prog: '%s'\n",
> strerror(errno));
>
> - if (errno != EPERM) {
> + if (errno == EPERM) {
> + if (geteuid() != 0)
> + fprintf(stderr,
> + "Hint: Must run as root to set
> VRF.\n");
> + else
> + fprintf(stderr,
> + "Hint: Most likely locked memory
> threshold exceeded. Increase 'ulimit -l'\n");
I think I would suggest 'ulimit -l 1024'. Advanced users can try different
values if they care or have super tight memory constraints, but most users could
probably get benefit from the suggestion.
Thanks,
Ben
> + } else {
> fprintf(stderr,
> - "Kernel compiled with CGROUP_BPF
> enabled?\n");
> + "Hint: Kernel compiled with CGROUP_BPF
> enabled?\n");
> }
> goto out;
> }
>
--
Ben Greear <greearb@candelatech.com>
Candela Technologies Inc http://www.candelatech.com
prev parent reply other threads:[~2019-11-26 17:37 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-11-23 0:03 VRF and/or cgroups problem on Fedora-30, 5.2.21+ kernel Ben Greear
2019-11-23 0:06 ` David Ahern
2019-11-23 0:14 ` Ben Greear
2019-11-23 0:17 ` David Ahern
2019-11-23 0:23 ` Ben Greear
2019-11-23 18:10 ` David Ahern
2019-11-25 17:35 ` Ben Greear
2019-11-25 20:53 ` David Ahern
2019-11-26 8:48 ` Toke Høiland-Jørgensen
2019-11-26 17:36 ` Ben Greear [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=5DDD62B9.3070909@candelatech.com \
--to=greearb@candelatech.com \
--cc=dsahern@gmail.com \
--cc=netdev@vger.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.