Создавайте диски через устройство virtio-blk, если не нужна поддержка scsi, это самый быстрый вариант. Если нужна, то создавайте virtio-scsi. У них можно поиграться с количеством аппаратных очередей через num_queues. Естественно, в госте ставятся соответствующие паравиртуализованные драйверы.
Далее, можно отделить IO-тред от воркеров через создание object iothread. А ещё лучше, создать их по количеству потоков процессора, хотя, ядро убунты их ещё не умеет, по-моему, в современных ядрах это есть.
Дальше, при создании самого девайса диска, лучше включить прямой кеш cache.direct=on и нативное io через aio=native. Так будет минимум оверхед на кеш, выше надёжность в случае сбоя, и реальная скорость выше.
Таким макаром на виндовых гостях всего раза в полтора ниже IOPS'ы получаются, чем в нативе. На линуксах же почти как натив, если юзать проброс через vhost.