2010-11-17 10 views
7

Prędkości przesyłania SCP wydają się być znacznie ograniczone w bibliotece, z tego, do czego służy program narzędziowy scp. Rozumiem, że jest to Ruby (1.9.2-p0), ale Net :: SCP jest około 8 razy wolniejsze niż narzędzie Linux (widziane z dużych plików ... zobacz poniżej). Jestem ciekawy (szybko rzuciłem okiem na kod), jeśli tak wygląda gniazdo w Ruby lub czy można multipleksować gniazda Net :: SCP lepiej?Problemy z wydajnością w przypadku transferów Ruby i Net :: transfery SCP (gniazda)

Zauważyłem, że niezależnie od tego, jaki styl przesyłania próbowałem (seryjne przesyłanie, kanały działające asynchronicznie, przy użyciu wielu wystąpień obiektu scp) Nigdy nie mogłem uzyskać ponad 9 megabajtów/sekundę szybkości przesyłania na przesyłanie SCP. Teraz ... pozwól mi wyjaśnić szczegóły mojego dochodzenia:

1) Wypróbowane różnych algorytmów szyfrowania

używałem różnych typów szyfrowania bez większego istotna zmiana prędkości Przykład: mogę przesłać mój plik testowy 1GB za pomocą command scp (algorytm szyfrowania = arcfour128) i uzyskaj transfer na poziomie 73,3 megabajtów/s na moim wewnętrznym połączeniu gigabitowym. Nigdy nie uzyskałem więcej niż około 9 megabajtów na moim wewnętrznym łączu gigabitowym przy użyciu biblioteki Net :: SCP.upload.

2) Próbowałem różnych hostów/systemów operacyjnych

Okazało się, że Linux - przesłane> Linux był najszybszy. Serwer ssh SUHA (Windows) mógł zapewnić mi maksymalną prędkość wysyłania wynoszącą 13,5megabajtów/s (Linux -> Windows, używając algorytmu arcfour w linii poleceń scp), natomiast Linux -> Linux (używając linii poleceń arcfour, w/scp) był płonący 73,3megabajtów na sekundę. Należy wspomnieć, że te okna i maszyny Linux są dokładnie ten sam model, sprzętu, itp

3) Próbowałem różnych metod SCP przesyłania

-> używany 2 synchronicznego przesyłania! połączenia, jedna po drugiej została zakończona. -> użył 2 asynchronicznych wywołań wgrywających, jeden po drugim zaczął -> użył 2 obiektów Net :: SCP i przesłał plik do nieblokującej/asynchronicznej wersji wgrywania (tak, że działały równolegle) Żadna z tych różnych metod dać znaczący wzrost wydajności, co jest frustrujące.

Oto wyniki testu (tekst wzmocniona dla czytelności, ale podobny do wyjścia kod dostarczony):


Net::SCP 
Done creating channels 
Starting transfer of /home/seth/afpcases/systeme.afp # two upload! calls, one after another 
Finished transfer of /home/seth/afpcases/systeme.afp 
--> Duration: 126.07707 seconds (8.7168903909331 megabytes/s) should show transfer speed of serial uploads 

Starting transfer of /home/seth/afpcases/systeme.afp # two upload calls, one after another, with a wait on both channels after both have started 
Finished transfer of /home/seth/afpcases/systeme.afp 
--> Duration: 122.588784 seconds (8.964931082112699 megabytes/s) should show transfer speed of simultaneous async channels. 

Starting transfer of /home/seth/afpcases/systeme.afp # two upload calls on two separate Net::SCP objects, one after another, with a wait on both channels after both have started 
Finished transfer of /home/seth/afpcases/systeme.afp 
--> Duration: 122.822663 seconds (8.947860054133495 megabytes/s) should show transfer speed of simultaneous SCP instances 

Finished in 371.761262 seconds 

Jeśli masz duży plik (użyłem pliku ~ 1GB), możesz użyć tych testów rspec (w scp_spec.rb) lub zmienić je na wszelkie znane ci uprzęże testowe, aby zobaczyć spadek wydajności.

Jeśli nie wiesz, jak można ulepszyć tę wydajność w bibliotece, masz więcej pomysłów na temat otwarcia dodatkowej równoległej prędkości przesyłania SCP poza wywołaniem narzędzia scp za pomocą podpowłoki?

rspec Test tutaj: https://gist.github.com/703966

Odpowiedz

-3

Można spróbować Net-sftp zamiast. Sftp to nowszy protokół, a narzędzie linuksowe scp używa protokołu sftp, jeśli jest dostępny. Nie wiem, czy net-scp faktycznie używa protokołu sftp, ale nie byłbym zaskoczony, gdyby tak się nie stało.

Możesz także spróbować rsync, ale to też wymagałoby instalacji rsync na zdalnym hoście.Rsync jest jak dotąd królem prędkości ze zdalnymi transferami plików, chociaż nie mogę się zgodzić na klejnot sześciu rsync.