Armazenamento

FamFS é portado para FUSE como sistema de arquivos para memória conectada via CXL

FamFS é portado para FUSE como sistema de arquivos para memória conectada via CXL

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.

Emanuel Negromonte Autor
Autor
Jornalista especialista em Linux a mais de 20 anos. Fundador do SempreUpdate e entusiasta do software livre.