推出“别想当然”系列就是想引导大家再多想一步,特别是和我一样的“甲方”兄弟们,很多概念其实我们都知道,多思考一些,就少一些“上当”,别被人牵着鼻子走。
1年半来陆陆续续写了一些文章,主要是想告诉大家什么是云,怎么用云,怎么用好云。在我的公众号的二维码下面,我一直写着一句话“致力于云计算的普及和应用”。可以在本公众号里一起分享你的经验,我的联系邮箱:gj.zj@chinatelecom.cn
中国电信定制的计算型服务器的典型配置是2路8核128G内存。很多人反映说内存配小了。他们在实际配置中觉得内存不够分配,因为申请者往往认为内存越多系统运行越稳定越快,所以往往会提出很大的内存需求。其实在现有的服务器上,并不是配置cpu、内存越多就会越好。(关于CPU的按需使用可以参考以前的文章《基础知识:虚拟机的构成和CPU虚拟化》和《基础知识—— 虚拟机CPU分配原则》。)
原来的CPU和通过北桥模块和内存相连,是一个典型的SMP架构,如图1。在SMP架构上的CPU都是通过总线来访问内存,每个CPU到内存的路径是一样长的。但是这种架构下总线的带宽就成为瓶颈了,这样CPU的横向扩容就会遇到困难。
图1
当CPU的主频发展到了一定阶段,遇到了天花板,再想增加能力,就只有采取新的“NUMA”架构,如图2。在这个架构中CPU是通过内存控制器和内存相连,同时CPU之间互联。比如2路8核128G内存的服务器,每个CPU核直接管理8G内存,访问自己控制的内存速度是很快的,也可以访问到别的CPU管理的内存,但需要通过控制这个内存的CPU。
图2
好比一件衣服掉在自己的院子里,马上可以捡回来,但是如果掉到别人家的院子里了,不翻墙进入别人家院子直接去捡,而是需要先去敲门,主人听到了,才会开门,你还要说明来意,才会让你进到院子去捡衣服。
一般情况,CPU访问本地内存的速度比访问其他CPU控制的内存快3—4倍。所以,从NUMA架构的角度来说,最佳的性能是只从自己管理的内存中获取信息。
正常的应用需要的计算能力和内存是成正比的。经过实践,在虚拟化的“小人国”内,1个CPU核配置8G内存是完全够用的。觉得物理机配置128G内存不够,其实是内存不够分配,但是CPU资源还有多余。看看内存利用率,特别看看活动内存利用率,就知道其实大部分情况是内存分太大了。实际应用中CPU核很多应用是用不完的,于是有了虚拟机的“超配”。在超配下,实际配置的vCPU个数大于实际物理机CPU个数。内存也可以超配,只是大家用的不像CPU超配用的普遍,担心内存超配会导致虚拟机崩溃。(其实内存的超配也是安全可行的,结合下周的内容来讲。)如果内存不想超配,那就按需来分配内存,不要人家要多少就给多少。别忘记云计算的本质是按需分配。NUMA架构下一个CPU核配置小余等于8G内存,效率最高。
NUMA架构带来的问题在物理机上或虚拟机上都是差不多的。比如运行在NUMA架构服务器上的“很忙”的数据库就会遇到问题,有些数据库对NUMA的特殊支持和优化可以解决。但是虚拟机实现的原理来看,NUMA带来的问题会更放大一些,这块内容下周展开。