LINUX.ORG.RU
ФорумAdmin

Низкая производительность диска в гостевой ВМ Qemu/KVM

 


0

2

Всем доброго.

Столкнулся с низкой производительностью диска в гостевой вм. Имею на хосте Ubuntu 14.04 c qemu 2.0. Виртуалка Centos 6.5. На хостовой системе

dd if=/dev/zero of=/dev/vg0/vm2 bs=4K count=100000  oflag=direct
409600000 bytes (410 MB) copied, 7.9134 s, 51.8 MB/s
Этот же том в виртуалке:
dd if=/dev/zero of=/dev/vdb bs=4k count=100000 oflag=direct
409600000 bytes (410 MB) copied, 25.9333 s, 15.8 MB/s
Конфиг диска
<disk type='block' device='disk'>
      <driver name='qemu' type='raw' cache='none'/>
      <source dev='/dev/vg0/vm2'/>
      <target dev='vdb' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </disk>

Чую, что гдето не так настроено, но где?


-=:=-

Для локальных хранилищ или DAS (Direct-attached storage - дисковые полки) рекомендуется использовать writethrough режим, поскольку он гарантирует целостность данных и приемлемую производительность ввода/вывода. Для удаленных хранилищ (NFS или iSCSI) рекомендуется использовать режим none, т.к. операции прямого ввода/вывода (O_DIRECT) дают лучшую производительность чем синхронные (O_SYNC).

cache='writethrough'

Попробуй так тестануть.

KosmiK ★★
()

1. на хосте низкая скорость.
2. деб.дистрибутивы не рекомендовали для KVM, по крайней мере раньше
3 уверен что другой дисковой активности на тесте виртуалки не было ?

handbrake ★★★
()
Ответ на: комментарий от apmucm

Попробуйте в виртуальной машине:

  • dd без опции
    oflag=direct
    
  • dd без опции
    oflag=direct
    
    и c параметром
    cache='writeback'
  • dd с опцией
    oflag=direct
    
    и c параметром
    cache='writeback'
    в конфигурации домена.
petav ★★★★★
()
Последнее исправление: petav (всего исправлений: 1)
Ответ на: комментарий от petav

Виртуалке выделено 196МБ ОЗУ, работает одна на хосте без какойлибо посторонней нагрузке. Тесты проводил по 3 раза каждый.

cache=none

dd if=/dev/zero of=/dev/vdb bs=4k count=100000 oflag=direct
409600000 bytes (410 MB) copied, 26.5642 s, 15.4 MB/s
dd if=/dev/zero of=/dev/vdb bs=4k count=250000
1024000000 bytes (1.0 GB) copied, 3.18126 s, 322 MB/s

cache=writeback

dd if=/dev/zero of=/dev/vdb bs=4k count=100000 oflag=direct
409600000 bytes (410 MB) copied, 17.2967 s, 23.7 MB/s
dd if=/dev/zero of=/dev/vdb bs=4k count=250000
1024000000 bytes (1.0 GB) copied, 2.30925 s, 443 MB/s

cache=writethrough

dd if=/dev/zero of=/dev/vdb bs=4k count=100000 oflag=direct
409600000 bytes (410 MB) copied, 31.6298 s, 12.9 MB/s
dd if=/dev/zero of=/dev/vdb bs=4k count=250000
1024000000 bytes (1.0 GB) copied, 4.93239 s, 208 MB/s

в тоже время на хосте на этот же LVM том:

dd if=/dev/zero of=/dev/vg0/vm2 bs=4k count=100000 oflag=direct
409600000 bytes (410 MB) copied, 8.14539 s, 50.3 MB/s

apmucm
() автор топика
Ответ на: комментарий от handbrake

1. на хосте низкая скорость.

на хосте я привел скорость - 50 МБ/с

2. деб.дистрибутивы не рекомендовали для KVM, по крайней мере раньше

слышал о таком суеверии , рядом стоит сервак на centos 6.5 с этой же ВМ, картина таже: внутри ВМ скорость меньше в 3 раза.

3 уверен что другой дисковой активности на тесте виртуалки не было ?

146% ) сервак исключительно для тестов с одной ВМ.

