Storage Spaces and Parity – Slow write speeds

i’ve recently been playing around with Windows Storage Spaces on Microsoft Windows Server 2012 R2. They are fantastic. ReFS brings so many benefits over NTFS.

But it’s half complete it seems.

I originally created a parity volume, as I assumed this would be quite similar to RAID 6. You have the option of having a write array, or write cache using SSD drives. I haven’t done this at this stage. I’m currently using 6x6TB Western Digital 7200RPM drives.

After creating the very large volume, I started copying some data. I was copying the data over a 1gbit network interface, so I was expecting to see 100mb/s, or close to it.

At first, I did get 100mb/s. For a minute or so anyway. Then I saw the speed slowly drop to around 30-45mb/s. I thought this was rather strange.

I upgraded all the drivers on the server, mainly the network drivers, as I saw the network speed drop to around that level at the same time as well. However, this made no difference.

I then started to do some research to figure out what was going on.

What I saw was the following: The memory was increasing to a certain, pre-defined point, then it would stop. This indicated that the copying was actually being buffered to memory (write-cache). I assume this is happening because I used the default options when creating a parity drive without a SSD array. This creates a 2GB buffer in memory, which you can clearly see here.

memory

Once the memory buffer, or write-cache is full, you can see the speed drop and the memory start writing the data to disk.

memory

Annoying huh? One way to fix this is by using a cache array of SSD hard drives, but there is another fix.

In PowerShell, you can set the storage space to believe it has battery backup. This is like having battery backup on a raid card. First you need to get the friendly name of your storage volume.

The command is

Get-StoragePool

You will get something similar to the following
powershell

Now set the power protected mode of the pool as follows

Set-StoragePool -FriendlyName Backup -IsPowerProtected $true

replace backup with the name of your storage pool.

Here it is set as $false

3

Here it is set as $true

4

Quite a difference.

**** I should warn you though that if your server crashes, or has a power failure, your storage space may become corrupt. Make sure you have a UPS in place ****

Like I said earlier, this can be improved with a SSD cache array.

Hopefully this helps someone out there.

*** UPDATED 15/12/2015 ***

I highly recommend you view the Fujitsu white paper on Storage Spaces here.

21 thoughts on “Storage Spaces and Parity – Slow write speeds”

      1. Thanks for the reply. So, you’re saying, if you screw with this setting, and dont have a UPS, ur whole space could become corrupted and lose all your data from a single power outage or disconnect?

        1. Yeah, that is a possibility. It caches in memory, or uses your memory as a cache. So if you lose power, you lose what is in memory. I haven’t had any issues yet, but it’s something to be aware of.

  1. I tried to do this get this error. Im running powershell in admin

    PS C:WINDOWSsystem32> get-storagepool

    FriendlyName OperationalStatus HealthStatus IsPrimordial IsReadOnly
    ———— —————– ———— ———— ———-
    Storage pool OK Healthy False False
    Primordial OK Healthy True False

    PS C:WINDOWSsystem32> set-storagepool -friendlyname Storage pool -ispowerprotected $true
    Set-StoragePool : A positional parameter cannot be found that accepts argument ‘pool’.
    At line:1 char:1
    + set-storagepool -friendlyname Storage pool -ispowerprotected $true
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidArgument: (:) [Set-StoragePool], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Set-StoragePool

  2. Reply to David:
    Put quotes around your storage pool name since it has a space.

    set-storagepool -friendlyname “Storage pool” -ispowerprotected $true

    This worked for me

  3. I did this and after some processing it seems to go through, however I do not see an increase in write performance on the pool. Any other ideas?

  4. Hey,Thanks really helpful.
    2 more questions: First I do the tweak like you said. Then I add a backup UPS to my server, do you think that if my power is never done then the storage is safe too? What about a BSOD or something? Does these system failures matter or just power failure matters?

    And, if bad things happen, my storage system will be broken or just new data? My storage is for backup, so the running data lost is not a really problem to me. Can you answer my questions?

    Thanks anyway!

    1. A system issue would cause this too if you had a sudden BSOD, or hardware failure.

      In saying that, its rare to have this.

      I believe if you use SSD for cache, this solves the issue,

  5. If a power loss does occur, will only the data waiting to be written to the disk be lost, or will all the data on the whole storage space become corrupt? Thanks!

  6. I was using hardware RAID1 then discovered SS. Love it so far.
    A parity with 4 mixed drives I get 200 mb/s read, about 35 write.
    Transferring over GIG LAN I see 25-50 mbs write which is tolerable I guess but I’m curious about adding in a SSD.
    I have a spare 120 gig to try. Do I simply add it to the pool and SS knows to use it for cache or is there a command to tell it so?

    Thanks!

Leave a Reply