LINUX.ORG.RU

Libvirt и virgl

 , ,


1

1

Аноны помогите позязя. Уже 2 дня горит, не могу потушить, в упор не вижу где ошибка.
Есть свежая инсталляция void + qemu + libvirt. Хочу получить работоспособным virgl в гостях.
Навозюкал мышкой в virt-manager дефолтную VM без opengl ускорения и с интерфейсом spice на tcp порту - ожидаемо работает.
Меняю graphics и video секцию на параметры с поддержкой 3d ускорения.
В интернетах на первоисточниках spice-space, libvirt (а так же красношапке) все предлагают делать примерно одно и тоже:

<graphics type='spice'>
  <listen type='none'/>
  <gl enable='yes'/>
</graphics>
<video>
  <model type='virtio'/>
</video>
Пробовал так же listen type='socket' и явно задавать его. Указывать rendernode, acceleration accel3d. Все попробовал по доке libvirt, там больше и нет нифига.
И не работает!
[root@void-virgl void]# virsh --connect qemu:///system start virgl-guest
ошибка: Не удалось запустить домен virgl-guest
ошибка: internal error: process exited while connecting to monitor: vice usb-redir,chardev=charredir0,id=redir0,bus=usb.0,port=2 -chardev spicevmc,id=charredir1,name=usbredir -device usb-redir,chardev=charredir1,id=redir1,bus=usb.0,port=3 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x8 -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny -msg timestamp=on
В strace не видно никаких простых ошибок: вроде нет доступа к чему либо. Просто валится.
Ладно не лыком шиты, эскпортирую libvirt конфиг в qemu-args:
LC_ALL=C PATH=/usr/bin:/usr/sbin QEMU_AUDIO_DRV=spice /usr/bin/qemu-system-x86_64 \
-name guest=virgl-guest,debug-threads=on \
-object secret,id=masterKey0,format=raw,file=/var/lib/libvirt/qemu/domain--1-virgl-guest/master-key.aes \ 
-machine pc-i440fx-3.1,accel=kvm,usb=off,vmport=off,dump-guest-core=off \
-cpu Opteron_G5,vme=on,x2apic=on,tsc-deadline=on,hypervisor=on,arat=on,tsc_adjust=on,bmi1=on,mmxext=on,fxsr_opt=on,cmp_legacy=on,cr8legacy=on,osvw=on,perfctr_core=on,ibpb=on,virt-ssbd=on \
-m 8000 \
-realtime mlock=off \
-smp 4,sockets=1,cores=4,threads=1 \
-uuid 3ebf3590-7e15-493b-8c6f-8f632bc56f0c \
-no-user-config \
-nodefaults \
-chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain--1-virgl-guest/monitor.sock,server,nowait \
-mon chardev=charmonitor,id=monitor,mode=control \
-rtc base=utc,driftfix=slew \
-global kvm-pit.lost_tick_policy=delay \
-no-hpet -no-shutdown \
-global PIIX4_PM.disable_s3=1 -global PIIX4_PM.disable_s4=1 \
-boot strict=on \
-device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x5.0x7 \
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x5 \
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x5.0x1 \
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x5.0x2 \
-device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x6 \
-drive file=/var/lib/libvirt/images/void.qcow2,format=qcow2,if=none,id=drive-virtio-disk0 \
-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x7,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 \
-chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 \
-chardev spicevmc,id=charchannel0,name=vdagent \
-device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=com.redhat.spice.0 \
-device usb-tablet,id=input0,bus=usb.0,port=1 \
-spice port=0,disable-ticketing,gl=on,rendernode=/dev/dri/by-path/pci-0000:01:00.0-render,seamless-migration=on \
-device virtio-vga,id=video0,virgl=on,max_outputs=1,bus=pci.0,addr=0x2 \
-device intel-hda,id=sound0,bus=pci.0,addr=0x4 \
-device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 \
-chardev spicevmc,id=charredir0,name=usbredir \
-device usb-redir,chardev=charredir0,id=redir0,bus=usb.0,port=2 \
-chardev spicevmc,id=charredir1,name=usbredir \
-device usb-redir,chardev=charredir1,id=redir1,bus=usb.0,port=3 \
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x8 \
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny -msg timestamp=on
Удаляю странные строки которые не позволяют запуститься (эти настройки в том или ином виде инициализирует libvirt), а именно:
-object secret,id=masterKey0,format=raw,file=/var/lib/libvirt/qemu/domain--1-virgl-guest/master-key.aes \
-chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain--1-virgl-guest/monitor.sock,server,nowait \
-mon chardev=charmonitor,id=monitor,mode=control \
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny -msg timestamp=on

Добавляю сокет в spice:

-spice port=0,disable-ticketing,gl=on,rendernode=/dev/dri/by-path/pci-0000:01:00.0-render,seamless-migration=on,unix,addr=/tmp/spice.sock

Получается:

LC_ALL=C PATH=/usr/bin:/usr/sbin QEMU_AUDIO_DRV=spice /usr/bin/qemu-system-x86_64 \
-name guest=virgl-guest,debug-threads=on \
-machine pc-i440fx-3.1,accel=kvm,usb=off,vmport=off,dump-guest-core=off \
-cpu Opteron_G5,vme=on,x2apic=on,tsc-deadline=on,hypervisor=on,arat=on,tsc_adjust=on,bmi1=on,mmxext=on,fxsr_opt=on,cmp_legacy=on,cr8legacy=on,osvw=on,perfctr_core=on,ibpb=on,virt-ssbd=on \
-m 8000 \
-realtime mlock=off \
-smp 4,sockets=1,cores=4,threads=1 \
-uuid 3ebf3590-7e15-493b-8c6f-8f632bc56f0c \
-no-user-config \
-nodefaults \
-rtc base=utc,driftfix=slew \
-global kvm-pit.lost_tick_policy=delay \
-no-hpet -no-shutdown \
-global PIIX4_PM.disable_s3=1 -global PIIX4_PM.disable_s4=1 \
-boot strict=on \
-device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x5.0x7 \
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x5 \
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x5.0x1 \
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x5.0x2 \
-device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x6 \
-drive file=/var/lib/libvirt/images/void.qcow2,format=qcow2,if=none,id=drive-virtio-disk0 \
-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x7,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 \
-chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 \
-chardev spicevmc,id=charchannel0,name=vdagent \
-device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=com.redhat.spice.0 \
-device usb-tablet,id=input0,bus=usb.0,port=1 \
-spice port=0,disable-ticketing,gl=on,rendernode=/dev/dri/by-path/pci-0000:01:00.0-render,seamless-migration=on,unix,addr=/tmp/spice.sock \
-device virtio-vga,id=video0,virgl=on,max_outputs=1,bus=pci.0,addr=0x2 \
-device intel-hda,id=sound0,bus=pci.0,addr=0x4 \
-device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 \
-chardev spicevmc,id=charredir0,name=usbredir \
-device usb-redir,chardev=charredir0,id=redir0,bus=usb.0,port=2 \
-chardev spicevmc,id=charredir1,name=usbredir \
-device usb-redir,chardev=charredir1,id=redir1,bus=usb.0,port=3 \
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x8
Запускаю, и... РАБОТАЕТ!!!
remote-viewer spice+unix:///tmp/spice.sock
Показывает.
Попробовал экспортировать назад в libvirt xml конфиг. Половину опций не воспринимает и результирующий конфиг чуть более чем полностью состоит из qemu:commandline. Нехорошо.

Анон, как мне сделать рабочий конфиг на libvirt?