Кэш-память процессора стала важным элементом компьютера. Кэш является высокоскоростной, но в то же время, очень дорогой памятью, которая используется для ускорения операции вызова памяти. Вследствие высокой стоимости процессоры выпускаются с небольшим объёмом кэш по сравнению с памятью основной системы. Недорогие процессоры имеют ещё меньше кэш-памяти, и это основной способ для производителей снизить стоимость процессора и добиться менее дорогостоящих моделей. Как работает кэш-память процессора?
Без кэш-памяти процессор бы каждый раз запрашивал данные из основной памяти, которые бы затем посылались обратно на обработку процессору. Такой процесс считался бы сравнительно долгим. Суть кэш памяти заключается в том, что это очень быстрая память, которая сохраняет часто используемые данные. Она предназначена для того, чтобы максимально сократить время отклика процессора. Действие для выбора сохраняемых элементов основано на процентном соотношении их использования. Если определённые данные вызывались из памяти пять или более раз, весьма вероятно, что эти данные потребуются снова. Поэтому часто используемые данные сохраняются в кэш памяти.
Давайте проведём параллель между работой кэш-памяти и библиотекой. Представьте себе громадную библиотеку, на которую приходится всего один библиотекарь (подобие процессора компьютера). Читатель приходит в библиотеку и просит дать ему «Властелина колец». Библиотекарь встаёт, направляется к соответствующим полкам (подобие пути, который проходят данные), берет с полки книгу и даёт её читателю. Когда читатель прочтёт книгу, он вернёт её. Без кэш-памяти книга была бы возвращена на полку. Когда придёт другой читатель и попросит ту же книгу, весь процесс повторится и займёт столько же времени.
Если бы в библиотеке было своё подобие кэш-памяти, тогда при возвращении книги, её бы положили на полку рядом с библиотекарем. Таким образом, если бы пришёл следующий читатель и попросил «Властелина колец», библиотекарю бы не пришлось никуда ходить, а просто взять книгу со своего стола и дать её читателю. Такая система могла бы заметно сократить время на получение книги читателем. В случае с компьютером кэш-память позволяет намного быстрее получить необходимую информацию для обработки. Компьютер использует свою «логику», чтобы определить, к каким данным доступ происходит чаще всего и помещает их в кэш-память (держит часто читаемую книгу на полке рядом с библиотекарем).
Это одноуровневая кэш-память, используемая в большинстве жёстких дисков и других устройствах. Однако процессоры используют двухуровневую систему кэш-памяти. Принципы при этом совершенно одинаковы. Кэш-память первого уровня является самой быстрой и небольшой памятью, а кэш-память второго уровня больше по объёму, но работает медленнее. Хотя в сравнении с основной памятью кэш-память второго уровня быстрее, но меньше. Возвращаясь к аналогии с библиотекой – если теперь читатель вернёт «Властелина колец», книгу поместят на полку рядом с библиотекарем. Но что, если и другие книги становятся популярными, и после каждого возвращения помещаются на ближнюю полку библиотекаря при этом популярность «Властелина колец» стала немного меньше? Тогда «Властелин колец» уберут с полки библиотекаря в шкафчик, расположенный немного дальше от библиотекаря, чем его полка. Теперь, если придёт читатель и попросит «Властелина колец», библиотекарь сначала поищет эту книгу на полке и убедится, что её там нет. Затем он будет искать книгу в шкафчике неподалеку. То же самое свойственно работе процессора. При запросе данных сначала проверяется кэш-память первого уровня, а затем кэш-память второго уровня.
Всегда ли больший объём кэша – преимущество?
В общем и целом, на этот вопрос следует ответить утвердительно. Хотя не всегда. Проблема кэш-памяти большого объёма заключается в том, что процессор всегда будет сначала проверять кэш-память перед тем, как проверить основную память. И снова вернёмся к аналогии с библиотекой. Допустим, что в библиотеку пришли сразу 20 читателей и все за разными книгами, которые ещё никто не брал. В то же время работа библиотеки до этого не прекращалась, и теперь и полка рядом с библиотекарем, и шкафчик неподалёку заполнены до отказа. Тогда появляются сложности. Каждый раз, когда читатель запрашивает ранее не выдававшуюся книгу, библиотекарь будет проверять её наличие на полке и в шкафчике, прежде, чем поймёт, что книга находится в основной части библиотеки. В этом случае библиотекарь будет каждый раз вставать, чтобы принести читателю интересующую его книгу. Но если бы в библиотеке не существовало кэш системы, поиск происходил бы намного быстрее, потому библиотекарь бы не искал книгу на полке и в шкафчике, а сразу бы направлялся к основному фонду библиотеки.
Учитывая тот факт, что системы без кэш-памяти работают лучше только в определённых обстоятельствах, процессор с большим объёмом кэш-памяти смотрится привлекательнее. Такие приложения как кодеки MPEG файлов не используют кэш-память, так как через них проходит поток постоянно меняющихся данных.
Действительно ли кэш сохраняет только часто используемые данные?
Если в кэш-памяти есть место, в неё также будут сохраняться данные, связанные с часто используемой информацией. И снова библиотека. Если первый пришедший за день читатель просит библиотекаря дать ему «Властелина колец», разумный библиотекарь может также поместить на свою полку вторую часть «Властелина колец». Такой выбор объясняется высокой вероятностью запроса. Если кто-то придёт и попросит вторую часть «Властелина колец», усилия библиотекаря не пропали даром.
Попадание и промахи в кэш.
Попадание и промахи в кэш - это выражения для характеристики того, что попадает в кэш-память, а что – нет. Если процессор начнет искать данные в своей кэш-памяти, он либо найдёт их, либо не найдёт. Если процессор всё-таки найдёт то, что искал, тогда произошло попадание. Процент попаданий из общего количества попыток найти необходимые данные называется уровнем попаданий. Для наилучшей работы кэш-памяти, нужен кэш с высоким уровнем попаданий.