apmucm
() автор топика
Ответ на: комментарий от apmucm

Я и говорю она низкая, у меня на обычном десктопном sata за сотню переваливает.
Не суеверия, на wiki qemu это писали, если память не изменяет, в deb-based каких-то патчей когда-то не хватало, что сейчас - не знаю.
Какая мать/проц ?

handbrake ★★★
()
Ответ на: комментарий от handbrake

абсолютное значение на хосте не важно, суть в том что в виртуалке на тот же том скорость меньше в 3 раза.

Сервер Dell PowerEdge 2950, Xeon(R) CPU X5355 @ 2.66GHz

apmucm
() автор топика
Ответ на: комментарий от apmucm

долго имел возможность созерцать аналогичную картину
пришел к выводу, что не возможно повысить скорость разными значениями опций и необходимо менять подход
Попробуйте подцепить LVM том из хостовой части в виртуалку через iSCSI и сделать тесты.

Vlad-76 ★★★★
()
Последнее исправление: Vlad-76 (всего исправлений: 1)
Ответ на: комментарий от handbrake

рядом HP DL360G7 там такая же ситуация qcow и raw на ext4 пробовал, там скорость еще на пару мегабайт меньше)

apmucm
() автор топика
Ответ на: комментарий от Vlad-76

[quota] долго имел возможность созерцать аналогичную картину пришел к выводу, что не возможно повысить скорость разными значениями опций и необходимо менять подход [/quota] получается KVM УГ?)

[quota] Попробуйте подцепить LVM том из хостовой части в виртуалку через iSCSI и сделать тесты. [/quota] NFS пойдет? в чем соль подобного тестирования?

apmucm
() автор топика
Ответ на: комментарий от apmucm

Еще раз говорю, у меня даже на домашнем серваке >100 мб/с гости в пике гоняют на qcow2-ext4-mdadm. KVM не уг, вот железо/дрова могут быть.

handbrake ★★★
()

детка, ты днище, мерять производительность виртуалки с помощью dd.

anonymous
()
Ответ на: комментарий от apmucm

В том же что и монтирование iSCSI шары с удаленного хранилища. Попробуйте NFS. Но NFS умеет монтировать ФС, а не том если я не ошибаюсь.
iSCSI как я думаю имеет самый низкий оверхед при передаче данных и команд.
Скажу сразу я не успел еще протестить данный способ добавления дискового пространства в виртуалку.

Vlad-76 ★★★★
()
Ответ на: комментарий от handbrake

Еще раз говорю, у меня даже на домашнем серваке >100 мб/с гости в пике гоняют на qcow2-ext4-mdadm. KVM не уг, вот железо/дрова могут быть.

ладно.. вот вам два теста из ВМ, думаю разницу в условиях тестирования поймете?

dd if=/dev/zero of=/dev/vdb bs=1M count=100000 oflag=direct
3037724672 bytes (3.0 GB) copied, 11.6243 s, 261 MB/s
dd if=/dev/zero of=/dev/vdb bs=4k count=100000 oflag=direct
409600000 bytes (410 MB) copied, 26.5642 s, 15.4 MB/s
apmucm
() автор топика

<disk type='block' device='disk'> <driver name='qemu' type='raw' cache='none'/> <source dev='/dev/vg0/vm2'/> <target dev='vdb' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </disk>

а нахрена вообще вот так делать? Как будто ты семёрку туда запихал? Не проще ли показать как обычный линуксовый диск? А ты ещё и цпу на ио просираешь.

anonymous
()
Ответ на: комментарий от apmucm

собственно к этому я тоже клоню
Покопался в своих тестах, там тоже было много только размер блока был 1М а не 4к

Vlad-76 ★★★★
()
Последнее исправление: Vlad-76 (всего исправлений: 1)
Ответ на: комментарий от anonymous

а нахрена вообще вот так делать? Как будто ты семёрку туда запихал? Не проще ли показать как обычный линуксовый диск? А ты ещё и цпу на ио просираешь.

а как надо?

apmucm
() автор топика
Ответ на: комментарий от Vlad-76
vm-icinga:~# dd if=/dev/zero of=/dev/vdc bs=4k oflag=direct count=200000
200000+0 records in
200000+0 records out
819200000 bytes (819 MB) copied, 25.6183 s, 32 MB/s

