存储 频道

专家博客:用RAID实现非常好的存储性能

  例如,如果文件系统分配是64KB,而RAID 5 8+1条带是512KB,同时多个文件正在被写入,那么大多数RAID控制器做的就是读取你所请求的数据,在这种情况下是64KB,也许还有64KB,而如果你再次顺序读取,经常会是整个条带。另一方面,如果你只是读取一个64KB的块,而剩下的条带有来自其他文件的数据,那么先读取这种方式只会给性能带来不利影响。你要将RAID条带和文件系统分配进行匹配,同时要知晓有多少个文件正在被同时写入,这样你才能很好的理解先读取对你的系统所可能带来的影响。知道这一点可以让你理解一些在RAID上进行先读取调整的方法。

  后写入--将块读取到高速缓存以便写入--如果被写入的数据符合RAID的条带值,那么后写入这种方式有很大的好处,因为它在数据到达高速缓存的时候就可以让写入者确认写入。这里的关键是数据必须匹配RAID条带。如果不匹配,那么RAID控制器必须进行读取修正写入(读取进入条带,根据新数据进行修正,然后再写入条带),这种操作会带来更大的系统开销和延迟性。这种情况下RAID高速缓存的作用是隐藏数据写入到磁盘的延迟性并在数据到达高速缓存的时候就马上显示写入。针对后写入的调节经常涉及到需要为写入分配多少高速缓存空间,以及可以被读取或写入的最小高速缓存块大小。

  调节RAID高速缓存块大小

  高速缓存块大小是数据可以被读取到高速缓存的最小大小。例如,磁盘上的RAID分配是32KB,那么你可能认为磁盘上的所有I/O都是32KB,但如果高速缓存块大小是4KB,那么读取和写入磁盘的最小大小就是4KB,只有磁盘上的八分之一大小。如果你的文件系统分配和写入请求比较大,那么小的高速缓存块大小可能会降低RAID的性能,因为我所看到的RAID在碰到小的块的时候都会变得比较慢--RAID没有足够的CPU资源来管理所有的块。随着下一代RAID拥有更强劲的CPU,这种情况可能会慢慢消失,不过,如果数据和单个磁盘内的RAID分配不匹配的话,设置小的高速缓存块还是必要的。

  如果你写入小的请求而读取大的请求,而且文件系统分配和RAID条带一样大,那么在多个写入进行顺序分配的时候文件系统或许不会那么碎片化,同时先读取这种方式可能比较好。另外,如果写入比读取大的话,先读取也是有用的,因为所有的RAID控制器可以按顺序看到小的读取。因此,在调整写入的时候,你需要理解读取请求相对于写入请求的大小,并决定有多少文件被同时写入。如果答案是每次进行一个写入,那么除非文件系统碎片化,数据很可能是顺序分配的,这种情况下先读取可能带来很大的好处。另一方面,如果有多个文件被写入,同时写入大小和文件系统分配小于条带大小,那么先读取的价值就比较小,甚至没有用。总而言之:如果多个文件同时写入,只有在写入大小和文件分配等于或大于RAID条带大小的情况下先读取这种方式才有用。

  调节针对镜像的高速缓存

  许多中端RAID控制器都有高速缓存镜像功能,在企业级控制器中,所有的写入都被镜像。控制器获取I/O请求后将请求写入到另一半高速缓存以防备正在写入的控制器的部分发生故障。如果数据和全条带匹配,一些厂商有技术有办法越过写入高速缓存镜像要求,不过,在使用写入高速缓存镜像的通用环境下,每个写入请求都被写入到高速缓存,然后在I/O请求得到确认之前写入到另一个高速缓存。写入高速缓存镜像因此通常会拖累性能,因为写入到另一个高速缓存会带来延迟性和带宽要求,同时每个高速缓存必须作为另一个高速缓存的镜像,因此你的可用的高速缓存空间因镜像而减少一半。

  如果读取和写入高速缓存有可调节的参数,那么你可以根据工作负荷和可靠性要求调节这些参数。我经常听到的问题是用户应不应该使用写入高速缓存镜像。答案取决于你需要多高的数据可靠性。比如说你写入一个文件,将数据写入到没有进行写入高速缓存镜像的系统。同时,控制器的整个后端(从高速缓存到磁盘)发生故障。这时候,你的应用程序被告知写入已成功,但是数据实际上没有到达磁盘。显然,这种情况的发生概率很小,但是仍然是有可能的,我曾经见到过这种情况。如果再给同一个文件进行另一次写入,你可能会看到I/O错误,因为RAID控制器在认识到不能从高速缓存写入到磁盘的时候会显示错误,或者RAID控制器会故障复原,写入看起来仍然正常进行和完成,但是文件实际上没有获得写入,而应用程序不知道这一点。文件没有写入不是好事,这也就是为什么许多系统默认采用写入高速缓存镜像的原因。对写入高速缓存镜像的调节涉及决定为写入节省多少高速缓存空间,同时你必须启用写入高速缓存镜像。不管无记载数据损坏的概率有多低,你绝对不希望碰上这种情况。如果控制器故障,你几乎不可能再找到坏数据或缺少的数据。

  RAID控制器调节其实没那么难,只要你了解一点有关应用程序和RAID之间互动的知识。如果多个文件同时被写入而且文件系统分配比较小,先读取方式经常没那么有用。这种糟糕情况的最明显例子就是Windows上的NTFS。对于文件系统分配比较大的文件系统,如果它们分配大小等于或大于RAID条带大小,那么先读取方式能带来很大的好处。

0
相关文章