首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试学习eBPF尾部调用,但未能附加k探头

尝试学习eBPF尾部调用,但未能附加k探头
EN

Stack Overflow用户
提问于 2019-06-30 21:57:55
回答 1查看 1.2K关注 0票数 0

嗨,我正在学习如何使用eBPF地图,所以我试着运行我在密件抄送文档上找到的简单代码。

代码语言:javascript
复制
import os
import socket
import time
import logging
import signal
import sys
import zmq
import json
import yaml
import netifaces as ni
from bcc import BPF
from ctypes import *

b = BPF(src_file="tailcall_test.c")
tail_fn = b.load_func("tail_call", BPF.KPROBE)
prog_array = b.get_table("prog_array")
prog_array[c_int(2)] = c_int(tail_fn.fd)
b.attach_kprobe(event="some_kprobe_event", fn_name = "do_tail_call")

下面是我使用的c代码,它的名称是:tailcall_test.c:

代码语言:javascript
复制
#include <uapi/linux/ptrace.h>
#include <net/sock.h>
#include <bcc/proto.h>
#include <linux/bpf.h>
#include <linux/kernel.h>
#include <uapi/linux/bpf.h>

BPF_PROG_ARRAY(prog_array, 10);

int tail_call(void *ctx) {
        bpf_trace_printk("tail-call\n");
        return 0;
}

int do_tail_call(void *ctx) {
        bpf_trace_printk("Original program\n");
        prog_array.call(ctx, 2);
        return 0;
}

我不太确定需要包含哪些标头或库,所以我把所有的东西都抛到了里面。抱歉,代码太脏了

无论如何,当我尝试运行它时,它会给我这个错误:

代码语言:javascript
复制
cannot attach kprobe, probe entry may not exist
Traceback (most recent call last):
  File "tailcall_test.py", line 18, in <module>
    b.attach_kprobe(event="some_kprobe_event", fn_name = "do_tail_call")
  File "/usr/lib/python2.7/dist-packages/bcc/__init__.py", line 648, in attach_kprobe
    (fn_name, event))
Exception: Failed to attach BPF program do_tail_call to kprobe some_kprobe_event

有什么帮助..?提前谢谢你。

另外,如果你们有任何建议来学习如何使用eBPF的尾部调用,如果你们能和我分享的话,我会非常感激。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-30 22:45:09

因此,在Roadowl在评论中发现问题的原因之前,我没有时间完成我的回答。由于问题的第二部分是关于尾调用的参考,而且我已经写了这个部分,所以我把它张贴起来,以防万一会有帮助。

  • 仅供参考,密件文档有关于尾叫的一段,但从您的代码看,您已经找到了它:)。
  • 如果您想了解尾调用是如何工作的,我建议查看一下纤毛的文档,特别是关于尾呼叫的部分。请记住,bcc提供了一些包装器(如.call()函数),这些包装器不会在纤毛的文档中讨论,但它应该可以帮助您理解在Cilium下发生的事情。
  • bcc本身似乎并不经常使用尾调用,我只能找到似乎使用它的一个联网示例 (尽管我没有彻底搜索)。
  • 您可以在iproute2存储库( 简单的回圈者)中使用尾调用找到一些简单的示例程序。您还可以在内核样本自我测试:grep中找到一些tail_call
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56828345

复制
相关文章

相似问题

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