论Intel VMD模式对NVMe硬盘性能的影响
MisterZed
编辑于 2024年03月20日 00:29

之前在测试BitLocker不同的软件加密算法的性能时,为了让硬盘尽可能发挥其最大性能,于是需要对比硬盘安装驱动前后的性能差距。但在安装驱动时,遇到了驱动识别不到硬盘的问题。查阅了解后,发现是Intel的VMD模式的问题。之前在重装系统时虽然也受到了因VMD模式而无法识别到硬盘的困扰,但通过用最新版的PE工具箱,在VMD模式下最终顺利识别到硬盘,当时也就没继续深究了。用的PE工具箱是WEPE 2.3,之前2.2版本的无法识别,其他的PE工具箱不敢用,因为许多PE工具箱的作者没良心。

在查阅VMD模式的相关内容时,我了解到的是该模式主要面向企业级用途,用于主机上的NVMe硬盘热插拔和RAID(对于我这个单硬盘位的笔记本完全没用),对于性能方面的描述却没找到。在查阅过程中,还发现大多数“受害者”是“打人硕”的用户,当然我也是……但考虑到该模式和一般的硬盘驱动模式有明显的不同,因此其性能表现就值得被注意了。

事先声明:由于本测试的选用环境无法确保其足够的广泛性,因此仅作参考,无法保证本测试绝对的代表性。

cut-off

本次的测试环境:CPU:Intel Core i9 13900H;内存:DDR5 32GB 4800MHz;操作系统:Windows 11专业版(已开启高性能模式并开启独显直连);测试工具:CrystalDiskMark;单回测试循环次数:5轮;基准文件:1GiB.

硬盘使用Solidigm P44 Pro 1TB和Samsung PM9A1 1TB. 使用P44P会分别对比在不同硬盘驱动模式下安装操作系统后的测试结果,由于PM9A1为日常使用盘,因此仅展示在VMD模式下安装操作系统后的测试结果。

为了能更细致地(不是更深入)了解不同模式的性能差距,这里展示具有不同参考指标的文本结果。至于最终结论的话,看到这里并且看过我对BitLocker不同加密算法性能对比的人而言,其实已经可以从我的上次测试中知道这次的结果了。

cut-off

首先,在VMD模式下的P44P安装操作系统完成后,保持VMD模式不改变,进行的测试结果如下:

cut-off

[Read]

  SEQ    1MiB (Q=  8, T= 1):  7151.819 MB/s [   6820.5 IOPS] <  1130.53 us>

  SEQ    1MiB (Q=  1, T= 1):  5875.606 MB/s [   5603.4 IOPS] <   178.38 us>

  RND    4KiB (Q= 32, T= 1):   908.819 MB/s [ 221879.6 IOPS] <   139.69 us>

  RND    4KiB (Q=  1, T= 1):    82.158 MB/s [  20058.1 IOPS] <    49.72 us>

[Write]

  SEQ    1MiB (Q=  8, T= 1):  6520.956 MB/s [   6218.9 IOPS] <  1284.05 us>

  SEQ    1MiB (Q=  1, T= 1):  5461.746 MB/s [   5208.7 IOPS] <   191.86 us>

  RND    4KiB (Q= 32, T= 1):   689.495 MB/s [ 168333.7 IOPS] <   184.05 us>

  RND    4KiB (Q=  1, T= 1):   351.476 MB/s [  85809.6 IOPS] <    11.58 us>

[Mix] Read 70%/Write 30%

  SEQ    1MiB (Q=  8, T= 1):  6017.450 MB/s [   5738.7 IOPS] <  1391.95 us>

  SEQ    1MiB (Q=  1, T= 1):  4395.055 MB/s [   4191.5 IOPS] <   238.41 us>

  RND    4KiB (Q= 32, T= 1):   841.816 MB/s [ 205521.5 IOPS] <   150.72 us>

  RND    4KiB (Q=  1, T= 1):   108.384 MB/s [  26460.9 IOPS] <    37.69 us>

cut-off

之后,不重新安装操作系统,关闭VMD模式,在没有额外驱动(以下简称“无驱动模式”,VMD模式开启时也需要该模式专用的驱动)的情况下,进行的测试结果如下:

cut-off

