Gpu passthrough, Error 43 eignet sich gut um wahnsinnig zu werden.


abra8c

Recommended Posts

Hallo zusammen,
ich versuche schon seit 5 Tagen eine gtx 680 in eine Windows VM durchzuschleifen.

Das Mainbord ist ein Asrock x399 taichi.

Was ich bislang versucht hab(nicht unbedingt in dieser Reihenfolge):
Alle spaceinvaderone videos sowie das the geek freaks video zum error 43 gesehen und alles erwähnte versucht.
In einem anderen Pc mit gpuz das Vbios runtergeladen.
Den Vbios header mit einem hex editor entfernt.
Die gpu als multifunction device mit sound part durchgeschleift.
2. gpu für Unraid eingebaut.
Die IOMMU Gruppe der gpu gebunden.
KVM in der xml hiermit versteckt:

<features>
    <acpi/>
    <apic/>
    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
      <vendor_id state='on' value='1234567890ab'/>
    </hyperv>
    <kvm>
      <hidden state='on'/>
    </kvm>
    <ioapic driver='kvm'/>
  </features>

 

Die syslinux config hiermit angepasst:

append amd_iommu=on iommu=pt pcie_acs_override=downstream,multifunction initrd=/bzroot vfio_iommu_type1.allow_unsafe_interrupts=1

Ein paar Bios settings verändert:
 

Tweaked some Bios settings:
VM Mode -> Enable

IOMMU -> Enable

ACS -> Enable
SR-IOV -> Enable

Unraid auf legacy boot umgestellt.
Mehrfach Unraid neu gestartet.
Windows mehrfach neu installiert mit verschiedenen Optionen: q35/i440fx OVMF/Seabios Hyper-V Yes/No


Vielleicht hab ich auch noch mehr gemacht aber ich kann mich nach allem nicht mehr dran erinnern.
Manchmal tauchte sie in Windows als gtx 680 mit dem code43 auf, manchmal auch nur als basic display adapter.
Aus der gpu kam auch nie ein display signal.
Es ist einfach nur noch frustrierend.

Die letzten 2 dinge die ich noch versucht hab:
1. das hier in die command line gepasted:

echo 0 > /sys/class/vtconsole/vtcon0/bind
echo 0 > /sys/class/vtconsole/vtcon1/bind
echo efi-framebuffer.0 > /sys/bus/platform/drivers/efi-framebuffer/unbind

 

Bei der 2. Zeile bekomme ich diesen Fehler: bash: /sys/class/vtconsole/vtcon1/bind: No such file or directory
Und bei der 3.: bash: echo: write error: No such device

Ich weiß nicht mal was diese commands machen sollten.
Was mache ich hier falsch?

2.Ich bin diesem guide gefolgt:

Leider funktioniert das patcher.ps1 skript aus dem guide nicht mehr mit der neusten cuda version, deshalb komme ich da auch nicht weiter.

Meine aktuelle xml hab ich angehängt.

Jeder Rat wie ich weiter machen soll wäre willkommen!

xml.txt

Link to comment

Ironie an "auf Intel wechseln" ... Ironie aus, bringt ja jetzt nichts, ich gehe davon aus du hast 2 GPU's ?

 

Ich hoffe du kannst den ganzen Spaß auch wieder revidieren was du da alles irgendwo gemacht hast ... syslinux, was auch immer, alles raus.

 

also, unraid wird beim boot die 1 gpu für sich beanspruchen, bios Einstellung schauen was da eingestellt ist beim boot wenn beide GPU's drin sind, kannst du da etwas verstellen welche die primary sein soll ? wenn Nein, nimm die wo NICHT in die VM soll als primary (oder den 1. slot), die für die VM  sollte NICHT die primary sein.

 

dann in unraid, tools, system devices, vfio bind, die wo du an eine VM durchreichen willst binden (Haken setzen), KOMPLETT (auch den audio part, ...)

 

Beispiele von hier

image.thumb.png.8212c212057bdb420eaa44a6339352ce.png

 

image.thumb.png.f0940b5bba85b82be4643c6a34e04ee0.png

 

NUR für die Karte wo in die VM soll ...

 

Neustart wie angewiesen dann machen, danach einfach die GPU inkl. Audio in eine VM einbinden, multifunction ist sicherlich kein Schaden (manuell in der xml, hast ja jetzt Erfahrung damit), vbios eintragen (wenn du sicher bist dass es korrekt ist, muss eigentlich nicht mehr sein ...)

 

image.png.a3aed692e292274ba8a8155457b06cde.png

 

