Skrivet av hACmAn:
Om du din cpu vill ha info från rad ditten datten i ram så skickas en förfrågan, data bussen förutsätter att rätt nolla eller etta är på bussen vid en specifik tidpunkt. Om din dator vet att du kör med CMD (commadrate 2 istället för 1) väntar den en viss tid innan den läser av databussen från minnet. Detta läggs på den tid som ditt RAM är hämta datat. Det är lite som ett datablad med rutor. Att hitta rätt beror på CL (CAS) (RAS) och förhållandet mellan dem. 8-8-8 är cas 8, cas to ras 8, och ras 8, det som oftast tar läng tid är CL (CAS). Sen har du refreshen, då minnet behöver aktivera om spänningen så att den inte faller så lågt så att vi inte vet om det var en nolla eller etta. Alla dessa plus en massa till man oftast orkar grotta ner sig i är den totala tiden från att minneskontrollern frågar efter något tills det förväntas finnas som ett svar. Så vi pratar ns då vi pratar cykler på bussen i vissa fall och minnes kontrollern i vissa fall och minnena i vissa fall. Men det är en kedja. Ett helt fel exempel. Jag vill ha ett äpple 2+2+3+45+5=59 om 59ns ska svaret vara tillbaka. Men om det står fel så kanske det läses av om 58ns eller 60ns. har man tur så är det vad som borde vara där men det är tur.
Om vi kollar på gamla Intel platformer som hade FSB så var CMD Command Rate, man kunde välja 1T eller 2T tror att vissa moderkort för t,ex i7-920 hade en 3T Den parametern var fördröjningen från nordbryggan till minnena, den biten sitter i CPU idag. Är det för många adresser att gå igenom måste man höja CMD, tror det går att fula sig med andra timings också men det är överkurs. Så att alla register hinns gå igenom innan minneskontrollen förutsätter att den ska läsa av datat från bussen. Om du har en skadad, minnes kontroller kan du i vissa fall få en stabil dator genom att sänka alla värden så att den räknar rätt och se till så minnena synlar långsamt RICKTIGT långsamt med den så den får god tid på sig. Men det är något jag och minna polare bara testat på trasig hårdvara, kan bara rekommendera att leka så idiotskt då det ändå inte spelar någon roll. Inte så säker jag svarade på din fråga.
En sak som bör nämnas är att normalt sett frågas det inte efter bara en adress i minnet utan start adressen, sen läsar man vidare från minnet då slipper man alla omfrågningar om nästa adress. Det brukar inte synnas i spel på FPS eftersom det är bara då den ska hitta adressen att läsa ifrån som det syns. Så du får samma FPS nästan men lite högre latency. Sen hur känslig man är är individuelt. Placebo eller om man har en massa annan utrystning. Skärm mus tangetbord mm alla bäckar små.
Edit2:
Om minnes kontrollern vet att RAM minnerna kommer ta sej 70ns på sig, men är färdig vid 55ns då kan den stå och vänta 15ns. Den kan ju ändå inte göra något innan den fått ny info.
Edit:
@Aka_The_Barf
Var tänkt till dig men vart mer en uppsats för mig själv.
Det är inte riktigt hur RAM fungerar. DRAM är uppdelat i en rad lager, tyvärr är dessa väldigt sammanflätade...
DIMM/rank
Börjar man på toppen har vi RAM-stickorna, en DIMM. På dessa finns ett elektriskt gränssnitt mot ett gäng RAM-kretsar, typiskt 8 till 16 stycken.
Varje DIMM är separerad i en eller två "ranks". En rank är en grupp av RAM-kretsar där gruppen kretsar parallellkopplas så att de tillsammans bildar en 64-bitar bred databuss.
Två enkel-rank DIMMar är därför ur den här aspekten logiskt ekvivalenta med en dual-rank DIMM. I båda fallen delar ranks på samma data/kommando-buss så måste till en sekvens där minneskontroller väljer en viss rank innan ett kommando utförs.
Bank
Adressrymden är sedan uppdelad i flera banker per rank. Man har flera banker av en rad orsaker, den viktigaste är ökad parallellism, två olika banker kan samtidigt vara aktiva. Är därför möjligt att till viss del "gömma" latens, en läsning startas mot bank N, tar ju minst CAS cykler innan data läggs ut på databussen. Någon cykel senare startas en läsning mot bank M (N!=M), det innan första läsningen börjat leverera data.
Data för dessa två läsningar kommer båda levereras efter CAS cykler (om vi nu antar att båda läser data som redan ligger i "row-buffer", se nedan).
Är faktiskt omöjligt att nå full bandbredd utan denna typ av parallellism. Två läsningar från samma bank sker seriellt, d.v.s. är först när transaktionen är helt klar som nästa läsning påbörjas.
Inte helt på det klara med hur många "banks" dagens minnen typiskt har. Har väldigt ofta sätt illustrationen som visar 8 eller 16 "banks" per "rank", gissar att det kanske är en typiskt siffra.
Rader och kolumner
Minnet är rent fysiskt ordnat som en matris, i rader och kolumner. Kolumner är den lägre dimensionen, d.v.s. data i en kolumn är data som adressmässigt ligger direkt på rad.
Det går inte direkt att läsa data från matrisen, den enda data som direkt kan läsas är den kolumn som ligger i "row buffer" (också kallad "sense amplifier").
CAS
Antal cykler det tar från en läsning startar till dess att data kommer ut på data-bussen är CAS cykler. CAS latensen är det enda som spelar roll för detta.
Men som nämndes ovan, är bara data som redan är del av den aktiva raden (som ligger i "row buffer") som kan läsas/skrivas. Storleken på varje rad varierar, det är i praktiken beroende av storleken på DIMMs. Idag är 8 kB en väldigt vanligt storlek på en rad.
Banks kommer in även här, varje bank har en egen "row-buffer". Så fler banks, vilket ökar med antalet ranks/DIMMs, ökar alltså sannolikheten att det data man vill läsa redan ligger i "row-buffer".
Vilken bank som data ligger i bestäms helt av adressen på data man vill åt. Adressen bestämmer även vilken minneskanal och rank som kommer används. Rätt självklart om tänker lite på det.
RAS
Om data inte ligger i "row-buffer" finns lite olika fall och är här de andra latenssiffrorna kommer in. Är inte jättehemma på detta, men rätt säker att 3:e siffran i timings är antal cykler från att man "stänger" en rad till dess att nästa kan börja öppnas.
Andra siffran, RAS latens, är tiden det tar att läsa ut en rad ur matrisen och lägga den i "row buffer". En rad har sedan typiskt 8192/8/8=128 kolumner (8192 kB per rad och 8 byte, 64-bitar, är antal bytes som varje buss-överföring levererar samt en "burst-längd" på 8 transfers/4 cykler).
Så tre huvudfall för att utföra en minnestransaktion
data ligger redan i "row-buffer", tar CAS cykler
"row-buffer" är inaktiv/tom, tar RAS cykler att fylla "row-buffer" och CAS att läsa/skriva data
"row-buffer" är aktiv, tar först RP (RAS precharge, 3:e siffran) att förbereda "row-buffer" för ny data (har man skrivit måste ju data i "row-buffer" först skrivas till matrisen), sedan RAS cykler att läsa raden och slutligen CAS cykler för transaktionen
Har man ett single rank system med två DIMMar (normalt i dual-channel) och 8 "banks" går det alltså (med typisk "row-buffer" storlek för dagens system) upp till 8*128*2=2048 minnestransaktioner där det enda som spelar roll är CAS-latens per transaktion där något annat spelar roll. Detta är t.ex. fallet om man läser/skriver sekventiellt, vid mer slumpmässig läsning blir det naturligtvis en klart mindre siffra.
I praktiken är därför CAS latens, ihop med frekvens, den överlägset viktigaste parametern för RAM. Frekvensen påverkar ju båda bandbredd och faktiskt latens (den mätt i nanosekunder).
Edit: exakt vad "command rate" gör är lite dunkelt i min mening... Vissa pratar om att det är tiden att göra "chip select", gissar att det måste göras varje gång man byter rank/DIMM.
Har också sett någon förklaringen kring att det är tiden mellan två kommandon, så 1T betyder att t.ex. två läsning (mot olika banker) kan utföras cykler efter varandra med 2T betyder att det måste gå en cykel emellan. Då en burst är 4 cykler borde det i så fall spela rätt lite roll om man har 1T eller 2T.
2T ska i alla fall "lätta på trycken" för minnesbussen rent elektriskt, så 2T kanske är vettigt om man har många rank/DIMMs alt. kör med väldigt hög frekvens och hög spänning.