#факты | Что такое кэш-память?

Сегодня поговорим о том, как работает кэширование. Наши читатели уже знакомы с иерархией компьютерной памяти и с тем, что кэш занимает в ней очень высокую ступеньку. Настала пора поближе познакомиться с самим принципом кэширования. Современные компьютеры могут похвастаться не только кэшем первого (L1) и второго (L2), но и третьего уровня (L3). Рассмотрим те задачи, которые выполняет компьютерный кэш, на примере рабочего дня библиотекаря в обычной, слегка старомодной библиотеке, где хранятся накопленные человечеством знания в виде бумажных томов.


Основная сложность в том, что «компьютерный кэш» понятие слишком многозначное и порой одним и тем же словом обозначают разные вещи. Достаточно сказать, что существует не только кэш памяти, но также аппаратный и программный дисковый кэш, кэш страниц и многие другие компьютерные процессы, объединенные общим именем. Например, виртуальная память тоже является одной из форм кэширования. Поэтому кэш процессора не единственный имеющийся в компьютере кэш. Кэширование играет гигантскую роль в работе всего компьютера в целом.

Кэширование на примере обычной библиотеки


Технология кэширования базируется на подсистеме компьютерной памяти. Основная задача этой важной технологии состоит в том, чтобы заставить ваш компьютер работать быстрее. Даже в том случае, если это не самый мощный (и, соответственно, дорогой) компьютер. Благодаря кэшированию повышается скорость выполнения компьютером своих задач.

Чтобы понять основную идею рассматриваемой технологии, обратимся к простому примеру из жизни. Представим себе библиотекаря, который выдает читателям книги по их запросам. Читателю не приходится самому долгие часы бродить по гигантскому залу библиотеки и искать нужные книги.

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

Новому посетителю может понадобиться все тот же учебник по алгебре. Библиотекарю придется снова пойти в книгохранилище, взять книгу с полки, вернуться на рабочее место и выдать ее человеку, которому она необходима.

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

Есть ли способ облегчить библиотекарю его труд? Да! Для этого нужно создать «библиотечный кэш», и далее мы рассмотрим, как это сделать.

Для этого библиотекарю следует выдать сумку, в которой поместится, допустим, десять книг. В рамках компьютерной терминологии, можно сказать, что библиотекарь располагает «10-книжным кэшем». В эту сумку библиотекарь станет складывать возвращаемые ему читателями книги, но не более десяти. Это значит, что за наиболее популярными не придется каждый раз идти в хранилище, поскольку они всегда под рукой.

В начале рабочего дня «кэш-сумка» библиотекаря пуста. Приходит первый читатель и просит учебник алгебры. Библиотекарь отправляется в книгохранилище и возвращается с запрошенной книгой. Ничего нового, всё, как в предыдущем примере. Через некоторое время читатель возвращает учебник библиотекарю, но он не ставит его на полку в хранилище, а отправляет в сумку. Итак, кэш уже не пуст, в нем есть содержимое.

Приходит очередной читатель, которому необходим учебник алгебры. Вместо того, чтобы в очередной раз проделать путь от своего стола к полке, где находится книга, библиотекарь проверяет свою сумку и обнаруживает ее там. Ему достаточно извлечь книгу из сумки и выдать ее читателю. Утомительное путешествие в книгохранилище отменяется! Лишнее время не было потрачено и читатель получил книгу намного быстрее, чем в предыдущем примере.

Но может случиться так, что посетителю потребуется книга, которой в сумке нет. В этом случае кэш увеличит время поиска, поскольку библиотекарю понадобится сначала проверить свою сумку, а лишь затем (убедившись, что нужной книги там нет) отправиться в хранилище к соответствующей полке. Одна из самых сложных задач инженеров состоит в том, чтобы свести вызываемую проверкой кэша задержку к минимуму. Даже в рассмотренном нами примере, время, которое займет проверка сумки (время латентности), весьма невелико по сравнению с долгим путешествием в хранилище книг и обратно. В данном случае кэш невелик (всего 10 книг). К слову, латентность является одним из основных ограничений компьютерной памяти, о которых мы ранее писали.

