请选择 进入手机版 | 继续访问电脑版
祥瑞科教交流中心 首页 文章 查看内容

虚拟盘终极教程连载(共11篇)—-第7到9篇(让你深刻理解硬盘原理和性能)

2019-5-19 21:13| 发布者: 祥瑞| 查看: 190| 评论: 0

摘要: 第七篇:虚拟盘的负载能力:上篇虚拟盘的速度实测由上一节,我们得到一些基本的结论,在虚拟盘读取的所有环节里,硬盘是速度上的最大瓶颈,所有其他的因素,包括网卡,网线,交换机,软件性能,操作系统平台等等,它们加起来 ...
第七篇:<虚拟盘的负载能力:上篇>由上一节,我们得到一些基本的结论,在虚拟盘读取的所有环节里,硬盘是速度上的最大瓶颈,所有其他的因素,包括网卡,网线,交换机,软件性能,操作系统平台等等,它们加起来所造成的延迟不到硬盘的1/10,所以,要提高虚拟盘最终读取速度的关键就在于硬盘.
我们来看一个典型的测试,在客户机上,用HDTUNE对虚拟盘进行随即读取测试.我们用内存进行读取数据的缓存,这样测试到的数据全部是从服务器中的缓存发出的,结果如下:

结果可以清晰的看到,在64K区块测试的时候,延迟1.2毫秒,是sata硬盘的1/10,同时流量也达到了53.6MB/S,这个速度是普通的SATA硬盘绝对无法望其项背的.是SATA硬盘的10多倍,是SAS硬盘的5倍,已经非常接近于固态硬盘的读取速度了.

虚拟盘有多少的负载能力呢?
要回答这个问题,我们先讲几个概念,如果不能明白这几个概念,那就难以理解整个体系的奥秘所在.

基本名词解释
什么是缓存?
在网维大师的虚拟盘中,会将部分物理内存用于存储最常被读取的数据,当客户机请求读取数据时,服务器会先在这些内存中进行寻找,如果在内存中有这些数据,则直接由内存发出,只有内存中没有该数据,才会去硬盘中读取.

什么是缓存命中率?
是指所有服务器发出的数据当中,有多少比例的数据是从内存中发出的,越高意味着性能越好. 比如50%的命中率意味着,每从服务器发出100M数据,其中50M是从内存中发出的,只有50M是从硬盘中发出的,这就意味着与不使用缓存的服务器而言,我们服务器的负载能力扩大了2倍.

如何提高缓存命中率?
要想得到一个较高的缓存命中率,首先得有一个好的缓存算法,有了好的缓存算法能很大的提高命中率。其次,就是装上尽可能多的内存。

网吧中的真实负载情况

要想明白一个虚拟盘服务器到底能带多少机器,首先得知道负荷会有多大,在一个典型的中型网吧里,装了1.8T的游戏,究竟在营业的时候,会读取多少的数据呢?这是很关键的问题,不知道朋友们是否认真的研究过这个问题,但是至少我在做这个测试之前,我还真的不知道这个准确的数字.

好吧,我们来看看这个测试,这个测试网吧是个典型的中型网吧,机器110台,来的客户有学生,有民工,还有些上班族,生意一般,不好也不差.我们将所有的游戏均部署在虚拟盘上,统计了2天的数据. 注意:是所有1.8T的游戏,在客户机的本地硬盘上,一个游戏都不装!

2天内所有的游戏读取数据量为448G.
根据收费系统的统计,2天内所有的客户机在线机时总共为1730小时.
这样计算下来每秒每客户机的流量为: 448G/(1730小时*3600秒)= 75K/S
后来我们也测试了一些其他的网吧,虽然不同的网吧,不同的玩家行为会造成一些差异,但是大体上结果是相似的.

传统的虚拟盘的负载能力

