Por que o desempenho do NTFS é tão ruim se comparado ao Linux / ext3, por exemplo? Na maioria das vezes eu vejo isso ao verificar árvores de origem (grandes) do Subversion. O checkout demora cerca de 10 a 15 minutos no NTFS, enquanto o checkout correspondente no Linux (em hardware quase idêntico) leva uma ordem de magnitude mais rápido (1 a 1,5 minutos).
Talvez isso seja específico para lidar com muitos arquivos pequenos e o NTFS seja melhor quando se trata de arquivos grandes, mas por que deveria ser? Melhorar o desempenho do NTFS para arquivos pequenos não seria muito benéfico para o desempenho do Windows em geral?
EDIT: Isso não pretende ser uma pergunta inflamatória "NTFS é uma merda em comparação com ext3"; Estou genuinamente interessado em saber por que o NTFS executa mal em certos casos. É apenas um design ruim (do qual duvido), ou existem outros problemas que entram em jogo?
fonte
Respostas:
NTFS tem essa coisa chamada tabela mestre de arquivos . Parece muito legal quando você lê sobre isso.
Você pode ver que o ext3 executa bem até cerca de 95% do uso de disco, enquanto a existência da MFT significa que o NTFS realmente não deseja que você use mais de 90% do seu disco. Mas presumo que esse não seja o seu problema, e que ele seja com as muitas operações em muitos arquivos pequenos.
Uma das diferenças aqui é o que acontece quando você cria um arquivo pequeno. Se um arquivo é menor que o tamanho de um bloco, ele não é gravado em seu próprio bloco, mas é armazenado na MFT. Isso é bom se o arquivo permanecer exatamente do jeito que estava quando criado. Porém, na prática, isso significa que quando o svn toca em um arquivo para criá-lo, adiciona-o, remove-o ou apenas o modifica, não o suficiente para movê-lo para seu próprio bloco, a operação é bem lenta. Também apenas a leitura de muitos arquivos pequenos enfatiza a MFT onde eles residem, com múltiplos por bloco. Por que faria isso? É evitar preventivamente a fragmentação e usar mais blocos de maneira mais eficaz, e em geral isso é uma coisa boa.
Em ext2 e 3, por outro lado, os blocos de arquivos para cada arquivo são armazenados próximos ao local onde os metadados do diretório estão (quando possível, se o seu disco não estiver fragmentado e você tiver cerca de 20% de espaço livre). Isso significa que, como o svn está abrindo diretórios, vários blocos são armazenados em cache basicamente de graça naquele cache de 16 MB na sua unidade e depois novamente no cache do kernel. Esses arquivos podem incluir o arquivo .svn e os arquivos de revisão da sua última atualização. Isso é útil, pois esses são provavelmente alguns dos arquivos que o svn examinará a seguir. O NTFS não consegue fazer isso, embora grandes partes da MFT devam ser armazenadas em cache no sistema, elas podem não ser as partes que você deseja a seguir.
fonte
Bem, seu problema específico é porque
O que você está vendo é simplesmente um artefato de algo projetado para um sistema operacional específico com suposições de desempenho nesses sistemas operacionais. Isso geralmente quebra muito quando levado para outros sistemas. Outros exemplos seriam bifurcação x rosqueamento. Nos gostos do UNIX, a maneira tradicional de paralisar algo é apenas gerar outro processo. No Windows, onde os processos demoram pelo menos cinco vezes mais para iniciar, é uma péssima ideia.
Em geral, você não pode simplesmente aceitar que artefatos de um SO específico sejam concedidos em qualquer outro com arquitetura muito diferente. Além disso, não esqueça que o NTFS possui muitos recursos de sistema de arquivos ausentes nos sistemas de arquivos UNIX amplamente usados naquele momento, como registro no diário e ACLs. Essas coisas têm um custo.
Algum dia, quando tenho muito tempo livre, planejava escrever um módulo de sistema de arquivos SVN que aproveita os recursos que você possui no NTFS, como suporte a transações (deve eliminar o "problema de milhões de pequenos arquivos") e dados alternativos fluxos (deve eliminar a necessidade de separar
.svn
diretório ). Seria bom ter isso, mas duvido que os desenvolvedores do SVN contornem a implementação de tais coisas no futuro próximo.Nota lateral: Uma única atualização em um repositório SVN grande que estou usando levou cerca de 250.000 operações de arquivo. Alguma voz minúscula me diz que isso é realmente muito para 24 arquivos que mudaram ...
fonte
Aqui estão as informações da Microsoft sobre como o NTFS funciona. Pode ser um exagero para o que você está procurando, mas estudá-lo pode lançar alguma luz sobre quais cenários o NTFS tem problemas.
fonte