[KVM] PCI passthrough mit libvirt unter Squeeze

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
thomask
Beiträge: 9
Registriert: 18.12.2010 22:21:32

[KVM] PCI passthrough mit libvirt unter Squeeze

Beitrag von thomask » 18.12.2010 22:50:51

Hallo,

Ich versuche gerade eine PCI Karte an einen KVM Gast weiterzureichen.
Ich habe schon einiges probiert, mir einen Passenden Kernel gebastelt, usw...

Das ganze verhält sich folgendermaßen:
Ich starte den Gast (WinXP) der fängt fröhlich an zu booten, aber dann geht die VM einfach aus.

Im syslog sehe ich folgendes:

Code: Alles auswählen

Dec 18 22:39:08 fileserver kernel: [33224.173389] pci-stub 0000:0e:00.0: claimed by stub
Dec 18 22:39:08 fileserver kernel: [33224.173474] pci-stub 0000:0e:00.0: claimed by stub
Dec 18 22:39:08 fileserver libvirtd: 22:39:08.480: 1800: warning : qemudParsePCIDeviceStrs:1513 : Unexpected exit status '1', qemu probably failed
Dec 18 22:39:08 fileserver kernel: [33224.329165] pci-stub 0000:0e:00.0: PCI INT A -> GSI 21 (level, low) -> IRQ 21
Dec 18 22:39:08 fileserver kernel: [33224.359103] pci-stub 0000:0e:00.0: restoring config space at offset 0xf (was 0x38080100, writing 0x38080107)
Dec 18 22:39:08 fileserver kernel: [33224.359114] pci-stub 0000:0e:00.0: restoring config space at offset 0xc (was 0x0, writing 0xfbfe0000)
Dec 18 22:39:08 fileserver kernel: [33224.359128] pci-stub 0000:0e:00.0: restoring config space at offset 0x6 (was 0x0, writing 0xfbfc0000)
Dec 18 22:39:08 fileserver kernel: [33224.359135] pci-stub 0000:0e:00.0: restoring config space at offset 0x5 (was 0x1, writing 0xec01)
Dec 18 22:39:08 fileserver kernel: [33224.359142] pci-stub 0000:0e:00.0: restoring config space at offset 0x4 (was 0x0, writing 0xfbffe000)
Dec 18 22:39:08 fileserver kernel: [33224.359148] pci-stub 0000:0e:00.0: restoring config space at offset 0x3 (was 0x0, writing 0x2008)
Dec 18 22:39:08 fileserver kernel: [33224.359156] pci-stub 0000:0e:00.0: restoring config space at offset 0x1 (was 0x2900000, writing 0x2900013)
Dec 18 22:39:08 fileserver kernel: [33224.547561] assign device: host bdf = e:0:0
Dec 18 22:39:29 fileserver kernel: [33244.994455] pci-stub 0000:0e:00.0: restoring config space at offset 0xf (was 0x38080100, writing 0x38080107)
Dec 18 22:39:29 fileserver kernel: [33244.994466] pci-stub 0000:0e:00.0: restoring config space at offset 0xc (was 0x0, writing 0xfbfe0000)
Dec 18 22:39:29 fileserver kernel: [33244.994474] pci-stub 0000:0e:00.0: restoring config space at offset 0x6 (was 0x0, writing 0xfbfc0000)
Dec 18 22:39:29 fileserver kernel: [33244.994478] pci-stub 0000:0e:00.0: restoring config space at offset 0x5 (was 0x1, writing 0xec01)
Dec 18 22:39:29 fileserver kernel: [33244.994482] pci-stub 0000:0e:00.0: restoring config space at offset 0x4 (was 0x0, writing 0xfbffe000)
Dec 18 22:39:29 fileserver kernel: [33244.994486] pci-stub 0000:0e:00.0: restoring config space at offset 0x3 (was 0x0, writing 0x2008)
Dec 18 22:39:29 fileserver kernel: [33244.994490] pci-stub 0000:0e:00.0: restoring config space at offset 0x1 (was 0x2900000, writing 0x2900017)
Dec 18 22:39:29 fileserver kernel: [33244.994509] pci-stub 0000:0e:00.0: PCI INT A disabled
Und Folgendes steht im log der VM (/var/log/libvirt/qemu/vmtestxp.log):