根据上述的一个网吧用户平均读取流量,我们就可以评估一下,传统的虚拟盘的负载能力.
我们考虑一个简单的模型,假设这个传统的虚拟盘服务器,只有一个希捷7200.11硬盘,同时没有任何缓存机制,这种情况下,我们简单的算一下,这个服务器能带起多少机器.
对这样一台服务器来说,因为硬盘的随机读取的能力仅为4MB/S, 网络和其他因素应该可以轻松的达到4MB/S的能力,因此我们完全可以认为该服务器的性能瓶颈集中在硬盘上.
按照4MB/S的硬盘能力,我们计算硬盘的极限承受能力:
4M(硬盘随机性能)/75K=54台.
意思就是说,按照75KB/S的平均读取需求,该服务器的硬盘最多能承受54台机器在线.
实际上,为了应付突发的情况,我们应该为服务器留点余量,不能让服务器总是工作在满负荷情况下,假设按3倍的余量计算:
54/3=18台.
结论:这样的虚拟盘服务器,在18台机器的负载情况下,大部分的时候,性能和本地硬盘相当.这样的结论和我们经验值是比较接近的.在实际网吧应用当中,我们是不敢将所有游戏都部署在这台机器上,这点负载能力,太不够用了,那么,怎么办呢?

89楼的朋友在看到第六篇的时候,已经给出结论了,要提高虚拟盘的性能,出路就2个: 一个是用固态硬盘,二是用高内存做缓存,但是这两种办法都是非常昂贵的手段,网吧花的起这个钱吗?

我的办法就在下一篇: 第八篇:<虚拟盘的负载能力:下>
未完待续

第八篇:<虚拟盘的负载能力:下>

神奇的2/8原则

首先,我来解释一下什么2/8原则.
二八原则是19世纪末20世纪初意大利经济学家帕累托提出的,这个原则很简单:
任何一组事物中,最重要的只占其中约20%,其余的80%虽然是多数,但是却是次要的。
比如:
  80%的销售额是源自20%的顾客;

  80%的电话是来自20%的朋友;

  80%的总产量来自20%的产品;

80%的财富集中在20%的人手中;
非常简单的一个原则,但是现实生活中,你会发现这样的规则几乎是无所不在的.
基于2/8原则,在虚拟盘的应用上,我们可以引申出内容分级存储管理的概念.

什么是内容分级存储?

是指我们将所有可以用来存储内容的介质,按照性能的不同,分成多个级别,在进行存储的时候进行优化选择,将最常用的数据存储在性能最高的介质中,依次类推,将最少用到的数据存储在最廉价的介质上,实现速度和容量并重,同时造价尽可能的低廉.
根据2/8原则.80%的顾客只玩20%的游戏,那么我们只要把这20%的游戏搞的很快,就能满足80%的顾客需求.这点,可以根据网维大师上的DP值排行就看的出来.
再根据2/8原则,大部分的游戏,在80%的运行时间里,往往只读取其中20%的数据.这一点有根据吗?有,好好的观察一下,我们会得到这么一个结果:
魔兽世界这个游戏虽然有10来个G,但是进一次游戏,从启动图标开始一直到游戏画面中,需要读取多少数据呢?
答案是:只要200M!在游戏里玩上1-2个小时,总共读取的数据也就500M而已!
XP装完要至少1.5G,但是启动一个XP到桌面,需要读取多少数据呢?
答案是:只要250M!

同样的例子还有很多,我们对市面上几个常见的游戏均进行了测试,结果如下:
永恒之塔 500MB
穿越火线 600MB
QQ飞车 95 MB
反恐OL 240 MB
QQ炫舞 200 MB
QQ三国 100 MB
天龙八部 130 MB
魔兽争霸3 100 MB
梦幻西游 30 MB
诛仙 100 MB
QQ寻仙 470 MB
传奇 50 MB

魔兽世界 200M

除了穿越火线,QQ寻仙等几个腾讯出的BT游戏之外,大部分游戏需要读取的数据都非常的小.在实际游戏过程中也是一样的,除了切换地图,绝大多数的时间,游戏基本都不读什么数据的.

结论就是,尽管游戏容量非常之大,但是其中经常会用到的数据其实非常非常少.

根据上述分析,我们的答案就很简单了.

