LINUX.ORG.RU

Производительность ВМ в KVM

 ,


0

1

Привет!

Сделал ВМ в qemu+KVM, получившийся тормоз ставил Debian около 4 часов и грузится около 4 минут. Считаю это не нормальным. Что там можно подкрутить для повышения производительности? Да и как можно проверить параметры машины - я знаю сколько памяти ей выделено и, по сути, больше ничего.

Машина с виртуалкой слабая, но для изучения пойдет. Но вот для сравнения:

Хост:

$ time $(echo '2 1000000 ^ p'|dc >&/dev/null)

real	0m18.825s
user	0m18.621s
sys	0m0.020s

Гость:

$ time $(echo '2 1000000 ^ p'|dc >&/dev/null)

real	3m43.481s
user	3m43.174s
sys	0m0.328s

При этом виртуалка не ограничена в использовании процессорной мощности основной системы.

★★★★★

У меня та же проблема, как я понял у меня все упирается в hdd. В виртуалке операция чтения записи НАМНОГО меньше чем на локалхосте. И когда в виртуалке что нибудь простое читается/пишется/ставится, индикатор активности hdd горит непрерывно. Будто бы перед тем как гостевая система прочтет/запишет файл, в реальности его перечитывают 10 раз.

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

накопитель на virtio-драйвере, надеюсь?

Вот оно что михалыч.

roman77 ★★★★★
()
Ответ на: комментарий от anonymous
$ cat /proc/cpuinfo | grep flags
flags		: fpu de pse tsc msr pae mce cx8 apic sep pge cmov mmx fxsr sse sse2 pni popcnt hypervisor
flags		: fpu de pse tsc msr pae mce cx8 apic sep pge cmov mmx fxsr sse sse2 pni popcnt hypervisor
lspci |grep Virtio
00:04.0 RAM memory: Red Hat, Inc Virtio memory balloon
alozovskoy ★★★★★
() автор топика
Ответ на: комментарий от alozovskoy

мне кажется, или у вас нет ни vmx, ни svm - то есть аппаратной виртуализации?

Virtio memory balloon

И при чём тут lspci? драйвер накопителя настраивается в конфиге виртуалки

anonymous
()
Ответ на: комментарий от anonymous
$ cat /proc/cpuinfo | egrep '(vmx|svm)'
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm movbe lahf_lm dts tpr_shadow vnmi flexpriority
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm movbe lahf_lm dts tpr_shadow vnmi flexpriority
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm movbe lahf_lm dts tpr_shadow vnmi flexpriority
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm movbe lahf_lm dts tpr_shadow vnmi flexpriority

И при чём тут lspci? драйвер накопителя настраивается в конфиге виртуалки

Это с виртуалки вывод. ОК, спасибо, буду дальше изучать конфиги виртуалки.

alozovskoy ★★★★★
() автор топика

Похоже на софтовую эмуляцию. Ты точно под qemu-kvm запускаешь, а не на просто qemu?

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

А, думал есть что-то специализированное...

$ ps ax | grep -E 'qemu|kvm'
 1183 ?        S<     0:00 [kvm-irqfd-clean]
 2737 ?        R      2:49 /usr/bin/qemu -S -M pc-0.12 -m 256 -smp 2,sockets=2,cores=1,threads=1 -name vd1 -uuid 0cc5be5f-ed58-241e-18cb-ae5148c3b8e1 -nodefaults -chardev socket,id=monitor,path=/var/lib/libvirt/qemu/vd1.monitor,server,nowait -mon chardev=monitor,mode=readline -rtc base=utc -boot c -drive file=/home/kvm/vd1.iso,if=none,id=drive-virtio-disk0,format=raw -device virtio-blk-pci,bus=pci.0,addr=0x5,drive=drive-virtio-disk0,id=virtio-disk0 -drive file=/home/kvm/deb.iso,if=none,media=cdrom,id=drive-ide0-1-0,readonly=on,format=raw -device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 -device rtl8139,vlan=0,id=net0,mac=52:54:00:df:46:45,bus=pci.0,addr=0x3 -net tap,fd=37,vlan=0,name=hostnet0 -chardev pty,id=serial0 -device isa-serial,chardev=serial0 -usb -vnc 127.0.0.1:1 -k en-us -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4
alozovskoy ★★★★★
() автор топика
Ответ на: комментарий от Reset

Все по дефолту:

$ cat /etc/libvirt/libvirtd.conf | grep -v "#" | tr -d "\n"
unix_sock_group = "libvirt"unix_sock_rw_perms = "0770"auth_unix_ro = "none"auth_unix_rw = "none"
$ cat /etc/libvirt/qemu.conf | grep -v "#" | tr -d "\n" | wc -l
0
alozovskoy ★★★★★
() автор топика
Ответ на: комментарий от Reset

А, тогда

<domain type='qemu'>
  <name>deb</name>
  <uuid>0a9e9b22-b732-675f-d0d4-140bbeca08dd</uuid>
  <memory>262144</memory>
  <currentMemory>262144</currentMemory>
  <vcpu>2</vcpu>
  <os>
    <type arch='i686' machine='pc-0.12'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/bin/qemu</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>
      <source file='/home/kvm/hdd.iso'/>
      <target dev='hda' bus='ide'/>
      <address type='drive' controller='0' bus='0' unit='0'/>
    </disk>
    <disk type='block' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source dev='/home/kvm/deb.iso'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='1' unit='0'/>
    </disk>
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:ad:00:d4'/>
      <source bridge='virbr0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes' keymap='en-us'/>
    <video>
      <model type='cirrus' vram='24000' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </memballoon>
  </devices>
</domain>
alozovskoy ★★★★★
() автор топика
Ответ на: комментарий от alozovskoy

<domain type='qemu'> а должно быть <domain type='kvm'>

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

<target dev='hdc' bus='ide'/>

bus='ide' смените на bus='virtio' и удалите строки <address type='drive' controller='0' bus='0' unit='0'/> в <disk></disk> - они допишутся сами с новыми параметрами

anonymous
()

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

1. Таки начните использовать kvm. У вас qemu работает (бинарная трансляция).

2. Судя по фичам, у вас какой-нибудь Core 2. Смените процессор на что-то из поколения Nehalem или новее. Там появилась аппаратная виртуализация трансляции адресов, что сильно ускоряет некоторые задачи.

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

bus='ide' смените на bus='virtio' и удалите строки <address type='drive' controller='0' bus='0' unit='0'/> в <disk></disk> - они допишутся сами с новыми параметрами

Тогда не может диск найти для загрузки.

<domain type='qemu'> а должно быть <domain type='kvm'>

Не стартует:

error: internal error Process exited while reading console log output: char device redirected to /dev/pts/12
No SMP KVM support, use '-smp 1'
failed to initialize KVM
alozovskoy ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Это копейки. Если надо оптимизировать I/O, то поднятие виртуалки на сыром разделе гораздо больше даст чем включение virtio.

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

BIOS у меня о KVM не знает.

Тогда дай вывод cat /proc/cpuinfo с хоста и последние строки dmesg после modprobe kvm

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

BIOS у меня о KVM не знает.

В BIOS должен быть пункт со словом virtualization или VT-x. Правда если у вас, к примеру, ноутбук от Сони, то увы. Не повезло.

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