Windows Server 存储空间层写回缓存,如何配置确定是否在写回缓存上执行写入的阈值?

Windows Server 存储空间层写回缓存,如何配置确定是否在写回缓存上执行写入的阈值?

存储空间功能包括Windows 服务器 2012以及即将到来的Windows 服务器 2016由虚拟磁盘组成。在分层存储部署中回写缓存被创建(默认大小为 1GB)。存储空间中配置了一个阈值,该阈值决定特定写入操作是否会进入写回缓存。这个阈值非常小,使得大多数写入不会进入写回缓存。

举例来说,我们假设写回缓存可以达到 500MB/s,而较慢的层仅以 75MB/s 的速度运行。在创建虚拟磁盘并创建新格式化的卷后,立即注意到在存储空间虚拟磁盘上复制 386MB 的文件需要一秒以上的时间才能完成。人们希望文件可以在一秒钟内复制完成,假设写回缓存会消耗该操作,但事实并非如此。相反,存储层检测到写入大小超过了写入写回缓存的预定义阈值,并将写入转发到最慢的层,然后大约需要 5 秒才能完成。我很失望,写回缓存不会加速这个文件复制操作。

背景信息可以在这里找到:

我的目标是加速更多写入操作,而不仅仅是那些非常小的操作。以下是一些已经实现此目标的其他软件提供商的列表:

如果微软有一种方法可以简单地允许延迟写缓存,或者修改写入回写缓存存储空间的阈值,速度可以提高 20 倍(根据这些第三方供应商提供的基准)。

两个问题:

1)存储空间选择对写回缓存执行写入的默认阈值(以千字节为单位)是多少?

2)可以在 PowerShell 中发出什么命令来修改阈值,以便我可以指示存储空间对写回缓存执行更大的写入?

答案1

目前尚不清楚阈值。如果启用 WBC,所有写入都将转到闪存,无论其大小如何。它们绕过闪存转到磁盘的唯一情况是闪存已满,并且在确认较新的写入之前刷新它是没有意义的:延迟将飙升。

关于这个话题的一些好读物:

https://blogs.technet.microsoft.com/larryexchange/2015/12/02/understand-storage-space-tiering-in-windows-server-2012-r2/

https://technet.microsoft.com/en-us/library/dn789160.aspx

我宁愿避免使用第三方缓存软件,除非它们能带来真正的价值,例如分布式 DRAM 写回缓存。不过,您必须使用 StarWind vSAN 之类的东西运行集群,因为单个服务器上的大量 DRAM 缓存会带来麻烦。

https://www.starwindsoftware.com/caching-page

您可以尝试使用 CSV 缓存,但到目前为止它是只读的。

https://blogs.msdn.microsoft.com/clustering/2013/07/19/how-to-enable-csv-cache/

即将推出的 Windows Server 2016 也进行了一些优化,值得一试。

https://blog.cdemi.io/caching-and-storage-tiering-in-storage-spaces-direct/

答案2

如果要自定义写回缓存大小,请使用 Windows PowerShell cmdlet 和 -WriteCacheSize 参数,例如:

New-VirtualDisk -StoragePoolFriendlyName “我的存储池” -FriendlyName TieredSpace -StorageTiers @($ssd_tier, $hdd_tier) -StorageTierSizes @(50GB, 300GB) -ResiliencySettingName Mirror -WriteCacheSize 2GB

注意:虚拟磁盘创建后,其WriteCacheSize不能被修改。

来源:http://windowsitpro.com/windows-server-2012-r2/set-windows-server-2012-r2-storage-space-write-back-cache

一般来说,存储空间 WBC 并未针对大缓存容量进行优化,而且我个人无论如何都不会分配超过 5GB 的缓存容量。

此外,正如@BaronSamedi1958 所注意到的,分布式 RAM 缓存是加速写入 I/O 的更好方法,StarWind 的缓存实现绝对值得一试。

相关内容