Dyski SATA, które poprawnie obsługują buforowanie zapisu?


15

Dość często spotykane są porady dotyczące wyłączania pamięci podręcznej zapisu na poszczególnych dyskach używanych do baz danych, ponieważ w przeciwnym razie niektóre dyski uznają zapisy, które jeszcze nie dotarły na powierzchnię dysku.

Oznacza to, że niektóre dyski nie potwierdzają zapisów, dopóki nie dotrą na powierzchnię dysku (aktualizacja: lub że dokładnie zgłaszają się po poproszeniu o opróżnienie pamięci podręcznej. Gdzie mogę znaleźć takie dyski lub gdzie mogę szukać wiarygodnych informacji gdzie znaleźć takie dyski?

Konfiguruję niektóre serwery DB, które naprawdę skorzystałyby na buforowaniu zapisu, ale aplikacja jest wrażliwa na cenę i wolałbym nie podwoić kosztów mojego podsystemu dyskowego w przypadku buforowania kontrolera RAID, ponieważ nie mam wystarczającej ilości informacji, aby wiem, czy mogę ufać pamięci podręcznej na każdym dysku.


linux pozwala na wyłączenie pamięci podręcznej zapisu na dysku według napędu za pośrednictwem hdparam. W przypadku dysków SATA uważam, że należy to wykonać w skrypcie, aby było ponownie stosowane przy każdym ponownym uruchomieniu. Mogę pójść tą drogą, jeśli nadal mogę spełnić nasze wymagania dotyczące wydajności bez korzystania z kontrolera RAID z zasilaniem bateryjnym. Wolę używać programowego RAID, gdy jest to możliwe, ponieważ jest prostsze i tańsze. Tak czy inaczej, na pewno będę mieć UPS.
eas

Odpowiedzi:


15

Ogólnie rzecz biorąc, w bezpośredniej odpowiedzi na twoje pytanie, nie znam żadnych głównych marek napędów SATA, że sam napęd miał błędy związane z poprawnym działaniem z włączonym buforowaniem zapisu. To znaczy, tylko z perspektywy dysku, dysk robi to, co powinien zrobić z perspektywy buforowania. Chciałbym również zauważyć, że nawet gdy buforowanie zapisu jest włączone, opóźnienie od zapisu dysku kablem SATA do fizycznie aktualizowanego obracającego się nośnika jest nadal bardzo krótkie (zwykle około 50 do 100 ms). To nie jest tak, że brudne dane z pamięci podręcznej będą po prostu tam siedzieć przez kilka sekund ..... dysk nieustannie próbuje uzyskać brudne dane z pamięci podręcznejna fizyczny nośnik tak szybko, jak to możliwe. Nie jest to tylko kwestia bezpieczeństwa danych, ale gotowość do przyjęcia zapisów w przyszłości bez żadnych opóźnień (np. Napisanie postu).

Problem, który pojawia się, gdy buforowanie jest włączone, polega na tym, że kolejność zapisu do napędu za pomocą kabla SATA i kolejność zapisu na obracającym się nośniku nie są takie same. Nie może to nigdy powodować problemu, chyba że nastąpi utrata zasilania lub awaria systemu, zanim cała zawartość pamięci podręcznej nie znajdzie się na dysku. Dlaczego? ->

Problem, który może się tutaj pojawić, dotyczy odporności transakcji systemu plików i / lub zawartości plików bazy danych na nieuporządkowane zapisy utracone. W efekcie te potencjalnie utracone zapisy w kolejności mogą teoretycznie uszkodzić integralność logiki transakcji, która w innym przypadku byłaby zagwarantowana przez zapisy dysku w bardzo określonej kolejności dla mediów.

Teraz, oczywiście, projektanci systemu plików, baz danych, kontrolerów RAID itp. Są świadomi (a na pewno powinni być świadomi) tego zjawiska w odniesieniu do buforowania zapisu. Buforowanie zapisu jest niezwykle pożądane z punktu widzenia wydajności w większości scenariuszy we / wy typu dostępu swobodnego. W rzeczywistości dostępność buforowania zapisu jest kluczowym elementem umożliwiającym czerpanie rzeczywistych korzyści z bardziej zaawansowanego Native Command Queuing ( NCQ)), który jest obsługiwany w nowszych wersjach SATA i ostatnich generacjach implementacji PATA. Tak więc, aby zagwarantować porządek na fizycznym nośniku w takich krytycznych momentach, system plików i / lub aplikacja itp. Mogą w szczególności zażądać opróżnienia pamięci podręcznej zapisu na nośniku. Po zakończeniu tego żądania synchronizacji - wszystko oczekujące od (potencjalnie) buforów plików, buforowania dysku systemu operacyjnego, buforowania dysku fizycznego itp. Jest faktycznie dostępne na nośniku zgodnie z projektem systemu transakcyjnego przy właściwych operacjach krytycznych. Oznacza to, że dzieje się to poprawnie, jeśli programiści wykonują odpowiednie wywołania u góry ORAZ każdy element tego łańcucha warstw oprogramowania i sprzętu wykonał swoją pracę poprawnie. tj .: nie ma żadnych błędów w tym zakresie w napędzie, kontrolerach RAID, sterownikach dysków, pamięciach podręcznych systemu operacyjnego, systemie plików, silniku bazy danych itp. To dużo oprogramowania, które wszystko musi działać dokładnie tak, jak trzeba. Ponadto weryfikacja poprawności pod tym względem jest bardzo trudna, ponieważ w prawie każdej sytuacji zwykle kolejność zapisu nie ma żadnego znaczenia ... a scenariusze awarii zasilania i awarii są trudnymi do skonstruowania testami. Tak więc w końcu „wyłączenie buforowania zapisu” na jednej lub kilku różnych warstwach i / lub znaczeniach tego terminu… ma reputację „naprawiania” niektórych rodzajów problemów. W efekcie wyłączenie zachowań buforowania zapisu kontrolera RAID, pamięci podręcznej dysku systemu operacyjnego lub napędu itp. Pozwala uniknąć jednego lub więcej błędów w systemie ..... i źródła takiej wiedzy. a scenariusze awarii zasilania i awarii są trudnymi do zbudowania testami. Tak więc w końcu „wyłączenie buforowania zapisu” na jednej lub kilku różnych warstwach i / lub znaczeniach tego terminu… ma reputację „naprawiania” niektórych rodzajów problemów. W efekcie wyłączenie zachowań buforowania zapisu kontrolera RAID, pamięci podręcznej dysku systemu operacyjnego lub napędu itp. Pozwala uniknąć jednego lub więcej błędów w systemie ..... i źródła takiej wiedzy. a scenariusze awarii zasilania i awarii są trudnymi do zbudowania testami. Tak więc w końcu „wyłączenie buforowania zapisu” na jednej lub kilku różnych warstwach i / lub znaczeniach tego terminu… ma reputację „naprawiania” niektórych rodzajów problemów. W efekcie wyłączenie zachowań buforowania zapisu kontrolera RAID, pamięci podręcznej dysku systemu operacyjnego lub napędu itp. Pozwala uniknąć jednego lub więcej błędów w systemie ..... i źródła takiej wiedzy.

