strzałka do góry

Odzyskiwanie danych Szkolenia Kontakt

artykuł dodany: 15-01-2018, kategoria: inżynieria nośników danych, autor: Paweł Kaczmarzyk

Dlaczego dane ułożone liniowo są czytane wolniej od danych rozproszonych, zarówno dla HDD, SSD i RAM?

Takie pytanie zadał nam Vinod z Panjab University w Chandigarhu (Indie). Jako, że kwestia ta może zaciekawić wiele osób, postanowiliśmy opublikować maila będącego odpowiedzią. Hipoteza, że dane ułożone liniowo są czytane wolniej (dla wszystkich typów pamięci), wydaje się intrygująca, ale czy jest prawdziwa?. Po odrobieniu artykułu (skierowanego raczej dla zaawansownych użytkowników) problem ten stanie się zrozumiały. Odpowiedź przygotował Paweł Kaczmarzyk z firmy kaleron.

Treść skierowanego do nas pytania

W przypadku HDD, moje rozumowanie jest następujące.
Na czas dostępu składają się: czas szukania, opóźnienie wynikającego z rotacji talerza i czas przesyłu danych. Więc, gdy dane są ułożone liniowo, dla pojedyńczego odczytania danych występuje pojedyńczy okres rotacji talerza, a w przypadku danych rozproszonych, ilość cykli odczytu jest zwielokrotniona na cykl rotacji. I nawet czas transferu dla danych ułożonych liniowo jest wolniejszy lub równy od czasu transferu dla danych rozproszonych. Skoro dane mają swoją jednostkę (nazywaną blokiem), duże rozproszenie danych może może wpływać na zwiększenie cykli odczytu.

Jeżeli moje rozumowanie w kwesti HDD jest niepoprawne, proszę o wyjaśnienie. Nie jestem jednak pewny, skąd biorą się różnice w czasie dostępu dla SSD, gdyż nie wiem za dużo o ich działaniu i kwestiach związanych z najmniejszymi jednostakami pamięci. Proszę rzucić trochę światła na tą sprawę.
~ Vinod, (Panjab University w Chandigarhu, Indie)


Pełna treść odpowiedzi

Żeby dobrze odpowiedzieć na Twoje pytanie, muszę najpierw trochę wyjaśnić fizykę i mechanikę dysku twardego. Kiedy myślisz o danych, przeważnie myślisz o plikach w katalogach na partycjach. Dopóki jesteś użytkownikiem, to wystarcza. Ale dysk tego nie rozumie. Dysk rozumie język pola elektromagnetycznego. Dlatego, żeby dysk mógł Ci pokazać to, co widzisz jako użytkownik, trzeba język pola elektromagnetycznego przetłumaczyć na język zdjęć i dokumentów. Nie jest to proste i odbywa się w kilku etapach.

Zacznijmy od plików - tak wydaje mi się prościej, a w każdym razie większość użytkowników o wiele lepiej rozumie pojęcia związane z logiczną strukturą danych niż z ich fizycznym zapisem. Zapewne znasz już pojęcie sektora i adresów LBA. W sektorze LBA 0 (MBR) znajdują się kluczowe informacje, w tym informacje o partycjach znajdujących się na dysku. Adresy i rozmiary partycji są wyrażone w jednostkach LBA. Każda partycja ma swoją strukturę logiczną. Katalogi i pliki także adresowane są bezpośrednio lub pośrednio za pomocą adresów LBA. Dane, o których zapewne myślisz mówiąc o danych ciągłych lub rozproszonych, rozmieszczone są w kolejnych lub losowych adresach LBA. Z pewnością znasz procedurę defragmentacji, która łączy rozproszone pliki w ciągłe łańcuchy adresów LBA. Ma to poprawić wydajność pracy systemu i zwykle to robi, ale nie zawsze. Zakładam, że to już wiesz i że właśnie to skłoniło Cię do rozważań na ten temat.

Fizyczne aspekty jednostek zapisu na dysku twardym

