Skip to content

Resource limits

The Linux kernel has protection mechanisms that prevent processes from taking up too much memory. Since BPF maps can take up a lot of space, they are also limited via these mechanisms.

Rlimit

rlimit or "resource limit" is a system to track and limit the amount of certain resources you are allowed to use. One of the things it limits is the amount of "locked memory" https://man7.org/linux/man-pages/man2/getrlimit.2.html

Until kernel version v5.11 this mechanism was used to track and limit the memory usage of BPF maps which count towards the locked memory limit, so you commonly would have to increase or disable this rlimit which requires an additional capability CAP_SYS_RESOURCE.

cGroup memory limit

In the v5.11 kernel update, this patch set switched the memory accounting and limiting from rlimit to cGroups. This means that all memory used adds to the "memory used" figure of the cGroup of which the process that creates it is a part. This eliminates the need to grant loaders CAP_SYS_RESOURCE capability. If resource limits need to be raised, it should be done so with the memory.max setting on the cGroup.

Note

Kernel memory accounting and limiting per cGroup can be disabled by disabling the MEMCG_KMEM kconfig during kernel compilation which is set to y by default.

Note

v6.3 adds a new kernel parameter cgroup.memory=nobpf which disables memory accounting and limiting for BPF as well.