Desempenho lento na unidade NTFS com grande número de arquivos

10

Estou vendo esta configuração:

  • Windows Server 2012
  • Unidade NTFS de 1 TB, clusters de 4 KB, ~ 90% completos
  • ~ 10M arquivos armazenados em 10.000 pastas = ~ 1.000 arquivos / pasta
  • Arquivos na maior parte muito pequenos < 50 KB
  • Unidade virtual hospedada na matriz de disco

Quando um aplicativo acessa arquivos armazenados em pastas aleatórias, é necessário de 60 a 100 ms para ler cada arquivo. Com uma ferramenta de teste, parece que o atraso ocorre ao abrir o arquivo. A leitura dos dados leva apenas uma fração do tempo.

Em resumo, isso significa que a leitura de 50 arquivos pode levar facilmente de 3 a 4 segundos, o que é muito mais do que o esperado. A gravação é feita em lote, portanto, o desempenho não é um problema aqui.

Eu já segui o conselho sobre SO e SF para chegar a esses números.

O que fazer com os tempos de leitura?

  • Considere de 60 a 100 ms por arquivo para ficar bem (não é?)
  • Tem alguma ideia de como a configuração pode ser melhorada?
  • Existem ferramentas de monitoramento de baixo nível que podem dizer em que exatamente o tempo é gasto?

UPDATE

  1. Conforme mencionado nos comentários, o sistema executa o Symantec Endpoint Protection. No entanto, desativá-lo não altera os tempos de leitura.

  2. O PerfMon mede 10-20 ms por leitura. Isso significaria que qualquer arquivo lido leva ~ 6 operações de leitura de E / S, certo? Isso seria uma verificação MFT e ACL?

  3. A MFT tem um tamanho de ~ 8,5 GB, mais do que a memória principal.

por Paul B. 07.04.2016 / 12:07

1 resposta

4

O servidor não possui memória suficiente. Em vez de armazenar em cache os dados do metarquivo NTFS na memória, cada acesso ao arquivo exigia várias leituras de disco. Como sempre, a questão é óbvia quando você a vê. Deixe-me compartilhar o que nublou minha perspectiva:

  • O servidor mostrou 2 GB de memória disponível no Gerenciador de Tarefas e no RamMap. Portanto, o Windows decidiu que a memória disponível não era suficiente para manter uma parte significativa dos dados do metarquivo. Ou alguma restrição interna não permite usar o último bit de memória para dados de metarquivo.

  • Após a atualização, o RAM Task Manager não mostrará mais memória sendo usada. No entanto, o RamMap relatou vários GB de metarquivos sendo mantidos como dados de espera. Aparentemente, os dados de espera podem ter um impacto substancial.

Ferramentas usadas para a análise:

  • fsutil fsinfo ntfsinfo driveletter: para mostrar o tamanho do NTFS MFT (ou NTFSInfo )
  • RamMap para mostrar a alocação de memória
  • Process Monitor para mostrar que cada arquivo lido é precedido por cerca de 4 operações de leitura para drive: \ $ Mft e drive: \ $ Directory. Embora não tenha conseguido encontrar a definição exata de $ Directory, parece estar relacionado com a MFT bem.
por 25.04.2016 / 08:53