HDD/SSD i SATA/SAS/PCIe
 
Na rynku dostępne jest wiele różnych nośników, a także interfejsów i protokołów poprzez które można uzyskiwać dostęp do znajdujących się w nich danych. My skupimy się tutaj głównie na tych, które stosowane są w centrach danych i systemach IT. Na ich wybór często ma wpływ zarówno dostępny budżet, jak i ich docelowe zastosowanie.
 
 
Przy wyborze nośnika danych najczęściej patrzymy na jego pojemność. Oczywiście nie tylko, niemniej jest to jeden z kluczowych parametrów, który zwykle dla każdego jest najbardziej klarowny i oczywisty. Istotna jest też funkcjonalność oraz prędkość nośnika i jego interfejsu, a także wynikające z tego ilość IOPS.

Ilość operacji wejścia/wyjścia na sekundę oznaczana jest skrótem IOPS (Input/Output Operations per Second), a ilość operacji wejścia/wyjścia jaka przypada na 1GB lub 1TB, odpowiednio IOPS per GB lub IOPS per TB.

Nośnik danych podzielony jest na sektory, które swoją strukturą przypominają budowę ramki Ethernet. Z każdym sektorem powiązane są pewne informacje nadmiarowe, jak sekcja przerwy pomiędzy sektorami, sekcja służąca do synchronizacji i wskazania właściwego rozpoczęcia sektora, sekcja z danymi adresowymi i stanem sektora, sekcja właściwych danych sektora i sekcja z sumą kontrolną tych danych. Sektory te są numerowane z wykorzystaniem LBA (Logical Block Addressing), zaczynając od 0.

Operacja wejścia/wyjścia (ang. Input/Output - I/O), to po prostu operacja zapisu lub odczytu z takiego sektora. Nas zwykle interesuje ile takich operacji w okresie 1-sekundy możemy wykonać na całym dysku lub określonej jego powierzchni (IOPS per 1GB lub IOPS per 1TB). Niestety, często zmienia się mniejsze dyski na większe, nie biorąc pod uwagę, że sumaryczna prędkość do dysku pozostaje taka sama jak wcześniej. Co za tym idzie ilość IOPS per GB/TB maleje,  podczas gdy użytkownicy od nowego oczekują i większej pojemności i szybszego działania.

Dawniej 1-sektor zawsze udostępniał dla właściwych danych 512-bajtów. Tak też jest w starych i jeszcze niektórych nowych dyskach. Natomiast są już dostępne na rynku takie, które potrafią operować na 8-krotnie większych sektorach, o wielkości 4096-bajtów.

Większy sektor, to przy tej samej powierzchni mniej informacji nadmiarowych oraz mniej potrzebnych IOPS do odczytu lub zapisu tych samych danych. Dla każdego 512-bajtowego sektora mamy 65-bajtów nadmiarowych, co daje wydajność zagospodarowania przestrzeni na poziomie około 88.7%, podczas gdy przy 4096-bajtowym sektorze mamy ich tylko 115-bajtów, co daje wydajność zagospodarowania na poziomie około 97.2%.

Kiedy stosowane są sektory o wielkości 512-bajtów, potrzebne jest aż 8 razy więcej IOPS do odczytu lub zapisu tej samej ilości danych, jaka potrzebna jest przy sektorze o rozmiarze 4096-bajtów. Oczywiście, jeżeli wykorzystywane przez nas partycje dyskowe zostały poprawnie wyrównane do odpowiedniej granicy, wynikającej z wykorzystywanej wielkości sektora. Jeżeli nie, to odczyt czy zapis każdego z bloków danych, który dla przykładu w systemie plików XFS domyślnie wynosi 4096-bajtów, może zabierać dwie operacje IOPS (1-blok systemu plików będzie przecinał 2-sektory dyskowe). Na szczęście, narzędzia do obsługi dysków czy systemów plików w systemie RHEL dbają o to, aby domyślnie proponować dopasowane do wielkości sektora dyskowego wartości.
 
Warto też zaznaczyć, że pobranie większego sektora wprowadza większe opóźnienie, niż pobranie mniejszego, stąd ilość dostępnych IOPS będzie podobna lub delikatnie niższa.

To czy możemy korzystać z sektorów o wielkości 512 czy 4096 bajtów zależne jest zarówno od posiadanych nośników, jak i m.in. wsparcia w systemie operacyjnym czy kontrolerze RAID. Wsparcie dla 4096 bajtowego sektora jest w systemach operacyjnych już od dłuższego czasu, stąd można z niego korzystać w systemach RHEL6, RHEL7 i RHEL8 oraz w systemach Microsoft Windows 8 i 10, a także Microsoft Windows Server 2012, 2016 i 2019.
 

W związku z tym, że nowe systemy mają już wsparcie dla sektora 4096 bajtów, warto zwracać uwagę na to, jakie wybieramy nośniki. Dostępne na rynku nośniki mogą mieć jedno z trzech oznaczeń:
  • 512n (fizyczny rozmiar sektora 512-bajtów, logiczny rozmiar sektora 512-bajtów),
  • 512e (fizyczny rozmiar sektora 4096-bajtów, logiczny rozmiar sektora 512-bajtów),
  • 4Kn (fizyczny rozmiar sektora 4096-bajtów, logiczny rozmiar sektora 4096-bajtów).
