News Beta-Chipsatztreiber: Destiny 2 startet erstmals auf AMD Ryzen 3000

Gast0ne schrieb:
ADer Fehler war bereits lange bekannt - u.A. bei systemd und dem Linux-Kernel waren Workarounds bereits seit Monaten eingebaut.

Nur muss man sagen das systemd den Workaround nicht eingebaut hat und Lenard jede Schuld von sich gewiesen hat und gar verteidigte warum die User nun mal ein funktionsunfähiges System haben. Debian und noch eine Distribution dessen Name ich vergessen habe hatten den Fix selber eingepflegt. Fedora und Ubuntu taten das nicht und die User hatten dann ein Problem.

PS: Das Problem von Destiny 2 soll laut Golem nicht direkt am Zufallszahlengenerator liegen.

Ryzen 3000: Beta-Chipsatztreiber lässt Destiny 2 wieder starten letzten beiden Absätze.
AMD hatte am 11. Juli 2019 mitgeteilt, dass es Probleme mit Destiny 2 gibt, und ein Agesa-Update in Aussicht gestellt, welches den Fehler beheben soll. Interessant ist, dass im gleichen Statement eine Verbindung zum fehlerhaften Zufallszahlengenerator der CPUs hergestellt wurde.


Die Agesa 1003aba, welche uns intern als Vorab-Firmware vorliegt, behebt zwar dieses Problem - nicht aber das von Destiny 2; es gibt also offenbar keine (direkte) Verbindung zwischen dem Spiel und dem Zufallszahlengenerator. Mit der Agesa 1003aba meldet die Hardware einen erfolgreichen Aufruf und liefert einen tatsächlichen Zufallswert statt wie bisher nur -1 wie mit Agesa 1002 und dem neuen Chipsatztreiber.
 
