VDR-Server Virtualisierung Probleme mit PCI Passthrough

  • ich empfehle als Hostsystem Lenny


    http://www.howtoforge.com/virt…xen-on-debian-lenny-amd64
    http://www.errorsystem.de/arti…lisierter-homeserver.html
    etc .........


    Xen 3.3(4) sollte einfach mit aptitude "out of the Box' funktionieren.


    "managen" kannst du die DomU's super per commandline (ssh)
    da braucht man eigentlich keine WebGUI....
    xm create
    xm list ....... usw ....

    ------------------------------------------------------------------------------------------------------------------------------------------------------------
    VDR1: M4N78-VM:AMD XII 215e:Tevii S470PCIe: yaVDR 0.5a
    VDR Neu: Q1900M, Cine S2: yavdr 0.6
    VDR Server: Debian testing Dom0 XEN 4.6, Tevii S470 PCIe running in HVM Trusty DomU

  • Falls Du allerdings VTd benutzen willst (was ja bei Xen nicht nötig wäre) würde ich eher zu Xen 4.0.1 raten, da hat sich einiges getan. PV Passthrough sollte auch mit 3.3/3.4 gehen...


    Edit:
    Zur Interrupt-Problematik:
    - lspci ist kein geeignetes Mittel um zu sehen ob ein Gerät benutzt wird oder nicht. Es ist physikalisch vorhanden und solange Du es nicht im BIOS abstellen kannst, wird lspci es *immer* anzeigen.
    - Wenn nousb nicht funktioniert, dann arbeitet Dein System ausschließlich mit Modulen für usb -> dann ab in die schon gefundene Blacklist damit
    - Im konkreten Fall sollte es reichen dafür zu sorgen, dass das zweite Gerät auf dem IRQ nicht beutzt wird, dann ist es auch kein Problem wenn sie sich den Interrupr teilen (dir kann ja egal sein ob der USB Controller einen Interrupr abbekommt der nicht zu ihm gehört solange kein Treiber überhaupt mit dem Controller spricht)


    Wenn Du sowieso neu installierst könnte ich Dir auch CentOS als Distri ans Herz legen (wohlgemerkt für das Hostsystem, was Du im Gast installierst ist weitgehend* egal), da gibt es auf gitco.de immer aktuelle Xen Versionen als RPM.

  • Razorblade:
    Das mit der Blacklist funktioniert irgendwie nicht. Beende jetzt einfach die kernelmodule mit "modprobe -r uhci-hcd" und "modprobe -r ehci-hcd". das kernel-modul usbcore kann ich leider nicht stoppen. Bekomme immer die meldung, dass das modul noch im Zugriff ist. mit lsmod sehe ich, dass von nfs_base im Zugriff ist. nfs_base kann ich wiederrum nicht stoppen weil es von usbcore im Zugriff ist ....


    Nach beenden von uhci-hcd und ehci-hcd bekomme ich den Fehler im kernel-log nicht mehr. Jedoch immer noch das gleiche Problem. Karte bekommt per msi den IRQ30 oder IRQ46 zugeweisen. Sobald dann die VM hochgefahren ist hat die karte wieder IRQ16. jedoch kein Eintrag im Kernel-log. Das ist echt zum Verweifeln....


    Habe auch noch was gelesen, dass ich mal den PCI Latency Timer im Bios höher setzen soll. Das habe ich auch schon ausprobiert. Von 32 auf die höchste Stufe. Auch kein Erfolg.


    Habe momentan kein Internet (kein zugriff auf repositorys mit apt ...usw.), deswegen muss ich mit XEN noch etwas warten. Ich würde aber immer noch KVM bevorzugen.

  • Da ich ja im moment kein Internet habe, konnte ich noch nichts mit xen probieren. Deshalbe habe ich jetzt noch etwas mit KVM Proxmox rumgetestet. Ich habe mir nun den neusten kernel und die neusten debs von ftp://download.proxmox.com/deb…nny/pvetest/binary-amd64/ installiert.


    Mit dem neuen kernel kann ich auch mit nousb booten. Danach laufen keine usb-kernel-module mehr. Wenn ich nun die Karte zweise behält sie auch ihren IRQ den Sie von msi zugewiesen bekommt:


    lspci -vv


    01:00.0 Multimedia video controller: Micronas Semiconductor Holding AG Device 0720 (rev 01)
    Subsystem: Micronas Semiconductor Holding AG Device dd00
    Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
    Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx+
    Latency: 0, Cache Line Size: 64 bytes
    Interrupt: pin A routed to IRQ 48



    proxmox:~# cat /proc/interrupts
    CPU0 CPU1 CPU2 CPU3
    0: 27 0 0 0 IO-APIC-edge timer
    1: 2 0 0 0 IO-APIC-edge i8042
    8: 0 0 0 0 IO-APIC-edge rtc0
    9: 0 0 0 0 IO-APIC-fasteoi acpi
    12: 4 0 0 0 IO-APIC-edge i8042
    16: 583 0 0 0 IO-APIC-fasteoi nGene
    40: 1 0 0 0 DMAR_MSI-edge dmar1
    41: 0 0 0 0 DMAR_MSI-edge dmar0
    42: 0 0 0 0 DMAR_MSI-edge dmar2
    45: 5757 0 0 0 PCI-MSI-edge eth0
    46: 18083 0 0 0 PCI-MSI-edge ahci
    47: 274 0 0 0 PCI-MSI-edge hda_intel
    48: 304 0 0 0 PCI-MSI-edge kvm_assigned_msi_device
    NMI: 0 0 0 0 Non-maskable interrupts
    LOC: 227001 190904 56940 19999 Local timer interrupts
    SPU: 0 0 0 0 Spurious interrupts
    PMI: 0 0 0 0 Performance monitoring interrupts
    PND: 0 0 0 0 Performance pending work
    RES: 70125 78291 63385 59768 Rescheduling interrupts
    CAL: 7533 10865 10312 5182 Function call interrupts
    TLB: 317 248 38 261 TLB shootdowns
    TRM: 0 0 0 0 Thermal event interrupts
    THR: 0 0 0 0 Threshold APIC interrupts
    MCE: 0 0 0 0 Machine check exceptions
    MCP: 3 3 3 3 Machine check polls


    Nach deaktivieren von usb bekomme ich nun auch nicht mehr den Fehler im kernel-log "....disabling irq16....".


    Jedoch bekomme ich immer noch kein signal und folgenden fehler von kvm:


    kvm: 2444: cpu0 unhandled wrmsr: 0x198 data 0
    kvm: 2444: cpu1 unhandled wrmsr: 0x198 data 0
    kvm: 2444: cpu2 unhandled wrmsr: 0x198 data 0
    kvm: 2444: cpu3 unhandled wrmsr: 0x198 data 0


    Sagt das jemanden von euch was?


    Des weiteren habe ich noch eine andere Frage:


    Muss ich eigentlich nur die TV-Karte durchreichen oder muss ich auch den PCIe-Anschluss durchreichen, auf welcher die TV-karte steckt (in diesem Fall device 00:1c.0)?


    -[0000:00]-+-00.0 Intel Corporation Core Processor DRAM Controller
    +-02.0 Intel Corporation Core Processor Integrated Graphics Controller
    +-16.0 Intel Corporation 5 Series/3400 Series Chipset HECI Controller
    +-16.2 Intel Corporation 5 Series/3400 Series Chipset PT IDER Controller
    +-16.3 Intel Corporation 5 Series/3400 Series Chipset KT Controller
    +-19.0 Intel Corporation 82578DM Gigabit Network Connection
    +-1a.0 Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller
    +-1b.0 Intel Corporation 5 Series/3400 Series Chipset High Definition Audio
    +-1c.0-[0000:01]----00.0 Micronas Semiconductor Holding AG Device 0720
    +-1c.4-[0000:02]--
    +-1d.0 Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller
    +-1e.0-[0000:03]--
    +-1f.0 Intel Corporation 5 Series Chipset LPC Interface Controller
    +-1f.2 Intel Corporation 5 Series/3400 Series Chipset 6 port SATA AHCI Controller
    \-1f.3 Intel Corporation 5 Series/3400 Series Chipset SMBus Controller


    Muss ich diesen Prozess auch für den pcie-Anschluss machen?
    -->
    echo "18c3 0720" > /sys/bus/pci/drivers/pci-stub/new_id
    echo 0000:01:00.0 > /sys/bus/pci/devices/0000:01:00.0/driver/unbind
    echo 0000:01:00.0 > /sys/bus/pci/drivers/pci-stub/bind


    das pcie-device läuft aber nicht unter dem pci-stub treiber sondern unter pcieport. MÜsste dass dann so aussehen?


    -->
    echo "8086 3b42" > /sys/bus/pci/drivers/pcieport/new_id
    echo 0000:00:1c.0 > /sys/bus/pci/devices/0000:00:1c.0 /driver/unbind
    echo 0000:00:1c.0 > /sys/bus/pci/drivers/pcieport/bind

  • das mit dem PCIe-Slot durchreichen erscheint mir als sehr gute Idee.
    Unter XEN mache ich das jedenfalls so .... anders geht es da gar nicht??


    wie konnte ich das nur überlesen ....


    Gruß

    ------------------------------------------------------------------------------------------------------------------------------------------------------------
    VDR1: M4N78-VM:AMD XII 215e:Tevii S470PCIe: yaVDR 0.5a
    VDR Neu: Q1900M, Cine S2: yavdr 0.6
    VDR Server: Debian testing Dom0 XEN 4.6, Tevii S470 PCIe running in HVM Trusty DomU

  • Das ist afair nur erforderlich wenn die Karte Ihre eigene PCI(e) Bridge mitbringt, dann mußt Du schon die Bridge durchreichen (das meint sicher auch ochja).
    Den Port (in Deinem Fall mit pciid von Intel) solltest Du nicht durchreichen müssen. Probieren kannst Du es natürlich, aber mich würde es eher überraschen, wenn es dadurch funktionieren sollte...

  • So hab mal yavdr auf die kvm-vm mit durchgereicher Karte installiert. Da sieht das ganz dann so aus:


    @TV-SERVER:~$ lspci -vv
    00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
    Subsystem: Qumranet, Inc. Device 1100
    Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
    Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-


    00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
    Subsystem: Qumranet, Inc. Device 1100
    Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
    Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
    Latency: 0


    00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II] (prog-if 80 [Master])
    Subsystem: Qumranet, Inc. Device 1100
    Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
    Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
    Latency: 0
    Region 0: [virtual] Memory at 000001f0 (32-bit, non-prefetchable) [size=8]
    Region 1: [virtual] Memory at 000003f0 (type 3, non-prefetchable) [size=1]
    Region 2: [virtual] Memory at 00000170 (32-bit, non-prefetchable) [size=8]
    Region 3: [virtual] Memory at 00000370 (type 3, non-prefetchable) [size=1]
    Region 4: I/O ports at c000 [size=16]
    Kernel driver in use: ata_piix


    00:01.2 USB Controller: Intel Corporation 82371SB PIIX3 USB [Natoma/Triton II] (rev 01)
    Subsystem: Qumranet, Inc. Device 1100
    Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
    Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
    Latency: 0
    Interrupt: pin D routed to IRQ 11
    Region 4: I/O ports at c020 [size=32]
    Kernel driver in use: uhci_hcd


    00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03)
    Subsystem: Qumranet, Inc. Device 1100
    Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
    Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
    Interrupt: pin A routed to IRQ 9
    Kernel driver in use: piix4_smbus
    Kernel modules: i2c-piix4


    00:02.0 VGA compatible controller: Cirrus Logic GD 5446
    Subsystem: Qumranet, Inc. Device 1100
    Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
    Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
    Region 0: Memory at f0000000 (32-bit, prefetchable) [size=32M]
    Region 1: Memory at f2000000 (32-bit, non-prefetchable) [size=4K]
    Expansion ROM at f2010000 [disabled] [size=64K]
    Kernel modules: cirrusfb


    00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 03)
    Subsystem: Qumranet, Inc. Device 1100
    Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
    Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
    Latency: 0
    Interrupt: pin A routed to IRQ 10
    Region 0: Memory at f2020000 (32-bit, non-prefetchable) [size=128K]
    Region 1: I/O ports at c040 [size=64]
    Expansion ROM at f2040000 [disabled] [size=128K]
    Kernel driver in use: e1000
    Kernel modules: e1000


    00:04.0 Multimedia video controller: Micronas Semiconductor Holding AG Device 0720 (rev 01)
    Subsystem: Micronas Semiconductor Holding AG Device dd00
    Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
    Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
    Interrupt: pin A routed to IRQ 11
    Region 0: Memory at f2060000 (32-bit, non-prefetchable) [size=64K]
    Region 1: Memory at f2070000 (32-bit, non-prefetchable) [size=64K]
    Capabilities: <access denied>
    Kernel modules: ngene



    @TV-SERVER:~$ dmesg | grep ngene
    [ 2.438162] ngene 0000:00:04.0: PCI INT A -> Link[LNKD] -> GSI 11 (level, high) -> IRQ 11
    [ 2.438171] ngene: Found Linux4Media cineS2 DVB-S2 Twin Tuner (v5)
    [ 2.440037] ngene 0000:00:04.0: setting latency timer to 64
    [ 2.440234] ngene: Device version 1
    [ 2.440250] ngene 0000:00:04.0: firmware: requesting ngene_15.fw
    [ 3.240072] ngene: Loading firmware file ngene_15.fw.
    [ 5.240151] ngene: Command timeout cmd=01 prev=00
    [ 5.240391] host_to_ngene (c000): 01 00 00 00 00 00 00 00
    [ 5.240644] ngene_to_host (c100): 00 00 00 00 00 00 00 00
    [ 5.240890] dev->hosttongene (ede92000): 01 00 00 00 00 00 00 00
    [ 5.241165] dev->ngenetohost (ede92100): 00 00 00 00 00 00 00 00
    [ 7.260048] ngene: Command timeout cmd=02 prev=00
    [ 7.260065] host_to_ngene (c000): 02 04 00 d0 00 04 00 00
    [ 7.260072] ngene_to_host (c100): 00 00 00 00 00 00 00 00
    [ 7.260078] dev->hosttongene (ede92000): 02 04 00 d0 00 04 00 00
    [ 7.260080] dev->ngenetohost (ede92100): 00 00 00 00 00 00 00 00
    [ 7.260268] ngene 0000:00:04.0: PCI INT A disabled
    [ 7.260319] ngene: probe of 0000:00:04.0 failed with error -1





    @TV-SERVER:~$ lspci -vv | grep IRQ
    Interrupt: pin D routed to IRQ 11
    Interrupt: pin A routed to IRQ 9
    Interrupt: pin A routed to IRQ 10
    Interrupt: pin A routed to IRQ 11




    @TV-SERVER:~$ cat /proc/interrupts


    0: 34 0 0 0 0 0 0 0 IO-APIC-edge timer
    1: 0 2 2 2 0 1 1 1 IO-APIC-edge i8042
    6: 0 1 0 0 0 0 0 1 IO-APIC-edge floppy
    8: 0 0 0 0 0 0 1 0 IO-APIC-edge rtc0
    9: 0 0 0 0 0 0 0 0 IO-APIC-fasteoi acpi
    10: 0 272 272 273 274 272 273 272 IO-APIC-fasteoi eth0
    11: 0 3 4 3 3 4 3 3 IO-APIC-fasteoi uhci_hcd:usb1
    12: 0 22 22 23 23 20 22 23 IO-APIC-edge i8042
    14: 3013 0 0 0 0 0 0 0 IO-APIC-edge ata_piix
    15: 866 0 0 0 0 0 0 0 IO-APIC-edge ata_piix
    NMI: 0 0 0 0 0 0 0 0 Non-maskable interrupts
    LOC: 136940 81337 78280 78466 78710 78201 78973 78432 Local timer interrupts
    SPU: 0 0 0 0 0 0 0 0 Spurious interrupts
    PMI: 0 0 0 0 0 0 0 0 Performance monitoring interrupts
    PND: 0 0 0 0 0 0 0 0 Performance pending work
    RES: 2908 2327 1680 1800 1054 1437 712 632 Rescheduling interrupts
    CAL: 52 80 79 76 74 62 69 68 Function call interrupts
    TLB: 134 195 124 190 131 135 129 85 TLB shootdowns
    TRM: 0 0 0 0 0 0 0 0 Thermal event interrupts
    THR: 0 0 0 0 0 0 0 0 Threshold APIC interrupts
    MCE: 0 0 0 0 0 0 0 0 Machine check exceptions
    MCP: 2 2 2 2 2 2 2 2 Machine check polls
    ERR: 0
    MIS: 0




    @TV-SERVER:~$ lspci -vt
    -[0000:00]-+-00.0 Intel Corporation 440FX - 82441FX PMC [Natoma]
    +-01.0 Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
    +-01.1 Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II]
    +-01.2 Intel Corporation 82371SB PIIX3 USB [Natoma/Triton II]
    +-01.3 Intel Corporation 82371AB/EB/MB PIIX4 ACPI
    +-02.0 Cirrus Logic GD 5446
    +-03.0 Intel Corporation 82540EM Gigabit Ethernet Controller
    \-04.0 Micronas Semiconductor Holding AG Device 0720



    Also so wie es aussieht werden auch die USB-Ports automatisch mit durchgereicht, da diese sich den IRQ mit dem Tuner auf dem Hostsystem teilen.


    Das kernel-modul ngene der TV-Karte bringt einen Fehler.


    Was mich auch etwas verwirrt ist das hier:
    Capabilities: <access denied>

  • Sehr interessant... habe quasi zeitlich parallel zu Dir ähnliches probiert. Hier ebenfalls mit einer CineS2, allerdings unter ESXi.


    Passthrough der Karte zu Windows klappte einwandfrei, Installation der Treiber ebenfalls, aber - genau wie bei Dir -: Keine Channels!


    Habe jetzt noch lange nicht in dem Detailgrad wie Du das Thema durchleuchtet, werde mich aber nochmal melden, sobald ich wieder mal Zeit finde, das Thema weiter zu bearbeiten (ESXi aktuell wieder zurückgenommen, da der Rechner quasi "produktiv" arbeitet (Fileserver für die Mediensammlung).
    Ich frage mich, ob dies ein CineS2-spezifisches Problem ist oder ob dies ein generelles Problem von PCI/PCIe-SAT-Karten ist...


    Zu Deiner "Access Denied"-Frage unter Ubuntu: Hast Du schonmal "lspci" mit root-Rechten ausgeführt (sudo)?


    Gruß
    Oliver

  • Hallo negotiator7,


    schön zu wissen, dass ich nicht alleine mit dem Problem da stehe ;-).
    Ne mit sudo hatte ich lspci jetzt noch nicht ausgeführt. Ändert aber nix an der Tatsache, dass der Treiber anscheinend keine richtige Verbindung zum Gerät aufbauen kann.... Ich habs mittlerweile mit kvm aufgegeben und mach mich jetzt dran das ganze mit XEN zu testen. Wenns was neues gibt meld ich mich !


    Falls du mit ESXI Erfolge verzeichnen kannst wäre es schön, wenn du dich meldest!

  • Habe am Wochende mal einen Versuch mit einer anderen SAT-Karte gewagt (TeVii S464 / PCI). Habe die Karte analog zur Cine-S2 per PCI Passthrough an ein virtualisiertes Win7 durchgereicht. Treiber Installation lief problemlos.


    Dann der Test mit ProgDVB: Beim Senderscan zeigt das Tool entsprechende Werte für Signalstärke und -qualität. Ich habe schon innerlich gejubelt, aber der Scan brachte dann am Ende doch keine Sender.
    Wenn ich mich recht erinnere, dann wurde bei der Cine-S2 keine Signalstärke und -qualität angezeigt. Bin mir aber nicht mehr so sicher.
    Weisst Du noch, ob bei der Cine-S2 gar nix durchkommt?


    Dann nochmal ein Test mit einer USB-Lösung (TeVii S660): Die USB-Box ebenfalls per Passthrough an das virtualisierte Win7 durchgereicht, Treiber installiert... und... Sender werden gefunden!
    Ein erster schneller Test mit MediaPortal lief auch ganz o.k., insgesamt hatte das Bild aber oft Klötzchen und an HD war gar nicht zu denken. Vermutlich ist beim USB-Passthrough die Bandbreite einfach zu beschränkt :(


    Was machen Deine Versucht mit XEN?


    Oliver

  • hi,


    also zum thema esxi und cine s2 kann ich was beitragen. betrifft allerdings windows (als gast). bin mir aber sicher, dass es im linux gast ebenso läuft. hatte nämlich ähnlche probleme wie du, aber nach tagelangem rumtüffteln, hab ich endlich ne lösung gefunden:



    Du musst die VMX Datei (der virtuellen Maschine) mit nem Editor bearbeiten. Folgenden Eintrag musste eintragen:

    pciPassthru0.msiEnabled = False
    Die "0" eben durch deinen Wert ersetzen.

    Wichtig ist, den Wert musst du setzen, BEVOR du die virtuelle Maschine das erste mal startest. Ist ein OS bereits installiert, haste keine Chance es zum laufen zu kriegen. So war es zumindest bei mir. Hab es auch mehrere male getestet.

    Also deswegen erst VM anlegen, Wert setzen, dann OS installieren.

  • Also nach Wochen der Flucherei und des Rumtüftelns....hab ichs hinbekommen mit xen 4.0.1 unter debian squeeze. Zum managen der vms nutze ich convirt 2.0.1. Läuft soweit alles super jetzt.


    Hier mein Howto:


    Debian Squeeze von Netinst-CD installieren


    #Netzwerk konfigurieren
    nano /etc/network/interfaces
    ----
    ## LAN interface
    auto eth0
    iface eth0 inet static
    address 192.168.100.254
    netmask 255.255.255.0
    gateway 192.168.100.1
    ----


    #XEN Dom0-Kernel und Xen-Hypervisor installieren
    apt-get update
    apt-get dist-upgrade



    aptitude -P install xen-hypervisor-4.0-amd64 linux-image-xen-amd64 xen-tools
    apt-get install xen-qemu-dm-4.0
    aptitude install xen-linux-system-2.6.32-5-xen-amd64



    mv -i /etc/grub.d/10_linux /etc/grub.d/50_linux
    update-grub2


    echo "" >> /etc/default/grub
    echo "# Disable OS prober to prevent virtual machines on logical volumes from appearing in the boot menu." >> /etc/default/grub
    echo "GRUB_DISABLE_OS_PROBER=true" >> /etc/default/grub
    update-grub2


    nano /etc/default/xendomains
    ---
    XENDOMAINS_RESTORE=false
    XENDOMAINS_SAVE=""
    ---


    #PCI-ID herausfinden und grub-Eintrag anpassen. Außerdem vt-d aktivieren
    lspci


    nano /boot/grub/grub.cfg
    ----
    ### BEGIN /etc/grub.d/20_linux_xen ###
    menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-xen-amd64 and XEN 4.0-amd64' --class debian --class gnu-linux --class gnu --class os --class xen {
    insmod part_msdos
    insmod ext2
    set root='(hd0,msdos1)'
    search --no-floppy --fs-uuid --set 7a88938f-1b64-4d9c-bc9f-57f45f394231
    echo 'Loading Linux 2.6.32-5-xen-amd64 ...'
    multiboot /boot/xen-4.0-amd64.gz iommu=1
    module /boot/vmlinuz-2.6.32-5-xen-amd64 placeholder root=UUID=7a88938f-1b64-4d9c-bc9f-57f45f394231 ro xen-pciback.hide=(01:00.0)(02:00.0)(00:1d.7)(00:1a.7) quiet
    echo 'Loading initial ramdisk ...'
    module /boot/initrd.img-2.6.32-5-xen-amd64


    -----


    reboot


    #samba installieren und convirt-share freigeben. Hier kann ich dann meine ISOs ablegen und auch auf die vms zugreifen


    apt-get install samba


    smbpasswd -a root


    cp /etc/samba/smb.conf /etc/samba/smb.conf_org
    rm /etc/samba/smb.conf
    nano /etc/samba/smb.conf
    -----
    [global]
    workgroup = arbeitsgruppe
    server string = %h server (Samba %v)
    log file = /var/log/samba/log.%m
    max log size = 1000
    encrypt passwords = true
    socket options = TCP_NODELAY


    #========== SHARE DEFINITIONS ===========
    # Convirt


    [convirt]
    comment = Samba server's Daten
    writable = yes
    path = /var/cache/convirt
    public = no
    valid users = root
    force create mode = 0770
    force directory mode = 0770
    -----


    /etc/init.d/samba restart



    #IPv6 deaktivieren. Bereitete bei mir Probleme


    nano /etc/sysctl.d/disable-ipv6.conf
    ---------
    net.ipv6.conf.all.disable_ipv6=1
    ---------
    sysctl -p /etc/sysctl.d/disable-ipv6.conf



    # Convirt installieren:


    wget --no-cache http://www.convirture.com/down…virt-install-2.0.1.tar.gz
    wget --no-cache http://www.convirture.com/down….0.1/convirt-2.0.1.tar.gz
    wget --no-cache http://www.convirture.com/down…irture-tools-2.0.1.tar.gz


    tar -xzf convirt-install-2.0.1.tar.gz
    sudo apt-get install libmysqlclient-dev python2.6-dev python-setuptools
    sudo easy_install virtualenv
    apt-get install sudo
    sudo ./convirt-install/install/cms/scripts/install_dependencies


    sudo nano /etc/mysql/my.cnf
    In the mysql configuration file /etc/my.cnf under [mysqld] section. Please add the following two lines
    innodb_buffer_pool_size=1G
    innodb_additional_mem_pool_size=20M



    /etc/init.d/mysql restart


    source convirt-install/install/cms/scripts/install_config
    tar -xzf ./convirt-2.0.1.tar.gz -C $CONVIRT_BASE


    nano ./convirt-install/install/cms/common/functions
    # Folgende Zeile ändern in
    f_names=`ls $VIRTUAL_ENV_DIR/lib/python2.4/site-packages/Beaker-*py2.4.egg/beaker/ext/google.py`
    f_names=`ls $VIRTUAL_ENV_DIR/lib/python2.6/site-packages/Beaker-*py2.6.egg/beaker/ext/google.py`


    ./convirt-install/install/cms/scripts/setup_tg2



    nano ~/convirt/src/convirt/web/convirt/development.ini


    For example in the following url, username = root, password = convirt, server=localhost, database port = 3306
    and database name is convirt (the one before '?' in the url)

    sqlalchemy.url=mysql://root:convirt@localhost:3306/convirt?charset=utf8



    ./convirt-install/install/cms/scripts/setup_convirt


    iptables -I INPUT -p tcp --dport 8081 -j ACCEPT


    nano ~/convirt/src/convirt/core/platforms/xen/XenServerProxy.py
    #ganz am Anfang einfügen:
    import sys
    sys.path.append('/usr/lib/xen-4.0/lib/python')


    sudo cp /etc/xen/xend-config.sxp /etc/xen/xend-config.sxp_org


    sudo iptables -I INPUT -m state --state NEW -p tcp --dport 6900:6999 -j ACCEPT


    tar -xzf convirture-tools-2.0.1.tar.gz



    nano ./convirture-tools/install/managed_server/scripts/convirt-tool
    #Variable OS_Base_name oder so ähnlich(in "Ubuntu 10" ändern)


    cd ./convirture-tools/install/managed_server/scripts
    ./convirt-tool install_dependencies
    ./convirt-tool --xen_config setup
    ./convirt-tool --bridge setup



    nano /etc/xen/xend-config.sxp
    #hinzufügen
    (network-script convirt-xen-multibridge)


    /etc/init.d/xend restart


    #VNC einrichten....


    iptables -I INPUT -m state --state NEW -p tcp --dport 6900:6999 -j ACCEPT


    eval `ssh-agent -s`
    ssh-add ~/.ssh/cms_id_rsa
    ssh root@localhost
    scp ~/.ssh/cms_id_rsa.pub root@localhost:/root/.ssh/vnc_proxy_id_rsa.pub
    ssh root@localhost
    cat ~/.ssh/vnc_proxy_id_rsa.pub >> ~/.ssh/authorized_keys
    iptables -I INPUT -m state --state NEW -p tcp --dport 6900:6999 -j ACCEPT


    ssh-keygen -t rsa -f ~/.ssh/cms_id_rsa
    chmod 0600 ~/.ssh/cms_id_rsa*


    ssh root@localhost
    cp ~/.ssh/cms_id_rsa.pub ~/.ssh/authorized_keys
    scp ~/.ssh/cms_id_rsa.pub root@127.0.0.1:/root/.ssh/vnc_proxy_id_rsa.pub
    ssh root@127.0.0.1
    cat ~/.ssh/vnc_proxy_id_rsa.pub >> ~/.ssh/authorized_keys


    #Verzeichnisse für Snapshot und isos anlegen


    mkdir /var/cache/convirt/iso_store
    mkdir /var/cache/convirt/vm_snapshots


    #Convirt in autostart


    nano /etc/init.d/convirt_restart
    ----------
    #!/bin/sh
    # /etc/init.d/convirt_restart
    #
    ### BEGIN INIT INFO
    # Provides: convirt
    # Required-Start: $network xend
    # Should-Start:
    # Required-Stop:
    # Should-Stop:
    # Default-Start: 2 3 4 5
    # Default-Stop: 0 1 6
    ### END INIT INFO
    cd /root/convirt
    sudo ./convirt-ctl stop
    sudo ./convirt-ctl start


    ------------
    chmod +x /etc/init.d/convirt_restart
    update-rc.d convirt_restart defaults 99


    #Möchte man später auch virtuelle maschinen im autostart haben kann
    man das wie folgt machen


    mkdir /etc/xen/auto
    ln -s /var/cache/convirt/vm_configs/tvserver /etc/xen/auto/tvserver
    ln -s /var/cache/convirt/vm_configs/testvmxp /etc/xen/auto/testvmxp



    reboot


    # Convirt das erste mal starten
    http://127.0.0.1:8081/
    admin
    admin



    So nun kann man Vollvirtualisierte Maschinen über die Windows-CD-Install templates erstellen. Für Passthrough noch folgende Einstellungen:


    acpi = 1
    apci = 1
    pci = [ '01:00.0' ] # Natürlich auf eure hardware anpassen
    pci_msitranslate = 0


    und für deutsches keyboard noch
    keymap = 'de'




    So das ganze läuft nunmal soweit....siehe screenshot....nicht verwundern. Auf der VM läuft momentan noch XP da ich noch mediaportal im einsatz habe. Wird aber durch vdr mit xbmc ersetzt

  • Während Du noch Windows benutzt würde ich die GPLPV-Treiber (von James Harper) empfehlen, damit ist Netzwerk und Disk-Durchsatz deutlich besser als über die qemu-emulierten Devices.


    Convirt sieht zwar ganz nett aus, aber das hättest Du Dir glaube ich auch sparen können wenn Du nicht gerade 20 sich ständig ändernde VMs auf dem Host laufen lassen willst.
    Eine Xen-domU Config kann man mit ca. 10-20 Zeilen auch noch gut mit vi bearbeiten ;)


    Gibt es einen bestimmten Grund für "pci_msitranslate = 0"? Ich dachte genau mit msitranslate wären die Interrupt-Probleme umgangen...

  • Wenn ich "pci_msitranslate" auf 1 setze und somit msi aktiviert ist, habe ich ähnliche probleme wie unter kvm (siehe unten - dmesg output). Ist MSI deaktiviert läuft die karte und zwar mit signal.


    [ 930.804141] physdev match: using --physdev-out in the OUTPUT, FORWARD and POS TROUTING chains for non-bridged traffic is not supported anymore.
    [ 940.902415] vif2.0: no IPv6 routers present
    [ 941.743409] tap2.0: no IPv6 routers present
    [ 1002.832010] pciback: vpci: 0000:01:00.0: assign to virtual slot 0
    [ 1002.832330] pciback 0000:01:00.0: device has been assigned to another domain! Over-writting the ownership, but beware.
    [ 1009.594715] irq 16: nobody cared (try booting with the "irqpoll" option)
    [ 1009.594723] Pid: 9058, comm: qemu-dm Tainted: G C 2.6.32-5-xen-amd64 #1
    [ 1009.594725] Call Trace:
    [ 1009.594728] <IRQ> [<ffffffff811f26cd>] ? startup_pirq+0x11e/0x12f
    [ 1009.594743] [<ffffffff81096835>] ? __report_bad_irq+0x30/0x7d
    [ 1009.594747] [<ffffffff81096987>] ? note_interrupt+0x105/0x16e
    [ 1009.594751] [<ffffffff8109708e>] ? handle_level_irq+0x80/0xc3
    [ 1009.594755] [<ffffffff811f167a>] ? __xen_evtchn_do_upcall+0xe1/0x175
    [ 1009.594758] [<ffffffff811f1cc8>] ? xen_evtchn_do_upcall+0x2e/0x42
    [ 1009.594764] [<ffffffff81012cfe>] ? xen_do_hypervisor_callback+0x1e/0x30
    [ 1009.594766] <EOI>
    [ 1009.594768] handlers:
    [ 1009.594769] [<ffffffffa002f798>] (usb_hcd_irq+0x0/0x7e [usbcore])
    [ 1009.594792] [<ffffffffa002f798>] (usb_hcd_irq+0x0/0x7e [usbcore])
    [ 1009.594800] Disabling IRQ #16

  • Die gplpv-treiber habe ich schon installiert....
    Noch was zu convirt.
    Ja du hast schon recht, dass das ganze vielleicht etwas oversized ist.
    Da ich aber von der Windows-Ecke komme mag ichs halt grafisch ;-)....außerdem macht ja ein bisschen basteln auch spaß.


  • Hallo ErAzOr2kx,


    das sind gute Nachrichten. Habe mich jetzt schon einige Wochen nicht mehr mit dem Thema auseinandergesetzt und nicht mehr alles vor Augen.
    Wenn ich die Kiste wieder anwerfe komme ich vermutlich selber drauf aber nur zur Sicherheit: Was meinst du denn mit "deinen Wert" bzw. wie bekomme ich heraus, welchen Wert ich setzten muss?



    Besten Dank
    Oliver

  • Hallo,


    ich versuche mich gerade an dem HowTo, bin mir aber an der Stelle wo es um die Ermittlung der PCI-ID's geht nicht ganz sicher...
    ...
    #PCI-ID herausfinden und grub-Eintrag anpassen. Außerdem vt-d aktivieren
    ...


    Wenn ich das richtig deute, dann werden diverse ID's nicht über passthrough weitergereicht?!.
    ...

    Code
    xen-pciback.hide=(01:00.0)(02:00.0)(00:1d.7)(00:1a.7)


    Die Frage ist nur, welche das sind, wenn ich die Einträge (01:00.0)(02:00.0)(00:1d.7)(00:1a.7) mit der weiter oben ausgegebenen Ausgabe von lspci -vv vergleiche ergibt das ganze für mich keinen Sinn.


    Vielleicht kann mir jemand auf die Sprünge helfen.


    Anbei noch meine Ausgabe von lspci -vv:


    CU
    Stefan

  • Um sich einen Überblick über die device-ids zu verschaffen, finde ich das Script von "neobiker" sehr hilfreich:


    Bash
    #!/bin/bash
    for dev_id in $( lspci | cut -d\  -f1 ) ; do
        irq=$( dmesg | grep GSI | grep $dev_id | awk '{print $12}' | head -n 1 )
        device=$( lspci | grep $dev_id | cut -d\  -f2- )
        [ -n "$irq" ] && echo "$irq: $dev_id - $device"
    done


    Einfach in der Dom0 ausführen und man sieht sofort welches Gerät welche ID hat und wie die IRQ-Verteilung ist.



    Gruß
    tec


  • Sorry, habe den Thread schon ewig nicht mehr weiterverfolgt :/ Vielleicht hast du es schon selber herausgefunden...


    Je nachdem wieviel Karten du durchreichst, wird das in der VMX Datei eben durchnummeriert. Reichst du nur eine Karte durch, hat die Karte eben den Wert 0. Bei zwei Karten eine eine den Wert 0, die andere den Wert 1. Da musst dann eben schauen, welche die richtige ist.


    Leider hab ich mit PCI Passthrough sowohl mit dem TVServer (Mediaportal), als auch VDR schlechte erfahrungen gemacht. Habe damit ständig freezer im Live TV (vorallem bei HD Sendern). Ich denke das kommt von der Virtualisierung ansich.
    Hat da schon jemand ähnliche Erfahrungen gemacht?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!