What are the options to speed up write speed for Storage Spaces using parity?

22,359

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

Microsoft clearly recommends to only use the “Parity” Spaces layout without WBC for archive-like scenarios in which only reading takes place almost exclusively.

The write performance you achieve is absolutely normal for your configuration.

Consider adding SSD drives as WB Cache or switching your Spaces to tiered configuration.

If adding SSDs is not an option for you, consider using "Two Way Mirror" (aka RAID10) configuration, this will significantly increase write performance.

Solution 3

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.

Solution 4

I found an answer that works. My config is:

  • i3 550,
  • 2×2GB RAM,
  • Windows 10 Pro,
  • 3×1TB Samsung 103UJ/SJ disks in Parity mode plugged to the mainboard (Asrock H55M USB3).

Write speed before was about 20-23 Mbytes/s, went up to 47-50 Mbytes/s with the settings below (the PS and the Device Manager setting). Read speed is maxed out on a gbit connection (113 MBytes/s). Write speed would be probably better with faster disks, but it's still more or less fine with these 7+ year old relics.

Original post: https://social.technet.microsoft.com/Forums/windowsserver/en-US/64aff15f-2e34-40c6-a873-2e0da5a355d2/parity-storage-space-so-slow-that-its-unusable?forum=winserver8gen

I tried Set-StoragePool -FriendlyName <Storage Pool Name> -IsPowerProtected $True initially without success. But I then went into “Device Manager” → “Disk Drives” → “Policies” and made sure all disks only had "enable write caching on the device" EXCEPT for the one new disk drive for storage spaces that I had created called "Microsoft Storage Space Device" which I then checked the second box "turn off Window write-cache buffer flushing on the device". And since I do have an external UPS for my server, I am not worried about the warning for turning this off. The problem with writes to disk pausing while the buffers flush and write to disk have all gone away.

Share:
22,359

Related videos on Youtube

Brandon
Author by

Brandon

Updated on September 18, 2022

Comments

  • Brandon
    Brandon almost 2 years

    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.