
Estoy creando una capa de corrección sobre un sistema de archivos en memoria (tmpfs) para poder interceptar los comandos del sistema de archivos y realizar un procesamiento adicional (el objetivo final es replicar las escrituras a través de la red para lograr tolerancia a fallas). Para interceptar los comandos del sistema de archivos, estoy usando FUSE. Para el sistema de archivos en memoria, estoy usando tmpfs. Para superar el pequeño tamaño de la memoria, he creado suficiente espacio de intercambio en SSD para que lo use tmpfs.
Para resumir, tengo un directorio dir
montado con tmpfs. Creé otro directorio shim
, en el que escriben todas las aplicaciones. FUSE está montado shim
y redirige todas las operaciones a dir
.
Con algunas microevaluaciones con Filebench escribiendo directamente en dir
, descubrí que tmpfs + swap tiene una latencia súper baja, especialmente en comparación con ext4 en el disco. No hay una desaceleración perceptible cuando tmpfs cambia de escribir en RAM a escribir en espacio de intercambio, supongo que se debe a algunas lecturas anticipadas inteligentes.
Cuando lo superpongo con FUSE conpaso a través_hp.c, sin embargo, incluso con subprocesos múltiples activados, la creación de archivos se vuelve súper lenta, con una latencia 60 veces mayor que tmpfs + swap. Al usar htop
, noté que solo se ralentiza cuando escribe en swap en lugar de en memoria (la memoria se llena muy rápidamente, luego el swap aumenta lentamente). De lo contrario, FUSE tiene muy pocos gastos generales.
¿Alguien sabe por qué FUSE sufre un impacto en la latencia cuando se usa swap y tmpfs por sí solo no, y cómo optimizaría esta sobrecarga adicional?