一个蛋糕一个人吃不完,大家分着吃而已。只要还是这点胃口,就不会是因为分着吃了,会吃不饱;分蛋糕的时候,刀上总会沾点奶油和蛋糕屑,这就是损耗,但损耗微不足道。被分的蛋糕还是蛋糕,只不过变小了,可以让多个人吃了,不再浪费。 X86服务器主要是由CPU、内存和I/O设备通过共享“总线”构成的(如图1)。总线的英语是“BUS”,为什么是“公共汽车”呢?数据可以在任何一个车站(即I/O设备)上车,通过总线的“仲裁,请求,侦听,响应”到目的“车站”下车,完成相应的工作。实际上总线就是服务器内控制有序的网络,和外部通过以太网交换机或FC交换机等相连的网络是一样的。两者最大的区别只是带宽和速率。 图1 北桥、南桥是主板上芯片组中最重要的两块了,它们都是总线控制器。北桥连接系统总线,担负着 CPU访问内存的重任。同时连接这AGP插口,控制PCI总线,在这一段上速度是最快的。南桥不和CPU直接连接,通常用来作I/O 和IDE设备的控制,速度比较慢。 资源池内常用的中国电信定制化服务器采用的Intel E5-2630v3(2.4Ghz,8核)CPU为例展开讨论(如图2)。 随着需求的发展,北桥的“前端总线”(FSB,Front side bus)成为瓶颈,这个芯片将北桥的功能集成的CPU中。通过内置的内存管理器连接内存,采用QPI总线,速率达到了8GT/s。 南桥芯片连接了相对低速的I/O设备,比如网卡、硬盘、USB设备、HBA卡、PCIe设备等等。对于云计算资源池来说,连接外部网络的网卡、HBA卡、内部的硬盘、PCIe SSD等是重点要关注的设备。 图2(单击打开放大看更清楚) 我们要重新认识几个常见的时间单位,这个用的少,常常被遗忘的: 1纳秒=十亿分之一秒 ;1毫秒=一千分之一秒
当CPU的频率等于2.4Ghz的时候,其周期就是频率的倒数,即0.4纳秒。一般情况下,绝大多数的CPU指令是可以在不到一个周期内完成。0.4纳秒是什么概念呢?如果换算成为光走的距离,也只有12厘米。CPU的运算速度如“闪电”这句话真不夸张! 为了便于表达,定义t=0.4纳秒; 在CPU核内的时延=1t(0.4ns) 光跑出0.12米 从CPU L1缓存的时延长>=3t(1.2ns)光跑出0.36米 从CPU L2缓存的时延长>=14t(5.6ns)光跑出1.68米 从内存的时延长>=240t(96ns)光跑出28.8米 在内网的时延长>=250万t(1ms)光跑出300千米 在机械磁盘的时延长>=2500万t(10ms)光跑出3000千米
如果大家还没有感觉,我们把t这个时间放大,t=1秒的时候。执行的命令从CPU L1缓存中读取需要3秒,好比从地上捡起一张纸张;从L2缓存的时延14秒,好比从身后的书架上拿了一本书;从内存中取数据4分钟,好比去隔壁上买了杯咖啡;内网的时延29天,好比出差一个月;而从磁盘中读数据289天,好比去外地交流工作了一年。 从程序优化角度考虑,将经常使用的计算指令常驻在CPU的缓存中,这样的计算效率是最高的,其次是放在在内存中,需要等待240个周期。如果指令还要从磁盘中开始发起,对于CPU来说已经等待了2500万的处理周期了。这段等待的时间内,CPU是没有事情可以做,处于“停机”状态中。 如果计算压力又很小,一直没有计算指令发给CPU,这样CPU休息的时间就更长。这就是计算虚拟化可以实现的需求基础。当物理机的利用率很低,大量的CPU资源闲置,就催生了计算虚拟化。 计算虚拟化实际上就是一个调度员,根据一定的算法,将CPU计算资源调度给不同的指令发送器(虚拟内存)来执行。所谓的虚拟内存简单的说其实就是真实的内存,只是把内存分割成为一段一段的,并把每段分配后内存的物理地址映射为从0开始的虚拟物理地址,作为每个虚拟机的内存。将一个或若干个计算周期“捆绑”给不同的虚拟机内存来执行计算命令,就是虚拟机。 虚拟机的CPU是根据时间复用的方式进行“共享”的。每次CPU在分配给不同虚拟机使用前,都必须清空缓存,这样数据就不会被污染。所以,每次虚拟机获得了CPU计算资源执行周期,指令的发起点是内存,需要将内存的数据写入CPU的缓存中去,240t的时延是不可避免的。CPU每次在 “切换”虚拟机的时候“停顿”是不可避免的,这就是CPU“共享”后带来的额外损耗之一。但是这种损耗对于应用来说是微不足道的,因为应用的时延是毫秒级甚至是秒级的,而CPU共享带来的时延是纳秒级别的,相差千万倍以上。 物理服务器的硬盘是整个系统中很慢的设备。上文为了便于计算,将机械磁盘最小时延定义在10ms,其实一般机械磁盘读写平均时延在15ms以上。虚拟机本来就可以利用本地硬盘作为它的硬盘。但是如果物理机“挂了”,那硬盘也就停止工作了,虚拟机不能迁移了。虚拟机一般会通过网络(包括以太网或FC网络)来外接一个“独立”的存储设备。从表面上看网络带来的时延增加了1ms,但实际上存储的优化特性(如raid、缓存技术等),会使存储设备自己的时延降低。从整体上看利用“共享”存储是减少“时延”的,但还是一个级别的时延。 对于应用来说,不管是承载在物理机还是虚拟机带来的时延,都是同一个数量级,这种差别对于计算机系统来说,是完全没有区别。 一个蛋糕一个人吃不完,大家分着吃而已。只要还是这点胃口,就不会是因为分着吃了,会吃不饱;分蛋糕的时候,刀上总会沾点奶油和蛋糕屑,这就是损耗。被分的蛋糕还是蛋糕,只不过变小了,被多个人吃了,不再浪费。虚拟机就是这个道理。为了多吃几种不同口味的蛋糕,也可以分着吃,这又是另外一种应用的表现,这个后续再详细阐述。 从架构上来看,物理机和虚拟机的架构完全是一样,虚拟化层只是对原来的硬件做了点“手脚”。CPU、网络等资源是按照“时分”外,其他的如内存、存储等都按照“空分”来实现。虚拟化层的“魔术”完全会让操作系统完全区分不出用的是物理机还是虚拟机,更何况是在操作系统之上的应用呢! 所以,虚拟机就是X86服务器!因为使用独立的存储,所以虚拟机在功能上又超越了X86服务器。
华山派气宗保守派主要集中在研发人员中和传统的IT人士,开发和使用IT的“上层建筑”,对底层不解不够,想当然了,以为虚拟机是个怪物。 华山派剑宗走火入魔派往往是“研究”人士,只看到了虚拟机的好,而忽视了其他,认为所有的应用都该用虚拟机。 我们要给气宗人士“洗脑”,但现阶段主要还是要提防“走火入魔”让这个世界全变成了虚拟机,那是另外一种浪费。记住上一篇的标题“X86一统江湖”而不是虚拟机一统江湖。因为虚拟机也是X86服务器的一种。
下一回合,主要讲虚拟机是个“浪费”的东西。
|
|
来自: 王宇w3j0f3o2vv > 《待分类》