系统性能分析

性能

UNIX系统的程序运行时间

用户CPU时间:运行代码需要的时间
系统CPU时间:为运行用户代码而运行其他代码所用的时间
运行时间:墙钟时间(几点几分几秒)
运行时间=用户CPU时间+系统CPU时间+其他时间

最佳选择:在没有其他负载的系统上多次测量实际完成工作负载的墙钟时间。

\(延迟=结束时间-开始时间\)
\(吞吐=给定时间内完成的任务量\)
但是:
\(吞吐!=1/延迟\)(如果存在并行)

优化性能时,必须要考虑其他的指标。可以考虑使用复合指标,防止在优化指标的时候忽略另一些指标。

伪性能指标

IPC(每周期执行指令数)
MIPS(每秒百万条指令数)
GHz(每秒周期数)

IPC和MIPS是平均指标,可以通过特定的指令组合得到更好的数值;这些指标可以在牺牲彼此和实际性能的情况下得到改进,所以不具有实际意义。

墙钟时间=时间/周期数周期数/指令数指令数/程序

相对性能

减少“X比Y慢50%”这种说法,因为会导致歧义。

如果\(time_x=1.0s\),那么\(time_y=0.5s(time_y/time_x=0.5)\),或者\(time_y=0.6666s(time_x/time_y=1.5)\)

所以为了避免歧义,我们使用以下的两种描述方式:

  1. “X比Y快n倍”:

    • \(n=吞吐X/吞吐Y\)
  2. “X比Y快m%”:

    • \(1+m/100=吞吐X/吞吐Y\)

加速比

\(speedup=t_{改进前}/t_{改进后}\)

Amdahl定律

并行化程序的铁律。

假设一段代码中有\(f%\)的部分可以并行化,那么并行化后的时间为:

\[time_{new} = time_{old}*((1-f)+f/n) \]

\[speedup = time_{old}/time_{new}=1/((1-f)+f/n) \]

这里\(n\)表示可用的处理器个数,我们发现,并行程序加速比受限于任务中的串行部分(不可并行化的部分)。

benchmark

标准基准程序,例如SPEC等。

小结

性能是一个十分综合的量度,所以并没有一刀切的方法。

这就要求我们在衡量性能的时候,一定要想好想测量什么,明确知道自己测了什么,确保报告的内容准确且有代表性,准备好原始数据可复现。

posted @ 2020-08-03 13:13  xinze  阅读(545)  评论(0编辑  收藏  举报