Dyski 512e i 4Kn oznaczane są jako AF (Advanced Format), niemniej te z oznaczeniem 512e w stronę systemu operacyjnego udostępniają sektor 512 bajtowy, realizując wewnątrz dodatkowe translacje. O ile dyski niektórych producentów umożliwiają szybkie przeformatowanie z 512e na 4Kn, to obecnie można już spokojnie wybierać dyski 4Kn. Warto też pamiętać o nie mieszaniu dysków z różną wielkością sektora w ramach RAID.

Nośniki z interfejsem SATA (Serial Advanced Technology Attachment), wykorzystujące do komunikacji AHCI (Advanced Host Controller Interface) obsługują jeden rozmiar sektora - 512-bajtów lub 4096-bajtów.

Jeżeli korzystamy z interfejsu SAS (Serial Attached SCSI) i protokołu SCSI (Small Computer System Interface) lub interfejsu PCIe (Peripheral Component Interconnect Express) i protokołu NVMe (Non-Volatile Memory Express), to nośnik danych może zostać sformatowany z wykorzystaniem większych rozmiarów sektora.
 
 
Za każdym z sektorów znajduje się suma kontrolna ECC (Error Correcting Code), która służy do weryfikacji jego danych i niewielkich korekcji błędów, jak przekłamanie pojedynczego bitu. Niestety, suma ta nie zabezpiecza przed uszkodzeniem danych w trakcie transmisji pomiędzy interfejsem HBA (Host Bus Adapter), a nośnikiem danych. Jeżeli coś jest nie tak z którymś z interfejsów, expanderem czy kablem, to niestety dane będą mogły zostać błędnie zapisywane na dysku. Aby temu zapobiec, powstało rozszerzenie T10 SCSI PI (Protection Information) dla protokołu SCSI, które też zostało adoptowane do protokołu NVMe. Stąd korzystać z niego można w dyskach z interfejsem SAS i PCIe. Zapewnia ono dodatkową ochronę danych w trakcji transmisji.
 
Interfejs SATA nie wspiera tego i na nim obsługiwane są tylko sektory o wielkości 512 lub 4096 bajtów.
 
Do obsługi T10 SCSI PI dysk musi zostać sformatowany z obsługą sektora o wielkości 520 lub 4160 bajtów. W tych dodatkowych 8-bajtach per sektor znajduje się pole DIF (Data Integrity Filed). Pole to umożliwia zweryfikowanie przez obie strony poprawności przesłanych danych (zaraz po ich odbiorze).

Systemy takie jak RHEL wspierają T10 SCSI PI, w tym dodatkowo rozszerzenie DIX (Data Integrity Extension), dzięki któremu mają możliwość kalkulacji tych sum wyżej na stosie obsługi. W ten sposób zapewnić można kontrolę integralności danych nie tylko pomiędzy interfejsem HBA, a nośnikiem. Dzięki DIX może się ona odbywać pomiędzy samym jądrem systemu czy nawet aplikacją systemu operacyjnego, a nośnikiem danych. Oczywiście, taka weryfikacja integralności end-to-end jest możliwa tylko kiedy korzystamy z interfejsu SAS lub PCIe i uzyskujemy bezpośrednio dostęp do urządzenia blokowego lub korzystamy z systemu plików ze wsparciem Direct I/O, jak XFS.

Zapraszamy do This email address is being protected from spambots. You need JavaScript enabled to view it. wszystkich zainteresowanych rozwiązaniami pamięci masowej (ang. storage), w tym tradycyjnymi macierzami dyskowymi, jak i rozwiązań SDS (Software-Defined Storage). Jesteśmy partnerem wielu znanych producentów i za naszym pośrednictwem można zakupić ich produkty na polskim rynku.

Kiedy korzystamy z SAS lub PCIe oraz kontrolera RAID, to rozmiar sektora może zostać rozszerzony nawet do 528 lub 4224 bajtów. Niektóre rozwiązania macierzy dyskowych wymagają takiej wielkości sektorów w przypadku, gdy dyski działają w RAID (Redundant Array of Independent Disks), a nie w JBOD (Just a Bunch Of Disks). W tych kolejnych 8-bajtach znajdują się dodatkowe informacje związane z poprawnością sektora, które stosowane przez niektóre kontrolery RAID (dla przykładu Logically Bad Block Checking).

Stąd w dyskach SATA mamy obsługę sektorów tylko o wielkości 512 lub 4096 bajtów, a przy dyskach SAS i PCIe/NVMe sektorów o wielkościach 512, 520 i 528 bajtów lub 4096, 4160 i 4224 bajtów. O ile sektory te mogą mieć wewnętrznie różną wielkość, to do systemu operacyjnego prezentowana jest wielkość 512 lub 4096 bajtów.

Dzięki tym rozszerzeniom, dane na nośnikach z interfejsami SAS i PCIe są na pewno bezpieczniejsze.

