Что такое кеш жёсткого диска компьютера

Кеш жёсткого диска

Все современные накопители имеют встроенный кеш, также называемый буфером. Предназначение этого кеша не такое, как у кеша процессора. Функция кеша — это буферизация между быстрым и медленным устройствами. В случае жёстких дисков, кеш используется для временного хранения результатов последнего чтения с диска, а также для превыборки информации, которая может быть запрошена несколько позже, например, несколько секторов после текущего запрошенного сектора.

Использование кеша увеличивает быстродействие любого жесткого диска, уменьшая количество физических обращений к диску, а также позволяет работать винчестеру даже тогда, когда хост-шина занята. Большинство современных накопителей имеют объем кеша от 2 до 8 мегабайт. Тем не менее, наиболее продвинутые SCSI диски имеют кеш, достигающий объема в 16 мегабайт, это даже больше чем у среднего компьютера девяностых годов прошлого столетия.

Следует заметить, что когда кто-либо говорит о дисковом кеше, чаще всего имеется ввиду не именно кеш жесткого диска, а некий буфер, выделенный операционной системой для ускорения процедур чтения-записи именно в этой операционной системе.

Причина, по которой кеш жесткого диска очень важен — это большая разница между скоростью работы самого жесткого диска и скоростью работы интерфейса жесткого диска. При поиске нужного нам сектора проходят целые миллисекунды, т.к. затрачивается время на передвижение головки, ожидание нужного сектора. В современных персональных компьютерах даже одна миллисекунда это очень много. На типичном IDE/ATA накопителе время передачи 16-килобайтного блока данных из кеша в компьютер примерно в сотни раз быстрее, чем время нахождения и считывания его с поверхности. Вот почему все жесткие диски имеют внутренний кеш.

Другая ситуация, это запись данных на диск. Предположим, что нам надо записать все тот же 16-килобайтный блок данных, имея кеш. Винчестер мгновенно перебрасывает этот блок данных во внутренний кеш, и рапортует системе, что он опять свободен для запросов, параллельно с этим записывая данные на поверхность магнитных дисков. В случае последовательного чтения секторов с поверхности, кеш уже не играет большой роли, т.к. скорости последовательного чтения и скорость интерфейса в данном случае примерно одинаковы.

Общие концепции работы кеша жесткого диска

Самый простой принцип работы кеша — это хранение данных не только запрошенного сектора, но и нескольких секторов после него. Как правило, чтение с жесткого диска происходит не блоками по 512 байт, а блоками по 4096 байт (кластер, хотя размер кластера может и варьироваться). Кеш разбит на сегменты, каждый из которых может хранить один блок данных. Когда происходит запрос к жесткому диску, контроллер накопителя в первую очередь проверяет, находятся ли запрашиваемые данные в кеше, и, если это так, то мгновенно выдает их компьютеру, не производя физический доступ к поверхности. В случае если данных в кеше не было, они сначала считываются и попадают в кеш, и только после этого передаются в компьютер. Т.к. размер кеша ограничен, происходит постоянное обновление кусочков кеша. Типично, что самый старый кусок заменяется новым. Это называется цикличным буфером, или круговым кешем.

Для повышения быстродействия накопителя производители придумали несколько методов повышения скорости работы за счет кеша:

  1. Адаптивная сегментация. Обычно кеш разделен на сегменты одинакового размера. Так как запросы могут иметь разный размер, это приводит к излишнему расходованию блоков кеша, т.к. один запрос будет разделяться на сегменты фиксированной длины. Многие современный накопители динамически меняют размер сегмента, определяя размер запроса и подстраивая размер сегмента под конкретный запрос, таким образом, повышая эффективность и увеличивая или уменьшая размер сегмента. Также может меняться количество сегментов. Данная задача более сложная, чем операции с сегментами фиксированной длины, и может приводить к фрагментированности данных внутри кеша, увеличивая нагрузку на микропроцессор жесткого диска.
  2. Превыборка. Микропроцессор жесткого диска на основе анализа запрашиваемых данных в настоящий момент и запросов в предыдущие моменты времени, загружает в кеш данные, которые еще не были запрошены, но имеют к этому большой процент вероятности. Самый простой случай превыборки — это загрузка в кеш дополнительных данных, которые лежат немного дальше, чем запрашиваемые сейчас данные, т.к. статистически они имеют большую вероятность быть запрошенными позднее. Если алгоритм превыборки реализован в микропрограмме накопителя корректно, то это увеличит скорость его работы в различных файловых системах и с различными типами данных.
  3. Контролирование пользователем. Высокотехнологичные жесткие диски имеют набор команд, которые позволяют пользователю точно контролировать все операции с кешем. Эти команды включают в себя следующие: разрешение и запрещение работы кеша, управление размером сегментов, включение и выключение адаптивной сегментации и превыборки и т.п.

