El problema fundamental que abordan los sistemas de archivos modernos, especialmente aquellos con arquitecturas Copy-on-Write (CoW) como ZFS, Btrfs y bcachefs, es la necesidad de combinar durabilidad, integridad de datos y características avanzadas (como snapshots y clones) con un rendimiento predecible bajo cargas de trabajo complejas y en entornos de múltiples dispositivos. Los benchmarks tradicionales a menudo se centran en métricas de rendimiento básicas (IOPS, MiB/s) en escenarios ideales, omitiendo el comportamiento crítico del sistema bajo estrés, como la contención de bloqueos, la fragmentación CoW, la recuperación de fallos y la degradación del rendimiento cerca de la capacidad máxima. Este estudio busca cerrar esa brecha, proporcionando una evaluación empírica que refleja los desafíos operacionales en sistemas distribuidos a escala.

La relevancia actual de esta evaluación radica en la creciente adopción de sistemas de archivos CoW en infraestructuras de nube y entornos de contenedores, donde la gestión eficiente de datos, la resiliencia y la capacidad de recuperación son primordiales. La capacidad de crear snapshots instantáneos para copias de seguridad o entornos de desarrollo, o la eficiencia de los clones reflink para la gestión de imágenes de contenedores, son características clave. Sin embargo, estas ventajas pueden venir con costos de rendimiento no triviales, especialmente en latencia de fsync o rendimiento de escritura bajo contención o alta utilización, que este benchmark explora sistemáticamente.

Arquitectura del Sistema

El benchmark evalúa la arquitectura de varios sistemas de archivos, tanto tradicionales como CoW, en configuraciones de disco único, RAID10 (espejo) y RAID6/RAIDZ (paridad). Los sistemas de archivos CoW (ZFS, Btrfs, bcachefs) se caracterizan por su enfoque transaccional, donde las escrituras nunca sobrescriben datos existentes sino que se escriben en nuevos bloques, actualizando los metadatos para apuntar a las nuevas ubicaciones. Esto facilita la creación de snapshots eficientes (copias de solo metadatos) y la protección de datos mediante checksums de extremo a extremo.

ZFS utiliza un Transaction Group (TXG) para agrupar escrituras y metadatos, garantizando la consistencia transaccional. Sus pools de almacenamiento y vdevs permiten configuraciones complejas de RAIDZ (paridad) y espejos, con checksums en cada bloque. Btrfs emplea un árbol B+ para metadatos y datos, con un enfoque similar de CoW y checksums, y soporta RAID nativo. bcachefs, más reciente, también utiliza árboles B+ y CoW, con un diseño optimizado para rendimiento y características como caching y erasure coding. En contraste, ext4 y XFS son sistemas de archivos basados en journaling que operan sobre dispositivos de bloque subyacentes, a menudo gestionados por mdadm (RAID de software) o LVM (Logical Volume Manager) para redundancia. La interacción entre el sistema de archivos y la capa de RAID/LVM es crucial, ya que las operaciones de redundancia (como la reconstrucción) se manejan a un nivel inferior, sin conocimiento de la estructura lógica del sistema de archivos. La prueba de corrupción, por ejemplo, revela cómo los checksums de extremo a extremo de ZFS/Btrfs/bcachefs permiten la detección y reparación de corrupción, mientras que md/lvm solo puede contar inconsistencias sin un mecanismo de reparación intrínseco a menos que se use dm-integrity.

