diskspd测试Windows硬盘的读写速度

0    242    2

Tags:

👉 本文共约9120个字,系统预计阅读时间或需35分钟。

简介

DISKSPD 是一个可生成 I/O 的命令行工具,用于微基准测试。 Diskspd 是微软开源的磁盘性能基准测试工具,其基于命令行界面,有非常多的测试参数可用,很强大。

名称内容
开发语言C++
界面框架无(在cmd中执行命令)
代码量1万行
支持系统Windows
官网地址https://github.com/Microsoft/diskspd/wiki
github地址https://github.com/microsoft/diskspd
软件下载地址https://github.com/microsoft/diskspd/releases/download/v2.2/DiskSpd.ZIP

GitHub:https://github.com/microsoft/diskspd

wiki:https://github.com/Microsoft/diskspd/wiki

测试的目标可以是文件、分区、物理驱动器中的任意一个维度。这三种的区别,就是测试范围是一个比一个大的,文件<分区<物理驱动器。

  • 测试文件时,表示测试只针对这个文件,不管其在哪个分区或驱动器上;
  • 测试分区时,表示只会在这个分区上读写,不会影响其他分区文件;
  • 测试驱动器时,表示只会在这个驱动器上读写,不会影响其他驱动器。

安装

直接下载安装包,解压即可。

  • amd64: For 64 bit operating systems
  • x86: For 32 bit operating systems
  • ARM64: For 32 bit operating systems

帮助

参数说明

最常用参数介绍:

参数名说明
-b [K|M|G]表示块大小(以字节、KiB、MiB 或 GiB为单位),默认块大小为 64 KiB。
-c[K|M|G|b]设置测试中创建使用的示例文件大小。 可以按字节、KiB、MiB、GiB 或块进行设置。
-D捕获 IOPS 统计信息(例如标准偏差),时间间隔为毫秒[default=1000,1second]。
-d指定测试的持续时间,不包括冷却或预热时间。 默认值为 10 秒,但对于任何繁重的工作负荷,建议至少使用 60 秒。
-L度量延迟统计信息。
-o表示每个线程的每个目标的未完成 I/O 请求数, 也称为队列深度。
-r[K|M|G|b]随机 I/O 对齐测试,默认值为4K,不加-r为顺序I/O测试。
-Suw禁用软件和硬件写入缓存(等效于 -Sh)。
-t表示每个目标的线程数,默认是单线程。
-w指定属于写入请求操作的百分比(不写-w或-w或者-w0 等效于100%读取)。 如:-w25代表有25%的写,75%的读。

diskspdming命令参数说明:

-o 用于设置每个目标线程的未完成 I/O 请求的数。1表示进程同步,2表示进程异步。
-b[K|M|G] 表示测试的块大小(以字节、KiB、MiB 或 GiB为单位),默认块大小为 64 KiB。
-r[K|M|G] 随机 I/O 对齐测试,默认值为4K,不加-r为顺序I/O测试。
-w 用于指定写入请求的百分比,默认写入请求为读取请求的 100%。50%-表示读写测试各50%
-d 用于指定测试时长,默认为 10 秒(不包括冷却和预热时间)
-Sh 禁用软件和硬件写入缓存
-D 捕获 IOPS 统计信息(例如标准偏差),时间间隔为毫秒[default=1000,1second]。
-L 度量延迟统计信息。
-c[K|M|G|b] 设置测试中创建使用的示例文件大小。 可以按字节、KiB、MiB、GiB 或块进行设置。

其它参数:

