4 个版本 (重大更新)

0.4.0 2020年2月18日
0.3.0 2019年6月19日
0.2.0 2019年6月19日
0.1.0 2019年6月18日

性能分析 中排名第 387

Apache-2.0 协议

73KB
1.5K SLoC

strace 文件解析器

注意:推荐的 strace 选项包括:-f -ttt -T -,其中 -ttt 提供微秒绝对时间戳,-T 提供系统调用的持续时间。-f 跟踪分支(包括线程);包括单线程进程的 pids。其他选项有各种(较差)权衡。

命令行界面

strace-stats

后处理常规 strace 文件以获取类似 strace -c 生成的统计信息。

$ strace-stats FILENAME
"filename"
 % time     seconds  usecs/call     calls    errors syscall
------ ------------ ----------- --------- --------- ----------------
 96.86 29670.010031    0.306047     96946           futex
  1.76   539.832878    4.284388       126           epoll_wait
  0.64   196.346132    0.009388     20914           close
  0.27    82.860597    0.000639    129668           write
  0.21    65.616397    0.003282     19994           fchmod

已知问题:错误不会报告(当前解析器语义不足)。

API

解析层(核心功能)

  • 原始解析层:bytes -> structs/enums + 天滚动检测。
  • 开始/停止组合:将相同系统调用的半开事件合并为一个关闭事件。

导出器

  • 事件跟踪格式(计划中)

分析层(推测性)

  • 生命周期分析:分析资源的生命周期使用情况。
  • 并发分析:查找系统调用之间的交互。

理想情况下,无需配置,只需将 strace 内容输入引擎,遍历所需的层即可。然而,如果格式过于模糊,则原始解析层将是配置发生的地点。虽然可以通过限制支持的版本和 strace 选项来保证无歧义的格式,但越接近“即用即得”越好,因为用户会更喜欢这种易用性;因此,在易用性和可靠性之间有一个权衡;目前这是偏向于易用性的。

贡献

解析失败

至少:一个带有附加的 strace 片段的错误报告,展示失败情况。

如果您有时间,一个包含回归测试和错误修复的 PR 会很好。

其他事项

一个描述您想要实现什么的错误报告,或者一个实现它的 PR - 至少要有足够的测试,这样其他作者在将来就不必担心错误地撤销您的工作。

实现说明

解析器是内部细节 - 未来可能会重新实现/替换/等等。

常见问题解答(FAQ)

Q: 处理时间

时间戳是可选的,或者可以是相对的。因此理想情况下,我们拥有绝对微秒时间戳(-ttt),但我们可能只有同一天(-t/-tt)或相对时间戳(-r),或者根本没有时间。在后一种情况下,虽然我们可以对系统调用进行部分排序,但我们不能建立时间线,但我们可以仍然通过 <未完成 ...> 标记给出的排序来确定(某些)并发系统调用。对于 -t/-tt,每次时钟溢出时,我们会在返回的持续时间中添加一个人工日。

Q: 为什么这不仅仅是针对

 https://github.com/wookietreiber/strace-analyzer ?

A: https://github.com/wookietreiber/strace-analyzer#features-that-will-not-be-implemented - 该项目值得称赞的是它对命令行界面的关注;我需要一个库来处理我遇到的各种过程-a-strace文件问题。

许可证

Apache-2.0 协议

作者

罗伯特·柯林斯

依赖关系

~3.5–4.5MB
~88K SLoC