首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bpf虚拟机和bpf映射的限制是什么?

bpf虚拟机和bpf映射的限制是什么?
EN

Stack Overflow用户
提问于 2020-01-17 11:43:57
回答 1查看 1.4K关注 0票数 2

我正在用ebpf+XDP做一些演示。

当我使用大内存映射时,例如:

代码语言:javascript
复制
BPF_HASH(cache, u64, u64, 10240000);
BPF_HASH(filter1, u32, u64, 10240000);
BPF_HASH(filter2, struct XXX, u16, 10240000);

当我运行这个演示时,运行一段时间后,程序会自动终止。

下面是说到的错误:

代码语言:javascript
复制
Out of memory: KIll process 1618 (sshd) score 0 or sacrifice child
Killed process 1618 (sshd) total-vm:625792kB, anon-rss:0kB, file-rss:4kB, shmem-rss:0kB

我不明白这个错误是什么意思。

这是系统限制、bpf vm限制还是map限制?

这是我运行“免费-g”时的结果。

代码语言:javascript
复制
              total        used        free      shared  buff/cache   available
Mem:              3           0           3           0           0           3
Swap:             3           0           3
EN

回答 1

Stack Overflow用户

发布于 2020-01-17 18:17:44

在创建BPF映射时,会在内核空间中为这些映射分配内存。显然,它们越大,需要的内存就越多。

虽然BPF实际上对映射的大小没有限制(除了传递给内核以提供映射大小的32位无符号整数的最大值),但内核本身由于底层硬件的原因而受到限制。如果内核完全耗尽内存,就会发生不好的事情。通常,它会挂起或崩溃。为了避免这种情况,当内存变得不足时,内存不足(OOM)杀手就会采取行动,并杀死一个进程,作为释放内存的尝试。

据我所知,这就是你的情况。限制不是来自BPF或BPF映射,而只是来自系统(内核)内存不足。当终止发生时,您可能可以使用dmesg在内核日志中获得更多信息(另请参阅how to read the logs)。

因此,正如您在标题中所说的那样,回答这个问题: BPF映射在大小上没有限制,除了我们可以传递给bpf()系统调用的最大值( uint_32,所以大约是4 4GB)。非根用户可能对他们能够锁定在内核中的空间量有额外的限制(根用户可以使用shell中的ulimit -l或C程序中的setrlimit()来消除这些限制)。BPF基础设施还存在其他“限制”(堆栈大小、尾调用次数等)但我不认为在这里列出所有这些内容会有很大帮助。您可以在Cilium guide中找到有关它们的更多信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59780895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档