Warto zaznaczyć tutaj, że sprzętowe kontrolery RAID dla nośników PCIe/NVMe są obecnie jeszcze mało popularne i najczęściej podłącza się je bezpośrednio do gniazd PCIe. Stąd by zapewnić bezpieczeństwo danych, często pozostaje nam użycie programowego kontrolera RAID lub stosowanie replikacji pomiędzy nośnikami.
 

Kiedy takie nośniki mają być wykorzystywane jako BlueStore czy FileStore w ramach Red Hat Ceph Storage, to i tak sprzętowy kontroler RAID nie jest nam potrzebny. O niezawodność i dostępność danych dba wbudowany algorytm CRUSH (Controlled Replication Under Scalable Hashing).
 
Podobnie, kiedy używamy LINBIT SDS z wbudowaną obsługą DRBD (Distributed Replicated Block Device). Zatem brak sprzętowego kontrolera RAID niekoniecznie musi być jakimś problemem.

Inna rzecz, że dostępny w ramach RHEL programowy MD/RAID jest i bezpieczny i wydajny. Jego zastosowanie eliminuje też problemy wynikające z awarii sprzętowego kontrolera RAID, a w przypadku awarii sprzętowej daje możliwość łatwego przepięcia i użycia nośników w innym serwerze.
 
W ramach systemu RHEL8 mamy też VDO (Virtual Data Optimizer), które zapewnia bardzo dużą redukcję danych poprzez deduplikację (ang. Deduplication), kompresję (ang. Compression) oraz eliminację bloków zerowych (ang. Zero-Block Elimination)Da się też w nim uruchomić replikację blokową z użyciem LINBIT HA czy LINBIT DR.

Jeżeli boimy się awarii sprzętowego kontrolera RAID, to zastosować można droższe dwuportowe dyski SAS, które da się podłączyć bezpośrednio lub poprzez dwa SAS expandery do specjalnych niezależnych, sprzętowych kontrolerów RAID (wewnątrz tego samego serwera lub dwóch różnych). W takich przypadkach możemy też zastosować tradycyjne macierze dyskowe, co za pewne będzie tańsze od serwera z drogimi kontrolerami. Niemniej, dwuportowe dyski SAS naprawdę nie są tanie, a kontrolery nie ulegają tak często awarii, jak nośniki.

Dlatego my często polecamy rozwiązania SDS (Software-Defiend Storage), które dają większą swobodę, są bezpieczne oraz bardzo łatwo się skalują i dają rozbudowywać. Dodatkową zaletą niektórych rozwiązań SDS jest możliwość wykorzystywania często już posiadanych i dość uniwersalnych umiejętności z obsługi czy diagnozy systemów GNU/Linux. Do takich rozwiązań należy Red Hat Ceph Storage, Red Hat Gluster Storage i LINBIT SDS.
 
Zainteresowanych macierzami dyskowymi czy pamięciami masowymi nowej generacji (NextGen Storage) zachęcamy do zapoznania się z IBM FlashSystem 5200, IBM FlashSystem 7200 i IBM FlashSystem 9200.

Na ilość dostępnych IOPS ma także wpływ ilość i pojemność kolejek interfejsu nośnika oraz sposób ich obsługiSATA posiada 1-kolejkę, w której może pomieścić do 32-poleceń. Do ich obsługi może stosować SATA NCQ (Native Command Queuing). SAS posiada 1-kolejkę, w której może pomieścić od 128 do 256 poleceń, a do ich obsługi może stosować SCSI TCQ (Tagged Command Queuing).
 

Mechanizm kolejkowania zadań SATA NCQ (Native Command Queuing) ustawia wysłane polecenia tak, aby odczyt i zapis realizowany był na nośniku wydajnie. Dla dysków talerzowych (HDD) będzie to ustawianie poleceń w kolejności, która pozwoli więcej odczytać lub zapisać w trakcie jednego ruchu głowicy, a dla dysków półprzewodnikowych (SSD) kolejkowanie zadań tak, by dało się je jednocześnie wykonywać na wielu kościach NAND (NOT AND) czy by były one wykonywane przez dysk, kiedy procesor ma inne zadania. Ma to pozytywny wpływ na wydajność, prędkość i zużycie nośnika (mniej ruchów głowicy i mniej operacji w ramach jednej kości NAND).

W protokole SCSI stosowany jest mechanizm SCSI TCQ (Tagged Command Queuing), który w trybie "Simple" działa podobnie do SATA NCQ. Natomiast udostępnia on jeszcze tryb "Ordered", gdzie polecenia są wykonywane w kolejności, w jakiej trafiają do dysku oraz "Head of Queue", gdzie dane polecenie zostanie wykonane priorytetowo zaraz za tym, które jest aktualnie obsługiwane.