Code: Alles auswählen

2010-12-18 22:39:08.480: starting up
LC_ALL=C PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin HOME=/ QEMU_AUDIO_DRV=none /usr/bin/kvm -S -M pc-0.12 -enable-kvm -m 512 -smp 1,sockets=1,cores=1,threads=1 -name vmtestxp -uuid 8b619f44-dc31-bdb1-b14a-5c9d46f11d29 -nodefaults -chardev socket,id=monitor,path=/var/lib/libvirt/qemu/vmtestxp.monitor,server,nowait -mon chardev=monitor,mode=readline -rtc base=localtime -boot cd -drive file=/dev/vg00/lvtestxp,if=none,id=drive-ide0-0-0,format=raw -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 -drive 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 -chardev pty,id=serial0 -device isa-serial,chardev=serial0 -usb -device usb-tablet,id=input0 -vnc 0.0.0.0:0 -vga cirrus -device pci-assign,host=0e:00.0,id=hostdev0,bus=pci.0,addr=0x3 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4
char device redirected to /dev/pts/3
Failed to assign irq for "hostdev0": Operation not permitted
Perhaps you are assigning a device that shares an IRQ with another device?
Failed to assign irq for "hostdev0": Operation not permitted
Perhaps you are assigning a device that shares an IRQ with another device?
Failed to assign irq for "hostdev0": Operation not permitted
Perhaps you are assigning a device that shares an IRQ with another device?
Failed to assign irq for "hostdev0": Operation not permitted
Perhaps you are assigning a device that shares an IRQ with another device?
Failed to assign irq for "hostdev0": Operation not permitted
Perhaps you are assigning a device that shares an IRQ with another device?
Failed to assign irq for "hostdev0": Operation not permitted
Perhaps you are assigning a device that shares an IRQ with another device?
Failed to assign irq for "hostdev0": Operation not permitted
Perhaps you are assigning a device that shares an IRQ with another device?
Failed to assign irq for "hostdev0": Operation not permitted
Perhaps you are assigning a device that shares an IRQ with another device?
Failed to assign irq for "hostdev0": Operation not permitted
Perhaps you are assigning a device that shares an IRQ with another device?
Failed to assign irq for "hostdev0": Operation not permitted
Perhaps you are assigning a device that shares an IRQ with another device?
Failed to assign irq for "hostdev0": Operation not permitted
Perhaps you are assigning a device that shares an IRQ with another device?
assigned_dev_pci_read_config: pread failed, ret = 0 errno = 1
2010-12-18 22:39:30.176: shutting down
Nun wird es spannend ^^
Wenn ich versuche die VM ohne libvirt, mit dem im obigen Log vermerkten Befehl zu starten läuft alles wunderbar und die PCI Karte ist im Gastsystem verfügbar und funktioniert.
Hier mal den Befehl den ich einfach als Root absetze:

Code: Alles auswählen

/usr/bin/kvm -M pc-0.12 -enable-kvm -m 512 -smp 1,sockets=1,cores=1,threads=1 -name vmtestxp -uuid 8b619f44-dc31-bdb1-b14a-5c9d46f11d29 -nodefaults -chardev socket,id=monitor,path=/var/lib/libvirt/qemu/vmtestxp.monitor,server,nowait -mon chardev=monitor,mode=readline -rtc base=localtime -boot cd -drive file=/dev/vg00/lvtestxp,if=none,id=drive-ide0-0-0,format=raw -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 -drive 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 -chardev pty,id=serial0 -device isa-serial,chardev=serial0 -usb -device usb-tablet,id=input0 -vnc 0.0.0.0:0 -vga cirrus -device pci-assign,host=0e:00.0,id=hostdev0,bus=pci.0,addr=0x3 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4
Den Parameter -S habe ich weg gelassen damit die CPU der VM aktiviert wird. Ansonsten ist der Befehl der gleiche wie im libvirt log.

