Rosenblum y Ousterhout introdujeron los sistemas de archivos estructurados por registros a principios de los 90 para abordar los siguientes problemas.
- Crecientes memorias del sistema:
con el aumento del tamaño de los discos, la cantidad de datos que se pueden almacenar en caché también aumenta. Dado que las lecturas son atendidas por la memoria caché, el rendimiento del sistema de archivos comienza a depender únicamente de su rendimiento de escritura. - El rendimiento de E/S secuencial triunfa sobre el rendimiento de E/S aleatoria:
a lo largo de los años, el ancho de banda para acceder a los bits del disco duro ha aumentado porque se pueden acomodar más bits en la misma área. Sin embargo, es físicamente difícil para los pequeños rotores mover el disco más rápidamente. Por lo tanto, el acceso secuencial puede mejorar significativamente el rendimiento del disco. - Ineficiencia de los sistemas de archivos existentes:
los sistemas de archivos existentes realizan una gran cantidad de escrituras tanto como para crear un nuevo archivo, incluidas escrituras de iNodes, mapas de bits y bloques de datos y actualizaciones posteriores. Las búsquedas cortas y los retrasos rotacionales en los que se incurre reducen el ancho de banda. - Los sistemas de archivos no son conscientes de RAID:
además, los sistemas de archivos no tienen ningún mecanismo para contrarrestar el problema de escritura pequeña en RAID-4 y RAID-5.
Aunque las velocidades de los procesadores y los tamaños de la memoria principal han aumentado a un ritmo exponencial, los costos de acceso al disco han evolucionado mucho más lentamente. Esto requiere un sistema de archivos que se centre en el rendimiento de escritura, haga uso del ancho de banda secuencial y funcione de manera eficiente tanto en las escrituras de disco como en las actualizaciones de metadatos. Aquí es donde se arraiga la motivación del sistema de archivos estructurado por registro (LFS).
Si bien es imposible realizar todas las lecturas secuencialmente (ya que se puede acceder a cualquier archivo en cualquier momento), podemos aprovechar la eficiencia de las escrituras secuenciales. LFS mantiene un pequeño búfer de todas las escrituras en un segmento de memoria . Un registro es simplemente una estructura de datos que se escribe solo en la cabecera (se podría pensar en todo el disco como un registro). Una vez que el registro está lleno, se escribe en una parte no utilizada del disco de manera secuencial. Los nuevos datos y metadatos (iNodes, directorios) se acumulan en la memoria caché del búfer y se escriben todos a la vez en bloques grandes (como segmentos de 0,5 M o 1 M).
Las siguientes son las estructuras de datos utilizadas en la implementación de LFS.
- INodes:
Al igual que en Unix, los iNodes contienen punteros de bloques físicos a archivos. - Mapa de iNodes:
esta tabla indica la ubicación de cada iNode en el disco. El mapa de iNodes está escrito en el propio segmento. - Resumen del segmento:
Esto mantiene información sobre cada bloque en el segmento. - Tabla de uso de segmentos:
Esto nos dice la cantidad de datos en un bloque.
Escritura secuencial en el disco:
Considere la siguiente figura, que muestra un bloque de datos D escrito en el disco en la ubicación A0. Junto con el bloque de datos está el iNode, que apunta al bloque de datos D. Por lo general, los bloques de datos tienen 4 KB, mientras que los iNodes tienen un tamaño de aproximadamente 128 bytes.
Escritura secuencial eficiente en disco:
Sin embargo, simplemente escribir secuencialmente en un disco no es suficiente para lograr la eficiencia. Para entender el problema, considere que escribimos un bloque de datos D para la dirección A0 en el tiempo T. Ahora, cuando obtengamos el siguiente bloque de datos en el tiempo T+t para escribirlo en A0+1, el disco ya habrá girado. por algunas unidades. Si el tiempo de rotación del disco es , debemos esperar antes de escribir el segundo bloque para que las dos direcciones (A0, A0+1) sean contiguas.
La solución a este problema es simple: en lugar de esperar después de cada dos escrituras consecutivas de bloques de datos, simplemente podemos agrupar algunas de las escrituras consecutivas y almacenarlas temporalmente en un segmento, y luego escribirlas todas juntas en el disco. Entonces, en lugar de esperar a que el disco se reposicione después de cada bloque de datos, esperamos a que se reposicione después de cada x bloques de datos, donde x es la capacidad del segmento. La siguiente figura ilustra este concepto.
and are 4 updates to the same file j, which are written onto the disk at once. This is one of the set of updates buffered into the LFS. is an update to the file k, which written to the disk in the next rotation.
El proceso en pocas palabras:
El proceso de lectura de LFS es el mismo que en los sistemas de archivos de Unix después de encontrar el iNode para el archivo (que se guarda en el mapa de iNodes). El proceso de escritura se puede resumir de la siguiente manera:
- Cada escritura hace que se agreguen nuevos bloques al búfer de segmento actual en la memoria.
- Cuando el segmento está lleno, se escribe en el disco.
LFS también elimina el problema de escritura pequeña antes mencionado en RAID-4 y RAID-5, ya que se escriben segmentos completos en lugar de pequeños bloques de datos.
Desafíos:
uno de los problemas que surgen es que los segmentos en el registro tienden a fragmentarse a medida que los bloques de archivos antiguos se reemplazan por otros nuevos. Dado que LFS produce copias antiguas de los datos dispersos en varios segmentos del disco, estos deben borrarse periódicamente. Para ello, un proceso más limpio “limpia” los segmentos viejos. Este limpiador toma múltiples segmentos no llenos y los compacta, creando un segmento completo, liberando así espacio.
Publicación traducida automáticamente
Artículo escrito por Anannya Uberoi 1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA