Назад | Перейти на главную страницу

Плохая производительность синхронизации ввода-вывода KVM в гостевой системе Linux

Я настраиваю виртуальную гостевую систему Ubuntu 15.10 на сервере Ubuntu 15.04, используя libvirt и KVM.

Хранение в хост-системе:

# mount | grep ext4
/dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
/dev/sdb1 on /media/hdd type ext4 (rw,relatime,data=ordered)

/ dev / sda это SSD и / dev / sdb это HDD.

Первоначальная настройка производилась с помощью virt-manager.

Проблема:

Общая производительность гостевой системы кажется хорошей, однако некоторые операции, особенно установка пакетов с помощью apt-get (и, следовательно, установка гостевой системы), выполняются очень медленно.

Образ гостевого диска находится в необработанном формате, и я попытался разместить его как на SSD, так и на жестком диске в виде файла, а также в виде отдельного раздела на жестком диске. Различные местоположения имеют некоторую разницу в производительности, однако установка некоторых пакетов с использованием apt-get по-прежнему в два или три раза медленнее, чем в хост-системе.

Я также пробовал различные варианты кеширования диска qemu, и используя небезопасно кеш, кажется, полностью устраняет проблему. Но любые другие настройки кеша, включая никто и обратная запись показывает плохую производительность. Конечно, использование unsafe не похоже на реальное решение.

Вот отрывок из гостевой xml-конфигурации:

<disk type='block' device='disk'>
  <driver name='qemu' type='raw' cache='none'/>
  <source dev='/dev/sdb2'/>
  <target dev='vda' bus='virtio'/>
  <boot order='2'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
</disk>

При использовании файла образа вместо раздела, который становится:

<disk type='file' device='disk'>
  <driver name='qemu' type='raw' cache='none' io='native'/>
  <source file='/media/hdd/dsi/vm/ubuntu4.bin'/>
  <backingStore/>
  <target dev='vda' bus='virtio'/>
  <boot order='2'/>
  <alias name='virtio-disk0'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</disk>

Пытаясь решить эту проблему, я заметил, что первый раздел на жестком диске не был правильно выровнен, поэтому я воссоздал раздел с правильным выравниванием (которое для этого жесткого диска - 4096). Это тоже мало помогло.

Я также пробовал установить для гостя elevator = noop, но безрезультатно.

Когда я запускаю аналогичную гостевую систему на ПК с Windows с помощью VirtualBox, я не испытываю такого снижения производительности, поэтому я надеюсь, что есть способ запустить гостевую систему с такой же производительностью и на KVM.

Пытаться

cache=directsync

Или

cache=writethrough

Также

vm.swappiness=1
vm.vfs_cache_pressure=75 (play around with this)

Используйте deadline вместо cfq / noop (я нашел плохих исполнителей на ssds и raid).

Не обращайте внимания на то, что люди говорят о cache = none или обратной записи как о лучшем. Это не всегда так просто.