Skip to content

Commit

Permalink
Rename kprobe_poll to perf_buffer_poll
Browse files Browse the repository at this point in the history
  • Loading branch information
palmtenor committed Mar 2, 2018
1 parent b700963 commit dbf0029
Show file tree
Hide file tree
Showing 54 changed files with 83 additions and 68 deletions.
18 changes: 9 additions & 9 deletions docs/reference_guide.md
Expand Up @@ -64,7 +64,7 @@ This guide is incomplete. If something feels missing, check the bcc and kernel s
- [1. trace_print()](#1-trace_print)
- [2. trace_fields()](#2-trace_fields)
- [Output](#output)
- [1. kprobe_poll()](#1-kprobe_poll)
- [1. perf_buffer_poll()](#1-perf_buffer_poll)
- [Maps](#maps)
- [1. get_table()](#1-get_table)
- [2. open_perf_buffer()](#2-open_perf_buffer)
Expand Down Expand Up @@ -1023,28 +1023,28 @@ Examples in situ:

Normal output from a BPF program is either:

- per-event: using PERF_EVENT_OUTPUT, open_perf_buffer(), and kprobe_poll().
- per-event: using PERF_EVENT_OUTPUT, open_perf_buffer(), and perf_buffer_poll().
- map summary: using items(), or print_log2_hist(), covered in the Maps section.

### 1. kprobe_poll()
### 1. perf_buffer_poll()

Syntax: ```BPF.kprobe_poll()```
Syntax: ```BPF.perf_buffer_poll()```

This polls from the ring buffers for all of the open kprobes, calling the callback function that was given in the BPF constructor for each entry, usually via ```open_perf_buffer()```.
This polls from all open perf ring buffers, calling the callback function that was provided when calling open_perf_buffer for each entry.

Example:

```Python
# loop with callback to print_event
b["events"].open_perf_buffer(print_event)
while 1:
b.kprobe_poll()
b.perf_buffer_poll()
```

Examples in situ:
[code](https://github.com/iovisor/bcc/blob/08fbceb7e828f0e3e77688497727c5b2405905fd/examples/tracing/hello_perf_output.py#L61),
[search /examples](https://github.com/iovisor/bcc/search?q=kprobe_poll+path%3Aexamples+language%3Apython&type=Code),
[search /tools](https://github.com/iovisor/bcc/search?q=kprobe_poll+path%3Atools+language%3Apython&type=Code)
[search /examples](https://github.com/iovisor/bcc/search?q=perf_buffer_poll+path%3Aexamples+language%3Apython&type=Code),
[search /tools](https://github.com/iovisor/bcc/search?q=perf_buffer_poll+path%3Atools+language%3Apython&type=Code)

## Maps

Expand Down Expand Up @@ -1083,7 +1083,7 @@ def print_event(cpu, data, size):
# loop with callback to print_event
b["events"].open_perf_buffer(print_event)
while 1:
b.kprobe_poll()
b.perf_buffer_poll()
```

Note that the data structure transferred will need to be declared in C in the BPF program, and in Python. For example:
Expand Down
4 changes: 2 additions & 2 deletions docs/tutorial_bcc_python_developer.md
Expand Up @@ -305,7 +305,7 @@ def print_event(cpu, data, size):
# loop with callback to print_event
b["events"].open_perf_buffer(print_event)
while 1:
b.kprobe_poll()
b.perf_buffer_poll()
```

Things to learn:
Expand All @@ -319,7 +319,7 @@ Things to learn:
1. ```class Data(ct.Structure)```: Now define the Python version of the C data structure.
1. ```def print_event()```: Define a Python function that will handle reading events from the ```events``` stream.
1. ```b["events"].open_perf_buffer(print_event)```: Associate the Python ```print_event``` function with the ```events``` stream.
1. ```while 1: b.kprobe_poll()```: Block waiting for events.
1. ```while 1: b.perf_buffer_poll()```: Block waiting for events.

This may be improved in future bcc versions. Eg, the Python data struct could be auto-generated from the C code.

Expand Down
2 changes: 1 addition & 1 deletion examples/lua/bashreadline.lua
Expand Up @@ -27,5 +27,5 @@ return function(BPF)
b:get_table("events"):open_perf_buffer(print_readline, "struct { uint64_t pid; char str[80]; }", nil)

print("%-9s %-6s %s" % {"TIME", "PID", "COMMAND"})
b:kprobe_poll_loop()
b:perf_buffer_poll_loop()
end
2 changes: 1 addition & 1 deletion examples/networking/tc_perf_event.py
Expand Up @@ -80,6 +80,6 @@ class SkbEvent(ct.Structure):
print('Try: "ping -6 ff02::1%me"\n')
print("%-3s %-32s %-12s %-10s" % ("CPU", "SRC IP", "DST IP", "Magic"))
while True:
b.kprobe_poll()
b.perf_buffer_poll()
finally:
if "me" in locals(): ipr.link("del", index=me)
2 changes: 1 addition & 1 deletion examples/tracing/hello_perf_output.py
Expand Up @@ -58,4 +58,4 @@ def print_event(cpu, data, size):
# loop with callback to print_event
b["events"].open_perf_buffer(print_event)
while 1:
b.kprobe_poll()
b.perf_buffer_poll()
2 changes: 1 addition & 1 deletion examples/tracing/stacksnoop.py
Expand Up @@ -120,4 +120,4 @@ def print_event(cpu, data, size):

b["events"].open_perf_buffer(print_event)
while 1:
b.kprobe_poll()
b.perf_buffer_poll()
2 changes: 1 addition & 1 deletion examples/tracing/trace_perf_output.py
Expand Up @@ -51,4 +51,4 @@ def print_counter():
print("Tracing sys_write, try `dd if=/dev/zero of=/dev/null`")
print("Tracing... Hit Ctrl-C to end.")
while 1:
b.kprobe_poll()
b.perf_buffer_poll()
2 changes: 1 addition & 1 deletion examples/usdt_sample/scripts/latency.py
Expand Up @@ -114,4 +114,4 @@ def print_event(cpu, data, size):
# Output latency events
bpf_ctx["operation_event"].open_perf_buffer(print_event)
while 1:
bpf_ctx.kprobe_poll()
bpf_ctx.perf_buffer_poll()
12 changes: 10 additions & 2 deletions src/lua/bcc/bpf.lua
Expand Up @@ -276,7 +276,7 @@ function Bpf:_perf_buffer_array()
return readers, n
end

function Bpf:kprobe_poll_loop()
function Bpf:perf_buffer_poll_loop()
local perf_buffers, perf_buffer_count = self:_perf_buffer_array()
return pcall(function()
while true do
Expand All @@ -285,9 +285,17 @@ function Bpf:kprobe_poll_loop()
end)
end

function Bpf:kprobe_poll(timeout)
function Bpf:kprobe_poll_loop()
return self:perf_buffer_poll_loop()
end

function Bpf:perf_buffer_poll(timeout)
local perf_buffers, perf_buffer_count = self:_perf_buffer_array()
libbcc.perf_reader_poll(perf_buffer_count, perf_buffers, timeout or -1)
end

function Bpf:kprobe_poll(timeout)
self:perf_buffer_poll(timeout)
end

return Bpf
15 changes: 11 additions & 4 deletions src/python/bcc/__init__.py
Expand Up @@ -1100,11 +1100,11 @@ def num_open_tracepoints(self):
"""
return len(self.tracepoint_fds)

def kprobe_poll(self, timeout = -1):
"""kprobe_poll(self)
def perf_buffer_poll(self, timeout = -1):
"""perf_buffer_poll(self)
Poll from the ring buffers for all of the open kprobes, calling the
cb() that was given in the BPF constructor for each entry.
Poll from all open perf ring buffers, calling the callback that was
provided when calling open_perf_buffer for each entry.
"""
try:
readers = (ct.c_void_p * len(self.perf_buffers))()
Expand All @@ -1114,6 +1114,13 @@ def kprobe_poll(self, timeout = -1):
except KeyboardInterrupt:
exit()

def kprobe_poll(self, timeout = -1):
"""kprobe_poll(self)
Deprecated. Use perf_buffer_poll instead.
"""
self.perf_buffer_poll(timeout)

def donothing(self):
"""the do nothing exit handler"""

Expand Down
4 changes: 2 additions & 2 deletions tests/python/test_array.py
Expand Up @@ -65,7 +65,7 @@ def lost_cb(lost):
b = BPF(text=text)
b["events"].open_perf_buffer(cb, lost_cb=lost_cb)
time.sleep(0.1)
b.kprobe_poll()
b.perf_buffer_poll()
self.assertGreater(self.counter, 0)
b.cleanup()

Expand Down Expand Up @@ -98,7 +98,7 @@ def lost_cb(lost):
online_cpus = get_online_cpus()
for cpu in online_cpus:
subprocess.call(['taskset', '-c', str(cpu), 'sleep', '0.1'])
b.kprobe_poll()
b.perf_buffer_poll()
b.cleanup()
self.assertGreaterEqual(len(self.events), len(online_cpus), 'Received only {}/{} events'.format(len(self.events), len(online_cpus)))

Expand Down
2 changes: 1 addition & 1 deletion tests/python/test_usdt.py
Expand Up @@ -213,7 +213,7 @@ def print_event5(cpu, data, size):

# three iterations to make sure we get some probes and have time to process them
for i in range(3):
b.kprobe_poll()
b.perf_buffer_poll()
self.assertTrue(self.evt_st_1 == 1 and self.evt_st_2 == 1 and self.evt_st_3 == 1)

def tearDown(self):
Expand Down
2 changes: 1 addition & 1 deletion tests/python/test_usdt2.py
Expand Up @@ -150,7 +150,7 @@ def print_event6(cpu, data, size):

# three iterations to make sure we get some probes and have time to process them
for i in range(3):
b.kprobe_poll()
b.perf_buffer_poll()

# note that event1 and event4 do not really fire, so their state should be 0
# use separate asserts so that if test fails we know which one is the culprit
Expand Down
2 changes: 1 addition & 1 deletion tests/python/test_usdt3.py
Expand Up @@ -132,7 +132,7 @@ def print_event(cpu, data, size):

b["event"].open_perf_buffer(print_event)
for i in range(10):
b.kprobe_poll()
b.perf_buffer_poll()

self.assertTrue(self.probe_value_1 != 0)
self.assertTrue(self.probe_value_2 != 0)
Expand Down
2 changes: 1 addition & 1 deletion tools/bashreadline.py
Expand Up @@ -61,4 +61,4 @@ def print_event(cpu, data, size):

b["events"].open_perf_buffer(print_event)
while 1:
b.kprobe_poll()
b.perf_buffer_poll()
2 changes: 1 addition & 1 deletion tools/biosnoop.lua
Expand Up @@ -189,5 +189,5 @@ return function(BPF, utils)
char name[$];
}
]], {DISK_NAME_LEN, TASK_COMM_LEN}, 64)
bpf:kprobe_poll_loop()
bpf:perf_buffer_poll_loop()
end
2 changes: 1 addition & 1 deletion tools/biosnoop.py
Expand Up @@ -185,4 +185,4 @@ def print_event(cpu, data, size):
# loop with callback to print_event
b["events"].open_perf_buffer(print_event, page_cnt=64)
while 1:
b.kprobe_poll()
b.perf_buffer_poll()
2 changes: 1 addition & 1 deletion tools/btrfsslower.py
Expand Up @@ -350,4 +350,4 @@ def print_event(cpu, data, size):
# read events
b["events"].open_perf_buffer(print_event, page_cnt=64)
while 1:
b.kprobe_poll()
b.perf_buffer_poll()
2 changes: 1 addition & 1 deletion tools/capable.py
Expand Up @@ -154,4 +154,4 @@ def print_event(cpu, data, size):
# loop with callback to print_event
b["events"].open_perf_buffer(print_event)
while 1:
b.kprobe_poll()
b.perf_buffer_poll()
2 changes: 1 addition & 1 deletion tools/cpuunclaimed.py
Expand Up @@ -218,7 +218,7 @@ def print_event(cpu, data, size):
sleep(wakeup_s)
except KeyboardInterrupt:
exiting = 1
b.kprobe_poll()
b.perf_buffer_poll()
slept += wakeup_s

if slept < 0.999 * interval: # floating point workaround
Expand Down
2 changes: 1 addition & 1 deletion tools/dbslower.py
Expand Up @@ -230,4 +230,4 @@ def print_event(cpu, data, size):

bpf["events"].open_perf_buffer(print_event, page_cnt=64)
while True:
bpf.kprobe_poll()
bpf.perf_buffer_poll()
2 changes: 1 addition & 1 deletion tools/dcsnoop.py
Expand Up @@ -161,4 +161,4 @@ def print_event(cpu, data, size):

b["events"].open_perf_buffer(print_event, page_cnt=64)
while 1:
b.kprobe_poll()
b.perf_buffer_poll()
2 changes: 1 addition & 1 deletion tools/execsnoop.py
Expand Up @@ -212,4 +212,4 @@ def print_event(cpu, data, size):
# loop with callback to print_event
b["events"].open_perf_buffer(print_event)
while 1:
b.kprobe_poll()
b.perf_buffer_poll()
2 changes: 1 addition & 1 deletion tools/ext4slower.py
Expand Up @@ -344,4 +344,4 @@ def print_event(cpu, data, size):
# read events
b["events"].open_perf_buffer(print_event, page_cnt=64)
while 1:
b.kprobe_poll()
b.perf_buffer_poll()
2 changes: 1 addition & 1 deletion tools/filelife.py
Expand Up @@ -140,4 +140,4 @@ def print_event(cpu, data, size):

b["events"].open_perf_buffer(print_event)
while 1:
b.kprobe_poll()
b.perf_buffer_poll()
2 changes: 1 addition & 1 deletion tools/fileslower.py
Expand Up @@ -249,4 +249,4 @@ def print_event(cpu, data, size):

b["events"].open_perf_buffer(print_event, page_cnt=64)
while 1:
b.kprobe_poll()
b.perf_buffer_poll()
2 changes: 1 addition & 1 deletion tools/funcslower.py
Expand Up @@ -231,4 +231,4 @@ def print_event(cpu, data, size):

b["events"].open_perf_buffer(print_event, page_cnt=64)
while True:
b.kprobe_poll()
b.perf_buffer_poll()
2 changes: 1 addition & 1 deletion tools/gethostlatency.py
Expand Up @@ -135,4 +135,4 @@ def print_event(cpu, data, size):
# loop with callback to print_event
b["events"].open_perf_buffer(print_event)
while 1:
b.kprobe_poll()
b.perf_buffer_poll()
2 changes: 1 addition & 1 deletion tools/killsnoop.py
Expand Up @@ -140,4 +140,4 @@ def print_event(cpu, data, size):
# loop with callback to print_event
b["events"].open_perf_buffer(print_event)
while 1:
b.kprobe_poll()
b.perf_buffer_poll()
2 changes: 1 addition & 1 deletion tools/lib/uflow.py
Expand Up @@ -188,4 +188,4 @@ def print_event(cpu, data, size):

bpf["calls"].open_perf_buffer(print_event)
while 1:
bpf.kprobe_poll()
bpf.perf_buffer_poll()
2 changes: 1 addition & 1 deletion tools/lib/ugc.py
Expand Up @@ -239,4 +239,4 @@ def print_event(cpu, data, size):

bpf["gcs"].open_perf_buffer(print_event)
while 1:
bpf.kprobe_poll()
bpf.perf_buffer_poll()
2 changes: 1 addition & 1 deletion tools/lib/uthreads.py
Expand Up @@ -120,4 +120,4 @@ def print_event(cpu, data, size):

bpf["threads"].open_perf_buffer(print_event)
while 1:
bpf.kprobe_poll()
bpf.perf_buffer_poll()
2 changes: 1 addition & 1 deletion tools/mdflush.py
Expand Up @@ -77,4 +77,4 @@ def print_event(cpu, data, size):
# read events
b["events"].open_perf_buffer(print_event)
while 1:
b.kprobe_poll()
b.perf_buffer_poll()
2 changes: 1 addition & 1 deletion tools/mountsnoop.py
Expand Up @@ -408,7 +408,7 @@ def main():
print('{:16} {:<7} {:<7} {:<11} {}'.format(
'COMM', 'PID', 'TID', 'MNT_NS', 'CALL'))
while True:
b.kprobe_poll()
b.perf_buffer_poll()


if __name__ == '__main__':
Expand Down
2 changes: 1 addition & 1 deletion tools/mysqld_qslower.py
Expand Up @@ -130,4 +130,4 @@ def print_event(cpu, data, size):
# loop with callback to print_event
b["events"].open_perf_buffer(print_event, page_cnt=64)
while 1:
b.kprobe_poll()
b.perf_buffer_poll()
2 changes: 1 addition & 1 deletion tools/nfsslower.py
Expand Up @@ -325,4 +325,4 @@ def print_event(cpu, data, size):

b["events"].open_perf_buffer(print_event, page_cnt=64)
while 1:
b.kprobe_poll()
b.perf_buffer_poll()
2 changes: 1 addition & 1 deletion tools/oomkill.py
Expand Up @@ -76,4 +76,4 @@ def print_event(cpu, data, size):
print("Tracing OOM kills... Ctrl-C to stop.")
b["events"].open_perf_buffer(print_event)
while 1:
b.kprobe_poll()
b.perf_buffer_poll()
2 changes: 1 addition & 1 deletion tools/opensnoop.py
Expand Up @@ -192,4 +192,4 @@ def print_event(cpu, data, size):
b["events"].open_perf_buffer(print_event, page_cnt=64)
start_time = datetime.now()
while not args.duration or datetime.now() - start_time < args.duration:
b.kprobe_poll()
b.perf_buffer_poll()
2 changes: 1 addition & 1 deletion tools/solisten.py
Expand Up @@ -210,4 +210,4 @@ def print_event(cpu, data, size):

# Read events
while 1:
b.kprobe_poll()
b.perf_buffer_poll()
2 changes: 1 addition & 1 deletion tools/sslsniff.py
Expand Up @@ -210,4 +210,4 @@ def print_event(cpu, data, size, rw):
b["perf_SSL_write"].open_perf_buffer(print_event_write)
b["perf_SSL_read"].open_perf_buffer(print_event_read)
while 1:
b.kprobe_poll()
b.perf_buffer_poll()
2 changes: 1 addition & 1 deletion tools/stacksnoop.lua
Expand Up @@ -103,5 +103,5 @@ return function(BPF, utils)
bpf:get_table("events"):open_perf_buffer(print_event,
"struct { uint64_t stack_id; uint32_t pid; char comm[$]; }",
{TASK_COMM_LEN})
bpf:kprobe_poll_loop()
bpf:perf_buffer_poll_loop()
end
2 changes: 1 addition & 1 deletion tools/statsnoop.py
Expand Up @@ -175,4 +175,4 @@ def print_event(cpu, data, size):
# loop with callback to print_event
b["events"].open_perf_buffer(print_event, page_cnt=64)
while 1:
b.kprobe_poll()
b.perf_buffer_poll()
2 changes: 1 addition & 1 deletion tools/syncsnoop.py
Expand Up @@ -48,4 +48,4 @@ def print_event(cpu, data, size):
# loop with callback to print_event
b["events"].open_perf_buffer(print_event)
while 1:
b.kprobe_poll()
b.perf_buffer_poll()

0 comments on commit dbf0029

Please sign in to comment.