Esto es lo que aprendí haciendo exactamente lo mismo que tú. Sugiero usar mbuffer. Al realizar pruebas en mi entorno, solo ayudó en el extremo receptor, sin nada en absoluto, el envío se ralentizaría mientras el receptor se ponía al día.
Algunos ejemplos:
http://everycity.co.uk/alasdair/2010/07/using-mbuffer-to-speed-up-slow-zfs-send-zfs-receive/
Página de inicio con opciones y sintaxis
http://www.maier-komor.de/mbuffer.html
El comando enviar de mi script de replicación:
zfs send -i tank/pool@oldsnap tank/pool@newsnap | ssh -c arcfour remotehostip "mbuffer -s 128k -m 1G | zfs receive -F tank/pool"
esto ejecuta mbuffer en el host remoto como un búfer de recepción para que el envío se ejecute lo más rápido posible. Ejecuté una línea de 20mbit y descubrí que tener mbuffer en el lado de envío tampoco ayudó, también mi caja zfs principal está usando todo su ram como caché, por lo que dar incluso 1g a mbuffer requeriría que reduzca algunos tamaños de caché.
Además, y esta no es realmente mi área de especialización, creo que es mejor dejar que ssh haga la compresión. En su ejemplo, creo que está usando bzip y luego usa ssh, que por defecto usa compresión, por lo que SSH está tratando de comprimir una secuencia comprimida. Terminé usando arcfour como cifrado, ya que es el que menos CPU consume y eso fue importante para mí. Es posible que tenga mejores resultados con otro cifrado, pero definitivamente sugeriría dejar que SSH haga la compresión (o desactive la compresión ssh si realmente desea usar algo que no admite).
Lo que es realmente interesante es que usar mbuffer al enviar y recibir en localhost también acelera las cosas:
zfs send tank/pool@snapshot | mbuffer -s 128k -m 4G -o - | zfs receive -F tank2/pool
Descubrí que 4g para transferencias localeshost parece ser el punto dulce para mí. Simplemente muestra que zfs enviar / recibir realmente no le gusta la latencia o cualquier otra pausa en la transmisión para que funcione mejor.
Solo mi experiencia, espero que esto ayude. Me tomó un tiempo entender todo esto.