我一直在对最终将用于虚拟机的 ZFS 系统进行大量 I/O 测试。我想尝试添加 SSD 作为缓存,看看读取速度能快多少。我的机器中还有 24GB 的 RAM,用作 ARC。vol0 为 6.4TB,缓存磁盘为 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 之前和之后都运行了基准测试。
我确保文件大小至少是我 RAM 的两倍,因此不可能全部在本地缓存。
我是不是漏掉了什么?我什么时候才能看到拥有所有缓存的好处?在这种情况下我难道没有看到吗?基准测试程序是否不适合测试缓存的效果,因为它的写入和读取方式(以及内容)?
答案1
您的测试似乎非常连续,例如使用 dd 写入大文件然后读取它。ZFS L2ARC 缓存旨在提高随机读取工作负载的性能,而不是用于类似流式传输的模式。此外,为了获得最佳性能,您可能需要等待更长时间直到缓存预热。另一点是确保您的工作集适合 SSD。在测试期间观察 io 统计数据将有助于确定使用了哪些设备以及它们的性能如何。
答案2
您是否考虑过 ARC 空间与您的测试进行比较?在测试用作 L2ARC(池读取缓存)和/或 ZIL(池同步写入缓存)的 SSD 的 I/O 优势时,您需要考虑 ARC 的大小与测试的工作集的对比。如果可以使用 ARC,则无需从 L2ARC 中提取。同样,如果启用了写入缓存,则无论 ZIL 如何,写入都会合并,除非启用了刷新和显式同步行为(即启动器的写入缓存也被禁用等)。
如果您想了解 SSD 对于较小工作集的价值,请考虑 16 磁盘 RAID10 将为写入提供约 1200+ IOPS(SAS/SATA?),为读取提供约两倍的 IOPS。将磁盘集减少到两个(用于测试)并将 ARC 减少到最小(约 1/8 主内存),然后您就可以对比主轴和 SSD。否则,您需要让更多线程在您的池(多个 LUN)上工作才能看到好处。哦,是的,还要让更多接口工作,这样您就不会受到单个 1Gbps 接口的 BW 约束……
答案3
任何试图对 L2ARC 进行基准测试的人都希望了解 L2ARC 的“热度”,并评估他们的请求对 L2ARC 的影响。有一个很好的工具和文章可以做到这一点:arcstat.pl 已更新 L2ARC 统计数据
答案4
以前我经常iozone
做一些基准测试。我不是基准测试专家,但我对本地基准测试的命令是这样的:
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
也许你可以尝试一下并发布你使用此工具的经验。我取得了不错的成绩,但基准测试就像统计数据一样。不要相信你自己没有伪造的基准测试。;-)
编辑
还有一件事:我会做一个有缓存设备和没有缓存设备的基准测试。我想你可以看到对结果的影响。很高兴能看到一些结果。只是好奇。