https://events.static.linuxfound.org/sites/events/files/slides/kvm-forum-2017-slides.pdf

В статье рассказывается о внутренних механизмах кеширования формата qcow2.
На производительность очень сильно влияет размер таблиц L2, которые размещаются в памяти.
Вот тут объяснения и методики расчета размеров кешей: https://github.com/qemu/qemu/blob/master/docs/qcow2-cache.txt
Задать размер таблиц L2 можно с помощью опции l2-cache-size так:

-drive file=img.qcow2,l2-cache-size=8M

Дефолтный размер - 1Мb, которого достаточно для диска размером 8Gb с кластером 64Kb.
Дефолтная формула для расчета размера таблиц L2 - disk_size*8/cluster_size
Вот табличка с замерами производительности диска 20Gb при случайном чтении блоками 4K:

L2 cache size Average IOPS
1 MB 5100
1.5 MB 7300
2 MB 12700
2.5 Mb 63600

Также рекомендуется очищать неиспользуемые элементы кеша с помощью опции cache-clean-interval:

-drive file=hd.qcow2,cache-clean-interval=60 


Утверждается, что в qemu версии 2.10 и более новых реализован более эффективный алгоритм размещения данных кластерах (cluster allocation), который увеличивает IOPS от 15% до 60%.

как написано тут: https://forum.proxmox.com/threads/qemu-2-5-setting-l2-cache-size-drive-option.27983/ в Proxmox можно добавить параметры к конфигурации диска с помощью qm set… Однако, такой диск не сможет нормально обслуживаться средствами proxmox и не сможет быть загрузочным.

Working Hack

В файлике /usr/share/perl5/PVE/QemuServer.pm нужно найти строчку:

$opts .= ",format=$format" if $format && !$drive->{format};

и после нее добавить чтобы получилось так:

  $opts .= ",format=$format" if $format && !$drive->{format};
  if ($format eq "qcow2") {
              $opts .= ",l2-cache-size=16M";
      }