stringtranslate.com

Буфер диска

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

В компьютерном хранилище дисковый буфер (часто неоднозначно называемый дисковым кэшем или кэш-буфером ) — это встроенная память на жестком диске (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]

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

Ссылки

  1. ^ Марк Кирнин. «Что искать на жестком диске». about.com . Архивировано из оригинала 2015-04-04 . Получено 2014-12-20 . Буфер диска — это объем оперативной памяти на диске для хранения часто используемых данных с диска.
  2. ^ "Samsung SSD 860 PRO | Samsung V-NAND Consumer SSD | Samsung Semiconductor Global Website". Samsung . Архивировано из оригинала 6 апреля 2018 г. . Получено 16 июля 2018 г. . КЭШ-ПАМЯТЬ: 4 ГБ Low Power DDR4 (4096 ГБ)
  3. ^ Чарльз М. Козиерок (17.04.2001). "Размер внутреннего кэша (буфера)". pcguide.com . Получено 20.12.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.03.2014 .
  7. ^ Джонатан Корбет (2010-08-18). «Конец блочных барьеров». LWN.net . Получено 2015-06-27 .
  8. ^ "Информационные технологии - Приложение AT 8 - Набор команд ATA/ATAPI (ATA8-ACS)" (PDF) . T13/1699-D, редакция 6a, 6 сентября 2008 г. . Американский национальный институт стандартов, Inc. Архивировано из оригинала (PDF) 6 августа 2020 г. . Получено 14 декабря 2020 г. .
  9. ^ ab Gregory Smith (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. ^ "Принудительный доступ к единицам | Упорная работа в сфере ИТ". Workinghardinit.wordpress.com. 2012-10-12. Архивировано из оригинала 2014-01-12 . Получено 2014-01-24 .
  13. ^ "Регрессия, связанная с хранилищем в linux-next 20120824". 2012-09-12 . Получено 2015-06-27 .
  14. ^ "Вернуть "libata: включить обнаружение fua диска SATA по умолчанию"". GitHub . 2012-09-13 . Получено 2015-06-27 .
  15. ^ "Документация ядра Linux: Documentation/block/writeback_cache_control.txt". kernel.org . 2013-08-12 . Получено 2014-01-24 .