qcow2 over ext4 over mdadm raid1 over sata 7.2k (какие-то сигейты на 2Т, es3 кажись)

БОльший объем гонять не буду - система под нагрузкой: на этом массиве, помимо этого тестового vdc, еще 5 образов qcow2 во время теста использовуются 4 виртуалками, которые не остановить не могу. Рейд собирался со скоростью от 160 МБ/с до ~100 МБ/с, виртменеджер в графиках при установке первого гостя, прыгал до 120-140 МБ/с. Железо - самосбор коммодити. Это тихий домашний серв.

handbrake ★★★
()
Ответ на: комментарий от handbrake

«БОльший объем гонять не буду - система под нагрузкой: на этом массиве»
Все таки у Вас отдельный физ. диск или диск на рейде из физ дисков?

Vlad-76 ★★★★
()
Ответ на: комментарий от apmucm

Виртуалке выделено 196МБ ОЗУ, работает одна на хосте без какойлибо посторонней нагрузке.

А можете выделить виртуальной машине максимально сколько возможно CPU и памяти и повторить один из тестов?

petav ★★★★★
()
Ответ на: комментарий от Vlad-76

qcow2 over ext4 over mdadm raid1 over sata 7.2k (какие-то сигейты на 2Т, es3 кажись)

handbrake ★★★
()
Ответ на: комментарий от apmucm

Это рабочий массив, не готов его по полной гонять - виртуалки сейчас используются
mc с этого массива на него-же на копировании 10% от 80гигового образа диска в mc (прервал копирование) показал колебания вокруг 70МБ/с, думаю - врет, больше похоже на чтение в кэш, массив на 2/3 заполнен, думаю это можно считать рабочей скоростью чтения.

handbrake ★★★
()
Ответ на: комментарий от petav

А можете выделить виртуальной машине максимально сколько возможно CPU и памяти и повторить один из тестов?

Очень итересно получилось. На Dell PowerEdge 2950: 1. увеличенив vcpu до 4х в пределах одного физического сокета с обязательным pinning vcpu к реальным ядрам - с 16МБ/с до 19МБ/c, без pinning деградация производительности 2. увеличение vcpu до 8(максимум на сервере) с pinning оставило производительность на уровне 1vcpu

На HP DL360G7: 1. pinning даже одного vcpu увеличил скорость с 17МБ/с до 25МБ/с, дальнейшее увеличение vcpu ничего не дало 2. если без pinning, то уже 2vcpu давали теже 25МБ/с

в любоам случае это меньше , чем на физическом хосте в 2а раза.

Кстати, увеличении блока приводило к уменьшению разницы производительности и на хосте и на госте. при размере блока 512k они почти сравнялись.

apmucm
() автор топика

Дурилки картонные

Судя по нормальной производительности только с большими блоками данных, сторадж неоталигнен по физическим 4к секторам.

anonymous
()
Ответ на: комментарий от apmucm

серв, состояние покоя

srv:/data3 # dd if=/dev/zero of=./test.tst bs=4k oflag=direct count=200000                                                     │ 9729 root       20   0 89512  4008  3116 S  0.0  0.0     0     0     0 - -  0:00.06 sshd: root@pts/0
200000+0 записей получено                                                                                                      │ 6154 root       20   0  346M  5264  3400 S  0.0  0.0     0     0     0 - -  0:00.21 /usr/lib/udisks2/udisksd --no-debug
200000+0 записей отправлено                                                                                                    │  363 root       20   0  287M 16508 16160 S  0.0  0.1     0     0     0 - -  0:03.07 /usr/lib/systemd/systemd-journald
 скопировано 819200000 байт (819 MB), 9,09639 c, 90,1 MB/c

srv:/data3 # dd if=/dev/zero of=./test.tst bs=4M oflag=direct count=1000                                                       │                                                                                                                              
1000+0 записей получено                                                                                                        │                                                                                                                              
1000+0 записей отправлено                                                                                                      │                                                                                                                              
 скопировано 4194304000 байт (4,2 GB), 29,0956 c, 144 MB/c 