Jetzt habe ich schon eine weile nach dem Problem gegoogelt, konnte aber nichts vernünftiges finden.
Ich habe andere Kernel Probiert (den aktuellen 35er und 36er), das Aktuelle libvirt aus unstable (libvirt0_0.8.6-1_amd64.deb und libvirt-bin_0.8.6-1_amd64.deb)

Hat aber alles nichts geholfen :(

Habt ihr eine idee wo das Problem liegen könnte?


mfg thomas

McStarfighter
Beiträge: 191
Registriert: 12.09.2005 21:26:04
Lizenz eigener Beiträge: GNU Free Documentation License

Re: [KVM] PCI passthrough mit libvirt unter Squeeze

Beitrag von McStarfighter » 19.12.2010 02:28:17

Was für ne Karte ist das denn überhaupt?

BTW: Grafikkarten sind in nem KVM-Gast derzeit noch nicht nutzbar. Liegt laut den Aussagen eines Entwicklers auf der Mailingliste unter anderem daran, daß das Video-BIOS nicht initialisiert werden kann. Das wird also noch ne Weile dauern mit Grafikkarten in nem virtuellen Windows ... ;)
Ich bin noch in der Lern- und Entdeckungsphase bzgl. Linux und Debian. Ich bitte daher um Rücksicht bei meinen manchmal unbedachten Fragen und Gedanken.

thomask
Beiträge: 9
Registriert: 18.12.2010 22:21:32

Re: [KVM] PCI passthrough mit libvirt unter Squeeze

Beitrag von thomask » 19.12.2010 13:45:47

hab es mit einer Soundkarte und einer Netzwerkkarte versucht.

Die Logs stammen von der NIC.

Aber wie gesagt wenn man es manuell aufruft geht alles wie es soll -.-


Das ziel ist eine TV Karte zu virtualisieren, mit der habe ich es aber noch nicht getestet, da sie noch in einem anderen pc verbaut ist...



mfg thomas

thomask
Beiträge: 9
Registriert: 18.12.2010 22:21:32

Re: [KVM] PCI passthrough mit libvirt unter Squeeze

Beitrag von thomask » 20.12.2010 19:09:21

hat niemand eine idee woran das liegen könnte?

mfg thomas

Benutzeravatar
habakug
Moderator
Beiträge: 4314
Registriert: 23.10.2004 13:08:41
Lizenz eigener Beiträge: MIT Lizenz

Re: [KVM] PCI passthrough mit libvirt unter Squeeze

Beitrag von habakug » 21.12.2010 06:53:07

Hallo!

Du kannst es mit dem Tip hier [1] ganz unten unter "PCI device assignment" versuchen. Hier wurde die Diskussion dazu geführt [2].

Gruß, habakug

[1] https://fedoraproject.org/wiki/How_to_d ... assignment
[2] https://bugzilla.redhat.com/show_bug.cgi?id=573850
( # = root | $ = user | !! = mod ) (Vor der PN) (Debianforum-Wiki) (NoPaste)

thomask
Beiträge: 9
Registriert: 18.12.2010 22:21:32

Re: [KVM] PCI passthrough mit libvirt unter Squeeze

Beitrag von thomask » 21.12.2010 13:50:22

Ahh, Danke für den Tipp :)

Ist zwar eine etwas unschöne Lösung, aber es funktioniert.
Muss ich dann nur dran denken die Änderungen wieder rückgängig zu machen wenn es einen Bugfix gibt.


mfg thomas

Antworten