最早的时候,人们制造了一台计算用的集成电路(Circuit,或者IC) ,用树脂包起来,做成一个小片片(Chip),把它装在电路板(PCB)上,做成一台计算机(Computer),他们把这个小片片和其它小片片做了区分,叫它中央处理器(CPU),写软件的人简单叫它处理器(Processor)。

这个阶段,不同的词,它们指的基本是同一个东西。

后来技术发展了,为了提供更强的能力,他们首先把多个Chip装到同一个PCB中,这样,就出现一台计算机,有多个Chip的情况,他们把这个叫做Multi-Processor,MP。如果这些Processor可以一样对待,不需要每个特殊处理,就叫同构多处理(SMP),否则就叫异步多处理(AMP)。

MP要把电路拉远,没有封装在一台计算机里面高效,所以又有人在一个Chip里面,把计算的电路做了多份,每份叫一个“核心”或者你这里翻译为内核了(Core),而仍把封装起来的整个Chip叫一个CPU

但软件已经把一个执行的硬件单元叫CPU了(也就是硬件认为的Core),从这里开始,软件和硬件用的名字指的就不是一个东西了。而对中文来说,软件把操作系统用来管理所有资源的那个被保护的软件部件,也叫内核(Kernel),而把每个被管理的软件部件,叫处理者Process,中文翻译为“进程”),这就更加容易引起人们的误会。实际上,无论Kernel还是Process,都是软件,是运行在CPU/Core上的东西,只是软件内部的区分。就好比我们人的躯体和思考的关系一样,CPU是躯体,软件是魂魄,Kernel是魂,Process是魄(当然我们不细究两者确切的语义

Core越来越多,一个电路已经很难制造了,他们开始分开造,再封装在一个Chip里面,那个独立制造的电路,有人叫它一个DIE,也有人叫它一个Cluster。软件其实不关心,软件只关心一共有多少“CPU”(芯片说的“Core”),但CPU们位置不一样,导致访问内存的速度不一样,所以软件会认为他们在不同的“区域”(zone)上。

为了进一步优化Core,设计师发现Core的很多电路大部分时候都闲着,他们就让多个核复用这些电路。这样看起来一个硬件的Core,提供了多个软件看到的CPU,他们把这样的CPU,叫“硬线程”(hyper-thread)。

好了,不知道你作为软件工程师晕掉没有?软件工程师就要求:别那么多废话了,就说你有多少个“假CPU”吧,我都统一处理好了。

但硬件说,我有30A cpu10B CPU4C CPU15MPU(微处理器,理解为更简单的CPU吧),其中A CPU里有2连个硬线程,三种连法,B有一个硬线程,四种配置…

软件说,打住打住……算了,这样吧,我们分开说,你CPU都一样给我的,我们叫它SMP(注意这个名字的意思已经和前面不同了),这种CPU我统一用,内存也统一访问。如果你不是这样的,我叫它“非对称多处理”(AMP),那个你再一个个跟我说怎么用好了。

读者晕掉没有?有没有都来让我来洗一下脑,都用我们服务器芯片上的定义吧:)

一个独立的硬件处理单元,被软件看做是“CPU”的东西,我们叫Core。但有例外:Core可以有多个超线程hyper-thread,HT),如果有HT,每个HT就是一个软件看到的CPU,但它并不具有所有计算资源。

多个共享一级cacheCore,我们叫一个Cluster

多个cluster组合可以被自由组合封装的电路,我们叫一个超级 CPU CLUSTER(SCCL)。我们还可以把网卡,sas等东西封装成超级IO cluster(SICL),从而提供超过PCIE速度的更接近CPUIO设备(比如100G的网口)。

把多个scclsicl组合在一起,封在树脂里,我们称为一个chip

多个chip放到一个电路板中,里面的core作为SMP使用,每个chip称为一个Processor,或者从PCB的角度,又叫一个插槽(Socket)。

电路板加上各种外网电路,封装成一台服务器,我们叫一台Machine,多个Machine组合成一个柜子,我们称为一个Rack。对外做广告,我们称我们一个Rack可以提供超过1万个,工作主频2.6G+Core


记得要微笑
1.9k 声望4.5k 粉丝

知不足而奋进,望远山而前行,卯足劲,不减热爱。