SSD Nodes Learn 8GB RAM — $66/rok
Przewodniki Matt ConnorAutor: Matt Connor

VPS z SSD: czym jest i co daje pamięć flash?

VPS z SSD korzysta z pamięci flash zamiast dysków talerzowych. Poznaj wpływ IOPS i niskich opóźnień oraz 3 pytania przed zakupem usługi.

Czym jest VPS z dyskiem SSD?

VPS z dyskiem SSD to wirtualny serwer prywatny, którego przestrzeń dyskowa jest oparta na pamięci flash zamiast na wirującym dysku twardym. SSD oznacza solid state drive, czyli nośnik zbudowany z układów pamięci NAND flash, bez ruchomych części. VPS oznacza virtual private server, czyli odizolowaną część fizycznego serwera hosta, działającą z własnym systemem operacyjnym i oferowaną tak, jakby była całym serwerem. Połączenie tych dwóch pojęć oznacza jedno: gdy serwer odczytuje blok danych, nie trzeba najpierw mechanicznie przesuwać żadnego elementu.

To pełna definicja. Poniżej omówiono wszystko, czego ta etykieta nie określa, ponieważ określenie „hosting SSD” na stronie z cennikiem niewiele mówi o macierzy pamięci masowej używanej przez dostawcę.

Jeśli nadal ustalane są różnice między VPS a zwykłą maszyną wirtualną, jako pierwszy należy przeczytać porównanie VPS, VM i VPC.

Dlaczego dostawcy hostingu podają szybkość pamięci masowej zamiast jej pojemności

Na stronie planu podawane są liczba rdzeni CPU, pamięć, pojemność dysku i przepustowość, a następnie pojawia się jedno określenie dysku, które wcale nie oznacza rozmiaru. Dostawcy hostingu robią tak, ponieważ pojemność od lat nie jest najważniejszym parametrem pamięci masowej. Dwie wartości decydujące o odczuwalnej szybkości serwera to IOPS (liczba operacji wejścia-wyjścia na sekundę) oraz opóźnienie (czas oczekiwania na zakończenie jednej operacji).

Przyczyną jest różnica konstrukcyjna. Dysk twardy przechowuje dane na obracających się talerzach i odczytuje je za pomocą głowicy na ruchomym ramieniu. Aby uzyskać dostęp do bloku znajdującego się w innym miejscu talerza, ramię musi wykonać wyszukiwanie, a następnie dysk musi obracać się do chwili, gdy właściwy sektor znajdzie się pod głowicą. Przy prędkości 7200 obrotów na minutę połowa obrotu trwa średnio około 4 ms, a wyszukiwanie wydłuża ten czas o kilka kolejnych milisekund. Pamięć flash nie ma ramienia ani talerza, dlatego odczyt jest wyszukiwaniem elektrycznym i trwa dziesiątki mikrosekund.

ChartRandom 4k read, published device class specifications rather than VPS measurements
The data behind this chart
[
  {
    "device": "7200 rpm hard disk",
    "random_read_iops": "125",
    "read_latency_ms": 8
  },
  {
    "device": "SATA SSD",
    "random_read_iops": "90,000",
    "read_latency_ms": 0.15
  },
  {
    "device": "NVMe SSD",
    "random_read_iops": "600,000",
    "read_latency_ms": 0.08
  }
]

Dysk twardy 7200 rpm ma deklarowaną wydajność około 125 losowych odczytów 4k na sekundę, a jeden z tych odczytów trwa około 8 ms. Dysk NVMe ma deklarowaną wydajność około 600,000 takich samych odczytów, przy czasie około 0.08 ms na odczyt. SATA SSD znajdujący się pomiędzy nimi ma deklarowaną wydajność około 90,000. Wartości te należy traktować jako rzędy wielkości, a nie jako procentową poprawę.