-S[bhmruw] 参数是 diskspd.exe 中用于控制缓存行为的选项。你可以组合这些选项来指定缓存的启用、禁用或其他相关行为。下面是每个选项的详细解释:

  • -S:等同于 -Su,即 禁用软件缓存,这意味着磁盘操作将不使用操作系统的缓存,而是直接进行 I/O 操作,类似于 FILE_FLAG_NO_BUFFERING

  • -Sb启用缓存,这是默认行为,磁盘操作会使用操作系统的缓存。

  • -Sh:等同于 -Suw禁用所有缓存,即 禁用软件缓存禁用硬件缓存,所有的 I/O 操作都绕过缓存,直接访问物理磁盘。适用于测试真实的磁盘性能。

  • -Sm启用内存映射 I/O,这会将磁盘文件映射到进程的虚拟内存空间,进行内存直接读写操作。

  • -Su禁用软件缓存,等同于 -S,即磁盘操作将不经过操作系统缓存。

  • -Sr禁用本地缓存,仅对远程文件系统有效,允许远程文件系统使用软件缓存,但禁用本地缓存。

  • -Sw启用写穿模式(writethrough),即禁用硬件的写缓存,所有写入操作都会直接写入磁盘,确保数据被立即持久化。

  • -Sh 是禁用所有缓存的选项(包括软件和硬件缓存),确保直接对磁盘进行读写操作,适用于需要测试磁盘真实性能的场景。

Sample command lines

Note that there also some additional examples in Section 3 when describing more complex options.

Test descriptionSample command
Large area random concurrent reads of 4KB blocksdiskspd -c2G -b4K -F8 -r -o32 -W60 -d60 -Sh testfile.dat
Large area random concurrent writes of 4KB blocksdiskspd -c2G -w100 -b4K -F8 -r -o32 -W60 -d60 -Sh testfile.dat
Large area random serial reads of 4KB blocks.diskspd -c2G -b4K -r -o1 -W60 -d60 -Sh testfile.dat
Large area random serial writes of 4KB blocksdiskspd -c2G -w100 -b4K -r -o1 -W60 -d60 -Sh testfile.dat
Large area sequential concurrent reads of 4KB blocksdiskspd -c2G -b4K -F8 -T1b -s8b -o32 -W60 -d60 -Sh testfile.dat
Large area sequential concurrent writes of 4KB blocksdiskspd -c2G -w100 -b4K -F8 -T1b -s8b -o32 -W60 -d60 -Sh testfile.dat
Large area sequential serial reads of 4KB blocksdiskspd -c2G -b4K -o1 -W60 -d60 -Sh testfile.dat
Large area sequential serial writes of 4KB blocksdiskspd -c2G -w100 -b4K -o1 -W60 -d60 -Sh testfile.dat
Small area concurrent reads of 4KB blocksdiskspd -c100b -b4K -o32 -F8 -T1b -s8b -W60 -d60 -Sh testfile.dat
Small area concurrent writes of 4KB blocksdiskspd -c100b -w100 -b4K -o32 -F8 -T1b -s8b -W60 -d60 -Sh testfile.dat
Display statistics about physical disk I/O and memory events from the NT Kernel Loggerdiskspd -eDISK_IO -eMEMORY_PAGE_FAULTS testfile.dat
Specify 90% of I/O to 10% of the target, 0% of I/O to the next 10% of the target, 5% of I/O to the next 20% of target and the remaining 5% of I/O to the remaining 60% of target (implied), using -rdpct.diskspd -c1G -b4K -r -o32 -w0 -d60 -Sh -rdpct90/10:0/10:5/20 testfile.dat
Specify 90% of I/O to 10GiB of the target, 0% of I/O to the next 10GiB, 5% of I/O to the next 20GiB and the remaining 5% of I/O to the remaining target file size, using -rdabs.diskspd -c1G -b4K -r -o32 -t1 -w0 -d60 -Sh -rdabs90/10G:0/10G:5/20G testfile.dat
Mix random and sequential workloads (20% random and 80% sequential I/O)diskspd -c1G -b4K -o32 -t1 -r8b -w50 -rs20 -d60 -Sh testfile.dat
Limit IOPS to 1000 per threaddiskspd -c1G -b4K -o32 -t1 -w50 -g1000i -d60 -Sh testfile.dat
Create a text profile from a set of parametersdiskspd -t1 -o4 -b4k -r4k -w0 -Sh -D -d60 -L -c1G -Rptext > profile.txt
Create an XML profile from a set of parametersdiskspd -t1 -o4 -b4k -r4k -w0 -Sh -D -d60 -L -c1G -Rpxml *1 *2 > profile.xml
Substitute target files from a previously created XML profile (see above)diskspd -Xprofile.xml file1.dat, file2.dat