image.png.3b9c5c7b9bb53c9af0a8a121ac0f7638.png

 

das sollte es gewesen sein

 

Jetzt mit deinem AMD System, manchmal muss man unraid in legacy booten anstelle uefi, die VM kann auch seabios oder ovmf sein ...musst du testen falls es nicht direkt geht, hier gehen alle Konstellationen.

 

dann blieben noch diese Einstellungen zum Test

 

Override, eigentlich nur nötig wenn das iommu grouping nicht sauber geht (Karte nicht sauber in eigener IOMMU sitzt)

image.png.49a9c56a0cafe2575a534901ba78b257.png

 

unsafe interupts, brauchte ich nur für den MacOS Quatsch wo ich mal getestet hatte ... aber evtl. auch einen Test wert.

 

Die manuellen Einträge in der syslinux sollten nicht mehr benötigt werden da tools mit vfio bind das sauber übernimmt, früher war das eine Option.

 

Viel Erfolg, nächstes mal, Intel / Nvidia ... das ist weniger zum "wahnsinnig werden"

Link to comment

kleiner Nachtrag, eigentlich gedacht um noch etwas mehr performance raus zu holen, aber vielleicht hilft es auch ...

 

xml edit (teilweise kennst du das ja)

 

  <features>
    <acpi/>
    <apic/>
    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
      <vpindex state='on'/>
      <synic state='on'/>
      <stimer state='on'/>
      <reset state='on'/>
      <vendor_id state='on' value='1234567890ab'/>
      <frequencies state='on'/>
    </hyperv>
    <kvm>
      <hidden state='on'/>
    </kvm>
    <vmport state='off'/>
    <ioapic driver='kvm'/>
  </features>

  <clock offset='localtime'>
    <timer name='rtc' present='no' tickpolicy='catchup'/>
    <timer name='pit' present='no' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
    <timer name='hypervclock' present='yes'/>
    <timer name='tsc' present='yes' mode='native'/>
  </clock>

 

Link to comment

Vielen Dank schonmal für die ausführliche Antwort.
Mir ist durchaus bewusst das es für viele Einstellungen die ich gemacht habe mittlerweile bessere in Unraid implementierte Lösungen gibt, die ich meist auch als erstes ausprobiert hab. Es hat nur einfach nichts funktioniert, deswegen hab ich dann angefangen aus jedem noch so alten Forumspost den ich gefunden hab mir eine Lösung zu erhoffen.
Ich denke ich werde als erstes mal aufräumen und dann mit klarem Kopf mal von vorne beginnen.
 

14 hours ago, alturismo said:

dann in unraid, tools, system devices, vfio bind, die wo du an eine VM durchreichen willst binden (Haken setzen), KOMPLETT (auch den audio part, ...)

Ich habe die gtx 680 die ich durchreichen will bereits als 2. gpu und sie auch schon samt audio an vfio gebunden.

Wahrscheinlich ist es auch einfach eine Kombination aus Einstellungen und nicht eine einzelne weswegen es bei mir einfach nicht klappt. 
Heute mache ich erst mal pause, ich berichte dann morgen wie es gelaufen ist.

Link to comment

So, jetzt hab ich mich noch mal ran gewagt.
Als erstes hab ich alle Systemweiten Einstellungen wie die Syslinux config zurückgesetzt.
Dann hab ich komplett von vorne begonnen.
Meine zweite gpu, die gtx 680 + sound an vfio gebunden, iommu groups meines Mainboards sind von Haus aus recht gut sortiert.
Dann der notwendige neustart.

Als nächstes hab ich ein neues VM Template erstellt mit folgenden Einstellungen: 

Machine: Q35-5.1

BIOS: OVMF

Hyper-V: Yes
Grafik als VNC

Dann hab ich erst mal ein komplett frisches win10 installiert und die VM sauber runtergefahren.
Jetzt hab ich VNC durch die gtx680 ersetzt und auch den sound part mit durchgereicht.
Dann auf Update gedrückt nochmal auf bearbeiten und in die xml Ansicht gewechselt, hier hab ich die gpu als multifunction device eingetragen und auch die vorgeschlagene
Hyper-V + clock config reinkopiert.
Wieder auf Update und jetzt die VM gestartet.
Per rdp auf die VM zugegriffen, die gpu wird als basic display adapter erkannt und ein display signal der gpu blieb auch aus.
Jetzt die Treiber der gpu installiert und neu gestartet.
Kein Displaysignal, error 43, alles wie gehabt.

