Complete hello_perf_output BCC example

This commit is contained in:
Pragyansh Chaturvedi
2025-10-20 04:02:34 +05:30
parent 8c976e46ae
commit 5bba8dce12

View File

@ -1,7 +1,6 @@
from pythonbpf import bpf, map, struct, section, bpfglobal, BPF, trace_pipe from pythonbpf import bpf, map, struct, section, bpfglobal, BPF
from pythonbpf.helper import ktime, pid, comm from pythonbpf.helper import ktime, pid, comm
from pythonbpf.maps import PerfEventArray from pythonbpf.maps import PerfEventArray
from ctypes import c_void_p, c_int64, c_uint64 from ctypes import c_void_p, c_int64, c_uint64
@ -25,7 +24,6 @@ def hello(ctx: c_void_p) -> c_int64:
dataobj = data_t() dataobj = data_t()
dataobj.pid, dataobj.ts = pid(), ktime() dataobj.pid, dataobj.ts = pid(), ktime()
comm(dataobj.comm) comm(dataobj.comm)
print(f"clone called at {dataobj.ts} by pid {dataobj.pid}, comm {dataobj.comm}")
events.output(dataobj) events.output(dataobj)
return 0 # type: ignore [return-value] return 0 # type: ignore [return-value]
@ -36,8 +34,28 @@ def LICENSE() -> str:
return "GPL" return "GPL"
# compile # Compile and load
BPF().load_and_attach() b = BPF()
b.load()
attached = b.attach_all()
print("Tracing clone()... Ctrl-C to end") start = 0
trace_pipe()
def callback(cpu, event):
global start
if start == 0:
start = event.ts
ts = (event.ts - start) / 1e9
print(f"[CPU {cpu}] PID: {event.pid}, TS: {ts}, COMM: {event.comm.decode()}")
perf = b["events"].open_perf_buffer(callback, struct_name="data_t")
print("Starting to poll... (Ctrl+C to stop)")
print("Try running: fork() or clone() system calls to trigger events")
try:
while True:
b["events"].poll(1000)
except KeyboardInterrupt:
print("Stopping...")