为什么 diskspd 在没有缓存的情况下性能会更好?

为什么 diskspd 在没有缓存的情况下性能会更好?

我们目前正在调查作为 SQL 服务器运行的 Windows Server 2012 R2 上的高磁盘延迟问题。它是 VMware 下的虚拟机,故障磁盘的数据存储区与 SAN 上的高性能 LUN 链接。

SAN 即使在发生事故和我的测试期间也显示出非常好的 LUN 响应时间。数据存储也在每个时刻都显示出非常好的响应时间。CPU 和内存不是瓶颈,我已经仔细检查过了。

Microsoft 建议我们使用 diskspd 来测试磁盘性能。这是 2 组测试的结果。我运行了几次,间隔较长,时间也不同,所以我确信结果不是偶然的。

命令行:diskspd -b64k -o32 -t4 -d60 -w50 -Sw -r -L -c20G -Z1G C:\iotest.data

总 IO 线程 | 字节 | I/O | MB/s | 每秒 I/O | AvgLat | LatStdDev | 文件

12623020032 | 192612 | 200.59 | 3209.46 | 38.636 | 21.687

命令行:diskspd -b64k -o32 -t4 -d60 -w50 -Su -r -L -c20G -Z1G C:\iotest.data

总 IO 线程 | 字节 | I/O | MB/s | 每秒 I/O | AvgLat | LatStdDev | 文件

78517239808 | 1198078 | 1247.71 | 19963.34 | 6.410 | 8.202

根据有关 diskspd -Sw 的文档,禁用写入 IO 和 -Su 禁用软件缓存。让我指定一下,在第一个命令行上,使用或不使用 -Sw,结果是相同的让我知道这个标志没有太大影响。从这个工具(由 Windows 团队创建和管理)中,我们可以得出结论,缓存(使用 -Su 禁用)正在破坏磁盘性能,但这似乎不对。

我的问题是:

  • 为什么软件缓存会降低性能?

  • 它对正在运行的应用程序的影响是否与对这个测试的影响相同?

  • IOMeter 给我的性能与没有软件缓存的测试相同,为什么?

谢谢,

答案1

您正在更改两个变量,缓冲和直写,因此您无法判断更改的内容。更好的比较是-Sb“缓冲”和-Su“非缓冲”。

实际上,-Sw 很可能会降低您的性能。任何值得称之为存储阵列的存储阵列都有写入缓存,因此写入的确认速度比写入阵列中的磁盘的速度要快。直写可以绕过这一点。

持续检查阵列、SAN 和主机、软件和硬件上的所有可用组件。

答案2

您误解-Sw了什么。

正如所述diskspd 文档-Sw实际上绕过操作系统写入缓存,因为它使用 FILE_FLAG_WRITE_THROUGH 打开目标文件。

令我惊讶的是,您的 SAN 完全遵守此标志:具有断电保护的写缓存、SAN 和存储阵列通常不遵守写入标志。

另一方面,无缓冲和非直写测试显示出了更好的结果。

或许是你真正的问题:你的 SAN 正在遵守(可能无用,但它肯定具有持久缓存)写入标志。

相关内容