1.6.1 性能的定义
一般来说,关于性能,我们主要考虑两个方面:
1. 响应时间: 也叫执行时间,从开始一个任务到该任务完成的时间
2. 吞吐率:也叫带宽,单位时间内完成的任务数量
个人计算机更加关注响应时间,数据中心一般关注吞吐率多一些。
将计算机中的处理器更换为更高频率的型号,既能减少其响应时间,也能增大其吞吐率。
增加多个处理器分别处理任务,如搜索web,可以增大其吞吐率。当需要处理更多任务时,系统软件可以让后续的请求排队,多个任务可以同时在多个处理器上执行,增加了吞吐率的同时也减少了响应时间。
(一般来说,降低响应时间的手段,也可以同时增大吞吐率)
考虑使用响应时间(执行时间)来量化性能:
性能 X = 1/ 执行时间 X
提升性能,也就是要减少执行时间X
1.6.2 性能的度量
如果用时间来度量计算机的性能,那么完成同样的计算任务, 需要时间最少的计算机是最快的 。
程序的执行时间一般是以秒为单位。但是,时间可以根据我们选择的计量方式不同,而选用不同的表示方式。
对时间的直接定义,是 墙上时钟时间,也就是响应时间,也叫消逝时间。(都表示完成任务所需的总时间,包括访问硬盘,访问I/O,和操作系统开销耗时在内的一切时间)
CPU时间:指在CPU上花费的时间,不包括I/O或运行其他程序的时间。由于多用户系统经常是多个用户共享同一台计算机,一个处理器需要同时运行多个程序,在这种情况下我们更关注优化吞吐率,而不是最小化一个程序的响应时间,因此我们需要吧运行我们自己的任务的时间,与一般的响应时间,区别开来。
用户说感受到的时间,是响应时间,而不是CPU时间
(CPU时间进一步分为用户CPU时间和系统CPU时间)
用户CPU时间:用于用户程序的时间
系统CPU时间:操作系统为用户花去的CPU时间
要精确区分这两种CPU 时间是困难的,因为通常难以分清哪些操作系统的活动是属于哪个用户程序的,而且不同
操作系统的功能也于差万别 。
术语:
系统性能 (system performance) 表示空载系统的响应时间
CPU 性能 (CPU performance) 表示用户 CPU 时间
概括介绍了计算机性能,既适用于响应时间的度 量 ,也适用于 CPU 时间的度量,但本章的重点将放在 CPU 性能上 。
不同的应用关注计算机系统能的不同方面 :
- 运行在服务器上的应用,主要关注I/O性能,所以此类应用既关注硬件,也关注软件,对墙上时间感兴趣
- 用户计算机,可能对吞吐率,响应时间,或者二者的复杂组合更为关注。
虽然作为计算机用户我们关心的是时间,但当我们深入研究计算机的细节时,使用其他的度量可能更为方便 。 对计算机设计者来说,他们需要考虑如何度量计算机硬件完成基本功能的速度 。 几乎所有计算机都用时钟来驱动硬件中发生的各种事件。时钟间隔的时间称为时钟周期(clock cycle) 。 也可用它的倒数来描述,称为时钟频率 (clock rate) 。
1.6.3 CPU性能及其因素
一个程序的 CPU 执行时间 = 一个程序的 CPU 时钟周期数 x 时钟周期时间
一个程序的 CPU 执行时间 = 一个程序的 CPU 时钟周期数/时钟频率
改进性能:
时钟周期时间减少,较少时钟周期数,或者增加时钟频率。
1.6.4 指令的性能
一个程序需要的时钟周期数可写为:
CPU 时钟周期数=程序的指令数 x 每条指令的平均时钟周期数
术语 CPI (clock cycle per instruction) 表示执行每条指令所需的时钟周期数的平均值 。 不同的指令需要的时间可能不同, CPI 是一个程序全部指令所用时钟周期数的平均值 。 CPI 提供了比较相同指令集的不同实现方式的方法,因为一个程序执行的指令数是一样的 。
1.6.5 经典的CPU公式
用指令数 (instruction count) 、 CPI 和时钟周期时间来写出基本的性能公式:
CPU 时间 =指令数 X CPI X 时钟周期时间
或
CPU 时间=指令数 x CPU 时钟频率
把性能分解为三个关键因素 。 如果知道实现方案或替代方案如何影响这三个参数,我们可用这些公式来比较不同的实现方案或评估某个设计的替代方案
下图 给出了计算机在不同层次上的性能测试指标及其测试单位 。 通过这些指标的组合可以计算出程序的执行时间(单位为秒):
执行时间=秒/程序 = 指令数/程序 x 时钟周期数/指令 x 秒/时钟周期
永远记住,唯一能够被完全可靠测量的计算机性能指标是时间 。 例如,对指令集减少指令数目的改进可能降低时钟周期时间或提高 CPI, 从而抵消了改进的效果 。 类似地,CPI 与执行的指令类型相 关 ,执行指令数最少的代码其执行速度未必是最快的 。
如何确定性能公式中这些因素的值呢?
可以通过运行程序来测量CPU的执行时间
计算机的说明书上通常会介绍时钟周期时间
难以测量的是:指令数 和 CPI
如果已知 指令数或者CPI其一,根据性能公式,可以退出另一个参数值。
可以通过用体系结构仿真器等软件工具预执行程序来测量 出指令数,也可以用大多数处理器中的硬件计数器来测量执行的指令数、平均 CPI 和性能损失源等 。(ARM - PMU)
由于指令数量取决于计算机体系结构(RISC比CISC要多), 并不依赖于计算机的具体实现,因而我们可以在不知道计算机全部实现细节的情况下对指令数进行测量 。 但是, CPI 与计算机的各种设计细节密切相关,包括存储系统和处理器结构。以及应用程序中不同类型的指令所占的比例有关。
因此,CPI对于不同应用程序是不同的,对于相同指令集的不同实现方式也是不同的。
当比较两台计算机时,必须考虑全部三个因素,它们组合起来才能确定执行时间 。
如果某个因素相同(如时钟频率),则必须考虑不同的因素才能确定性能的优劣 。 因为 CPI 随着指令组合 (instruction mix) 而变化,所以必须比较指令的条数和CPU, 即使时钟频率是相同的 。
注:指令组合:在一个或多个程序中,指令的动态使用频度的评价指标 。
理解程序的性能:
程序的性能与算法、编程语言、编译程序、体系结构以及实际的硬件有关 。 下表概括了这些成分是如何影响 CPU 性能公式中的各种因素的 。
注:CPI的最小值并不是0,有些处理器可以在每个时钟周期上执行两条指令,也就是CPI=0.5,这里引入另一个参数IPC(instruction per clock cycle)替代CPI,IPC = 2.
传一般来说时钟周期是恒定的,但是为了节能和提高性能,时钟周期可以被改变,例如, Intel Core
i7 处理器在处理器温度升高之前可以暂时将时钟频率提高 10% 。 Intel 称之为快速模式(Turbo mode) 。