tee를 사용한 병렬 파일 복사가 예기치 않게 느림

tee를 사용한 병렬 파일 복사가 예기치 않게 느림

우리는 사이트 1에서 사이트 2로 대규모 zfs 스냅샷(zfs send)을 복사하고 있습니다. 사이트-1과 사이트-2는 원격이며 IPsec을 통해 연결되어 있습니다(읽기: 느림).

사이트 2에서는 두 개의 다른 zfs 서버에 있는 데이터가 필요합니다. 현재 우리는 두 개의 동시 SSH "zfs send"를 사용하고 있습니다 | zfs는 명령을 수신합니다. 이는 물론 대역폭 낭비입니다.

우리는 다음을 실험했습니다(원격 ssh 1개, tee 1개, 로컬 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의 코드를 조사한 결과 단일 스레드에서 작동하는 것 같습니다.

누구든지 tee에 대한 더 빠른 대안이나 완전히 다른 솔루션을 추천할 수 있습니까?

미리 감사드립니다, guven

답변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

두 번의 전송이 필요하지만 아마도 두 번째 전송이 더 빠를 것입니다(로컬 네트워크 등으로 인해).

관련 정보