Zuletzt bearbeitet: (https://github.com/systemd/systemd/pull/12536/commits/1c53d4a070edbec8ad2d384ba0014d0eb6bae077 Danke an Gast0ne)
  • Gefällt mir
Reaktionen: Ned Flanders und ZeroStrat
nille02 schrieb:
@Gast0ne, das hätte sie nicht weiter gebracht, denn die CPU sagt ja das alles Ok ist. Um einen Fehler zu vermeiden hätten sie die Ergebnisse vergleichen müssen.
No, um den Fehler zu vermeiden, hätten sie schlicht dasselbe tun müssen, was systemd seit 10. Mai tut: Werte von -1 (oder 0) verwerfen.

Also Pseudocode ohne Error-Checks:
Code:
   int random_value = RDRAND();
   if (random_value == -1 || random_value == 0) {
      ::BCryptGenRandom(NULL, &random_value, sizeof(random_value), BCRYPT_USE_SYSTEM_PREFERRED_RNG);
   }
Eine Zeile mehr. Oder halt nur das Windows-Crypto-API benutzen. Dafür ist es da.
Ergänzung ()

nille02 schrieb:
Nur muss man sagen das systemd den Workaround nicht eingebaut hat [...]
Quatsch.
 
Gast0ne schrieb:
No, um den Fehler zu vermeiden, hätten sie schlicht dasselbe tun müssen, was systemd seit 10. Mai tut: Werte von -1 (oder 0) verwerfen.

Sagte ich ja, als Workaround mussten sie letztlich das Ergebnis betrachten.

Gast0ne schrieb:

Du hast den Link zum Commit doch gepostet (dafür Danke), darauf kann man hinweisen. Wenn du nur ein "Quatsch" oder "Blödsinn" hinwirfst, beendest oder vergiftest du idr. jede Diskussion.
 
Gast0ne schrieb:
Am NIH-Syndrom der Destiny-Macher hat AMD keine Schuld. Der Fehler war bereits lange bekannt - u.A. bei systemd und dem Linux-Kernel waren Workarounds bereits seit Monaten eingebaut.
Du sagst es sogar selbst: Workarounds, weil die HW nicht wie erwartet funktioniert. Du kannst dich drehen und wenden wie du willst. Der Fehler liegt bei AMD und KEINEM anderen. Destiny und systemD zu verteufeln, nur weil sie davon ausfgingen, dass die HW genau so funktioniert wie es dokumentiert ist, ist reiner Bullshit.

Gast0ne schrieb:
Destiny ist das einzige Spiel das absemmelt. Merkste?
Der IE ist der einzige Browser, welcher bei einem fehlenden ; im JS meckert, trotzdem ist das genau das richtige Verhalten. Merkste?
 
Gast0ne schrieb:
Aufrufe über einen Retry-Counter:
Code:
  if (ret == SECRNG_SUPPORTED)
  {
        ret = SECRNG_FAILURE;
        unsigned long long *lrng_val = (unsigned long long *)rng_val;
        //Invoke the rdrand intrinsic function
        if (_rdrand64_step(lrng_val))
                ret = SECRNG_SUCCESS;
        else if (retry_count > 0)
        {
                //Check number of retries does not exceed the max limit
                retry_count = (retry_count > MAX_RETRY_COUNT)? MAX_RETRY_COUNT : retry_count;
                int i;
                for (i = 0; i < retry_count; i++)
                {
                        if (_rdrand64_step(lrng_val))
                        {
                                ret = SECRNG_SUCCESS;
                                break;
                        }
                }
        }
  }
  return ret;
Die Destiny-Macher hätten das nur so abschreiben brauchen und das Problem wäre keines geworden.

Könntest du bitte eine Quelle angeben? Denn was dieser Schnipsel genau macht kann kaum beantwortet werden ohne nicht mindestens die Funktion _rdrand64_step(lrng_val) zu kennen.
Die RND Bibliothek von AMD hab ich mir gerade gezogen, da findet grep nur eben diese Funktion nicht -.-
https://developer.amd.com/amd-aocl/rng-library/#securerng

Wenn sich bei AMD an ihre eigene Empfehlungen gehalten wird, prüft die besagte Funktion auch nur das C-Flag und wäre vom Bug ebenso betroffen wie SystemD...


0xffffffff schrieb:
Ich schlichte das Streitgespräch mal mit einer simplen Feststellung:
[...]
Beide haben etwas verkackt, dass aber Linux nicht mehr ordentlich booten konnte kreide ich persönlich ausschließlich dem "Not Invented Here"-Syndrom bzw. einem Bug von Systemd an. Da können die so viel mit dem Finger auf andere zeigen wie sie wollen.
Die Designentscheidung bei SystemD ist vollkommen valide. Zum Zeitpunkt des Bedarfs liefert der Kernel noch keinen Zufall, also benutzt man andere, zulässige Quellen. Da es bei embedded Geräten und Servern recht lang dauern kann eh der Kernel Zufall liefert ist das sogar ein recht gute Idee.




nille02 schrieb:
Das haben sie nicht ignoriert. Sie kamen in eine Endlosschleife weil sie keine gültigen uuids erstellen konnten und nicht weil die Zufallszahl nicht "gut" war. Da das Starten des Systems von den Zufallszahlen abhängig gemacht wurde, hätte man die Zahlen aber auch betrachten sollen. Dabei hätte man schnell erkannt das der Generator nicht korrekt funktioniert und den langsameren Fallback nutzen können. Wobei ich es schon schlecht finde einfach nur Zufallszahlen für UUIDs zu nutzen, da gibt es andere Verfahren die zu erstellen die sinnvoller wären.
Welche anderen Verfahren schweben dir denn vor? SystemD arbeitet massiv nebenläufig. Alles andere als "Zufall" produziert tendenziell mehr Kollissionen bzw. benötigt einen viel höheren Aufwand bei der Synchronisation der Threads.
Alles was mir einfällt steigert die Komplexität und verringert die Performance deutlich schlimmer als die Kollisionsüberprüfung die mit ZufallsIDs notwendig ist. Vor allem da die Chance für eine Kollision im Normallfall weniger als 1.000.000 : 2^128 liegen sollte.


Man hätte einen Workaround einfach einbauen können und alles wäre gut gewesen. Aber nein, sie Meckern lieber, sie seien nicht zuständig und zeigen auf AMD. Wie gesagt, bei einer einfachen Anwendung könnte ich das verschmerzen, aber bei systemd booten die Systeme nicht mehr.
Stimmt doch aber, CPU Bug ist CPU Bug und benötigt einen fix der CPU und nicht der Software.
Eben solche Aussagen (Rants) hat auch ein gewisser Linus T. verfasst, als es darum ging die ganzen Meltdown / Spectre Fixes in den Kernel einzubinden.


Jesterfox schrieb:
Das Problem ist hier das systemd die Zufallszahlen für etwas benutzt das sie an sich nicht leisten können: zur Generierung von unique IDs. Deswegen müssen sie eine weitere Zufalszahl erzeugen wenn diese sich von der vorherigen nicht unterscheidet und bei einem Zufallsgenerator der immer nur -1 liefert wird das eben blöd ;-)
UUIDs über Zufall zu generieren und eine simplen test auf Kollision zu fahren ist "best practice". Kollisionen sind selten genug, dass sie nicht als Performanceproblem gelten, der Test ist äußerst simpel und die Generierung der UUIDs auch. Allemal besser als ein Codemonster welches bei nebenläufigen Threads die Vergabe von UUIDs synchronisiert (komplexer Code und langsamer ist es in der Regel auch).




