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

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

С конца 1980-х годов почти все проданные диски имеют встроенные микроконтроллеры и интерфейс ATA , Serial 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) [ править ]

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 как часть Transactional 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. ^ Марк Kyrnin. «Что искать на жестком диске» . about.com . Проверено 20 декабря 2014 . Буфер диска - это объем ОЗУ на диске для хранения часто используемых данных с диска.
  2. ^ "Samsung SSD 860 PRO | Samsung V-NAND Consumer SSD | Samsung Semiconductor Global Website" . Самсунг . Архивировано 6 апреля 2018 года . Проверено 16 июля 2018 года . КЭШ-ПАМЯТЬ: 4 ГБ DDR4 с низким энергопотреблением (4096 ГБ)
  3. ^ Чарльз М. Козиерок (2001-04-17). «Размер внутреннего кэша (буфера)» . pcguide.com . Проверено 20 декабря 2014 .
  4. ^ Диски для центров обработки данных .
  5. Перейти ↑ Hitachi (2006). Спецификация дискового накопителя Deskstar 7K80, 4-е издание (редакция 1.6) (12 сентября 2006 г.), окончательная . Hitachi Global Storage Technologies. С. 99, 130, 131.
  6. Кристоф Хеллвиг; Теодор Ц'О . «Отправляет ли ext4 FUA для очистки дискового кеша» . spinics.net . Проверено 18 марта 2014 .
  7. Джонатан Корбет (18.08.2010). «Конец блочных преград» . LWN.net . Проверено 27 июня 2015 .
  8. ^ "Информационные технологии - Приложение 8 AT - Набор команд ATA / ATAPI (ATA8-ACS)" (PDF) . T13 / 1699-D, редакция 6а, 6 сентября 2008 . Американский национальный институт стандартов, Inc. Архивировано из оригинального (PDF) 6 августа 2020 года . Проверено 14 декабря 2020 года .
  9. ^ a b Грегори Смит (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 . Проверено 24 января 2014 .
  12. ^ «Принудительный доступ к агрегатам | Усердно работаю в ИТ» . Работаетhardinit.wordpress.com. 2012-10-12 . Проверено 24 января 2014 .
  13. ^ "Регресс, связанный с хранением в linux-next 20120824" . 2012-09-12 . Проверено 27 июня 2015 .
  14. ^ "Вернуть" libata: включить обнаружение фаа диска SATA по умолчанию "" . 2012-09-13 . Проверено 27 июня 2015 .
  15. ^ "Документация ядра Linux: Documentation / block / writeback_cache_control.txt" . kernel.org . 2013-08-12 . Проверено 24 января 2014 .