Há várias coisas acontecendo aqui.
Primeiro, todas as tecnologias modernas de disco são otimizadas para transferências em massa. Se você precisar mover 100 MB de dados, eles o farão muito mais rápido se estiverem em um bloco contíguo em vez de espalhados por todo o lugar. Os SSDs ajudam muito aqui, mas mesmo eles preferem dados em blocos contíguos.
Segundo, a resilvering é bastante ideal no que diz respeito às operações de disco. Você lê uma grande quantidade de dados contíguos de um disco, realiza algumas operações rápidas da CPU e, em seguida, reescreve-as em outra grande parte contígua em outro disco. Se a energia falhar parcialmente, não é grande coisa - você simplesmente ignorará todos os dados com somas de verificação ruins e continuará normalmente.
Terceiro, a exclusão de um arquivo é realmente lenta . O ZFS é particularmente ruim, mas praticamente todos os sistemas de arquivos são lentos para excluir. Eles devem modificar um grande número de diferentes partes de dados no disco e cronometrar corretamente (ou seja, aguardar) para que o sistema de arquivos não seja danificado se houver falta de energia.
Como é possível que a reestruturação de toda a matriz leve uma hora, mas a exclusão do disco leva 4 dias?
A nova resolução é algo em que os discos são realmente rápidos e a exclusão é algo em que os discos são lentos. Por megabyte de disco, você só precisa fazer um pouco de resiliência. Você pode ter mil arquivos nesse espaço que precisam ser excluídos.
70 deleções / segundo parece um desempenho muito, muito ruim
Depende. Eu não ficaria surpreso com isso. Você não mencionou que tipo de SSD está usando. Os modernos SSDs da Intel e da Samsung são muito bons nesse tipo de operação (leitura-modificação-gravação) e terão melhor desempenho. SSDs mais baratos / mais antigos (por exemplo, Corsair) serão lentos. O número de operações de E / S por segundo (IOPS) é o fator determinante aqui.
O ZFS é particularmente lento para excluir coisas. Normalmente, ele executa exclusões em segundo plano para que você não veja o atraso. Se você está fazendo um grande número deles, não pode ocultar e deve atrasar você.
Apêndice: por que as exclusões são lentas?
- A exclusão de um arquivo requer várias etapas. Os metadados do arquivo devem ser marcados como 'excluídos' e, eventualmente, devem ser recuperados para que o espaço possa ser reutilizado. O ZFS é um 'sistema de arquivos estruturado em log' que apresenta melhor desempenho se você criar apenas coisas e nunca excluí-las. A estrutura do log significa que, se você excluir algo, há uma lacuna no log e, portanto, outros dados deverão ser reorganizados (desfragmentados) para preencher a lacuna. Isso é invisível para o usuário, mas geralmente lento.
- As alterações devem ser feitas de forma que, se a energia falhar parcialmente, o sistema de arquivos permanecerá consistente. Geralmente, isso significa esperar até que o disco confirme se os dados realmente estão na mídia; para um SSD, isso pode levar um longo tempo (centenas de milissegundos). O efeito líquido disso é que há muito mais contabilidade (ou seja, operações de E / S de disco).
- Todas as mudanças são pequenas. Em vez de ler, escrever e apagar blocos de flash inteiros (ou cilindros para um disco magnético), você precisa modificar um pouco de um. Para fazer isso, o hardware deve ler um bloco ou cilindro inteiro, modificá-lo na memória e gravá-lo na mídia novamente. Isso leva muito tempo.