Przejdź do treści

Szybkość dostępu do danych

Wprowadzenie

Procesor jest w stanie przetwarzać dane z prędkością miliardów operacji na sekundę, jednakże by w pełni wykorzystać swoje możliwości, CPU musi efektywnie pobierać dane na których ma prowadzić obliczenia. Niezależnie od ich źródła, czy bezpośrednio z pamięci RAM, czy z dysku, czy poprzez sieć, dostęp do danych może rodzić opóźnienia w pracy procesora. Szybkość tego dostępu bardzo często jest kluczowym elementem limitującym prędkość prowadzonych obliczeń i w efekcie całościową wydajność komputera.

Do analizy wydajności programów przydatny jest pomiar prędkości dostępu do danych. Istnieją trzy podstawowe wielkości, służące do jej opisu:

  • opóźnienie (latency), lub czas dostępu — czas potrzebny na przesłanie jednej paczki danych, mierzony od momentu wysłania żądania, do momentu uzyskania danych, wyrażany w ułamkach sekundy (ms, μs, ns);
  • przepustowość (bandwidth) — teoretyczna maksymalna szybkość przekazywania danych, mierzona w "bajtach na sekundę" np. w GB/s, MB/s lub "bitach na sekundę" np. Mb/s (1 MB = 8 Mb/s) czasem oznaczanych jako Mbit/s lub Mbps);
  • szybkość transferu (throughput, data transfer rate) — faktyczna szybkość z jaką dane są przekazywane w danej chwili, mierzona analogicznie do przepustowości (np. w MB/s lub Mb/s).

przepustowość a szybkość

przepustowość (bandwidth) a rzeczywista szybkość transferu (throughput) [źródło]

latencja pamięci

porównanie rzędów wielkości opóźnienia dla różnych rodzajów pamięci [źródło]

Szczegóły

Opóźnienie

Opóźnienie (czas dostępu) pozwala określić szybkość dostępu do danych poprzez zmierzenie czasu w jakim jedna paczka danych zostaje przekazana. Na przykład, od początku wykonania przez procesor instrukcji pobrania danych z RAM, aż do momentu gdy wartość żądanej komórki trafi do rejestru procesora. Opóźnienie pozwala określić, jak długo trwa przerwa pomiędzy wysłaniem żądania a otrzymaniem lub zapisem danych. Przepustowość nie jest w stanie tego uchwycić.

W ramach opóźnienia można wyróżnić:

  • czas potrzebny na otrzymanie żądania przez komponent będący źródłem danych,
  • czas od momentu wysłania do momentu dotarcia paczki danych do odbiorcy.

W przypadku przesyłania dużej ilości danych cała operacja pobierania trwała tyle co: opóźnienie + czas transmisji danych. Ten ostatni jest proporcjonalny do rozmiaru przesyłanych danych. Dla danego "kanału" komunikacji (łącza) między dwoma komponentami opóźnienie jest mniej więcej stałe. Największy wpływ na nie ma fizyczna odległość między komponentami. Opóźnienie może ulec zwiększeniu, jeśli dany kanał przesyłu jest obciążony innymi żądaniami.

Przy wielokrotnym pobieraniu małych ilości danych, opóźnienie pojawia się za każdym żądaniem o dane. Sumarycznie opóźnienia mogą istotnie spowolnić pracę programu. Ten problem można zniwelować poprzez pobieranie dużej ilości danych naraz. Wtedy opóźnienie każdej porcji danych zostaje zastąpione pojedynczym opóźnieniem i jest ono zaniedbywalne w porównanie do czasu potrzebnego na właściwą transmisję. Właśnie taki scenariusz jest realizowany przez techniki optymalizacji dostępu dodanych i na poziomie sprzętowych (cache) i na poziomie oprogramowania (buforowanie).

Nieścisłość pomiaru opóźnienia

