jpk
Neuling
jpks kleine Speicherkunde…
[ 14. Juli 2006: "A long time ago - Update" ]
Grüßt euch,
getreu dem Motto „Dass ich erkenne, was die Welt, im Innersten zusammenhält“ (Goethe, Faust I) habe ich mich in letzter Zeit – hobbymäßig – für Arbeitsspeicher interessiert. Eigentlich aus dem Grund heraus, dass ich nie so genau wusste, was nun CL, RAS oder T1 bedeutet. Naja, je länger ich dann recherchiert und gelesen habe, desto interessanter wurde es und da hab’ ich mir gedacht: Könntest eigentlich mehr Leute an deinem Wissen teilhaben lassen
Das Problem, was mir bei meinen bisherigen Recherchen aufgefallen ist, dass es entweder grobe Einführungen in die Speichertechnik gibt, oder gleich hundert Seiten starke pdfs, die das ganze sehr schwer verdaulich behandeln.Ich habe versucht an keiner Stelle „zu tief zu bohren“ und hoffe, dass ich das einigermaßen hier in der FAQ umsetzen kann.
Aber nun genug der vielen Worte, lasst Taten sprechen
Hintergrund-Informationen:
>> Zahlenspiele I:
Beim Arbeitsspeicher und generell bei Speicher wird nicht in MByte oder GByte gerechnet, sondern in MBit und GBit! Für alle, die das aus dem Informatikunterricht nicht mehr so ganz genau kennen, hier ein paar Aufwärmübungen
Code:
1 Byte = 8 Bit
1 KByte = 1024 Byte = 1024*8 Bit = 8192 Bit
1 MByte = 1024 KByte = 1024*1024 Byte = 1024*1024*8 Bit = 8.388.608 Bit
1 GByte = ok, ihr habt’s kapiert oder? ;)
Code:
1GBit = 1024 MBit => 1024 MBit/8 = 128MByte
>> Zahlenspiele II:
Zusammenhang Periode - Frequenz:
Code:
T = Periodendauer = 1/Frequenz (f)
Beispiel: T = 2ms => f = 1 / 2ms = 0.5kHz = 500Hz
f = Frequenz = 1/Periodendauer (T)
Beispiel: f = 100Hz => T = 1 / 100Hz = 10ms
T = 1s f = 1Hz
T = 1ms f = 1KHz
T = 1us f = 1MHz
T = 1ns f = 1GHz
Beispiel: T = 6ns => f = 1/6 = 0,166GHz ~ 167MHz
>> Speicherhierarchie:
Bevor wir uns mit dem Arbeitsspeicher beschäftigen ist es ganz hilfreich, wenn man wenigstens eine dunkle Ahnung davon hat, wie die Speicherhierarchie in einem heutigen PC aussieht.
Die besten Freunde der CPU sind seine Register! Der Prozessor liebt die Register sosehr, dass sie direkt bei ihm sind und ihn mit den _ganz_ wichtigen Informationen versorgen! Allerdings hat die CPU nicht viele solcher Freunde – ungefähr 1 KByte.
Als nächstes kommt der L1 (Level 1) Cache. Den mag der Prozessor auch richtig gern und hier werden ~95% aller Fragen beantwortet! – ca. 128KByte...
Mit den restlichen 5% der Anfragen muss der Prozessor leider den langen Weg zum L2 (Level 2) Cache auf sich nehmen. Aber das macht nichts, denn der ist auch noch recht nah. In den (üblicherweise) 1-2MByte findet er eine Antwort auf 80% seiner Fragen!
Tja, aber manchmal muss der Prozessor auch richtig (!) lange warten. Wenn er nämlich Daten aus dem RAM braucht! Deswegen ist der RAM beim Prozessor verhasst – weil das ein fauler Sack ist, so einfach!
original Artikel von arstechnica.com
Wenn ihr euch die Tabelle anseht (leider schon etwas veraltet), erkennt ihr, dass der RAM im Gegensatz zum L2 Cache schon sehr langsam ist! Der Prozessor versucht also so wenig wie möglich direkte Anfragen an den Arbeitsspeicher zu stellen!
„CPU’s best friends? – L1 and L2!“
>> Who the fu** is „JEDEC“ ?:
stand früher für: Joint Electron Device Engineering Council
heisst heute: JEDEC Solid State Technology Association
oder in kurz: JEDEC
ist Teil der: Electronic Industries Allience (EIA)
Die JEDEC ist ein Gremium aus über 300 internationalen Halbleiter-Herstellern und sitzt in Amerika. Sie ist für uns insofern interessant, als dass sie _alle_ Arten von Arbeitsspeicher standardisiert! Also was „PC133“ oder „DDR400“ genau ist und was ein solcher Riegel können muss, wird von diesen Herren festgelegt. Und das ist gut so!
Wie das bei Gremien nur leider so ist, sind die Damen und Herren dort furchtbar laaangsam
Von DDR-500 oder DDR2-1066 haben die noch nichts gehört...
Ok, jetzt geht’s aber wirklich los… ohne lange Umschweife, stürzen wir uns in die Arbeit
>> Der Aufbau (Hardware!):
Den Aufbau eines heutigen Speicherriegels nennt man DIMM.
DIMM steht für „Dual Inline Memory Module“! „Dual Inline“ bedeutet eigentlich nichts weiter, als dass wir auf beiden Seiten des Riegels Kontaktpins finden! Im Gegensatz hierzu benutzte man früher SIMMs, „Single Inline Memory Module“.
Die Art, oder vielmehr das System nachdem unser Arbeitsspeicher verfährt nennt man RAM. RAM steht für „Random Access Memory“ – sozusagen „Speicher mit zufälligem/beliebigem Zugriff“.
Nun hat unser Arbeitsspeicher aber noch zwei Zusätze! Er nennt sich schließlich SDRAM. „Synchronous Dynamic RAM“: Synchronous bedeutet, dass der Speicher synchron zum Taktsignal arbeitet. Dynamic, dass er seine Daten nicht lange speichern kann und immer wieder „aufgefrischt“ werden muss! - Er leidet sozusagen unter Inkontinenz … dazu später aber mehr.
Fassen wir also zusammen! Unser Arbeitsspeicher arbeitet synchron zum Taktsignal, muss immer wieder aufgefrischt werden und der Speicherzugriff kann an beliebiger Stelle erfolgen!
Aktuelle Typen wären:
SDR-SDRAM:
168 Pins, zwei Kerben und von der JEDEC mit PC100 und PC133 spezifiziert. PC150 und PC166 sind nicht(!) von JEDEC standardisiert, sondern nur von dem jeweiligen Hersteller freigegeben.
DDR-SDRAM:
184 Pins, eine Kerbe und von der JEDEC mit DDR200, DDR266, DDR333 und DDR400 freigegeben. Wobei es hier nochmals die Unterscheidung zwischen A und B gibt, was aber lediglich die Latenzen beschreibt.
>> Der DRAM-Chip (Aufbau und Funktionsweise):
Etwas weiter oben habe ich geschrieben, dass unser Speicher auf Basis von Synchronous-DRAM arbeitet – nur was sind DRAMs?
DRAMs sind die kleinen schwarzen Chips auf den Riegeln – in ihnen wird alles gespeichert.
Bis einschließlich DDR-SDRAM sind die DRAMs im sog. TSOP-Gehäuse (Thin Small Outline Package) auf den Trägerplatinen verlötet. Manche neueren und schnelleren Module sind auch schon mit FBGA-Chips aufgebaut! „Fine Pitch Ball Grid Array“ sollte eigentlich erst in DDR2-Modulen zum Einsatz kommen. MDT bietet z.B. schon DDR400 und DDR500 Module mit FBGA-Chips an. Sie haben kürzere Signalwege und werden nicht so warm, wie bisherige TSOP-Chips.
Gehen wir noch etwas tiefer und schauen uns an, wie ein DRAM aufgebaut ist…
>> Organisation ist alles!
Da ihr nun sicherlich schon einen eurer Riegel ausgebaut habt, um euch von der technischen und optischen Anmut des TSOP-Gehäuses zu überzeugen könnt ihr auch gleich die DRAM-Chips auf eurem Speichermodul zählen.
Ihr werdet _immer_ auf 4, 8, oder 16 Chips kommen (JEDEC lässt grüßen )! Nur, warum ist das so?
Egal ob SDR-SDRAM, oder DDR2-SDRAM, der Speicher hat seit jeher eine 64Bit breite Datenleitung, die sich alle auf dem Riegel sitzenden DRAM-Chips teilen müssen!
Wenn ihr also insgesamt 8 Chips auf eurem Riegel gezählt habt (eine Dose Mitleid an die Leute mit Heatspreader ), stehen jedem einzelnen DRAM-Chip bis zu 8 Datenleitungen zur Verfügung!
(8 Chips mit jeweils 8 Datenleitungen = 64Bit Datenbreite)
Aber was macht der Chip mit den 8 Leitungen?
Ein DRAM-Chip besteht eigentlich nur aus vielen Speicherfeldern, von denen jedes einzelne wenigstens eine Datenleitung haben will!
Stellen wir uns also vor unser Speicherriegel hat 128MByte (etwas veraltert, aber egal) und wir haben 8 SDRAM-Chips auf dem Riegel gezählt, dann hat jeder dieser Riegel eine Kapazität von 128MBit (Achtung! Denkt an MBit und MByte!).
128MBit * 8 = 128MByte!
Wenn wir nun vom einfachsten Fall ausgehen, benutzt jeder unserer SDRAM-Chips die 8 Datenleitungen, um 8 interne Speicherfelder zu versorgen. Jedes Speicherfeld wäre in diesem Szenario 16MBit groß.
(128MBit / 8 = 16MBit)
„16MBit Speicherfeld“ klingt in meinen Ohren aber noch etwas zu abstrakt – das sollten wir uns nochmal genauer anschauen.
>> „Das ist ein zu weites Feld?“
SpeicherFELDER sind in Wirklichkeit gar keine Felder, sondern Matrizen! Eine Speichermatrix besteht (ähnlich einer Tabelle) aus Zeilen (Row) und Spalten (Column). Wenn wir bei dem Vergleich mit der Tabelle bleiben, stellt also jede (Speicher-)Zelle ein Bit dar!
Bei einem 16MBit Speicherfeld müssen wir also über unsere Zeilen und Spalten auf insgesamt 16.777.216 Speicherzellen zugreifen können.
Code:
1MBit = 1024KBit = 1024*1024Bit = 1048576Bit
16MBit = 16*1048576Bit = 16.777.216Bit (bzw. einzelne Speicherzellen)
Code:
4096 Zeilen * 4096 Spalten = 16.777.216
Code:
2^12(Bit breiter Bus) = 4096
(Dieser Umstand wird nachher bei den Latenzen nochmals interessant!)
Weiterhin ist das Verhältnis von Zeilen zu Spalten nicht ganz uninteressant! Bei uns beträgt es 12/12, da wir 2^12 Zeilen und ebenso viele Spalten haben, es gibt aber auch 12/10, 12/9, 13/11,… usw. Dieses Verhältnis, von Zeilen zu Spalten, nennt man „DRAM-Mapping“ … und ledier unterstützt nicht jeder Chipsatz jedes DRAM-Mapping.
>> Einmal 4k-Refresh mit Ketchup und Majo zum Mitnehmen, bitte!
Ihr habt euch sicherlich schon gefragt, warum ich bei der Einteilung des Speicherfeldes, sofort auf 4096 Zeilen gekommen bin?!
Das ist recht simpel! Wie wir etwas weiter oben erfahren haben, ist unser lieber SDRAM ziemlich vergesslich! Er muss – genau genommen – alle 64ms aufgefrischt werden. Dieses auffrischen nennt man „Refresh“ und die ganze Prozedur ist der „Refresh-Cycle“. Bei 4096 Zeilen bleiben uns für jede einzelne Zeile also gerademal 15,6us! (64.000us / 4096)
Bei 4096 Zeilen spricht man auch vom „4K Refresh“.
Ab 256MByte-Speicherriegeln muss das Taktsignal aber etwas erhöht werden, da man hier den „8K Refresh“ eingeführt hat – also 8192 Zeilen in 64ms.
Wir kennen nun also die prinzipielle Organisation von Arbeitsspeicher:
Auf jedem Riegel sind 4, 8, oder 16 DRAM-Chips, welche intern wiederum in eine bestimmte Anzahl von Speichefeldern aufgeteilt sind, in denen die Daten gespeichert werden (Speicherzelle).
Im Zusammenhang mit der Organisation der einzelnen Chips und Felder gibt es allerdings noch ein paar Besodnerheiten, die wir uns näher anschauen müssen! - Ihr freut euch bestimmt mindestens sosehr, wie ich.
Ich knalle euch jetzt einfach mal drei Begriffe vor den Kopf und versuche Sie dann im Laufe der nächsten Zeilen zu erklären …
„Single Sided, Double Sided“, „Single Rank, Dual Rank“, „Speicherbänke“ … ok, dann mal los!
Beim Lese-/Schreibzugriff auf die DRAM-Chips haben wir ein kleines Problem! Wir können nämlich nicht ohne Weiteres aus mehreren Feldern gleichzeitig lesen bzw. schreiben! Um diesen „Schönheitsfehler“ zu umgehen, benutzt man Speicherbänke! Üblicherweise werden die einzelnen Speicherfelder der DRAM-Chips auf dem Riegel zu 2, 4, oder 8 Speicherbänken „verdrahtet“. Auf diese Speicherbänke kann dann (fast) gleichzeitig und unabhängig voneinander zugegriffen werden! (Auch dieser Umstand wird uns später noch bei den Latenzen zu schaffen machen – ich sag’ nur „Bank Interleaving“)
Nun zu einer etwas verzwickteren Sache: Single Rank und Dual Rank!
Um möglichst viel Speicherplatz auf einen Riegel zu bekommen, gibt es die Möglichkeit quasi zwei physikalisch getrennte Speicherriegel auf ein einziges PCB zu setzen! Von aussen absolut identisch mit einem „normalen“ Single Rank-Speicherriegel, werden Dual Rank-Riegel vom Chipsatz wie 2 getrennte Speicherriegel angesprochen! Dummerweise kann man es von aussen praktisch nicht feststellen, ob man nun einen „Dual Rank“ oder einen „Single Rank“ vor sich auf dem Tisch liegen hat! Das ganze hat übrigens _nichts_ mit „Single Sided“ oder „Double Sided“ zutun – das beschreibt lediglich die Anordnung der DRAM-Chips auf dem PCB – ob er nämlich beidseitig oder nur einseitig bestückt ist.
Das Dumme an einem Riegel mit zwei Ranks ist, dass er den Speichercontroller elektrisch fast genauso belastet, wie zwei einzelne Riegel! Wenn man z.B. 4 Steckplätze für RAM auf dem Mainboard hat, aber in jedem Speicherkanal bereits einen Dual Rank Riegel sitzen hat, kann man seinen Speicher nicht weiter ausbauen, da man eigentlich schon 4 Speicherriegel – also pro Kanal 2 – verbaut hat!
original PDF von MDT
original PDF von Samsung
Anhand dieser beiden Tabellen - einmal von MDT und einmal von Samsung - kann man ziemlich gut die wesentliche Organisation von einem Modul erkennen.
Ich gehe mit euch mal beispielhaft die Tabelle von Samsung durch (von links nach rechts... wie auch sonst?! )
Organisation (Org.):
128M x 64 => Wir haben insgesamt 64 Speicherfelder á 128Mbit.
Code:
128MBit / 8 = 16MByte => 16MByte * 64 = 1024MByte
Composition:
64M x 8 * 16pcs => Auf dem PCB sind insgesamt 16 Chips, von denen jeder 8 Speicherfelder á 64MBit hat!
Code:
64MBit * 8 / 8 = 64MByte => 16 * 64MByte = 1024MByte
Internal Banks:
4 => Intern sind die Speicherfelder der 16 Chips zu 4 Speicherbänken verdrahtet.
External Banks:
2 => Heisst nichts anderes, als dass es ein "Dual Rank" Modul ist!
Feature:
DS => "Double Sided", auf beiden Seiten des PCBs sind also DRAM-Chips verteilt - erkennt man eigentlich schon an der Anzahl der Chips... Schonmal versucht 16 DRAMs auf eine Seite zu quetschen?!
Diese ganzen Abläufe innerhalb des Speichers, müssen ja irgendwie gesteuert werden – dafür gibt es einige Signale…
>> Herr des DRAM!
Um die Signalwege des DRAM besser zu verstehen, ist es ganz hilfreich, wenn man eine grobe Vorstellung davon hat, was überhaupt ein Signal ist!
Die meisten von euch denken jetzt sicherlich an so Sprüche, wie „5V sind logisch 1 und 0V sind logisch 0!“ … das ist für Kinder in der Grundschule vielleicht ausreichend – wir brauchen aber _etwas_ mehr! Also denn…
Neulich im Luxx (falsch):
Luxx-Newbie I schrieb:„Und? Wie hoch hast du deinen RAM bekommen? Wie schnell isser?“
Neulich im Luxx (besser):Luxx-Newbie II schrieb:„Nuja, ging ganz gut, hab ihn auf 280MHz bei 3,2V geprügelt! :P“
Luxx-Newbie I schrieb:„Und? Wie hoch hast du deinen Referenztakt für den RAM bekommen? Auf welchen Takt reagiert er noch?“
Unterschied klar geworden?Luxx-Newbie II schrieb:„Nuja, ging ganz gut, konnte den Referenztakt auf 280MHz heben, dann braucht der RAM aber 3,2V um noch mitzukommen!“
Im Grunde genommen ist es recht simpel:
Wenn ihr euch euren RAM anschaut, werdet ihr ausser den schwarzen DRAM-Chips auf dem PCB nichts Besonderes mehr finden - also keinen "Taktgenerator" o.ä.
Der RAM reagiert also lediglich auf den Referenztakt des Speichercontrollers - egal, ob dieser nun in der Northbridge, oder in der CPU selbst sitzt.
Es gibt also einmal ein Datensignal, welches an den Datenpins des Speichers anliegt und den Referenztakt, der steuert, wann was "gemacht" wird.
Das folgende Bild zeigt exemplarisch ein Taktsignal. Heutiger DDR-SDRAM kann ein Datenwort sowohl auf der steigenden, als auch auf der fallenden Taktflanke senden - daher auch die Bezeichnung: "Double Data Rate"
Wenn ihr nun im BIOS z.B. eine Latenz (egal welche) von 3T einstellt, bedeutet das nichts anderes, als das die Latenz drei Taktperioden dauert!
[ Freitag Nacht 03:19: Zweiter Teil wird morgen editiert ... bin zu müde ]
MFG
jpk
Zuletzt bearbeitet: