I may have semi fixed the issue. The MPIO policy was set to round robin which forced the use of unoptimised paths. Turned it to failover only a performance hash it 47k IOPS per physical host. I can run all three at nearly 100K IOPS now.
I still only see a fraction of this in the guest though (13k IOPS) any ideas why? And also is it possible to get Windows 2016 to drive the IOPS any further so that one server can drive the full 90k?
Thanks,
Probs