Flujo de Corrupción y Recuperación de Datos

  1. 1 Inyección de Corrupción Se sobrescribe un rango de 2 GiB con datos aleatorios en un dispositivo miembro.
  2. 2 Purga de Caché Se elimina la caché de páginas de Linux (y se exportan/importan pools ZFS) pa...
  3. 3 Ejecución de Scrub Se inicia un proceso de 'scrub' (btrfs scrub, zpool scrub, bcachefs scrub, md...
  4. 4 Verificación de Integridad Se compara el hash MD5 de un archivo de prueba (read.dat) antes y después del...
  5. 5 Reporte de Resultado SURVIVED (archivo intacto), FAIL (archivo modificado/ilegible) o UNPROVEN (si...

Flujo de Pruebas de Latencia de Operaciones Triviales bajo Carga

  1. 1 Inicio de Carga de Escritura Un trabajo de fio inunda el sistema de archivos con escrituras secuenciales d...
  2. 2 Ejecución de Operación Trivial Un segundo trabajo realiza una escritura de 4k + fsync cada 200ms.
  3. 3 Medición de Latencia Se registra la latencia p99 y p99.9 de las operaciones triviales de fsync.
  4. 4 Conteo de Operaciones Completadas Se cuenta el número total de operaciones triviales completadas en 30s.
  5. 5 Identificación de Peor Caso Se registra la latencia máxima observada para una operación trivial.
CapaTecnologíaJustificación
storage ZFS Sistema de archivos CoW con gestión de volúmenes, checksums de extremo a extremo, snapshots y RAID nativo (RAIDZ, mirror). vs Btrfs, bcachefs, ext4/XFS sobre md/lvm Configuraciones de mirror y RAIDZ1/RAIDZ2, con y sin cifrado, y con diferentes tamaños de bloque (8k).
storage Btrfs Sistema de archivos CoW con snapshots, compresión, RAID nativo (RAID1, RAID6) y checksums. vs ZFS, bcachefs, ext4/XFS sobre md/lvm Configuraciones de RAID1 y RAID6 con metadatos RAID1C3, con y sin cifrado LUKS.
storage bcachefs Sistema de archivos CoW moderno con caching, erasure coding, snapshots y optimizaciones de rendimiento. vs ZFS, Btrfs, ext4/XFS sobre md/lvm Configuraciones de replicas=2 y erasure coding (EC), con y sin cifrado.
storage ext4 Sistema de archivos journaled tradicional, utilizado como línea base sobre RAID de software (mdadm, LVM). vs XFS Configuraciones de disco único, md-raid10, lvm-raid10, md-raid6, con y sin cifrado LUKS.
storage XFS Sistema de archivos journaled de alto rendimiento, utilizado como línea base sobre RAID de software (mdadm, LVM) o ZVOL. vs ext4 Configuraciones de disco único, md-raid10, lvm-raid10, y sobre ZVOL (ZFS volume).
orchestration mdadm Gestión de RAID de software para ext4 y XFS, proporcionando redundancia a nivel de bloque. vs LVM Configuraciones RAID10 y RAID6.
orchestration LVM Gestión de volúmenes lógicos para ext4 y XFS, permitiendo flexibilidad en la asignación de almacenamiento y snapshots a nivel de bloque. vs mdadm Configuraciones RAID10 y snapshots de LVM.
observability fio Herramienta de benchmarking de I/O para generar cargas de trabajo y medir rendimiento (IOPS, MiB/s, latencia). vs iostat, dd Diversas configuraciones para escrituras/lecturas secuenciales/aleatorias, tamaños de bloque (4k, 1M), concurrencia (1, 4 hilos) y políticas de sincronización (fdatasync, fsync).

Fundamentos Teóricos

El concepto de Copy-on-Write (CoW) tiene sus raíces en sistemas operativos y bases de datos, siendo una técnica fundamental para la gestión eficiente de memoria y almacenamiento. Su aplicación en sistemas de archivos modernos se alinea con principios de inmutabilidad y consistencia transaccional, que fueron explorados en papers seminales sobre sistemas de archivos journaled y bases de datos. Por ejemplo, el diseño de ZFS se inspira en gran medida en los principios de los sistemas de archivos transaccionales y la gestión de almacenamiento por bloques, buscando garantizar la integridad de los datos a través de checksums y la atomicidad de las operaciones mediante Transaction Groups (TXG). Esto se relaciona con el trabajo de Jim Gray sobre la consistencia transaccional en bases de datos distribuidas. La gestión de snapshots y la eficiencia de los clones reflink también se basan en técnicas de árboles de versiones y estructuras de datos persistentes, donde las modificaciones crean nuevas versiones sin alterar las antiguas. La fragmentación CoW, un desafío recurrente, es una manifestación del trade-off entre la inmutabilidad de los bloques y la eficiencia de acceso, un problema estudiado en la optimización de estructuras de datos en disco como los LSM-trees (Log-Structured Merge-trees) que también enfrentan desafíos de compactación y fragmentación lógica.