forked from OpenCloudOS/perf-prof
-
Notifications
You must be signed in to change notification settings - Fork 0
/
TODO
38 lines (31 loc) · 2.21 KB
/
TODO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
perf-monitor 目前定位是做内核和用户应用的数据分析工具,可以分析内核态,也可以分析用户应用。
一、目前具备的功能
1. libperf和libtraceevent基础功能。解析perf采样,解析tracepoint点。
2. 已支持内存泄露、kvm-exit、mpdelay等基本机制。
3. 用户态栈、内核栈打印能力。
4. 模块化,可扩展,可裁减,损耗低。适合高性能监控场景。
5. 栈分析。基础设施。
- 栈及符号打印。可控制内核态、用户态、地址、符号、偏移量、dso、正向栈、反向栈,每个栈帧的分隔符、栈的分隔符。
- key-value栈。以栈做为key,可以过滤重复栈,并能唯一寻址value。
- 生成火焰图折叠栈格式。
6. 延迟分析。
- 统计延迟。最大延迟,最小延迟,平均延迟。
- 直方图。log2和linear直方图,使用`print_log2_hist`和`print_linear_hist`函数打印。
- 热图。横坐标是时间轴,纵坐标是延迟信息。https://github.com/brendangregg/HeatMap.git
二、策略与机制分离
数据分析,主要提供数据分析的机制,不提供具体策略。
如 内存泄露,其机制就是分配后未释放,确定内存分配时的栈;
不需要特定指用户态的内存分配器还是内核态的,内核内存分配器有很多,用户态内存分配器也很多,都应该能支持。
如 mpdelay,测量多个点之间的延迟。
不需要特定指定内核态多个点之间,还是用户进程多个点之间。内核态借助tracepoint、kprobe,用户态借助USDT、uprobe等。
数据分析,需要提供火焰图,直方图。
三、待改进问题
- help帮助信息放到每个模块内部。
- USDT暂时还不支持。
- 内存泄露,不支持栈聚合。相同的栈报告内存泄露总量,而不是重复报告。
- 内存profile功能。
- ksyms内核符号不识别新加载模块的符号。syms用户符号不识别新加载动态库的符号。
- 硬件pmu事件监控。
- ebpf支持的工具移植。
- DWARF解析用户态栈。perf采样需要记录 PERF_SAMPLE_REGS_USER 和 PERF_SAMPLE_STACK_USER,根据用户堆栈数据及dwarf信息解析出用户栈。
- 使用ebpf过滤掉不需要的perf_event.