Не смотря на то, что кеш увеличивает скорость работы накопителя в системе, он также имеет и свои минусы. Для начала, кеш нисколько не ускоряет работу накопителя при случайных запросах информации, расположенной в разных концах пластины, поскольку при таких запросах нет смысла в превыборке. Также, кеш нисколько не помогает при чтении больших объемов данных, т.к. он обычно достаточно маленький, например при копировании 10 мегабайтного файла, при обычном в наше время буфере объемом 2 мегабайта, в кеш влезет только чуть меньше 20% копируемого файла.

Микросхема кеша накопителя Seagate Barracuda

Вследствие этих и других особенностей работы кеша, он не так сильно ускоряет работу накопителя, как хотелось бы. То, какой выигрыш в скорости он дает, зависит не только от размера буфера, но и от алгоритма работы с кешем микропроцессора, а также от типа файлов, с которыми ведется работа в данный момент. И, как правило, очень тяжело выяснить, какие алгоритмы работы кеша применяются в данном конкретном накопителе.

На рисунке представлена микросхема кеша накопителя Seagate Barracuda, она имеет емкость 4 мегабита или 512 килобайт.

Кеширование операций чтения-записи

Не смотря на то, что кеш увеличивает скорость работы накопителя в системе, он также имеет и свои недостатки. Для начала, кеш нисколько не ускоряет работу накопителя при случайных запросах информации, расположенной в разных концах пластины, поскольку при таких запросах нет смысла в превыборке. Также, он нисколько не помогает при чтении больших объемов данных, т.к. он обычно достаточно маленький. Например, при копировании 10 мегабайтного файла, при обычном в наше время буфере объемом 2 мегабайта, в кеш поместится только чуть меньше чем 20% копируемого файла.

Вследствие этих особенностей работы кеша, он не так сильно ускоряет работу накопителя, как хотелось бы. То, какой выигрыш в скорости он дает, зависит не только от размера буфера, но и от алгоритма работы с кешем микропроцессора, а также от типа файлов, с которыми ведется работа в данный момент. И, как правило, очень тяжело выяснить, какие алгоритмы работы кеша применяются в данном конкретном накопителе.

В последние годы, производители жестких дисков значительно увеличили емкость кеша в своих продуктах. Даже в конце 90-х годов, 256 килобайт было стандартом для всех накопителей и только высокоуровневые устройства имели кеш объемом 512 килобайт. В настоящее время, кеш размером 2 мегабайта стал уже стандартом де-факто для всех накопителей, в то время как наиболее производительные модели имеют емкости 8, а то и 16 мегабайт. Как правило, 16 мегабайт встречается только на SCSI накопителях. Есть две причины, по которым наблюдался столь быстрый рост буфера накопителя. Одна из них — резкое снижение цен на микросхемы синхронной памяти. Вторая причина — это вера пользователей в то, что удвоение или даже учетверение размера кеша очень сильно скажется на скорости работы накопителя.

Размер кеша жесткого диска, конечно, влияет на скорость работы накопителя в операционной системе, но не настолько, как представляют себе пользователи. Производители пользуются верой пользователя в размер кеша, и в рекламных проспектах делают громкие заявления об учетверенном по сравнению со стандартной моделью размере кеша. Тем не менее, сравнивая один и тот же жесткий диск с размерами буферов в 2 и 8 мегабайт, выясняется, что ускорение работы выливается в несколько процентов. К чему это приводит? К тому, что только очень большая разница в размерах кеша (например между 512 килобайтами и 8 мегабайтами) будет ощутимо сказываться на скорость работы накопителя. Так же надо помнить, что размер буфера винчестера по сравнению с памятью компьютера довольно мал, и зачастую больший вклад в работу накопителя имеет "софтовый" кеш, то есть промежуточный буфер, организованный средствами операционной системы под кэширование операций с файловой системой и находящийся в памяти компьютера.

