Sistemas de ficheros para dispositivos embebidos

Post on 18-Dec-2014

418 views 1 download

description

Presentación sobre la tecnología de las memorias Flash (NOR/NAND) y los sistemas de ficheros diseñados para dispositivos embebidos

Transcript of Sistemas de ficheros para dispositivos embebidos

Sistemas de ficheros para dispositivos embebidos

Raúl Fraile

•Memoria Flash

• Características, historia y uso.

• Limitaciones

• Tipos: NOR, NAND

•Wear leveling

• Sistemas de ficheros

• Conceptos básicos

• cramfs, squashfs, romfs, JFFS2 y YAFFS2

• Demo

Contenidos

Memoria Flash

Memoria flash•Sistema de almacenamiento no volátil.

•Evolución de EEPROM (electrically erasable programmable read-only memory).

•EEPROM: Debe ser completamente borrada para poder escribir de nuevo.

•Flash: Se reescribe en bloques/páginas/bytes.

•Hay dos tipos principales: NOR y NAND

Características

Memoria flash

•Inventada por el Dr. Fujio Masuoka mientras trabajaba en Toshiba en 1980.

•En 1988, Intel lanzó el primer chip de memoria Flash (NOR).

Historia

Memoria flashUso

Memoria flash

•La principal limitación de las memorias flash es el número limitado de ciclos program-erase (P/E).

•Un sistema de ficheros que no tenga en cuenta esta limitación puede agotar el número de ciclos rápidamente.

Limitaciones

Memoria flashTipos

NANDNOR

Memoria flashTipo NOR

•Se llama NOR porque su funcionamiento se asemeja al de una puerta lógica NOR.

•Lecturas rápidas (<80 ns), borrados/escrituras lentas (1 s/sector, 9 μs/Word).

•Permite acceso aleatorio (random access, mapeado en memoria).

•Entre 10.000 y 100.000 ciclos de P/E.

•Permite eXecute In Place (XIP).

•Alto coste por MB.

Memoria flashTipo NAND

•Se llama NAND porque su funcionamiento se asemeja al de una puerta lógica NAND.

•Lecturas, borrados y escrituras rápidas (20 μs, 1 ms/sector, 400 μs/page).

•Permite acceso secuencial. Interfaz más compleja y necesidad de implementar un sistema de detección y corrección de errores (EDC/ECC).

•Entre 100.000 y 1.000.000 ciclos de P/E.

•Bajo coste por MB.

Memoria flashSistemas de ficheros

•Debido a las limitaciones en el número de ciclos de P/E de las memorias Flash, es necesario utilizar un controlador que realice wear leveling o un sistema de ficheros diseñado específicamente para este tipo de memoria.

•Los sistemas de archivos convencionales reescriben sus estructuras de datos y metadatos repetidamente en la misma área, haciendo que las celdas contenidas en ese área alcancen el límite de ciclos P/E.

Memoria flashWear leveling (I)

•Sin wear leveling, cada vez que se reescribe un bloque previamente escrito, éste debe ser: leído, borrado, modificado y reescrito en la misma posición.

•Problema principal: algunos bloques muy usados mientras que otros prácticamente sin usar.

Memoria flashWear leveling (II)

•La técnica de wear leveling pretende distribuir los ciclos de P/E proporcionalmente, para alargar la vida de la memoria.

•Utiliza un mapa (Logical Block Addresses) para relacionar los bloques lógicos en el SO con los físicos de la flash. Cada vez que se reescribe un bloque, se hace en una nueva dirección, y se marca en el mapa el anterior bloque como invalid data.

•El static wear leveling, además, va rotando los bloques que no cambian frecuentemente.

Memoria flashWear leveling (III)

Static Dynamic

Tiempo de vida Mayor Menor

Rendimiento Más lento Más rápido

Complejidad Alta Baja

Uso típico SSD Memorias USB

Sistemas de ficheros

Filesystems

•El kernel y el RFS (Root File System) son independientes, aunque el kernel necesita de un RFS al iniciarse.

•initrd/initramfs se utilizan para crear un sistema de ficheros temporal en memoria antes de que el sistema real pueda ser montado.

•Está diseñado para poder utilizar cualquier sistema de ficheros que pueda comunicarse con el virtual file system (VFS).

Linux. Conceptos básicos

Filesystems

•VFS es una capa de abstracción que proporciona un interfaz común. Permite que distintos sistemas de ficheros interaccionen con el sistema de almacenamiento de la misma manera.

•Filesystem in Userspace (FUSE) permite crear sistemas de ficheros que se ejecutan en modo usuario. Por ejemplo, utilizando la API de Amazon S3 es posible crear un filesystem para acceder “localmente” de forma transparente.

Virtual File System

Filesystems

•Los sistemas de ficheros para dispositivos embebidos deben cumplir algunas características:

•Eficiencia (mínimo consumo de energía).

•Optimización del espacio ocupado.

•Si se trata de memoria flash, y hay operaciones de lectura y escritura, deben proveer un sistema de wear leveling.

Dispositivos embebidos

Filesystems•cramfs (compressed ROM file system) es un sistema

de ficheros de solo lectura, normalmente usado en sistemas embebidos o con recursos muy limitados.

•Los archivos se comprimen usando zlib.

•Los metadatos no se comprimen, pero se almacena menos información y de forma más eficiente.

•Ha sido usado para imágenes de initrd e instalaciones.

