by rottegift » Sun Jan 29, 2017 4:23 am
1.6 includes compressed send/recv (the -c flag), which is likely to help in almost all cases and especially where the receiving dataset has the same compression as the sending one. (The zfs send -e flag is also useful).
The default (and old) behaviour is that the sender uncompresses each object to be sent and the receiver compresses it. With compressed send/recv, the sender transmits the objects as they are in the sender's pool, and the receiver stores the objects as they are in the receiver's pool if the compression algorithm is the same, or uncompresses-and-recompresses otherwise.
Where compression and checksum match on both sides and -c and -e are in use, both the sender and receiver do a lot less work, and a lot less data flows through the pipeline connecting the two.
The zfs man page seems up-to-date with respect to the -c flag.
Also useful for large send/recv is to get to know and love resumable send/recv (zfs send -ecL src/ds@a | zfs recv -vus dest/ds; *INTERRUPT* then receive_resume_token=`zfs get -H -o value receive_resume_token dest/ds` ; zfs send -e -t $receive_resume_token | zfs send -vus dest/ds).