W każdym razie wracając do sedna pytania: w SATA specyficzna obsługa wszystkich poleceń odczytu / zapisu na dysku i poleceń opróżniania pamięci podręcznej jest dobrze zdefiniowana w specyfikacjach SATA . Ponadto producenci napędów powinni mieć szczegółową dokumentację dla każdego modelu lub rodziny napędów opisującą ich implementację i zgodność z tymi regułami, takimi jak ten przykład dla dysków Seagate Barracuda . W szczególności zobacz szczegóły FUNKCJI SATA SETpolecenie sterujące trybem pracy dysku, a konkretnie opcja 82h może być użyta do wyłączenia buforowania dysku na poziomie napędu, ponieważ domyślnie jest to buforowanie zapisu włączone na wszystkich dyskach, o których wiem. Jeśli naprawdę chcesz wyłączyć pamięć podręczną, to polecenie należy wykonać na początku każdego resetu lub włączenia napędu i zwykle jest ono kontrolowane przez sterowniki dysku dla twojego systemu operacyjnego. Możesz być w stanie zachęcić sterownik systemu operacyjnego do ustawienia tego trybu za pomocą IOCTL i / lub ustawienia rejestru, ale jest to bardzo zróżnicowane.


5
Jedna uwaga redakcyjna do mojej odpowiedzi: Kontrolery sprzętowe RAID są znane z wielu błędów, w tym problemów związanych z ich wewnętrzną implementacją buforowania zapisu. Nie mam pojęcia dlaczego, ale anegdotycznie rzecz biorąc kontrolery RAID wydają się być jednymi z najbardziej wadliwych programów, jakie kiedykolwiek napisano pod względem czegoś, co ma tak szerokie zastosowanie. Z pewnością opłaca się korzystać z głównego nurtu, dobrze ugruntowanego i szeroko rozpowszechnionego sprzętu RAID od bardzo renomowanych dostawców ... a nawet wtedy łatki do nietrywialnych problemów wydają się zbyt częste!
Wysoki Jeff