Кеш чтения и записи: как он работает

Кеширование операций чтения и кеширование операций записи в чем-то похожи, но они также имеют и много различий. Обе эти операции, имеют своей целью увеличить общее быстродействие накопителя: это буферы между быстрым компьютером и медленной механикой накопителя. Основная разница между этими операциями состоит в том, что одна из них не изменяет данные в накопителе, в то время как другая — изменяет.

Без кеширования, каждая операция записи приводила бы к томительному ожиданию, пока головки переместятся в нужное место, и произойдет запись данных на поверхность. Работа с компьютером была бы невозможной: как мы уже упоминали ранее, эта операция на большинстве винчестеров занимала бы как минимум 10 миллисекунд, что очень много с точки зрения работы компьютера в целом, так как микропроцессору компьютера приходилось бы ждать эти 10 миллисекунд при каждой записи информации на винчестер. Самое поразительное, что существует именно такой режим работы с кешем, когда данные одновременно записываются и в кеш и на поверхность, и система ожидает выполнение обеих операций. Это называется write-through caching (сквозное кэширование). Эта технология обеспечивает ускорение работы в том случае, если в ближайшее время только что записанные данные потребуется считать обратно в компьютер, а сама запись происходит намного дольше, чем время, через которое потребуются эти данные компьютеру.

К счастью, есть более быстрый вариант работы кеша: компьютер записывает данные в накопитель, они попадают в кеш, и накопитель сразу же отвечает системе, что запись произведена; компьютер продолжает дальше работать, веря в то, что накопитель смог очень быстро записать данные, в то время как накопитель "обманул" компьютер и только записал нужные данные в кеш, и только потом начал записывать их на диск. Эта технология называется write-back caching (кэш с обратной записью).

Конечно, технология write-back кеширования увеличивает быстродействие, но, тем не менее, и у этой технологии тоже есть свой минус. Жесткий диск сообщает компьютеру, что запись уже произведена, в то время как данные находятся лишь в кеше, и только потом начинает записывать данные на поверхность. Это занимает какое-то время. Это не проблема до тех пор, пока есть питание компьютера. Т.к. память кеша — это энергозависимая память, в момент выключения питания все содержимое кеша безвозвратно теряется. Если в кеше были данные, ожидающие записи на поверхность, и в этот момент было выключено питание, данные будут потеряны навсегда. И, что также плохо, система не знает, были ли данные точно записаны на диск, т.к. винчестер уже отрапортовал, что сделал это. Таким образом, мы не только теряем сами данные, но и не знаем, какие именно данные не успели записаться, и даже не знаем, что произошел сбой. В результате может произойти потеря части файла, что приведет к нарушению его целостности, потери работоспособности операционной системы и т.д. Конечно, эта проблема не затрагивает кеширование данных при чтении.

Вследствие такого риска, на некоторых рабочих станциях не производится кеширования вообще. Современные накопители позволяют отключать режим кеширования записи. Это особо важно в приложениях, где правильность данных очень критична. Т.к. данный вид кеширования сильно увеличивает скорость работы накопителя, все-таки обычно прибегают к другим методам, которые позволяют снизить риск потери данных вследствие отключения электричества. Самый распространенный метод — это подключение компьютера к блоку бесперебойного питания. Кроме этого, все современные накопители имеют функцию "flush write cache", которая принудительно заставляет накопитель записать данные из кеша на поверхность, но, системе приходится выполнять эту команду вслепую, т.к. она все равно не знает, есть ли в кеше данные или нет. Каждый раз, когда происходит выключение питания, современные операционные системы посылают эту команду винчестеру, потом происходит посылка команды запарковать головки (хотя эту команду можно было бы и не посылать, т.к. каждый современный накопитель автоматически паркует головки при понижении напряжения ниже предельно допустимого уровня) и только после этого компьютер выключается. Это гарантирует сохранность данных пользователя и правильное выключение винчестера.

Компьютер и Windows