Skip to content

findstr/lua-perf

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

lua-perf

en

lua-perf是一个基于eBPF实现的性能分析工具,目前仅支持Lua 5.4

功能

  • 提供对CLua混合代码的性能分析,同时也支持纯C代码。
  • 采用栈采样技术,并且对目标进程的性能影响非常小,可以在生产环境中使用。
  • 通过使用eh-frame在内核空间进行栈回溯,不要求目标进程使用-fno-omit-frame-pointer选项来保留栈帧指针。

执行要求

为了使用lua-perf,您需要满足以下要求:

  • 安装的Kernel版本需要在5.17以上。

生成火焰图

要生成火焰图,您需要使用lua-perf配合FlameGraph工具进行操作。以下是步骤:

  1. 首先,使用命令 sudo lua-perf -p <pid> -f <HZ> 对目标进程进行栈采样,并在当前目录下生成 perf.fold 文件。其中 <pid> 是目标进程的进程ID,可以是Docker内的进程或者宿主机上的进程。<HZ> 是栈的采样频率,默认为 1000(即每秒采样1000次)。

  2. 然后,使用命令 ./FlameGraph/flamegraph.pl perf.folded > perf.svgperf.fold 文件转换成火焰图。

  3. 最后,您就可以在当前目录下找到生成的火焰图 perf.svg

这是一个示例火焰图:

perf

日志

在BPF程序中,使用了bpf_printk来打印日志, 当你怀疑性能采样结果可能有异常时,您可以通过以下命令来查看日志。

sudo mount -t tracefs nodev /sys/kernel/tracing
sudo cat /sys/kernel/debug/tracing/trace_pipe

已知问题

lua-perf目前存在以下已知问题:

  • 尚不支持CFA_expression,在某些极端情况下可能会导致调用栈回溯失败。
  • 在分析Lua栈时,动态分析L寄存器(目前仅支持gcc/clang O0~03)
  • 在分析CFA指令时,暂时没有处理 vdso,因此在 vdso 中的函数调用会导致栈回溯失败。
  • 在合并进程的C栈和Lua栈时,采用了启发式的合并策略,极端情况下可能存在一些瑕疵(目前尚未发现)。

待完成事项

以下是lua-perf计划完成的事项:

  • 支持CFA_expression
  • 支持vdso
  • 优化C栈和Lua栈的合并策略
  • 支持更多版本的Lua

About

A perf tool for C and Lua hybrid code

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published