C'è un certo numero di cose che stanno succedendo qui.
Innanzitutto, tutte le moderne tecnologie dei dischi sono ottimizzate per i trasferimenti di massa. Se devi spostare 100 MB di dati, lo faranno molto più velocemente se si trovano in un blocco contiguo invece che sparsi ovunque. Gli SSD aiutano molto qui, ma anche loro preferiscono i dati in blocchi contigui.
In secondo luogo, il resilvering è abbastanza ottimale per quanto riguarda le operazioni del disco. Leggi un enorme blocco contiguo di dati da un disco, esegui alcune operazioni veloci della CPU su di esso, quindi riscrivi in un altro grosso blocco contiguo su un altro disco. Se il potere si interrompe a metà strada, niente di grave: ignorerai semplicemente tutti i dati con checksum errati e proseguirai normalmente.
Terzo, l'eliminazione di un file è molto lenta . ZFS è particolarmente dannoso, ma praticamente tutti i filesystem sono lenti da eliminare. Devono modificare un gran numero di diversi blocchi di dati sul disco e cronometrarli correttamente (cioè attendere) in modo che il filesystem non venga danneggiato in caso di interruzione dell'alimentazione.
Come è possibile che il ripristino dell'intero array richieda un'ora, ma l'eliminazione dal disco richieda 4 giorni?
Il resilver è qualcosa in cui i dischi sono molto veloci, e la cancellazione è qualcosa in cui i dischi sono lenti. Per megabyte di disco, devi solo fare un po 'di resilver. Potresti avere un migliaio di file in quello spazio che devono essere eliminati.
70 eliminazioni / secondo sembrano prestazioni pessime
Dipende. Non ne sarei sorpreso. Non hai menzionato il tipo di SSD che stai utilizzando. I moderni SSD Intel e Samsung sono abbastanza bravi in questo tipo di operazioni (lettura-modifica-scrittura) e funzioneranno meglio. Gli SSD più economici / meno recenti (ad esempio Corsair) saranno lenti. Il numero di operazioni I / O al secondo (IOPS) è il fattore determinante qui.
ZFS è particolarmente lento nell'eliminare le cose. Normalmente, eseguirà le eliminazioni in background in modo da non vedere il ritardo. Se ne stai facendo un numero enorme, non può nasconderlo e deve ritardarti.
Appendice: perché le eliminazioni sono lente?
- L'eliminazione di un file richiede diversi passaggi. I metadati del file devono essere contrassegnati come "eliminati" e alla fine devono essere recuperati in modo da poter riutilizzare lo spazio. ZFS è un "filesystem strutturato in log" che funziona meglio se si creano e non si eliminano mai. La struttura del registro significa che se si elimina qualcosa, c'è un vuoto nel registro e quindi altri dati devono essere riorganizzati (deframmentati) per colmare il vuoto. Questo è invisibile per l'utente ma generalmente lento.
- Le modifiche devono essere apportate in modo tale che se si dovesse interrompere parzialmente l'alimentazione, il filesystem rimane coerente. Spesso, ciò significa attendere fino a quando il disco non conferma che i dati sono realmente sul supporto; per un SSD, che può richiedere molto tempo (centinaia di millisecondi). L'effetto netto di questo è che c'è molta più contabilità (cioè operazioni di I / O su disco).
- Tutte le modifiche sono piccole. Invece di leggere, scrivere e cancellare interi blocchi flash (o cilindri per un disco magnetico) è necessario modificarne un po '. Per fare ciò, l'hardware deve leggere in un intero blocco o cilindro, modificarlo in memoria, quindi scriverlo nuovamente sul supporto. Questo richiede molto tempo.