Estou trabalhando com um sistema de arquivos paralelo remoto (CephFS), montado em /mnt/mycephfs/
, que contém um grande conjunto de dados de arquivos pequenos (200 GB+). Meu aplicativo treina nesses arquivos, mas a leitura direta deles /mnt/mycephfs/
é lenta devido à contenção do sistema de arquivos paralelo e à latência da rede.
Estou procurando uma solução baseada em FUSE que possa: 1. Obter uma lista de arquivos necessários para o aplicativo. 2. Pré-buscar e armazenar em cache esses arquivos em um ponto de montagem local (por exemplo, /mnt/prefetched/
) sem replicar todo o armazenamento remoto (já que minha RAM local e espaço em disco são limitados).
O comportamento desejado: • Se um arquivo (por exemplo, /mnt/mycephfs/file
) já estiver armazenado em cache em /mnt/prefetched/file
, ele deverá ser servido a partir do cache. • Se não estiver armazenado em cache, a solução deverá buscar o arquivo (junto com outros arquivos da lista de pré-busca), armazená-lo em cache em /mnt/prefetched/
e, então, servi-lo a partir daí.
Existem ferramentas ou estruturas que suportam esse tipo de cache seletivo e pré-busca usando o FUSE?
Não acho que você precise de nenhum FUSE para isso (e, de qualquer forma, o FUSE não é muito propício para operações de alto desempenho).
Em vez disso, basta montar seu armazenamento Ceph em /a, copie os caminhos que você sabe que precisará para um diretório local /b e use o OverlayFS, com /a como armazenamento de apoio e b/ como camada superior.
As leituras irão para a/ somente se o arquivo não estiver presente em b/.
Mas antes de fazer isso, eu verificaria se apenas usar sua montagem Ceph normal e ler todos os arquivos relevantes (mas não copiá-los para lugar nenhum, por exemplo, apenas fazer
cat /a/filename > /dev/null
) é suficiente para fazer o kernel armazenar seu conteúdo em buffer na RAM, de forma transparente.