Problem z wydajnością bariery zapisu w dysku SSD GoodRAM C50 120GB

Benchmark i analiza wydajności bariery zapisu dla dysku SSD GoodRAM C50 pod Linuksem

Dyski SSD znacząco przyśpieszyły operacje wykonywane na systemie plików. System uruchamia się znacznie szybciej, tak samo aplikacje. Programiści mogą cieszyć się z szybszej obsługi repozytoriów, czy indeksowania projektów przez IDE. Wydaje się że praktycznie każdy współczesny dysk SSD da podobne osiągi. W przypadku dysku GoodRAM C50 natrafiłem jednak na specyficzny problem ze słabą wydajnością bariery zapisów.

Dysk SSD GoodRAM C50 120GB

Opis problemu

Bariera zapisu to mechanizm wymuszający zapis danych w określonej kolejności w sekwencji. Wymusza także rzeczywiste zapisanie danych, a nie tylko skeszowanie ich przez kontroler dysku do zapisu.

Celem takiego mechanizmu jest zapewnienie integralności danych - tak by zapisała się cała sekwencja, a nie bezwartościowy fragment. Bariera używana jest w Linuksie w wielu miejscach. Jednym z lepszych przykładów jest baza SQLite, która przy zapisie do pliku-bazy bardzo dba o integralność danych i bariera zapisu jest tam powszechnie stosowana.

Wróćmy do problemu z dyskiem SSD GoodRAMa. Otóż zauważyłem że system zainstalowany na tym dysku nie uruchamia się tak szybko jak na innych SSD z jakimi miałem do czynienia. Odpaliłem więc kilka testów phoroniksa (inserty do SQLite na czas, blogbench, hdparm, iozone itp.). Porównują je do wyników starszego dysku (ADATA) wyniki w testach takich jak SQLite, czy blogbench znacząco się różniły. Testy bardziej ogólne dawały podobne wyniki. Zaskakujące okazały się wyniki dysku C50, gdy podłączyłem go przez zewnętrzną kieszeń USB3 - w takiej konfiguracji osiągał znacznie lepsze wyniki w tych problematycznych testach.

Popytałem na liście dyskusyjnej SQLite co może być przyczyną tak dużej różnicy pomiędzy tymi dyskami SSD i zasugerowano mi iż może to być bariera zapisu. Wiele kontrolerów w różnych kieszeniach na dyski niezbyt dobrze ją implementują, natomiast gdy dysk podłączony jest z komputerem poprzez złącze SATA to w pełni podlega systemowej implementacji bariery zapisu.

W Linuksie łatwo sprawdzić czy owa bariera zapisu powoduje problemy - wystarczy ją wyłączyć i powtórzyć testy. Wystarczy w /etc/fstab dodać barrier=0 dla interesujących nas partycji i uruchomić ponownie system. Np. coś takiego:

UUID=JAKIŚ_UUID / ext4 errors=remount-ro,barrier=0 0 1

Wyłączenie bariery może spowodować że stracimy jakieś dane w przypadku niespodziewanego wyłączenia komputera - np. brak zasilania. W laptopach to znacznie mniejsze ryzyko o ile bateria trzyma.

Testy

Wykonałem cztery testy - dwa dla C50 i dwa dla dysku SSD Intela. Jeden z barierą, drugi bez. Wyniki dostępne są na openbenchmarking.org. Jeżeli masz dysk SSD możesz wykonać testy porównawcze. Jestem ciekawy jak wydajność bariery wypada w przypadku innych kontrolerów SSD. GoodRAM C50 używa kontrolera Phison PS3108 i synchroniczne pamięci Toshiba MLC NAND.

Wpływ wydajności bariery zapisu na czas wykonywania INSERTów do bazy SQLite

Wpływ wydajności bariery zapisu na czas wykonywania INSERTów do bazy SQLite

Wyłączenie bariery zapisu w przypadku C50 dało siedmiokrotne przyśpieszenie. Dysk Intela z kontrolerem SandForce SF-2281 nawet z barierą radzi sobie całkiem dobrze. Wyłączenie bariery przyśpiesza test niecałe cztery razy.

W międzyczasie podłączyłem dysk do dwóch innych komputerów z Windowsem. Jeden przez SATA III, drugi SATA II. Wyniki AS SSD Benchmark poniżej.

AS SSD benchmark dla C50

AS SSD benchmark dla C50

Na chwilę obecną nie wiem czy problem z wydajnością zapisu jest kwestią firmware kontrolera SSD, czy po prostu taka kombinacja sprzętowa tak ma. Phision mi nie odpowiedział, natomiast wsparcie GoodRAMa było bardzo pomocne, ale mocno techniczne aspekty to już nie ich kompetencja. Dobrze byłoby wykonać ten sam test z bazą SQLite na np. MS Windows by sprawdzić, czy nie jest to błąd specyficzny dla Linuksa (wtedy także błąd może leżeć gdzie w Kernelu. Gdy mi się to uda to zaktualizuję wyniki testów o dodatkową część.

Mała ciekawostka. Stary dysk ADATA, który też używałem do porównać w innych testach ma kontroler SandForce 1XXX i działał bez problemu z laptopem wyposażonym w procesor z rodziny Haswell - a podobno te starsze kontrolery nie działają na tej platformie (choć używałem tylko Linuksa).

Podsumowanie

Dysk działa, nie narzekam, choć mógłby nie mieć takiej przypadłości z barierą zapisu. Jako że siedzi w laptopie to barierę można w miarę bezpiecznie wyłączyć i cieszyć się tanim dyskiem SSD.

blog comments powered by Disqus

Kategorie

Strony