Eu só estava me perguntando por que o servidor NFS Linux é implementado no kernel, em oposição a um aplicativo de espaço do usuário?
Sei que existe um daemon NFS no espaço do usuário , mas não é o método padrão para fornecer serviços de servidor NFS.
Eu pensaria que a execução do servidor NFS como um aplicativo de espaço de usuário seria a abordagem preferida, pois pode fornecer segurança adicional com um daemon executado no espaço de usuário em vez do kernel. Também se encaixaria no princípio comum do Linux de fazer uma coisa e fazê-lo bem (e que daemons não deveriam ser um trabalho para o kernel).
De fato, o único benefício que consigo pensar em executar no kernel seria um aumento no desempenho da alternância de contexto (e esse é um motivo discutível).
Portanto, existe algum motivo documentado para que seja implementado do jeito que é? Tentei pesquisar no Google, mas não consegui encontrar nada.
Parece haver muita confusão, observe que não estou perguntando sobre a montagem de sistemas de arquivos, mas sobre o fornecimento do lado do servidor de um sistema de arquivos de rede . Há uma diferença muito distinta. A montagem de um sistema de arquivos localmente requer suporte para o sistema de arquivos no kernel, desde que não seja necessário (por exemplo, samba ou unfs3).
unfs3
(que é um servidor NFS) sem qualquer suporte ao kernel.Respostas:
unfs3
está morto, tanto quanto eu sei; Ganesha é o projeto do servidor NFS com mais espaço para usuário no momento, embora não esteja completamente maduro.Embora atenda a diferentes protocolos, o Samba é um exemplo de um servidor de arquivos bem-sucedido que opera no espaço do usuário.
Não vi uma comparação recente de desempenho.
Algumas outras questões:
nfsd
precisam ser capazes de procurá-los por tratamento de arquivos . 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 no espaço do usuário, mas os kernels mais recentes adicionavamname_to_handle_at(2)
eopen_by_handle_at(2)
chamavam o sistema.setfsuid(2)
) que deve fazer isso. Por razões que esqueço, acho que ficou mais complicado usar nos servidores do que deveria ser.Em geral, os pontos fortes de um servidor kernel são a integração mais próxima com os vfs e o sistema de arquivos exportado. Podemos compensar isso fornecendo mais interfaces do kernel (como as chamadas do sistema de tratamento de arquivos), mas isso não é fácil. Por outro lado, algumas pessoas do sistema de arquivos desejam exportar atualmente (como o gluster) na verdade vivem principalmente no espaço do usuário. Eles podem ser exportados pelo kernel nfsd usando o FUSE - mas novamente extensões para as interfaces do FUSE podem ser necessárias para os recursos mais recentes, e pode haver problemas de desempenho.
Versão curta: boa pergunta!
fonte
unfs3
está vivo e se muda para o Github" ?Olaf Kirch originalmente desenvolveu o espaço do usuário e a versão baseada em kernel do servidor NFS. Em seu livro do ano 2000, "Linux Network Administration", ele diz:
O kernel 2.2.0 suporta um servidor NFS experimental baseado em kernel, desenvolvido por Olaf Kirch e posteriormente desenvolvido por HJ Lu, G. Allan Morris e Trond Myklebust. O suporte NFS baseado em kernel fornece um aumento significativo no desempenho do servidor.
Acho que depois que o servidor NFS foi transferido para o kernel para melhorar o desempenho, ninguém viu razão para retirá-lo novamente.
fonte
Starnamer está correto (eu fui um dos beta testers).
Colocá-lo no kernel foi uma tentativa de melhorar o desempenho abismal (principalmente para clientes PCNFS) e, uma vez resolvido esse problema, ninguém olhou para ele novamente.
Há uma série de deficiências em ter o NFS no kernel, entre os quais o de que ele não funciona muito bem com qualquer outra coisa tocando o mesmo sistema de arquivos (existem riscos de corrupção seriamente desagradáveis), mas naquela época (1993-4), não perceber que isso acabaria sendo um problema.
Éramos mais jovens e mais tolos, etc etc.
fonte