性能的定义
响应时间
也叫执行时间,是计算机完成某任务所需要的总时间,包括硬盘访问、内存访问、I/O活动、操作系统开销和 CPU 执行时间等。 个人计算机更关注响应时间。
吞吐率
也叫带宽,单位时间内完成的任务数量。服务器更关注吞吐率。
一般来说改进响应时间,几乎都可以提高吞吐率,例如,将处理器更换为更高速的型号。但是还可以通过增加处理器来提高吞吐率,这种方式只会减少完成所有任务所需的时间,并不会减少单个任务的响应时间。
性能的度量
计算机通常运行多个程序,处理器只能一个个的处理这些程序的指令,因此用户感知到的响应时间中会包括等待 I/O 和(或)运行其他程序的时间。
使用 CPU 执行时间(简称 CPU 时间)与响应时间进行区分,它只表示程序在 CPU 上花费的时间。
CPU 时间进一步划分为用于用户程序的时间(用户 CPU 时间)和操作系统为用户程序服务花去的 CPU 时间(系统 CPU 时间)
系统性能表示空载系统的响应时间,CPU 性能表示用户 CPU 时间
CPU 性能
几乎所有的计算机都用时钟来驱动硬件中发生的各种事件,时钟间隔的时间称为时钟周期,它的倒数称为时钟频率。
CPU 的主频就是 CPU 的时钟频率。
CPU 执行时间 = 时钟周期数 x 时钟周期。
时钟周期数不变时,时钟频率越高,则时钟周期越短,CPU 执行时间越短。因此,提高主频可以提高 CPU 性能(主频只是 CPU 的最大化性能,实际的运算速度还要看其他硬件的执行情况)
传统的计算机主频一般来说是固定不变的,但是当今的计算机可以使用不同的时钟频率,例如 Intel I7 可以在温度升高之前暂时将时钟频率提高 10%
指令的性能
不同的指令需要的时钟周期数不同,CPU 执行时间也就不同。
用术语 CPI 来表示运行某个程序或者程序片段时每个指令所需要的时钟周期数的平均值。
经典的 CPU 性能公式
CPU 时间 = 指令数 x CPI x 时钟周期
或
CPU 时间 = 指令数 x CPI / 时钟频率
因此减少指令数,减少每个指令需要的时钟周期数,以及减少时钟周期(增大时钟频率)都可以提升 CPU 性能。
算法、编程语言、编译程序、体系结构以及实际的硬件都可能会影响 CPU 的性能:
硬件或软件指标 | 影响什么 | 如何影响 |
---|---|---|
算法 | 指令数,可能的 CPI | 算法决定源程序执行指令的数目;算法也可能通过使用较快或较慢的指令影响 CPI,例如算法中使用更多的除法运算时,将会导致 CPI 增大 |
编程语言 | 指令数和 CPI | 编程语言的语句必须翻译成指令,不同的编程语言当然会影响指令数;编程语言也可影响 CPI,例如 Java 语言充分支持数据抽象,将进行间接调用,需要使用较高的 CPI 指令 |
编译程序 | 指令数和 CPI | 编译程序决定了源程序到计算机指令的翻译过程,所以编译程序的效率既影响指令数,又影响 CPI |
指令集体系结构 | 指令数、 CPI和时钟频率 | 指令集体系结构影响 CPU 性能的所有 3 个方面 |