Что такое объем кэша процессора. Галерея эффектов кэшей процессоров. Значит, кэш умеет сохранять только самые требуемые данные

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

Только потом они отправляются непосредственно в процессор. Все это занимает очень много времени по компьютерным меркам. А вот, что если бы данные хранились где-то рядом с процессором?

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

Назначение кеш памяти

Что же такое кэш-память или кэш (по англ. cache memory, cache):

В широком смысле, подразумевается любая память с быстрым доступом , где хранится часть данных с другого носителя с более медленным доступом;

В узком смысле - это сверхоперативный вид памяти, который используется для повышения скорости доступа микропроцессора к оперативной памяти.

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

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

Вот пример того, как библиотека, то есть система работает без кэш-памяти .

Зачем нужна кэш-память?

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

Но, когда книга вернулась, библиотекарь не возвращает ее на полку, а кладет в ящик стола (этакая местная оперативная кэш-память ).

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

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

Хранит ли кэш только часто используемые данные? Как функционирует и работает кэш оперативной памяти ?

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

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

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

Эти смежные блоки данных, которые и передаются в кэш, называются кэш-линиями. Подробнее о понятии кэш-памяти можно посмотреть в этом видео:

Уровни кэш памяти

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

Лучшая бесплатная программа HDDScan для проверки жестких дисков

И снова возвратимся за примером к нашей библиотеке, на примере ее работы становится понятна как работает внешняя память компьютера .

Рассмотрим ящик библиотекаря в качестве кэша L1. Когда спрос на книги высок, и в ящике уже довольно много книг (нет места складывать) и вероятность того, что там найдется нужная, снижается.

Память L2 кэш

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

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

Двухуровневый кэш процессора

Кэш двух уровней у процессора – хорошая идея? Безусловно, да.

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

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

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

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

Хотя в последнее время, размеры кэш-памяти все увеличиваются, а цены растут не сильно, поэтому компьютеры работают все быстрее и быстрее.

То есть, наш библиотекарь обзаводится ящиком стола все большего размера, а шкафчик, стоящий рядом становится более вместительным! Еще в тему - двухядерные процессоры - правильно конфигурируем Windows.

Кэширование жесткого диска

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

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

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

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

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

3. Наконец, требуется время, чтобы головка нашла искомый сектор.

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

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

Этот метод известен также как метод опережающего чтения (Read Ahead). При работе с многозадачными системами желательно иметь жесткий дик (винчестер) с мультисегментной кэш-памятью, которая для каждой из задач отводит свою часть кэша.

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

Кэш-память процессора

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

Кэш-память процессора на компьютере выполняет функции буфера между процессором и оперативной памятью.

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

Кэш-памяти процессора делятся на несколько видов:

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

Работает эта память на частоте процессора. Время доступа к ней существенно меньше, чем к данным в основной оперативной памяти. Этим достигается ускорение работы процессора.

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

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


Секреты и тонкости работы на компьютере

Насколько важен кэш L3 для процессоров AMD?

Действительно, имеет смысл оснащать многоядерные процессоры выделенной памятью, которая будет использоваться совместно всеми доступными ядрами. В данной роли быстрый кэш третьего уровня (L3) может существенно ускорить доступ к данным, которые запрашиваются чаще всего. Тогда ядрам, если существует такая возможность, не придётся обращаться к медленной основной памяти (ОЗУ, RAM).

По крайней мере, в теории. Недавно AMD анонсировала процессор Athlon II X4 , представляющий собой модель Phenom II X4 без кэша L3, намекая на то, что он не такой и необходимый. Мы решили напрямую сравнить два процессора (с кэшем L3 и без), чтобы проверить, как кэш влияет на производительность.

Нажмите на картинку для увеличения.

Как работает кэш?

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

Попадания и промахи

Эффективность архитектуры кэшей измеряется процентом попаданий. Запросы данных, которые могут быть удовлетворены кэшем, считаются попаданиями. Если данный кэш не содержит нужные данные, то запрос передаётся дальше по конвейеру памяти, и засчитывается промах. Конечно, промахи приводят к большему времени, которое требуется для получения информации. В результате в вычислительном конвейере появляются "пузырьки" (простои) и задержки. Попадания, напротив, позволяют поддержать максимальную производительность.