Stosowanie SATA NCQ nie zawsze może być korzystne, gdyż nośnik nie zachowuje się tak, jak oczekuje tego system operacyjny, który zakłada, że wykona on operacje w takiej kolejności, w jakiej są mu one zlecane. W skrajnych przypadkach, niektóre operacje mogą być zbyt długo opóźniane. SCSI TCQ potrafi zmienić kolejność dla poleceń, które mają zdefiniowane określone wymagania czy ramy czasowe obsługi, których nie można przekroczyć. Niemniej, jako że NCQ/TCQ nie zawsze mają sens, takie systemy jak RHEL umożliwiają ich aktywację i deaktywację.

Dla PCIe/NVMe wykorzystanie kolejek ma o wiele większe znaczenie dla wydajności i operacji IOPS. Ich efektywne wykorzystanie bardziej zależy od wybranego procesora oraz jakości wybranych dysków SSD, które są w stanie wewnętrznie równolegle obsługiwać wiele IOPS. Kolejki NVMe nazywane są ścieżkami IO (ang. IO Paths). NVMe udostępnia per rdzeń procesora powiązany z daną szyną PCIe (zgodnie z topologią NUMA) minimum 1-kolejkę dla wykonanych I/O (ang. I/O Completion Queue) oraz minimum 1-kolejkę dla zlecanych I/O (ang. I/O Submission Queue). Wiele kolejek do zlecenia I/O może korzystać z jednej kolejki wykonanych I/O, gdzie trafiają tylko informacje o tym co zostało już zrealizowane.
 
Polecenia z kolejek zlecanych I/O wykonywane są w kolejności w jakiej tam trafiają, zgodnie z wyznaczonym priorytetem lub zgodnie z optymalizacją na bazie NCQ/TCQ. Maksymalnie takich kolejek może być 64K, a każda z nich może pomieścić do 64K poleceń. Taka ilość kolejek pozwala wydajnie i równolegle realizować wiele IOPS na wielu kościach NAND dysku SSD. Przekłada się to na lepsze wykorzystanie procesora, który nie musi oczekiwać na zakończenie operacji I/O oraz wydajniejszą i bardziej efektywną obsługę aplikacji tworzonych w architekturze mikroserwisowej. Bez opóźnień mogą one równolegle realizować więcej różnych operacji dyskowych.
 
Dzięki tym ulepszeniom, korzystając z nośników SSD z obsługą PCIe/NVMe nie musimy w ogóle przejmować się ilością IOPS. Zwykle dostarczą ich one dużo więcej, niż będzie nam potrzebne. Z dyskami HDD sprawa wygląda całkiem inaczej i warto dokładniej przekalkulować ilość potrzebnych IOPS.

Kolejkowanie i zarządzanie priorytetami poleceń I/O może być realizowane także na poziomie systemu RHELRHEL8 udostępnia aż 4 algorytmy kolejkowania operacji I/O do dysków:
  • none - przekazuje zapytania dalej w takiej kolejności, w jakiej odebrał. Działa jak kolejka FIFO (First-In First-Out). Stosowany tam, gdzie chcemy w pełni bazować na kolejkach zaimplementowanych na poziomie HBA i nośnika.
  • mq-deadline - dzieli operacje I/O na odczytu i zapisu, a następnie w ramach każdej z grup układa je w porządku rosnącym według adresów LBA. W ramach każdej z grup da się zdefiniować "deadline", czyli maksymalny czas obsługi. Domyślnie operacje odczytu mają zagwarantowany niższy czas obsługi, czyli są traktowane z wyższym priorytetem. Dobrze sprawdza się przy dyskach HDD z obsługą SAS oraz w maszynach wirtualnych.
  • bfq - stara się nie doprowadzić do tego, aby jedna aplikacja wykorzystała całe pasmo i sprawiedliwie zarządzać dostępem do nośnika (obsługuje też klasy priorytetów z ionice). BFQ (Budget Fair Queueing) udostępnia każdemu z procesów lub grup (obsługa cgroups) budżet w postaci ilości sektorów, jakie może przetworzyć. Domyślnie wykorzystuje heurystyki, które zapewniają niższe opóźnienia, kosztem rezygnacji z większej przepustowości. Bardzo dobrze się sprawdza w systemach, gdzie działa dużo interaktywnych aplikacji (np. stacja robocza) oraz przy dyskach HDD z obsługą SATA.
  • kyber - dzięki swojej prostocie dedykowany jest dla szybkich urządzeń z dużą ilością kolejek. Dzieli operacje I/O na dwie główne kolejki. Do jednej trafiają synchroniczne zapisy i operacje odczytu, a do drugiej asynchroniczne operacje zapisu. Zwykle proces jest wstrzymywany do czasu odczytania danych, stąd te operacje mają większy priorytet. Za to proces, który zlecił zapis może zwykle działać dalej, stąd zapis może zostać opóźniony. Kyber umożliwia określenie minimalnych opóźnień dla operacji, które mogą wstrzymywać procesy, jak odczytu oraz synchroniczny zapis. Powstał z myślą o nośnikach SSD z obsługą PCIe/NVMe.
Przy nośnikach półprzewodnikowych (SSD), a w szczególności tych z obsługą PCIe/NVMe dodatkowe kolejkowanie I/O na poziomie systemu operacyjnego nie zawsze pomaga. Choć zastosowanie "kyber" wydaje się sensowne, to czasem by zmniejszyć obciążenie procesora warto rozważyć algorytm "none".

