Skip to content
  • Quentin Monnet's avatar
    tools: bpftool: adjust rlimit RLIMIT_MEMLOCK when loading programs, maps · 8302b9bd
    Quentin Monnet authored
    
    
    The limit for memory locked in the kernel by a process is usually set to
    64 kbytes by default. This can be an issue when creating large BPF maps
    and/or loading many programs. A workaround is to raise this limit for
    the current process before trying to create a new BPF map. Changing the
    hard limit requires the CAP_SYS_RESOURCE and can usually only be done by
    root user (for non-root users, a call to setrlimit fails (and sets
    errno) and the program simply goes on with its rlimit unchanged).
    
    There is no API to get the current amount of memory locked for a user,
    therefore we cannot raise the limit only when required. One solution,
    used by bcc, is to try to create the map, and on getting a EPERM error,
    raising the limit to infinity before giving another try. Another
    approach, used in iproute2, is to raise the limit in all cases, before
    trying to create the map.
    
    Here we do the same as in iproute2: the rlimit is raised to infinity
    before trying to load programs or to create maps with bpftool.
    
    Signed-off-by: default avatarQuentin Monnet <quentin.monnet@netronome.com>
    Reviewed-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
    Acked-by: default avatarMartin KaFai Lau <kafai@fb.com>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    8302b9bd