2014-11-17 15 views
8

Załóżmy, że tworzę własny akcelerator pobierania.Jak zmierzyć ciśnienie w sieci?

Załóżmy uprościć je do punktu, w którym:

  • mój kod działa na 3rd party do którego sieci parametry nie mogę kontrolować
  • element jest pobierany z jednego IP
  • liczba transferów zasięgu równoległy regulowany
  • będzie wiele transferów, aby dowiedzieć się idealne parametry
  • klienta działa Linux
  • serv er jest poza moją kontrolą
  • ścieżka jest ponad WAN i pobierania przez HTTPS
  • pobrane segmenty są duże

Jak mogę zmierzyć jeśli wystarczająco połączenia są wykorzystywane do nasycenia ścieżkę między klientem a serwerem?

Jakie bity z getsockopt(..., TCP_INFO) są rzeczywiście przydatne?

Jak szybko mogę dostosować się do różnych warunków sieci?

Możliwe jest mierzenie ciśnienia procesora i pamięci w systemie klienta, a co z ciśnieniem w sieci?

+0

Mike, twoja odpowiedź poprawnie wskazuje, że potrzebuję PABW. Jednak wspomina to tylko bez praktycznych szczegółów. Jak stwierdzono w pytaniu, "serwer jest poza moją kontrolą", więc nie mogę używać 'yaz'. –

+1

Życzę powodzenia z twoim wysiłkiem; jednak straciłem zainteresowanie odpowiadaniem na kolejne pytania dotyczące tego problemu. –

+1

Biorąc pod uwagę, że pojedyncze połączenie TCP z dużymi oknami lub małym RTT może nasycić dowolne łącze sieciowe, nie widzę korzyści, jakich można się spodziewać po wielu sesjach TCP. Każdy nowy utwór rozpocznie się od powolnego startu, a więc będzie miał niższą szybkość transferu niż miało to ustalone połączenie. –

Odpowiedz

2

Odpowiedź jest bardzo prosta: Jedno połączenie TCP wystarcza do nasycenia ścieżki między klientem a serwerem.

Przynajmniej tak jest w przypadku standardowych protokołów TCP/IP i standardowych urządzeń sieciowych między klientem a serwerem. Jeśli masz jakieś urządzenia na ścieżce, które wykonują jakieś niestandardowe przetwarzanie, które "dławią" poszczególne połączenia TCP, być może odpowiedź jest inna. Ale w takim przypadku nie można odpowiedzieć, chyba że dokładnie określisz to niestandardowe przetwarzanie. Jak skomentowali inni, w większości przypadków kształtowanie lub ograniczanie ruchu sieciowego jest prawdopodobnie wykonywane na podstawie adresów IP, a nie nagłówków TCP, więc tworzenie dodatkowych połączeń TCP nie pomoże. Jeśli twoja sprawa jest inna, o czym może być interesujące usłyszeć - proszę wyjaśnij dalej.

Moim zdaniem (tylko opinia, możesz oczywiście nie zgodzić się) prawdziwą odpowiedzią na pytanie dotyczące budowy niestandardowego "akceleratora pobierania" jest: Nie rób tego. TCP działa bardzo dobrze, tak jak jest. Poza kilkoma specjalnymi przypadkami (np. SCPS-TP) jest mało prawdopodobne, aby poprawić wydajność TCP, grając sztuczki z wieloma połączeniami lub mieszając się z opcjami gniazd. A jeśli uda Ci się poprawić wydajność, prawdopodobnie robisz to kosztem obniżenia ogólnej wydajności sieci dla innych użytkowników. To nierozsądne.

+0

Moje praktyczne doświadczenie pokazuje, że dwa długie pobrania pozwalają uzyskać lepszą przepustowość niż ta; Skaluje się dobrze do około 10 połączeń (szerokość pasma ostatniej mili). To tak, jakby ktoś przeniósł ruch międzykontynentalny do ~ 1MB/s (.5..2 w zależności od pory dnia). Nie wiem kto, ale ruch na każdym kontynencie jest w porządku. Przykładowo, speedtest.net używa 4 połączeń do pobrania i 2 do przesłania. Takie ograniczenie może być nawet pragmatyczne podejście do zapewnienia SLA dla klientów ... –

Powiązane problemy