测试

如下命令:

其各参数含义:

  • c64M,创建测试文件大小为64MB
  • b64K,块大小为64KB,即读写过程中每一个IO请求操作的数据大小为64KB
  • t1,每个目标的线程数,即测试D:\test.dat文件使用线程数为1
  • o32,队列深度,即内部IO请求队列的最大容量为32
  • si64K,IO操作步进偏移大小
  • w50,写请求的百分比,即写IO比例50%,读IO比例50%
  • S,禁用软件缓存,采用此选项时,测出的结果更接近实际硬件速度;若启用了缓存,则测试结果会大大高于实际硬件速度。

按上述参数创建测试文件D:\test.dat,并进行测试,默认测试时间持续10s。

示例

  • 使用2个线程和1个未完成的IO进行4KB顺序写入
  • 使用2个线程和1个未完成的IO进行64KB顺序写入
  • 8KB随机读取使用2个线程,1个未完成的IO
  • 使用2个线程和1个未完成的IO进行128KB随机读取

测试结果解读

img

  • thread:生成IO的线程的编号
  • bytes:为测试传输的总字节数
  • I/Os:为测试执行的IO操作总数
  • MB/s:吞吐量,以MB /秒为单位
  • I/O per s:每秒的IO操作数
  • AvgLat:测试的所有IO操作的平均延迟
  • IopsStdDev:每秒IO操作的标准偏差
  • LatStdDev:测试遇到的延迟的标准偏差
  • file:IO测试中使用的文件的路径

img

99.9%[3-nines]的write操作延时为0.083,还是比较好的。

Microsoft建议日志延迟应该在1-5ms到数据延迟应该在4-20ms之间。

输出的四个主要部分:

  1. 输入设置

    此部分介绍你运行的命令、输入参数以及有关测试运行的其他详细信息。

    示例输出显示了命令和输入参数。

  2. CPU 使用率详细信息

    此部分重点介绍测试时间、线程数、可用处理器数,以及测试期间每个 CPU 核心的平均使用率等信息。 在此示例中,有两个 CPU 核心的平均使用率大约为 4.67%。

    示例 CPU 详细信息。

  3. 总 I/O

    此部分有三个子部分。 第一部分重点介绍包括读取和写入操作在内的总体性能数据。 第二部分和第三部分将读取和写入操作拆分成单独的类别。

    在此示例中,可以看到在 120 秒的持续时间内的总 I/O 计数为 234408。 因此,IOPS = 234408/120 = 1953.30。 平均延迟为 32.763 毫秒,吞吐量为 7.63 MiB/秒。 根据上面的叙述,我们知道,1953.30 IOPS 接近 Standard_B2ms VM 的 1920 IOPS 限制。 不相信? 如果使用不同的参数(例如增加队列深度的参数)重新运行此测试,你会发现结果的上限仍然是该数字。

    最后三列显示 IOPS 的标准偏差(17.72,来自 -D 参数)、延迟的标准偏差(20.994 毫秒,来自 -L 参数)和文件路径。

    示例显示总 I/O 性能数据概览。

    你可以根据结果快速确定群集配置是否适当。 你可以看到,它在达到 SSD 限制 5000 之前达到了 VM 限制 1920。 如果受到 SSD 而非 VM 的限制,则可在多个驱动器中跨测试文件利用最多 20000 IOPS(4 个驱动器 * 5000)。

    最终,你需要确定哪些值对于你的特定工作负荷来说是可以接受的。 下图显示了一些重要的关系,在进行权衡时需要考虑到这些关系:

    此图显示了工作负荷关系权衡情况。

    本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!
    AiDBA后续精彩内容已被站长无情隐藏,请输入验证码解锁本文!
    验证码:
    获取验证码: 请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“AiDBA”或者“dbaup6”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复