日报标题:把 CPU 主频降低一点,再低一点,会发生什么?
楼主很有想法。
如果我们将所有的计算单元,输入输出,存储单元,授时看做一个封闭的系统,除此之外不接受任何外部信息(比如真实世界的时间、网络数据等等),然后把这个系统按照一个固定的倍数 X 放慢,那么这个系统是可以完全复现真实世界的软件运行的,只不过它的复现速度只有真实世界的 1/X 而已。
在现实的硬件制造中大家也会有这么一套系统。
在 CPU 的电路设计好后,很大一部分的工作量就是验证数字电路的正确性。这个时候还没有真正的 CPU,他们会将电路构建在一个巨大的 FPGA 上(构建在软件上也行,但是速度实在太慢)。这个 FPGA 上的 CPU 运行在一个较低的频率,比如 30MHz。如果我们的设计目标是每秒钟 3GHz,我们可以得出这个 FPGA 的 CPU 加速比是 0.01。然后将系统时钟,IO(例如磁盘和网络)等等做同比例放慢(也就是大家的速度都是设计速度的 1/100),就可以以相当的精度模拟出正常运行时的情况了。
当然因为一些误差因素,做到 100%还是很艰难的。比如,实际中 Disk 会出现未知的传输错误,模型也可能存在精准性问题,现实中 CPU 也会受到温度影响导致频率变化。这些都是模拟中难以预测的因素。
但是起码在大的逻辑上来说,放慢整个系统的速度并没有任何问题。
注意,我这里一再强调的是“整个封闭系统”一起放慢。如果不一起放慢会有很多潜在问题。考虑 CPU 只有 1/100 的速度,但是授时系统(例如 Timer 和时间戳)不变。此时我们的系统有杀超时进程的习惯,因为 CPU 变慢了太多,本来可以在预定时间内响应的应用程序假死,结果直接被系统杀了,这个时候就不能算是“正常运行”了。
不接受外部信息也有类似的理由。假设系统中存在随机数发生器,这个发生器依据热噪声,或者依据现实世界的时间,那么被放慢后,系统在采集随机数发生器时获得的数据会和真实世界有所不同,这些多少会影响到应用程序的行为。