I guess that per-VM will work much better. Without the per-VM there is only one writing stream for all the VM in a job. The result is that the data from a VM is interleaved with the data of all the other VMs in the job. The backup is slower and you also get less dedupe. As you have tested, even the restore is quite slower. StoreOnce is optimized for sequential IO, but when you restore a VM from a multiplexed file, Veeam has to read a chunk of data from StoreOnce, than it will seek forward to avoid reading the other VMs blocks, and so on. This causes a lot of random IO on StoreOnce and makes the internal StoreOnce read-ahead less effective. I suggest disabling Veeam own dedupe and compression as well. Finally, if you can, make a test using Catalyst over LAN, it is even faster and, by the way, IVMR has been certified with it.