Я не могу добиться чего-либо близкого к полезной производительности, используя гостевой файл, расположенный в массиве mdadm RAID5. Я полагал, что оптимизировал все параметры массива и файловой системы для лучшей производительности R5:
Очень хорошая производительность массива на хосте (105 МБ без кеша, 470 МБ с кешем). Он состоит из 4 жестких дисков, относительно медленный.
Неужели KVM / QEMU не очень хорошо работает с массивами RAID5 mdadm?
Похоже, это проблема задержки (похожая на то, что я видел на ESXi с локальными дисками).
Задержка почти 17 секунд и средняя скорость записи 1-10 МБ
Пример из virt XML:
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='writeback'/>
<source file='/mnt/R5_DATA/data2.raw'/>
<target dev='sdd' bus='scsi'/>
<address type='drive' controller='0' bus='0' target='0' unit='3'/>
</disk>
<controller type='scsi' index='0' model='virtio-scsi'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</controller>
После тщательного тестирования можно получить очень хорошую производительность. Есть несколько обстоятельств, которые сильно различаются:
Я использовал стабильную версию Debian (9, Stretch), и это означает, что вы используете очень старую версию ядра, QEMU и virsh: - (
Я перешел на стабильную версию Ubuntu по той же причине, которая даст вам огромный скачок к новым версиям этих важных компонентов. На мой взгляд, стабильный Debian - действительно плохой выбор. Предполагается, что когда будет выпущен 10 / Buster, это будет нормально для периода, но рано или поздно у вас будет устаревшая система.
Во-вторых, было совершенно очевидно, что вам нужно использовать страничный кеш хост-системы. . При использовании MD RAID5 происходит некоторое предварительное кэширование. Даже когда кеш заполнен, производительность очень хорошая. В моем случае более 200 МБ / с записываются на медленные диски, которые в конфигурации JBOD работают со скоростью около 100 МБ / с.
Использование cache = none в XML и последующее использование кеша страниц гостевой системы Windows приведет к очень низкой производительности. Другое дело, SSD.
Не забудьте также поиграть с настройками кэша страниц в гостевой системе Windows для текущего диска, чтобы получить наилучший результат.
Не хватает нескольких трюков. Вы должны убедиться, что весь стек системы хранения выровнен для достижения оптимальной производительности. Вам нужно начать с размера ввода-вывода верхнего уровня и оптимизировать его. Например, создайте гостевую файловую систему NTFS с кластерами по 64 КБ, используйте блочные устройства LVM (остерегайтесь аномалий выравнивания LVM) и оптимизируйте свой программный RAID для фрагментов по 64 КБ. Если вы должны использовать файлы для поддержки блочных устройств ВМ, убедитесь, что файловая система выровнена таким же образом, особенно обращая внимание на размер вашей группы блоков (опция -g в mkfs.ext*), чтобы убедиться, что ваши группы блоков не все запускаются на одном диске. Если рабочая нагрузка вашего приложения верхнего уровня использует блоки меньшего размера, выполните выравнивание для блоков меньшего размера, но принцип тот же.
Я написал статью о том, как обеспечить оптимальное выравнивание файловой системы для конкретной рабочей нагрузки, которая может оказаться вам полезной.