Reaprendizaje del sistema operativo-05 | Clasificación de la memoria: ¿Cuántas veces la caché L1 es más rápida que la memoria y el SSD?

Tabla de contenido

 

1. ¿Por qué existe una estrategia de calificación de la memoria?

2. Estrategia de calificación de la memoria

2.1 El nivel de memoria

2.2.1 Caché L1

2.2.2 Caché L2

2.2.3 Caché L3

3. Memoria

4. SSD y disco duro

5. Estructura de entrada de caché

6. Prelectura de instrucciones

7. Tasa de aciertos de caché

8. Problema de reemplazo de caché

9. Resumen

10. Preguntas de la entrevista


1. ¿Por qué existe una estrategia de calificación de la memoria?

Quiere descubrir la estrategia de clasificación de la memoria.

En primer lugar, debe averiguar "¿Cómo queremos que se vea el almacenamiento?", Es decir, "¿Cuáles son nuestras necesidades?"

Luego, debe averiguar qué "restricciones de implementación" tienen nuestros requisitos.

En términos de demanda, esperamos que la memoria sea rápida, de tamaño pequeño, grande en espacio, bajo en consumo de energía, buena disipación de calor y no se pierdan datos cuando la energía está apagada. Pero, en realidad, a menudo no cumplimos con todos los requisitos.

A continuación, le damos algunos ejemplos para profundizar su experiencia, como:

  • Si una memoria es pequeña, su espacio de almacenamiento estará restringido.
  • Si la densidad de un componente electrónico de memoria es alta, la disipación de calor será un problema. Debido a que todos los componentes electrónicos generan calor, una CPU con componentes electrónicos muy concentrados requiere un ventilador separado o refrigeración por agua para ayudar a enfriar los componentes electrónicos.
  • Si una memoria está lejos de la CPU, inevitablemente habrá un retraso en el proceso de transmisión, por lo que la velocidad de transmisión también disminuirá.

Es posible que tenga preguntas aquí, porque en la percepción de la mayoría de las personas, la velocidad de la luz es muy rápida y la señal viaja a la velocidad de la luz. Dado que la velocidad de la luz es tan rápida, el retardo de la señal debería ser pequeño. Pero este no es el caso. Por ejemplo, la señal del reloj es una CPU de 1GHz y 1G representa mil millones, por lo que un ciclo de la señal del reloj es de 1/10 mil millones de segundos. La velocidad de la luz es de 3 × 10 elevado al octavo metro cuadrado por segundo, que es de 300 millones de metros por segundo. Entonces, en un ciclo, la luz solo puede viajar 30 centímetros.

¡Mira! Aunque la velocidad de la luz es muy rápida en el mundo macro, en el mundo de las computadoras, la velocidad de la luz no es tan rápida como la percibimos. Entonces, incluso si el componente está un poco más lejos de la CPU, la velocidad de operación disminuirá significativamente.

También puede preguntar, ¿por qué no almacenar la memoria interna en la CPU?

Si hace esto, además de la disipación de calor y el tamaño de todo el circuito, habrá problemas con el servidor y no habrá forma de que el servidor personalice la memoria. En otras palabras, la CPU determina su tamaño de memoria cuando sale de fábrica, si quieres cambiar a una memoria más grande, tienes que cambiar la CPU, y la personalización del ensamblaje es un requisito muy importante para ti, lo cual definitivamente es inaceptable.

Además, al mismo precio, cuanto más rápida es una memoria, mayor suele ser su consumo de energía. Cuanto mayor sea el consumo de energía, mayor será la generación de calor.

Por lo tanto, los requisitos que mencionamos anteriormente no se pueden cumplir por completo a menos que algún día se produzca un avance disruptivo en la tecnología de almacenamiento.

2. Estrategia de calificación de la memoria


Dado que no podemos usar una memoria para resolver todos los requisitos, debemos clasificar los requisitos.

Una solución factible es usar diferentes memorias de acuerdo con la frecuencia de uso de los datos : cuanto más rápida sea la lectura y escritura de los datos usados ​​en alta frecuencia, mejor, así que use el material más costoso y colóquelo en la ubicación más cercana a la CPU; cuanto menor es la frecuencia de uso de los datos, más lejos estamos de la CPU, más baratos son los materiales que usamos .

2.1 El nivel de memoria

  1. Registrarse;
  2. L1-Caché ;
  3. L2-Caché ;
  4. L3-Cahce ;
  5. RAM;
  6. Disco duro / SSD.
  7. Registrarse


