niedziela, 15 lipca 2012

Macierze "solid state" - demony prędkości (Część 3 - Nieco więcej technikaliów)

W poprzednich częściach dotyczących dysków SSD oraz macierzy wyłącznie z nich zbudowanych ("Solid state arrays") opisaliśmy podstawy tej technologii oraz firmy, które w tej branży działają. Teraz chciałbym wejść trochę głębiej w mechanizmy działania tego typu urządzeń.

Jak zbudowany jest dysk SSD

Dysk SSD jaki jest każdy widzi -główna różnica między nim a jego "tradycyjnymi kolegami" polega na braku mechanicznych obracających się części (talerze, głowica). Z tego powodu dyski SSD są ciche, niezawodne i zużywają mało energii.

Gdyby otworzyć obudowę dysku i spojrzeć do środka można by wyróżnić następujące komponenty
  • Kontroler
  • Interfejsy I/O
  • Pamięci Flash

Kontroler:

Czyli mózg dysku SSD, odpowiada zarówno za wszyskie "podstawowe" operacje na pamięci flash (zapis/odczyt/skasowanie) jak i za komunikację dysku ze światem zewnętrzny, a także zarządza wszyskimi specjalnymi funkcjami które są specyficzne dla technologii SSD jak np: TRIM czy Garbage Collection (o których będzie później). Sam kontroler to prosty procesor 16 lub 32 bitowy.

Najbardziej znane firmy produkujące kontrolery SSD to:
  • SandForce (wykupiony z początekiem roku przez LSI)
  • Indilinx (zależny od OCZ)
  • JMicron
  • Marvell
Udział w produkcji kontrolerów SSD mają także tacy giganci jak Intel i Samsung.

Interfejs I/O:

Układy łączące dysk ze światem zewnętrznym. Mogą występować w najróżniejszych standardach z których te najbardziej popularne to SATA,FC,SAS, 

Pamięci Flash:

Układy pamięci flash mogą być wykonane w dwóch technologiach: NAND i NOR, ponieważ jednak NOR-y są dużo wolniejsze, umożliwiają mniejsze upakowanie danych oraz cechują się mniejszą wydajnością tak więc praktycznie nie są używane przy produkcji flash-y.
Pamięci NAND możemy podzielić na takie które po pojedynczej komórce są w stanie przechować jeden bit danych (SLC) i takie które mogą ich przechowywać dwa (MLC) lub więcej (TLC). Bardziej szczegółowe informacje o tym podziale znajdują się w pierwszym wpisie dotyczącym SSD: LINK


Jak działa dysk SSD

Tak naprawdę chciałbym tutaj skupić się na kilku pojęciach związanych z dyskami SSD, a przy okazji ich opisu przedstawić także specyfikę działania tego typu napędów.

Te pojęcia to:
  • Write Amplification
  • TRIM
  • Garbage Collection
  • Wear Leveling
Write Amplification (WA):

Dyski SSD są dużo szybsze przy operacjach odczytu niż zapisu, a różnica w prędkości wykonywania tych działań może być nawet kilkunastokrotna. Odpowiedzialny za to jest sposób w jaki dysk SSD zapisuje dane.
Są dwie główne różnice w sposobie zapisu przed dysk tradycyjny i flashowy.
Po pierwsze dysk SSD nie może bezpośrednio nadpisać danych. Jeżeli jakaś komórka już zawiera informacje najpierw musi ona być wyczyszczona i dopiero potem można w niej pisać. Po drugie kontroler SSD nie jest w stanie wyczyścić danych z  pojedynczej komórki, musi to zrobić całą tzw: stroną, która ma ich od kilkunastu do kilkudziesięciu. W rezultacie po otrzymaniu polecenia zapisu, kontroler SSD musi odczytać zawartość całej strony, w której znajduje się blok do nadpisania (aby nie utracić przy czyszczeniu strony już zapisanych w niej bloków). Następnie strona zostaje wyczyszczona. Ostatni krok to ponowne zapisanie danych które wcześniej na niej rezydowały a także nowo zmienionego pojedynczego bloku (tak naprawdę działa to nieco inaczej ale to zostanie wyjaśnione w części poświęconej Garbage Collection, w tej chwili dla lepszego zrozumienia zostańmy przy opisanej powyżej wersji)
Współczynnik Write Amplification (WA) wynika z działania tego mechanizmu i określa ile razy więcej danych jest naprawdę zapisywanych na dysku SSD, w porównaniu do danych które zostały do niego "wysłane".
Oczywiście im więcej takich nadmiarowych zapisów trzeba robić, tym dłużej trwa ta operacja - jest to bezpośrednia przyczyna dużo mniejszej wydajności napędów przy zapisach (pojedynczy zapis jest tak naprawdę serią operacji R/W), dodatkowo im wyższe WA tym szybciej dysk się zużyje, gdyż więcej cyklów zapisu jest potrzebnych dla każdego pojedynczego żądania.
Kolejnym negatywnym efektem, jest fakt iż im więcej danych jest na dysku tym wolniej będzie działał (w stronach czyszczonych będzie więcej bloków do przepisania).

