大多数磁盘阵列都是通过两个控制器后端的端口,组成1/2/4条FC-AL环,来连接所有磁盘。FC-AL仲裁环的协议规定,同一时刻只有两个设备能传送数据,也就是说,在一条FC-AL环里面,控制器的一个后端端口充当了发起者的角色,环上的一个硬盘充当了目的地的角色,在一个时刻里,后端端口发出数据读写指令,只有一个硬盘能响应这个指令并传输数据。那是否就意味着,一条FC-AL环的总体性能,取决于一个硬盘的读写性能?15K转速的硬盘,持续读写带宽不到70MB/S,IOPS不到400。那像IBM DS4800、EMC CX-80之类的,总共4条环,后端的性能岂不是只有280MB/S、1600 IOPS?除了以阵列里CACHE来提高速度,或者还是磁盘阵列内部采用的不是工业标准的FC-AL?
一个磁盘读写数据的时候,其他磁盘也可以在读写数据,怎么说呢,al是一个共享的环,就和hub一样,是一个共享的总线。当然同一时刻只能由两个设备进行p2p通信,但是一个时间段内,就表现为多个节点之间都可以通信,也就是不是说一段时间内都是由某个节点占用,这样当然速度慢了,而是几个节点轮流交替传输,机会均等,那么这样磁盘上的缓存速度就表现出来了,也就是磁盘总是以缓存的速度向外发送数据,这样整体表现出来了一种高速度。如果总是给一个节点占用长时间,那么缓存必将挖空,此时就要到读盘取数据,这样造成了环等待,当然不会允许这种情况了。这个问题可以用hub的环境进行模拟分析,都是类似的,只不过hub是总线,fcal是令牌环而已。那么假设有一个10Mhub接了10个节点,每个节点的网卡都是10M速率,那么每个节点是否必须每次每秒都发10Mb的位流呢?当然不会总是满带宽发送。就算各个节点都满带宽发送,此时因为总线竞争,对外流量最大也将是10M,同样fcal对控制器流出的bit流每秒最大也是2g或者4g,也就是250MB和500MB,当然这是竞争型介质的通病,不管多少节点,带宽都是共享的。控制器在环中优先级最高,他发命令的时候,大家都要等待,此时控制器可以向多个节点发命令,一个节点在寻道的同时,另一个节点可能在传输数据到控制器,如果楼主说的70M磁盘流量,是算上缓存的,那么后端确实速度很慢,这个问题我也搞不清了,是否有其他没注意到的地方。
本身而言,阵列都有自己的cache,不同的阵列的cache计算方法是关系到阵列性能的主要因素,如果单纯考虑磁盘的话,一个磁盘的iops也只有小小的400不到,这样计算的话,你几块磁盘怎么能到那么高 的iops呢?
某位业内资深人士这样说:研究表明,当50~60颗磁盘连接在一个光纤环路上的时候,光纤通道基本达到性能上限。也就是说,当一个光纤环路连接的磁盘数量少于50的时候,最大性能由盘体决定。而当磁盘数量超过60时,所有磁盘的总体性能就基本等于此光纤通道的最大性能。注意,是一条光纤通道的最大性能!环路连接方式不仅拖累了光纤通道磁盘系统的性能,也影响了系统扩展能力。光纤通道协议规定,每个环路最多可以连接126个设备。这其实也是一些中高端磁盘阵列厂商拼命增加环路数的原因之一,否则怎能推出那些动辄支持数百上千颗磁盘的系统呢?
这个结论一直为大家所用,但不够详细,“当一个光纤环路连接的磁盘数量少于50的时候,最大性能由盘体决定。” 那么,5块磁盘的时候性能是多少?10块呢?我猜,50-60这个结论,主要是由于FC-AL环每传输一个硬盘上的数据,都必须把数据传完整个环,每个节点都过一遍这个数据。硬盘数量少的时候,还没什么影响,随着硬盘数量达到一定程度(50-60),这个过程对性能就有严重的副作用了,所以各个厂商都说一条FC-AL环支持56块硬盘。像IBM DS4300、EMC CX300最大支持56块硬盘,很明显后端只有一条环。有的磁盘阵列最大支持112块硬盘,那就是有2条环了。如果去到224块(所谓的中高端好像都这个数吧),当然,4条环。
如果,任何磁盘阵列只有WRITE CACHE是可以被DISABLE的.FC-AL下磁盘速度是瓶颈之一,磁盘数量过了一个标称数后(一般是到了各产品的EXTENSION BAY),前台响应速度开始下降,IOPS倒是增加的.就像一辆大卡车,以前拉1-10个人,速度快,LOAD不行,现在拉100人,速度慢了,但LOAD上去了.曾经测试中发现阵列CACHE被最小化后,完全在磁盘速度运行,ORACLE9iHANG住.现在业界的主要产品都是一个FC-AL上双控制器,各管一半,来增加"拉力",并提供冗余.磁盘的旋转速度还是非常重要的指标. 在Initiator和硬盘间瞬间最大速度就是一个硬盘的cache速度,那整个loop的速度大概是多少呢,每个loop的理论i/o峰值是 40,000,实际使用的时候loop上磁盘的数量和loop的长度(xKM)都会影响Bus利用率,每个数据传送过程包括4个阶段 arbi,open,transfer,close, 所以这存在一些开销,其他还包括loop上设备数量增加的传输延迟开销以及loop长度造成的延迟测试结果:1G loop的实际极限速度大约在80-100MB/s左右,使用顺序+cache,写一般应该比读还要慢一些,因为写比读要多一点操作,多占用bus时间;2G的大概在180MB/s左右,交换机观察速度应该在200MB/s。
FC-AL上的所有磁盘都是并发读写的, 并不取决于一块磁盘的速度.当磁盘数量足够,即使磁盘的缓存关闭,瓶颈也在FC-AL上.所以FC-AL的阵列磁盘缓存应该关闭.FC-AL上的磁盘(JBOD/MBOD)不是并发读写的,而是顺序读写,但是因为一般完成一个操作的单位一般都是ms级别的,所以集合起来看,在一个时间段内(比如1s/1m),可能会有多个磁盘和HBA进行了通信;ANSI的FC-AL的文件里很清楚的写着:There can be only one active Loop circuit at a time, independent of the number of L_Ports on a Loop. Only one pair of L_Ports may communicate at one time although there may be up to 127 Participating L_Ports attached on one Loop. All other communication must wait (i.e., is blocked).所以还是看应用类型和磁盘数量,有可能瓶颈在FC-AL上,也有可能在磁盘数量上;看看qlogic的白皮书带的测试报告就知道了 2G 和 4G HBA的比较
磁盘缓存关闭
-->磁盘最高性能:70MB/S,400 IOPS
FC-AL一个时刻只能读写一个磁盘
-->一条FC-AL环最高性能等于磁盘最高性能:70MB/S,400 IOPS
一个磁盘柜连2条FC-AL环
-->配置一个磁盘柜,最高性能:140MB/S,800 IOPS
一个中高端磁盘阵列最多有4条FC-AL环
-->磁盘阵列最高性能:280MB/S,1600 IOPS
如何提高性能:
1、打开磁盘缓存(单个硬盘利用缓存可以达到200或400MB/S,相信厂商公开测试都是这样设置的),但是需要加UPS
2、不用FC-AL,用FC-SW(像DS6800似乎就是这样,难怪它定位比DS4800高)
购买了DS4000、CX、EVA、AMS之类的朋友们可以看看,你的磁盘阵列是否用了UPS?
盘阵设计时候就考虑到了,所以盘阵cache在断电后可以写回磁盘,所以单个磁盘上的cache,可以不用保护,因为磁盘都是在磁头真正写盘成功后,才向控制器返回success,断电情况下,丢了也就丢了,也就是说上层应用回有反应的,提示你此操作未成功。当然盘阵的cache如果设置成write through,当然也可以不保护。还有,可以做一个推断,当环上的磁盘数量比较少的时候,如果关闭磁盘cache,性能会非常差,因为环总是在等待磁盘的寻道。但是如果磁盘一多,cache的作用就显示不太出来了,因为控制器轮询磁盘,其他磁盘有时间进行寻道,写,等操作,但是关闭cache还是一个愚蠢的做法,因为控制器不可能每次都轮询所有磁盘,除非你做了raid0条带,或者raid3这种raid。
关闭磁盘的缓存会影响一些性能,但是不关闭则会影响数据的安全.一般来说,盘阵的cache收到hostdata,它就返回success,然后在后台flushdata,当磁盘的缓存收到data,它就会返回Success.盘阵收到sucess,盘阵的cache就free了.如果这时候掉电,data在磁盘的缓存中就没了。Scsi命令 cdb[0] = 0x2a 写命令. cdb[1]有一位Force Unit Access,FUA为1,磁盘缓存关闭,write through. FUA为0,磁盘缓存打开,write back. 所以每一个写命令都可以选择writethrough or write back.。其实磁盘里面的缓存,相对于控制器上的大缓存,它对于效率性能的提高不是这么重大;也许,它而对于弥补磁盘机械操作而导致的性能瓶颈,作用更大!
磁盘缓存(cache),通常有如下作用:1)prefetch(预读),通过预测提前读取盘片数据到cache,从而减少机械读写磁盘的频度。2)缓存数据,将数据暂存到cache中,然后在某个时间时批量的写入盘片,这在提供Queue能力的磁盘中用的相当广泛;当然,这会带来安全隐患,就是突然掉电丢失数据的问题,对此硬盘厂商会将缓存数据写入到某个暂存区域(即使掉电数据也不丢失),等下次启动时再将它写入cache。3) 用于LRU算法中,可以将频繁访问的数据暂存起来,提高I/O的命中率。 现在磁盘缓存的大小通常为2MB和8MB,在服务器或者特殊领域,甚至达到16MB、64MB等。 理论上,缓存的容量越大,性能应该越好;但实际上,缓存的算法设计才是真正的核心,只有在硬盘的Firmware中采用高效的算法才能保证更好的性能。 至于数据的可靠性,单单磁盘是不能全部cover的!从而才基于磁盘的RAID技术,基于控制控制器的NVRAM,基于路径的Multipath,基于主机和应用的Cluster,基于数据库操作的Transaction....
其实,我认为在磁盘阵列的中阵列的cache的作用已经取代了磁盘的cache。因为,在阵列中所有的磁盘都是以raid方式出现的。而作为raid的控制方式,和cache是在阵列的cache上工作的。由于磁盘阵列中的磁盘的工作方式并不是以单一磁盘的方式进行工作的。所以,在考虑阵列的性能的时候,还是以阵列的cache和FC-AL来决定磁盘阵列的性能。
阅读(2702) | 评论(0) | 转发(0) |