Należy uwzględnić dwa zastrzeżenia dotyczące tych danych. Są to opublikowane specyfikacje całych dysków należących do poszczególnych klas, czyli wartości z kart katalogowych producentów, a nie wyniki pomiarów wykonanych na VPS. Ponadto nigdy nie otrzymuje się całego dysku: wolumen jest częścią jednego urządzenia albo częścią macierzy, współdzieloną z innymi klientami na tym samym sprzęcie.

Obie kolumny odpowiadają także na różne pytania, dlatego należy analizować je łącznie. Opóźnienie oznacza czas oczekiwania na zakończenie jednej operacji. IOPS oznacza liczbę operacji, które dysk może obsługiwać jednocześnie. Pamięć flash osiąga wysokie wartości IOPS dzięki równoległości: wiele układów flash obsługuje wiele żądań jednocześnie, a głęboka kolejka utrzymuje je w stanie zajętości. Program jednowątkowy, który wykonuje jeden odczyt, czeka na jego zakończenie, a następnie wykonuje kolejny, nigdy nie osiągnie najwyższych wartości z tabeli. W jego przypadku istotna jest kolumna opóźnienia.

SSD, NVMe, SATA i PCIe: cztery terminy na czterech różnych warstwach

Kupujący mylą te terminy, ponieważ każdy z nich opisuje inną część systemu.

  • SSD to nośnik. Oznacza to, że dane są przechowywane w układach pamięci flash NAND, a nie na talerzach magnetycznych.
  • SATA to interfejs zaprojektowany w czasach dysków mechanicznych. Osiąga maksymalnie 6 Gbit/s, co odpowiada około 550 MB/s rzeczywistej przepustowości. Jego kolejka poleceń może zawierać 32 oczekujące polecenia.
  • NVMe (non-volatile memory express) to protokół opracowany specjalnie dla pamięci flash. Obsługuje wiele kolejek, z których każda może zawierać tysiące poleceń. Dzięki temu kilka rdzeni CPU może jednocześnie komunikować się z dyskiem bez współdzielenia jednej wąskiej kolejki.
  • PCIe (peripheral component interconnect express) to magistrala, za pośrednictwem której działa NVMe. Jest to ten sam rodzaj linii, do których podłącza się kartę graficzną.

Zarówno SSD SATA, jak i SSD NVMe przechowują dane w pamięci flash. Różnią się interfejsem, za pomocą którego się komunikują. SSD SATA jest nadal znacznie szybszy od dowolnego dysku twardego, ale kolejka 32 poleceń ogranicza zakres równoległego przetwarzania. Równoległe przetwarzanie jest natomiast mocną stroną pamięci flash. Opłacalność danego rozwiązania zależy od charakterystyki obciążenia, a wybór między SSD NVMe a SSD SATA omawia tę kwestię szczegółowo.

Lokalna pamięć flash czy pamięć masowa podłączona przez sieć?

Pod tą samą nazwą oferowane są dwa bardzo różne rozwiązania.

Pamięć lokalna oznacza, że dyski flash znajdują się w tym samym fizycznym hoście co VPS. Żądanie jest przesyłane przez PCIe wewnątrz jednej maszyny i natychmiast wraca. Dzięki temu opóźnienie pozostaje na poziomie dziesiątek mikrosekund.

Pamięć masowa podłączona przez sieć oznacza, że dysk wirtualny znajduje się w oddzielnym klastrze pamięci masowej, często opartym na Ceph lub SAN (storage area network), a każdy odczyt i zapis przechodzi przez sieć. Dostawcy zwykle nazywają to „cloud block storage” lub „elastic volumes”. Pamięć flash jest rzeczywista. Rzeczywiste jest również przejście przez sieć i jest ono dodawane do każdej operacji. Dlatego opóźnienie wynosi od kilkuset mikrosekund do kilku milisekund, a nie kilkadziesiąt mikrosekund.