Запись в кэш, эксклюзивность, когерентность

Политики замещения диктуют, как в кэше освобождается место под новые записи. Поскольку данные, записываемые в кэш, рано или поздно должны появиться в основной памяти, системы могут делать это одновременно с записью в кэш (write-through) или могут маркировать данные области как "грязные" (write-back), а выполнять запись в память тогда, когда она будет вытесняться из кэша.

Данные в нескольких уровнях кэша могут храниться эксклюзивно, то есть без избыточности. Тогда вы не найдёте одинаковых строчек данных в двух разных иерархиях кэша. Либо кэши могут работать инклюзивно, то есть нижние уровни кэша гарантированно содержат данные, присутствующие в верхних уровнях кэша (ближе к процессорному ядру). У AMD Phenom используются эксклюзивный кэш L3, а Intel следует стратегии инклюзивного кэша. Протоколы когерентности следят за целостностью и актуальностью данных между разными ядрами, уровнями кэшей и даже процессорами.

Объём кэша

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

Ассоциативность

Записи в оперативной памяти могут привязываться к кэшу напрямую (direct-mapped), то есть для копии данных из оперативной памяти существует только одна позиция в кэше, либо они могут быть ассоциативны в n-степени (n-way associative), то есть существует n возможных расположений в кэше, где могут храниться эти данные. Более высокая степень ассоциативности (вплоть до полностью ассоциативных кэшей) обеспечивает наилучшую гибкость кэширования, поскольку существующие данные в кэше не нужно переписывать. Другими словами, высокая n-степень ассоциативности гарантирует более высокий процент попаданий, но при этом увеличивается задержка, поскольку требуется больше времени на проверку всех этих ассоциаций для попадания. Как правило, наибольшая степень ассоциации разумна для последнего уровня кэширования, поскольку там доступна максимальная ёмкость, а поиск данных за пределами этого кэша приведёт к обращению процессора к медленной оперативной памяти.

Приведём несколько примеров: у Core i5 и i7 используется 32 кбайт кэша L1 с 8-way ассоциативностью для данных и 32 кбайт кэша L1 с 4-way для инструкций. Понятно желание Intel, чтобы инструкции были доступны быстрее, а у кэша L1 для данных был максимальный процент попаданий. Кэш L2 у процессоров Intel обладает 8-way ассоциативностью, а кэш L3 у Intel ещё "умнее", поскольку в нём реализована 16-way ассоциативность для максимизации попаданий.

Однако AMD следует другой стратегии с процессорами Phenom II X4, где используется кэш L1 с 2-way ассоциативностью для снижения задержек. Чтобы компенсировать возможные промахи ёмкость кэша была увеличена в два раза: 64 кбайт для данных и 64 кбайт для инструкций. Кэш L2 имеет 8-way ассоциативность, как и у дизайна Intel, но кэш L3 у AMD работает с 48-way ассоциативностью. Но решение выбора той или иной архитектуры кэша нельзя оценивать без рассмотрения всей архитектуры CPU. Вполне естественно, что практическое значение имеют результаты тестов, и нашей целью как раз была практическая проверка всей этой сложной многоуровневой структуры кэширования.

Каждый современный процессор имеет выделенный кэш, которых хранит инструкции и данные процессора, готовые к использованию практически мгновенно. Этот уровень обычно называют первым уровнем кэширования или L1, впервые такой кэш появился у процессоров 486DX. Недавно процессоры AMD стали стандартно использовать по 64 кбайт кэша L1 на ядро (для данных и инструкций), а процессоры Intel используют по 32 кбайт кэша L1 на ядро (тоже для данных и инструкций)

Кэш первого уровня впервые появился на процессорах 486DX, после чего он стал составной функцией всех современных CPU.

Кэш второго уровня (L2) появился на всех процессорах после выхода Pentium III, хотя первые его реализации на упаковке были в процессоре Pentium Pro (но не на кристалле). Современные процессоры оснащаются до 6 Мбайт кэш-памяти L2 на кристалле. Как правило, такой объём разделяется между двумя ядрами на процессоре Intel Core 2 Duo, например. Обычные же конфигурации L2 предусматривают 512 кбайт или 1 Мбайт кэша на ядро. Процессоры с меньшим объёмом кэша L2, как правило, относятся к нижнему ценовому уровню. Ниже представлена схема ранних реализаций кэша L2.