El registro está al lado de la unidad de control y la unidad de cálculo lógico de la CPU, y el material que utiliza es el más rápido. Como mencionamos anteriormente, cuanto más rápida es la velocidad de la memoria, mayor es el consumo de energía, mayor es la generación de calor y el costo es más caro, por lo que el número no puede ser grande.

El número de registros suele oscilar entre decenas y centenas, y cada registro se puede utilizar para almacenar un determinado byte (byte) de datos. tal como:

  • La mayoría de los registros en una CPU de 32 bits pueden almacenar 4 bytes;
  • La mayoría de los registros en una CPU de 64 bits pueden almacenar 8 bytes.

La velocidad de acceso al registro es muy rápida, por lo general, se requiere completar la lectura y escritura en medio ciclo de reloj de la CPU . Por ejemplo, una instrucción que debe completarse en 4 ciclos, además de leer y escribir registros, también necesita decodificar instrucciones, controlar la ejecución de instrucciones y los cálculos. Si la velocidad del registro es demasiado lenta, es posible que la instrucción no se complete en 4 ciclos.

2.2.1 Caché L1


L1- se almacena en caché en la CPU, comparado con el registro, aunque su ubicación está más alejada del núcleo de la CPU, el costo es menor. Generalmente, el tamaño de L1-Cache varía de decenas de Kb a cientos de Kb, y la velocidad de lectura y escritura es de 2 a 4 ciclos de reloj de CPU.

2.2.2 Caché L2


La caché L2 también está en la CPU, y la ubicación está más lejos del núcleo de la CPU que la caché L1. Su tamaño es mayor que L1-Cache. El tamaño específico depende del modelo de CPU. Hay 2M, más pequeños o más grandes, y la velocidad es de 10-20 ciclos de CPU.

2.2.3 Caché L3


La caché L3 también está en la CPU, y la ubicación está más lejos del núcleo de la CPU que la caché L2. El tamaño suele ser mayor que L2-Cache y la velocidad de lectura y escritura es de 20 a 60 ciclos de CPU. El tamaño de la caché L3 también depende del modelo. Por ejemplo, la CPU i9 tiene 512 KB de caché L1, 2 MB de caché L2 y 16 MB de caché L3.

3. Memoria


El material principal de la memoria es el silicio semiconductor , que se inserta en la placa base para que funcione. Debido a que su ubicación está a cierta distancia de la CPU, debe conectarse a la CPU mediante un bus. Debido a que la memoria tiene un espacio independiente, es más grande y el costo es mucho menor que la memoria mencionada anteriormente. La memoria de algunas computadoras personales hoy en día es de 16G, pero la memoria de algunos servidores puede llegar a varios terabytes. La velocidad de la memoria es de aproximadamente 200 ~ 300 ciclos de CPU.

4. SSD y disco duro


SSD también se llama unidad de estado sólido y su estructura es similar a la memoria, pero su ventaja es que los datos siguen ahí después de un corte de energía. Los datos desaparecen cuando se apagan la memoria, los registros y la caché. La velocidad de lectura y escritura de la memoria es aproximadamente 10 ~ 1000 veces más rápida que la SSD. En el pasado, había una especie de disco físico de lectura y escritura, también lo llamábamos disco duro, su velocidad era aproximadamente 100W más lenta que la memoria. Debido a que su velocidad es demasiado lenta, ha sido reemplazado gradualmente por SSD.

Cuando la CPU necesita algunos datos en la memoria, si hay estos datos en el registro, podemos usarlos directamente; si no hay tales datos en el registro, primero debemos consultar la caché L1; si no está en L1, luego consulte la caché L2; no hay en L2 Compruebe la caché L3 nuevamente; no hay L3, y luego vaya a la memoria para obtenerla.

5. Estructura de entrada de caché


Anteriormente presentamos el almacenamiento y sus características de la estructura jerárquica de la memoria, y luego hay algunas dificultades en el diseño de algoritmos de almacenamiento en caché y estructuras de datos para discutir con usted. Por ejemplo, si la CPU quiere acceder a una dirección de memoria, ¿cómo verificar si los datos están en la caché L1? En otras palabras, ¿cuáles son las estructuras de datos y los algoritmos en la caché?

Independientemente de si se trata de una caché o una memoria, todas son memorias lineales, es decir, los datos se almacenan uno al lado del otro. Si pensamos en la memoria como una tabla con solo 1 columna, entonces la caché es una tabla con múltiples columnas, y cada fila de esta tabla se llama entrada de caché.

