全部博文(323)
分类: 服务器与存储
2008-08-19 09:18:16
Cache memory是控制器上用于临时保留数据的易失性存储器(RAM),比磁盘访问速度要快。Cache memory提供给读写操作共用。有效地使用RAID控制器的Cache memory,能使FAStT存储服务器发挥更好的性能。
使用FAStT Storage Manager工具,可以设置不同的cache参数,包括:
Read caching
Cache block size
Cache read-ahead multiplier
Write caching or write-through mode
Enable or disable write cache mirroring
Start and stop cache flushing levels
Unwritten cache age parameter
下图是用Storage Manager创建逻辑驱动器时的缺省设置,可以对其进行调整。
这些参数的设置直接影响到FASTT存储服务器的性能和数据可用性。众所周知,性能和可用性通常是一对矛盾。如果你要获得最好的性能,更多的时候,你必须牺牲系统可用性;反之亦然。默认情况下,读缓存和写缓存用于所有的逻辑驱动器;对于所有的写数据,两个控制器之间的缓存互为镜像。写缓存只在控制器电池充满电时可用。预读方式通常不用于逻辑驱动器。
Read caching(读缓存)
将读缓存使能不会造成数据丢失风险。很少情况下,需要关闭读缓存为其它逻辑驱动器提供更多的缓存。
Read-ahead multiplier(预读乘数)
该参数会影响读性能,错误的设置会导致极大的负面影响。它控制在一个读请求之后,有多少连续数据块被保存到缓存里。
显然,对于随机I/O负荷,这个值应该为零。否则,每一个读请求将不必要地预取额外的数据块,而这些数据块又很少用,所以会影响性能。对于连续I/O的工作负荷,设置为1到4是一个合适的值,这主要决定于具体环境。当使用该设置时,一个读请求引发预取多个连续的数据块到缓存,从而加速并发访问,使得在磁盘和缓存之间,使用更少的I/O来完成同样数据量传输,在连续I/O的工作负荷情况下优化了性能。如果该值设置过高,缓存被从不需要的预读数据所添满,将会导致总体性能下降。使用performance monitor观察缓存命中率,获得一个合适的值。
Write caching(写缓存)
写缓存使存储系统先将数据写入缓存,而不是直接写入磁盘。这会明显的改善性能,尤其是对于随机写的数据库应用。对于连续写的环境,性能会随写数据的大小不同而变化。如果逻辑驱动器只用于读访问,关闭该逻辑驱动器的写缓存会提高整体性能。
Write cache mirroring(写缓存镜像)
FAStT write cache mirroring 能保证一块RAID卡失效后的cache数据完整性。这使数据有更高可用性,但是降低了性能。数据在控制器之间跨过磁盘端的光纤环路形成镜像,与正常的数据传输发生竞争。
建议使用该功能,以保证一块RAID卡失效后的cache数据完整性。
缺省情况下,写缓存对另一个控制器写缓存数据进行镜像,即便是逻辑驱动器移动到另外一个控制器。否则,如果逻辑驱动器控制权切换到另一个控制器并且缓存里还有没写入的数据,逻辑驱动器的数据就会丢失。
如果关闭写缓存镜像,在控制器失效时有可能丢失数据,并且可能导致fabric中的路径失效。FAStT控制器缓存有电池保护,保证掉电时不会丢失数据。如果电池没有充足电,比如刚刚开机时,控制器会自动关闭写缓存。如果使能写缓存,即便没有电池保护,写缓存也被启用,会有数据丢失的风险。
Write caching 或 write-through
write-through意思是写操作根本不使用缓存。数据总是直接写入磁盘。关闭写缓存,可释放缓存用于读操作。(缓存被读写操作共用)
Write caching可以提高写操作的性能。数据不是直接被写入磁盘;而是写入缓存。从应用程序的角度看,比等待完成磁盘写入操作要快的多。因此,可以提高写性能。由控制器将缓存内未写入磁盘的数据写入磁盘。表面上看,Write cache方式比write-through方式的读、写性能都要好,但是也要看磁盘访问方式和磁盘负荷了。
write-back(write cache)方式通常在磁盘负荷较轻时速度更快。负荷重时,每当数据被写入缓存后,就要马上再写入磁盘以释放缓存来保存将要写入的新数据,这时如果数据直接写入磁盘,控制器会以更快的速度运行。因此,负荷重时,将数据先写入缓存反而会降低吞吐量。
Starting and stopping cache flushing levels
这两个设置影响控制器如何处理未写入磁盘的缓存内数据,并且只在write-back cache方式下生效。缓存内数据写入磁盘称为flushing.你可以配置Starting and stopping cache flushing levels值,这个值表示占用整个缓存大小的百分比。当缓存内未写入磁盘的数据达到starting flushing value时,控制器开始flushing(由缓存写入磁盘)。当缓存内未写入磁盘数据量低于stop flush value时,flushing过程停止。控制器总是先flush旧的缓存数据。缓存内未写入数据停留超过20秒钟后被自动flushing.
典型的start flushing level是80%。通常情况下,stop flushing level也设置为80%。也就是说,控制器不允许超过80%的缓存用于write-back cache,但还是尽可能保持这一比例。如果你使用此设置,可以在缓存内存更多的未写入数据。这有利于提高写操作的性能,但是要牺牲数据保护。如果要得到数据保护,你可以使用较低的start and stop values。通过对这两个参数的设置,你可以调整缓存的读、写性能。经测试表明,使用接近的start and stop flushing levels时性能较好。如果stop level value远远低于start value,在flushing时会导致磁盘拥塞。
Cache block size
这个值指缓存分配单元大小,可以是4K或16K。选择合适的值,可以明显的改善缓存使用性能。
如果应用程序更多时候访问小于8K的数据,而将cache block size设置为16K,每次访问仅使用一部分cache block。在16K的cache block里总是存储8K或更小的数据,意味着只有50%的缓存容量被有效使用,使性能下降。对于随机I/O和小数据块的传送,4K比较合适。另一方面,如果是连续I/O 并使用大的segment size,最好选择16K。大的cache block size意味着cache block数量少并可缩短缓存消耗延时。另外,对于同样大小的数据,cache block size大一些,需要的缓存数据传送量更小。
一般来说,在实施DS4000系列存储解决方案前,建议用一周的时间做性能测试和监控并调整相关的性能参数。