У Pentium Pro кэш L2 находился в упаковке процессора. У последовавших поколений Pentium III и Athlon кэш L2 был реализован через отдельные чипы SRAM, что было в то время очень распространено (1998, 1999).

Последовавшее объявление техпроцесса до 180 нм позволило производителям, наконец, интегрировать кэш L2 на кристалл процессора.


Первые двуядерные процессоры просто использовали существующие дизайны, когда в упаковку устанавливалось два кристалла. AMD представила двуядерный процессор на монолитном кристалле, добавила контроллер памяти и коммутатор, а Intel для своего первого двуядерного процессора просто собрала два одноядерных кристалла в одной упаковке.


Впервые кэш L2 стал использоваться совместно двумя вычислительными ядрами на процессорах Core 2 Duo. AMD пошла дальше и создала свой первый четырёхъядерный Phenom "с нуля", а Intel для своего первого четырёхъядерного процессора вновь использовала пару кристаллов, на этот раз уже два двуядерных кристалла Core 2, чтобы снизить расходы.

Кэш третьего уровня существовал ещё с первых дней процессора Alpha 21165 (96 кбайт, процессоры представлены в 1995) или IBM Power 4 (256 кбайт, 2001). Однако в архитектурах на основе x86 кэш L3 впервые появился вместе с моделями Intel Itanium 2, Pentium 4 Extreme (Gallatin, оба процессора в 2003 году) и Xeon MP (2006).

Первые реализации давали просто ещё один уровень в иерархии кэша, хотя современные архитектуры используют кэш L3 как большой и общий буфер для обмена данными между ядрами в многоядерных процессорах. Это подчёркивает и высокая n-степень ассоциативности. Лучше поискать данные чуть дольше в кэше, чем получить ситуацию, когда несколько ядер используют очень медленный доступ к основной оперативной памяти. AMD впервые представила кэш L3 на процессоре для настольных ПК вместе с уже упоминавшейся линейкой Phenom. 65-нм Phenom X4 содержал 2 Мбайт общего кэша L3, а современные 45-нм Phenom II X4 имеют уже 6 Мбайт общего кэша L3. У процессоров Intel Core i7 и i5 используется 8 Мбайт кэша L3.

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


Всем доброго времени суток. Сегодня мы постараемся растолковать вам такое понятие как кэш. Кэш память процессора – это сверхбыстрый массив обработки данных, скорость которого превышает показатели стандартной ОЗУ раз так в 16–17, если речь идет о DDR4.

Из этой статьи вы узнаете:

Именно объем кэш-памяти позволяет ЦП работать на предельных скоростях, не дожидаясь, пока оперативная память обработает какие-либо данные и не отправит результаты готовых вычислений чипу для дальнейшей их обработки. Аналогичный принцип прослеживается в HDD, только там используется буфер на 8–128 МБ. Другое дело, что скорости гораздо ниже, но процесс работы аналогичен.

Что такое кэш процессора?

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

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

Скорость работы определяется эффективностью оперативной памяти. Но ни один современный модуль DDR4, включая оверклокерские решения с частотами под 4000 МГц, и рядом не стоял с возможностями самого чахлого процессора с его «медленным» КЭШем.

Все потому, что скорость работы ЦП превышает показатели работы ОЗУ в среднем раз в 15, а то и выше. И не смотрите только на параметры частоты, помимо них отличий хватает.
В теории получается, что даже сверхмощные Intel Xeon и AMD Epyc вынуждены простаивать, но по факту оба серверных чипа работают на пределе возможностей. А все потому, что они набирают необходимое количество данных по величине кэша (вплоть до 60 и более МБ) и моментально обрабатывают данные. ОЗУ служит в качестве некоего склада, откуда черпаются массивы для вычислений. Эффективность вычислений компьютера возрастает и все довольны.

Краткий экскурс в историю