nille02 schrieb:
Nur muss man sagen das systemd den Workaround nicht eingebaut hat und Lenard jede Schuld von sich gewiesen hat und gar verteidigte warum die User nun mal ein funktionsunfähiges System haben. Debian und noch eine Distribution dessen Name ich vergessen habe hatten den Fix selber eingepflegt. Fedora und
Lennart hat ja recht, an fehlerhaft agierenden CPUs hat er keine Schuld.
Und der "Fix" den du meinst ist derart Krude, dass es beim anschauen weh tut. Sowas will man in produktivem Code auf keinen Fall haben.
 
Piktogramm schrieb:
Die Fehlerbeschreibung von Destiny klingt eher so, als ob sich das Programm in einer Endlossschleife verheddert.

Aber wie soll es sich denn "in einer Endlosschleife verheddern", wenn es den erhaltenen Wert nicht prüft? Es bekommt ja einen. Wenn es sich verheddert, dann geht das ja nur wenn es mit dem Wert nicht zufrieden ist und einen weiteren anfordert (aber wieder den selben erhält). No?

owned139 schrieb:
Der Fehler liegt bei AMD und KEINEM anderen.

Ich glaube das der grundlegende Fehler bei AMD liegt ist ja überhaupt nicht teil der Diskussion. Keiner hier hat das doch je behauptet in diesem Thread. Übrigens auch AMD selbst nicht. Der springende Punkt ist doch vielmehr das es sowas wie "Good Practice" beim Programieren gibt und da sticht jetzt halt Destiny und Systemd raus, weil sie ja die einzigen sind bei denen sich dieser Fehler manifestiert. Ich würd nur gerne verstehen: Warum?
 
Zuletzt bearbeitet:
@Ned Flanders
Irgendwer hat vor kurzem hier gepostet, dass Destiny anscheinend kein Problem mit dem Zufallsgenerator hat sondern ein anderweitiges.

Damit hypothetisch, wenn es der Dauerzufallswert -1 wäre:
Eine Prüfung samt Sonderbehandlung des Ergebnissen würde zu einem definiertem Verhalten führen (zum Beispiel ein kontrolliertes Beenden des Programms samt Fehlermeldung). Dem ist aber nicht so.
Das man wenn man Zufallswerte nutzt Kollisionstests einführt ist normal. Bei einer (normalerweise extrem seltenen Kollision) holt man sich einfach neuen Zufall. Bei halbwegs funktionierenden Zufallsquellen ist es an sich unmöglich, dass Kollisionen zu einer Endlosschleife führen[1]. Deswegen behandelt man diesen Fall auch nicht. Wenn der Dauerzufall -1 auftritt hängt man aber dann doch in einer Endlosschleife. Diese Endlosschleife widerspricht jedoch dem definiertem Verhalten einer dedizierten Prüfung.


