Há várias coisas acontecendo aqui.
Primeiro, todas as modernas tecnologias de disco são otimizadas para transferências em massa. Se você precisar mover 100 MB de dados, eles farão isso 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 até eles preferem dados em blocos contíguos.
Em segundo lugar, o resilvering é bastante ideal no que diz respeito às operações de disco. Você lê um pedaço maciço de dados contíguos de um disco, faz alguns rápidos ops de CPU nele, então reescreve em outro grande pedaço contíguo para outro disco. Se o poder falhar no meio, não é grande coisa - você simplesmente ignorará qualquer dado com checksums ruins e continuará de acordo com o normal.
Em terceiro lugar, excluir um arquivo é muito lento . O ZFS é particularmente ruim, mas praticamente todos os sistemas de arquivos são lentos para serem excluídos. Eles devem modificar um grande número de diferentes blocos de dados no disco e programá-los corretamente (ou seja, esperar) para que o sistema de arquivos não seja danificado se a energia falhar.
How is it possible that resilvering the whole array takes an hour, but deleting from the disk takes 4 days?
O resilvering é 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 resilvering. Você pode ter mil arquivos nesse espaço que precisam ser excluídos.
70 deletions/second seems very very bad performance
Depende. Eu não ficaria surpreso com isso. Você não mencionou o tipo de SSD que está usando. Os modernos SSDs Intel e Samsung são muito bons nesse tipo de operação (read-modify-write) e terão melhor desempenho. SSDs mais baratos / 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 apagar coisas. Normalmente, ele executará 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 escondê-lo 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 executa melhor se você apenas criar coisas, nunca excluí-las. A estrutura de log significa que, se você excluir algo, haverá 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, o sistema de arquivos permaneça consistente. Freqüentemente, isso significa aguardar até que o disco confirme que os dados realmente estão na mídia; para um SSD, que pode levar muito 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 alterações 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 em um bloco ou cilindro inteiro, modificá-lo na memória e depois gravá-lo na mídia novamente. Isso leva muito tempo.