Żadne z tych rozwiązań nie jest błędne. Pamięć masowa podłączona przez sieć przetrwa awarię hosta, ponieważ dane nigdy nie znajdowały się na tym hoście. Dostawca może uruchomić serwer na innym sprzęcie, a dysk będzie nadal dostępny. Lokalna pamięć NVMe działa szybciej i jest przypisana do jednej maszyny fizycznej, dlatego awaria sprzętu oznacza konieczność odtworzenia danych z kopii zapasowej. Należy sprawdzić, którego rozwiązania używa dany plan. Prawie nikt tego nie robi.

Jak wygląda różnica na rzeczywistym serwerze

Praca serwera obejmuje głównie małe, losowe operacje odczytu i zapisu, a nie długie transfery sekwencyjne. Dlatego wartość MB/s podawana w materiałach marketingowych jest najmniej użyteczną liczbą na stronie.

  • Zatwierdzanie transakcji w bazie danych. Baza danych, która gwarantuje trwałość danych, wywołuje fsync podczas zatwierdzania transakcji, a następnie czeka na potwierdzenie napędu, że dane zostały rzeczywiście zapisane. Na dysku twardym oczekiwanie trwa milisekundy, co ogranicza małą bazę danych do niskich setek zatwierdzeń na sekundę. Na nośniku flash to samo oczekiwanie trwa ułamek milisekundy. W tym obszarze różnica jest największa, niezależnie od tego, czy używany jest PostgreSQL, MySQL czy SQLite jako produkcyjna baza danych.
  • Instalowanie pakietów. apt install rozpakowuje tysiące małych plików i na bieżąco synchronizuje je z dyskiem. Prawie żadna z tych operacji nie jest sekwencyjna, dlatego ich wydajność ogranicza liczba IOPS.
  • Pobieranie obrazów kontenerów. docker pull pobiera skompresowane warstwy przez sieć, a następnie rozpakowuje je do tysięcy małych plików. Pobieranie jest ograniczone przepustowością sieci. Rozpakowywanie jest ograniczone wydajnością dysku. Na wolnym woluminie to właśnie na rozpakowywanie trzeba czekać.
  • Uruchamianie i ponowne uruchamianie. Podczas uruchamiania odczytywane są jądro i initramfs, a następnie setki małych plików jednostek i bibliotek współdzielonych rozproszonych na woluminie.

Żadna z tych operacji nie jest dużym odczytem sekwencyjnym. Wolumin, który osiąga 500 MB/s podczas obsługi zaledwie 3,000 IOPS, nadal będzie wydawał się powolny podczas docker compose pull, ponieważ czas oczekiwania jest liczony dla każdego pliku, a nie dla każdego megabajtu.

Dlaczego określenie „hosting SSD w chmurze” na stronie z cennikiem prawie nic nie mówi

To określenie opisuje nośnik i na tym kończy się jego znaczenie. Nie informuje, z jakim interfejsem komunikuje się dysk ani czy znajduje się on w tej samej maszynie co serwer. Nie informuje również, jaki limit może osiągnąć dany plan.

Ten limit ma największe znaczenie, a jest najrzadziej podawany w ofercie. Dostawcy ograniczają liczbę IOPS i przepustowość dla każdego woluminu, ponieważ jeden host obsługuje wielu klientów, a nieograniczony sąsiad może wyczerpać zasoby dostępne dla pozostałych. Limit kilku tysięcy IOPS na sprzęcie zdolnym do obsługi setek tysięcy IOPS jest czymś normalnym i uczciwym, ale nie wynika z opisu planu. Dwa plany mogą zawierać określenie „SSD”, podczas gdy jeden korzysta z lokalnego NVMe bez limitu dla woluminu, a drugi z woluminu współdzielonego klastra, ograniczonego do 3,000 IOPS.