[1] Kollisionswahrscheinlichkeiten bei Verhältnissen von kleiner als 1.000.000 zu 2^128 sind sehr klein. Das man mehrfach hintereinander Treffer landet sind noch viel kleiner...
 
owned139 schrieb:
Warum sollte der Entwickler Schuld sein, wenn ein Feature der CPU nicht so funktioniert, wie von AMD angegeben? Ergibt keinen Sinn, aber wieso auch AMD blamen? Die anderen sind ja immer Schuld.

Dieser AMD Circlejerk nervt extrem.
Das hat nichts mit AMD Circlejerk zu tun, sondern einfach mit Schlampigkeit der SW Entwickler.
Man muss solche Sachen, wie schon mehrmals erwähnt wurde, abfangen können.
CPU's haben nun mal Bugs, das ist nicht wirklich was neues, damit muss man umgehen können, was ja auch offenbar "99.99%" der Entwickler problemlos schaffen.
 
AMDPower schrieb:
Das hat nichts mit AMD Circlejerk zu tun, sondern einfach mit Schlampigkeit der SW Entwickler.
Man muss solche Sachen, wie schon mehrmals erwähnt wurde, abfangen können.
CPU's haben nun mal Bugs, das ist nicht wirklich was neues, damit muss man umgehen können, was ja auch offenbar "99.99%" der Entwickler problemlos schaffen.

Gut, schreib mir bitte mal eine vollständige Fehlerbehandlung für den Fall, dass der X86 Befehl add src, dest nicht funktioniert!
Also für signed / unsigned Integerwerte mit 8, 16, 32, 64 Bit unter Beachtung, dass das C-Flag beliebig falsche Werte annimmt, sich die CPU verrechnet und notwendige Speicheradressen falsch berechnet.
Die Fehlerbehandlung muss natürlich auch dann stabil laufen, wenn sie auf einer CPU läuft auf der alle Befehle das selbe, undefinierte Verhalten wie "add" zeigen können!

Bitte erst wieder im Forum Posten wenn du fertig bist ;)
 
@Piktogramm

Ok, ich glaube, ich verstehe halbwegs was Du meinst. Wie gesagt, für mich stellt sich in erster Linie die Frage warum Destiny2 sich so exotisch verhält. Vermutlich hat Gast0ne recht mit dem NIH-Syndrom Einwurf.
 
AMDPower schrieb:
Das hat nichts mit AMD Circlejerk zu tun, sondern einfach mit Schlampigkeit der SW Entwickler.
Man muss solche Sachen, wie schon mehrmals erwähnt wurde, abfangen können.
CPU's haben nun mal Bugs, das ist nicht wirklich was neues, damit muss man umgehen können, was ja auch offenbar "99.99%" der Entwickler problemlos schaffen.
Kein Mensch schreibt für jede Funktion/Möglichkeit irgendwelche Workarounds und das hat nichts mit schlampigkeit zu tun. Sobald der Fehler vom AMD gefixt wurde, läuft Destiny 2 und systemD wieder einwandfrei, also wieso soll der Entwickler da noch mehr arbeit reinstecken, wenn der Fehler so oder so von AMD gefixt werden muss?

Kurze Frage: Bist du Entwickler? Ich denke nämlich nicht, sonst würdest du dich anders dazu äußern.
 
owned139 schrieb:
Kein Mensch schreibt für jede Funktion/Möglichkeit irgendwelche Workarounds und das hat nichts mit schlampigkeit zu tun. Sobald der Fehler vom AMD gefixt wurde, läuft Destiny 2 und systemD wieder einwandfrei, also wieso soll der Entwickler da noch mehr arbeit reinstecken, wenn der Fehler so oder so von AMD gefixt werden muss?

Kurze Frage: Bist du Entwickler? Ich denke nämlich nicht, sonst würdest du dich anders dazu äußern.
Mag mich nicht streiten mit Dir, ich sehe es nun mal so, da man als Entwickler ja sicherstellen will dass das Programm auch läuft.
Zu Deiner Frage : ja, war ich mal, aber zur Zeit von Turbo Pascal 5 / 6. :)
 
  • Gefällt mir
