rsync działa bardzo wolno (współczynnik 8 do 10) w porównaniu do cp podczas kopiowania plików z udziału NFS do lokalnego katalogu

17

Mam świeżo zainstalowany serwer Ubuntu, który powinien być nowym serwerem kopii zapasowych dla naszej pamięci VM. Serwer ma 4 karty sieciowe, 2 z nich 10 Gbit (w rzeczywistości intel x540-T2 z najnowszym dostępnym sterownikiem), które służą do połączenia z siecią SAN. Mam nfs-share zamontowany lokalnie i porównałem różnice prędkości podczas kopiowania katalogu z ~ 30 plikami, około 15 obrazów vm i odpowiadającymi im plikami dziennika. Rozmiar zdjęć wynosi od 8 GB do 600 GB.

Za pomocą:

cp -rf /mnt/nfs-share /backup-storage/

Bmon wykazuje w konsekwencji około 600 MiB / s.

Za pomocą

rsync -av /mnt/nfs-share /backup-storage/

bmon pokazuje niektóre pakiety w pierwszych sekundach, zatrzymuje się na około 30 sekund, a następnie buduje do około 60-75 MiB / s. Procesor wynosi około 60%.

Co powinienem / mógłbym zmienić, aby używać rsyncz taką samą wydajnością jak cp?

ścieżka duszy
źródło

Odpowiedzi:

20

Myślę, że różnice te są dość dobrze ustalone między cpi rsync. Zobacz ten artykuł jako odniesienie, zatytułowany: Spojrzenie na wydajność rsync .

fragment:
The four commands tested were:

    rsync $SRC $DEST
    echo $SRC | cpio -p $DEST
    cp  $SRC $DEST
    cat $SRC > $DEST/$SRC

The results for rsync, cpio, cp, and cat were:

user    sys     elapsed hog MiB/s   test
5.24    77.92   101.86  81% 100.53  cpio
0.85    53.77   101.12  54% 101.27  cp
1.73    59.47   100.84  60% 101.55  cat
139.69  93.50   280.40  83% 36.52   rsync

Używam rsyncna co dzień. Są rzeczy, które możesz zrobić, aby poprawić sytuację.

Na przykład możesz spróbować użyć -Wprzełącznika:

-W, --whole-file            copy files whole (w/o delta-xfer algorithm)

Również chciałbym zaproponować upewniając masz 3.x wersje rsync. Zauważyliśmy zauważalną poprawę, kiedy przeszliśmy na nowsze wersje.

slm
źródło
15

Sposobem, aby rsync miał taką samą wydajność jak cp, jest przeliterować go „cp”.

Różnica między tymi dwoma poleceniami jest znacząca, chociaż efekt netto może być taki sam. W szczególności rsync wykonuje kilka operacji odczytu, aby sprawdzić, czy jakiś plik lub jego część powinna zostać skopiowana.

Czy jest jakiś powód, dla którego chcesz użyć rsync? Ponieważ cp kopiuje „na ślepo”, zobaczysz wyższą wydajność pierwotną. Jeśli dla zestawu warunków wyzwalających użyty zostanie mechanizm „delta-transfer” rsync, zobaczysz, że szybkość transferu spada, a użycie procesora rośnie prawie tak, jak to raportujesz.

msw
źródło
Jestem świadomy tego zachowania, ale nie spodziewałem się takiego efektu. Pomyślałem, że biorąc pod uwagę moc procesora i IOPS, rsync powinien wykonywać co najmniej 300 MiB / s, szczególnie jeśli plik do skopiowania nie istnieje. Nie skończyłem jeszcze testów. Kopia zapasowa z rsync byłaby bardziej wygodna, ale mogę też napisać skrypt za pomocą cp, dd lub cokolwiek, co przyjdzie mi na myśl. Teraz chcę przetestować różne możliwości w różnych systemach plików, aby ocenić, co najlepiej pasuje.
soulpath,
6
Możesz nazwać mnie empirystą, ale kiedy twoje oczekiwania i rzeczywistość się nie zgadzają, zwykle nie jest to rzeczywistość, która się myli. Istnieje kilkanaście powodów, dla których możesz ponieść tę karę; nawet przeplatanie odczytów i zapisów w sieci SAN może mieć dramatyczny wzrost wydajności w zależności od drobnych szczegółów oprogramowania.
msw,
3
Nie miałem wątpliwości co do rzeczywistości, tylko rsync - ale z powodu tych różnic pójdę z pisaniem skryptu przy użyciu cp i kilku sum kontrolnych. Dzięki za radę!
soulpath,
Nie, po prostu nie używaj rsync w systemach plików w sieci. Twój komputer musi pobrać cały plik, abyś stracił wszystkie zalety rsync.
Giacomo Catenazzi
Niestety odpowiedź ta jest błędna w szczegółach. Podczas kopiowania między „lokalnymi” systemami plików (i tak, podłączenie NFS jest lokalnym systemem plików w tym kontekście), rsync nie odczytuje pliku docelowego podczas kopiowania, chyba że jawnie włączysz tę kontrproduktywną operację --whole-file. W tej sytuacji jest to bardzo powolne cp.
roaima,