Первые упоминания о кэш-памяти датированы концом 80‑х годов. До этого времени скорость работы процессора и памяти были приблизительно одинаковой. Стремительное развитие чипов требовало придумать какой-нибудь «костыль», чтобы повысить уровень быстродействия ОЗУ, однако использовать сверхбыстрые чипы было очень затратно, а потому решились обойтись более экономичным вариантом – внедрением скоростного массива памяти в ЦП.

Впервые модуль кэш-памяти появился в Intel 80386. В то время задержки при работе DRAM колебались в пределах 120 наносекунд, в то время как более современный модуль SRAM сокращал время задержек до внушительных по тем временам 10 наносекунд. Примерная картина более наглядно продемонстрирована в противостоянии HDD против SSD.

Изначально кэш-память распаивалась прямиком на материнских платах, ввиду уровня техпроцесса того времени. Начиная с Intel 80486 8 кб памяти было внедрено непосредственно в кристалл процессора, что дополнительно увеличивало производительность и снижало площадь кристалла.

Данная технология расположения оставалась актуальной лишь до выхода Pentium MMX, после чего SRAM-память была заменена более прогрессивной SDRAM.
Да и процессоры стали гораздо меньше, а потому надобность во внешних схемах отпала.

Уровни кэш-памяти

На маркировке современных ЦП, помимо и , можно встретить такое понятие как размер кэша 1,2 и 3 уровней. Как он определяется и на что влияет? Давайте разбираться простым языком.

  • Кэш первого уровня (L1) – самая важная и быстрая микросхема в архитектуре ЦП. Один процессор может вместить количество модулей, равных числу ядер. Примечательно, что микросхема может хранить в памяти самые востребованные и важные данные только со своего ядра. Объем массива зачастую ограничен показателем в 32–64 КБ.
  • Кэш второго уровня (L2) – падение скорости компенсируется увеличением объема буфера, который доходит до 256, а то и 512 КБ. Принцип действия такой же, как и у L1, а вот частота запроса к памяти ниже, ввиду хранения в ней менее приоритетных данных.
  • Кэш третьего уровня (L3) – самый медленный и объемный раздел среди всех перечисленных. И все равно этот массив гораздо быстрее оперативной памяти. Размер может достигать 20, и даже 60 МБ, если речь касается серверных чипов. Польза от массива огромна: он является ключевым звеном обмена данными между всеми ядрами системы. Без L3 все элементы чипа были бы разрознены.

В продаже можно встретить как двух- так и трехуровневую структуру памяти. Какая из них лучше? Если вы используете процессор лишь для офисных программ и казуальных игр, то никакой разницы не почувствуете. Если же система собирается с прицелом под сложные 3D-игры, архивацию, рендеринг и работу с графикой, то прирост в некоторых случаях будет колебаться от 5 до 10%.
Кэш третьего уровня оправдан лишь в том случае, если вы намерены регулярно работать с многопоточными приложениями, требующими регулярные сложные расчеты. По этой причине в серверных моделях нередко используют кэш L3 больших объемов. Хотя бывают случаи, что и этого не хватает, а потому приходится дополнительно ставить так называемые модули L4, которые выглядят как отдельная микросхема, подключаемая к материнской плате.

Как узнать количество уровней и размер кэша на своем процессоре?

Начнем с того, что сделать это можно 3 способами:

  • через командную строку (только кэш L2 и L3);
  • путем поиска спецификаций в интернете;
  • с помощью сторонних утилит.

Если взять за основу тот факт, что у большинства процессоров L1 составляет 32 КБ, а L2 и L3 могут колебаться в широких пределах, последние 2 значения нам и нужны. Для их поиска открываем командную строку через «Пуск» (вводим значение «cmd» через строку поиска).

Система покажет подозрительно большое значение для L2. Необходимо поделить его на количество ядер процессора и узнать итоговый результат.

Если вы собрались искать данные в сети, то для начала узнайте точное имя ЦП. Нажмите правой кнопкой по иконке «Мой компьютер» и выберите пункт «Свойства». В графе «Система» будет пункт «Процессор», который нам, собственно, нужен. Переписываете его название в тот же Google или Yandex и смотрите значение на сайтах. Для достоверной информации лучше выбирать официальные порталы производителя (Intel или AMD).
Третий способ также не вызывает проблем, но требует установки дополнительного софта вроде GPU‑Z, AIDA64 и прочих утилит для изучения спецификаций камня. Вариант для любителей разгона и копошения в деталях.

