eBPF 未能使用原子操作

问题描述 投票:0回答:0

[环境]

1.aarch-linux-5.15.7 ()

2.bpf编译工具:clang-11,

3.bpf编译参数:

clang -g -target bpf -Wall -O2 -g3 -g -DBPF_CODE -ggdb -std=gnu99 -D__TARGET_ARCH_arm64 -Wno-compare-distinct-pointer-types

4.使用 libbpf 1.0.1/bpf_object__load() 打开后失败

【有两种现象】

  1. 使用__sync_add_and_fetch,返回ENOTSUPP,Linux内核代码返回错误码如下:
    if (attr->attach_prog_fd) {
        dst_prog = bpf_prog_get(attr->attach_prog_fd);
        if (IS_ERR(dst_prog)) {
            dst_prog = NULL;
            attach_btf = btf_get_by_fd(attr->attach_btf_obj_fd);
            if (IS_ERR(attach_btf))
                return -EINVAL;
            if (!btf_is_kernel(attach_btf)) {
                /* attaching through specifying bpf_prog's BTF
                 * objects directly might be supported eventually
                 */
                btf_put(attach_btf);
                return -ENOTSUPP;
            }
        }
    } 

我也试过禁用内核中的btf类型功能。仍然显示异常。相同的代码在 x86 上正常运行。

2.使用atomic64_add错误信息如下: libbpf:找不到 extern'atomic64_add' 的 BTF:- 2

查看Linux更新说明和相关代码。此版本支持原子操作。

谢谢你的帮助。

atomic ebpf
© www.soinside.com 2019 - 2024. All rights reserved.