Tempo fa ero mi sono accorto che su alcuni server di backup avevano delle impostazioni particolari riguardanti la compressione ssh.
In particolare in /etc/ssh/ssh_config ho trovato questa riga:
CompressionLevel 9
Visto che i backup, che usano rsync su ssh, impiegavano molto tempo e capitava che la notte il carico delle macchine remote raggiungesse soglia critica e andassero in allarme, quello che mi è venuto in mente è fare delle prove con i vari livelli di compressione.
Per fare un scp con compressione si può usare il parametro -C, che se presente attiva la compressione, disattivata per default.
In quei backup la compressione era stata abilitata in questo modo:
rsync -e "ssh -C ..." ...
Non ho idea come ci sia finito li quel parametro, tuttuavia il motivo non è interessante come le prove di seguito!
Ho creato quindi 2 file di prova:
prova.zero, file 100% comprimibile composto solamente da zeri
prova.random, file 0% comprimibile creato da /dev/urandom.
Ho scelto uno dei server e ho fatto alcune prove di trasferimento.
prova.zero –> no compressione –> 9.1MB/s
prova.zero –> compressione 6 (default) –> 13.3MB/s
prova.zero –> compressione 9 (massima) –> 8.0MB/s
prova.zero –> compressione 1 (minima) –> 55.5MB/s
prova.random –> no compressione –> 8.6MB/s
prova.random –> compressione 6 (default) –> 2.9 MB/s
prova.random –> compressione 9 (massima) –> 2.1 MB/s
prova.random –> compressione 1 (minima) –> 5.7MB/s
Quello che si nota subito è che:
1. 9MB/s è circa la velocità della connessione
2. utilizzare la compressione 9 con un file 100% comprimibile in questo
caso comunque rallenta il trasferimento
Le mie conclusioni sono state che a prescindere dalla comprimibilità del file, è meglio evitare di utilizzare la compressione della connessione se si tratta di un collegamento (almeno) discreto, e se si vuole proprio
utilizzarla a meno che proprio non si tratti di un modem 56k, almeno di metterla a 1. Nei test effettuati con la compressione a 9 ho generato anche un discreto loadavg su entrambe le macchine. Comprimere la connessione in una rete locale invece lo considererei proprio un errore grave: i
risultati possono essere davvero pessimi.
Per lo stesso motivo in casi normali sconsiglio anche di utilizzare -z con rsync, che ho visto spesso fa gola, ma invece una trappola.