当前位置:和仁网 > 内容 > 正文

将CPU主频性能降到极低还能正常运行操作系统么?

2021-11-05 349

答案当然是可以,只不过需要进行多处适配,这些坑就是由BSP工程师来踩。下面就由高到低介绍下不同等效主频下启动linux的效果。1. 24MHz几个月前,我抽空从零开始diy了一块简单的cortex-a8水果派(基于Cortex-A8内核的荔枝Pi_Cortex-A8开发板-打造工程师的专属众筹平台-电子发烧友网,荔枝派概览 - [ Lichee Pi 荔枝派 全流程指南 ] - 看云),从板级硬件设计,产测,到boot适配,linux,安卓适配等的坑都踩了一遍。过程中为了调试DDR以及测试在低主频下的功耗情况,就曾把ddr时钟和主频降到了最低的24M.在24M ddr时钟下我甚至成功用入门级100M带宽示波器生成了眼图…实测效果是,基本不用做太多适配,系统就能起来,只是速度慢了很多,原本在1g主频下20s不到启动的,现在需要超过五分钟(具体时间忘了,记得的另一个数据是96M时需要122s),而且由于时钟太慢,800*480的屏幕刷新不过来,出现了严重的图像的弹跳/抖动现象,已经无法保证屏幕时序了…不过估计在128*64的点阵屏上还可以 逃(
其实这个感觉有点像关掉icache/dcache的效果,关掉之后连串口终端的回显都不利索了…看上去在24M时结果并没有什么特别的,只是简单的慢了小几十倍而已…其实这基本就是286的主频了,当年286跑dos不就很流畅吗,为啥是24M,不能更低了吗?因为我用的芯片的外置晶振就是24M,主频是由它倍频上去,而无法分频…

2. 10KHz,相比前面的降两个数量级,这次直接降三个数量级看看,某些童鞋应该已经猜到这个等效主频是什么情况下的了:对的,就是在本身主频只有24M的八位avr单片机上跑arm模拟器来启动linux,得到的等效主频不到10KHz,看看作者自己的评价:uARM is certainly no speed demon. It takes about 2 hours to boot to bash prompt ("init=/bin/bash" kernel command line). Then 4 more hours to boot up the entire Ubuntu ("exec init" and then login). Starting X takes a lot longer. The effective emulated CPU speed is about 6.5KHz, which is on par with what youd expect emulating a 32-bit CPU & MMU on a measly 8-bit micro. Curiously enough, once booted, the system is somewhat usable. You can type a command and get a reply within a minute. That is to say that you can, in fact, use it. I used it to day to format an SD card, for example.
所以到此我们对于电脑卡有了新的理解,也可以了解到做好系统适配,再慢的u都能跑起来。
因此再看这个问题就不会觉得有什么奇怪的了。

3. <5Hz再次降三个数量级,直接到目标频率。这个是我参考前面的数据估算的等效主频,权当yy吧。多数人都知道32/64位cpu,了解dos时代的16位cpu,听过八位的单片机,少数人也许也知道更低成本的四位单片机(只能用汇编编程),但要实现数Hz的等效主频,这些都还太快…其实在dos时代,工控领域还活跃着一朵奇葩: 一位机,以MC14500B为代表。MC14500B - Wiki自身主频是100KHz,再加上只有八位机八分之一的带宽,如果在这个一位机上跑avr模拟器,再跑arm模拟器,那等效主频绝对在5Hz以内。
真跑起来的话,可能就需要小半年才跑到init,快一年到login,若干年来startx...

4. mHz,编不下去了…mHz的话,应该MC的红石电路可以吧!那时可能要用一辈子去看linux启动了…
当然不跑模拟器的话,也许能跑到和一位机比肩的速度呢!

5. 其实计算机的发展就是从最开始几十Hz的继电器开始的,把我的答案倒回去看就是计算机发展史啊!
在这个多数人认为是大开脑洞的问题下,却正是半个多世纪前科学家们实际面临的问题,阿波罗登月时代的常规内存甚至不到1KB,就靠这种容量和主频的数字系统(这时都没有真正意义上的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变慢了太多,本来可以在预定时间内响应的应用程序假死,结果直接被系统杀了,这个时候就不能算是“正常运行”了。不接受外部信息也有类似的理由。假设系统中存在随机数发生器,这个发生器依据热噪声,或者依据现实世界的时间,那么被放慢后,系统在采集随机数发生器时获得的数据会和真实世界有所不同,这些多少会影响到应用程序的行为。

比如我的hotwell最节能的时候降到800mhz,其实还是能正常使用的,只是卡而已。再比如我的平板,节能的时候降到600mhz,更卡,但也不是不能用。但是再往下降的话,就很难说了。频率下降相当于慢动作,但时间的流逝是不变的,那些依赖时间的操作会变得难以预料。比如原定超过3s无响应就结束程序,可能6s到了,才发现一个程序超时了,又花了10s去关闭程序。从600mhz->1hz,不考虑各种延迟的话,相当于原先1s能完成的工作延长到了6x10^8s,快20年。。。。估计到时候不是系统自己运行不下去,而是用户作为旁观者看不下去了吧。对了,还有个问题需要考虑,和各种硬件的频率关系。比如pci-e接口的频率基本固定100mhz,如果cpu太慢(外频远低于100mhz),怎么通讯。

本周热门