Co dzieje się, gdy połączenie internetowe jest szybsze niż prędkość zapisu w pamięci?

28

Gdyby ktoś próbował pobrać plik z prędkością 800 Mb / s (100 MB / s) na dysk twardy o prędkości zapisu 500 Mb / s (62,5 MB / s), co by się stało? Czy system ograniczy prędkość pobierania?

ymulki
źródło
5
Jest to i jest od początku istnienia sieci, zupełnie powszechna sytuacja, gdy jesteś w szybkiej sieci, na przykład na uniwersytecie poza godzinami pracy.
Peter - Przywróć Monikę
4
Ponieważ możesz programować, możesz to łatwo zaobserwować samodzielnie. Napisz prosty serwer i klient TCP (powinieneś być w stanie znaleźć przykłady dla biblioteki gniazd w wybranym języku), pozwól serwowi dostarczać dane tak szybko, jak to możliwe, i zmodyfikuj klienta, aby odczytał te dane tylko z określoną prędkością (spać między odczytami). Sprawdź, czy dane zostały nienaruszone. Możesz nawet obserwować pakiety wysłane za pomocą wireshark lub podobnego.
Carsten S
3
Mając doświadczenie opisane w poście @ PeterA.Schneider, mogę powiedzieć, że musisz wziąć pod uwagę bufory pamięci RAM systemu operacyjnego. Dopóki nie zostaną wypełnione, możesz skutecznie przechowywać pobrane dane z prędkością pamięci RAM. (Zwykle w tysiącach megabajtów na sekundę.)
Nikt
@Nobody I oczywiście zawsze istnieją absurdalne potoki, które tworzą szkielet Internetu, które przesyłają dane tak szybko, że pamięć RAM typowego komputera nawet nie nadąża!
Cort Ammon - Przywróć Monikę
Twój komputer będzie generował żądanie ICMP, mówiąc, aby zwolniło. Jednak przy tych niewielkich prędkościach możesz równie dobrze uzyskać dysk SSD lub M.2 SSD, a teraz Twoja prędkość zapisu jest tak wysoka, że ​​100 Mb / s będzie łatwe. Niektóre pliki M.2 mają prędkość zapisu 1500 MB / s. Umieść 2 lub więcej w macierzy RAID i możesz wielokrotnie zwiększyć tę prędkość wielokrotnie. zwykły dysk SSD może wynosić 300-450 MB / s, w zależności od pojemności i marki. storagereview.com/samsung_960_pro_m2_nvme_ssd_review
cybernard

Odpowiedzi:

41

Wiele protokołów, w tym TCP, który jest najczęściej używanym protokołem w Internecie, używa czegoś, co nazywa się kontrolą przepływu. Kontrola przepływu oznacza po prostu, że TCP zapewni, że nadawca nie przytłoczy odbiornika, wysyłając pakiety szybciej niż może opróżnić swój bufor. Chodzi o to, że węzeł odbierający dane wyśle ​​pewnego rodzaju informację zwrotną do węzła wysyłającego dane, aby poinformować go o jego aktualnym stanie. Tak więc dwukierunkowe sprzężenie zwrotne pozwala obu maszynom optymalnie wykorzystać zasoby i zapobiec problemom wynikającym z niedopasowania sprzętu.

https://en.wikipedia.org/wiki/Flow_control_(data)

Sigma
źródło
2
... idealnie. Bufferbloat oznacza, że ​​prawdopodobne jest, że kilka przełączników będzie przechowywać i czekało na przesłanie ciągle rosnącej sterty pakietów (co może być nieco złagodzone przez protokół przesyłania, który wymaga sporadycznych ACK).
Eric Towers
3
Mógłbyś wspomnieć, że to odróżnia TCP (hej, ma kontrolę nad nazwą) od UDP, który chętnie będzie wysyłał dalej, niezależnie od pojemności konsumenta.
Peter - Przywróć Monikę
5
@Fabian I tak dzieje się cały czas. Pamięć podręczna dysku twardego systemu operacyjnego pozwala „wysyłać” dane na dysk twardy znacznie szybciej, niż można je zapisać, wypełniając pamięć podręczną w pamięci RAM i zapisując na dysku tak szybko, jak to możliwe. W zależności od ilości (nieużywanej) pamięci RAM w komputerze system operacyjny może buforować od kilkudziesięciu do setek MB pliku w pamięci RAM, zanim dotrze on na dysk. Rozmiar pamięci podręcznej jest jednak kompromisem, ponieważ dane, które aplikacja może uznać za trwałe na dysku, mogą nie znajdować się przez pewien czas, co może spowodować nieoczekiwaną utratę danych w przypadku awarii (zasilania) lub podobnej.
JimmyB
2
@Fabian: widać to w oknie dialogowym kopiowania plików w systemie Windows, począwszy od wersji 8.1. W trybie rozszerzonym pokazuje szybkość przesyłania i można zaobserwować, że pierwsza połowa sekundy lub tak jest bardzo szybka, a jeśli plik jest większy niż to, co można było w tym czasie przenieść, wtedy prędkość znacznie spada, aby stała stawka. Ta duża prędkość na początku była spowodowana pamięcią podręczną. Po napełnieniu prędkość jest zmniejszana.
vsz
1
@EricTowers Nie, bufor buforowy występuje tylko wtedy, gdy wąskim gardłem jest połączenie sieciowe. (Na dysku twardym może pojawić się forma bufora buforowego, która spowolni inne operacje na dysku twardym, ale nie wpłynie na inne połączenia sieciowe)
user253751,
12

