Czy sieci są teraz szybsze niż dyski?

126

To jest pytanie dotyczące projektowania oprogramowania

Pracowałem nad następującą regułą prędkości

cache memory > memory > disk > network

Każdy krok jest 5–10 razy większy od poprzedniego (np. Pamięć podręczna jest 10 razy szybsza niż pamięć główna).

Wygląda na to, że gigabit Ethernet ma opóźnienie mniejsze niż dysk lokalny. Może więc operacje odczytu z dużej zdalnej bazy danych w pamięci są szybsze niż odczyty z dysku lokalnego. To jest jak herezja dla starego timera, takiego jak ja. (Właśnie spędziłem trochę czasu budując lokalną pamięć podręczną na dysku, aby uniknąć konieczności robienia połączeń sieciowych - stąd moje pytanie)

Czy ktoś ma jakieś doświadczenie / liczby / porady w tej dziedzinie?

I tak, wiem, że jedynym prawdziwym sposobem na to jest budowanie i mierzenie, ale zastanawiałem się nad ogólną zasadą.

edycja :

Oto interesujące dane z pierwszej odpowiedzi:

  • Podróż w obie strony w tym samym centrum danych 500 000 ns

  • Wyszukiwanie dysku 10 000 000 ns

To dla mnie szok; moim modelem mentalnym jest to, że okrążenie sieci jest z natury wolne. I nie jest - jest 10 razy szybszy niż dysk w obie strony.

Jeff Attwood opublikował ten dobry blog na temat http://blog.codinghorror.com/the-infinite-space-between-words/

pm100
źródło
11
Czasem tak, czasem nie. Jaka sieć? Jaki dysk
John Gardeniers
1
Inne interesujące dane z pierwszej odpowiedzi: 1 MB sekwencyjny odczyt z sieci vs. dysk. Podejrzewam, że czas „podróży w obie strony” pomija jakikolwiek istotny transfer danych.
Paul
Paul: Jestem pewien, że zależy od twojego MTU. (1 MB MTU? Świetnie!)
Matt Simmons
Chciałbym zobaczyć niektóre z tych odpowiedzi na nowo, biorąc pod uwagę, że sprzęt sieciowy 10 Gb / s jest powszechnie dostępny.
pisklęta
sieć gigabit vs Raid 5?
SoilSciGuy

Odpowiedzi:

137

Oto kilka liczb, których prawdopodobnie szukasz, cytowanych przez Jeffa Deana, członka Google:

Liczby, które każdy powinien wiedzieć

L1 cache reference                             0.5 ns
Branch mispredict                              5 ns
L2 cache reference                             7 ns
Mutex lock/unlock                            100 ns (25)
Main memory reference                        100 ns
Compress 1K bytes with Zippy              10,000 ns (3,000)
Send 2K bytes over 1 Gbps network         20,000 ns
Read 1 MB sequentially from memory       250,000 ns
Round trip within same datacenter        500,000 ns
Disk seek                             10,000,000 ns
Read 1 MB sequentially from network   10,000,000 ns
Read 1 MB sequentially from disk      30,000,000 ns (20,000,000)
Send packet CA->Netherlands->CA      150,000,000 ns

Pochodzi z jego prezentacji zatytułowanej Projekty, lekcje i porady dotyczące budowania dużych systemów rozproszonych, którą można uzyskać tutaj:

Dyskusja została wygłoszona podczas Large-Scale Distributed Systems and Middleware (LADIS) 2009 .

Inne informacje


Mówi się, że gcc -O4 wysyła twój kod do Jeffa Deana w celu przepisania.


David d C e Freitas
źródło
+1 Bardzo interesujące!
9dan
1
Niektóre prezentacje mają różne wartości wskazane w nawiasach. Zakładam, że te w nawiasie były niepoprawne, a on zaktualizował wartości.
David d C e Freitas
1
Czy to wszystko w erze sprzed SSD? zobacz tutaj, aby uzyskać dalsze aktualne numery.
mat.
Tak naprawdę wykorzystałem te liczby do stworzenia prezentacji pokazującej, dlaczego dyski SSD same się opłacają , aby przekonać naszego kierownika biura, że ​​tak, potrzebujemy szybszych maszyn do pracy. Uwzględniono liczby informacji technicznych, ale w jak największym stopniu ukierunkowano je na zarządzanie nietechniczne.
brichins
19