W zależności od kontekstu opóźnienie może być liczone na różne sposoby. Przykładowo, można policzyć je od momentu wysłania paczki danych do momentu jej dostarczenia albo od momentu wysłania żądania o transfer do momentu otrzymania pierwszej paczki danych. Różnica leży w krótkiej chwili czasu potrzebnej na dostarczenie i przetworzenie żądania. W pierwszym przypadku mowa o opóźnieniu dotyczącym samego przesyłania danych między nadawcą a odbiorcą. Drugi sposób odzwierciedla czas oczekiwania, jaki odczuwa strona żądająca danych. W stosunku do czasu pracy programu przez opóźnienie moglibyśmy również rozumieć całkowity czas pobierania danych, a więc od wysłania żądania aż do otrzymania wszystkich danych (czyli włączyć do opóźnienia czas transmisji). Odzwierciedlałoby to czas bezczynności programu, rozumianej jako brak wykonywania instrukcji obliczeniowych.

Szybkość a przepustowość

Przepustowość odzwierciedla szybkość pamięci cache, RAM, dysku czy sieci. Podstawą jej mierzenia jest maksymalna ilość danych możliwa do przekazania w jednostce czasu (zwykle sekundzie) w idealnych warunkach. Można ją odnieść do transferu danych z pamięci cache lub RAM do CPU albo do transferu danych z dysku lub poprzez sieć do pamięci RAM. Jest to stała wartość charakteryzująca dany komponent. Rzadko kiedy aplikacja jest w stanie wykorzystać pełne możliwości przepustowości, dlatego można o niej myśleć jako o teoretycznej maksymalnej szybkości.

Szybkość transferu odzwierciedla faktyczną prędkość z jaką dane są pobierane lub zapisywane w danej chwili. W przeciwieństwie do przepustowości, nie zakładamy warunków idealnych, lecz mierzymy rzeczywisty czas, jaki zajęło dostarczenie danych. W trakcie wykonywania konkretnej operacji szybkość transferu może ulegać zmianie w czasie. Możemy więc mówić o średniej szybkości np. dla wczytania danego pliku z dysku do pamięci RAM albo średnim transferze dla całego programu. Wartość szybkości transferu nie może być wyższa od przepustowości danego łącza.

Równoległość dostępu do danych

Podobnie jak w przypadku obliczeń, dostęp do danych może zostać zrównoleglony. Różne rozwiązania sprzętowe bazują na tym, że w miejsce pojedynczego łącza wprowadzają wiele identycznych łączy między dwoma komponentami. Jest to sposób na zwiększenie przepustowości limitowanej fizycznymi możliwościami danej technologii sprzętowej.

Przepustowość może służyć do porównania między sobą szybkości urządzeń tego samego typu np. dwóch modułów RAM lub dysków różnych producentów albo różnych sprzętowych technologii komunikacji sieciowej. Z kolei szybkość transferu określa, jak efektywnie aplikacja wykorzystuje potencjał konkretnego komponentu np. dysku czy łącza sieciowego. Zestawienie szybkości z przepustowością jest naturalnym elementem analizy wydajności programu. W przypadku gdy osiągnięty procent przepustowości nie jest zbyt duży, warto postawić sobie pytanie, jakie czynniki miały wpływ na ograniczenie szybkości transferu.

Analogia

Prędkość pobierania danych z pamięci, dysku czy sieci można przez analogię przyrównać do przepływu wody przez rurę z zaworem.

  • Opóźnienie odnosi się do czasu potrzebnego wodzie na przepłynięcie rury od początku do końca. Zależy od długości rury – im dłuższa, tym dłuższe opóźnienie.
  • Przepustowość odnosi się do objętości wody, jaka teoretycznie mogłaby przepłynąć przez rurę w ciągu sekundy. Zależy od szerokości przekroju rury – dla większej rury otrzymamy większą przepustowość.
  • Szybkość transferu mówi o ilości wody, jaka w ciągu sekundy zdąży wypłynąć z rury. Zależy od stopnia otwarcia zaworu.