co by się stało?

  • Bajty, których nie można zapisać na dysku twardym na czas, byłyby gdzieś tymczasowo buforowane; bardzo prawdopodobne, że niektóre z nich byłyby buforowane w aplikacji, która „konwertuje” ruch sieciowy na ruch HDD (tj. w przeglądarce), aw przypadku dłuższych zatorów części niższego poziomu stosu (tj. podsystem sieciowy twojego PC) miałyby również bufory na niższych poziomach, które wypełniałyby się aż do zapełnienia.
  • Informacja, że ​​dane przychodzą zbyt szybko, w pewien sposób rozprzestrzeniałaby się z powrotem do nadawcy. W przypadku TCP / IP oznaczałoby to, że istnieje część protokołu TCP, która mówi nadawcy, że powinien przestać wysyłać. Strona Wikipedii na temat TCP / IP mówi najlepiej, gdy mówi:

    Jego odpowiedzialność [TCP] obejmuje przesyłanie komunikatów od końca do końca niezależnie od sieci bazowej, a także kontrolę błędów, segmentację, kontrolę przepływu, kontrolę przeciążenia i ...

  • Na koniec „system” (niekoniecznie komputer odbiorcy, ale cały system składający się z nadawcy, sieci i odbiorcy) pośrednio „ograniczyłby” prędkość pobierania. Jednak w żadnym momencie nie istnieje zmienna „prędkości”. Zarówno ruch sieciowy, jak i ruch dysku twardego są oparte na blokach, co oznacza, że ​​opóźnienia między tymi blokami byłyby wystarczająco długie (po szybszej stronie sieci), aż „prędkość” (przepustowość) sieci będzie średnio taka sama jak wolniejsza prędkość twojego HDD.

Czy system ograniczy prędkość pobierania?

Nie dosłownie. Kilkadziesiąt lat temu komputery rzeczywiście komunikowały się z prędkościami synchronicznymi (tj. Modemami ze stałymi ustawieniami prędkości). Na pewnym stosunkowo niskim poziomie dzieje się to również dzisiaj; tzn. Twój DSL lub modem kablowy prawdopodobnie będzie miał pewną ustawioną prędkość, z jaką komunikuje się ze swoim bezpośrednim fizycznym komponentem w górę. Ale w 2017 roku wszystko to jest na tyle skomplikowane, że prawie wszystkie komponenty są dość dynamiczne. W dawnych dobrych czasach modemy często fizycznie mogły mówić tylko z pewną prędkością, a nawet trzeba było je ustalić przed nawiązaniem połączenia. Istnieją (były) pewne protokoły sieciowe, takie jak ATM, które próbowały uzyskać synchroniczną sieć rozległą, ale nie wyszły tak dobrze w porównaniu do TCP / IP.

Dzisiaj efektywna prędkość jest zwykle zawsze domyślnie osiągana przez buforowanie, kontrolę przepływu i tym podobne.

Pamiętaj również, że w twoim przykładzie może być nawet więcej uczestników. Interfejs sieciowy może mieć więcej pracy (inne połączenia z komputerem). Pewna część sieci po drodze może być zajęta (członek rodziny surfuje lub ogląda filmy). Dysk twardy może jednocześnie zapisywać 3 duże pliki. Dlatego nie ma sensu specjalnie ustawiać „prędkości”, którą można ograniczyć.

AnoE
źródło
2

Pobieranie plików (zwykle) odbywa się za pośrednictwem protokołu o nazwie TCP. W TCP nadawca nie wysyła żadnych danych, dopóki odbiorca nie będzie gotowy do ich odebrania.

Stanie się tak, że komputer zarezerwuje pewną ilość pamięci RAM, aby tymczasowo przechowywać odebrane dane przed zapisaniem ich na dysku twardym (jest to nazywane buforem). Następnie poprosi nadawcę o podanie wystarczającej ilości danych do wypełnienia bufora. Gdy odbierze dane, zacznie zapisywać dane z bufora na dysk twardy - jednak nie poprosi o więcej danych, gdy bufor jest prawie pełny.

Ogólnym efektem jest to, że nadawca po prostu czeka na nadrobienie przez odbiorcę, zanim będzie kontynuować wysyłanie.

użytkownik253751
źródło