1.2 评价软件性能的指标和方法

1.2.1 延迟和吞吐率

延迟吞吐率是描述软件性能的两种常见指标。其中延迟是指完成一项任务所需要的时间,吞吐率是指在单位时间内能完成的任务数量。有的软件系统侧重于延迟,有的侧重于吞吐率,也可能需要同时满足两个方面的要求。我们以例子1.1为例说明延迟和吞吐率的不同。

例子1.1 延迟和吞吐率。从A地到B地有两种交通方式:4个人乘坐小轿车需要30min到达,50个人乘坐公共汽车需要50min到达,请比较两种交通方式的性能。

答:从延迟角度考虑,小轿车和公共汽车的延迟分别是30min和50min,明显小轿车更优。从吞吐率角度考虑,小轿车的吞吐率是4人/30min ≈0.13人/min,公共汽车的吞吐率则达到了1人/min,公共汽车的吞吐率更高。

三种不同情况下延迟和吞吐率之间的关系如图1-4所示。

图1-4 三种不同的情况

(1)仅有一个任务执行者,执行一个任务所需要的时间为t时,任务的延迟为t,吞吐率为1/t

(2)p个任务执行者同时执行不同任务,每个任务执行者一次执行一个任务所需要的时间均为t时,延迟为t,吞吐率为p/t

(3)p个任务执行者按照流水线方式执行任务的不同阶段,每个任务执行者负责一段,对应的执行时间为ti时,一个任务的延迟为,整个系统的吞吐率为min(1/ti)。

注意在第3种情况下,吞吐率最低的一段可能成为整个系统的瓶颈。此时,可以通过增加这一阶段的任务执行者,保持整个流水线各段的吞吐率较为均衡。

值得注意的是,在实际应用中延迟或吞吐率往往会发生波动。可以使用求多次测量结果平均值的方法来评价系统,也可以使用90%测试案例的测量结果作为指标。表1-2给出了两种方案的延迟测试结果。这两个方案的平均延迟都是1s,但是方案1中90%测试案例的延迟都小于1s,方案2中仅有60%的延迟小于1s。易见,方案1的延迟波动较小,而方案2的延迟波动较大,稳定性较差。仅从平均延迟角度看,难以判断两者的差别。而如果按照90%的原则,那么方案1中90%的测试案例延迟小于或等于0.987s,而方案2中90%的测试案例延迟小于或等于1.273s。由此可见,方案1明显优于方案2。

表1-2 两种不同方案的延迟测试结果[3](单位:s)

1.2.2 加速比和效率

在保持运行平台和输入数据不变的情况下,T1为未优化程序的执行时间,T2为优化后程序的执行时间,加速比(性能比)S定义为:

S>1时,表明优化后的程序性能更好,否则表明优化后的效果反而不如原有程序。加速比的测试可以分为以下三种情况。

(1)测试数据规模相同,硬件平台相同。主要考察优化软件是否能充分发挥基础软硬件平台的潜在计算能力,或者算法的改进情况。

(2)测试数据规模相同,硬件平台的数量增加(例如从单个处理器核增加到多个处理器核)。主要考察软件的可扩展能力,即在计算资源增加时,性能是否也随之线性增加。

(3)硬件平台相同,测试数据的规模发生变化。主要考察系统性能随测试数据规模变化而变化的规律。

N个部件并行执行时的加速比SN往往会随着并行部件的增加而发生变化。效率指标反映了对可并行部件的利用情况,定义为:

在大多数情况下,程序的效率小于1。如果在并行部件数量N显著增加时,效率依然保持接近于1,则说明该程序具有良好的可扩展性。

例子1.2 2021年6月全球最强超级计算机排行榜第一名为日本的Fugaku超级计算机,其处理器核数为7,630,848个,运行Linpack的实际性能为442,010 TFLOPS,硬件能达到的峰值性能为537,212 TFLOPS。求其效率和较单个核的加速比。

答:其效率为442,010/537,212≈0.82,加速比达到0.82×7,630,848≈6,257,295。

1.2.3 Amdahl定理

假设一个程序串行执行时间为1,其中可并行成分的执行时间为p(0<p<1)。如果有N个并行执行部件同时执行可并行成分,则可并行成分的执行时间为p/N。因此,N个并行部件执行此任务的时间TN=(1-p)+p/N。有N个并行部件时的加速比遵循Amdahl定理,如式(1.3)所示:

N趋近于无穷大时:

这说明在具有无限多执行部件的情况下,可并行成分的执行时间将趋近于0,程序的加速比上限取决于程序中的不可并行成分。

例子1.3 在一个8核处理器上某程序的效率要达到90%,求此程序可并行成分的最小比例。

答:在8核处理器上运行8个线程,效率为90%时,其加速比应该达到7.2,根据式(1.3),可以求得p≈0.98。

1.2.4 M/M/k模型

可以使用排队论等数学方法为复杂的软件和计算机系统建立模型,估计系统性能。较为常见的数学模型是M/M/k模型[4],其中认为请求的到达时间间隔和服务时间符合指数分布,且等待队列长度为无限长,如图1-5所示。假设在单位时间内平均到达λ个任务,具有k个服务者,且每个服务者在单位时间内平均完成μ个任务。

图1-5 M/M/k模型

M/M/k模型的主要指标包括以下几个。

❑请求到达速度和服务速度之比:

ρ=λ/μ,ρk

❑系统的利用率:

ρ*=ρ/k,ρ*<1

❑任务的平均服务时间:

E[s]=1/μ

❑系统空闲(具有0个任务)的概率:

❑系统中具有n个任务的概率:

❑平均队列长度:

❑请求在队列中的平均等待时间:

E[q]=E[nq]/λ

❑请求的平均响应时间:

E[r]=E[s]+E[q]

例子1.4 任务平均到达时间间隔为10min。系统中有两个服务者,其中单个服务者完成一个任务的平均时间为8min。求该系统的主要指标。

答:请求到达速度λ=6个任务/h,单个服务者的服务速度μ=7.5个任务/h,请求到达速度和服务速度之比ρ=λ/μ=0.8,服务者数量k=2,系统的利用率ρ*=0.4。

系统空闲的概率平均队列长度

请求在队列中的平均等待时间 E[q]=E[nq]/λ=0.238/6≈0.04h

任务的平均服务时间 E[s]=1/μ=1/7.5≈0.133h

请求的平均响应时间 E[r]=E[s]+E[q]=0.133+0.04=0.173h

系统的吞吐率和响应时间往往成为一对矛盾:如果负载较少,则可以获得更短的响应时间,但是系统的资源将得不到充分利用,吞吐率较低;反之,如果资源利用率较高,吞吐率得到有效提升,则响应时间可能大幅度变长。现有的研究表明,系统的合理利用率应该位于利用率-响应时间曲线的拐点附近,可以在延迟和吞吐率之间保持较好的平衡。其中拐点是指利用率-响应时间曲线经过零点的切线在该曲线上的切点所在位置。表1-3列举了取不同k值时拐点的资源利用率。

表1-3 M/M/k模型的拐点