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 и не сможет быть загрузочным.
В файлике /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"; }