bcc/python: Add the support for detaching a single kprobe/kretprobe handler
bcc/python: Add the support for detaching a single kprobe/kretprobe handler

_add_kprobe_fd() uses a <ev_name, fd> map to store fd of attached function, but
the current implementation can only store the last fd if we attach multiple
handler functions on the same kprobe event.

This patch uses a <ev_name, <fn_name, fd>> map to build the corresponding
relationship among the kprobe event, handler function names, and fds. Then we
can detach any single handler function, which is pretty helpful if the
developer wants to enable and disable kprobes/kretprobes dynamically.

For example:
We want to measure both the execution count, execution time, and some other
metrics of a kernel function. For flexibility, we want to use separate handlers
for each metric to disable them individually if any of them incur some
performance penalties. Without this interface, we have to disable all handlers
on the kernel function.

The uprobe also has a similar problem. I will fix it in a subsequent patch.

Signed-off-by: Hao Lee <c1898eb4f221961a4c9924db8ec6101df4396ac5@didiglobal.com>

iovisor/bcc,brendangregg/bcc,brendangregg/bcc,brendangregg/bcc,brendangregg/bcc,iovisor/bcc,iovisor/bcc,iovisor/bcc,brendangregg/bcc,iovisor/bcc