Dlaczego rsync sam się rozwidla? I dlaczego jeden taki rozwidlony proces jest prawie bezczynny (jak widać w iotop)?

11

Odnosi się to do przedstawionej tutaj sprawy, a ja również tego doświadczam.

Na jednym z moich serwerów uruchomiłem rsync, aby wykonać kopię zapasową ogromnego katalogu (rozmiar większy niż 300 Gb) na innym dysku, zamontowanym na tym samym komputerze. Rsyncedowany katalog zawiera tysiące katalogów i plików. Wydałem pojedyncze polecenie rsync z „nohup”, a następnie wypchnąłem je w tle za pomocą polecenia „&”. Kompletne polecenie podane w zdalnej powłoce bash (za pomocą putty) brzmiało:

nohup rsync -avh /some/local/dir /backup/ >> /opt/rsync.dec22.log &

Następnie, aby sprawdzić, z jaką prędkością kopiowane są dane, użyłem polecenia „iotop” i stwierdziłem, że uruchomiono 3 rsync z tymi samymi parametrami. Podczas wyszukiwania znalazłem powyższy link, który mówi, że to normalne.

Ale robiąc iotop, aby monitorować tylko te i jedyne procesy rsync działające w systemie, widzę, że jeden proces odczytuje pliki, jeden je zapisuje, ale jeden jest bezczynny. Zachowanie wydaje się być dobre, ponieważ jeden proces robi tylko jedną rzecz na raz, ale co robi trzeci proces (widziany jako środkowy na zdjęciu poniżej)?

Użyłem polecenia iotop:

iotop -p22250 -p22251 -p22252

Oto zrzut ekranu wyjścia komendy iotop:

Dane wyjściowe polecenia iotop pokazujące proces 3 rsync

Pytam o to, ponieważ często używam rsync i chcę zrozumieć jego zachowanie dla długoterminowej korzyści. Przeczytałem nawet instrukcję, ale nie mówi nic o rozwidleniu.

Gautam Somani
źródło

Odpowiedzi:

9

rsync to program zaprojektowany jako klient i serwer. Serwer czyta, a klient pisze. Wyobraź sobie, że zamiast jednego komputera miałeś komputery w sieci, jestem pewien, że o wiele bardziej jasne, jeśli tak myślisz.

Następnie jest kontroler. Ponieważ operacje IO wiążą się z pewnym ryzykiem, problem IO nie powinien powodować całkowitego blokowania ani awarii. Tworzy więc rozwidlenie dla każdego połączenia i siedzi w tle.

Gderliwy
źródło
Dzięki za wiedzę. Rozumiem to z punktu widzenia osobnych komputerów w sieci, każdy komputer wykonuje część pracy w synchronizacji. Ale czy możesz mnie również odnieść do dokumentacji zachowania, w której mogę przeczytać więcej takich rzeczy o rsync, a także o koncepcji? Chciałbyś również wiedzieć, w jaki sposób dane odczytu są przekazywane przez proces odczytu do procesu, który pisze? Czy stosuje się koncepcję IPC?
Gautam Somani
3
@GautamSomani Oficjalna strona rsync będzie najlepszym źródłem takich informacji. rsync.samba.org Również, jak to działa, jest dostępne tutaj: rsync.samba.org/how-rsync-works.html Jeśli chcesz uzyskać dodatkowe informacje, prawdopodobnie musisz zajrzeć do źródła.
Grumpy
Oryginalny autor uruchamia rsync lokalnie. Nie łączy się z rsyncd, więc demon nie rozwiąże problemu swojego dziecka. I nie ma połączeń sieciowych. Pozostaje więc pytanie, dlaczego rsync forks uruchamia się lokalnie. Odpowiedź jest myląca i błędna.
drookie
@drookie Nie ma znaczenia, czy jest to sieć lokalna czy sieć. Działa w ten sam sposób. Wyjaśnia to również zachowanie w oficjalnym dokumencie, który podłączyłem tuż nad twoim komentarzem, który również mówi: „albo w ramach transferu lokalnego, przez zdalną powłokę lub przez gniazdo sieciowe”.
Grumpy