Nach diesem weiteren erfolglosen Versuch ist mir aufgefallen das ich in meiner gpu Sammlung eine weitere unbenutzte mit DisplayPort Ausgang hab, eine radeon hd 7750.
Also hab ich einfach mal die ausprobiert.
Einfach in der vorher erstellten VM die eine gpu + sound durch die andere getauscht und mit dem erst besten Vbios von Techpowerup durchgereicht.
In der VM wurde sie wie auch zuvor als basic display adapter erkannt.
Dann hab ich die Nvidia Treiber runter geschmissen, die Amd Treiber installiert und neu gestartet.
Und tada, die gpu wird fehlerfrei in Windows erkannt und hat jetzt auch ein monitor Signal.
Genau so hab ich es mir vorgestellt, mich stört nur leider das die hd 7750 verglichen mit der gtx 680 nur 1080p statt 4k unterstützt.

Es liegt also ziemlich sicher an der gpu, kann es sein das sich die gtx 680 wirklich einfach nicht durchschleifen lässt?
Es scheint zumindest ein ziemlicher Härtefall zu sein.

Link to comment

Kleiner Nachtrag:
Mir ist gerade aufgefallen das jetzt mein Unraid log ziemlich mit diesen Fehlermeldungen vollgespammt wird:
 

Oct 17 13:09:54 Ripper kernel: pcieport 0000:00:03.1: AER: Corrected error received: 0000:09:00.0
Oct 17 13:09:54 Ripper kernel: vfio-pci 0000:09:00.0: PCIe Bus Error: severity=Corrected, type=Data Link Layer, (Receiver ID)
Oct 17 13:09:54 Ripper kernel: vfio-pci 0000:09:00.0: device [1002:683f] error status/mask=00000040/00000000

Sollte ich mir dazu Gedanken machen?

Scheint bislang nicht die Funktion der gpu zu beeinträchtigen.

Link to comment
6 hours ago, abra8c said:

Es liegt also ziemlich sicher an der gpu

 

sieht leider danach aus, ist auch ein relativ alter ... freut mich jedoch dass du die andere zum Laufen bekommen hast.

 

Die Fehlermeldungen, gesund ist das sicherlich nicht, und da AMD auch nicht die erste Wahl ist was passthrough angeht ... bitte nicht wundern wenn dein System sich mal komplett aufhängt.

 

wenn du von 4k sprichst, ist dein Monitor 4k wo die VM dran hängt ? weil zum Abspielen etc ... kann die nur h264 und da wirst du nichts interessantes in 4k finden, falls es dir darum geht.

Link to comment
1 hour ago, alturismo said:

Die Fehlermeldungen, gesund ist das sicherlich nicht, und da AMD auch nicht die erste Wahl ist was passthrough angeht ... bitte nicht wundern wenn dein System sich mal komplett aufhängt.

Ich hatte das ganze jetzt schon ein paar Stunden laufen und es lief komplett stabil.

 

1 hour ago, alturismo said:

wenn du von 4k sprichst, ist dein Monitor 4k wo die VM dran hängt ? weil zum Abspielen etc ... kann die nur h264 und da wirst du nichts interessantes in 4k finden, falls es dir darum geht.

Ja, es ist ein 4k Monitor, 1080p sieht da halt nur so ok drauf aus aber fürs erste reicht es.

Ich brauche halt auch wirklich nur ein Bildschirm Signal. VNC und auch RDP sind mir einfach zu rucklig auf dauer.

Vielleicht besorg ich mir auch noch ne andere Karte die 4k kann. Vielleicht ne alte Quadro? Da sollte ich doch gar keine Probleme haben weil die von Nvidia offiziell für VM's erlaubt sind, oder bin ich da falsch informiert?

Link to comment
2 hours ago, mgutt said:

Wie kommst du auf die 700er Serie?

Auf der Seite von Nvidia steht:

Quote

Which GeForce GPUs and Windows OSes support virtualization?

...Kepler and later for Desktop...

Keppler ist die 600er und 700er Serie.

https://nvidia.custhelp.com/app/answers/detail/a_id/5204/~/list-of-kepler-series-geforce-desktop-gpus

 

2 hours ago, mgutt said:

Will man es mit einer älteren Karte realisieren, muss man das BIOS auslesen, die Datei modizieren und als vBIOS hinterlegen. Hast du das gemacht?

Ich habe in einem anderen Pc mit gpuz das Bios ausgelesen und dann mit einem Hex Editor den Header vom vbios entfernt.

Edited by abra8c
additional information
Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.