Reaktionen: aldaric
Gast0ne schrieb:
Die Destiny-Macher hätten das nur so abschreiben brauchen und das Problem wäre keines geworden.

Der Else-Zweig mit dem Retry Counter wäre aber nie erreicht worden, weil der Rückgabewert der Random-Funktion immer "Success" ist.

Piktogramm schrieb:
Könntest du bitte eine Quelle angeben? Denn was dieser Schnipsel genau macht kann kaum beantwortet werden ohne nicht mindestens die Funktion _rdrand64_step(lrng_val) zu kennen.

Code:
 ret = SECRNG_FAILURE;
        unsigned long long *lrng_val = (unsigned long long *)rng_val;
        //Invoke the rdrand intrinsic function
        if (_rdrand64_step(lrng_val))
                ret = SECRNG_SUCCESS;
        else if (retry_count > 0)

Der beobachtete Effekt deutet darauf hin dass die Funktion _rdrand64_step immer "erfolgreich" ausgeführt wird, die Zielvariable rng_val aber immer -1 enthält. Der Else-Zweig wird niemals erreicht, obwohl er erreicht werden müsste, weil _rdrand64_step nicht in der Lage ist eine Zufallszahl zu erzeugen.


Gast0ne schrieb:
Der Aufrufer erhält eine Zahl. Den Wertebereich dieser Zahl muss der Aufrufer schon selbst prüfen, denn nur er weiß, wofür er diese Zahl letztlich einsetzen will. Die CPU sichert im Zufälligkeit zu, nicht mehr und nicht weniger. Und wie bereits festgestellt ist auch eine Folge gleicher Zahlen zufällig. Um die Zufälligkeit zu validieren - aber darum geht es hier nicht - müsste der Aufrufer sehr viele Zufallszahlen anfordern und darüber eine Statistik machen.

Der Wertebereich ist bereits durch das Zielregister der Funktion definiert. Da gibts für den Aufrufer nichts zu prüfen. Und wie der Aufrufer prüfen will ob der Wert im Register zufällig ist oder nicht wüsste ich immer noch gern.

738465845
389459384
435769324
329487573

Sind diese vier Zahlen Zufallswerte oder nicht? Bitte prüfen und begründen warum es Zufallswerte sind oder warum es keine sind.

Ned Flanders schrieb:
Aber Destiny2 prüft/beurteilt ja offensichtlich, sonst wäre es ja mit -1 zufrieden und würde booten. :confused_alt:

Oder was ist Eure Erklärung.

Da wohl niemandem der Quellcode von Destiny bekannt ist, wirds schwer da eine Erklärung zu finden. Eventuell könnte man mit Reverse Engineering was rausfinden.
 
Zuletzt bearbeitet:
SavageSkull schrieb:
Mein persönlicher Eindruck von AMD, dass es jedesmal "Early Adoptor" Probleme mit Umsetzung und Software gibt, sobald eine neue Entwicklung (kein Refresh) gibt, bestätigt sich hier mal wieder.

Das ist kein Alleinstellungsmerkmal für AMD-Hardware. Ich denke da nur an brennende Samsung-Geräte, brechende Displays, brechende iphones, Intel-USB-Ports die Geräte kokeln ...
 
Ich versteh ehrlich gesagt nicht warum da noch groß darüber diskutiert wird. Der Fehler ist bemerkt worden, und weil Bios Updates grade sowieso lange dauern, wurde er vorweg mit einem Workaround im Chipsatztreiber gefixt. Der Chipsatztreiber ist seit heute offiziell zum Download freigegeben. Später wirds noch die Bios Updates geben und der Workaround wird unnötig sein.

Das Problem ist doch damit mittlerweile obsolet, da gelöst.
 
nazgul77 schrieb:
Das ist kein Alleinstellungsmerkmal für AMD-Hardware. Ich denke da nur an brennende Samsung-Geräte, brechende Displays, brechende iphones, Intel-USB-Ports die Geräte kokeln ...
Ich meine damit keine Mängel an der Hardware und auch keine Einzelfälle, sondern mangelhaft umgesetzte Software/Treiber.
Daher kommt wohl auch die Mär, dass AMD Hardware gut altert. Das kann man nämlich auch so beschreiben, dass AMD Hardware ihre Leistung anfangs gar nicht umsetzen kann, weil es an der Software hakt.
 
