CPU-Register abfragen

  • Ausgehend von des GrandAdmiralThrawn s Problem hier :

    Spoiler anzeigen

    Na klar kann ich das so einstellen, daß es gar nicht läuft, habe ich ja schon gesagt, aber das ist nicht die Idee dahinter. Die Idee ist es, ihn grade soweit instabil zu machen, daß ich tatsächliche ECC Korrekturen im Memtest 4.20 nachweisen kann...


    Worum es mir geht ist es zu testen, ob das ASUS P6T Deluxe nun wirklich ECC RAM kann oder nicht. Weil diese ganzen "brauchst nur dmidecode schauen"- oder "wenn dir Tool A das im Windows anzeigt wird's schon da sein"-Beiträge, die man überall im Internet findet kann man leider komplett und vollständig vergessen bei dem Thema. Und den kommerziellen memtest kann man leider gleichsam in die Tonne treten was das auf X58 oder sonstigen BIOS Systemen angeht.

    Was ich provozieren möchte sind halt nicht irgendwelche Fehler, sondern explizit ein Auslösen des ECC. Aber vielleicht funktioniert das ja mit dem Test, wenn man das Windows Log auf ECC Fehler mit überwacht? Gibt's dazu Erfahrungswerte?

    Diese Zählregister werden wohl für mich als Nutzer nur lesbar sein? Aber ist ja egal, ich schau einfach Mal rein mit pciconf oder unter Windows mit WPCREdit! Danke für die Recherche!


    PS.: Paar Euro würde ich für einen garantiert Fehler erzeugenden ECC DDR3 Stein direkt wirklich zahlen. Nur um sicher zu gehen. Weil bei der Herumexperimentiererei kann ich mir auch nie zu 100% sicher sein, ob es nur nicht geklappt hat, weil ich es vielleicht einfach falsch mache. Oder weil das so nicht reicht.

    und da ich ihm mal vor langer Zeit versprochen hatte, mir das BIOS des Boards anzuschauen, aber diese Arbeit vor einem Jahr unterbrechen mußte wegen anhaltender Kopfschmerzen, sobald ich auf den Code stierte, hab ich mir mal gedacht, selbst ein Programm zu schreiben, das die Register der CPU auslesen kann. So was scheint es ja nicht zu geben. WPCRedit macht das für den Chipsatz und ein paar PCI-Geräte, CPU-Daten konnte ich damit jedoch noch nie abrufen.

    Okay, nach 10 Tagen C für dummies Lesen und parallel dazu schnell das Programm schreiben, mal die erste, halbgare Version getestet:

    RegQuery: Quick'n'Dirty - in allerbester Microsoft-Manier :)

    aber unter Linux mit root-Rechten :P

    und Linux läuft danach ohne Zicken weiter =O

    Unter Linux liest das Programm jedenfalls schon mal irgendwelche DWORDs aus, die sich nach Erhöhung des Offsets um 4 dann ändern. Soweit so logisch, da ein Offset 1 Byte speichert und 4 Bytes = 1 DWORD sind. Chipsatz (abgekürzt mit M für Motherboard) und CPU (abgekürzt mit C) ergeben unterschiedliche Werte. Auch gut. :)

    Leider kann ich nicht beurteilen, ob die Werte Sinn ergeben, da mir die Datenblätter zur Hardware meines Linuxrechners

    - CPU: Intel Core2 Duo E8200

    - Chipsatz: nVidia nForce 650i SLI (Northbridge C55) + 570i SLI (Southbridge MCP55P)

    fehlen.

    Die Ausgabe von FFFFFFFFh bei Eingabe von C 0 0 44 deutet jedenfalls darauf hin, das ich versucht habe, ein nicht existendes Register zu lesen.

    Auch ein Vergleich mit WPCRedit-Werten geht nicht, da ich das Programm trotz WINE unter Linux nicht starten kann. Keine Rechte. :rolleyes:

    Mit Windowsrechnern bin ich zur Zeit nicht verflucht. ;)


    Wenn mir jemand die Datenblätter zur oben genannter Hardware schicken könnte, käme ich schon einen guten Schritt weiter. 8)

    Ich werde mich von keinem einzzzigen Prozzzessor trennen.
    Jedoch lockt es mich beinahe, ihn Dir zu überlassen, nur um zu sehen, wie er Dich in den Wahnsinn treibt :evil:

    Meine Begehren

  • Lotosdrache 14. Februar 2022 um 17:54

    Hat den Titel des Themas von „CPU Register abfragen“ zu „CPU-Register abfragen“ geändert.
  • Sowas wie Zugriff auf Chipsatzregister wird mit wine niemals gehen. Wine lebt strikt im Userspace. Für low-level Zugriff auf die Hardware mußt du aber im Kernelspace sitzen, also bei Betriebssystemen die diese Trennung haben (WinNT und tendenziell auch alle UNIX-artigen Systeme gehören dazu), oder administrativen Zugriff auf entsprechende Schnittstellen zwischen Kernel- und Userpace besitzen. Dafür gibt's zum Glück auch hier Programme.

    Um WPCREdit Funktionalität unter Linux und diversen UNIX-Systemen nachzustellen solltest du Werkzeuge wie etwa pciconf (FreeBSD) oder lspci und setpci (Linux) nutzen können. Mit letzterem habe ich auch schon Mal einen GMA950 unter FreeBSD [getaktet], wo es diese Tools allesamt gibt. Durch Umschreiben eines solchen PCI Konfigurationsregisters. Genau so dürfte damals auch das "GMABooster" Programm gearbeitet haben. lspci und setpci finden sich normal in einem Paket das irgendwie pciutils oder pcitools oder so heißt, je nach Linux Distribution. Die erlauben ein Auslesen und Setzen der Konfigurationsregister, siehe entsprechende man pages. Damit müßtest du deine Ausgaben eigentlich verifizieren können, zumindest für Geräte am PCI Bus. Dazu zählt in der Regel eben auch der Chipsatz.

    Auf jeden Fall ein cooles Projekt! Bin voll dafür! :spitze:

    Edit: Die gewünschten Datenblätter habe ich leider nicht auf Vorrat, müßte ich selber suchen im Netz, leider.

    1-6000-banner-88x31-jpg

    Stolzer Besitzer eines 3dfx Voodoo5 6000 AGP Prototypen:

    • 3dfx Voodoo5 6000 AGP HiNT Rev.A-3700

    [//wp.xin.at] - No RISC, no fun!

    QotY: Girls Love, BEST Love; 2018 - Lo and behold, for it is the third Coming; The third great Year of Yuri, citric as it may be! Edit: 2019 wasn't too bad either... Edit: 2020... holy crap, we're on a roll here~♡!

    Quote Bier.jpg@IRC 2020: "Je schlimmer der Fetisch, desto besser!"

    Einmal editiert, zuletzt von GrandAdmiralThrawn (14. Februar 2022 um 19:20)

  • Ah, okay, muß ich mir mal anschauen.

    Konntest Du mit pciconf (FreeBSD) oder lspci und setpci (Linux) eigentlich Deinen ECC-Status ermitteln?

    Ich werde mich von keinem einzzzigen Prozzzessor trennen.
    Jedoch lockt es mich beinahe, ihn Dir zu überlassen, nur um zu sehen, wie er Dich in den Wahnsinn treibt :evil:

    Meine Begehren

  • Ich wüßte nicht, wie. Genau dafür wäre ja ein Tool nötig, das CPU Konfigurationsregister ausliest, anstatt solche am PCI Bus bzw. im Chipsatz? Oder habe ich da etwas falsch verstanden? Aktuell habe ich die Platine leider schon in meine 24/7 Workstation eingebaut, und die rennt mit Windows. Aber wenn ich dich mißverstanden haben sollte, und ein Auslesen aus dem PCI Registerraum möglich wäre, dann ginge das ja auch unter Windows.

    Ich hätte sonst zur Not auch noch meine irgendwie angeknackste. ältere Plattform, die ich ersetzt habe. Die kann ich flugs mit jedem beliebigen Betriebssystem bestücken. Als Testplattform, auch für deine Software, wenn du das ernsthaft weiterverfolgen möchtest. Ich muß nur noch irgendeinen unbuffered DDR3 ECC Speicher wo herschaffen, mein ganzer Kingston ECC ist schon in oben besagter Workstation gesteckt. Und der wird dort auch wirklich zur Gänze gebraucht.

    1-6000-banner-88x31-jpg

    Stolzer Besitzer eines 3dfx Voodoo5 6000 AGP Prototypen:

    • 3dfx Voodoo5 6000 AGP HiNT Rev.A-3700

    [//wp.xin.at] - No RISC, no fun!

    QotY: Girls Love, BEST Love; 2018 - Lo and behold, for it is the third Coming; The third great Year of Yuri, citric as it may be! Edit: 2019 wasn't too bad either... Edit: 2020... holy crap, we're on a roll here~♡!

    Quote Bier.jpg@IRC 2020: "Je schlimmer der Fetisch, desto besser!"

  • Eine Erkenntnis aus dem Studium der Datenblätter zu Deiner Xeon 56xx CPU und dem Reverse Engineering Deines BIOSes ist, daß die Zugriffsmethode davon abhängt, was man an der CPU konfigurieren möchte:

    1. Model Specific Registers: Deren Inhalt wird über einen speziellen Befehl in die allgemeinen Register EDX:EAX ausgelesen, dort modifiziert und über einen anderen Befehl wieder zurückgeschrieben. Die Einstellungen des Cache z. B. werden so gesetzt (stark verkürzt dargestellt jedenfalls ;)).

    2. PCI-Bus: Der Inhalt dieser Register wird mittels des gleichen Verfahrens gelesen und geschrieben, wie man es auch vom Chipsatz her kennt. Schaut man sich die Beschreibung der ECC-Funktion im Datenblatt an,

    Kurzfassung Datenblatt

    dann sehen die Angaben so aus, als gehörten sie zu einer PCI-Adresse, oder?

    Die Zugriffsmethoden sind ein ziemliches Sammelsurium der CPU-Entwicklung vor dem Hintergrund von Intels Kompatibilitätsversprechen. Ohne Datenblatt ist es halt echt schwer, ein Programm dafür zu schreiben, weil man unabhängig von der Zugriffsmethode die Adressen und deren zugeordnete Funktionen nicht kennt. Ohne diese Infos würde ich aber nicht so eben mal irgendwas ändern wollen und um sie zu bekommen, sind zahlreiche Versuche mit minimalen Änderungen notwendig. Beinhartes Reverse Engineering eben...


    Wenn Du Deinem Wackelboard noch einen sinnstiftenden Lebensabend gönnen möchtest, dann reaktiviere es doch für ein paar Versuche. Für diesen Fall wäre es ja auch wurscht, ob das Programm mit root/Admin-Rechten läuft oder im Userspace. Für eine evtl. finale Version wäre letzteres natürlich wünschenswert - obwohl manch Admin darüber vielleicht anders denken mag, wenn jeder plötzlich an der CPU herumpfuscht ;) - aber für Dein Problem ist das jetzt völliger Overkill in Anbetracht dessen, daß ein Versuchskaninchen zur Verfügung steht und die Workstation unbekümmert weiter laufen kann. Wenn es Dir aber jetzt schon derart wichtig ist, daß alles sauber implementiert ist, mußt Du noch etwas länger Geduld zeigen, da ich blutiger Programmieranfänger bin.

    Da ich mich hier auf völligem Neuland bewege, wäre es hilfreich, wenn Du nicht nur ECC-Speicher testen würdest, sondern auch nicht ECC-Speicher in gleicher Größe, Geschwindigkeit, Dichte usw. - selbstverständlich nicht gleichzeitig. ;) Damit ließe sich mittels Vergleich der Registerwerte herausfinden, ob Asus nicht doch eine Routine zur automatischen Erkennung der ECC-Fähigkeiten der RAM-Module programmiert hat.

    Weiterhin könnte man in Betracht ziehen, die CPU-Register unter DOS auszulesen, um mögliche Änderungen der Einstellungen durch Windows-/Linux-Treiber aufzudecken. Sollte es aber ausreichen, daß ECC auf dem Zielsystem läuft, wäre der Vergleich ECC-DDR3 <-> nicht-ECC-DDR3 vermutlich ausreichend.

    Aber wenn ich dich mißverstanden haben sollte, und ein Auslesen aus dem PCI Registerraum möglich wäre, dann ginge das ja auch unter Windows.

    Was würdest Du dazu vorschlagen? Dein Zielsystem scheint ja Windows zu sein.

    ach ach ach

    Das ist die zweite Version des Beitrags. Die erste ging verloren, nachdem ich versehentlich das Browserfenster geschlossen hatte und der Server dieses Mal wohl keinen Zwischenstand gespeichert hat.

    Ich schick das jetzt erst einmal ab, bevor ich es wieder verliere. Hoffentlich habe ich nichts vergessen. :rolleyes:

    Ich werde mich von keinem einzzzigen Prozzzessor trennen.
    Jedoch lockt es mich beinahe, ihn Dir zu überlassen, nur um zu sehen, wie er Dich in den Wahnsinn treibt :evil:

    Meine Begehren

  • Oh ja, diesen Schinken kenne ich... ***Backen aufblasen*** :S

    Den hab ich schon in zwei Versionen auf der Platte liegen und den von AMD seit ein paar Tagen auch noch :topmodel:

    Aber trotzdem Danke für den Hinweis. :spitze:

    Im Moment schreib ich den Code für die Eingabe um.

    Die Lesefunktion des PCI-Buses wurde aus der Spaghetti Carbonara herausgelöst und als eigene Funktion realisiert.

    Wobei ich immer noch mit Rootrechten direkt auf den PCI-Bus zugreife. X/

    Gibt es da keine Funktion im Linuxkernel, die man auch mit Userrechten aufrufen kann?

    Eine Angabe des Offsets ist nicht mehr notwendig. Jetzt können alle Offsets einer Gerätefunktion auf einmal gelesen und dann mittels einer neuen Funktion als Tabelle im Stile von WCPRedit auf der Konsole dargestellt werden.

    Viel Arbeit ich noch habe...

    Ich werde mich von keinem einzzzigen Prozzzessor trennen.
    Jedoch lockt es mich beinahe, ihn Dir zu überlassen, nur um zu sehen, wie er Dich in den Wahnsinn treibt :evil:

    Meine Begehren