Esquema 1 La
caché es esencialmente un almacenamiento de valor-clave, su clave es la dirección de memoria y el valor es el valor en la dirección de memoria en el momento de la caché. Consideremos primero un esquema simple, un diseño de entrada de caché de 2 columnas:

  1. Dirección de memoria
  2. El valor en caché.

Cuando la CPU lee una dirección de memoria, agregamos una entrada. Cuando queremos consultar si los datos de una dirección de memoria no están en la caché L1, podemos recorrer cada entrada para ver si la dirección de memoria en la entrada es la misma que la dirección de memoria consultada. Si son iguales, sacamos el valor en caché en la entrada.

Este método debe atravesar todas las entradas de la caché, por lo que la velocidad de cálculo será muy lenta. En el peor de los casos, el algoritmo debe verificar todas las entradas, por lo que esta no es una solución factible.

Esquema 2
De hecho, muchos esquemas excelentes a menudo se transforman de los esquemas más tontos. Ahora tenemos un esquema, pero este esquema no puede determinar rápidamente en qué fila se almacena en caché una dirección de memoria. Entonces queremos encontrar una mejor manera, veamos una dirección de memoria, podemos saber rápidamente en qué fila está.

Aquí, podemos usar un método matemático. Por ejemplo, hay 1000 direcciones de memoria, pero solo 10 entradas de caché. Los números de las direcciones de memoria son 0, 1, 2, 3, ..., 999 y los números de las entradas de la memoria caché son 0-9. Pensamos en un número de memoria, como 701, y luego lo asignamos matemáticamente a una entrada de caché, como 701 divisible por 10, para obtener la entrada de caché 1.

De esta manera, cada vez que obtenemos una dirección de memoria, podemos determinar rápidamente su entrada de memoria caché; y luego comparar la primera columna de dirección de memoria en la entrada de memoria caché y la dirección de memoria de consulta para determinar si la dirección de memoria existe o está almacenada en caché.

Para ampliarlo, aquí se utiliza un método similar a una tabla hash: la dirección% 10 en realidad constituye una función hash simple .

6. Prelectura de instrucciones


La CPU ejecuta las instrucciones en la memoria secuencialmente, y la CPU ejecuta las instrucciones muy rápido, generalmente de 2 a 6 ciclos de reloj de la CPU; en esta lección, aprendimos la estrategia de clasificación de la memoria y descubrimos que la velocidad de lectura y escritura de la memoria es realmente muy lento, hay alrededor de 200 ~ 300 ciclos de reloj.

Me pregunto si lo encontraste. Esto también crea un problema muy problemático: la CPU en realidad no puede leer las instrucciones de la memoria y ejecutarlas una por una, si se hace esto, se necesitarán de 200 a 300 ciclos de reloj para que se ejecute cada instrucción.

Entonces, ¿cómo lidiar con este problema?

Permítanme decir una cosa más aquí . De hecho, cuando realiza llamadas RPC de desarrollo empresarial , a menudo se encontrará con esta situación. Las llamadas remotas ralentizan la eficiencia de ejecución general. Analicemos juntos las soluciones a este tipo de problema.

Una solución es que la CPU lea previamente docenas o cientos de instrucciones en la memoria en la caché L1-, que tiene una velocidad de lectura y escritura más rápida. Debido a que la velocidad de lectura y escritura de la caché L1- es solo de 2 a 4 relojes. ciclos, puede seguir la velocidad de ejecución de la CPU superior.

Aquí viene otro problema: si los datos y las instrucciones se almacenan en la caché L1, si la caché de datos cubre la caché de instrucciones, tendrá consecuencias muy graves. Por lo tanto, la caché L1 generalmente se divide en dos áreas, una es el área de instrucciones y la otra es el área de datos.

Al mismo tiempo, surge otro problema: la caché L1 está dividida en área de instrucciones y área de datos. ¿Es necesario dividir L2 / L3 de esta manera? De hecho, no es necesario. Debido a L2 y L3, no es necesario ayudar a resolver el problema de la instrucción previa a la lectura.

7. Tasa de aciertos de caché


A continuación, hay un problema importante que resolver. Simplemente sume L1 / L2 / L3, ¿cuál es la tasa de aciertos de la caché?

El llamado hit se refiere a encontrar los datos requeridos en la caché. Lo opuesto al hit es la penetración, también llamada miss, lo que significa que una operación de lectura no encuentra los datos correspondientes de la caché.