[Read]

  SEQ    1MiB (Q=  8, T= 1):  7152.776 MB/s [   6821.4 IOPS] <  1171.39 us>

  SEQ    1MiB (Q=  1, T= 1):  5509.442 MB/s [   5254.2 IOPS] <   190.19 us>

  RND    4KiB (Q= 32, T= 1):   908.794 MB/s [ 221873.5 IOPS] <   139.61 us>

  RND    4KiB (Q=  1, T= 1):    78.956 MB/s [  19276.4 IOPS] <    51.75 us>

[Write]

  SEQ    1MiB (Q=  8, T= 1):  6736.423 MB/s [   6424.4 IOPS] <  1243.19 us>

  SEQ    1MiB (Q=  1, T= 1):  4865.881 MB/s [   4640.5 IOPS] <   215.33 us>

  RND    4KiB (Q= 32, T= 1):   574.270 MB/s [ 140202.6 IOPS] <   221.02 us>

  RND    4KiB (Q=  1, T= 1):   288.873 MB/s [  70525.6 IOPS] <    14.11 us>

[Mix] Read 70%/Write 30%

  SEQ    1MiB (Q=  8, T= 1):  5888.697 MB/s [   5615.9 IOPS] <  1419.49 us>

  SEQ    1MiB (Q=  1, T= 1):  4131.660 MB/s [   3940.3 IOPS] <   253.52 us>

  RND    4KiB (Q= 32, T= 1):   845.552 MB/s [ 206433.6 IOPS] <   150.26 us>

  RND    4KiB (Q=  1, T= 1):   105.416 MB/s [  25736.3 IOPS] <    38.77 us>

cut-off

依然保持原来的操作系统和VMD模式关闭,在安装了Solidigm的专用驱动后,进行的测试结果如下:

cut-off

[Read]

  SEQ    1MiB (Q=  8, T= 1):  7152.763 MB/s [   6821.4 IOPS] <  1161.19 us>

  SEQ    1MiB (Q=  1, T= 1):  5613.445 MB/s [   5353.4 IOPS] <   186.66 us>

  RND    4KiB (Q= 32, T= 1):   884.078 MB/s [ 215839.4 IOPS] <   147.28 us>

  RND    4KiB (Q=  1, T= 1):    81.551 MB/s [  19909.9 IOPS] <    50.09 us>

[Write]

  SEQ    1MiB (Q=  8, T= 1):  6491.241 MB/s [   6190.5 IOPS] <  1283.44 us>

  SEQ    1MiB (Q=  1, T= 1):  4901.527 MB/s [   4674.5 IOPS] <   213.75 us>

  RND    4KiB (Q= 32, T= 1):   621.662 MB/s [ 151772.9 IOPS] <   208.59 us>

  RND    4KiB (Q=  1, T= 1):   350.657 MB/s [  85609.6 IOPS] <    11.62 us>

[Mix] Read 70%/Write 30%

  SEQ    1MiB (Q=  8, T= 1):  5925.451 MB/s [   5651.0 IOPS] <  1404.17 us>

  SEQ    1MiB (Q=  1, T= 1):  4153.782 MB/s [   3961.4 IOPS] <   252.16 us>

  RND    4KiB (Q= 32, T= 1):   820.688 MB/s [ 200363.3 IOPS] <   154.55 us>

  RND    4KiB (Q=  1, T= 1):   107.596 MB/s [  26268.6 IOPS] <    37.96 us>

cut-off

保持VMD模式关闭,重新安装操作系统,再进行测试。到这里,由于在当前条件下的测试结果和之前在VMD模式下安装操作系统后再关闭VMD模式的测试结果基本一致(忽略正常的误差浮动),这里就不展示了,请参照无驱动模式时的情况。由于在此情况下,可视为两次无驱动模式下的系统状态一致,故不再安装Solidigm驱动再次测试。

在上述条件下,开启VMD模式,再进行测试,结果如下:

cut-off

[Read]

  SEQ    1MiB (Q=  8, T= 1):  6900.389 MB/s [   6580.7 IOPS] <  1215.06 us>

  SEQ    1MiB (Q=  1, T= 1):  5479.588 MB/s [   5225.7 IOPS] <   191.24 us>

  RND    4KiB (Q= 32, T= 1):   901.266 MB/s [ 220035.6 IOPS] <   140.78 us>

  RND    4KiB (Q=  1, T= 1):    81.822 MB/s [  19976.1 IOPS] <    49.93 us>