Dzięki Jeff. Czytałem o tym dużo i jestem prawie tak zdezorientowany, jak nigdy dotąd. Myślę, że problem, z którym się teraz zmagam, dotyczy „barier zapisu”, które pozwalają aplikacjom i systemom plików na instruowanie warstwy bloków, aby zagwarantowały prawidłowe porządkowanie zapisu przy użyciu różnych dostępnych mechanizmów. Niestety istnieją różne problemy z wdrażaniem barier. LVM, po pierwsze, najwyraźniej nie obsługuje ich, nawet jeśli leżą u ich podstaw. Wydaje mi się również, że sysadmini powinni mieć opcję wymuszania opróżnienia pamięci podręcznej napędu przez fsync
eas

@eas - Termin „bariery zapisu”, do którego się odwołujesz, zakładam, że jest tym samym podstawowym mechanizmem, który nazwałem „synchronizacją” lub „opróżnieniem” pamięci podręcznej w powyższej odpowiedzi. Do tego stopnia, że ​​może to być inicjowane na różnych warstwach w „stosie” dostępu do pliku. Aby zbudować prawdziwą barierę zapisu, musi wpływać na wszystkie warstwy, które mają oczekujące dane zapisu (to znaczy: brudne pamięci podręczne lub bufory zapisu) aż do fizycznych nośników, aby faktycznie działały zgodnie z przeznaczeniem. Każde rozłączone łącze w tym łańcuchu powoduje potencjalne problemy, gdy zapisy zostają uporządkowane.
Wysoki Jeff

Dyski mogą opóźniać zapis na nośniku o kilka sekund, oczywiście jeśli istnieje wiele dalszych zapisów, które przepełnią pamięć podręczną dysku, wymusi zapis na nośniku. NCQ nie potrzebuje ściśle pamięci podręcznej zapisu, wciąż może mieć wiele oczekujących poleceń zapisu i odczytu i wydawać je w kolejności, w jakiej dysk uzna, że ​​uzyska najlepszą wydajność, również w przypadku NCQ nie ma znaczenia kolejność zapisów, co powoduje systemy plików i bazy danych muszą korzystać z barier we / wy.
Baruch Even

3

Z mojego doświadczenia wynika, że ​​zasilany bateryjnie kontroler dysku buforującego wyłącza pamięć podręczną na dysku. Nie znam sposobu, aby w inny sposób wyłączyć pamięć podręczną na dysku. Nawet jeśli można wyłączyć pamięć podręczną na dysku, wydajność znacznie spadnie.

W celu uzyskania taniego optoinu można użyć niedrogiego zasilacza UPS, który może zasygnalizować systemowi jego uporządkowane zamknięcie.


Mój komentarz powyżej powinien zostać tutaj dodany. Wciąż uczę się tej strony.
eas

Niektóre kontrolery RAID cały czas wyłączają pamięć podręczną na dysku, niektóre nie, a niektóre mają ustawienia. To zachowanie zasadniczo zależy od tego, jak wygląda implementacja strategii buforowania kontrolera RAID. W niektórych implementacjach naprawdę chcą kontrolować kolejność zapisu na dysku ... a w innych ma to mniejsze znaczenie. W mojej odpowiedzi odnoszę się do niektórych zagadnień.
Wysoki Jeff

W moim niewielkim zestawie testów (kontrolery RAID LSI 9261, dyski SATA, NL SAS i SAS) stwierdziłem, że włączenie pamięci podręcznej zapisu dysku, gdy dysk był podłączony do kontrolera RAID z pamięcią podręczną pamięci / pamięci, nie miało znaczenia wydajność wykraczająca poza samą pamięć podręczną kontrolera RAID. Nie powiedziałbym jeszcze, że jest to twarda i szybka reguła, ale dla mnie jest zdecydowanie jasne, że kontroler RAID wyłączający pamięć podręczną dysku niekoniecznie stanowi problem.
Daniel Lawson

2

Używam systemu RAID z superkondensatorem zamiast baterii, aby utrzymać pamięć podręczną. Baterie zużywają się, muszą być monitorowane, muszą być wymieniane i stanowią potencjalny punkt awarii pod tym względem. Kondensator ładuje się przy starcie, opróżnia pamięć podręczną, gdy zanika zasilanie z UPS, trwa praktycznie wiecznie, nie wymaga monitorowania itp. Jednakże, chyba że prowadzisz firmę na granicy ubóstwa (obecnie nierzadko) powinieneś mieć UPS oraz oprogramowanie, które wyłącza system w razie awarii - zwykle daję mu 5-15 minut (w zależności od obciążenia zasilacza UPS, a zatem dostępnej baterii) przed wyłączeniem w przypadku powrotu zasilania.

