¿Cómo funciona la recolección de basura SSD?

4

Corríjame si me equivoco, pero ¿no varía el mapa de bits de bloque (que realiza un seguimiento de los bloques libres en una unidad de disco) para diferentes sistemas de archivos (tanto en ubicación como en estructura)? Entonces, ¿cómo puede OCZ tener un algoritmo genérico para la recolección de basura sin considerar el sistema de archivos utilizado?

skryl
fuente

Respuestas:

8

Los SSD tienen más bloques más allá de lo que indicaría la capacidad indicada. Estos bloques se usan como parte del proceso de nivelación del desgaste, así como también reemplazos de fallas, ya que los bloques se desgastan por completo. Debido a esto, el controlador de la SSD debe realizar un seguimiento de los bloques que ve que se presentan actualmente al sistema y qué bloques lógicos.

En ausencia de TRIM, cuando llega una escritura para un bloque sucio (uno que ya tiene datos en lo que respecta al SSD) ocurre una de dos cosas:

  1. El controlador lee el bloque antiguo en la memoria local.
  2. El controlador modifica los bits necesarios.
  3. El controlador reescribe todo el bloque en el bloque anterior

Sin embargo, debido al nivel de desgaste, es más probable que esto:

  1. El controlador lee el bloque antiguo en la memoria local.
  2. El controlador modifica los bits necesarios.
  3. El controlador escribe el bloque completo en un bloque nuevo en la parte reservada
  4. El controlador actualiza su asignación lógica para el nuevo bloque lógico: par de bloque físico.
  5. El controlador marca el bloque antiguo como parte de la reserva.

La clave aquí es que el controlador SSD también mantiene un mapa de bits de bloques. A diferencia de un mapa de bits del sistema de archivos, hace coincidir los bloques lógicos con los bloques físicos, y eso puede cambiar cada vez que ocurre una escritura.

SysAdmin1138
fuente
Tenía curiosidad por las rutinas de GC y cuándo entraron en acción, pero esto lo explica bastante bien. Después de que el controlador marca los bloques como Reserva / Sucio, todo lo que el GC tiene que hacer es correr durante los ciclos de inactividad y poner a cero estos bloques. Por lo tanto, la unidad se basa en la memoria flash sobreaprovisionada para escrituras inmediatas y realiza la limpieza más tarde.
skryl
2

Por sobreaprovisionamiento. OCZ agrega, por ejemplo, un 7% más de flash de lo que necesita la unidad. Este 7% se usa para nivelar el desgaste y reemplazar los bloques defectuosos, pero también puede borrarse durante el tiempo de inactividad evitando el ciclo de borrado-escritura en el que de otro modo incurriría.

Erik
fuente
TRIM también entra en juego con SSD GC (si el hardware y el software lo admiten). Permite que el sistema operativo le diga a la unidad qué bits utilizan (ya no) los sistemas de archivos / volúmenes.
Chris Johnsen
Sí, pero ese no sería un algoritmo genérico.
Erik
3
Incluso con el sobreaprovisionamiento, llegará un punto en el que toda la memoria disponible de la unidad se ha escrito al menos una vez. Después de este punto, ¿cómo puede la unidad determinar qué bloques están bien para borrar durante el ciclo GC?
skryl