Na ilość IOPS ma również wpływ tryby pracy i prędkość interfejsu nośnika. SATA (Serial ATA) obsługuje tylko jeden kanał transmisji, który działa w trybie Half-Duplex. Oznacza to, że w danej chwili można w nim prowadzić albo transmisję, albo odbiór. W zależności od wersji standardu SATA, kanał ten może pracować z różną prędkością. 
Standard       Rok wydania     Prędkość interfejsu     Tryb pracy     Kodowanie     Transfer danych  
SATA I 2003 1.5 Gbps Half-Duplex 8b/10b 150 MB/s
SATA II 2004 3.0 Gbps Half-Duplex 8b/10b 300 MB/s
SATA III 2009 6.0 Gbps Half-Duplex 8b/10b 600 MB/s 

O ile kanał ten można podłączyć poprzez specjalny SATA Port Selector do dwóch HBA, to w danej chwili tylko jedno połączenie może być aktywne. Dla porównania, dwuportowe dyski SAS można podłączyć bezpośrednio lub poprzez specjalne SAS Expander do dwóch HBA i oba połączenia mogą być aktywne.
 
Interfejs SAS (Serial Attached SCSI) ma 1 lub 2 porty. Każdy z portów posiada 2-kanały o tej samej prędkości. Dzięki temu możliwa jest praca w trybie Full-Duplex, czyli możliwość jednoczesnej transmisji i odczytu w ramach 1-portu. Kanały te także można wykorzystywać do transmisji w tym samym kierunku, czyli tylko do zapisu lub tylko do odczytu w danym momencie. Interfejsy z 1-portem (2-kanałami) oznaczane są jako "narrow", a interfejsy z 2-portami (4-kanałami) oznaczane są jako "wide". W tabeli podajemy prędkość 1-kanału, stąd maksymalna prędkość poprzez interfejs SAS będzie odpowiednio 2 lub 4 krotnie wyższa.

Standard       Rok wydania     Prędkość 1-kanału      Tryb pracy     Kodowanie     Transfer danych 1-kanału  
SAS-1 3G 2004 3 Gbps Full-Duplex 8b/10b 300 MB/s
SAS-2 6G 2009 6 Gbps Full-Duplex 8b/10b 500 MB/s
SAS-3 12G 2013 12 Gbps Full-Duplex 8b/10b 1,200 MB/s
SAS-4 24G 2017 24 Gbps Full-Duplex  128b/150b  2,250 MB/s

Do interfejsu SAS można także podłączać urządzenia SATA, ale nie odwrotnie. Warto o tym pamiętać przy wyborze płyty głównej lub kontrolera RAID. SAS udostępnia 3 protokoły transportu:
  • SSP (Serial SCSI Protocol) - do komunikacji z urządzeniami SCSI,
  • STP (Serial ATA Tunneled Protocol) - do komunikacji z urządzeniami SATA,
  • SMP (Serial Management Protocol) - do zarządzania expanderami SAS ("przełączniki" SAS).
Interfejsy SATA i SAS komunikują się z procesorem poprzez dodatkowe układy. Interfejs PCIe robi to bezpośrednio wykorzystując do tego celu różną ilość linii. Każda linia PCIe działa w Full-Duplex, co oznacza że składa się z dwóch niezależnych ścieżek. Jednej do transmisji (TX) i drugiej do odbioru (RX).

W nowej architekturze PCIe/NVMe zmniejsza się droga do nośnika, jako że może być on bezpośrednio wpięty do gniazdka PCIe, które połączone jest bezpośrednio z CPU. W przypadku SATA czy SAS komunikacja taka odbywała się przez dodatkowy kontroler. Należy jednak pamiętać, że wydajny i równoległy dostęp do nośnika SSD w architekturze PCIe/NVMe jest teraz o wiele bardziej zależny od wykorzystanego CPU i ilości dostępnych w nim rdzeni.
 
Tam gdzie potrzebna jest bardzo duża wydajność i ilością IOPS, warto przyjąć nawet 10 rdzeni CPU per jeden większy nośnik PCIe/NVMe. W innym przypadku można spokojnie przyjąć 5-6 rdzeni CPU per jeden nośnik PCIe/NVMe. Oczywiście będzie to też zależne od częstotliwości taktowania CPU czy typu dysku SSD. Natomiast PCIe/NVMe będzie wymagało sporo mniejszej ilości cykli CPU do obsługi tej samej ilości IOPS co wykorzystanie SATA lub SAS. Dlatego ta większa ilość rdzeni CPU wynika głównie z chęci osiągnięcia znacznie większej ilości IOPS niż wcześniej, co możliwe jest dzięki temu, że przy NVMe z jednym nośnikiem SSD może komunikować się równolegle wiele rdzeni CPU.

W przypadku wymiarowania z użyciem technologii NVMe, zawsze należy pamiętać o dodatkowych rdzeniach CPU per nośnik PCIe/NVMe, a także tym by CPU miało tyle kości pamięci RAM, by w pełni mogło wykorzystywać wszystkie gniazda PCIe do których będą podłączone karty sieciowe czy nośniki SSD.