Istnieje wiele zmiennych, jeśli chodzi o sieć vs. dysk, ale ogólnie dysk jest szybszy.

Magistrale SATA 3.0 i SAS mają przepustowość 6 Gb / s, w porównaniu do sieci 1 Gb / s minus obciążenie protokołu. Dzięki RAID-10 15k SAS sieć będzie wydawać się zbyt wolna. Ponadto dysponujesz pamięcią podręczną dysku, a także możliwością użycia dysków półprzewodnikowych, które w zależności od scenariusza mogą również zwiększyć prędkość. Losowy a sekwencyjny dostęp do danych odgrywa rolę, podobnie jak rozmiar bloku, w którym dane są przesyłane. Wszystko zależy od aplikacji używanej do uzyskania dostępu do dysku.

Teraz nawet nie poruszyłem faktu, że cokolwiek, co transportujesz przez sieć, i tak idzie na dysk lub z niego przychodzi ... więc ... znowu dysk jest szybszy.

JakeRobinson
źródło
1
Punkty za wzmiankę o RAID, która zapewnia równoległe odczyty, co jest mało prawdopodobne, aby uzyskać dostęp do sieci w najbliższym czasie. Oczywiście, jeśli mówimy o lokalnych dyskach twardych do laptopów, połączenie szybkiej sieci SAN i szybkiej sieci może być szybsze. Zwłaszcza z dyskami SSD w tej sieci SAN.
Michael Dillon
10
Sieci są z natury równoległe - o czym mówisz? Czytanie z wielu systemów w sieci łącznie jest niezwykle proste. jest to cały sens za systemami takimi jak Hadoop i MPI, nie wspominając o oczywistym BitTorrentie.
jgoldschrafe
2
Dzięki SONET / SDH możesz mieć 38 Gb / s jeszcze szybciej niż SAS. A agregację sieci można wykonać za pomocą czegoś takiego jak en.wikipedia.org/wiki/Link_aggregation
Mircea Vutcovici
10
@Jake Mówiąc o przepustowości 6 Gb / s, możesz wyraźnie rozróżnić przepustowość interfejsu od szybkości, z jaką dysk może faktycznie dostarczać dane.
NPE
4
w swoim pytaniu powiedziałem, że mówię o zdalnej bazie danych w pamięci w porównaniu do lokalnej pamięci podręcznej na dysku
pm100,
10

Zależy to od tego, czy zasób sieciowy ma dane, o które prosisz, są łatwo dostępne (w pamięci lub podobnej), czy też po prostu odczyta je z dysku.

W każdym razie przepustowość może być wyższa w niektórych przypadkach, ale uważam, że opóźnienia będą wyższe.


źródło
Masz na myśli, że czas wyszukiwania na dysku jest dłuższy niż żądanie 10 Gbit / s?
Mircea Vutcovici
1
@Mircea, ma na myśli, że sieć 10 Gbit musi skądś pobierać dane, więc będzie to ograniczone do opóźnienia tego źródła oraz opóźnienia sieci.
Chris S
Pamięć może być dyskiem RAM. Zobacz: en.wikipedia.org/wiki/Solid-state_drive#DRAM-based
Mircea Vutcovici
2

IMX dysk jest jeszcze szybszy. Teoretyczna szybkość transferu w sieci jest wysoka, ale w praktyce nie zbliżasz się do tego.

Około dwa lata temu miałem problemy z dyskiem twardym na moim laptopie i DMA wyszedł. To spowodowało, że dysk twardy był znacznie wolniejszy, a zwłaszcza wolniejszy niż sieć. Ale po przejściu na inny komputer wróciłem do pierwotnego stanu dysku twardego szybciej niż Internet.

Charles
źródło
2

Moje doświadczenie z sieciami gigabitowymi polega na tym, że mając odpowiedni serwer, możesz pokonać lokalną wydajność pod względem przepustowości i opóźnień. Zobacz Testy sieciowe: Czy uzyskujemy wydajność Gigabit?

Dla wszystkich praktycznych celów zaleciłbym traktowanie pamięci sieciowej i lokalnej jako równoważnej i używanie tylko pamięci podręcznych.

Standardowe zastrzeżenie, jak wspomniałeś, jest prawdą, ponieważ nie ma ogólnych zasad; i że tak naprawdę przez większość czasu należy pracować z dobrze skonfigurowanymi serwerami i używać wskaźników do oceny najlepszej metody przesyłania danych.