cramfs (I)

Filesystems

•Limitaciones:

•Sistema de ficheros hasta 256 MB.

•Archivos de hasta 16 MB.

•Máximo 216 archivos.

•Todos los archivos pertenecen a root.

•No se almacenan timestamps (por defecto epoch, 1970 GMT).

cramfs (II)

Filesystems

•Sistema de ficheros de solo lectura, con algunas mejoras respecto a cramfs.

•La versión original utilizaba gzip para la compresión de archivos, directorios e inodes. En la versión 2.6.34 del kernel se añadió soporte para LZMA y LZO, mientras que 2.6.38 lo hizo para LZMA2 (usado por xz).

•Soporte para Extended file attributes desde la versión 2.6.35 del kernel.

SquashFS (I)

Filesystems

•Consigue una mayor compresión con tamaños de bloque ajustables (máximo 1 MB, 128 KB por defecto) y reduciendo el tamaño de los metadatos (8 bytes de media).

•Usado en live CDs en las principales distribuciones, así como recientemente en el dispositivo Chromecast (media player de Google).

SquashFS (II)

Filesystems

•Limitaciones:

•Sistema de ficheros hasta 232 GB.

•Archivos de hasta 2 TB.

•Máximo 232 archivos.

•Todos los archivos pertenecen a root

SquashFS (III)

Filesystems

•Sistema de ficheros de solo lectura extremadamente simple. Utilizado principalmente para initrd o instalaciones.

•El principal objetivo de romfs es tener un kernel muy pequeño, con el sistema de ficheros enlazado y poder cargar cualquier módulo a continuación. Filesystem temporal.

•No utiliza ninguna técnica de compresión de datos.

romfs

Filesystems

•JFFS2 (Journalling Flash File System version 2). Sistema de ficheros de lectura y escritura diseñado específicamente para almacenamiento flash.

•Es un sistema de ficheros log-structured. Los datos y metadatos se escriben en un buffer circular (log).

•No reduce la cantidad de metadatos que almacena. Cumple con POSIX metadata. Usuario, grupo, timestamps... son almacenados.

JFFS2 (I)

Filesystems

•JFFS2 añadió soporte para memorias NAND, no disponible en JFFS.

•Utiliza compresión de datos. Los algoritmos disponibles son zlib, rubin, rtime y lzo.

•Dispone de un garbage collector que marca bloques dirty, como free. También se usa para wear leveling, marcando ocasionalmente como free bloques clean.

JFFS2 (II)

Filesystems

•Limitaciones:

•Sistema de ficheros hasta 232 GB.

•Máximo 232 archivos.

•Montaje lento, ya que tiene que leer todos los nodos antes de montarse.

JFFS2 (III)

Filesystems

•YAFFS2 (Yet Another Flash File System) funciona de forma similar a JFFS2, aunque está diseñado específicamente para memorias NAND.

•A diferencia de JFFS2, no utiliza compresión de datos.

•Compatible con POSIX metadata.

•Utilizado en Android hasta la versión 2.2.

YAFFS2 (I)

Filesystems

•Limitaciones:

•Sistema de ficheros hasta 232 GB.

•Máximo 232 archivos.

•Aunque ha sido utilizado en memorias NOR, no funciona del todo bien.

YAFFS2 (II)

Demo

•Dos directorios:

• test:1.txt, 1.html (113 bytes)

• test2: 1.txt, 1.html, jquery.js y logo.png (324 kb)

•Crear y montar un filesystem con cramfs

•mkcramfs -n testfs test cramfs.test

• hexdump -C cramfs.test

•mkcramfs -n testfs2 test2 cramfs.test2

•Comparar con ls -h el tamaño de ambos filesystems

• sudo mount cramfs.test2 /mnt/cramfs -t cramfs -o loop

•Utilizar el filesystem (ls, cat...). Escritura no permite (touch)

nombre carpeta archivo de salida

loopback dev (acceso por bloques)

•Crear y montar un filesystem con SquashFS

•mksquashfs ./test squashfs.test -noappend -comp lzo -info

• hexdump -C squashfs.test

•Crear test2 con los 3 tipos de compresión y comparar:

•mksquashfs ./test2 squashfs.test2.lzo -noappend -comp lzo -info

•mksquashfs ./test2 squashfs.test2.gzip -noappend -comp gzip -info

•mksquashfs ./test2 squashfs.test2.xz -noappend -comp xz -info

• sudo mount squashfs.test2.xz /mnt/squashfs -t squashfs -o loop

•Utilizar el filesystem (ls, cat...). Escritura no permite (touch)

•Comparar scramfs y SquashFS

carpeta archivo de salida no añadir a existente comp. (lzo, gzip, xz) archivos y % comp.

•Crear y montar un filesystem con romfs

• genromfs -f romfs.test -d ./test

•Comprobar que el tamaño es 1 kb, esto es debido a que debe ser múltiple de 1 kb, por lo que hace un padding a 1 kb si es menor.

• hexdump -C romfs.test (no hay compresión de datos)

• sudo mount romfs.test /mnt/romfs -t romfs -o loop

•Utilizar el filesystem (ls, cat...). Escritura no permite (touch)

•Crear filesystem de test2 y comparar tamaño con cramfs y SquashFS:

• genromfs -f romfs.test2 -d ./test2

¿Preguntas?

Raúl Fraile

@raulfraile