FamFS, o sistema de arquivos projetado para ambientes com memória conectada via fabric (Fabric-Attached Memory), especialmente com uso de dispositivos CXL (Compute Express Link), acaba de receber uma nova versão que funciona em espaço de usuário via FUSE.
O projeto, liderado por engenheiros da Micron, foi inicialmente criado como um sistema de arquivos no kernel. No entanto, após discussões na conferência LSFMM 2024, a comunidade decidiu que o melhor caminho seria reimplementá-lo como um driver FUSE. O resultado é um conjunto de patches RFC (request for comments) publicado por John Groves, já funcional no Linux 6.14.
Por que o FamFS é especial?
O FamFS expõe a memória compartilhada como se fosse um sistema de arquivos tradicional. Ele se conecta a dispositivos devdax
(Device-DAX), que permitem acesso direto à memória, e fornece arquivos que podem ser mapeados diretamente (via mmap) para o espaço de memória, sem passar pelo cache de páginas (page cache
) do Linux.
A principal diferença do FamFS em relação aos sistemas convencionais em modo fs-dax
é sua abordagem para metadados. Ele mantém os metadados sempre limpos e sincronizados, evitando armazená-los de forma suja em cache, o que é crucial para ambientes compartilhados.
Além disso, o FamFS é o primeiro sistema de arquivos fs-dax
baseado em devdax
, ao invés de usar memória persistente (pmem
), o que requer ajustes específicos como os dev_dax_iomap fixups
.
FUSE: maior portabilidade com desempenho mantido
A nova implementação usa o FUSE (Filesystem in Userspace), que permite desenvolver sistemas de arquivos em espaço de usuário. Embora normalmente isso implique em alguma perda de desempenho, o FamFS contorna isso ao manter todo o mapeamento dos arquivos na memória do kernel.
Duas novas mensagens foram introduzidas na comunicação entre cliente e servidor FUSE para isso: GET_FMAP
e GET_DAXDEV
. Elas permitem mapear previamente os arquivos e identificar os dispositivos de memória utilizados, evitando chamadas extras (upcalls) durante o uso.
Esses mapas (fmaps
) são usados para que operações de leitura, escrita e mmap sejam resolvidas diretamente pelo kernel, sem precisar retornar ao processo FUSE, garantindo desempenho muito próximo da implementação no kernel.
Considerações e desafios atuais
Apesar da transição bem-sucedida para FUSE, o projeto ainda precisa de alguns ajustes antes de ser aceito oficialmente no kernel. Um dos principais desafios é o chamado “problema das páginas envenenadas” (poisoned page/folio
), relacionado à forma como a memória é manipulada por dispositivos devdax
.
Além disso, o FamFS exige privilégios de root para montagem, já que ele interage diretamente com dispositivos de memória, e não com blocos de armazenamento.
O projeto continua sendo desenvolvido abertamente e pode ser acompanhado no GitHub da Micron, onde também estão disponíveis ferramentas de teste e exemplos de uso.
Conclusão
A migração do FamFS para o FUSE representa um passo importante na evolução dos sistemas de arquivos para memória conectada via fabric, especialmente com a popularização do CXL. A abordagem focada em alto desempenho e metadados compartilháveis o torna ideal para data centers modernos e aplicações de alta performance que exigem acesso direto à memória.