gpt4 book ai didi

linux - 是 : How does BPF calculate number of CPU for PERCPU_ARRAY?

转载 作者:行者123 更新时间:2023-12-03 09:51:24 30 4
gpt4 key购买 nike

我遇到了一个有趣的问题,在一个有 2 个处理器的系统上创建的 PERCPU_ARRAY 创建了一个包含 2 个 per-CPU 元素的数组,而在另一个有 2 个处理器的系统上,创建了一个包含 128 个 per-CPU 元素的数组。后者出乎我的意料!

我发现这种行为的方法是,一个程序为 CPU 数量分配一个数组(使用 get_nprocs_conf(3)),然后将 PERCPU_ARRAY 读入其中(使用 bpf_map_lookup_elem ()) 最终写入数组末尾并崩溃。

我想找出在读取 BPF 映射的程序中确定系统上使用的 PERCPU_ARRAY 中元素数量的正确方法是什么。

如果做不到这一点,我认为第二好的方法是选择一个“足够大”的缓冲区来读取。在这里,问题是相似的:那个数字是多少,有没有办法在运行时学习它?

最佳答案

问题来自阅读 bpftool 的源代码,它解决了这个问题:

unsigned int get_possible_cpus(void)
{
int cpus = libbpf_num_possible_cpus();

if (cpus < 0) {
p_err("Can't get # of possible cpus: %s", strerror(-cpus));
exit(-1);
}
return cpus;
}

int libbpf_num_possible_cpus(void)
{
static const char *fcpu = "/sys/devices/system/cpu/possible";
static int cpus;
int err, n, i, tmp_cpus;
bool *mask;

/* ---8<--- snip */

}

所以他们就是这样做的!

关于linux - 是 : How does BPF calculate number of CPU for PERCPU_ARRAY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65078248/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com