estamos copiando um instantâneo grande do zfs (zfs send) do site-1 para o site-2. site-1 e site-2 são remotos e estão conectados via IPsec (leia-se: lento)
no site-2, precisamos dos dados em dois servidores zfs diferentes. atualmente estamos usando dois ssh "zfs send" simultâneos | zfs recebe comandos. isso é, obviamente, um desperdício de largura de banda.
nós experimentamos o seguinte (1 ssh remoto, tee, 1 ssh local):
[root@site-2-1 ~]# \
time \
ssh root@site-1-0 \
"cat /tmp/100000000.rnd | pigz -1" \
| pv -B 10m -s 100000000 \
| tee \
>(ssh root@site-2-2 "pigz -d > /tmp/test.rnd.1") \
| pigz -d \
> /tmp/test.rnd.1
95.4MiB 0:00:52 [1.83MiB/s] [===<snipped>===>] 100%
real 0m52.062s
user 0m0.979s
sys 0m1.100s
que acabou sendo mais lento que uma simulação da solução original (2 sshs remotos simultaneamente):
[root@site-2-1 ~]# \
time \
ssh root@site-1-0 \
"cat /tmp/100000000.rnd | pigz -1" \
| pv -B 10m -s 100000000 \
| pigz -d \
> /tmp/test.rnd.2
95.4MiB 0:00:30 [3.09MiB/s] [===<snipped>===>] 100%
real 0m30.837s
user 0m0.827s
sys 0m1.003s
[root@site-2-2 ~]# \
time \
ssh root@site-1-0 \
"cat /tmp/100000000.rnd | pigz -1" \
| pv -B 10m -s 100000000 \
| pigz -d \
> /tmp/test.rnd.2
95.4MiB 0:00:38 [ 2.5MiB/s] [===<snipped>===>] 100%
real 0m38.187s
user 0m0.840s
sys 0m0.846s
nós analisamos o código do tee, nosso principal suspeito, e parece que ele funciona de um único thread.
alguém pode recomendar uma alternativa mais rápida para tee, ou uma solução totalmente diferente, talvez?
obrigado antecipadamente,
guven