这存储空间功能包括Windows 服务器 2012以及即将到来的Windows 服务器 2016由虚拟磁盘组成。在分层存储部署中回写缓存被创建(默认大小为 1GB)。存储空间中配置了一个阈值,该阈值决定特定写入操作是否会进入写回缓存。这个阈值非常小,使得大多数写入不会进入写回缓存。
举例来说,我们假设写回缓存可以达到 500MB/s,而较慢的层仅以 75MB/s 的速度运行。在创建虚拟磁盘并创建新格式化的卷后,立即注意到在存储空间虚拟磁盘上复制 386MB 的文件需要一秒以上的时间才能完成。人们希望文件可以在一秒钟内复制完成,假设写回缓存会消耗该操作,但事实并非如此。相反,存储层检测到写入大小超过了写入写回缓存的预定义阈值,并将写入转发到最慢的层,然后大约需要 5 秒才能完成。我很失望,写回缓存不会加速这个文件复制操作。
背景信息可以在这里找到:
- https://technet.microsoft.com/en-us/library/dn387076(v=ws.11).aspx#bkmk_wbc
- https://social.technet.microsoft.com/Forums/en-US/e6868c95-2f6a-4433-a012-174cadba13cd/windows-server-writeback-cache-storage-tier-how-do-you-configure-the-threshold-for-how-many
我的目标是加速更多写入操作,而不仅仅是那些非常小的操作。以下是一些已经实现此目标的其他软件提供商的列表:
- VirtuCache:http://virtunetsystems.com/virtucache-overview/
- 英特尔 CAS:https://software.intel.com/en-us/articles/intel-cache-acceleration-software-a-primer
- PrimoCache:(延迟写入缓存模式)https://www.romexsoftware.com/en-us/primo-cache/index.html
如果微软有一种方法可以简单地允许延迟写缓存,或者修改写入回写缓存存储空间的阈值,速度可以提高 20 倍(根据这些第三方供应商提供的基准)。
两个问题:
1)存储空间选择对写回缓存执行写入的默认阈值(以千字节为单位)是多少?
2)可以在 PowerShell 中发出什么命令来修改阈值,以便我可以指示存储空间对写回缓存执行更大的写入?
答案1
目前尚不清楚阈值。如果启用 WBC,所有写入都将转到闪存,无论其大小如何。它们绕过闪存转到磁盘的唯一情况是闪存已满,并且在确认较新的写入之前刷新它是没有意义的:延迟将飙升。
关于这个话题的一些好读物:
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不能被修改。
一般来说,存储空间 WBC 并未针对大缓存容量进行优化,而且我个人无论如何都不会分配超过 5GB 的缓存容量。
此外,正如@BaronSamedi1958 所注意到的,分布式 RAM 缓存是加速写入 I/O 的更好方法,StarWind 的缓存实现绝对值得一试。