Zapraszamy do This email address is being protected from spambots. You need JavaScript enabled to view it. wszystkich zainteresowanych rozwiązaniami pamięci masowej (ang. storage), w tym tradycyjnymi macierzami dyskowymi, jak i rozwiązań SDS (Software-Defined Storage). Jesteśmy partnerem wielu znanych producentów i za naszym pośrednictwem można zakupić ich produkty na polskim rynku.

Różne układy procesorów obsługują różną ilość linii PCIe. Stąd to właśnie on będzie miał decydujący wpływ na to, ile linii PCIe będziemy mogli wykorzystać. Należy też pamiętać, że każda z linii PCIe realizuje połączenie point-to-point i nie jest współdzielona z innymi elementami.

Jeżeli gdzieś jest podana sumaryczna prędkość transmisji i odbioru (ang. bi-directional bandwith), to będzie ona dwa razy większa od podanej w naszych tabelach.
          Prędkość transmisji per ilość linii
Standard   Rok    Transfer   Tryb pracy   Kodowanie   x1  x4  x8 x16
PCIe 1.0 2003 2.5 GT/s Full-Duplex 8b/10b 250 MB/s 1,000 MB/s 2,000 MB/s 4,000 MB/s
PCIe 2.0 2007 5.0 GT/s Full-Duplex 8b/10b 500 MB/s 2,000 MB/s 4,000 MB/s 8,000 MB/s
PCIe 3.0 2010 8.0 GT/s Full-Duplex 128b/130b 984.6 MB/s 3,938 MB/s 7,877 MB/s 15,754 MB/s
PCIe 4.0 2017 16 GT/s Full-Duplex  128b/130b  1,969 MB/s 7,877 MB/s 15,754 MB/s 31,508 MB/s
PCIe 5.0 2019 32 GT/s Full-Duplex  128b/130b   3,938 MB/s      15,754 MB/s     31,508 MB/s     63,015 MB/s   

W drugiej tabeli zestawiliśmy prędkości podane w Gbps.
          Prędkość transmisji per ilość linii
Standard   Rok    Transfer   Tryb pracy   Kodowanie   x1  x4  x8 x16
PCIe 1.0 2003 2.5 GT/s Full-Duplex 8b/10b 2 Gbps 8 Gbps 16 Gbps 32 Gbps
PCIe 2.0 2007 5.0 GT/s Full-Duplex 8b/10b 4 Gbps 16 Gbps 32 Gbps 64 Gbps
PCIe 3.0 2010 8.0 GT/s Full-Duplex 128b/130b 7.876 Gbps 31.504 Gbps 63.016 Gbps 126.03 Gbps
PCIe 4.0 2017 16 GT/s Full-Duplex  128b/130b  15.724 Gbps 63.016 Gbps 126.03 Gbps 252.06 Gbps
PCIe 5.0 2019 32 GT/s Full-Duplex  128b/130b   63.016 Gbps    252.06 Gbps    504.128 Gbps   1008.256 Gbps 

Realne prędkości dla SATA, SAS i PCIe będą niższe od podanych w tabelach. Podane wartości mają tylko przybliżyć różnice pomiędzy tymi interfejsami. Ważne też aby pamiętać, że zwykle sprzęt zgodny z najnowszym standardem nie jest dostępny na rynku od razu. Wynika to z potrzeby przeprowadzenia certyfikacji i zgodności z innymi dostępnymi na rynku technologiami, a także potrzebą solidnego przetestowania oraz przygotowania oprogramowania i sterowników.
 
 
Inna rzecz, że zwykle wszystko co dotyczy najnowszych standardów ma wyższą cenę i nie zawsze się opłaca od razu w takie technologie inwestować. Stąd starsza technologia stopniowo zanika, a nowa staje się tańsza i bardziej popularna. Dlatego obecnie zwykle będziemy mieli do czynienia z SATA III, SAS-3 i PCIe 3.0.

Ilość IOPS bardzo powiązana jest z prędkością samego nośnika. Na rynku są dostępne zarówno dyski talerzowe, jak i nośniki półprzewodnikowe. Dyski talerzowe HDD (ang. Hard Disk Drive) są na rynku od dawna i charakteryzują się niższą ceną per TB oraz niewielką szybkością, większym zużyciem energii i większymi opóźnieniami. Nośniki półprzewodnikowe SSD (ang. Solid State Drive) są z nami stosunkowo od niedawna, stąd ich cena per TB jest wciąż bardzo wysoka. Niemniej, oferują one o wiele większą prędkość oraz niższe opóźnienia.

Szybkość dysku HDD powiązana jest z ilością obrotów jego talerza na minutę - RPM (ang. Revolutions Per Minute). W przypadku dysków z interfejsem SATA będzie to zwykle 7,200 RPM, a w przypadku dysków z interfejsem SAS zwykle 7,200 RPM, 10,000 RPM lub 15,000 RPM.
 