[Write]

  SEQ    1MiB (Q=  8, T= 1):  6218.093 MB/s [   5930.0 IOPS] <  1346.42 us>

  SEQ    1MiB (Q=  1, T= 1):  5252.130 MB/s [   5008.8 IOPS] <   199.53 us>

  RND    4KiB (Q= 32, T= 1):   695.854 MB/s [ 169886.2 IOPS] <   182.39 us>

  RND    4KiB (Q=  1, T= 1):   369.882 MB/s [  90303.2 IOPS] <    11.00 us>

[Mix] Read 70%/Write 30%

  SEQ    1MiB (Q=  8, T= 1):  5789.737 MB/s [   5521.5 IOPS] <  1446.40 us>

  SEQ    1MiB (Q=  1, T= 1):  4164.978 MB/s [   3972.0 IOPS] <   251.56 us>

  RND    4KiB (Q= 32, T= 1):   843.042 MB/s [ 205820.8 IOPS] <   152.55 us>

  RND    4KiB (Q=  1, T= 1):   106.538 MB/s [  26010.3 IOPS] <    38.34 us>

cut-off

分析结果(忽略误差浮动):

在VMD模式下安装操作系统后,测试结果为:VMD模式在总体上性能优于无驱动模式,且基本完胜Solidigm驱动;而无驱动模式的表现总体上弱于Solidigm驱动。其中,无驱动模式在8队列顺序写入的3项性能表现均优于VMD模式,在32队列4K 7读3写的3项性能表现都略高于VMD模式,这一条件的对比结果也难以理解;无驱动模式在32队列4K读取和7读3写、8队列顺序写入的3项性能表现均优于Solidigm驱动。

在VMD模式关闭的状态下安装操作系统后,无驱动模式在读取方面的表现总体上优于VMD模式,但在写入方面的总体表现却相反,在7读3写的总体表现上两者差别不大。其中,VMD模式在单队列4K读取的3项性能表现均略高于无驱动模式,也可视为误差浮动;无驱动模式在8队列顺序写入的3项性能表现均优于VMD模式。

 

再测试PM9A1(操作系统在VMD模式下安装,由于该盘在日常使用,VMD关闭后再安装操作系统时的表现不进行测试),VMD模式开启时的测试结果如下:

cut-off

[Read]

  SEQ    1MiB (Q=  8, T= 1):  7066.944 MB/s [   6739.6 IOPS] <  1186.40 us>

  SEQ    1MiB (Q=  1, T= 1):  4713.932 MB/s [   4495.6 IOPS] <   222.33 us>

  RND    4KiB (Q= 32, T= 1):   762.080 MB/s [ 186054.7 IOPS] <   166.50 us>

  RND    4KiB (Q=  1, T= 1):    96.869 MB/s [  23649.7 IOPS] <    42.20 us>

[Write]

  SEQ    1MiB (Q=  8, T= 1):  5244.356 MB/s [   5001.4 IOPS] <  1597.47 us>

  SEQ    1MiB (Q=  1, T= 1):  4587.353 MB/s [   4374.8 IOPS] <   228.44 us>

  RND    4KiB (Q= 32, T= 1):   630.474 MB/s [ 153924.3 IOPS] <   203.07 us>

  RND    4KiB (Q=  1, T= 1):   264.233 MB/s [  64510.0 IOPS] <    15.42 us>

[Mix] Read 70%/Write 30%

  SEQ    1MiB (Q=  8, T= 1):  6158.172 MB/s [   5872.9 IOPS] <  1356.66 us>

  SEQ    1MiB (Q=  1, T= 1):  4113.576 MB/s [   3923.0 IOPS] <   253.68 us>

  RND    4KiB (Q= 32, T= 1):   732.038 MB/s [ 178720.2 IOPS] <   172.81 us>

  RND    4KiB (Q=  1, T= 1):   118.450 MB/s [  28918.5 IOPS] <    34.40 us>

cut-off

接着,关闭VMD模式,进行的测试结果如下:

cut-off