strefy dysku twardego zdjecie kaleron.pl odzyskiwanie danych pc-3000 jelcz laskowice wroclaw okoliceCzy wiesz, jak sektory LBA są rozmieszczone na dysku twardym? Wewnątrz napędu znajduje się jeden lub kilka talerzy. Każdy z talerzy ma dwie powierzchnie. Każda z powierzchni czytana jest przez jedną głowicę. Nie zawsze tak jest, czasem możemy spotkać powierzchnie talerzy wyłączone z eksploatacji - ale dla uproszczenia przyjmijmy, że nie ma wyjątków. Na każdej powierzchni mamy wiele koncentrycznych ścieżek, a na każdej ścieżce wiele sektorów. Czy spodziewasz się, że na każdej powierzchni mamy tyle samo ścieżek, a na każdej ścieżce tyle samo sektorów? Dawno temu tak było. Jestem pewny, że umiesz obliczyć obwód koła. Jeśli przyjmiemy promień ścieżki w pobliżu osi dysku równy 20 mm, a przy krawędzi talerza równy 45 mm, szybko odgadniesz, że aby zwiększyć gęstość zapisu, warto zróżnicować ilość sektorów na ścieżce. Tak też czynią producenci. Ścieżki grupowane są w strefy o różnej ilości sektorów na ścieżkę. Jeżeli spojrzysz na wykresy szybkości odczytu kolejnych sektorów LBA, z dużym prawdopodobieństwem dostrzeżesz wyraźne zmiany prędkości odczytu przy przejściach pomiędzy kolejnymi strefami. Proponuję taką obserwację przeprowadzić na dysku nowym, by ograniczyć wpływ odchyleń wynikających z zużycia dysku.

Teraz kilka słów o ilości ścieżek na talerz. Technologia wykonania talerzy magnetycznych nie pozwala na uzyskanie dużej powtarzalności ich parametrów. Dlatego ilość ścieżek na powierzchni talerza też może się różnić. Tablice stref w najnowszych dyskach są bardzo rozbudowane, gdyż muszą zawierać informację o ilości ścieżek i sektorów na ścieżkę w każdej strefie dla każdej powierzchni. Oprócz tego mamy listy defektów Zapewne słyszałeś o sektorach rezerwowych i remapowaniu uszkodzonych sektorów. Zazwyczaj dysk ma dwie listy defektów. Jedna powstaje jeszcze w fabryce i pozwala omijać fabryczne defekty powierzchni talerza. Druga tworzona jest w czasie eksploatacji i pozwala ukrywać uszkodzone sektory przypisując odpowiadające im adresy LBA adresom fizycznym sektorów rezerwowych. W niektórych modelach występują także listy defektów ścieżkowych służące wyłączeniu z eksploatacji ścieżek z tak dużą liczbą uszkodzonych sektorów, że ich wykorzystanie nie ma większego sensu Sektory rezerwowe zazwyczaj są rozmieszczane na ścieżkach rezerwowych rozmieszczonych w poszczególnych strefach. W ten sposób producenci starają się skrócić czas odszukania sektora rezerwowego i powrotu głowicy na poprzednią ścieżkę.

Wpływ translacji warstwy fizycznej na logiczną

Teraz, kiedy już to wiesz, nie jest dla Ciebie niespodzianką, że adresy LBA nie są dla dysku prawdziwymi adresami fizycznymi prawdziwych sektorów. To tylko taka uniwersalna warstwa translacji pozwalająca różnym systemom plików porozumiewać się z różnymi modelami dysków. Lub z macierzami RAID. Bo w macierzach RAID też masz adresy LBA, które są niezależne od adresów LBA dysków wchodzących w ich skład. A znana z przeszłości fizyczna adresacja sektorów CHS nadal istnieje, tylko jest o wiele bardziej skomplikowana i ukryta przed oczami użytkownika.

Wspomniane wyżej tablice stref i listy defektów są elementami systemu pozwalającego na tłumaczenie adresów LBA na adresy fizyczne i odwrotnie. Kolejne adresy LBA w zasadzie przypisywane są do kolejnych sektorów na kolejnych ścieżkach. Ale każda ścieżka kiedyś się kończy...trzeba przejść na następną lub przełączyć się na inną głowicę czytającą inną powierzchnię...lub odnaleźć ścieżkę z sektorami rezerwowymi, by ominąć defekt...Jak widzisz ciągłość danych w adresacji LBA łatwo ulega zerwaniu, kiedy przejdziemy do adresacji fizycznej. Czasy pozycjonowania głowic i wyszukiwania danych będą zazwyczaj krótsze w przypadku ścieżek położonych fizycznie blisko siebie niż w przypadku ścieżek bardziej odległych, ale kolejne adresy LBA nie w każdym przypadku będą fizycznie leżały blisko siebie.

Prędkości odczytu dla pamięci typu flash

