关于软路由CPU慢的事情,得从原理上说

2023-08-20 04:00:13

不愿意看的就直接退,懒得矫情。

今天得首先带大家一起了解下CPU,其实手焊一个CPU并不是一件难事。主要是因为CPU内部就是一大堆的“门电路”。

例如,上面的这个电路就是一个或门等效电路,无论E1或者E2谁是导通的状态灯都可以亮起来,也就是说无论E1或者E2是高电平,灯都可以获得高电平。

当然了,在计算机上或者说是在数字电路中一般的并不以灯光亮灭作为1或者0的表示,依旧表示的还是高低电平。这时候就应用了一个数字电路的基本元件——“mos管”。用mos管来替换电路中的开关和灯泡。

mos管的三个极分别是:G(栅极),D(漏极)s(源极),当栅极上的电压大于一个mos管的阈值的时候,漏极就会导通,获得和S级一样的电压。这个电压在数字电路中就叫做“电平”,由高低不同的状态来区分,就代表高低电平。

以此等效,利用不同类型的mos管就可以做成一个或门电路,当A、B输入至少有一个是高电平的情况下,Q获得高电平。也就实现了 一位的 A or B = Q 的关系。

与此类类同的,还可以做出非门、与门、与非门、或非门等不同的门电路结构。

这些符号并不是一个元件而是一组基础的数字电路,当有这些基础的门电路后我们就可以利用二进制来计算二进制算法了。例如加法:

这是一个四位二进制加法器,按照次序在A0、A1、A2、A3节点上输入代表A的二进制高低电平,在B0、B1、B2、B3上输入代表B的二进制高低电平,就可以在C0~C4节点上获得二进制A+B的数值。

不过大家能不能看出电路的问题?这个电路不能同时处理进位问题,例如A0和B0都是1的话C0应该是0,而有一个1进位到下一位。在这种电路中如果要计算4位加法就需要3个时钟周期。

当然了,进位的这个问题,还有其他的电路设计,例如超前进位加法器

在计算的时候以电路的复杂性降低了对时钟脉冲周期的需求。只不过算的位数越多,电路就会越复杂。

这是加法器,属于CPU运算器的一个部分,当控制器给出计算指令并从内存提取出要计算的数据后,CPU运算器内的相应电路被激活,从输出端输出高低电平给到控制器,控制器再把高低电平的二进制值放入内存。

这就是CPU的基本原理了。

在CPU内添加不同的电路,用来做不同的事情。而电路的激活编号也就是CPU的指令了。

其实,如果学过数字电路这件事iN都是多余讲。

乘法呢?

咱们都学过九九乘法口诀

基本上4、5岁的小孩也会背诵乘法口诀表。

而不是 3*7 = 3+3+3+3+3+3+3= 21用3加7次来得到21这个结果。

在计算机上也是一样,00=0 01=0 10=0 11=10

这就有了乘法电路:

先用口诀表来的出乘法运算的部分积,再来累计加出乘积。

这个东西叫乘法器,计算一个四位乘法需要9个时钟周期。

咱们的CPU,本身由这些通用的电路组成,根据指令完成相应的计算工作。也就是无所不能的完成咱们的计算任务。

但是,有一类设备,根本不需要在工作的时候压缩H265编码、也不需要去解压Zip文件包、还不用去处理Word文档、甚至也不需要去播放MP3音乐文件。仅仅是将一串二进制代码转换成另一串二进制代码。那么通用的计算电路就完全不需要了。只需要按照查表法进行二进制数据的转换就可以高效的完成工作。这就是专用的数字电路,例如硬件路由器上的NPU。

大部分状况下专用路由器是由专门的NPU(Network Processing Unit)芯片来处理的,这些芯片的价格要比CPU廉价得多,运行的主频也比CPU要低得多,只完成极其简单的二进制数据转换工作。

但大多数的时候是通过查表法来运作的。这就有点像咱们背诵乘法口诀表一样了,给出输入在第一时间就计算出输出结果。中间没有进位,也没有数字累加的过程。全部都是直接在电路级别上解决问题。这时候的速度就要比CPU快上几百倍了。

所以说,用一个软路由的CPU和一个专门用来做网络路由的芯片来比速度,其实是相当欺负CPU的。如果你能理解这个问题,就不会对软路由CPU处理网络数据的能力抱有任何幻想了。

当然了,NPU本身就仅仅处理网络数据,其他的数据完全无法处理。这就导致,很多专门的硬件路由器根本无法设置。

为了解决这个问题,在路由器里面设置一个CPU?如果这样想就太嫩了。

早期的路由器的设置和调试是在控制台(console)界面中进行的。这是一个串行通讯界面,并没有CPU,仅仅是依靠固件对应的串口指令再次“查表”,将EEPROM存储器内的数值按照一定的参数传输到串口中。并安装串口的指令将特定的数据写入EEPROM中。你看似智能的东西,其实完全没有任何运算参与其中。

甚至这个习惯一直延续到10年前,在很多用浏览器登录到家用路由器后台调试的时候,你会发现路由器的调试页面是.asp的页面。

asp本来是运行在微软IIS服务器上的Active Server Pages,属于微软的专有技术。但为什么出现在了路由器系统上了呢?意不意外?难道路由器里面还跑了一个带有IIS的Windows Server?

其实,这还是在查表。只不过这次路由器将url的地址部分编码为MD5作为表数据的索引了。只不过当年很长一段时间,在自己的开发机上搭建一个ASP平台可以很方便的做页面的调试和捕获,这样路由器的很多固件就包含了已经编译(解释)好的ASP页面。

到了现在,很多家用路由器采用了软路由方案,在路由器内利用比如高通的CPU来处理网络信号。这才让路由器可以跑真正的系统。但是这种方案如果CPU芯片没有对网络传输数据做出特殊的优化,那么依旧是很慢很慢的软路由的范畴。


而对比商业方案。现在高端的路由器也有一些有限的Web页面访问功能,挂接插件的功能。一方面是在NPU之外另外设置了一个CPU,另一方面则是还是在查表的过程中。只不过这种查表就有点区别了。一些高端路由器会利用FPGA芯片模拟出一台基本够用的CPU电路,完成简单的任务。但无论是哪种方案,CPU都不会直接参与到网络数据的传输编码工作中。