teeを使用したパラレルファイルのコピーが予期せず遅くなります。

teeを使用したパラレルファイルのコピーが予期せず遅くなります。

サイト-1からサイト-2に大規模なzfsスナップショット(zfs send)をコピーしています。 Site-1とSite-2はリモートであり、IPsecを介して接続されています(読み取り:遅い)。

サイト 2 では、2 つの異なる zfs サーバーのデータが必要です。現在、2つの同時ssh "zfs send" zfs receiveコマンドを使用しています。もちろん、これは帯域幅の無駄です。

私たちは以下を試しました(リモートssh 1個、tee、ローカルssh 1個):

[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

結果は元のソリューションのシミュレーションよりも遅くなります(同時に2つのリモートSSH)。

[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

有力容疑者であるteeのコードを見てみると、単一スレッドで実行されるようです。

Tシャツよりも速い代替案や全く異なる解決策をお勧めできる人はいますか?

よろしくお願いします、グウェン

ベストアンサー1

提案:

zfs send > file
scp file server-at-site2:
ssh server-at-site2 zfs receive < file
ssh server-at-site2 cat file | ssh second-server-at-site2 zfs receive

これには2回の転送が必要ですが、おそらく2番目の転送が速くなります(ローカルネットワークなどのため)。

おすすめ記事