Wytrzymałość dysków HDD określana jest parametrem MTBF (Mean Time Between Failures), który służy do szacowania średniej ilości godzin pomiędzy awariami dla danej serii dysków czy bardziej prawdopodobieństwa ich awarii po danym czasie, gdy działają one nieprzerwanie lub AFR (Annualized Failure Rate), który określa % używanych na rynku dysków danej serii, jaki może ulec awarii w okresie roku. W obu przypadkach są to tylko pewne dane statystyczne czy przybliżenia, które przy niewielkiej ilości dysków mogą okazać się nietrafne.
 
Dyski HDD z interfejsem SAS oferują lepsze wartości parametrów MTBF i AFR od tych z interfejsem SATA.

Nośnik SSD składa się z wielu układów, a każdy z układów składa się z wielu kości NAND. W ramach każdej z kości NAND mamy 1-poziom (2D NAND) lub więcej poziomów (3D-NAND), które składają się z bloków zawierających strony. Każda ze stron składa się z komórek, składujących bity danych.
 
Prędkość dysku SSD zależy głównie od ilości i szybkości kości NAND, a także użytego interfejsu. Ilość kości NAND ma znaczenia, jako że nośnik SSD może realizować zlecane operacje na wielu kościach NAND równolegle. NAND, czyli NOT AND to typ bramki logicznej w komórce, stosowany w pamięci typu Flash. Dostępne są też pamięci Flash wykorzystujące bramki NOR, czyli NOT OR. Niemniej, mają one gorszy czas dostępu i mniejszą trwałość.

Dane na nośnikach SSD są pisane i czytane z wykorzystaniem pojedynczych stron, najczęściej o wielkości 4KB, 8KB lub 16KB, a usuwane całymi blokami. Zwykle blok składa się z od 128 do 256 stron.

Odczyt danych z nośnika SSD jest bardzo szybki. O ile zapis jest bardzo szybki w stosunku do dysku HDD, to nieco wolniejszy niż odczyt z nośnika SSD. Wynika to z tego, że komórka na nośniku SSD musi zostać wyczyszczona przed zapisem. Stąd pierwszy zapis jest szybszy, gdyż kolejne w to samo miejsce wymagają kilku operacji. Dodatkowo, wyczyszczenie jest operacją na poziomie bloku, podczas gdy zapis lub odczyt jest operacją na poziomie strony. Zatem kiedy zmianie ulega pojedynczy bit lub strona, to wymagane jest przekopiowanie całego bloku do pamięci, wymazanie jego zawartości, a następnie zapisanie go w docelowej formie ale już w innym bloku. Zapis w innym bloku sprawia, że operacja usuwania może być realizowana asynchronicznie, przez co wydajniej.
 
Każdy z dysków ma pewną wytrzymałość, która określana jest przy użyciu ilości opisanych wyżej operacji E/P (Program/Erase) na dzień, w skali okresu gwarancji nośnika  DWPD (Drive Writes Per Day). Czasem też podawany jest współczynnik TBW (Terabytes Written), który określa ile TB danych można zapisać na nośnik w okresie trwania gwarancji (zwykle większe dyski mają większy współczynnik TBW).

Dla serwerów Cisco UCS (Unified Computing System) dostępne są dwie główne klasy nośników SSD:
  • Enterprise Performance (EP) - szybkie nośniki SSD, oferujące wytrzymałość 10 DWPD lub 3 DWPD. Nadają się do zastosowań z dużą ilością zapisów oraz bardzo dużą ilością IOPS.
  • Enterprise Value (EV) - tańsze i nieco wolniejsze nośniki SSD, oferujące wytrzymałość 1 DWPD. Nadają się do zastosowań z przeważającą ilością odczytów.
Ilość IOPS w nawet najtańszych nośnikach SSD jest o wiele większa, niż na najszybszych dyskach HDD.

Kiedy nośnik SSD zaczyna się wypełniać, algorytm ma więcej trudności w zlokalizowaniu wolnych bloków, stąd nośnik może działać wolniej. Aby tego uniknąć i zapewnić jak najdłuższe życie nośnika, stosowane są:
  • Wear Leveling - kontroler stara się rozkładać operacje powiązane z P/E równomiernie na dostępnych kościach NAND. W tym celu też modyfikowane są mapowania numerów LBA.
  • TRIM command - w trakcie usuwania pliku system operacyjny może poinformować nośnik o tym, które z bloków nie są już używane, mogą zostać oznaczone jako wyczyszczone i przygotowane do zapisu przez GC (Garbage Collection). Przyśpiesza to znacząco zapis. W trakcie obsługi polecenia TRIM, dane z bloku nie muszą być nigdzie kopiowane, stąd też zmniejsza to zużycie nośnika SSD.
  • Over Provisioning - miejsce niedostępne dla użytkownika, stosowane w trakcie operacji E/P oraz przez algorytm Wear Leaving. Zapewnia ono zachowanie lepszej wydajności i trwałości nośnika.
