こんにちは、eBPF マップの使用方法を学習しようとしているので、BCC ドキュメントで見つけた簡単なコードを実行しようとしました。
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 です:
#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;
}
どのヘッダーまたはライブラリを含める必要があるのか よくわからなかったので、そこにすべてをダンプしました..汚れたコードについて申し訳ありません:(
とにかく、実行しようとすると次のエラーが表示されます。
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 テール コールの使用方法を学ぶために確認すべき推奨事項があれば、それを共有していただければ幸いです。
よろしくお願いします。