Para saber qué es la latencia de la memoria primero hay q ver cómo funciona..

imagen obtenida desde: http://www.legitreviews.com/article.php?aid=53
En primer lugar la ram se organiza en forma de matriz de filas "rows" y columnas "columns", q a su vez se agrupan en bancos "banks".. es decir es una matriz de 3 dimensiones, de filas y columnas dentro de bancos..
Cuando se solicita un dato dentro de la memoria hay q darle la dirección donde se contiene, se hará especificando el banco. Dentro de él la fila, y a su vez la columna dentro de la fila..
Una vez que se llega al principio de la lectura (todo lo q digo es análogo para escritura) se leen los datos en forma de ráfagas "bursts"
Es decir no se lee solo una posición sino ráfagas enteras, para ello se mantiene fija la fila y el banco y se va cambiando de columna para ir avanzando (si se llegase al final de fila, habría q cambiar a la siguiente, si se llegase al final de banco tb. habría q cambiar al siguiente).
Así hasta finalizar la lectura del "burst" de datos q interesa..
EL direccionamiento ser realiza mediante varias señales:
-Señal "ACTIVE": establece un banco de memoria como activo, tiene una duración mínima en ciclos.
Hasta q no concluyan los ciclos mínimos de la señal ACTIVE, no puede lanzarse una señal PRECHARGE para cerrar ese banco.
Hay q tener en cuenta q mientras un banco permanece activo está "bloqueado" para esa lectura/escritura, antes de poder volver a utilizarlo en otra lectura/escritura diferente hay q cerrarlo.
-Señal "RAS": Row Access Strobe, establece una fila dentro de un banco activo como seleccionada, esta señal consume varios ciclos para localizar la fila necesaria.
-Señal "CAS": Column Access Strobe, establece una columna dentro de una fila como seleccionada, esta señal consume varios ciclos para localizar la columna necesaria.
-Señal "PRECHARGE": cierra un banco de memoria activo, dejándolo libre para realizar sobre él otra lectura/escritura (lanzando otra señal ACTIVE con dirección a ese banco), consume un número de ciclos para realizar el cierre.
Pues bien.. las latencias aparecen del siguiente modo:
Se lanza una señal ACTIVE q activa el banco dentro del cual está la posición de memoria, "bloqueando" ese banco para otras lecturas/escrituras. Durará un mínimo de Ax ciclos.
Se lanza una señal RAS para localizar la fila dentro del banco, esta señal tardará Rx ciclos en completarse.
Un vez encontrada la fila, se lanza una señal CAS, esta señal tardará Cx ciclos en completarse..
Una vez completos los ciclos de las señales el dato está disponible en el bus, pero hay q seguir leyendo para completar el número de posiciones q completan el "burst" de datos q se lee
Con lo cual se vuelve a activar una señal CAS para avanzar a la siguiente columna dentro de la fila, y se añade una nueva latencia de Cx ciclos para completar la señal..
Habrá n señales CAS para completar la lectura del "burst" da datos, por tanto la latencia de la señal CAS será n*Cx
Un vez completada la lectura/escritura del "burst" se lanza una señal PRECHARGE para cerrar el banco activo y dejarlo libre para otra lectura/escritura, consumiendo esta señal Px ciclos.
NOTA: si no se hubiesen consumido los ciclos de la señal ACTIVE durante la lectura de las posiciones del "burst", habría q esperar hasta q concluyesen.
NOTA2: mientras esta señal esta activa puede haber señales ACTIVE a otros bancos, con lo cual, solo añade latencia si se quisiese acceder a ese banco en concreto mientras se está cerrando.
La latencia total de la lectura/escritura será del siguiente modo:
Ax>= Rx + n*Cx
T = Rx + n*Cx + Px
Se deduce de lo anterior q el banco debe estar activo un mínimo de tiempo (q podrá ser mayor o igual al tiempo de la lectura del "burst", mayor si el burst no consume los ciclos mínimos de la Señal ACTIVE, igual si los supera)
En la latencia total es "peso" de las distintas señales es diferente..
Se da una señal RAS, por n señales CAS..
La señal ACTIVE puede solaparse temporalmente con las anteriores llegando a no tener ninguna influencia sobre la latencia total
La señal PRECHARGE solo añadirá latencia real si se solicita otra señal ACTIVE sobre el mismo banco mientras sucede la señal PRECHARGE (mientras se está cerrando)
Por tanto se deduce q a la hora de obtener el tiempo total, la señal que más "pesa" es la señal CAS, q es la q suelen dar los fabricantes cuando se consulta las características sobre módulos de memoria.
Por ej. Kingstong DDR400 VALUERAM CL 2,5 --> CL = CAS Latency
Hasta ahora me he referido siempre a las latencias de memoria como los ciclos q tarda en completarse una señal..
Hay q tener en cuenta q una memoria DDR333 tiene 166 millones de ciclos por segundo (166*2=333), en cambio una DDR400 200 millones por segundo.
1/133*10^6 = 7,5 nanoSegs (10^-9)
1/166*10^6 = 6 nanoSegs
1/200*10^6 = 5 nanoSegs
Por tanto si tenemos una memoria con unas duraciones:
ACTIVE: 6
RAS: 3
CAS: 2,5
PRECHARGE: 3
Las latencias para esa Memoria serían:
/**
* NOTA: aquí calculo la suma de todas las señales de forma ideal,
* hay que tener en cuenta que esta suma solo es orientativa.
* Para averiguar la latencia real de una lectura o escritura,
* habría q tener en cuenta las consideraciones anteriores.
* ACTIVE, puede solaparse, y mientras sucede PRECHARGE solo
* habrá latencia si se quiere lazar otra ACTIVE sobe el mismo banco.
*
* Además considero que todos los datos del burst están en la misma fila
* por tanto solo ocurre RAS una vez (pero podría ser necesario cambiar
* de fila dándose la señal RAS m veces (típicamente m<<n)).
*
* Incluso puede ser necesario cambiar de banco, necesitándose señal
* ACTIVE en varios bancos (seguida de PRECHARGE para los mismos)
*/
DDR266(133x2):
ACTIVE____RAS_____nCAS___PRECHARGE
(6*7,5) + (3*7,5) + n(2,5*7,5) + (3+7,5) = 45 + 22,5 + 18,75n + 22,5 = 90 + 18,75n nanoSegs
DDR333(166x2):
(6*6) + (3*6) + n(2,5*6) + (3*6) = 36 + 18 + 15n + 18 = 72 + 15n nanoSegs
DDR400(200x2):
(6*5) + (3*5) + n(2,5*5) + (3*5) = 30 + 15 + 12,5n + 15 = 60 + 12,5n nanoSegs
Así se observa como al subir la frecuencia de la memoria bajan los tiempos de latencia (siempre y cuando las señales tenga la misma duración en ciclos)
Pero en la práctica suele ocurrir (ver si no páginas de fabricantes) q al subir la frecuencia de la memoria aumentan tb. los ciclos de las señales, o al menos el de la señal CAS (q por lo general es el único q indican).. por tanto hay q tener en cuenta la siguiente consideración..
Tengamos dos módulos de memoria:
DDR266(133x2) (ACTIVE6, RAS3, CAS2, PRECHARGE3)
(6*7,5) + (3*7,5) + n(2*7,5) + (3+7,5) = 45 + 22,5 + 15n + 22,5 = 90 + 15n nanoSegs
DDR400(200x2) (ACTIVE6, RAS3, CAS4 PRECHARGE3)
(6*5) + (3*5) + n(4*5) + (3*5) = 30 + 15 + 15n + 15 = 60 + 20n nanoSegs
COMPARACIÓN:
DDR266: 90 + 15n nanoSegs
DDR400: 60 + 20n nanoSegs
90 + 15n < 60 + 20n
90-60 < [20-15]n
30 < 5n
n > 30 / 5
n > 6
Si el "burst" es mayor a 6 columnas la latencia en un módulo DDR266 CAS2 será menor q la latencia en un módulo DDR400 CAS 4 (es un caso un tanto exagerado, pero recordad q los módulos DDR2 alcanzan latencias realmente grandes, y q ya hay módulos DDR con latecias 1,5).. Por tanto no solo importa la frecuencia a la q trabaje un módulo de memoria (rapidez con que se transmiten los datos por el bus y número de ciclos por segundo a los q opera), si no también los tiempos de latencia del módulo..
Más Consideraciones:
Los tiempos latencia no solo aparecen a la hora de la duración de las señales de memoria.
También hay q tener en cuenta la relación entre FSB y Frecuencia de Memoria..
UN POCO DE ARQUITECTURA:
En un placa base "a groso modo" hay varios elementos q se relacionan. Todos ellos lo hacen a través de un elemento q arbitra las comunicaciones, el chipset, este está formado típicamente por dos partes, el Puente Norte y el Puente Sur.
El puente sur Norte regula el trafico de datos entre el Microprocesador, la memoria Ram y el bus AGP, a su vez recoge los datos procedentes del puente sur.
El puente sur regula el tráfico procedente, de los canales IDE, SATA(si lo hubiera), Slots PCI, Puertos (PS2, USB, etc..), y lo dirige hacia el puente norte..

