ti-enxame.com

Performance Bad NTFS.

Por que é que o desempenho do NTFS é tão ruim em comparação com, por exemplo, Linux/ext3? Na maioria das vezes, vejo isso quando check-out (GRANDE) de origem da subversion. O checkout leva cerca de 10-15 minutos no NTFS, enquanto o checkout correspondente no Linux (em hardware quase idêntico) recebe uma ordem de magnitude mais rápida (1 a 1,5 minutos).

Talvez isso seja específico para lidar com muitos arquivos pequenos e ntfs é melhor quando se trata de arquivos grandes, mas por que isso deveria ser? Não melhoraria o desempenho do NTFS para pequenos arquivos seria extremamente benéfico para o desempenho do Windows em geral?

Edit: Isso não significa que "ntfs é uma droga comparada à pergunta inflamatória ext3"; Estou genuinamente interessado em por que NTFs realiza ruim em certos casos. É apenas design ruim (que duvido), ou há outros problemas que entram em jogo?

22
JesperE

NTFS tem essa coisa chamada A tabela de arquivos mestre . Parece muito legal quando você lê sobre isso.

Você pode ver que o ext3 executa tudo bem até cerca de 95% de uso em disco, enquanto a existência do MFT significa que o NTFS realmente não quer que você use mais de 90% do seu disco. Mas eu vou assumir que não é o seu problema, e que seu problema é com as muitas operações em muitos arquivos pequenos.

Uma das diferenças aqui é o que acontece quando você cria um pequeno arquivo. Se um arquivo for menor que um tamanho de bloco, ele não será gravado no seu próprio bloco, mas é armazenado no MFT. Isso é bom se o arquivo permanecer exatamente do jeito que foi quando criado. Na prática, porém, significa que quando o SVN toca um arquivo para criá-lo, então adiciona a esse arquivo, remove dele, ou simplesmente modifica por não o suficiente para movê-lo para o seu próprio bloco, a operação é bastante lenta. Também apenas lendo muitos arquivos pequenos coloca algum estresse no MFT onde todos residem, com múltiplos por bloco. Por que faria isso? Está preventivamente evitando fragmentação e usando mais os blocos de forma mais eficaz e, em geral, é uma coisa boa.

Em EXT2 e 3, por contraste, blocos de arquivos para cada arquivo são armazenados ao lado de onde o diretório é para o diretório que eles estão (quando possível, se o seu disco for desmarcado 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 gratuitamente naquele cache de 16MB em sua unidade e, novamente, no cache do kernel. Esses arquivos podem incluir o arquivo .svn e os arquivos de revisão para sua última atualização. Isso é útil, uma vez que são prováveis ​​que alguns dos arquivos svn estejam procurando. NTFS não consegue fazer isso, embora grandes partes do MFT sejam armazenadas em cache no sistema, elas podem não ser as partes que você vai querer a seguir.

36
dlamblin

Bem, seu problema particular é porque

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

O que você está vendo é simplesmente um artefato de algo projetado para um sistema operacional específico com pressupostos de desempenho sobre esses sistemas operacionais. Isso geralmente se divide mal, quando levado para outros sistemas. Outros exemplos seriam bifurcando vs. No Unix-Gosta da maneira tradicional de paralizar algo é apenas desovar outro processo. No Windows, onde os processos levam pelo menos cinco vezes mais tempo para começar, esta é uma ideia muito ruim.

Em geral, você não pode simplesmente tomar artefatos de um determinado sistema operacional para ser concedido em qualquer outro com arquitetura vastamente diferente. Além disso, não se esqueça que o NTFS tem muitos recursos do sistema de arquivos que estavam ausentes nos sistemas de arquivos Unix amplamente em uso nesse ponto, como registros e ACLs. Essas coisas vêm a um custo.


Algum dia, quando eu tenho muito tempo livre, eu planejava escrever um módulo do SVN FileSystem que aproveita os recursos que você tem em NTFS, como suporte de transação (deve eliminar os "Milhões de pequenos arquivos pequenos") e dados alternativos fluxos (devem eliminar a necessidade do diretório separado .svn. Seria uma coisa legal ter, mas duvido que os devs svn se loceitem implementando essas coisas no futuro previsível.

Nota lateral : Uma única atualização em um grande repositório SVN eu 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 ...

6
Joey

Aqui está a Microsoft's Info em como o NTFS funciona. Pode ser exagero para o que você está procurando, mas estudando que pode lançar alguma luz sobre quais cenários ntfs tem problemas.

3
Kenneth Cochran