Дисковый буфер - Disk buffer

На этом жестком диске плата контроллера содержит интегральную схему RAM, используемую для дискового буфера.
500 ГБ Western Digital жесткий диск с буфером 16 МБ

В компьютерное хранилище, дисковый буфер (часто неоднозначно называют дисковый кеш или же буфер кеша) - встроенная память в привод жесткого диска (HDD) действует как буфер между остальной частью компьютера и физическим пластина жесткого диска который используется для хранения.[1] Современные жесткие диски бывают от 8 до 256МиБ такой памяти, и твердотельные накопители имеют до 4 ГБ кэш-памяти.[2]

С конца 1980-х почти все проданные диски были со встроенными микроконтроллеры и либо ATA, Последовательный ATA, SCSI, или же Fibre Channel интерфейс. Схема привода обычно имеет небольшой объем памяти, используемый для хранения данных, поступающих на диски и поступающих с них.

Дисковый буфер физически отличается от буфера и используется иначе. кеш страницы обычно хранится Операционная система в компьютере основная память. Буфер диска управляется микроконтроллером на жестком диске, а кеш-памятью страниц управляет компьютер, к которому подключен этот диск. Дисковый буфер обычно довольно маленький, от 8 до 256.МиБ, а кеш страницы - это, как правило, вся неиспользуемая основная память. Хотя данные в кэше страниц используются многократно, данные в дисковом буфере используются редко.[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). Эти команды заставляют диск завершить запись данных из своего кеша, и диск вернет хорошее состояние после того, как данные из кэша записи будут записаны на дисковый носитель. Кроме того, очистку кеша можно инициировать, по крайней мере, на некоторых дисках, выполнив команду Soft reset или Standby (Immediate).[5]

Обязательная очистка кеша используется в Linux для реализации барьеров записи в некоторых файловых системах (например, ext4 ) вместе с командой записи Force Unit Access для журнал зафиксировать блоки.[6]

Принудительный доступ к подразделению (FUA)

Принудительный доступ к юниту (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]

Смотрите также

Рекомендации

  1. ^ Марк Кырнин. «Что искать на жестком диске». about.com. Получено 2014-12-20. Буфер диска - это объем ОЗУ на диске для хранения часто используемых данных с диска.
  2. ^ «Samsung SSD 860 PRO | Потребительский SSD-накопитель Samsung V-NAND | Глобальный веб-сайт Samsung Semiconductor». Samsung. В архиве из оригинала от 6 апреля 2018 г.. Получено 16 июля, 2018. КЭШ-ПАМЯТЬ: 4 ГБ DDR4 с низким энергопотреблением (4096 ГБ)
  3. ^ Чарльз М. Козиерок (17 апреля 2001 г.). «Размер внутреннего кэша (буфера)». pcguide.com. Получено 2014-12-20.
  4. ^ Диски для ЦОД.
  5. ^ Hitachi (2006). Спецификация накопителя Deskstar 7K80, 4-е издание (редакция 1.6) (12 сентября 2006 г.), окончательная версия. Hitachi Global Storage Technologies. С. 99, 130, 131.
  6. ^ Кристоф Хеллвиг; Теодор Ц'О. "Отправляет ли ext4 FUA для очистки кеша диска". spinics.net. Получено 2014-03-18.
  7. ^ Джонатан Корбет (18 августа 2010 г.). «Конец блочных преград». LWN.net. Получено 2015-06-27.
  8. ^ «Информационные технологии-AT, приложение 8 - набор команд ATA / ATAPI (ATA8-ACS)» (PDF). T13 / 1699-D, редакция 6-а, 06.09.2008. Американский национальный институт стандартов, Inc.. Получено 2014-03-18.
  9. ^ а б Грегори Смит (2010). PostgreSQL 9.0: высокая производительность. Packt Publishing Ltd. стр. 78. ISBN  978-1-84951-031-8.
  10. ^ Брюс Джейкоб; Спенсер Нг; Дэвид Ван (2010). Системы памяти: кэш, DRAM, диск. Морган Кауфманн. п. 734. ISBN  978-0-08-055384-9.
  11. ^ «Развертывание транзакционной NTFS (Windows)». Msdn.microsoft.com. 2013-12-05. Получено 2014-01-24.
  12. ^ «Принудительный доступ к подразделению | Усердно работаю в ИТ». Работаетhardinit.wordpress.com. 2012-10-12. Получено 2014-01-24.
  13. ^ "Регресс, связанный с хранением в linux-next 20120824". 2012-09-12. Получено 2015-06-27.
  14. ^ "Вернуть" libata: включить обнаружение fua диска SATA по умолчанию "". 2012-09-13. Получено 2015-06-27.
  15. ^ «Документация по ядру Linux: Documentation / block / writeback_cache_control.txt». kernel.org. 2013-08-12. Получено 2014-01-24.