1 виртуалка с 1vcpu/1G ram, vda,vdb с работающей ичигой на том-же рейде что и тестовый vdc
vm-icinga:/home/support # dd if=/dev/zero of=/dev/vdc bs=4k oflag=direct count=200000                                          │srv:/data3/vm/raid-pool3 # ls -lah
200000+0 записей получено                                                                                                      │итого 416G
200000+0 записей отправлено                                                                                                    │drwxr-xr-x 2 root root 4,0K июл 12 12:24 .
 скопировано 819200000 байт (819 MB), 21,7277 c, 37,7 MB/c 

vm-icinga:/home/support # dd if=/dev/zero of=/dev/vdc bs=4M oflag=direct count=1000                                            │-rw-r--r-- 1 root root 9,8G июл 12 12:18 srv-bd-c.qcow2
1000+0 записей получено                                                                                                        │-rw------- 1 root root 240G июл 12 12:18 srv-bd-e.qcow2
1000+0 записей отправлено                                                                                                      │-rw-r--r-- 1 qemu qemu 295M июл 12 12:28 test.qcow2
 скопировано 4194304000 байт (4,2 GB), 31,463 c, 133 MB/c      
да, vcpu на маленьких блоках грузит прилично, занятно, не обращал на это внимания раньше.
гы, мой домашний тихий серв из «завалялось» стабильно делает брендовый. :)

handbrake ★★★
()
Ответ на: комментарий от handbrake

Тут вот еще какой момент. Если у Вас виртуалка лежит в файле, то даже несмотря на опцию dd oflag=direct теста виртуалки приведет к тому, что будет задействована RAM хоста и тест может показать скорость большую.

А можете выполнить в хостовой системе команду

sync ; time {dd if=/dev/zero of=./test.tst bs=4k oflag=direct count=200000 ; sync;}
... даже несмотр на ключ oflag=direct

Vlad-76 ★★★★
()
Ответ на: комментарий от Vlad-76

cache none в виртуалке был, сейчас одна запущена

srv:/data3 # sync ; time { dd if=/dev/zero of=./test.tst bs=4k oflag=direct count=200000 ; sync ; }
200000+0 записей получено
200000+0 записей отправлено
 скопировано 819200000 байт (819 MB), 9,38197 c, 87,3 MB/c

real    0m9.474s
user    0m0.032s
sys     0m2.347s
srv:/data3 # sync ; time { dd if=/dev/zero of=./test.tst bs=4k oflag=direct count=200000 ; sync ; }
200000+0 записей получено
200000+0 записей отправлено
 скопировано 819200000 байт (819 MB), 9,93759 c, 82,4 MB/c                                                                                                                                                                                                    
                                                                                                                                                                                                                                                              
real    0m10.045s                                                                                                                                                                                                                                             
user    0m0.036s                                                                                                                                                                                                                                              
sys     0m2.423s                                                                                                                                                                                                                                              
srv:/data3 # sync ; time { dd if=/dev/zero of=./test.tst bs=4k oflag=direct count=200000 ; sync ; }                                                                                                                                                           
200000+0 записей получено                                                                                                                                                                                                                                     
200000+0 записей отправлено                                                                                                                                                                                                                                   
 скопировано 819200000 байт (819 MB), 9,19213 c, 89,1 MB/c                                                                                                                                                                                                    
                                                                                                                                                                                                                                                              
real    0m9.253s                                                                                                                                                                                                                                              
user    0m0.028s                                                                                                                                                                                                                                              
sys     0m2.323s 

handbrake ★★★
()
Ответ на: комментарий от handbrake

Да, для двух дисков в зеркале у Вас потрясающие результаты!!! Результат тестов в 87,3 MB/c впечатляет.
ИНтересно узнать какой у Вас HDD (dmesg), материнка, проц, какой Linux. Какой пакет использовали для создания и работы с виртуалками? Как то настраивали диски или работу с ними специально?

PS.
я не смог увидеть на своем железе и софте скорость выше 25-27Мб/с.

Vlad-76 ★★★★
()
Последнее исправление: Vlad-76 (всего исправлений: 1)

выкинь dd. Тестируй sql базу. Куда нагляднее.

macumazan ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.