Desempenho NTFS ruim

21

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?

JesperE
fonte
4
Talvez isso possa ser reformulado para que você esteja perguntando como melhorar o desempenho do NTFS ao lidar com muitos arquivos pequenos, em vez de perguntar por que o NTFS é péssimo em comparação com o ext3?
31410 ChrisInEdmonton
Concordo com @ Chris, esta questão é meio inútil.
Sasha Chedygov 29/07/2009
4
Bem, estou realmente interessado em saber por que o NTFS está tendo um desempenho ruim. Se a resposta for "faça X para torná-lo mais rápido", ótimo, mas eu me contentaria em entender o problema.
JesperE
Ah, ok, desculpe por não ter entendido você.
Sasha Chedygov 29/07/2009
2
Aliás, quando você estava usando o SVN em uma máquina Windows, essa máquina tinha um antivírus com proteção em tempo real ativada? Isso pode ser ruim.
31410 dlamblin

Respostas:

35

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.

dlamblin
fonte
2
Você está certo de que é aqui que vivem pequenos arquivos, mas não sei por que isso deve colocar pressão na MFT. Não seria muito mais fácil ler esses arquivos, pois você tem a garantia de colocar muitos desses arquivos no cache quando você os puxa?
31410 ChrisInEdmonton
11
@ChrisInEdmonton São as atualizações do MFT que o estressam, porque você não está tocando em blocos onde o espaço vizinho está disponível, você acaba movendo as coisas e também invalidando as partes em cache do MFT. Eu garanto que, no papel, a MFT deve ser uma maneira muito rápida de lidar com arquivos pequenos. Simplesmente não se confirma na prática.
28410 dlamblin
6

Bem, seu problema específico é porque

  1. O próprio Subversion vem do mundo UNIX, portanto a versão do Windows assume características de desempenho semelhantes.
  2. O desempenho do NTFS realmente não é ótimo com bilhões de arquivos pequenos.

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 ...

Joey
fonte
11
Mas por que o desempenho do NTFS é ruim ao lidar com bilhões de arquivos pequenos? Isso tinha que ser sacrificado para conseguir outra coisa?
JesperE
3

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.

Kenneth Cochran
fonte