unfs3
está morto até onde eu sei; Ganesha é o projeto de servidor NFS do espaço de usuário mais ativo no momento, embora não esteja completamente maduro.
Embora sirva protocolos diferentes, o Samba é um exemplo de sucesso servidor de arquivos que opera no espaço do usuário.
Eu não vi uma comparação recente de desempenho.
Algumas outras questões:
- Aplicativos comuns procuram arquivos por nome de caminho, mas
nfsd
precisa ser capaz de procure-os pelo filehandle. Isso é complicado e requer suporte do sistema de arquivos (e nem todos os sistemas de arquivos podem suportá-lo). No passado, não era possível fazer isso a partir do userspace, mas kernels mais recentes adicionaramname_to_handle_at(2)
eopen_by_handle_at(2)
chamadas do sistema. - Parece que me lembro de bloquear o bloqueio de chamadas de arquivos sendo um problema; Não tenho certeza como os servidores do userspace lidam com eles hoje em dia. (Você amarra um thread de servidor esperando na fechadura, ou você pesquisa?)
- Semântica do sistema de arquivos mais recente (alterar atributos, delegações, compartilhar bloqueios) pode ser implementado mais facilmente no kernel primeiro (em teoria - eles ainda não foram ainda).
- Você não precisa ter que verificar permissões, cotas, etc., manualmente;
você quer mudar o seu uid e confiar no código vfs do kernel comum para fazer
naquela. E o Linux tem uma chamada de sistema (
setfsuid(2)
) que deveria fazer isso. Para razões que eu esqueci, acho que isso se mostrou mais complicado de usar em servidores do que deveria ser.
Em geral, os pontos strongs de um servidor kernel são uma integração mais próxima com o vfs e o sistema de arquivos exportado. Podemos compensar isso fornecendo mais interfaces de kernel (como as chamadas do sistema filehandle), mas isso não é fácil. Por outro lado, alguns dos sistemas de arquivos que as pessoas querem exportar atualmente (como gluster) na verdade vivem principalmente no espaço do usuário. Aqueles podem ser exportados pelo kernel nfsd usando o FUSE - mas novamente extensões para as interfaces do FUSE podem ser necessárias para recursos mais novos, e pode haver problemas de performance.
Versão curta: boa pergunta!