概述:虚拟化是一个广义术语,一般是指计算元件在虚拟的基础上而不是真实的基础上运行,是一个为了简化管理,优化资源的解决方案.服务器虚拟化则是一项用以整合基于x86服务器,来提升资源利用效率和性能的技术.本文从企业业务系统和管理角度出发,着重分析研究了X86技术架构下,虚拟网卡与SR-IOV、NUMA、虚拟磁盘格式相应的特色,并探索了不一样应用场景下的资源划分和性能优化方案,但愿可以经过多应用系统下的实践和最优配置,来提升X86服务器的性能和资源利用效率.linux
1 x86虚拟化两种常见的架构数据库
对于x86虚拟化,有两种常见的架构:寄居架构和裸金属架构.寄居架构将虚拟化层运行在操做系统之上,看成一个应用来运行,对硬件的支持很普遍.相对的,裸金属架构直接将虚拟化层运行在x86的硬件系统上,能够直接访问硬件资源,无需经过操做系统来实现硬件访问,所以效率更高.Vmware Workstation和VMware Server都是基于寄居架构而实现的,而VMware ESX Server是业界第一个裸金属架构的虚拟化产品,目前已经发布了第五代产品.ESX Server须要运行在VMware认证的硬件平台上,能够提供出色的性能,彻底能够知足大型数据中心对性能的要求.本文主要论述的也是基于X86裸金属架构下的服务器的资源划分和性能优化问题.后端
2 x86虚拟化资源划分的三个层面缓存
服务器的资源划分简单的讲,包括网络、计算、存储三个层面.每个虚机都在其连通的网络中,承担必定的计算任务,把计算后的数据存储下来供业务使用.性能优化
2.1 网络层面
3.
从网络层面来讲,X86物理机使用的是物理的网卡,链接的是物理的交换机.在一台X86被划分红多个VM虚机后,就诞生了虚拟网卡和虚拟交换机.这样在虚拟和物理网络之间就产生了流量传输与交互.如图1所示.服务器
同一台物理机上划分的VM有同一网段和不一样网段之分,再根据虚机之间的网络流量是否通过物理网卡,具体可分为四种不一样的状况:网络
第一种状况,好比某业务系统的VM在同一主机的同一网段,则虚拟机之间网络流量不通过主机物理网卡,其最大网络流量为7.6GB.(测试方法:在testvm1上启用jperf server做为网络数据接收端,在testvm2中启用jperf client链接jperf server发送网络数据包,同时加压网络流量.X86主机为双万兆网卡);架构
第二种状况,好比某业务系统的VM在同一主机的不一样网段,则虚拟机之间网络流量通过主机物理网卡,其最大网络流量为5.6GB.测试方法同上.负载均衡
第三种状况,好比某业务系统的VM在不一样主机的同一网段,则虚拟机之间网络流量通过主机物理网卡,其最大网络流量为6.5GB.测试方法同上.socket
第四种状况,好比某业务系统的VM在不一样主机的不一样网段,则虚拟机之间网络流量通过主机物理网卡,其最大网络流量为4.6GB.测试方法同上.
测试的几种场景对比表如表1所示。
在一台X86物理服务器上进行VM的网络虚拟化,还有一种技术就是SR-IOV.SR-IOV 技术是INTEL提出的一种基于硬件的虚拟化解决方案,可提升性能和可伸缩性.SR-IOV 标准容许在虚拟机之间高效共享 PCIe(Peripheral Component Interconnect Express,快速外设组件互连)设备,而且它是在硬件中实现的,能够得到可以与本机性能媲美的网络 I/O 性能.好比咱们把一台X86物理服务器上的万兆网卡经过SR-IOV技术分红4个虚拟网卡给4个VM使用,那么其网络传输性能将比虚拟化网卡给VM使用高不少.
测试方法:在一台X86物理服务器上,4个VM启用jperf server做为网络数据接收端;在另外一台X86物理服务器上,4个VM启用jperf client链接jperf server发送网络数据包,同时加压网络流量.两台X86主机为双万兆网卡.
SR-IOV虚拟化测试架构如图2所示.
网络传输的数据量对好比表2所示.
普通的虚拟化传输的最大数据量为4.6Gbps,而SR-IOV的直接硬件虚拟化可达到9.4Gbps.
具备 SR-IOV 功能的设备还有如下优势:节能、减小了适配器数量,同时简化了布线,减小了交换机端口.SR-IOV有不少优势,可是也有不少限制,好比VMWARE里的原有的不少功能将对SR-IOV 的虚拟机不可用.好比Vmotion、Storage Vmotion、Vshield、NetFlow、High Availability、FT、DRS、DPM、挂起和恢复、快照、热添加和删除虚拟设备、加入到群集环境.
所以,咱们在考虑x86网络虚拟化的时候,更多的须要结合性能、业务特色、基础设施来综合考虑.若是一个业务要求比较高的性能同时不须要更多的灵活性,能够考虑SR-IOV技术.反之则选择X86常见的网络虚拟化技术,结合VMWARE来进行部署.
2.2 计算层面
从计算层面来讲,X86物理服务器上的CPU、内存资源均可提供给虚拟机使用.如今的高性能X86服务器通常都是多CPU多核系统,NUMA 架构会愈来愈受欢迎,由于这个架构可解决多处理器多核和非统一内存架构之间的交互带来的新的CPU、内存资源分配方法的挑战,并改善占用大量内存的工做负载的性能. NUMA架构如图3所示.
传统的服务器架构下是把内存放到单一的存储池中,这对于单处理器或单核心的系统工做良好.可是这种传统的统一访问方式,在多核心同时访问内存空间时会致使资源争用和性能问题.而NUMA是服务器CPU和内存设计的新架构,它改变了内存对CPU的呈现方式,这是经过对服务器每一个CPU的内存进行分区来实现的.每一个分区(或内存块)称为NUMA节点,而和该分区相关的处理器能够更快地访问NUMA内存,并且不须要和其它的NUMA节点争用服务器上的资源(其它的内存分区分配给其它处理器).NUMA也支持任意一个处理器访问服务器上的任何一块内存区域.某个处理器固然能够访问位于不一样区域上的内存数据,可是却须要更多本地NUMA节点以外的传输,而且须要目标NUMA节点的确认.这增长了总体开销,影响了CPU和内存子系统的性能.
例如一台配置了两颗八核处理器以及128GB内存的服务器.在NUMA架构中,每一个处理器可以控制64GB的物理内存,每一个处理器的八个核心中的每一个核心将对应一个8GB的NUMA节点.这将会如何影响虚拟机性能?因为每一个处理器核心访问NUMA节点内内存的速度要比其余节点快,所以当虚拟机内存大小少于或者等于NUMA节点的内存大小时,虚拟机在理论上可以得到最好的性能.因此咱们在这台物理服务器上分配虚机时,不要给每台虚拟机分配超过8GB的内存.若是给虚拟机分配更多的内存,则虚拟机必然要访问其NUMA节点以外的部份内存,这样或多或少会影响其性能.若是应用可以感知NUMA,那就更好了.vSphere使用vNUMA能够建立可以感知NUMA的虚拟机.该虚拟机将会被分割为虚拟NUMA节点,每一个vNUMA节点将会被放置到一个不一样的物理NUMA节点.尽管虚拟机仍旧在两个NUMA节点之间扩展,但虚拟机内的操做系统和应用可以感知NUMA,资源使用将会获得优化.
NUMA已经对在数据中心服务器上安装及选择内存的方式带来了不少改变.在给服务器增长物理内存时,咱们须要注意增长的内存要在NUMA节点之间进行平衡及匹配以使主板上的每一个处理器拥有相同的内存.若是在咱们所举例的服务器上配置更多的内存,那么必须在处理器之间平衡这些内存模块.若是增长64GB的内存,那么每一个处理器将分配到32GB的内存(每一个处理器可支配的内存将增长到96GB,服务器总内存数将达到192GB),每一个NUMA节点的内存大小将从8GB增长到12GB.
结合VMWARE的最佳实践,VMware通常给CPU建议,最大支持64个vCPU,通常不超过32个,最好不要超配置;内存通常不给建议,根据不一样的业务对内存大小会有不一样的要求,固然最好不要跨NUMA单元去进行调用.另外还要注意一点NUMA架构只针对物理CPU(Socket),不针对核(Core).因为每一个Socket控制的内存插槽是不一样的,所以要确保内存插槽是均匀的.例如128G内存分为8个16G的内存条,那么应该4个插在一个Socket的内存插槽中,另4个插在另外一个socket的内存插槽中.在为虚机分配vCPU资源时,也尽量按照Socket/Core的倍数分配,好比1X1, 1X2, 1X 4, 1X8, 2X1, 2X2, 2X4, 2X8等组合,但不要使用2X3, 2X5, 2X7这种组合.后面的组合会引发跨Socket的内存调用,从而容易致使性能降低.
2.3 存储层面
从存储层面来讲,X86物理服务器上的VM链接后端存储划过来的LUN.在Lun上建立虚拟磁盘有三种方式:厚置备延迟置零、厚置备置零与精简置备.如图4所示.
厚置备延迟置零(zeroed thick)以默认的厚格式建立虚拟磁盘.建立过程当中为虚拟磁盘分配所需的所有空间.建立时不会擦除物理设备上保留的任何数据,可是之后从虚拟机首次执行写操做时会按须要将其置零.简单的说就是马上分配指定大小的空间,空间内数据暂时不清空,之后按需清空;厚置备置零(eager zeroed thick)建立支持群集功能(如 Fault Tolerance)的厚磁盘.在建立时为虚拟磁盘分配所需的空间.与平面格式相反,在建立过程当中会将物理设备上保留的数据置零.建立这种格式的磁盘所需的时间可能会比建立其余类型的磁盘长.简单的说就是马上分配指定大小的空间,并将该空间内全部数据清空;精简置备(thin)使用精简置备格式.最初,精简置备的磁盘只使用该磁盘最初所须要的数据存储空间.若是之后精简磁盘须要更多空间,则它能够增加到为其分配的最大容量.简单的说就是为该磁盘文件指定增加的最大空间,须要增加的时候检查是否超过限额.
另外thin provision格式在VM使用的时候比起厚置备格式也会有一些负面的性能影响.这是由于thin provision格式的磁盘是动态扩大的,一个数GB大小的vmdk文件在磁盘上不是一次生成的,所以不像厚置备格式的磁盘那样能够占用连续的磁盘空间,所以在访问thin provision格式的磁盘的时候,必然会由于磁头在不连续的磁盘块之间移动致使寻址时间较长,从而影响到Disk IO性能.
综上所述,不管是在部署仍是应用时,thin provision格式的性能都不如厚置备,因此在空间不紧张够用的状况下建议你们使用厚置备格式的虚拟磁盘.
3 结合业务如何进行x86虚拟化后的性能优化
例如一个linux下的postfix邮件系统,包含邮件服务器,数据库和网络.从磁盘看邮件系统的一个最大的问题是:不是不少大文件的读写,而是不少小文件的读写,并且这些读写请求是来自同一时间的多个进程或者线程.对这种不少小文件的读写应用服务,在分配邮件用户所在的磁盘时,建议使用Thin provision模式.这样既避免了初始空间的大量占用,也能够作到随需增加.
从内存上看,对于postfix而言,它的每个进程不会消耗太多的内存,咱们指望的是大量的内存被自动使用到磁盘缓存中来提升磁盘I/O速率,固然这个咱们不须要操做,linux帮咱们完成了!Linux虚拟内存管理默认将全部空闲内存空间都做为硬盘缓存.所以在拥有数GB内存的生产性Linux系统中,常常能够看到可用的内存只有20MB.从处理器上看邮件系统,无论是smtp、imap对CPU的占用都不是很大.这样咱们在分配CPU和内存资源时,就能够按照NUMA架构来配置固定大小的单元.好比一台配置了两颗八核处理器以及128GB内存的服务器,虚拟化成4台邮件服务器,就能够每台分配成4核32G.
从网络上看,邮件系统会频繁的使用网络子系统,可是邮件系统的瓶颈仍是磁盘的吞吐而不是网络的吞吐,对应这种应用不要求强交互,延迟是容许的,因此网卡是虚拟的仍是SR-IOV的影响都不大.
对于邮件系统的数据库服务器,由于小文件随机读写比较多,数据库的磁盘能够选择厚置备模式,提升小数据块的IO.
对于不一样的业务系统,具体的问题还须要具体分析,性能优化不是一朝一夕的事,随着业务的发展变化,优化的技术手段和方式都会相应的随之改变.
4 从企业平常使用和管理角度看x86服务器的虚拟化
不一样的企业级应用对于CPU和内存资源和空间的利用率是不一样的.如何利用NUMA架构来优化资源的分配和提升性能对于企业数据中心的管理也是很是有意义的.见表3。
对于数据库服务器,因为对CPU和内存资源要求较高,不适合多机共享资源使用,因此尽量使用配置较好的物理机,而对于VDI桌面、文件服务器则更适合NUMA架构下固定CPU和内存单元的分配,邮件系统则须要根据具体状况作NUMA架构的资源分配,对于随需变化的网站则不必定所有适合作NUMA,好比网站中的缓存服务器则更适合作非NUMA架构的内存分配. 在分配磁盘空间时,对IO性能需求比较大的业务系统,适合作厚置备的空间分配;对IO性能需求不是很高的、业务增加空间不是很大的业务系统,则适合作精简配置的空间分配.
5 结束语X86服务器虚拟化是一项用以整合服务器资源、提升效率的技术.X86虚拟化能够带来更高的服务器硬件及系统资源利用率,带来具备透明负载均衡、动态迁移、故障自动隔离、系统自动重构的高可靠服务器应用环境,以及更为简洁、统一的服务器资源分配管理模式.X86服务器虚拟化在资源划分后的性能优化也极大提升了数据中心的总体资源利用率,符合当今绿色节能的新理念.