Limity występują w dwóch wariantach. Stały limit jest niezmiennym górnym pułapem. Limit burst zapewnia niski poziom bazowy oraz kredyty, które przez pewien czas pozwalają go przekroczyć. Kredyty są uzupełniane, gdy wolumin pozostaje bezczynny. Limit burst może wyglądać bardzo dobrze w teście trwającym pięć minut, a następnie spaść do poziomu bazowego w trakcie importu bazy danych lub dużego przywracania. Jeśli dostawca podaje dużą wartość, należy zapytać, jak długo można ją utrzymywać.

Jak sprawdzić, co faktycznie udostępnił VPS

Z poziomu systemu gościa można zobaczyć tylko informacje przekazane przez hypervisor.

lsblk -d -o NAME,ROTA,MODEL,SIZE
cat /sys/block/vda/queue/rotational

Zastąp vda nazwą urządzenia lsblk wyświetloną dla dysku. Wartość ROTA oraz zawartość pliku rotational odczytuje się jako 0, gdy jądro otrzymało informację, że urządzenie nie jest obrotowe, oraz jako 1, gdy otrzymało informację przeciwną. Dysk wirtualny ustawia tę flagę na podstawie informacji przekazywanych przez hypervisor, dlatego opisuje ona urządzenie wirtualne, a nie znajdujący się pod nim sprzęt fizyczny. MODEL jest zwykle puste dla dysku virtio, takiego jak vda, albo zawiera ogólny ciąg, taki jak QEMU HARDDISK, w przypadku emulowanego kontrolera SATA. Systemy gościa nie powinny mieć dostępu do macierzy hosta i faktycznie go nie mają.

Flagę należy więc traktować jako wskazówkę, a pozostałe parametry zmierzyć. Uruchom test losowy 4k za pomocą fio na pliku znajdującym się na wolumenie, przy głębokości kolejki rzeczywiście używanej przez aplikację. Test powinien trwać wystarczająco długo, aby wykorzystać wszelkie dostępne kredyty burst. W Prawidłowe testowanie VPS znajdują się polecenia fio oraz typowe błędy prowadzące do zawyżonych wyników.

Trzy pytania, które należy zadać dostawcy przed zakupem

  1. Czy pamięć masowa jest lokalna dla hypervisora, czy jest podłączona przez sieć? Odpowiedź wyznacza minimalne opóźnienie i określa, co stanie się z danymi w przypadku awarii hosta fizycznego. Dostawca, który odpowiada na to jasno, uwzględnił ten problem.
  2. Jaki jest limit IOPS dla mojego woluminu? Należy poprosić o konkretną wartość. „Unlimited” i „enterprise grade” nie są wartościami liczbowymi. Jeśli rzeczywiście nie ma limitu, należy zapytać, co powstrzymuje innego użytkownika na tym samym hoście przed zajęciem całej macierzy podczas wykonywania kopii zapasowej.
  3. Czy ten limit jest stały, czy dotyczy krótkotrwałego zwiększenia wydajności? Jeśli możliwe jest krótkotrwałe zwiększenie wydajności, należy zapytać o wartość bazową i czas jego trwania. Wartość bazowa określa wydajność, z jaką będzie działać zadanie wykonywane co noc, dlatego na niej należy oprzeć planowanie.

Czy pamięć flash zużywa się i czy jest to Twój problem?

Komórki pamięci flash obsługują ograniczoną liczbę cykli zapisu, dlatego dla dysków podaje się parametr wytrzymałości w TBW (terabajtach zapisanych danych) lub DWPD (liczbie zapisów całej pojemności dysku dziennie). Dysk równomiernie rozkłada zapisy między komórkami. Nazywa się to wear levelling. Dysk przechowuje także zapasowe bloki, aby zastępować uszkodzone komórki. W przypadku VPS zużycie jest problemem dostawcy. Dostawca monitoruje liczniki SMART we własnych dyskach i wymienia sprzęt, zanim zostanie przekroczona wartość znamionowa. Twój problem jest starszy niż pamięć flash. Dysk nie jest kopią zapasową. Redundancja w warstwie woluminu również nie jest kopią zapasową, ponieważ równie wiernie kopiuje usunięcie jak dane.

