What are the options to speed up write speed for Storage Spaces using parity?
I'm wondering what my options are for speeding up the write speed to my storage spaces that's using parity.
Setup
- Windows 10 64-bit verison 1607
- Intel i7-7700k
- 16 GB memory
- Samsung 960 EVO
- 6x 6 TB Western Digital Red (5200rpm)
I set up the storage space using PowerShell because I was attempting to do ReFS with parity, and though it's an option in the GUI, the GUI was giving me trouble. Format-Volume
said "the specified file system is not supported." So, it's an NTFS volume at 26.1 TB, provisioning type is fixed, resiliency is parital, physical disk redundancy is 1.
Transfer Speeds
- Other Windows 10 64x PC --> Storage space = ~45 MB/s
- NAS --> Storage space = ~45 MB/s
- Samsung 960 EVO --> Storage space = ~45 MB/s
- Storage space --> Samsung 960 EVO = ~610 MB/s
During transfers I see about 1.5 GB of memory in use, and only 3-4% CPU. I've read that you can tell the storage space it's connected to a battery backup (the computer is plugged into a UPS) or use an SSD cache array, but I don't know the pros and cons here, nor the PowerShell commands to do so. I assume the write performance should be a little better than this, right? With such a powerful processor, I wouldn't expect parity calculations to slow it down too much.
Solution 1:
Re-posting the information that I posted on technet: Parity Storage Space so slow that it's unusable
Folks experimenting with RS5 parity write performance on Server 2019/ Windows 10 RS5 and above might find the below information useful.
RS5 (Build 17763, Windows 10 1809) update brings improved parity write performance to storage spaces. The improvement comes from being able to bypass the parity space write cache for full stripe writes. Previously created storage spaces will also benefit from these improvements (once the storage pool is upgraded with Update-StoragePool). For best results, you will need to create a new storage space with specific interleave size.
Step 1
Upgrade your storage pool to the latest version.
Get-StoragePool <NameOfPool> | Update-StoragePool
Confirm
Are you sure you want to perform this action?
This will upgrade the StoragePool "TestPool" to the latest version. This is an irreversible action.
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
Verify that your pool is at least at "Server 2019" version or later
Get-StoragePool | ? IsPrimordial -eq $false | ft FriendlyName,Version
FriendlyName Version
------------ -------
NameOfPool Windows Server 2019
Step 2
Create a new parity virtual disk, with an interleave size of 32KB, 3 columns. This maximizes your flexibility in adding capacity to your space, and ensures that the data stripe size is 64KB, which will match the NTFS allocation unit (cluster) size of 64KB that you will use in the next step. (If you use the Storage Spaces Control Panel UI to create the space, it will typically have an interleave size of 256KB and an NTFS cluster size of 4KB, which doesn't guarantee that all writes will be aligned to data stripe boundaries)
New-VirtualDisk -StoragePoolFriendlyName <NameOfPool> -ProvisioningType Thin -Interleave 32KB `
-FriendlyName FastParity -Size 1TB -ResiliencySettingName Parity -NumberOfColumns 3
Step 3
Go to disk management, initialize the disk corresponding to the newly created virtual disk, and format it with NTFS (or REFS) filesystem with an allocation unit (cluster) size of 64KB.
Step 4
Verify that copying large files to this volume is fast. Provided you are copying from a source that is different from any of the virtual disks in the storage pool, you should be able to achieve a write performance that is close to 2x the write performance of the slowest physical disk in your storage pool. With typical consumer SATA hard disks, if your source is sufficiently fast (e.g. internal SSD), you should be able to hit 200MB/sec for copying large files.
You can use the performance monitor (perfmon.exe) to verify that your new virtual disk has a high "Write Bypass %". When correctly configured, you should expect this value to be >99%. The Counter set name is "Storage Spaces Write Cache"
Solution 2:
It's a bad idea to use file copy as a progress indicator of anything. Stick with DiskSPD or you'll get random & unreproducible numbers.
https://blogs.technet.microsoft.com/josebda/2014/08/18/using-file-copy-to-measure-storage-performance-why-its-not-a-good-idea-and-what-you-should-do-instead/
You can use Windows built-in SSD based caching software or configure tiered storage spaces where your SSD will act as a WBC or performance tier.
https://blogs.technet.microsoft.com/askpfeplat/2013/10/20/storage-spaces-how-to-configure-storage-tiers-with-windows-server-2012-r2/
https://msdn.microsoft.com/en-us/library/windows/hardware/dn567634(v=vs.85).aspx
I'd suggest NOT to use any third-party DRAM & SSD cache.