Эти простые и понятные каждому примеры раскрывают нам некоторое факты, которые следует знать о технологии кэширования:

  • В технологии кэширования задействована быстрая память сравнительно малого объема. Она работает в связке с более объемной, но при этом более медленной памятью
  • Использование кэша предполагает проверку, находятся ли в нем нужные данные. Если они там обнаружены, то говорят о «попадании» (cache hit). Если нет, то это называют «потерпевшим неудачу поиском при обращении к кэшу» или попросту «промахе» (cache miss). В последнем случае компьютеру придется обратиться к медленной памяти большего размера
  • Максимальный размер кэша намного меньше, чем у более ёмких хранилищ информации (например, оперативной памяти или, тем более, жесткого диска)
  • Может быть несколько уровней кэша. В примере с библиотекарем, меньшим, но скоростным типом памяти является его сумка, а книгохранилище выступает в роли объемной, но сравнительно медленной памяти. Это пример одноуровневого кэша. Могут быть добавлены дополнительные слои кэша: например в виде полки на сотню книг непосредственно у стола библиотекаря. Сначала библиотекарь проверит сумку (кэш первого уровня, L1), затем расположенную под рукой полку. И только в том случае, если нужная книга не будет обнаружена ни там, ни там, он отправится в хранилище. Такой способ организации кэша называется двухуровневым

Компьютерное кэширование


Современный компьютер работает с невероятно высокой скоростью. Когда его процессор обращается к оперативной памяти (ОЗУ, RAM), ему требуются считанные наносекунды, то есть миллиардные доли секунды. Предположим, что одно обращение процессора к памяти занимает 60 наносекунд. Это очень быстро, но процессор работает еще быстрее. Даже довольно медленному и порядком устаревшему процессору на один такт потребуются всего 2 наносекунды. Далее будем опираться на эти цифры, которые условны и лишь помогут нам сделать повествование более конкретным. К слову, нашим читателям уже известно, что наращивание оперативной памяти не всегда ведет к повышению производительности компьютера.

Что будет, если встроить в материнскую плату специальное хранилище информации, небольшое, но сравнительно быстрое (допустим, на цикл обращения к нему уйдет всего 30 наносекунд). Это уже в два раза быстрее того времени, которое потребовалось бы на обращение к оперативной памяти. Такой кэш называется кэшем второго уровня (или кэшем L2).

А если интегрировать еще меньшую, но еще более скоростную память непосредственно в чип процессора? Получится кэш первого уровня. Обращаться к такой памяти процессор сможет уже на своей скорости. В качестве примера возьмем устаревший процессор Pentium с тактовой частотой 233 мегагерца. Его кэш первого уровня (L1) был быстрее кэша второго уровня (L2) в 3,5 раза. А тот, в свою очередь, вдвое быстрее времени доступа к оперативной памяти.

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

Компьютер является сложным устройством, содержащим множество подсистем. Если встроить кэш между некоторыми из них, то производительность возрастет. Рассмотрим это на конкретном примере. Итак, перед нами процессор (самый быстрый компонент компьютера). За ним следует кэш первого уровня, затем кэш второго уровня, который кэширует данные из оперативной памяти. Но и сама оперативная память играет роль кэша для медленных устройств, к которым относятся жесткие и оптические диски.

И жесткому диску тоже приходится порой брать на себя функции кэша (временного хранилища) по отношению к вашему интернет-соединению. Ведь Интернет тоже можно рассматривать в качестве огромной, но не слишком быстрой, «памяти». Хранилище данных, расположенное на ступеньку выше в иерархии компьютерной памяти, может выступать кэшем данных по отношению к более медленному накопителю.

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

Продолжение следует

По материалам computer.howstuffworks.com