Rzeczywistym kompromisem jest cena za gigabajt. Pamięć flash kosztuje więcej za gigabajt niż dyski talerzowe, dlatego plan SSD zwykle oferuje mniejszą pojemność niż plan z dyskiem twardym w tej samej cenie. Jeśli potrzebna jest duża przestrzeń na multimedia lub archiwa, należy utrzymywać mały szybki wolumin, a dużą ilość danych przechowywać w tańszym miejscu. Jest to również właściwe rozwiązanie w przypadku przechowywania kopii zapasowych poza serwerem. Informacje o tym, jak pamięć masowa wpływa na pozostałe składniki rachunku, przedstawiono w artykule ile naprawdę kosztuje VPS, który rozkłada koszty na poszczególne pozycje.

FAQ

Czy SSD VPS to to samo co NVMe VPS?

Każdy NVMe VPS jest SSD VPS, ponieważ dyski NVMe korzystają z pamięci flash. Odwrotna zależność nie zachodzi. Plan reklamowany jako „SSD” może wykorzystywać SATA SSD, czyli pamięć flash podłączoną przez interfejs zaprojektowany dla dysków mechanicznych, z kolejką 32 poleceń i ograniczeniem prędkości do około 550 MB/s. Oba rozwiązania są znacznie szybsze niż dysk twardy. Jeżeli ta różnica ma znaczenie dla obciążenia, należy zapytać dostawcę, którego rozwiązania używa dany plan, zamiast wnioskować na podstawie jego nazwy.

Czy SSD VPS przyspiesza działanie mojej witryny?

Przyspiesza operacje dyskowe i tylko je. Strona wykonująca kilka zapytań do bazy danych przy każdym żądaniu działa szybciej, ponieważ zapytania i ich zatwierdzanie generują niewielkie, losowe operacje wejścia-wyjścia. Strona obsługiwana z pamięci lub z pamięci podręcznej podczas wysyłania odpowiedzi nie korzysta z dysku, więc zmiana będzie niewielka. Przed zakupem szybszego storage w celu rozwiązania problemu należy zmierzyć, która część obsługi żądania działa wolno.

Jak sprawdzić, czy mój VPS rzeczywiście korzysta z pamięci SSD?

Z poziomu systemu gościa nie można zweryfikować fizycznego sprzętu. lsblk -d -o NAME,ROTA pokazuje, co deklaruje urządzenie wirtualne, a wartość tę ustala hypervisor, dlatego 0 jest wskazówką, a nie dowodem. Praktycznym sprawdzeniem jest pomiar: należy uruchomić fio z obciążeniem obejmującym losowe odczyty 4k przez kilka minut i sprawdzić raportowane opóźnienie. Losowe odczyty o opóźnieniu jednocyfrowym, wyrażonym w milisekundach, wskazują na dyski obrotowe lub przeciążony wolumin sieciowy. Opóźnienia rzędu dziesiątek mikrosekund wskazują na lokalną pamięć flash.

Czy sieciowa pamięć SSD jest gorsza od lokalnej pamięci NVMe?

Jest wolniejsza w przeliczeniu na pojedynczą operację i charakteryzuje się innym sposobem awarii. Do każdego odczytu i zapisu dochodzi opóźnienie związane z komunikacją sieciową, dlatego opóźnienie jest większe, mimo że oba rozwiązania korzystają z pamięci flash. W zamian dane nie znajdują się na jednym fizycznym hoście, więc awaria hosta nie powoduje utraty woluminu, a dostawca może łatwiej wykonywać snapshoty i migrację na żywo. Lokalną pamięć flash należy wybrać w przypadku bazy danych wrażliwej na opóźnienia. Storage sieciowy należy wybrać wtedy, gdy ważniejsze jest zachowanie woluminu niż różnica rzędu mikrosekund.

#vps#ssd#nvme#storage#hosting-basics