O ile TRIM obsługiwany jest w systemie RHEL7 i RHEL8 oraz dostępnym w nich MD/RAID, to przy stosowaniu dysków SSD warto się upewnić, że obsługuje go wykorzystywany sprzętowy kontroler RAID.

Komórki mogące przechowywać więcej stanów szybciej się zużywają. Niemniej, umożliwiają zmieszczenie większej ilości danych na tej samej powierzchni. Nośniki z nimi są też mniej wydajne, jako że statystycznie więcej operacji trafia do pojedynczej kości NAND. Za to ich cena nie jest wysoka. Komórki mogące przechowywać mniej stanów są bardziej trwałe i o wiele szybsze. Niemniej, znowu cena takich nośników jest znacząco wyższa.

W nośnikach SSD klasy Enterprise spotkamy kości NAND w technologii:
  • TLC (Three Level Cell) - 3-bity per komórka (8-stanów), żywotność ~3k P/E, wolniejsze od eMLC/MLC i SLC.
  • MLC (Multi Level Cell) - 2-bity per komórka (4-stany), żywotność ~5k-15k P/E, wolniejsze od SLC.
  • eMLC (Enterprise Multi Level Cell) - 2-bity per komórka (4-stany), ~20k-30k P/E, wolniejsze od SLC.
  • SLC (Single Level Cell) - 1-bit per komórka (2-stany,, żywotność ~50k-100k P/E, najszybsze.
Kości NAND w technologii eMLC wykorzystują komórki MLC, które zaprogramowane są na poziomie kontrolera nośnika w nieco inny sposób. Zwiększa się w ten sposób ich wytrzymałość, możliwość pracy przy większej temperaturze oraz zmniejsza stopę błędów. Zwykle mają one mniejszą gęstość komórek z danymi, większe różnice w poziomach czy długościach napięć oraz delikatnie wolniejszą prędkość zapisu i usuwania.

Zapraszamy do This email address is being protected from spambots. You need JavaScript enabled to view it. wszystkich zainteresowanych rozwiązaniami pamięci masowej (ang. storage), w tym tradycyjnymi macierzami dyskowymi, jak i rozwiązań SDS (Software-Defined Storage). Jesteśmy partnerem wielu znanych producentów i za naszym pośrednictwem można zakupić ich produkty na polskim rynku.

Przy określaniu prędkości dysku HDD czy SSD trzeba wziąć pod uwagę zarówno dysk, jak i jego interfejs (SATA, SAS lub PCIe). Dla dysków SSD ograniczeniem będzie najczęściej prędkość interfejsu, a dla HDD prędkość dysku. Na tym etapie najlepiej cofnąć się do wcześniejszych tabelek z prędkościami poszczególnych interfejsów. Oczywiście, dokładne prędkości będą bardzo zależne od konkretnego modelu danego dysku, a także metody weryfikacji. Też będzie to inaczej wyglądało, kiedy takie dyski wykorzystamy w ramach JBOD, RAID czy SDS.
 
 
Stąd takie rzeczy najlepiej weryfikować praktycznie lub w tabelach danego producenta. Najczęściej ilość IOPS określana jest tam przy 70% losowych operacji odczytu i 30% losowych operacji zapisów, a prędkość w MB/s oddzielnie dla sekwencyjnego zapisu i oddzielnie dla sekwencyjnego odczytu.
 
Wpływ na IOPS oraz MB/s ma wszystko co do tej pory przedstawiliśmy i jeszcze więcej, gdyż poruszyliśmy tutaj tylko bardziej istotne różnice, parametry i zagadnienia.

Na koniec warto jeszcze dodać, że dyski HDD i SSD z interfejsami SATA oraz SAS mogą być podłączane i odłączane bez wyłączania serwera (hotplug/hotswap). Natomiast w dyskach SSD z interfejsem PCIe jest to uzależnione od konstrukcji i konektora. Nośniki SSD mogą posiadać różną konstrukcję (ang. form factor):
  • 2.5" - rozmiarem przypomina typowy 2.5 calowy dysk talerzowy,
  • 3.5" - rozmiarem przypomina typowy 3.5 calowy dysk talerzowy,
  • M.2 lub NGFF (Next Generation Form Factor) - kształt małego wąskiego prostokąta,
  • AIC (Add In Card) - karta z dyskiem SSD wpinana do gniazda PCIe. Dostępna w jednym z dwóch wariantów: HHHL (Half Height, Half Length) lub FHHL (Full Height, Half Length).
Dla dysków SSD z obsługą PCIe/NVMe został opracowany specjalny konektor U.2 (SFF-8639). Dzięki niemu, nośniki takie można odłączać i podłączać bez wyłączania serwera (hotswap/hotplug), podobnie jak to ma to miejsce przy dyskach z interfejsem SAS lub SATA.
 
Nośnik z konektorem U.2 ma także możliwość rozdzielenia 4-ścieżek PCIe (x4) na dwie części, gdzie każda z par (x2) może dla redundancji, w tym samym czasie być obsługiwana przez różne HBA.

Zapraszamy do kontaktu drogą mailową This email address is being protected from spambots. You need JavaScript enabled to view it. lub telefonicznie +48 797 004 932.