Aquí se ve el esquema de un Chipset SIS748 para microprocesadores AMD Athlon (el esquema sería análogo para casi cualquier otro chipset del mercado, aunq con los nuevos AMD64 el esquema sí sufre variaciones significativas)
El chip SiS748 sería el Puente Norte, y el SiS963L el Puente Sur.
Como se ve en el esquema el MicroProcesador se comunica con el puente norte a través del FSB, y este tiene una frecuencia..
Siguiendo con el caso de micros AMD, tenemos q para Athlons (con núcleos Palomino o ThroughBred) el FSB es de 266 Mhz (aunq han sacado un 2600+ a 333) Para Núcleos Barton hay versiones con 333 y 400
A su vez el Puente norte se comunica con los módulos RAM lo hace con la frecuencia con la q operan, 200, 266, 333, 400, etc..
¿Qué ocurre si el FSB y la frecuencia de la memoria no coinciden?, en este caso, se dice q los buses trabajan de forma asíncrona, y el puente norte debe realizar una sincronización entre ellos. El esfuerzo de sincronización genera una nueva latencia.. (en el peor de los casos el bus de memoria se limita a esperar añadiendo ciclos de espera, al FSB)
Los chipsets actuales, están optimizados para trabajar de forma síncrona, es decir con FSB y frecuencia de memoria iguales, de tal forma q no haya q realizar ninguna sincronización y no se añadan tiempos de latencia..
Por ello, y debido al hecho de que al aumentar la frecuencia de los módulos de memoria, el número de cíclos de las señales tb. tiende a aumentar (salvo q pagues un pastón por módulos buenos), resulta mejor en términos de rendimiento (y de pasta) el tener módulos de memoria q trabajen a la misma frecuencia del FSB del microprocesador y tengan latencias bajas, q tener módulos más rápidos con latencias mayores.
Aquí van un par de ejemplos de lo que digo:
Enlace 1 - Tom´s HardWare (inlgés)
Enlace 2 - Tom´s HardWare (Inglés)
OPTIMIZACIÓN DE TIEMPOS DE LATENCIA:
Al configurar los buses como síncronos para evitar la latencia de sincronización, podemos encontrarnos en el caso de tener nuestros módulos de memoria trabajando por debajo de su velocidad nominal.
Consideremos lo siguiente:
Si tuviesemos un módulo CAS2,5 RAS3 PRECHARGE3 ACTIVE6 2,5-3-3-6
Las duraciones de un cíclo de reloj para cada módulo son:
DDR266: 1/133*10^6 = 7,5nanoSegs
DDR333: 1/166*10^6 = 6nanoSegs
DDR400: 1/200*10^6 = 5nanoSegs
Al tener mayor cantidad de cíclos por segundo, la duración de cada cíclo disminuye.. Se ve claro, ¿no?
Pues bien, si en vez de hablar en términos relativos (cíclos q duran las señales), hablamos en terminos totales (duración en tiempo de las señales), tendríamos:
DDR266: 7,5nS * 2,5-3-3-6 ---> 18,75 - 22,5 - 22,5 - 45
DDR333: 6nS * 2,5-3-3-6 ---> 15 - 18 - 18 - 36
DDR400: 5nS * 2,5-3-3-6 ---> 12,5 - 15 - 15 - 30
Es decir, q para una misma duración en cíclos cuanto más rapida sea la memoria tendrá mayor número de cíclos por unidad de tiempo, y por tanto los cíclos son mas cortos. Asiq su latencia es menor q en un módulo más lento de las mismas características para las señales..
La utilidad de todo esto, es pensar no en términos de cíclos por señal (q es lo q se configura en el BIOS) si no en duración total.. Y de esa forma se puede pensar q si una memoria fuese DDR333 y un micro va a 266. Al configurarlos como síncronos, habría q ponerle a la memoria el número de cíclos q se ajusten a las duraciones en tiempo q admita para las señales..
Y de esta forma se puede ver que:
15/7,5 = 2 (en vez de 2,5)
18/7,5 = 2,4 (en vez de 3)
36/7,5 = 4,8 (en vez de 6)
Asi q si se reduce la velocidad de la memoria para sincronizarla al FSB (cosa q te optimiza el rendimiento), se debe reducir tb. los cíclos de las señales de memoria.. En realidad esto no fuerza la memoria, ya q solo adapta el número de cíclos para q las señales duren la misma cantidad de tiempo (o la más proxima).
CASO PRÁCTICO:
Para terminar, un comentario práctico, sobre cómo se refleja todo esto en el Setup del BIOS en un par de placas base.
He elegido dos placas de diferente marca, con distinto chipset y distinta marca de fabricante del BIOS
Ejemplo1: ASUS A7S333
-Chipset: SiS745
-BIOS: AMI
Manual en PDF Aquí
En la página 59 del Manual (75 del PDF) están comentados los parámetros de duración de las señales:
SDRAM Configuration [User Defined / By SPD]: primero comentar q la memoria lleva información sobre sí misma (dada por el propio fabricante) en ella se detallan los tiempos de las señales asi como su frecuencia de funcionamiento, de tal forma q funcione de forma estable. A estos valores se puede acceder a través del SPD (Serial Presence Detect) si se pone esa opción se dejarán los valores dados por el Fabricante. Mediante User defined se pueden poner valores diferentes (o no)
SDRAM CAS Latency: se refiere a la duración en ciclos de la Señal CAS (dice exactamente q es el retardo entre en comando de lectura (q sucede cdo se ha localizado la fila en la q leer o sea después de una señal RAS), y el momento en q el dato se encuentra disponible en el bus).. Traducido, lo q tarda en localizarse una columna dentro de una fila
SDRAM RAS to CAS Delay: se refiere a la duración en ciclos de una señal RAS (dice exactamente q es el retardo entre una señal ACTIVE y el comando Lectura/escritura, q sucede una vez localizada la fila dentro del banco).. Traducido significa lo q tarda en localizarse una fila dentro de un banco
SDRAM RAS PRECHARGE Time: duración en ciclos de una señal PRECHARGE (dice exactamente q son los ciclos q deben pasar después de realizar una señal PRECHARGE)
SDRAM RAS ACTIVE Time: duración mínima en ciclos de una señal ACTIVE (dice exactamente q son los ciclos q deben pasar tras realizar una señal ACTIVE)
Ejemplo2: Abit NF7 - S
-Chipset: nVidia nForce2
-BIOS: Award
En la página 4-15 del manual (78 del PDF) están comentados los parámetros en esta placa.
Memory timings : [Optimal/Aggressive/Expert] siendo Optimal el equivalente a By SPD, Aggressivve (una configuración q da la palca) y Expert Definidos por el Usuario.
Row-Active-Delay: es la duración de la señal ACTIVE (dice exactamente q es la duración mínima en ciclos desde una señal ACTIVE hasta una señal PRECHARGE al mismo banco)
Row-to-Cas-Delay: es la duración de la señal RAS (dice exactamente q es el periodo entre ACTIVE y comando lectura/escritura, q sucede cuando se localiza la fila).. O sea el tiempo entre ACTIVE y CAS (q es la duración de la señal RAS)
Row-Precharge-Delay: duración de la señal PRECHARGE (dice exactamente q son los ciclos de espera tras una señal PRECHARGE)
CAS Latency Time: duración de la señal CAS (dice exactamente q puedes elegir los ciclos de la latencia CAS dependiendo de las especificaciones de tu memoria)
No hay comentarios:
Publicar un comentario