Jeśli używasz niskiej klasy komputera z wolnym dyskiem twardym, prawie na pewno szybsze będzie użycie gigabitowego połączenia sieciowego z serwerem z szybką macierzą pamięci.

Podobnie, jeśli pracujesz z dwoma maszynami o prawie identycznym sprzęcie, to opóźnienie i obciążenie sieci przyspieszyłyby lokalną pamięć masową; to naprawdę zdrowy rozsądek.

Richard Harrison
źródło
2

To zależy. Jeśli twoje operacje wejścia / wyjścia są głównie losowe, to ich płaska przepustowość prawdopodobnie nie jest tak duża w porównaniu z dostępną przepustowością sieci. Jednak większość ruchu sieciowego generowana jest ostatecznie przez procesy obejmujące operacje we / wy. Jeśli zestaw roboczy dowolnego procesu generującego ruch sieciowy zmieści się w pamięci podręcznej, przepustowość dysku nie będzie ograniczona. Jeśli przebije pamięć podręczną, dysk stanie się wąskim gardłem.

Pracuję na systemach hurtowni danych, a kanoniczne zapytanie DW to skanowanie tabeli. Jeśli zapytanie trafi w więcej niż kilka procent wierszy w tabeli faktów (lub partycji), wówczas skanowanie tabeli lub partycji przy użyciu sekwencyjnych operacji we / wy będzie bardziej wydajne niż plan kwerendy o dostępie swobodnym z wykorzystaniem wyszukiwania indeksu i wyszukiwania.

Pamięć sieciowa (tj. SAN) zwykle nie działa dobrze w przypadku obciążeń przesyłania strumieniowego, chyba że zostanie odpowiednio dostrojona. Jeśli sieć SAN jest używana w środowisku konsolidacji ogólnego przeznaczenia, prawie na pewno zostanie dostrojona dość nieoptymalnie do przesyłania strumieniowego, kolczastego obciążenia, takiego jak hurtownia danych. Widziałem, że biała księga dostawcy sugeruje, że potrzebujesz około trzykrotnie większej liczby dysków, aby uzyskać taką samą przepustowość w sieci SAN, która nie jest dostrojona do przesyłania strumieniowego we / wy, jak dla tego, który jest.

Moje doświadczenie się z tym zgadza. W rzeczywistości nigdy nie wdrożyłem hurtowni danych w środowisku konsolidacyjnym, w którym nie mogłem znacznie szybciej uruchomić tego samego procesu ETL na komputerze stacjonarnym. Miałem też przedstawicieli handlowych od jednego z głównych dostawców urządzeń SAN, którzy twierdzą, że wielu ich klientów korzysta z pamięci bezpośredniego podłączania do systemu DW, ponieważ sieci SAN nie są wystarczająco szybkie.

Pamięć sieciowa jest co najmniej o rząd wielkości droższa na IOPS niż pamięć masowa z bezpośrednim podłączeniem w przypadku obciążeń o dostępie swobodnym i bliższa o dwa rzędy wielkości droższa w przypadku przesyłania strumieniowego.

ConcernedOfTunbridgeWells
źródło
1

Mam z tego doświadczenie, że gdy masz połączenie 1 Gb i próbujesz pobrać plik, twój dysk twardy jest zwykle wąskim gardłem. Należy jednak pamiętać, że najpierw należy skonfigurować połączenie, co również wymaga czasu. Tak więc wysyłanie dużych fragmentów sieci danych może być szybsze niż dysk.

teuneboon
źródło
1
Chyba że dysk jest również wąskim gardłem po drugiej stronie połączenia sieciowego ...
@Argote: Prawda, ale jeśli oprogramowanie serwera zostało poprawnie zapisane, buforuje się w pamięci przed zapisaniem na dysk.
amfetamachina
1

Tak, ogólnie, sieci są teraz szybsze niż dyski twarde, ale z czasem może się to zmienić.

Myślę, więc jestem

Gdy aplikacja jest uruchomiona, oznacza to, że komputer hosta działa, podczas gdy praca w sieci wymaga wspólnego protokołu, sprawdzania dostępności sieci równorzędnej, bezpieczeństwa kanału ... a jeśli sieci partnerskie korzystają z różnych platform, trudniej jest osiągnąć to, co można zrobić na pojedyncza maszyna.

