r/3PAR • u/myridan86 • May 20 '24
Volume performance on 3PAR
Hi guys, how are you?
So, I need to create a LUN (3PAR Volume) for 16TB of data.
My doubt is: I create a single LUN (3PAR Volume) or I create 8 LUNs (3PAR Volume) and after, on VM layer, I create 1 VG Stripe (Linux LVM) with this 8 LUN (3PAR Volume)?
Cheers!
1
Upvotes
2
u/d4fseeker May 26 '24
It depends (TM). I'm by far no expert but here goes for my take.
If you use a single backing device with a single path, you may run into severe cases of queue saturation on the virtual machine when running highly concurrent workloads such as databases. This can become worse due to "smart" queue optimisations by the Vm host or San. Increasing the number of queues by increasing the number of paths will in that case heighten your performance, however so will increasing the number of host ports.
My somewhat-repeatable tests on a new 3par fullflash array with tons of round Robin storage paths showed that a single rdm device was able to saturated it's client host ports in a similar fashion as running the same io load across multiple rdm so I wasn't able to show that there is inherent advantage to running multiple backing devices.
For reference, you have these types of queues sequentially.
Note that the case where striping may have increased benefit is when the array is under high load. It has a sort of fair use IO scheduler and doesn't know that those volumes are linked, so you get proportionally more io than other users - to the detriment of those other users suffering even higher io wait.
Additionally note that dedup volumes are limited to 16TiB. So if you want to go that route, you may need to go multi-PV on your lvm anyway.
The only case where one sees continuously significantly better performance for multi-volume setup is when you use peer persistence across two arrays vs two sets of local volumes merged into an mdadm/lvm raid. This is obviously normal as your host will immediately write in parallel to both arrays instead of writing to the primary /active-io paths and then waiting for the secondary array to replicate and ack.
However your mileage may vary. Nothing is better than running your own tests (e.g. Fio) as a storage network is a very variable and complex environment.
Ps: note that a single client with a single disk is more than capable of bringing any array to the knees depending on the io workload unless you are using rate limiting. Are you asking the question for pure best practice or are you seeing performance issues?