目前的常见介质的特性如下表所示:

内存是性能最好的存储介质,那么我们就应该将最常被读取的数据放在内存里.
其次固态硬盘也是非常好的介质,那么我们就应该将最热门的游戏放在固态硬盘里.
…………………………………
最后,SATA硬盘容量又大又便宜,那么我们就把那些最冷门的游戏放在SATA里.

内容分级存储的典型应用

来看看上次网吧流量测试当中的服务器截图.

0909130234bfe1de42a4a3bdeb

这就是非常典型的内容分级存储的案例.
服务器内存共8G,我们拿出了7G内存用作虚拟盘缓存,游戏放在3个硬盘上,G盘为120G的固态硬盘,H盘和I盘是普通的希捷11代的1T硬盘,安装游戏一共1.8T左右.
根据上面这个图,我们看到了什么结果呢?
1)
7G的内存,产生了平均74%的缓存命中率.就是说,虚拟盘74%的负荷被内存解决了.
2)
放在固态硬盘上的100G游戏,被读取的数据量为86616M,这个数据量是所有硬盘读取数据量的86/(86+22+9)=73.4%
3)
H盘和I盘,2个硬盘读取的数据总量相加,只负载了整个虚拟盘负荷的7.1%

结论:在这个服务器上,我们成功的利用了2/8原则,以7G内存和100G固态硬盘的代价,解决了虚拟盘服务器中93%的负载.这93%的数据,有着比本地硬盘快的多的速度,剩下那7%的数据,也拥有和本地硬盘相近的速度. 这就是分级存储的惊人效率!

这个案例非常完美的解决了虚拟盘的速度问题,那么负载能力会成问题吗?

内容分级存储服务器的负载能力

这么一台典型的,采用了分级存储的服务器,能负载多少的机器?
还是采用上面的分析方法,先找服务器瓶颈.
服务器的瓶颈有可能存在这些方面:
1.
CPU
2.
网络(包括交换机,网卡,网线等)
3.
软件(虚拟盘软件,WINDOWS操作系统本身)
4.
各个硬盘
仔细分析一下:
1.
CPU:以酷睿5200这样CPU来说, 在绝大多数时候,CPU占用不超过10%,所以CPU不会成为瓶颈.
2.
网络:前几篇的分析结果至少说明,单个网卡输出50MB/S是没有任何问题的,那么如果流量不超过50M,网卡也不会是瓶颈.如果超过50M,我们还可以通过多网卡绑定,汇聚,分流等方式来解决.事实上我们测试网维大师的虚拟盘服务器上网卡是可以输出90MB/S以上的.所以,网络也不会是瓶颈.
3.
软件:,网维大师在WIN2003上可以输出200MB/S以上的速度(多网卡情况下),同时,网维大师的新虚拟盘可以同时负载上千个连接,所以这个也不是瓶颈.
4.
硬盘:固态硬盘的负载量是SATA硬盘的爱生活 爱顺网倍,按照SATA硬盘4MB/S的性能,那么固态硬盘性能只要超过4*爱生活 爱顺网=30MB/S,那么固态硬盘就不会是瓶颈.根据前几节的测试,固态硬盘的随机读取能力可以达到100MB/S以上,所以SATA硬盘还是瓶颈.

结论:如果网络没有大问题,如果我用多个网卡分载,那么这个虚拟盘的瓶颈仍然是SATA硬盘,如果客户机不断的增加,在其他部分出问题之前,SATA硬盘已经顶不住了.那么我们就只要计算一下,SATA硬盘在这个案例中的极限负荷能力就行了.

还记得上一篇中,我们计算的传统虚拟盘的负荷能力吧?
单硬盘的负荷能力为18台机器.
这个服务器有2个SATA硬盘,,那么就能负荷36台.
这2个硬盘负荷的数据量为总数据量的7%,那么该服务器的负荷能力为36/0.07=517台!
就是说,当客户机达到517台时,2个SATA硬盘的负荷能力达到极限.
这还是留了3倍性能余量的结果!
就算是真的达到517台客户机,Sata硬盘到达阀值,受影响的也仅仅是7%的数据,另外93%的数据仍然流畅无比!
这,是真的吗?

