Crates.io | lua-perf |
lib.rs | lua-perf |
version | 0.1.0 |
source | src |
created_at | 2023-09-30 10:53:17.876487 |
updated_at | 2023-09-30 10:53:17.876487 |
description | A perf tool for C and Lua hybrid code |
homepage | https://github.com/findstr/lua-perf |
repository | https://github.com/findstr/lua-perf |
max_upload_size | |
id | 988544 |
size | 126,328 |
lua-perf
是一个基于eBPF
实现的性能分析工具,目前仅支持Lua 5.4
。
C
和Lua
混合代码的性能分析,同时也支持纯C
代码。eh-frame
在内核空间进行栈回溯,不要求目标进程使用-fno-omit-frame-pointer
选项来保留栈帧指针。为了使用lua-perf
,您需要满足以下要求:
Kernel
版本需要在5.17
以上。要生成火焰图,您需要使用lua-perf
配合FlameGraph工具进行操作。以下是步骤:
首先,使用命令 sudo lua-perf -p <pid> -f <HZ>
对目标进程进行栈采样,并在当前目录下生成 perf.fold
文件。其中 <pid>
是目标进程的进程ID,可以是Docker内的进程或者宿主机上的进程。<HZ>
是栈的采样频率,默认为 1000
(即每秒采样1000次)。
然后,使用命令 ./FlameGraph/flamegraph.pl perf.folded > perf.svg
将 perf.fold
文件转换成火焰图。
最后,您就可以在当前目录下找到生成的火焰图 perf.svg
。
这是一个示例火焰图:
在BPF程序中,使用了bpf_printk
来打印日志, 当你怀疑性能采样结果可能有异常时,您可以通过以下命令来查看日志。
sudo mount -t tracefs nodev /sys/kernel/tracing
sudo cat /sys/kernel/debug/tracing/trace_pipe
lua-perf
目前存在以下已知问题:
CFA_expression
,在某些极端情况下可能会导致调用栈回溯失败。rbx
来寻找 L
指针,这对于大多数情况下的 GCC -O2
是正确的。但是,根据GCC的优化级别不同,L
的值可能存储在不同的寄存器中,这可能导致Lua栈回溯失败。CFA
指令时,暂时没有处理 vdso
,因此在 vdso
中的函数调用会导致栈回溯失败。以下是lua-perf
计划完成的事项:
CFA_expression
vdso
L
寄存器