Podczas burzy z piorunami możesz (lub możesz mieć - systemy zasilania stają się coraz lepsze) migać światła, czasami tuż przed ich zgaśnięciem. To urządzenie nazywa się recloser. Jest to wyłącznik, który po zadziałaniu próbuje zamknąć otwarty przełącznik na wypadek, gdyby przeciążenie było przejściowe, a większość z nich jest. Jeśli nie zostanie zamknięty po, powiedzmy trzy próby, pozostanie otwarty. Jakiś biedak musi wyjść na deszcz i sobie z tym poradzić. Nie żal mu go, robiąc tylko dwa razy to, co ty i ja, i dwa razy, że jeśli jest nadgodziny, to niebezpieczna praca.


2

Jednym z nieporozumień, jeśli dyski zapisują dyski w pamięci podręcznej, jest to, że tracą dane tylko w przypadku utraty zasilania. Nie zawsze tak jest, szczególnie w przypadku urządzeń SATA. Jeśli na urządzeniu SATA wystąpił błąd (na przykład błąd FW w obudowie narożnej lub błąd kontrolera) i resetuje się lub jest resetowany zewnętrznie, nie ma gwarancji, że dane w pamięci podręcznej zapisu będą nadal dostępne po zawieszeniu.

Może to prowadzić do scenariuszy, w których urządzenie ma przejściowy błąd, resetuje się, utrata danych występuje w przypadku utraty brudnej pamięci podręcznej, a to milczy powyżej poziomu blokowania sterowników.

Co gorsza, wyłączenie pamięci podręcznej dysku za pomocą narzędzi systemu operacyjnego zostanie również utracone podczas resetowania urządzenia, więc nawet jeśli urządzenie ma wyłączoną pamięć podręczną na początku dnia, jeśli urządzenie zostanie zresetowane, ponownie włączy buforowanie z zapisem. Przy kolejnym resecie urządzenie utraci dane.

Dyski SCSI / SAS i niektóre dyski SATA mają możliwość zapisania stanu profilu zapisu zwrotnego, aby zapewnić, że właściwość nie zostanie utracona podczas resetowania - ale w praktyce jest to rzadko używane.

Kontrolery RAID, które integrują warstwę blokową z górnymi warstwami, mogą zauważyć resety dysków i ponownie wyłączyć pamięć podręczną zapisu - ale standardowe kontrolery SATA i SAS tego nie zrobią.

To ograniczenie dotyczy także innych USTAWIEŃ FUNKCJI i podobnych parametrów skonfigurowanych pod kątem wydajności i niezawodności.


1

Jak mówisz, odpowiedni kontroler RAID z podtrzymaniem bateryjnym będzie drogi, ale na eBayu możesz znaleźć kontrolery Dell Perc5 / i za 100 GBP (150 USD), a zwłaszcza w przypadku RAID5 szybkość kontrolera takiego jak Perc5 / i zadziwi cię. Mam kilka serwerów z Perc5 / is i sześć dyskowych macierzy RAID5 i należą one do najszybszych dysków, jakie kiedykolwiek widziałem. Szczególnie w przypadku aplikacji bazodanowych szybkie dyski naprawdę poprawią wydajność.

Ugryzłem kulę i kupiłem kontroler RAID.

JR


1

O ile rozumiem, fałszowanie fsync () jest właściwością kontrolerów RAID zasilanych bateryjnie, a nie napędów. Kontroler RAID zawiera baterię, która może zasilać pamięć podręczną zapisu, dopóki zasilanie nie zostanie przywrócone na dysku i zapis może zostać bezpiecznie przypisany do dysku. Umożliwia to kontrolerowi natychmiastowy powrót do systemu operacyjnego, ponieważ daje pewien poziom gwarancji, że zapis zostanie zapisany na dysku.

Należy zauważyć, że jeśli pamięć podręczna zapisu dysków zapełni się, zapisy będą blokowane, dopóki pamięć podręczna nie zostanie zapisana z powrotem na dysku. Oznacza to, że pamięć podręczna zasadniczo nie jest tak skuteczna w przypadku trwałego zapisu.

Ile IOPS wymaga Twoja aplikacja? Czy jesteś pewien, że ogranicza Cię pamięć podręczna zapisu, lub że mała (w porównaniu z pamięcią serwera) pamięć na dysku przyniesie korzyści?


Testy, które teraz przeprowadzam, mają na celu określenie koperty wydajności naszej aplikacji, abyśmy mogli dowiedzieć się, jak najlepiej skalować w górę i w górę. Pamięć podręczna dysku może być stosunkowo niewielka, ale z buforowaniem zapisu umożliwia napędowi zmianę kolejności zapisów (w razie potrzeby), co może przypominać dwukrotny wzrost przepustowości zapisu.
eas
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.