Jeżeli zawór jest w pełni otwarty to szybkość transferu jest równa przepustowości. Zawór w tym porównaniu reprezentuje wszelkie czynniki spowalniające przepływ danych. Szybkość transferu może też być mniejsza od przepustowości, gdy przekazywanych danych jest zwyczajnie mniej niż na to pozwala przepustowość

analogia do przepływu wody

główne miary szybkości dostępu do danych w komputerze w analogii do przepływu wody (niebieski) ze zbiornika (pomarańczowy) przez rurę (zielony) [źródło]

Typowe wartości

Dla każdego komponentu komputera można zaobserwować znacząco różne wartości przepustowości jak i opóźnień. Generalna reguła mówi, że im dalej od procesora, tym wolniejszy jest transfer. W tabeli poniżej zebrano typowe wartości ogólnodostępnych urządzeń. Dolne granice przepustowości oraz górne opóźnienia zostały wyznaczone jako minimalne dla typowych komponentów. Z kolei górne granice przepustowości oraz dolne opóźnienia zostały podane na podstawie wybranych komponentów wysokiej klasy, które są dostępne na rynku. Typowe szybkości dla sieci zostały przekonwertowane z Mbps oraz Gbps na MB/s i GB/s. W przypadku połączeń przewodowych/kablowych zostały podane w przeliczeniu na długość łącza.

Typ komponentu Przepustowość Opóźnienie
Cache procesora
L1 0.5-2 TB/s 1 ns
L2 250-600 GB/s 2.5-10 ns
L3 150-350 GB/s 10+ ns
Pamięć główna (RAM)
RAM 20-300+ GB/s 10-100 ns
Dysk
SSD 0.2-15 GB/s 20-150 μs
HDD 80-550 MB/s 2-12 ms
Sieć
Wi-Fi 5-1201 MB/s 1-15 ms
Ethernet 0.125-12.5 GB/s do 5 ns/m
Slingshot do 25 GB/s do 5 ns/m
Infiniband 12.5-50 GB/s do 5 ns/m
porównanie typowych prędkości komponentów komputera
Źródła danych umieszczonych w tabeli

Informacje o RAM i cache:

  1. Cache and memory benchmark (aida64.co.uk) (2020) – RAM, cache
  2. What’s Next For High Bandwidth Memory (semiengineering) (2019) – RAM
  3. DDR5 SDRAM (Wikipedia) (2023) – RAM
  4. G.Skills New DDR5-5600 RAM Is The Extreme Low Latency Kit Youve Been Waiting For (hothardware) (2022) – RAM
  5. Intel Core i9-9900K CPU Review (overclockers) (2018) – cache
  6. How fast can the L1 cache of a CPU reach? (Quora) (2022) – cache
  7. How high can you fly? AIDA64 memory bandwidth competition (techpowerup) (2022) – RAM, cache

Informacje o dysku:

  1. SSD vs. HDD Speeds (purestorage) (2022) – HDD, SSD
  2. Hard disk drive performance characteristics (Wikipedia) (2023) – HDD
  3. Why Latency Impacts SSD Performance More Than Bandwidth Does (extremetech) (2021) – SSD
  4. Gigabyte 8TB AIC PCIe Gen4 NVMe AORUS (x-kom) (2023) – SSD

Informacje o sieci:

  1. Different Wi-Fi Protocols and Data Rates (Intel) (2021) – Wi-Fi
  2. Wi-Fi 6 (Wikipedia) (2023) – Wi-Fi
  3. What is the average latency of a WiFi network? (Quora) (2018) – Wi-Fi
  4. Horrendous latency on 5Ghz (community.ui) (2021) – Wi-Fi
  5. Data-rate units (Wikipedia) (2023) – Ethernet, Infiniband
  6. InfiniBand (Wikipedia) (2023) – Infiniband
  7. HPE Slingshot interconnect (HPE) (2023) – Slingshot
  8. Copper is Faster than Fiber (Arista) (2019) – Ethernet, Infiniband, Slingshot

Linki


Ostatnia aktualizacja: 16 maja 2024