SavageSkull schrieb:
Mein persönlicher Eindruck von AMD, dass es jedesmal "Early Adoptor" Probleme mit Umsetzung und Software gibt, sobald eine neue Entwicklung (kein Refresh) gibt, bestätigt sich hier mal wieder.

War, ist und wird auch bei Intel immer so bleiben. Man erinnere sich mal an den Release von Skylake....als SATA Anschlüsse wegen fehlerhafter Chipsätze deaktiviert werden mussten, ohne jegliche Kompensationen.

Das Intel davon momentan profitiert, da man ja grundsätzlich seit 5 Jahren immer wieder Skylake vorgesetzt bekommt, wird sich spätestens mit dem Erscheinen der Sunny Cove Kerne ändern.
Ergänzung ()

SavageSkull schrieb:
Daher kommt wohl auch die Mär, dass AMD Hardware gut altert. Das kann man nämlich auch so beschreiben, dass AMD Hardware ihre Leistung anfangs gar nicht umsetzen kann, weil es an der Software hakt.

Genau so gut könntest du mittlerweile argumentieren das Intel Hardware Leistung verliert mit dem Alter, weil ständig irgendwelche Sicherheitslücken gefunden werden.
 
DocWindows schrieb:
[...]
Der beobachtete Effekt deutet darauf hin dass die Funktion _rdrand64_step immer "erfolgreich" ausgeführt wird, die Zielvariable rng_val aber immer -1 enthält. Der Else-Zweig wird niemals erreicht, obwohl er erreicht werden müsste, weil _rdrand64_step nicht in der Lage ist eine Zufallszahl zu erzeugen.
Ist mir schon klar, aber "deutet darauf hin" ist nichts woran man gescheit diskutieren kann. Das die Bibliotheken wahrscheinlich wie SystemD in ähnliche Probleme rennen ist mir auch klar und das @Gast0ne da einen Codeschnipsel liefert der seiner Meinung mehr entspricht als den Tatsachen ;)


738465845
389459384
435769324
329487573

Sind diese vier Zahlen Zufallswerte oder nicht? Bitte prüfen und begründen warum es Zufallswerte sind oder warum es keine sind.
Damit statistische Teste eine ausreichende Aussagequalität haben müsstest du mehr Werte liefern :D
 
aldaric schrieb:
Das Intel davon momentan profitiert, da man ja grundsätzlich seit 5 Jahren immer wieder Skylake vorgesetzt bekommt, wird sich spätestens mit dem Erscheinen der Sunny Cove Kerne ändern.

Naja, stark profitiert hat Intel davon nicht.

Über die gefunden Sicherheitsprobleme könnte man auch schon fast ein Buch schreiben.
Wäre öfters mal was neues gekommen, wären viele Probleme unentdeckt geblieben.

Und das AMD Intel für die nächsten 20+ Monate überholt hat, dürfte man auch nicht gerade unter Profit verbuchen.

Ich kann die Diskussion über den Zufallszahlen Bug nicht ganz verstehen.
Der wurde bereits gefixt.
Man kann davon ausgehen das das Problem ERLEDIGT ist.
Ergänzung ()

SavageSkull schrieb:
Das kann man nämlich auch so beschreiben, dass AMD Hardware ihre Leistung anfangs gar nicht umsetzen kann, weil es an der Software hakt.

Das würde ich als AMD Freund sogar unterschreiben.
Die Hardware war von AMD schon immer Welten besser als die Software.

Release Treiber haben mich noch nie überzeugt.
Es wurden auch viele Fehler zu lange herumgeschleppt.

Aber das ist eine Frage der Finanzen und des Personals.
Man darf nicht vergessen wo AMD im Vergleich zu Intel oder Nvidia lag. (Umsatz/Gewinn)

Wenn AMD in diesem Tempo weiter wächst, kann man es sich leisten auf diesem Gebiet mehr zu machen.
 
Zuletzt bearbeitet:
Zurück
Oben