it-swarm.com.de

Wie kann ich Windows fragen, ob die RAM läuft in single, dual oder quad channel?

Wie kann ich die aktuelle RAM Konfiguration erkennen? Ich muss Windows fragen, ob das RAM gerade im Single-, Dual- oder Quad-Channel läuft.

Ich habe viel gesucht und auf dieser oder anderen Websites keine ähnlichen Fragen gefunden, was für mich ziemlich überraschend ist.

Ich arbeite mit C++, aber diese Frage gilt wirklich für alle Programmiersprachen auf die gleiche Weise, da es darum geht, welche Windows-Funktion oder der Befehl powershell/cmd mir die benötigten Informationen geben.

13
JohnAl

InterleavePosition ist das, wonach Sie suchen. Einer kam als 2,2,2, weil er 3 Sticks in zwei Kanälen ausführt. Sie müssen herausfinden, wie Sie einen Computer identifizieren, auf dem ein Kanal ausgeführt wird, damit Sie die Ausgabe dieses Befehls verwenden können:

wmic memorychip get InterleavePosition

Edit : Eigentlich nicht sicher über den Dual Channel mit 3 Sticks. Einige Untersuchungen deuten darauf hin, dass die meisten Motherboards heutzutage den ungeraden Einzelkanal herstellen werden. 

Aus dem MSDN heraus müssen wir also mit Systeminformationen über verschachtelten Speicher arbeiten.

Position of the physical memory in an interleave. For example, in a 2:1 interleave, a value of "1" indicates that the memory is in the "even" position.

This property is inherited from CIM_PhysicalMemory.

0 - Noninterleaved

1 - First position

2 - Second position

Plus InterleaveDataDepth was dies sagt:

InterleaveDataDepth

Unsigned 16-bit integer maximum number of consecutive rows of data that are accessed in a single interleaved transfer from the memory device. If the value is 0 (zero), the memory is not interleaved.

Wohlgemerkt, Interleave ist ein schickes Wort für "gegenseitiges Teilen", das heutzutage dem Multichannel ähnelt, aber es ist nicht dasselbe. Vom Wiki zum verschachtelten Gedächtnis:

Es unterscheidet sich von Mehrkanal-Speicherarchitekturen, hauptsächlich da Verschachtelter Speicher keine weiteren Kanäle zwischen dem Hauptspeicher Und dem Speichercontroller hinzufügt. Channel Interleaving ist jedoch auch Möglich ... []

Mit diesem zeige ich, wie es aussieht, 4 RAM -Sticks in Dual Channel mit cmd.exe zu haben:

 example of dual channel memory output from wmic

Edit : Mehrere Personen haben bestätigt, dass diese Werte auf einigen Maschinen einwandfrei funktionieren, aber zu oft rätselhafte/unsinnige Werte liefern. 

4
Dylan Moore

Sehen Sie sich die SMBIOS-Spezifikationen an: Referenzspezifikation für das System Management BIOS (SMBIOS) . Aktuell ist die letzte Version am 14. Mai 2018 datiert.

Schritt 1: Sie müssen den Current Interleave aus 7.6 Memory Controller Information (Type 5)

Offset Name Length Wert Beschreibung 
 06h Anzahl der Speichergeräte (n) BYTE Variiert Anzahl der Speichergeräte (Typ 11h), die diesem Kanal zugeordnet sind. 
 Dieser Wert definiert auch die Anzahl der 
 Lade/Handle-Paare, die folgen. 

Sie sollten diese Count(n)-Speichergeräte mit ihren zugehörigen Kanälen lesen. 

Schritt 3: Alles in allem, Sie erhalten eine Tabelle wie folgt:

Channel 1: DIMM #0
Channel 1: DIMM #1
Channel 2: DIMM #0
Channel 2: DIMM #1

Glücklicherweise gibt es in den SMBIOS-Spezifikationen einige Beispiele. 

Schauen Sie sich zum Beispiel den Abschnitt 7.7.3 Memory subsystem

Da sich die Spezifikationen häufig ändern und einige veraltet sind, würde ich mich nicht auf einsatzbereite Windows-WMI/API verlassen. Der beste Weg, den ich Ihnen vorschlagen kann, ist, die RAW-SMBIOS-DATEN auf einen Blick zu lesen und eine einfache Tabelle wie die oben stehende zu erstellen. So geht's: SMBIOS Demystified

Außerdem glaube ich, dass Sie keine weiteren Annahmen über die tatsächliche effektive Kanalgeschwindigkeit machen können. Möglicherweise müssen Sie weitere Informationen zur Geschwindigkeit jedes DIMM-Moduls sammeln.

IMHO, das Posten des Quellcodes für eine solche Aufgabe geht weit über den aktuellen Fragenbereich hinaus. Daher gibt es einige Links: Die beste Referenz zu diesem Thema ist dmidecode , aber da ich mit Delphi gut fühle, würde ich es mir lieber machen in diesem Delphi/FPC-Beitrag: Lesen der SMBios-Tabellen mit Delphi .

0
deblocker