Deduplicate VMWare virtual machines with Windows Server 2012 R2 – part 2

In my previous post I wrote how I used Windows Server 2012 R2 server to provide deduplicated storage for VMWare environment. I achieved some great deduplication results but I was not satisfied with performance. So I built another solution.

Setup

  • Physical Windows Server 2012 R2
  • 2×2 Gbit teamed NICs (HP Flex Adapter)
  • 2x 2,9Ghz Intel CPU
  • 192GB RAM
  • Storage Spaces disk pool
    • 100GB SSD
    • 4TB HDD

In to the pool I created one fixed 3TB disk with 92GB (usable SSD space) SSD Write-back cache. I used following powershell command to do it:

New-VirtualDisk -StoragePoolFriendlyName Pool1 -FriendlyName vDisk1 -Size 3TB -ResiliencySettingName Simple -ProvisioningType Fixed -WriteCacheSize 92GB

With this setup all small random writes are landing on SSD disk. This ensures much better overall performance than HDD only solution.

Performance

During Storage vMotion IO is going to both disks. SSD takes most of the write IOs. Throughput is up to 400MB/sec with multiple concurrent Storage vMotions. Throughput slows down when cache gets full and data has to be destaged to HDD. After destage speed increases again.

NFS datastore performance

Results

With this setup both read latency and write latency are acceptable. Datastore contains 87 running VMs. Dedupe ratio on the volume is 94%. About 30GB of RAM is used for file system cache.

My main goal was to to test if a Windows Server 2012 R2 is a viable option for some of the workloads running on VMWare. From performance perspective I think that this type of setup is viable to run VMs. From availability perspective there is still some things to be done e.g clustering.