ZFS – zpool ARCcaching加L2ARC基准testing

我一直在ZFS系统上进行大量的I / Otesting,我最终将用它来为虚拟机提供服务。 我想我会尝试添加SSD作为caching,看看我能得到多快的读取速度。 作为ARC的机器也有24GB的内存。 vol0是6.4TB,caching磁盘是60GB SSD。 zvol如下:

pool: vol0 state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM vol0 ONLINE 0 0 0 c1t8d0 ONLINE 0 0 0 cache c3t5001517958D80533d0 ONLINE 0 0 0 c3t5001517959092566d0 ONLINE 0 0 0 

问题是我没有看到与SSD的安装有任何区别。 我试过bonnie ++基准和一些简单的dd命令来写文件然后读取文件。 我已经在添加SSD之前和之后运行基准testing。

我已经确保文件大小至less是我的RAM的两倍,所以没有办法可以在本地caching。

我在这里错过了什么? 我什么时候会看到拥有所有caching的好处? 我是不是在这种情况下? 基准程序不适合testingcaching的效果,因为它的写法和读取方式(以及内容)是什么?

看来你的testing是非常顺序的,就像用dd写一个大文件然后读取它一样。 ZFS L2ARCcaching旨在提高随机读取工作负载的性能,而不是像模式那样进行stream式传输。 此外,为了获得最佳性能,您可能需要等待较长的时间,直到caching变暖。 还有一点是要确保你的工作集适合SSD。 在testing过程中观察统计数据将有助于确定使用什么设备以及如何执行。

你考虑过ARC空间吗? 在testing用作L2ARC(池读取caching)和/或ZIL(池同步写入caching)的SSD的I / O优势时,需要考虑ARC的大小,而不是testing的工作集。 如果使用ARC,则不会从L2ARC拉出。 同样,如果启用了写caching,除非启用了清除和显式同步行为(即启动程序的写caching也被禁用,否则不pipeZIL如何),写操作将会合并。

如果你想看到较小工作集的固态硬盘的价值,考虑16个磁盘RAID10将提供大约1200 + IOPS(SAS / SATA?)的写入和约两倍的读取。 将磁盘设置为两个(用于testing),并将ARC降至最小(大约1/8个主存储器)将允许您对比主轴与SSD。 否则,您需要在您的池(多个LUN)上获取更multithreading来查看优势。 哦,是的,并获得更多的接口工作,所以你不是由一个1Gbps接口BW绑定…

任何试图对L2ARC进行基准testing的人都会想看看L2ARC是如何“温暖”的,并且还要评估他们的要求是否达到了L2ARC。 有一个很好的工具和文章来做到这一点: arcstat.pl更新为L2ARC统计

回到那个时候,我用iozone做了一些基准testing。 我不是一个基准testing大师,但是我对本地基准testing的命令是这样的:

 iozone -a -o -r 128K -n 128K -g 48G 

这里的命令描述如下:

 -a: Auto-Mode -o: This forces all writes to the file to go completely to disk before returning to the benchmark -r: Set Record Size. Default 128K on ZFS filesystem -n: Minimum filesize = Record Size -g: Maximum filesize = 2 * RAM 

也许你会试试看,并使用这个工具发表你的经验。 我有很好的结果,但基准就像统计数据。 不要相信你没有伪装的基准。 😉

编辑

还剩下一件事:我会做一个没有caching设备的基准testing。 我想在那里你可以看到对结果的影响。 很高兴看到一些结果。 只是好奇。

我有点困惑,为什么你会使用RAIDarrays作为zvol的后备存储。

然后限制ZFS可以用一个可能不像ZFS那样健壮的层pipe理磁盘/ io的方式。 (因为3d影响提到)是直接用ZFS设置你的RAID选项?

是否有足够的主轴来匹配SSD的IOs? (固态硬盘应该会增加您的IO /秒,不一定是连续的带宽)

你正在使用compression = on运行你的testing吗? ZFS在处理压缩时非常高效,许多基准testing工具通过写入大量的零来testing驱动器的性能。

确保在基准testing期间closures压缩,或在基准testing期间使用随机数据*。

*写入1GB的随机数据:openssl rand -out myfile $((1024 * 1024 * 1000))