Según las estadísticas, la tasa de aciertos de la caché L1 es de aproximadamente el 80% y la tasa de aciertos total de L1 / L2 / L3 es de aproximadamente el 95%. Por lo tanto, el diseño de la caché de la CPU es bastante razonable. Solo el 5% de las lecturas de memoria penetrarán en la memoria y el 95% se podrá leer en la caché. Es por eso que el lenguaje de programación cancela gradualmente la sintaxis que permite a los programadores manipular registros, porque la caché garantiza una alta tasa de aciertos, la optimización redundante es de poca importancia y es fácil cometer errores.

8. Problema de reemplazo de caché


La última pregunta, por ejemplo, ahora la entrada de la caché L1- está llena, y luego la CPU vuelve a leer la memoria, y es necesario almacenar una nueva entrada en la caché L1-. Dado que hay una nueva entrada por ingresar, hay es uno La entrada anterior está saliendo. Por lo tanto, en este momento, necesitamos usar un algoritmo para calcular qué elemento debe reemplazarse. Este problema se denomina problema de reemplazo de caché. Con respecto al tema del reemplazo de la caché, lo discutiré con usted en "21 | Programación de procesos: ¿Cuáles son los métodos para la programación de procesos?"

9. Resumen


En esta lección, hablamos sobre la estrategia de almacenamiento en niveles y discutimos el principio de funcionamiento de la caché L1 / L2 / L3. El contenido aprendido en esta clase es la fuente de todo el conocimiento de la caché. El diseño de todos los sistemas de almacenamiento en caché es una jerarquía de recursos de almacenamiento. Cuando diseñamos la caché, además de la arquitectura general, también debemos prestar atención a detalles, como:

¿Cómo diseñar la entrada?

¿Cómo diseñar el algoritmo?

¿Cómo se cuenta la tasa de aciertos?

¿Cómo reemplazar la caché, etc.?

Ahora hablemos de la pregunta que se planteó antes de salir de clase: ¿cuántas veces la diferencia de velocidad entre SSD, memoria y caché L1?

[Análisis] Debido a que la memoria es de 10 a 1000 veces más rápida que la SSD, la caché L1 es aproximadamente 100 veces más rápida que la memoria. Por lo tanto, L1 Cache es 1000 ~ 100000 veces más rápido que SSD. Entonces, ¿ha descubierto que SSD tiene un gran potencial? Un buen SSD está cerca de la memoria, pero el costo es un poco más alto.

Este problema nos dice que existe una gran brecha de rendimiento entre diferentes memorias, y tiene sentido construir una jerarquía de memoria El propósito de la jerarquía es construir un sistema de caché.

10. Preguntas de la entrevista

P: Suponga que hay una matriz bidimensional con 1M entradas en total. Si queremos atravesar esta matriz bidimensional, ¿deberíamos atravesar fila por fila o columna por columna?

R: La esencia de una matriz bidimensional sigue siendo una matriz unidimensional. Es solo un cálculo de subíndice. Por ejemplo, para una matriz con N filas y M columnas, las coordenadas de la fila y y la columna x son: x + y * M. Por lo tanto, cuando aumentan las coordenadas de la fila, el espacio de memoria salta. Cuando aumentan las coordenadas de la columna, el espacio de memoria es continuo.

Cuando la CPU atraviesa la matriz bidimensional, primero obtendrá datos de la caché de la CPU.

El factor clave es que el diseño actual de la CPU no lee una dirección de memoria a la vez, sino que lee varias direcciones de memoria adyacentes a la vez (velocidad de memoria 200-300 ciclos de CPU, la lectura previa mejora la eficiencia) . Entonces esto equivale al acuerdo entre máquinas y personas, si los programadores no siguen este acuerdo, no podrán aprovechar la pre-lectura .

Por otro lado, cuando la dirección de la memoria de lectura aumenta mucho, se activará el reemplazo de la página de la memoria.

Además, el desplazamiento de datos bidimensionales por fila también se ajusta al principio de localidad del programa.

Preguntas de práctica:

Cómo modificar el orden de los bucles para que escanee una matriz de tres dígitos en un modo de referencia con una longitud de paso de 1.

Respuesta: Modifique el orden del ciclo para que el índice más a la derecha cambie más rápido.

Por ejemplo, 001002003 ... en lugar de 100200300 ... El primero tiene mejor localidad que el segundo, porque se ajusta al principio de prelectura de instrucciones, es decir, la prelectura también se denomina localidad de búsqueda de instrucciones .

 

Supongo que te gusta

Origin blog.csdn.net/MyySophia/article/details/113782517
Recomendado
Clasificación