Wolę patrzeć na to w kategoriach kompromisów, niż na to, kto jest najsilniejszy ...

Xaqron
źródło
4
Wątpię, więc mógłbym być.
John Gardeniers
1

Musisz opisać dokładny przypadek użycia tego porównania. Dyski twarde mają czas wyszukiwania + szybkość transferu i pamięć podręczną. Sieci mają opóźnienia, szybkość przesyłania i obciążenie protokołu ...

Sądzę jednak, że twoja oryginalna pamięć podręczna> pamięć> dysk> sieć jest ogólnie prawdziwa

Zepplock
źródło
0

Dysk jest połączony z CPU za pośrednictwem magistrali SCSI, SAS lub IDE. Która jest siecią wewnętrzną z określonym protokołem - SCSI lub ATAPI. Ethernet został zaprojektowany do pracy na większych odległościach i może być znacznie wolniejszy niż SAS / SCSI / IDE. Który z nich jest szybszy, zależy od tego, które technologie porównujesz. Jeśli porównasz 20-letni dysk twardy laptopa z 10 Gb / s pamięci RAM, zwycięzcą zawsze będzie sieć. A kiedy kupujesz pamięć, musisz porównać ją z ceną i łatwością zarządzania.

Mircea Vutcovici
źródło
0

Cóż, istnieje Light Peak, który dąży do prędkości sieci 100 GB / s, która zbliża się do prędkości pamięci RAM. Oczywiście sieć może dostarczać dane tylko tak szybko, jak nadawca może wygenerować dane, tj. Jeśli nadawca odczytuje dane z dysku twardego, wówczas odbiornik otrzyma dane z taką samą prędkością jak odczyt dysku, nawet przy superszybka sieć.

Skizz
źródło
0

Należy pamiętać, że zależy to od sieci. Powiedzmy, że na przykład jesteś odpowiedzialny za wydajność w witrynie internetowej. Ta strona internetowa jest oczywiście połączona z serwerem bazy danych przez sieć lokalną, a także jest połączona z internautami przez Internet, który jest również rodzajem sieci.

W wielu przypadkach można utworzyć dedykowane łącze między serwerem WWW a serwerem bazy danych za pośrednictwem statycznych adresów IP i kabla krosowego lub automdx, aby utrzymać opóźnienie i zapewnić dedykowane łącze dla ruchu, ponieważ chcesz, aby był on bardzo szybki. Serwer bazy danych wykonuje wszelkiego rodzaju prace, aby zachować jak najwięcej db w pamięci, aw wielu przypadkach często udaje się dla całej zawartości plus kilka indeksów. Zapytania do tej bazy danych będą równie szybkie lub nawet szybsze niż zapytania na dysk.

Z drugiej strony niektóre technologie sieciowe (stan wyświetlania formularzy internetowych asp.net, patrzę na ciebie) lubią przesyłać wiele informacji do iz przeglądarki klienta jako pamięć podręczną (swego rodzaju). Jeśli jest to lokalne połączenie LAN (i w obronie formularza asp.net jest to przez większość czasu tak jest), nie jest tak źle, ale w publicznym Internecie może to absolutnie zabić wydajność, tak że często lepiej jest popchnąć to zamiast tego na bazę danych lub dysk lokalny.

Joel Coel
źródło
0

Osobiście uważam, że należy wziąć pod uwagę kilka czynników. Na przykład, jak szybka jest pamięć lub dysk, do którego uzyskujesz dostęp lokalny, w porównaniu do tego, do którego miałbyś dostęp przez sieć? Jeśli zdalne dane znajdowały się na bardzo szybkim dysku SSD i szybciej niż sieć Gigabit zainstalowana od końca do końca, pilot może być szybszy w przypadku dużych plików przesyłanych strumieniowo.

Jednak jeśli losowo uzyskiwałeś dostęp do małych jednostek danych, a sieć nie była bezbłędna lub miałeś wiele przeskoków i więcej niż tylko dostęp do niej, założę się, że lokalna pamięć podręczna jest szybsza nawet na bardzo mechanicznym napędzie dyskowym prawie 100 % czasu. Ale przywołujesz interesujący punkt i jak długo będzie potrzebne lokalne przechowywanie czegokolwiek, jeśli prędkość sieci będzie nadal rosła?

Jim
źródło