性能分析方法
来源
性能分析方法是一个过程,遵循它你可以分析系统和应用程序的性能表现。这通常提供了分析的起点,以及寻找问题根源的指导。不同的方法适用于不同类型的问题,在达成目标之前,你应该尽可能的尝试各种方法。
没有方法指导的分析活动就像是不正规的调查,随意检查度量结果,直到发现问题(如果这是全部问题)。
本站详细介绍的方法有:
- USE方法:用于寻找资源瓶颈。
- TSA方法:用于分析程序时间。
- off-CPU分析:用于分析任意类型的线程等待延迟。
- 主动基准测试:用于准确和成功的基准测试。
下面简单总结了我建立和遇到的方法。你可以把它们全部打印出来做成一个速查表或提示。
总结
在USENIX LISA 2012会议上,我的演讲Performance Analysis Methodology中,我首次总结并命名了几种性能分析方法(大部分由我开发)。后来我将这些方法记录到了我的Systems Performance一书中,以及ACMQ文章Thinking Methodically about Performance,后者出版在2013年2月的ACM通讯上。更多详细的参考资料在本页的末尾。
下面是我最新的总结列表,枚举了各种方法。首先从反面方法开始,包含它们是为了对比,而非遵循。
反面方法
责备其他人反面方法
- 找到一个由其他人负责的系统或环境组件。
- 假设问题由这个组件引起。
- 将问题转发给负责该组件的团队。
- 如果证明不是,返回步骤1。
街灯反面方法
- 选几个显然的工具:
- 熟悉的
- 从网上找的
- 随便找的
- 运行工具。
- 寻找明显的问题。
醉汉反面方法
- 随机修改点什么,直到问题消失。
随机变更反面方法
- 度量性能基线。
- 随机选择一个属性来修改(比如一个可调优属性)。
- 向一个方向修改属性。
- 度量性能。
- 向相反的方向修改属性。
- 度量属性。
- 检查步骤4和6的结果是否优于基线。如果优于基线,保留变更。否则恢复原值。
- 返回步骤1。
消极基准测试反面方法
- 选择一个基准测试工具。
- 使用多种选项运行测试工具。
- 把结果做成幻灯片。
- 把幻灯片发给管理层。
交通灯反面方法
- 打开仪表盘。
- 全是绿灯?认定一切正常。
- 有红灯?认定存在问题。
方法
逐项检查清单方法
1到N:运行A,当B发生时,做C。
问题陈述方法
- 是什么让你觉得系统存在性能问题?
- 系统以前的性能表现好吗?
- 最近变更了什么?(软件?硬件?负载?)
- 性能下降可以用延迟或运行时间来表示吗?
- 这个问题影响到了其他人或其他应用吗(还是只影响到你?)
- 环境是什么?使用了什么软件和硬件?版本和配置是什么?
RTFM方法
(阅读合适的文档)如何研究性能工具和度量:
- man手册。
- 书籍。
- 网络搜索。
- 同事。
- 演讲幻灯片和视频。
- 技术支持服务。
- 源代码。
- 试验。
- 社交媒体。
科学方法
- 疑问。
- 假设。
- 预测。
- 检验。
- 分析。
OODA循环
- 观察。
- 定向。
- 决策。
- 行动。
负责特征分析方法
- 谁引起了负载?(PID、UID、IP地址等)
- 为什么要调用负载?(代码路径)
- 负载是什么?(IOPS、吞吐量、类型)
- 负载是如何随着时间变化的?(时间序列图表)
钻洞分析方法
- 从高级别开始。
- 检查下一级别细节。
- 分解最重要的分解部分。
- 如果问题没有解决,返回步骤2。
淘汰过程
- 将目标分解为部分。
- 选择一个测试方法:
- 可以排除大部分未测试部分(最好可以排除剩余部分的一半)。
- 可以快速执行。
- 执行测试。
- 是否有一些部分可以排除?
- 是:返回步骤2。
- 否:问题找到了吗?
- 是:结束。
- 否:有多少个部分经过测试?
- 一个:目标是经过测试的部分,返回步骤1。
- 多个:返回步骤2。
- 不确定:考虑未测试的部分,返回步骤2,并选择一个不同的测试方法。
时间分解方法
- 度量操作时间(或延迟)。
- 将时间分解为逻辑上顺序的部分。
- 持续分解,直到延迟根源被确认。
- 量化:如果问题解决,度量加速效果。
(我以前把这种方法叫做“延迟分析方法”)
5个为什么性能方法
1:对于性能表现,提问“为什么”,然后回答这个问题。
2到5:对于前面的回答,提问“为什么”,然后回答问题。
分层方法
依次度量延迟细节(比如,使用直方图)
- 动态语言。
- 可执行程序。
- 库。
- 系统调用。
- 内核:文件系统、网络。
- 设备驱动。
调查产生延迟的最低层。
工具方法
- 列出可用的性能功能。
- 对每个工具,列出有用的度量。
- 对每个对量,列出可能的解释。
- 运行选定的工具并解释选定的度量。
USE方法
对每种资源,检查:
- 使用率。
- 饱和度。
- 错误。
CPU检测方法
- 进行CPU检测(如火焰图)。
- 分析占比大于1%的所有软件。
off-CPU分析
- 通过栈跟踪检测每个线程的off-CPU时间。
- 累加相同堆栈的时间。
- 按时间从高到低分析堆栈。
堆栈检测方法
- 检测线程堆栈记录,包括on-CPU和off-CPU。
- 累加。
- 自底向上分析堆栈。
TSA方法
- 对每个重要线程,度量其在每个操作系统线程状态下的时间,如:
- 执行
- 可运行
- 交换
- 休眠
- 锁
- 空闲
- 按照频率从高到低依次调查每个状态,使用适当的工具。
主动基准测试方法
- 配置基准测试,以适合长时间运行。
- 在运行时,使用其他工具分析性能,并确认限制因素。
R方法
- 选择对业务负载影响较大的用户操作。
- 测量用户操作响应时间的分析。
- 计算优化活动的净收益:
- 如果有足够收益,调优。
- 如果收益不足,延迟调优,直到情况变化。
- 返回步骤1。
性能评估步骤
- 陈述研究目标并定义系统边界。
- 列出系统服务和可能的影响。
- 选择性能度量。
- 列出系统和负载参数。
- 选择因子和它们的值。
- 选择负载。
- 设计试验。
- 分析和解释数据。
- 展示结果。
- 如果需要,重新开始。
容量计划过程
- 装配系统。
- 监视系统使用率
- 分析负载特征。
- 预测不同选项下的性能。
- 选择成本最低、性能最高的选项。
Intel自顶向下层次化性能特征方法
- 是否为UOP问题?
- 是:
- 是否UOP已经收回?
- 是:收回(正常)。
- 否:调查故障推断。
- 是否UOP已经收回?
- 否:
- 分配暂停?
- 是:调查后端暂停。
- 否:调查前端暂停。
- 分配暂停?
- 是:
性能咒语
- 别这么做。
- 只做一次。
- 做少一点。
- 晚一点做。
- 没人时做。
- 同时做吧。
- 选便宜的。
基准测试检查清单
- 为何不加倍?
- 达到限额了吗?
- 出错了吗?
- 可重现吗?
- 重要吗?
- 会发生吗?
参考资料
(略)
以上是 性能分析方法 的全部内容, 来源链接: utcz.com/z/512359.html