如果你仍有怀疑,那我们反过来再算一次.看看517台客户机的时候,工作情况是怎样的.

每用户平均流量为75KB/S

那么500台客户机在线时,总平均流量为75*517=38.4MB/S

我们留出三倍余量,突发速度就是38.4*3=115MB/S

那么我们用两张网卡分流就完全可以应付!

这115MB/S的流量,内存缓存掉74%,还剩下:115*26%=29.9MB/S

这29.9MB/S的流量,固态硬盘分掉73%,还剩下:29.9*27%=8.07MB/S

这8.07MB/S的流量,2个SATA硬盘平分流量,刚好是SATA硬盘的极限.
现在,我的朋友,您还有怀疑吗?
那么,我再安全一点,考虑到用户太多以后造成的突发情况可能会更大,那我不留3倍余量了,我留5倍的余量,让这台服务器去带300台机器.
就这样,只带300台,您放心了吗?您敢带吗?
我敢!我在5月份的时候,在我自己的网吧里,就用这么一台机器带了275台客户机跑所有的游戏!很流畅,很舒服,很安心! 一直到8月底,现在,我有了更好的方案.才把这台服务器换了下来.

这一篇的最后,我们来算个帐,这么一台可以稳定的带300台机器的虚拟盘服务器,装了1.8T的海量的游戏,还能让你的顾客在93%的时间里,都能感受到本地硬盘还要快的速度,这个机器要多少钱呢?

主板:intel3000 (1200左右)

Cpu:酷睿5200 (420左右)

内存:DDR II 2G*4 共8G (600左右)

硬盘:OCZ 120G固态硬盘*1 (2000左右)

希捷7200.11硬盘1T*2 (1400左右)

机箱,电源等 (500左右)
-----------------------------------------

总计:6120元

一些结论和建议

1.
在我们的方案中,内存是最最最最最最值得去投资的部分,想要虚拟盘性能好,无论如何请尽可能的加大服务器的内存数量,4G是最起码的,一般达到8G才会开始产生质的飞跃.如果你的老板真的很穷,穷到连8G内存都买不起的话,请告诉他,把服务器机箱卖了吧,宁可让服务器裸奔,也要加满内存!
2.
不要迷信SAS硬盘,把买SAS硬盘的钱换成内存吧!1个300G的SAS硬盘要1500块,把它换成10G内存,效果会好10倍!
3.
网维大师的虚拟盘程序足够稳定,区区500台机器搞不垮虚拟盘.
4.
除了最热门的100G游戏,其他2T的游戏只要用SATA硬盘就足够了,看见有人用SAS300G硬盘*6的方案,我的心在滴血,为网吧老板滴血!
5.
缓存命中率决定了虚拟盘的速度以及负载能力. 是虚拟盘中最有价值的指标. 命中率取决于算法和内存大小,基于网维大师及其优秀的缓存算法,剩下唯一要做的,还是那件事情:不顾一切的增加服务器的内存吧!
6.
一般建议使用内存+小容量固态硬盘+大容量SATA硬盘这样的组合方式.大家也可以根据自己的喜好来自由搭配.内存和固态硬盘的效果是非常好的,但是既昂贵,容量也有限,我们不可能把所有的游戏数据都放在里面,我们要做的,就是要把最常用的数据放在内存中,次常用的放在固态硬盘里,不常用的数据放在SATA硬盘里.这就是所谓的分级存储管理.

这一篇的最后,我提一个问题吧.
这样的方案已经是最好的方案了吗?
我的答案是:NO!
下一篇,我来讲讲另一种更有意思的方案.

未完待续

第九篇:<终极的虚拟盘方案>

因为前段时间本人的硬盘坏了,结果辛苦积累很久的数据和文章一起报销,文章可以重新写,但是收集那些数据确实太过麻烦了.下了很久的决心,终于决定重新开始写吧,因此续文这次拖了这么久,内心非常的愧疚.闲话少说,就开始正文吧.