Итоги

Теперь вы понимаете, что такое кэш-память, от чего зависит ее объем, и для каких целей используется сверхбыстрый массив данных. На данный момент наиболее интересными решениями на рынке в плане большого объема кэш-памяти, можно назвать устройства AMD Ryzen 5 и 7 с их 16 МБ L3.

В следующих статьях осветим такие темы как процессоров, пользу от чипов и не только. и оставайтесь с нами. До новых встреч, пока.

Все процессоры с конца 90-х годов имеют внутреннюю кэш-память (или просто кэш). Кэш — это быстродействующая память, в которую переносятся команды и данные, непосредственно обрабатываемые процессором.

В современных процессорах встроена кэш-память двух уровней — первого (L1) и второго (L2). С содержимым кэша L1 процессор работает несколько быстрее, а объем кэша L2 обычно несколько больше. Обращение к кэш-памяти происходит без состояния ожидания, т.е. кэш-память первого уровня (встроенный кэш) работает на частоте процессора.

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

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

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

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

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

Хотя вас в назначенное время уже ждал поднос с заказом, но за десертом официанту все равно пришлось бежать на кухню.

А на пятый — снова меню из трех наименований. На шестой — опять десерт, но отличающийся от предыдущего. И официант, не зная, что вы из десерта захотите заказать (да и вообще не зная, будете ли вы что-либо заказывать), решается на следующий шаг: рядом с вашим столиком ставит шкафчик с несколькими наименованиями десерта.

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

От объема кэша L1 (от 16 до 128 Кбайт) и L2 (от 64 Кбайт до 512 Кбайт, в Pentium III Хеоп и AMD Opteron до 4 Мбайт) существенно зависит производительность процессора.

У процессоров Intel Pentium III и процессоров Celeron на его основе размер кэша L1 составляет 32 Кбайт. У Intel Pentium 4, а также на его базе Celeron и Хеоп-версий — всего 20 Кбайт. Процессоры AMD Duron, Athlon (включая ХР/МР) и Opteron, а также VIA СЗ содержат 128 Кбайт L1 кэша.

Современные двухъядерные процессоры имеют кэш первого уровня для каждого ядра в отдельности, поэтому иногда в описании кэша мы можем встретить цифру 128×2. Это означает, что каждое ядро процессора обладает 128 Кбайт кэш-памяти первого уровня.

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

Это одна из причин того, что Pentium 4 относительно малоэффективен для большинства распространенных применений (хотя это компенсируется высокой тактовой частотой). Кэш L1 всегда работает (обменивается информацией с ядром процессора) на внутренней частоте процессора.

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

Такое решение использовано в устаревших процессорах Intel Pentium III (до 550 МГц) и устаревших AMD Athlon (в некоторых из них внутренний кэш L2 работал на трети частоты ядра процессора). Объем кэша L2 также различен для разных процессоров.

В устаревших, а также некоторых более новых процессорах Intel Pentium III объем кэша L2 составляет 512 Кбайт, в остальных Pentium III — 256 Кбайт. Процессор Intel Celeron на основе Pentium III выпускался с 128 и 256 Кбайт кэша L2, а на основе Pentium 4 — только со 128 Кбайт. В различных вариантах Xeon-версии Intel Pentium 4 присутствует до 4 Мбайт кэш-памяти L2.

В новых процессорах Pentium 4 (некоторые серии с частотой 2000 МГц и все — для частот выше) имеется 512 Кбайт кэша L2, в остальных Pentium 4 -256 Кбайт. В процессорах Хеоп (на основе Pentium 4) бывает 256 или 512 Кбайт кэша L2.

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

Как правило, кэш-памятью третьего уровня L3 комплектуются только процессоры для серверных решений или специальные модели «настольных» процессоров. Кэш-памятью L3 обладают, например, такие линейки процессоров, как Xeon DP, Itanium 2, Xeon MP.