[Read]

  SEQ    1MiB (Q=  8, T= 1):  6677.830 MB/s [   6368.5 IOPS] <  1254.56 us>

  SEQ    1MiB (Q=  1, T= 1):  4285.982 MB/s [   4087.4 IOPS] <   244.45 us>

  RND    4KiB (Q= 32, T= 1):   782.326 MB/s [ 190997.6 IOPS] <   162.19 us>

  RND    4KiB (Q=  1, T= 1):    92.577 MB/s [  22601.8 IOPS] <    44.16 us>

[Write]

  SEQ    1MiB (Q=  8, T= 1):  4975.240 MB/s [   4744.8 IOPS] <  1683.33 us>

  SEQ    1MiB (Q=  1, T= 1):  4022.411 MB/s [   3836.1 IOPS] <   260.45 us>

  RND    4KiB (Q= 32, T= 1):   595.978 MB/s [ 145502.4 IOPS] <   212.97 us>

  RND    4KiB (Q=  1, T= 1):   236.551 MB/s [  57751.7 IOPS] <    17.23 us>

[Mix] Read 70%/Write 30%

  SEQ    1MiB (Q=  8, T= 1):  6145.079 MB/s [   5860.4 IOPS] <  1357.89 us>

  SEQ    1MiB (Q=  1, T= 1):  3743.721 MB/s [   3570.3 IOPS] <   279.00 us>

  RND    4KiB (Q= 32, T= 1):   753.168 MB/s [ 183878.9 IOPS] <   168.06 us>

  RND    4KiB (Q=  1, T= 1):   112.309 MB/s [  27419.2 IOPS] <    36.28 us>

cut-off

分析结果(忽略误差浮动):VMD模式开启时的性能表现总体上优于关闭时。其中与总体结果相反的个例为32队列4K读取和7读3写的3项性能表现。

cut-off

本次测试到这里就结束了。我个人的话,就当前使用的这个本,我会在VMD模式下安装操作系统,并一直保持该模式开启,但在对SSD进行擦除或固件升级时会临时关闭VMD模式。因为在VMD模式下,SSD的PCIe通道会被接管,具体表现为:前面提到的专用驱动不认硬盘;在CrystalDiskInfo上无法识别传输模式(关闭VMD模式后便可有效识别);在TxBENCH上无法被识别为SSD等。

我个人认为,如果消费级硬件使用VMD技术的话,台式机上主板上的SSD插槽应该被设计得更容易插拔,笔记本应当设置可免拆D壳更换的副硬盘位,这样才能使VMD技术更好地发挥作用。如果主板厂商不能做到前面说的这些,且VMD技术在性能上没有优势的话,VMD技术就会和SSD加速机械的技术一样,成为失败的企业级技术对消费级的下放。

cut-off

最后,有必要说明两个问题:

在VMD模式下安装操作系统,目前仅可在集成了VMD驱动的环境中安装,至本文发布为止,最新的Windows安装镜像中的预安装引导环境依然没有集成VMD驱动。并且在Windows系统文件复制完毕后,最迟在引导新系统之前,必须在新系统中集成VMD驱动,否则蓝屏没商量。具体的驱动预安装方式,可以对安装镜像进行驱动注入,也可用Dism++等工具直接对新系统进行安装,更具体的不再赘述。安装了VMD驱动后的结果如下图中展开的详细部分所示。该驱动在VMD模式打开的情况下不可卸载,否则依然是蓝屏没商量。

VMD模式的相关驱动

在现有的操作系统中,想要开启或关闭VMD模式,在BIOS中切换之后,以正常模式启动系统之前,必须先以安全模式启动一次系统,否则蓝屏没商量(与之前的RAID和AHCI模式切换的道理一样)。可以在进入BIOS之前,先打开msconfig将启动模式改为安全模式,更改完成后在安全模式中再打开msconfig取消安全启动模式。如果系统分区使用了BitLocker加密,到BIOS中更改之前务必在BitLocker管理中对系统分区暂停保护(不是取消加密),否则很有可能会被锁(因为当电脑硬件状态改变时,TPM便会拒绝解锁,而开启或关闭VMD模式意味着硬盘驱动模式的改变,通道控制方式也同时改变)。反正我没试过在没有暂停保护的情况下更改VMD模式,有哪位勇士尝试过的话,不管有没有被锁,都可进行反馈。在BIOS中更改VMD模式的方法,这里不再赘述。