IO性能分析 between 云主机 and 虚拟机

2019-08-12 11:47:42 6341

在计算机整体资源调度中,按响应时间由短到长排序是:CPU < MEMORY < HD & NETWORK。


这其中CPU的调度在多核模式下,除了单核内的软线程调度成本,还会有内核间的调度成本,但即使这样,CPU的计算传输速度远远高于内存和磁盘&网卡的传输速度,在转输速率方面通常是计算机整体系统中的性能上限,极少会成为瓶颈;


MEMORY的传输速率跟CPU一样,属于芯片级(和固态硬盘一样),虽然低于CPU但仍高于依赖物理寻址的磁盘和网卡;


接下来最慢的就是磁盘和网卡了,它们之间的排序在不同条件下会有不同的结果,比如单块低转速硬盘,要比千兆网卡慢,相反多块磁盘阵列或大缓存固态硬盘,要比百兆网卡快得多,所以两者的传输速率整体在一个等级,但不好分出绝对的高低。


基于以上,文章中提到的“性能衰减”主要针对的是IO(input / output 输入输出)成本,其实严格来说IO除了包括磁盘的写入读取和网卡的上下行,还包括打印机队列等等所有需要计算机等待外部设备响应的请求,但狭义上的IO,通常被开发人员理解为磁盘IO,以上文章中也是如此。


引用的文章中所阐述的一切事实,都只是基于“虚拟化技术”这个框架下的现实,这个框架常见的应用场景是公司自建机房的服务器资源分配,通常是以一台或几台“超级计算机”(物理机)为起点,像切豆腐一样一块一块的划分出若干个虚拟机,以支撑业务部门的需要。相比以往没有虚拟机技术的时期,现在的虚拟化技术无疑给IT支撑部门提供了更易管理更高效的解决方案,但相对应的,即文章中所述,不管虚拟出了多少个独立的操作系统,当软件需要IO资源的时候,能提供真正的IO资源的只有物理机当中的物理设备,比如它的硬盘和网卡。


举个例子,当一台超级物理机被虚拟成10台虚机,并且它只有一块硬盘,是单磁头的,那么当10台虚机上的软件同时要写入日志到磁盘的时候,以下的事情发生了:
1、虚机操作系统分别收到磁盘写入请求
2、虚机操作系统分别按请求寻找写入目标(通常是磁盘)
3、通过写入目标的驱动程序(通常由虚机宿主提供的假的磁盘驱动)将请求转交至虚机宿主
4、虚机宿主(通常是HYPER-V或VMWARE)同时收到10个虚机的磁盘写入请求
5、宿主软件将请求交给操作系统,操作系统分别向10个虚机文件(.vmdk)发起写入命令
6、宿主(物理机)高空空转的磁头开始“低空飞行”,在物理机的操作系统调度下,通过物理磁盘的驱动程序,向10个文件(.vmdk)写入数据。

       到此,经历一系列的转交请求,最终的请求到达了物理机的物理硬盘里的磁头上,如果这个物理机只有一块硬盘,且这块硬盘只有一个磁头,10个文件的同时写入是不可能的,操作系统会把10个同时产生的写入请求调度成10个串行执行的命令(磁头蜻蜓点水10次)来完成。


所以,以上引用文章中想说明的,就是这样一种场景,在虚拟化技术框架下,软件的IO性能确实相比不采用虚拟化,多出了很多虚拟化的工作,性能下降也不足为奇。


那么除了赞同文章中的观点以外,本文要说明的,是除了虚拟化技术以外,文章忽略了另外一个流行的应用场景,那就是随着云计算的兴起,越来越多的公司放弃了自建机房(传统虚拟化)的路数,开始了云主机之路,那么并行计算架构下会不会有IO性能下降的问题呢,我们先从并行云计算和虚拟化技术的区别开始。

虚拟化技术

通常是指一台超级物理机,通过虚拟化技术,分隔成多个独立操作系统但共享物理机硬件资源的虚拟主机。


主流的虚拟化软件有HYPER-V和VMWARE。


严格来说DOCKER也算是一项虚拟化技术,但它相比HYPER-V和VMWARE来说,并没有真正独立的操作系统产生,前者是操作系统级的虚拟化,而DOCKER是应用级别的虚拟化,理论上多个DOCKER实例仍然共存于同一个操作系统下,正因为如此,DOCKER的优势在于不必管理操作系统层面的问题,只关注应用级别的问题,所以才实现了轻量部署。


从性能方面来说,相比操作系统级的虚拟化,DOCKER在IO性能方面的下降分2种情况,如果是物理机中直接运行的DOCKER实例,应该与如上说的情形相似,会有类似程度的性能下降;如果是一台虚拟机中运行了DOCKER实例,那么当DOCKER里的软件产生了IO请求,这种情况的性能下降只会比前述多,不会比前述少,因为中间除了虚机软件的调度,又多了一层DOCKER容器的调度。


综上,传统虚拟化技术相对比较成熟,是以切割物理机的硬件资源来产生多个独立操作系统的虚拟机的技术。
 

并行云计算


近些年随着OPENSTACK等开源云计算框架的兴起,使得虚拟化技术有了进一步的发展,主要体现在由分享一台物理机的资源来产生新虚机,转变为整合多台物理机的资源来产生新的虚机。说人话就是,传统的虚拟机是以一台超级物理机为基础来切割,而并行云计算是整合多台参差不齐的物理机共同为基础来切割。


变化简单明了,但意义非凡。它意味着以独立计算机为单位的并行计算成为了现实,人们不再追逐性能优异的单台物理机,转而利用起一切可以利用的老旧计算机来加入云计算行列,将传统的单机虚拟化技术进化成了跨物理机的整合虚拟化。
 

云主机会有虚拟机中的IO性能下降问题吗?


正如云计算的特点,是由多台独立的计算机参与到并行计算中,来统一产生若干个虚拟的云主机,所以云主机的IO瓶颈除了取决于性能配置以外,还取决于云中组成它的真实物理机的数量。跟传统虚拟机相比,虚拟机的上层只会有一台物理机,所有虚机的IO请求都要依赖这一台物理机的资源并互相竞争;但云主机不同,如果一台云主机的背后是由N台物理机虚拟化而来,那么云主机的IO请求会同时分配到N台物理机同时执行,对于一个大的磁盘写入动作来说,背后的N台物理机会各自写入完整内容的其中一段,是真正的并行,是不存在虚拟机的IO性能下降问题的。当然也有一种情况,就是一台云主机背后,只有一台物理机在支撑它,甚至这一台物理机同时也在扮演别的云主机背后的角色,那么这种情况下,IO的性能下降将与虚拟机类似。


虚拟机=1(物理机)对多


云主机=多(物理机)对多


云计算架构虽然也会产生虚拟机资源单一分配的情景,但概率极低,至少它给了我们另外一种可能,当背后有多台物理机支撑时,云主机的IO瓶颈是不存在的。

总结


并行云计算其实是传统虚拟化技术的一个向上的演变,由资源向下分配的一对多的架构,演变成了向上多对多的架构。云的伟大就在于此,利用多个设备共同参与计算,不再是单台切割,而是整合后再切割。早几年热度很高的超级计算机,用现在的并行计算思维来看,是不必要的,但也许彼时的超级计算机的架构正是当今云计算架构的雏形,不晓得了。总之单从IO性能下降这个问题来说,云主机大概率是不存在的。



提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: