计算机基本组成-性能与功耗
计算机性能
计算机性能是聊得最多的话题,而计算机性能不仅与其硬件相关,还和使用的软件息息相关。
性能指标
我们评价一个系统的性能一般用两个指标来评估:1.响应时间 ResponseTime 2.吞吐率 throughPut ,而一段串行代码的性能=1/响应时间,响应时间越短,这段代码的性能就越好。
就和施工一样,施工的工人是一个生产单位,工人数就是生产单位的数量,我们评估一个施工队伍的生产效率可以用单个工人的工作效率和整个工程的施工速度来评估。
响应时间
响应时间和性能一样,有很多评价维度。
- 从系统的角度看,我们理解的响应时间就是wallClockTime,比如你写了一个接口从发出到接收到耗时100ms,意味着这个接口响应时间是100ms;
- 从程序的角度看,一个接口包含了:建立TCP连接=>建立SSL/TLS连接=>http报文网络传输=>tomcat启动接收线程=>进入接口层=>执行代码逻辑=>访问数据库=>访问redis=>返回执行结果,这一整个流程,这整个耗时就是这段程序代码的响应时间,刨除网络传输可能耗时只有70ms,这个70ms才是我们工程师能够控制的耗时。
- 从线程的角度看,只有代码执行逻辑(也就是指令花费的CPU时钟周期)才是真正执行计算机指令的耗时,例如数据库执行、Redis访问等都是IO等待,实际这段程序代码编译成指令,发送到CPU执行,最后收到响应花费的时间总共可能只有20ms。
- 从操作系统的角度看,它还分时复用做了很多其他操作,操作系统层面的耗时还可以细分:real time(也就是线程理解的响应时间)、user time(cpu在用户态运行你程序指令的时间)、sys time (cpu在内核态运行你程序指令的时间)、其他time(cpu在执行你程序的期间还执行其他指令的时间)。事实上,user time+sys time 就是程序实际花费的CPU执行时间。那这段程序在CPU上执行时间可能只有10ms。
# 如下,实际CPU执行输入1~1000000 这段程序花费的时间=user+sys=0.047s,对于线程来说花费了0.101s,期间操作系统执行了其他指令。
$ time seq 1000000 | wc -l
1000000
real 0m0.101s
user 0m0.031s
sys 0m0.016s
另外,如果在多核CPU上运行,可能会发现real time < user + sys,这是因为多核可以并行执行指令,缩短了整体响应时间。
- 从CPU的角度看,比操作系统更细节,毕竟CPU可能在降频、超频运算,主板和内存也会影响操作系统层面的执行时间,在CPU上我们应该这样理解程序执行的时间:
程序执行时间=(指令数x指令平均时钟周期数CPI)x时钟周期时间。
指令数可以通过算法优化、代码优化、编译器优化进行提升,减少代码编译的指令数量。
指令平均时钟周期数(CPI)可以通过CPU的流水线优化进行提升
时钟周期时间我们没法提升,属于硬件性能
时钟周期时间就是CPU单次计算需要花费的时间,它=1s/CPU晶振震动频率,例如我的CPU是Intel Core-i5-6500HQ 3.2GHz,这个3.2gHz可以理解为1s之内,CPU完成高低电平转换的次数。
吞吐率
吞吐率指单位时间的事务处理速度。
吞吐率可以通过降低响应时间提升,也可以用多核或者多线程并行提升。
CPU功耗
这里的功耗是指CPU单位时间内消耗的能源数量,一般按瓦算,我们用的台式电脑一般是100瓦以上,而手机上只有5瓦左右,了解CPU功耗,因为它是CPU的性能提升的瓶颈。
一般提升计算机性能的方式
我们知道CPU是计算机的核心,叫做超大规模集成电路(Very-Large-Scale Integration,VLSI),它由数亿个晶体管组成,计算是由晶体管的开闭操作来完成,那我们就能够想出以下方式提升性能:
- 增加晶体管密度:可以将CPU制程降低,从20nm到5nm,单个CPU可以塞入更多晶体管了。
- 提升主频:可以将主频提升,比如最早Intel主频是78年5MHz,现在是5GHz,相当于晶体管的开闭操作更快了,计算速度就更快了。
那为什么现在的CPU性能不能符合摩尔定律,一直提升呢?
- 不能增加CPU体积:因为如果CPU的面积大,晶体管之间的距离变大,电信号传输的时间就会变长,运算速度自然就慢了。
- 不能一直增加晶体管密度,晶体管的制程如果突破nm级别,就会产生量子遂穿效应,传统电路开闭计算就没法实现了。
- 不能一直提升主频,因为提升主频会导致功耗提升,高温会导致电阻变大,发热异常甚至损坏,散热成为了最大的问题。
所以看起来功耗问题就是我们可以努力解决的方向,这里就需要一个公式:
功耗 ~= 1/2 ×负载电容×电压的平方×开关频率×晶体管数量
降低功耗的方式
基于以上公式,很明显,降低电压能有效减少功耗,事实上,从 5MHz 主频的 8086 到 5GHz 主频的 Intel i9,CPU 的电压已经从 5V 左右下降到了 1V 左右。
其他提升CPU运算效率的方式
- 并行优化,阿姆达尔定律
阿姆达尔定律很有名,也很简单,将可以并发的程序进行并发处理,使其整体响应时间降低,CPU如今就是通过多核处理来提升CPU吞吐和响应时间。
优化后的执行时间 = 受优化影响的执行时间 / 加速倍数 + 不受影响的执行时间
计算机的九大思想
这里我们已经看到了计算机九大思想中的一半了,正好来梳理一下:
- 摩尔定律
- 分层
- 加速大概率事件
- 并行提升性能(阿姆达尔定律)
- 流水线优化
流水线设计是上个世纪福特汽车最大的贡献,也是现代工业的基础,他最大的特点是可以减少大量上下文切换,并且每个环节的设计可以及其简单高效,整个流程复杂度也比单个步骤完成的更低。
CPU也有类似的指令层面的流水线优化。 - 预测、分支、冒险
- 局部性原理
- 存储器层次
- 通过冗余提升可靠性
浙公网安备 33010602011771号