Процессор AMD Duron имеет 128 Кбайт кэша L1 и 64 Кбайт кэша L2. В процессорах Athlon (кроме наиболее старых), Athlon MP и большинстве вариантов Athlon ХР присутствует 128 Кбайт кэша L1 и 256 Кбайт кэша L2, а в новейших Athlon ХР (2500+, 2800+, 3000+ и выше) — 512 Кбайт кэша L2. AMD Opteron содержит 1 Мбайт кэш-памяти L2.

Последние модели процессоров Intel Pentium D, Intel Pentium M, Intel Core 2 Duo выпускаются с 6 Мбайт кэш-памяти L2, a Core 2 Quad — 12 Мбайт кэш-памяти L2.

Последний на момент написания данной книги процессор фирмы Intel Core i7 обладает 64 Кбайт кэш-памяти L1 для каждого из 4 ядер, а также 256 Кбайт памяти L2 также для каждого ядра. Помимо кэш памяти первого и второго уровней процессор обладает и общей для всех ядер кэш-памятью третьего уровня, равной 8 Мбайт.

Для процессоров, у которых возможен разный размер кэша L2 (или в случае Intel Xeon MP — L3) у одной и той же модели, этот размер должен быть указан при продаже (от него, разумеется, зависит цена процессора). Если процессор продается в «коробочной» упаковке (поставка In-Box), на ней обычно указывается размер кэш-памяти.

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

Непревзойденными по этим параметрам остаются Хеоп-версии процессоров Pentium III. (Процессор Xeon MP оказывается все же более производительны в серверных задачах, чем Pentium III Xeon, за счет более высокой тактовой частоты самого процессора и шины обмена информацией с памятью.) Из изложенного выше сделаем вывод: кэш-память улучшает взаимодействие между быстрым процессором и более медленной оперативной памятью, а также позволяет минимизировать периоды ожидания, возникающие при обработке данных. Решающую роль в этом играет кэш-память второго уровня, расположенная в кристалле процессора.

Кэш-память процессора позволяет получать данные с очень высокой скоростью, значительно ускоряя вычисления. В кэш – память помещаются данные, которые часто требуются процессору. Это позволяет не затрачивать лишнее время на считывание данных из оперативной памяти. Если процессор запрашивает данные, которые отсутствуют в кэш-памяти, то запрос передается через шину памяти в оперативную память, а затем найденные данные отправляются в процессор. Не трудно догадаться, что на такой запрос уходит довольно много времени. Чтобы рассказать вам, как устроена кэш-память, мы будем использовать аналогию с обычной библиотекой.

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

Для чего процессору нужна кэш-память?

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

Кэш-память хранит только наиболее часто используемые элементы данных?

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

Два уровня кэш-памяти процессора

Большинство жестких дисков и некоторых других компонентов компьютера используют всего один уровень кэш – памяти. В отличие от них, кэш – память процессора является двухуровневой, в которой кэш 1-го уровня (L1) меньше и быстрее, а кэш 2-го уровня немного медленнее первого, но при этом намного быстрее, чем оперативная память. Кэш L1 разделен на две части, а именно, на кэш команд и на кэш данных. В кэше команд хранится набор инструкций, которые необходимы процессору для вычислений, в то время как кэш данных хранит значения, которые необходимы для текущего исполнения. Кэш L2 отвечает за загрузку данных из основной памяти. Опять же, возвращаясь к нашей библиотеке.

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

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

Чем больше кэш, тем лучше?

На этот вопрос можно ответить одновременно и, да и нет. Больший объем кэша позволяет быстро получать данные в случае, если они доступны в любом из уровней L1 и L2. Вернемся к нашему примеру с библиотекой. Если посетитель попросит какую – либо популярную книгу, которая не хранится библиотекарем в ящике стола или в книжном шкафу, то он сначала поищет ее в ящике, а затем перейдет к книжному шкафу. То есть некоторое количество времени будет тратиться впустую, прежде чем книга, наконец, будет извлечена с книжной полки библиотеки. Так же и процессор сначала проверяет кэш первого уровня (L1), затем второго (L2) и только после этого, отправляет запрос в оперативную память. Когда данные обнаруживаются в кэше, то это называется «попаданием», в противоположном случае – «промахом»


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


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