Em nosso escritório, usamos um RAID5 de SSDs como compartilhamento de rede em um servidor linux. Este compartilhamento é acessado como uma unidade de rede de PCs Windows e Mac. Às vezes, esse compartilhamento de rede fica muito lento em termos de tempos de acesso e velocidade de transferência.
Eu não sou o administrador e, portanto, não tenho uma visão completa do sistema.
Um dos administradores agora propôs que isso pode ter a ver com o número de arquivos armazenados no compartilhamento de rede. Algumas pastas contêm milhões de alguns arquivos kB.
A velocidade de acesso depende do número de arquivos em um compartilhamento de rede?
Não é o grande número de arquivos na unidade, mas sim quantos estão em uma determinada pasta.
Toda vez que alguém acessa uma pasta, o conteúdo deve ser lido para que a lista de arquivos possa ser apresentada. Isso também é independente dos tamanhos dos arquivos; apenas os títulos, datas criadas/modificadas e outras informações visíveis externamente precisam ser buscadas.
Os caches de ícones também podem sofrer um grande impacto, se forem usadas miniaturas.
Dividir essas pastas gigantes em subconjuntos pode ser exatamente o que a estrutura precisa.
A velocidade de listagem de arquivos obviamente depende do número de arquivos a serem listados.
A velocidade de abertura de um arquivo específico (ou seja, iniciar a recuperação) pode depender do número de arquivos.
Dependendo de qual sistema de arquivos está sendo usado no servidor (por exemplo, NTFS, XFS, ext4, ZFS), ele usará estruturas de dados diferentes para armazenar a lista de arquivos em cada diretório – alguns dos quais são notavelmente melhores em lidar com listas massivas do que outros ( por exemplo, árvores B vs tabelas de hash vs listas lineares).
Toda vez que um novo arquivo é aberto (ou tocado de outra forma), o servidor precisa encontrá-lo dentro desse diretório, e isso pode levar algum tempo. (Especialmente se a lista de diretórios não estiver armazenada em cache na memória e precisar ser lida de um HDD.)
Com milhões de arquivos, você deve definitivamente considerar fragmentá-los em subdiretórios, por exemplo, com base nas primeiras letras do nome do arquivo (semelhante ao que você pode ver em
.git/objects/
um repositório Git).A velocidade de transferência do conteúdo de um arquivo (sem incluir o tempo necessário para abri-lo) não depende do número de arquivos nesse diretório.
Depende de quanto os discos precisam procurar (se forem mecânicos), o que é especialmente ruim para muitos arquivos pequenos.
Se você estiver transferindo milhares de arquivos minúsculos, acho que a maior parte do tempo será gasto em e – se o servidor estiver usando HDDs – procurando fisicamente os cabeçotes do HDD de um arquivo minúsculo para outro, e de uma entrada de metadados para outro.
Você não disse se o servidor era Windows ou Linux, mas pelo menos em sistemas de arquivos baseados em Linux, diretórios grandes são certamente lentos. Se você criar milhões de arquivos em um diretório, o índice do diretório aumentará. Você pode realmente ver isso se você fizer isso
ls -lhd <dir>
. E os diretórios só crescem; eles não ficam menores.Eu gerencio um sistema que lida com muitos arquivos de fila, e para evitar lentidão por causa disso, há duas coisas que faço:
Portanto, evite milhões de arquivos em um diretório e coloque-os em subdiretórios.
Quando você está falando de milhões de arquivos espalhados por muitos subdiretórios, isso não deve ser um fator.
Um gargalo provável é a interface de rede.
A resposta para a pergunta feita é "depende". Depende do sistema operacional, sistema de arquivos, protocolo de compartilhamento de arquivos, RAM, interface SSD, se a criptografia em repouso é usada e como, o controlador RAID entre outras coisas.
É possível que o número de arquivos na unidade esteja afetando o desempenho - pouco provavelmente isso é apenas um problema se os arquivos forem lidos apenas ocasionalmente e/ou o servidor tiver muita memória restrita - os ponteiros do sistema de arquivos são normalmente mantidos na memória e como o disco é SSD, "tempos de busca" não são um problema.
Também é possível que um ou mais SSDs esteja chegando ao fim da vida, ou que não esteja lidando com o TRIM corretamente; nesse caso, pode estar diminuindo muito as leituras e principalmente as gravações, possivelmente afetando desproporcionalmente o acesso a outros discos, pois os dados são distribuídos em todos os discos .