TRIM:

TRIM jest to komenda SATA która pomaga w zmniejszeniu współczynnika WA, a przez to zwiększa szybkość działania i żywotność dysku SSD.
Co robi TRIM?
Jeżeli usuwamy dane (np: pliki) w systemie operacyjnym (obojętnie jakim), system ten odnotowuje sobie ten fakt i traktuje zajmowaną przez nie przestrzeń jako wolną ale nie wysyła informacji o tym do dysku.  Z punktu widzenia systemu operacyjnego miejsce jest wolne i może zostać nadpisane, ale dla dysku są to dane istotne, o których bezpieczeństwo trzeba zadbać, do czasu aż nie przyjdzie polecenie ich skasowana lub nadpisania. Dlatego też dane te zostają odczytane i zapisane za każdym razem gdy kontroler czyści stronę na której się znajdują (aby nadpisać jakiś inny blok). Jest to działanie niepotrzebne gdyż dane te są już skasowane tylko dysk nie dostał tej informacji.
Polecenie TRIM wysyła do dysku informację o skasowaniu danych, gdy tylko jest to robione na poziomie systemu operacyjnego. Dzięki temu dane te nie są przepisywane przy czyszczeniu strony i nie zwiększają współczynnika WA. Polecenie TRIM aby działało musi być wspierane zarówno przez system operacyjny jak i przez sam dsyk SSD.

Garbage Collection (GC):

Nieco wyżej psiałem, że aby nadpisać dane kontroler dysku SSD odczytuje całą stronę czyści go a następnie przepisuje na powrót stare dane + nadpisana nowa. W rzeczywistości odbywa się to nieco inaczej i uczestniczy w tym proces nazywany Garbage Collection (GC).
Nowe dane nie nadpisują starych ale są zapisywane w nowych blokach, natomiast te już nieaktualne dalej rezydują na dysku, są tylko zaznaczone do usunięcia, GC to proces który co jakiś czas przepisuje istotne dane do nowych stron, a na starych zostawiając tylko te już nieaktualne, potem takie strony są automatycznie czyszczone i gotowe na przyjecie nowych zapisów. Zalety stosowania GC to przede wszystkim szybsze zapisy - dane są nagrywane do nowych czystych stron i nie ma potrzeby czyszczenia i nadpisywania. Oczywiście nie ma nic za darmo, sam proces GC obciąża dysk i dlatego uruchamiany jest w okresie gdy generowany jest do niego mniejszy ruch. Problemy zaczynają się gdy sam dysk jest utylizowany bardzo mocno i dodatkowo zaczyna zapełniać się jego pojemność. W takiej sytuacji kontroler często nie jest w stanie znaleźć pustych stron na zapisy i musi uruchamiać proces GC w trakcie pracy, co powoduje spowolnienie samego napędu.

Wear Leveling (WL):


Każda komórka z której składa się dysk SSD ma swoją "wytrzymałość", która określa ile razy może ona przejść cykl czyszczenia i zapisu. Ponieważ niektóre dane po zapisaniu prawie się nie zmieniają, natomiast inne modyfikowane są prawie non stop (np: plik stronicowania OSa) część komórek w dysku jest obciążona dużo bardziej i wielokrotnie szybciej niż pozostałe może osiągnąć swoją granicę "używalności". Aby uniknąć takiego przedwczesnego zużycia, kontroler stosuje różne mechanizmy aby równomiernie rozłożyć ruch do/z dysku. Nazywa się do Wear Levelingiem(WL) i zwykle polega na przeadresowywaniu komórek pamięci na dysku. Ponieważ zmieniają się adresy komórek więc nie ma ryzyka że ciągle zapisy tych samych danych będą trafiały w to samo miejsce nadmiernie je eksploatując.




Na tym kończę serię wpisów dotyczących technologii SSD i macierzy "solid state"  - zajęło mi to dużo więcej czasu niż początkowo zakładałem ale mocno doskwiera michroniczny brak czasu i nadmiar innych zajęć. Co będzie w następnych wpisach jeszcze nie wiem, może wrócę do tematu Clariionów, a może nie.