Inaczej ma się sprawa z SSD. Tu nie powinieneś mieć zauważalnej różnicy pomiędzy danymi ciągłymi, a rozproszonymi. SSD (i wszystkie inne nośniki bazujące na układach pamięci Flash-NAND) zawsze rozpraszają dane. Taka jest ich zasada pracy. Rozproszenie informacji pomiędzy różnymi układami pozwala na przyśpieszenie pracy całego nośnika i uzyskanie wyższej wydajności, niż wynikałoby to z parametrów pojedynczych układów pamięci.

SSD na zewnętrznym interfejsie także posługuje się adresami LBA, ale sam układ pamięci Flash-NAND nie rozumie pojęcia "sektor" Podstawową jednostką dla pamięci Flash-NAND jest strona. Rozmiar strony powiązany jest z rozmiarem rejestru danych i stanowi ekwiwalent od 1 do 32 sektorów. Przynajmniej ja w swojej praktyce nie spotkałem jeszcze większych stron, ale spodziewam się, że w nieodległej przyszłości pojawią się strony odpowiadające 64 sektorom.

Ale rozmiar strony w bajtach nie jest prostym wynikiem mnożenia na przykład 32x512. Strona zawsze jest większa i zawiera kody ECC, różnego rodzaju markery, czasem inne informacje niezbędne dla prawidłowej pracy nośnika, a nieraz po prostu śmieci, np. nic nie znaczące ciągi 0xFF. Kontroler zapisując dane wysyła je do stron w różnych układach, a następnie odczytuje je z tych układów. Możesz być prawie pewny, że kiedy zapisujesz dostatecznie duży plik, jego fragmenty znajdą się we wszystkich układach pamięci Flash-NAND nośnika.

Wspomniałem już, że nośniki półprzewodnikowe, jak SSD także posługują się adresami LBA. Na ich przykładzie jeszcze lepiej widać, że adresacja LBA nie jest adresacją fizyczną, a jedynie warstwą translacji pomiędzy adresami fizycznymi nośnika, a systemem plików. O ile adresy LBA w dyskach twardych są dość ściśle powiązane z adresami fizycznymi, o tyle w SSD są przypisywane dynamicznie i zmieniają się z każdą operacją zapisu. Wiąże się to z fizyką zapisu w układach NAND, która nie pozwala na edycję danych, ale wymaga skasowania całego bloku liczącego wiele stron, a następnie zapisania zmodyfikowanej informacji strona po stronie. A więc kiedy edytujesz jakiś plik znajdujący się w jakimś adresie LBA zmieniając jeden znak odpowiadający jednemu bajtowi SSD musi wykonać szereg operacji.

W uproszczeniu:
- odczytuje blok danych do bufora
- oznacza ten blok w wewnętrznych tablicach translacji, jako pusty, przeznaczony do skasowania,
- dokonuje zmian w zawartości bloku zgodnie z otrzymanym od komputera poleceniem,
- zapisuje dane do innego fizycznego bloku, przy czym z punktu widzenia systemu plików te dane nadal pozostają w tych samych adresach LBA,
- zwolniony blok zostaje skasowany i można w nim zapisać kolejne dane.

W rzeczywistości proces ten jest o wiele bardziej złożony. Algorytm musi uwzględniać wymogi związane z szybkością i wydajnością pracy nośnika oraz dążyć do równomiernego zużycia układów. Bo operacje kasowania i zapisu są destrukcyjne dla pamięci Flash-NAND.

Ten sposób zapisu i odczytu danych sprawia, że nie powinieneś widzieć różnicy pomiędzy danymi ciągłymi i rozproszonymi. Z punktu widzenia nośnika, choćby i opartego na jednym układzie pamięci Flash-NAND, nie ma czegoś takiego, jak dane ciągłe. Ciągłość danych w kolejnych jednostkach LBA nie wpływa na jego wydajność. Dlatego SSD się nie defragmentuje.

Podobnie nie powinieneś widzieć różnicy w pamięci RAM. Jeśli ją widzisz, przyczyny można szukać w buforowaniu danych (czy masz pewność, że żądane dane rzeczywiście odczytujesz z nośnika, czy dostajesz je z bufora) lub w uszkodzeniu nośnika, które może wymagać dodatkowego czasu na korekcję błędów lub ponowną próbę odczytu.

Odpowiedzi na swoje pytanie nie szukaj w strukturach logicznych systemów plików. Fizyczne nośniki tych struktur nie rozumieją. Kluczem do odpowiedzi na Twoje pytanie jest zrozumienie warstwy fizycznej dysku.


Artykuł był przydatny, podobał się? A może nie? Zostaw komentarz!