Linux kernel 如何使用kprobe计算linux内核中的malloc

Linux kernel 如何使用kprobe计算linux内核中的malloc,linux-kernel,malloc,system-calls,fedora,kprobe,Linux Kernel,Malloc,System Calls,Fedora,Kprobe,我想用fedora中的Kprobe计算malloc系统调用。 我知道malloc不是一个系统调用,而是在用户空间中实现的,但是如果可能的话,我想用kprobe计算malloc 我必须给Kprobe的系统调用的名称是什么? 例如,对于do_工作: kp.addr = (kprobe_opcode_t *) kallsyms_lookup_name("do_fork"); 这在kprobes中是不可能的,因为正如您所说,malloc不是一个系统调用 但是,您可以使用USDT跟踪用户空间进程。包含一

我想用fedora中的Kprobe计算malloc系统调用。 我知道malloc不是一个系统调用,而是在用户空间中实现的,但是如果可能的话,我想用kprobe计算malloc

我必须给Kprobe的系统调用的名称是什么? 例如,对于do_工作:

kp.addr = (kprobe_opcode_t *) kallsyms_lookup_name("do_fork");

这在kprobes中是不可能的,因为正如您所说,malloc不是一个系统调用

但是,您可以使用USDT跟踪用户空间进程。包含一个带有的示例。它跟踪给定进程中的对象分配:

$ ./uobjnew -h
usage: uobjnew.py [-h] [-l {java,ruby,c}] [-C TOP_COUNT] [-S TOP_SIZE] [-v]
                  pid [interval]

Summarize object allocations in high-level languages.

positional arguments:
  pid                   process id to attach to
  interval              print every specified number of seconds

optional arguments:
  -h, --help            show this help message and exit
  -l {java,ruby,c}, --language {java,ruby,c}
                        language to trace
  -C TOP_COUNT, --top-count TOP_COUNT
                        number of most frequently allocated types to print
  -S TOP_SIZE, --top-size TOP_SIZE
                        number of largest types by allocated bytes to print
  -v, --verbose         verbose mode: print the BPF program (for debugging
                        purposes)

examples:
    ./uobjnew -l java 145         # summarize Java allocations in process 145
    ./uobjnew -l c 2020 1         # grab malloc() sizes and print every second
    ./uobjnew -l ruby 6712 -C 10  # top 10 Ruby types by number of allocations
    ./uobjnew -l ruby 6712 -S 10 # top 10 Ruby types by total size
malloc不是一个系统调用。在GNUGLIBC库中,它是使用mmap和sbrk系统调用实现的。也许您想在您的用户应用程序上使用valgrind。。。。内核本身在内核内部分配动态内存,而不是用于使用kmalloc和相关内核函数的应用程序。您还可以使用pmap,对于pid 1234的处理,可以查看/proc/1234/status和/proc/1234/maps等。。。