Storage Spaces has sucked in Parity mode for a hot WHILE. The reason is because Microsoft uses stupid logic to choose the columns, interleave, and allocation unit size. And in the GUI, it still does.
This article will dodge a lot of the technicalities of what columns are, what interleave is, and what allocation unit size even means — but just know Parity will finally be fast, and you set it up correctly without knowing what those settings were. It beats Microsofts approach which hides all of this from the end user, and chooses crap settings to ensure Parity is gimped. Who knows why.
By default, Storage Spaces uses a 1GB allocation for ‘caching’ a file-transfer onto the likely-faster C storage, then transfers over to the cold storage of your mechanical drives. This causes monster latency after only a few gigabytes of data transfer when certain things don’t line up properly (I’m talking about the three things mentioned in the first paragraph). This is what causes the 15Mbps or 20Mbps write speeds.
- Increasing this 1GB cache size doesn’t help.
- Adding SSD’s or NVMe drives as cache doesn’t help.
- Dedicating an SSD or NVMe drive as buscache also doesn’t help. I’ve tried them all.
The answer? There’s some fancy terms that have to puzzle-piece together nicely, and Microsoft doesn’t help you accomplish this. I’ve thrown together this little online calculator (forgive the USD, its to help you calculate what to have your values be (I’ve also given you the equation that I simply can’t take credit for, just in case the calculator here doesn’t account for your setup), and then let’s talk about what the final “make virtual disk” in Powershell will look like. It wont be hard, I promise.
So, lets do some examples, cause that makes these easy to understand, right? You want to get off that mirror setup you reluctantly chose cause Parity sucked, right? You wont even have to tear down your pool most likely. Just gotta add a virtual disk using specific settings:
Example 1:
Drive Count: 5+
——————————————
— The most common example. You’ve got 5 or more drives, and you’re loading up huge files onto here, like TV Shows, Movies, ISOs, etc.File Structure: REFS
——————————————
— REFS instead of NTFS, cause eff that old crap (jk, I love you NTFS, but this example type just simply begs for REFS, and its much more mature in March 2022 than in years past).Allocation Unit Size: 64Kb [aka: Potential Size Eventually: >16TB (greater than 16TB)]
——————————————
— 4Kb is default. This tops out at 16TB, and with 5 drives, there’s a good chance we’re going to be larger than that eventually – prepare now and choose 64kb.
The calculator should now say 16 for interleave, and 5 for columns.
Ok, so here’s why this makes everything work. Because no extra calculations are needed due to how perfectly this lines up, Windows will bypass using the 1GB of cache bottleneck, and write data directly to the striped array– erm, directly to your storage space with 5+ drives.
Here’s the powershell to create this example. I’ll break it down.
New-VirtualDisk -StoragePoolFriendlyName SLOWPOOL -FriendlyName Parity_Int16KB_5Col_THICK -ResiliencySettingName Parity -Interleave 16KB -PhysicalDiskRedundancy 1 -ProvisioningType Fixed -Size 10TB -NumberOfColumns 5
Explanation in order: Makes a new virtual disk within the Storage Pool you have named SLOWPOOL, and names the virtual disk “Parity_Int16KB_5Col_THICK” and tells it to be a Parity (instead of mirror or basic), and assigns an Interleave of 16KB, and assigns 1 disk to be able to go down (Parity, but told in a different place since its needed), provisioned as THICK (or “Fixed”) instead of “THIN” (this ISN’T required, feel free to use thin, works just as fast), and assigns 10TB to the vdisk, with 5 columns, as our calculator indicated we should.
Your pool name will likely differ. You FriendlyName your vdisk whatever you want. You can use thin provisioning if desired. You can get rid of “-Size 10TB” and use “-UseMaximumSize” if you want it to use your whole pool.
Now, feel free to go back to the GUI for making your volume (aka, your letter drive storage space) on this vdisk. Use ReFS, and remember to choose 64Kb for the allocation unit size like the calculator showed.
Example 2:
Drive Count: 3
——————————————
— An example with less disks. You’ve got 3 drives, the minimum to let this work, and you’re loading up huge files onto here, like TV Shows, Movies, ISOs, etc.File Structure: REFS
——————————————
— REFS instead of NTFS, cause eff that old crap (jk, I love you NTFS, but this example type just simply begs for REFS, and its much more mature in March 2022 than in years past).Allocation Unit Size: 64Kb [aka: Potential Size Eventually: >16TB (greater than 16TB)]
——————————————
— 4Kb is default. This tops out at 16TB, and with 3 drives, there’s a good chance we’re going to be larger than that eventually – prepare now and choose 64kb.
The calculator should now say 32 for interleave, and 3 for columns.
Ok, so here’s why this makes everything work. Because no extra calculations are needed due to how perfectly this lines up, Windows will bypass using the 1GB of cache bottleneck, and write data directly to the striped array– erm, directly to your storage space with 3 drives.
Here’s the powershell to create this example. I’ll break it down.
New-VirtualDisk -StoragePoolFriendlyName SLOWPOOL -FriendlyName Parity_Int32KB_3Col_THICK -ResiliencySettingName Parity -Interleave 32KB -PhysicalDiskRedundancy 1 -ProvisioningType Fixed -Size 10TB -NumberOfColumns 3
Explanation in order: Makes a new virtual disk within the Storage Pool you have named SLOWPOOL, and names the virtual disk “Parity_Int32KB_3Col_THICK” and tells it to be a Parity (instead of mirror or basic), and assigns an Interleave of 32KB, and assigns 1 disk to be able to go down (Parity, but told in a different place since its needed), provisioned as THICK (or “Fixed”) instead of “THIN” (this ISN’T required, feel free to use thin, works just as fast), and assigns 10TB to the vdisk, with 3 columns, as our calculator indicated we should.
Your pool name will likely differ. You FriendlyName your vdisk whatever you want. You can use thin provisioning if desired. You can get rid of “-Size 10TB” and use “-UseMaximumSize” if you want it to use your whole pool.
Now, feel free to go back to the GUI for making your volume (aka, your letter drive storage space) on this vdisk. Use ReFS, and remember to choose 64Kb for the allocation unit size like the calculator showed.
Example 3:
Drive Count: 5+
——————————————
— An example with 5+ disks. You’ve got 5+ drives, and you’re loading up huge files onto here, like TV Shows, Movies, ISOs, etc.File Structure: NTFS
——————————————
— I haven’t actually tested this NTFS setup, but it follows the same laws, and should work just as well as ReFS).Allocation Unit Size: 16Kb [I chose this at random – worth a google for which one you go with]
——————————————
— 4Kb is default. But 4Kb maxes out at 16TB volumes, so we’re choosing something bigger to get around that. Choose 16kb.
The calculator should now say 4 for interleave, and 5 for columns.
Ok, so here’s why this makes everything work. Because no extra calculations are needed due to how perfectly this lines up, Windows will bypass using the 1GB of cache bottleneck, and write data directly to the striped array– erm, directly to your storage space with 3 drives.
Here’s the powershell to create this example. I’ll break it down.
New-VirtualDisk -StoragePoolFriendlyName SLOWPOOL -FriendlyName Parity_Int4KB_5Col_THICK -ResiliencySettingName Parity -Interleave 4KB -PhysicalDiskRedundancy 1 -ProvisioningType Fixed -Size 10TB -NumberOfColumns 5
Explanation in order: Makes a new virtual disk within the Storage Pool you have named SLOWPOOL, and names the virtual disk “Parity_Int4KB_5Col_THICK” and tells it to be a Parity (instead of mirror or basic), and assigns an Interleave of 4KB, and assigns 1 disk to be able to go down (Parity, but told in a different place since its needed), provisioned as THICK (or “Fixed”) instead of “THIN” (this ISN’T required, feel free to use thin, works just as fast), and assigns 10TB to the vdisk, with 5 columns, as our calculator indicated we should.
Your pool name will likely differ. You FriendlyName your vdisk whatever you want. You can use thin provisioning if desired. You can get rid of “-Size 10TB” and use “-UseMaximumSize” if you want it to use your whole pool.
Now, feel free to go back to the GUI for making your volume (aka, your letter drive storage space) on this vdisk. Use NTFS, and remember to choose 16Kb for the allocation unit size like the calculator showed.
Let me know if there are other combinations. I’m only on gigabit, and am easily saturating it for 8+ hours straight (I was moving a LOT of stuff to test this) with no dips (other than little ones since my drives are old). I’ve seen screenshots of 300+ Megabytes per second (3x gigabit) for people that have only 3 drives in the array, and are on 10Gbe.
- Citations Coming Soon to help flesh out where a lot of the information discovered came from.
These are my settings:
Server 2019
12 hdds, 8-12 TB
interleave 32.768
number of columns 10
dual parity
ntfs block size 32.768 * (10 – 2) = 262.144
Bitlocker encryption
Read speed is ~400 MB/s, write speed ~80-100MB/s
… which is abysmally slow for 12 disks.
Read speed was not really affected by Bitlocker, but write speed took a hit. I believe it was ~300-400 MB/s without.
So what is going on? Is it the mixed hdd sizes? Considering it has been slow from the first byte written even on a 1TB virtual disk without encrytion in an empty pool I dont think they should be to blame.
Are there actually any change in storage spaces on Server 2022 that would improve performance compared to 2019?
Hi Thanks for the information.
I would like to start using storage spaces on windows 11 pro. Just bought a new pc with 3 18TB disk will at 2 disk later.
What would be the ideal config for parity setup and performance.
The two aditional disk are not empty yet. I would like to copy the files to the new 3 disk pool and when those disks are empty I would like to ad them to the pool.
Can i then start with 5 colums with only 3 disk and a interleave of 16kb
Kind Regards
Eduard
I’m using a Windows Storage Space with Windows 10 Pro. The write speed is terrible and I’d like to improve it. Is there a way to convert my existing storage space to one like you’ve shown in your guide and, if so, does it require Server 2022? Below are the 13 drives I have in my storage space.
– 1 x 1.81 TB
– 1 x 3.63 TB
– 3 x 4.54 TB
– 7 x 7.27 TB
– 1 x 14.5 TB
The form doesn’t work anymore, licence 😉