Дисковый буфер
Эта статья нуждается в дополнительных цитатах для проверки . ( август 2012 г. ) |
В компьютерной памяти дисковый буфер (часто неоднозначно называемый дисковым кешем или кэш-буфером ) — это встроенная память на жестком диске (HDD) или твердотельном накопителе (SSD), действующая как буфер между остальной частью компьютера и физический жесткий диск или флэш-память , используемая для хранения данных. [1] Современные жесткие диски имеют от 8 до 256 МБ такой памяти, а твердотельные накопители — до 4 ГБ кэш-памяти. [2]
С конца 1980-х годов почти все продаваемые диски имели встроенные микроконтроллеры и интерфейсы ATA , Serial ATA , SCSI или Fibre Channel . Схема привода обычно имеет небольшой объем памяти, используемый для хранения данных, поступающих на дисковые пластины и поступающих с них.
Дисковый буфер физически отличается от страничного кэша, который обычно хранится операционной системой компьютера в основной памяти , и используется иначе . Буфер диска управляется микроконтроллером жесткого диска, а страничный кэш — компьютером, к которому подключен этот диск. Дисковый буфер обычно довольно мал, от 8 МБ до 4 ГБ, а страничный кэш обычно представляет собой всю неиспользуемую основную память. Хотя данные в страничном кэше используются многократно, данные в дисковом буфере используются повторно редко. [3] В этом смысле термины «дисковый кэш» и «буфер кэша» являются неправильными; Память встроенного контроллера правильнее называть дисковым буфером .
Обратите внимание, что контроллеры дисковых массивов , в отличие от контроллеров дисков , обычно имеют обычную кэш-память объемом около 0,5–8 ГиБ.
Использование
[ редактировать ]Чтение вперед/чтение после
[ редактировать ]Когда контроллер диска выполняет физическое чтение, привод перемещает головку чтения/записи к нужному цилиндру (или рядом с ним). После некоторой стабилизации и, возможно, точного срабатывания считывающая головка начинает собирать данные дорожки, и остается только дождаться, пока вращение диска принесет запрошенные данные.
Данные, считанные перед запросом во время этого ожидания, не запрашиваются, но бесплатны, поэтому обычно сохраняются в дисковом буфере на случай, если они будут запрошены позже.
Аналогичным образом, данные могут быть считаны бесплатно после запрошенных данных, если головка может оставаться на ходу, поскольку нет другого чтения, которое нужно выполнить, или следующее срабатывание может начаться позже и все же завершиться вовремя. [4]
Если несколько запрошенных операций чтения находятся на одной и той же дорожке (или рядом по спиралевидной дорожке), большая часть незапрошенных данных между ними будет считываться как вперед, так и после.
Согласование скорости
[ редактировать ]Скорость интерфейса ввода-вывода диска с компьютером почти никогда не соответствует скорости, с которой биты передаются на пластину жесткого диска и обратно . Дисковый буфер используется для того, чтобы и интерфейс ввода-вывода, и головка чтения/записи диска могли работать на полной скорости.
Ускорение записи
[ редактировать ]Встроенный микроконтроллер диска может сигнализировать главному компьютеру о завершении записи на диск сразу после получения данных записи, прежде чем данные фактически будут записаны на пластину. Этот ранний сигнал позволяет главному компьютеру продолжать работу, даже если данные еще не были записаны. Это может быть несколько опасно, поскольку если питание отключится до того, как данные будут окончательно зафиксированы на магнитном носителе, данные будут потеряны из буфера диска, а файловая система на диске может остаться в несогласованном состоянии.
На некоторых дисках этот уязвимый период между сигналом о завершении записи и исправлением данных может быть сколь угодно долгим, поскольку запись может быть отложена на неопределенный срок из-за вновь поступающих запросов. По этой причине использование ускорения записи может быть спорным. Однако согласованность можно поддерживать, используя систему памяти с батарейным питанием для кэширования данных, хотя обычно это встречается только в высокопроизводительных RAID-контроллерах .
Альтернативно, кэширование можно просто отключить, если целостность данных считается более важной, чем производительность записи. Другой вариант — отправлять данные на диск в тщательно контролируемом порядке и выдавать команды «очистки кэша» в нужных местах, что обычно называют реализацией барьеров записи .
Очередь команд
[ редактировать ]Новые диски SATA и большинство дисков SCSI могут принимать несколько команд, пока выполняется одна команда, посредством «очереди команд» (см. NCQ и TCQ ). Эти команды сохраняются встроенным контроллером диска до их завершения. Одним из преимуществ является то, что команды можно изменить для более эффективной обработки, так что команды, влияющие на одну и ту же область диска, группируются вместе. Если чтение ссылается на данные в пункте назначения записи в очереди, будут возвращены данные, подлежащие записи.
NCQ обычно используется в сочетании с включенной буферизацией записи. В случае команды чтения/записи FPDMA с битом Force Unit Access (FUA), установленным в 0, и включенной буферизацией записи, операционная система может увидеть, что операция записи завершена до того, как данные будут физически записаны на носитель. Если бит FUA установлен в 1 и включена буферизация записи, операция записи возвращается только после того, как данные физически записаны на носитель.
Управление кэшем с хоста
[ редактировать ]Очистка кэша
[ редактировать ]Данные, которые были приняты в кэш записи дискового устройства, в конечном итоге будут записаны на пластины диска при условии, что из-за ошибки прошивки не возникнет состояние голодания и что питание диска не будет прерываться до того, как кэшированные записи будут принудительно выполнены на пластинах диска. Для управления кэшем записи спецификация ATA включала команды FLUSH CACHE (E7h) и FLUSH CACHE EXT (EAh). Эти команды заставляют диск завершить запись данных из своего кэша, и диск вернется в хорошее состояние после того, как данные из кэша записи будут записаны на дисковый носитель. Кроме того, когда привод получил команду STANDBY IMMEDIATE, на дисковом носителе эта команда припаркует головку, на флэш-накопителе эта команда сохранит таблицу сопоставления FTL . [5]
Операционная система отправит команды FLUSH CACHE и STANDBY IMMEDIATE на жесткие диски в процессе завершения работы.
Обязательная очистка кэша используется в Linux для барьеров записи в некоторых файловых системах (например, ext4 ) вместе с командой записи Force Unit Access для блоков фиксации журнала . [6]
Доступ к силовому подразделению (FUA)
[ редактировать ]Force Unit Access (FUA) — это опция команды записи ввода-вывода, которая принудительно переправляет записанные данные в стабильное хранилище. [7] Команды записи FUA (WRITE DMA FUA EXT – 3Dh, WRITE DMA QUEUED FUA EXT – 3Eh, WRITE MULTIPLE FUA EXT – CEh) в отличие от соответствующих команд без FUA записывают данные непосредственно на носитель, независимо от того, кэшируется ли запись в устройстве. включен или нет. Команда записи FUA не вернется до тех пор, пока данные не будут записаны на носитель, поэтому данные, записанные с помощью завершенной команды записи FUA, находятся на постоянном носителе, даже если устройство выключено до выдачи команды FLUSH CACHE. [8] [ мертвая ссылка ] [9]
FUA появился в наборе команд SCSI , а позже был принят SATA с NCQ . FUA является более детальным, поскольку позволяет принудительно выполнить одну операцию записи на стабильный носитель и, таким образом, оказывает меньшее общее влияние на производительность по сравнению с командами, очищающими весь дисковый кэш, такими как семейство команд ATA FLUSH CACHE. [9] [10]
Windows (Vista и более поздние версии) поддерживает FUA как часть транзакционной NTFS , но только для дисков SCSI или Fibre Channel, где поддержка FUA является обычным явлением. [11] Неизвестно, будет ли диск SATA, поддерживающий команды записи FUA, действительно выполнять команду и записывать данные на пластины диска в соответствии с инструкциями; [ нужна ссылка ] таким образом, Windows 8 и Windows Server 2012 вместо этого отправляют команды для очистки кэша записи диска после определенных операций записи. [12] [ мертвая ссылка ]
Хотя ядро Linux получило поддержку NCQ примерно в 2007 году, SATA FUA остается отключенным по умолчанию из-за регрессий, обнаруженных в 2012 году, когда тестировалась поддержка FUA ядром. [13] [14] Ядро Linux поддерживает FUA на уровне блоков. [15]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Марк Кирнин. «Что искать в жестком диске» . о.com . Архивировано из оригинала 4 апреля 2015 г. Проверено 20 декабря 2014 г.
Буфер диска — это объем оперативной памяти на диске для хранения часто используемых данных с диска.
- ^ «Samsung SSD 860 PRO | Потребительский твердотельный накопитель Samsung V-NAND | Глобальный веб-сайт Samsung Semiconductor» . Samsung . Архивировано из оригинала 6 апреля 2018 года . Проверено 16 июля 2018 г.
КЭШ-ПАМЯТЬ: 4 ГБ DDR4 малой мощности (4096 ГБ)
- ^ Чарльз М. Козерок (17 апреля 2001 г.). «Размер внутреннего кэша (буфера)» . pcguide.com . Проверено 20 декабря 2014 г.
- ^ Диски для дата-центров .
- ^ Хитачи (2006). Спецификация дискового накопителя Deskstar 7K80, 4-е издание (версия 1.6) (12 сентября 2006 г.), окончательная версия . Hitachi Global Storage Technologies. стр. 99, 130, 131.
- ^ Кристоф Хеллвиг; Теодор Цо . «Отправляет ли ext4 FUA для очистки кэша диска» . сайт spinics.net . Проверено 18 марта 2014 г.
- ^ Джонатан Корбет (18 августа 2010 г.). «Конец блочных барьеров» . LWN.net . Проверено 27 июня 2015 г.
- ^ «Информационные технологии — Приложение 8 к AT — Набор команд ATA/ATAPI (ATA8-ACS)» (PDF) . T13/1699-D, редакция 6a, 6 сентября 2008 г. Американский национальный институт стандартов, Inc. Архивировано из оригинала (PDF) 6 августа 2020 года . Проверено 14 декабря 2020 г.
- ^ Jump up to: а б Грегори Смит (2010). PostgreSQL 9.0: высокая производительность . Packt Publishing Ltd. с. 78. ИСБН 978-1-84951-031-8 .
- ^ Брюс Джейкоб; Спенсер Нг; Дэвид Ван (2010). Системы памяти: кэш, DRAM, диск . Морган Кауфманн. п. 734. ИСБН 978-0-08-055384-9 .
- ^ «Развертывание транзакционной NTFS (Windows)» . Msdn.microsoft.com. 05.12.2013 . Проверено 24 января 2014 г.
- ^ «Принудительный доступ к устройству | Усердная работа в сфере ИТ» . Workhardinit.wordpress.com. 12 октября 2012 г. Архивировано из оригинала 12 января 2014 г. Проверено 24 января 2014 г.
- ^ «Регрессия, связанная с хранилищем, в linux-next 20120824» . 12 сентября 2012 г. Проверено 27 июня 2015 г.
- ^ «Вернуть «libata: включить обнаружение fua диска SATA по умолчанию»» . Гитхаб . 13 сентября 2012 г. Проверено 27 июня 2015 г.
- ^ «Документация ядра Linux: Documentation/block/writeback_cache_control.txt» . ядро.орг . 12 августа 2013 г. Проверено 24 января 2014 г.