使用 tee 進行平行檔案複製出乎意料地慢

使用 tee 進行平行檔案複製出乎意料地慢

我們正在將一個大型 zfs 快照 (zfs send) 從 site-1 複製到 site-2。 site-1 和 site-2 是遠端的,並透過 IPsec 連接(讀取:慢)

在 site-2 上,我們需要兩個不同 zfs 伺服器上的資料。目前我們正在使用兩個同時 ssh“zfs send”| zfs接收指令。這當然是浪費頻寬。

我們嘗試了以下內容(1 個遠端 ssh、tee、1 個本地 ssh):

[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

這需要兩次傳輸,但大概第二次會更快(因為本地網路等)

相關內容