在前几篇文章中,我们已经将虚拟盘中的几大因素都做了一些剖析,我们提出了分级存储管理的方法,用来更有效的提高虚拟盘的效能,以及有效的控制成本.
内容分级管理中最重要的因素是内存,常见的服务器多数只支持到8G左右,在8G内存情况下,缓存的命中率一般都在70%-80%左右,我们也知道,如果命中率越高,那么虚拟盘的效能和负载能力也就越高,那么,如果增大内存,最终我们会得到什么效果呢?
理论上,愈大的内存,缓存命中率就会越高,但是命中率和内存大小并非是线性的关系,当内存大到一定程度以后,就渐渐的失去了性价比. 那么,多少的内存数量是合适的呢?

为了得到答案,我采购了一台拥有64G内存的服务器.先介绍一下这个服务器.服务器主板是泰安的S5397,拥有16个内存插槽.CPU是志强E5405.
服务器安装了16根4G一条的FBD内存,看以下截图:

0910181505b2e32f3b74c19288

志强E5405的CPU,64G内存,win2003 sp2(32位)版本

091018150593ff024c7bb3ba37

Everest中,可以清楚的可以看到16条FBD内存,我们选取了其中8条来监控内存温度,显示在系统的右下角,温度一直在60-70度之间.对这个服务器来说,内存散热是非常关键的问题,在室温下,这堆内存能在3分钟之内迅速达到90度以上的高温,这是非常恐怖的,最后我们找到了2个12寸的暴力风扇直接对准内存猛吹,才最终将温度降到70度左右.

091018150500ab04d15ff02e8f

在网维大师虚拟盘服务端上设置了60G的内存缓冲,系统还剩余4642M内存.服务器上只安装了一个游戏盘,容量为1.5T的希捷11代盘.把游戏拷满.
我们来猜一下,这样命中率能到达多少?
(说明:这组数据我不太满意,因为第一天的时候做了大量的虚拟盘测试,从而多读了很多的硬盘数据,在后来的测试中,命中率比这个高很多,但是后来积累的数据遗失了,我们以此为例,道理是一样的.)
第一天:

091018150531c5e03cc81dd171

发送数据150G,硬盘读取数据15G,因为缓存设置了60G,所以这15G数据全部被缓存.但是命中率只有89%,因为:不管内存多大,第一次读取总要从硬盘读吧!

第四天:

0910181505ffad93251231c669

第四天:发送数据494G,硬盘读取数据26G,没有超过60G,所以这26G数据全部被缓存.命中率提高到94%.

第六天

091018150511708509aa2e849e

第六天:发送数据800G,硬盘读取数据33G, 没有超过60G,所以这33G数据全部被缓存.命中率提高到95%.

第十天:

09101815057a75600c5ca1d113

第十天:发送数据1387G,硬盘读取数据45G, 仍然没有超过60G,所以这45G数据全部被缓存.命中率提高到96%.
我们用HDTUNE来观察硬盘的运行情况,如下图所示,硬盘在多数时候都是完全空闲的状态.

0910181505b3b92c0d6bde6542

除了第一次访问必须读取硬盘,以后所有要用到的数据都是从内存中发出的,如果排除掉第一次读取,其他的缓存命中率几乎是100%,对这种超级服务器而言,唯一的瓶颈只是网络了,只要网络占用不超过2G(使用双网卡绑定),这个服务器不会感觉到有任何瓶颈,多少台机器都带的起,带的快!

综合以上数据,结论就是,网吧中那么多游戏里,那些需要被读取的数据仅仅不超过50G,而常常被读取的数据,也许连30G也不到.相信如果你有机会配置32G内存的服务器的话,除了第一次必须读取的数据,应该就可以获得近乎99%的命中率.在这种命中率下,任何硬盘都是可以胜任的,什么SSD,SAS统统靠边站,我只要最廉价的SATA就够了,内存大才是王道!

下一篇:选择合适的服务器


鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论