Bufor dyskowy - Disk buffer
W pamięci komputera , bufor dysku (często niejednoznacznie nazywa cache dysku lub bufor cache ) jest osadzone pamięci na dysk twardy (HDD), działając jako bufor pomiędzy resztą komputera i fizycznym twardym talerzu dysku , który jest używany do przechowywania. Nowoczesne dyski twarde mają od 8 do 256 MB takiej pamięci, a dyski półprzewodnikowe mają do 4 GB pamięci podręcznej.
Od końca lat 80. prawie wszystkie sprzedawane dyski mają wbudowane mikrokontrolery i interfejs ATA , Serial ATA , SCSI lub Fibre Channel . Obwody napędu zwykle mają niewielką ilość pamięci, używanej do przechowywania danych przychodzących i wychodzących z talerzy dysków.
Bufor dyskowy jest fizycznie różny i używany w inny sposób niż pamięć podręczna stron, zwykle przechowywana przez system operacyjny w pamięci głównej komputera . Bufor dyskowy jest kontrolowany przez mikrokontroler na dysku twardym, a pamięć podręczna stron jest kontrolowana przez komputer, do którego ten dysk jest podłączony. Bufor dysku jest zwykle dość mały i mieści się w zakresie od 8 do 256 MB , a pamięć podręczna stron to ogólnie nieużywana pamięć główna. Podczas gdy dane w pamięci podręcznej strony są wielokrotnie wykorzystywane, dane w buforze dyskowym rzadko są ponownie wykorzystywane. W tym sensie terminy podręczna pamięć dyskowa i bufor pamięci podręcznej są mylące; pamięć wbudowanego kontrolera jest lepiej nazywana buforem dyskowym .
Należy zauważyć, że kontrolery macierzy dyskowych , w przeciwieństwie do kontrolerów dysków , zwykle mają normalną pamięć podręczną o wielkości około 0,5–8 GiB.
Używa
Przeczytaj z wyprzedzeniem / z tyłu
Kiedy kontroler dysku wykonuje fizyczny odczyt, siłownik przesuwa głowicę odczytu / zapisu do (lub w pobliże) prawidłowego cylindra. Po pewnym ustawieniu i prawdopodobnie dokładnym uruchomieniu głowica odczytująca zaczyna zbierać dane ścieżki i pozostaje tylko poczekać, aż obrót talerza przyniesie żądane dane.
Dane odczytane przed żądaniem podczas tego oczekiwania są niepożądane, ale są bezpłatne, więc zwykle są zapisywane w buforze dyskowym na wypadek, gdyby zażądano później.
Podobnie, dane mogą być odczytywane bezpłatnie za żądanym, jeśli głowica może pozostać na torze, ponieważ nie ma innego odczytu do wykonania lub następne uruchomienie może rozpocząć się później i nadal zakończyć w czasie.
Jeśli kilka żądanych odczytów znajduje się na tej samej ścieżce (lub w pobliżu na spiralnej ścieżce), większość niechcianych danych między nimi zostanie odczytana zarówno z przodu, jak iz tyłu.
Dopasowanie prędkości
Szybkość interfejsu wejścia / wyjścia dysku do komputera prawie nigdy nie odpowiada szybkości, z jaką bity są przesyłane do iz talerza dysku twardego . Bufor dyskowy jest używany w taki sposób, że zarówno interfejs we / wy, jak i głowica odczytu / zapisu dysku mogą działać z pełną prędkością.
Napisz przyspieszenie
Wbudowany mikrokontroler dysku może sygnalizować komputerowi głównemu, że zapis na dysku został zakończony natychmiast po odebraniu danych do zapisu, zanim dane zostaną faktycznie zapisane na talerzu. Ten wczesny sygnał umożliwia kontynuowanie pracy głównego komputera, nawet jeśli dane nie zostały jeszcze zapisane. Może to być nieco niebezpieczne, ponieważ utrata zasilania przed trwałym utrwaleniem danych na nośniku magnetycznym spowoduje utratę danych z bufora dyskowego, a system plików na dysku może pozostać w niespójnym stanie.
Na niektórych dyskach ten wrażliwy okres między zasygnalizowaniem zakończenia zapisu a naprawieniem danych może być dowolnie długi, ponieważ zapis może zostać odroczony na czas nieokreślony przez nowe żądania. Z tego powodu użycie przyspieszenia zapisu może budzić kontrowersje. Spójność można jednak zachować, stosując system pamięci z podtrzymywaniem bateryjnym do buforowania danych, chociaż jest to zwykle spotykane tylko w kontrolerach RAID z wyższej półki .
Alternatywnie buforowanie można po prostu wyłączyć, gdy integralność danych jest uważana za ważniejszą niż wydajność zapisu. Inną opcją jest wysyłanie danych na dysk w starannie zarządzanej kolejności i wydawanie poleceń „opróżniania pamięci podręcznej” w odpowiednich miejscach, co jest zwykle określane jako implementacja barier zapisu .
Kolejkowanie poleceń
Nowsze dyski SATA i większość dysków SCSI może przyjmować wiele poleceń, podczas gdy jedno polecenie działa poprzez „kolejkowanie poleceń” (zobacz NCQ i TCQ ). Te polecenia są przechowywane przez wbudowany kontroler dysku, dopóki nie zostaną zakończone. Jedną z korzyści jest możliwość zmiany kolejności poleceń w celu wydajniejszego przetwarzania, dzięki czemu polecenia wpływające na ten sam obszar dysku są grupowane. Jeśli odczyt odwołuje się do danych w miejscu przeznaczenia zapisanego w kolejce zapisu, zostaną zwrócone dane do zapisania.
NCQ jest zwykle używane w połączeniu z włączonym buforowaniem zapisu. W przypadku polecenia odczytu / zapisu FPDMA z bitem Force Unit Access (FUA) ustawionym na 0 i włączonym buforowaniem zapisu, system operacyjny może zobaczyć, że operacja zapisu została zakończona, zanim dane zostaną fizycznie zapisane na nośniku. W przypadku ustawienia bitu FUA na 1 i włączonego buforowania zapisu, operacja zapisu powraca dopiero po fizycznym zapisaniu danych na nośniku.
Kontrola pamięci podręcznej z hosta
Opróżnianie pamięci podręcznej
Dane, które zostały zaakceptowane w pamięci podręcznej zapisu urządzenia dyskowego, zostaną ostatecznie zapisane na talerzach dysków, pod warunkiem, że nie wystąpi stan głodu w wyniku wady oprogramowania układowego, a zasilanie dysku nie zostanie przerwane, zanim buforowane zapisy zostaną wymuszone na talerzach dysków. Aby sterować pamięcią podręczną zapisu, specyfikacja ATA zawierała polecenia FLUSH CACHE (E7h) i FLUSH CACHE EXT (EAh). Te polecenia powodują, że dysk kończy zapisywanie danych z pamięci podręcznej, a dysk zwróci dobry stan po zapisaniu danych w pamięci podręcznej zapisu na nośnik dyskowy. Ponadto opróżnienie pamięci podręcznej można zainicjować przynajmniej na niektórych dyskach, wydając polecenie Miękki reset lub Wstrzymanie (natychmiastowe).
Obowiązkowe opróżnianie pamięci podręcznej jest używane w Linuksie do implementacji barier zapisu w niektórych systemach plików (na przykład ext4 ), razem z poleceniem zapisu Force Unit Access dla bloków zatwierdzania dziennika .
Force Unit Access (FUA)
Force Unit Access (FUA) to opcja polecenia zapisu we / wy, która wymusza zapisanie danych na całej drodze do stabilnej pamięci. Polecenia zapisu FUA (WRITE DMA FUA EXT - 3Dh, WRITE DMA QUEUED FUA EXT - 3Eh, WRITE MULTIPLE FUA EXT - CEh), w przeciwieństwie do odpowiednich poleceń bez FUA, zapisuj dane bezpośrednio na nośniku, niezależnie od tego, czy buforowanie zapisu w urządzeniu jest włączony czy nie. Polecenie zapisu FUA nie powróci, dopóki dane nie zostaną zapisane na nośniku, dlatego dane zapisane przez zakończoną komendę zapisu FUA znajdują się na trwałym nośniku, nawet jeśli urządzenie jest wyłączone przed wydaniem polecenia FLUSH CACHE.
FUA pojawił się w zestawie poleceń SCSI , a później został przyjęty przez SATA z NCQ . FUA jest bardziej drobnoziarnisty, ponieważ umożliwia wymuszenie pojedynczej operacji zapisu na stabilnym nośniku, a tym samym ma mniejszy ogólny wpływ na wydajność w porównaniu z poleceniami, które opróżniają całą dyskową pamięć podręczną, takimi jak rodzina poleceń ATA FLUSH CACHE.
Windows (Vista i nowsze) obsługuje FUA jako część Transactional NTFS , ale tylko w przypadku dysków SCSI lub Fibre Channel, gdzie obsługa FUA jest powszechna. Nie wiadomo, czy napęd SATA obsługujący polecenia zapisu FUA rzeczywiście będzie honorował to polecenie i zapisywał dane na talerzach dysków zgodnie z instrukcją; w związku z tym systemy Windows 8 i Windows Server 2012 zamiast tego wysyłają polecenia opróżnienia pamięci podręcznej zapisu na dysku po pewnych operacjach zapisu.
Chociaż jądro Linuksa uzyskało wsparcie dla NCQ około 2007 roku, SATA FUA pozostaje domyślnie wyłączone z powodu regresji, które stwierdzono w 2012 roku, kiedy testowano obsługę FUA przez jądro. Jądro Linuksa obsługuje FUA na poziomie warstwy blokowej.