Alta latência ao usar FUSE para passar para tmpfs + swap

Alta latência ao usar FUSE para passar para tmpfs + swap

Estou criando uma camada de correção em um sistema de arquivos na memória (tmpfs) para poder interceptar os comandos do sistema de arquivos e fazer processamento extra (o objetivo final é replicar as gravações na rede para tolerância a falhas). Para interceptar os comandos do sistema de arquivos, estou usando o FUSE. Para o sistema de arquivos na memória, estou usando tmpfs. Para superar o pequeno tamanho da memória, criei espaço de troca suficiente no SSD para uso do tmpfs.

Para resumir, tenho um diretório dirmontado com tmpfs. Criei outro diretório shim, no qual todos os aplicativos gravam. O FUSE é montado shime redireciona todas as operações para o dir.

Com alguns microbenchmarking com o Filebench gravando diretamente no dir, descobri que tmpfs + swap tem latência super baixa, especialmente quando comparado ao ext4 no disco. Não há desaceleração perceptível quando o tmpfs muda da gravação na RAM para a gravação no espaço de troca, presumo que seja por causa de alguns readaheads inteligentes.

Quando eu sobreponho com FUSE compassagem_hp.c, no entanto, mesmo com o multi-threading ativado, a criação de arquivos se torna muito lenta, com latência 60x maior do que tmpfs + swap. Usando htop, notei que ele só fica mais lento quando grava no swap em vez da memória (a memória enche muito rapidamente e o swap aumenta lentamente). Caso contrário, o próprio FUSE terá pouca sobrecarga.

Alguém sabe por que o FUSE atinge a latência ao usar swap e tmpfs por si só, e como eu otimizaria essa sobrecarga adicional?

informação relacionada