Кэш-память
Следует заметить, что, несмотря на повышение скорости ядра процессора, быстродействие памяти остается на прежнем уровне.
🕛 24.09.2009, 00:26
При этом возникает вопрос: как добиться повышения производительности процессора, если память, используемая для передачи данных, работает довольно медленно? Ответ прост: кэш. Попросту говоря, кэш-память представляет собой быстродействующий буфер памяти, используемый для временного хранения данных, которые могут потребоваться процессору. Это позволяет получать необходимые данные быстрее, чем при извлечении из оперативной памяти. Одним из дополнительных свойств, отличающих кэш-память от обычного буфера, являются встроенные логические функции. Кэш-память можно по праву назвать разумным буфером.Буфер содержит случайные данные, которые обычно обрабатываются по принципу “первым получен, первым выдан” или “первым получен, последним выдан”. Кэш-память, в свою очередь, содержит данные, которые могут потребоваться процессору с определенной степенью вероятности. Это позволяет процессору работать практически с полной скоростью без ожидания данных, извлекаемых из более медленной оперативной памяти. Кэш-память реализована в виде микросхем статической оперативной памяти (SRAM), установленных на системной плате или встроенных в процессор.
В современных ПК используются два уровня кэш-памяти, получившие название кэшпамяти первого (L1) и второго (L2) уровней (в некоторых серверных процессорах, например Itanium, применяется кэш-память третьего уровня - L3). Организация и функционирование кэш-памяти разных уровней рассматривается в следующих разделах.
Внутренняя кэш-память первого уровня
Во всех процессорах, начиная с 486-го, имеется встроенный (первого уровня) кэш-контроллер с кэш-памятью объемом 8 Кбайт в процессорах 486DX, а также 32, 64 Кбайт и более в современных моделях. Кэш - это быстродействующая память, предназначенная для временного хранения программного кода и данных. Обращения к встроенной кэш-памяти происходят без состояний ожидания, поскольку ее быстродействие соответствует возможностям процессора, т.е. кэш-память первого уровня (или встроенный кэш) работает на частоте процессора.Чтобы понять значение кэш-памяти, необходимо сравнить относительные скорости процессоров и ОЗУ. Основная проблема заключается в том, что быстродействие процессора выражается обычно в МГц (в миллионах тактов в секунду), в то время как скорость памяти выражается в наносекундах (т.е. в миллиардных долях секунды).
Временные и частотные параметры компонентов приводятся в главе 6. Как следует из материала этой главы, тактовой частоте процессора 233 МГц соответствует цикл длительностью 4,3 нс. Это означает, что для процессора, работающего на частоте 200 МГц, потребуется 4 нс памяти. Обратите внимание, что с процессором 233 МГц обычно используется системная плата с тактовой частотой 66 МГц, что соответствует скорости 15 нс на цикл. Основная память, скорость которой равна 60 нс (общий параметр практически для всех систем класса Pentium), приравнивается к тактовой частоте, примерно равной 16 МГц. Таким образом, в типичную систему Pentium 233 входит процессор, работающий на частоте 233 МГц (4,3 нс на цикл), системная плата, тактовая частота которой 66 МГц (15 нс на цикл), и основная память, работающая на частоте 16 МГц (60 нс на цикл).
Использование кэш-памяти сглаживает традиционный недостаток компьютера, состоящий в том, что оперативная память работает более медленно, чем центральный процессор (так называемый эффект “бутылочного горлышка”). Благодаря кэш-памяти процессору не приходится ждать, пока очередная порция программного кода или данных поступит из относительно медленной основной памяти, что приводит к ощутимому повышению производительности.
В современных процессорах встроенный кэш играет еще более важную роль, поскольку часто является единственным типом памяти во всей системе, который может работать синхронно с процессором. В большинстве современных процессоров используется множитель тактовой частоты, следовательно, они работают на частоте, в несколько раз превышающей тактовую частоту системной платы, к которой они подключены. Например, частота (2,8 ГГц) процессора Pentium 4 в 5,25 раза больше частоты шины системной платы, составляющей 533 МГц. Основная память работает на половинной частоте шины (266 МГц), поскольку в Pentium 4 применяется шина памяти с учетверенной подкачкой. Поскольку основная память подключена к системной плате, ее максимальная тактовая частота ограничена значением 266 МГц. На частоте 2,8 ГГц работает только кэш-память первого и второго уровней, встроенная в ядро процессора. В данном случае процессор Pentium 4, работающий на частоте 2,8 ГГц, имеет 20 Кбайт кэш-памяти первого уровня (8 Кбайт - кэш данных, 12 Кбайт - кэш трассировки выполнения) и 512 Кбайт кэш-памяти второго уровня. Кэш-память обоих уровней работает на полной частоте ядра процессора.
Если данные, необходимые процессору, находятся уже во внутренней кэш-памяти, то задержек не возникает. В противном случае центральный процессор должен получать данные из кэш-памяти второго уровня или (в менее сложных системах) с системной шины, т.е. непосредственно из основной памяти.
Как работает кэш-память
Для того чтобы разобраться с принципами работы кэш-памяти первого и второго уровней, прибегнем к аналогии.Герой нашей истории (в данном случае - вы), вкушающий различные яства, выступает в роли процессора, который извлекает необходимые данные из памяти и проводит их обработку. Кухня, на которой готовятся ваши любимые блюда, представляет собой основную оперативную память (SIMM/DIMM). Официант является кэш-контроллером, а стол, за которым вы сидите,
выступает в качестве кэш-памяти первого уровня. Роль кэш-памяти второго уровня выполняет тележка с заказанными блюдами, неспешно путешествующая между кухней и вашим столом.
Роли распределены, пора начинать нашу историю. Ежедневно примерно в одно и то же время вы обедаете в определенном ресторане. Входите в обеденный зал, садитесь за столик и заказываете, например, хот-дог. Для того чтобы сохранить соответствие событий, предположим, что средняя скорость поглощения пищи равна одному биту в четыре секунды (цикл процессора 233 МГц составляет около 4 нс). А также определим, что повару (т.е. кухне) для приготовления каждого заказанного блюда потребуется 60 с (значит, скорость основной памяти 60 нс).
Итак, при первом посещении ресторана вы садитесь за столик и заказываете хот-дог, после чего приходится ждать целых 60 секунд, пока приготовят заказанное блюдо. Когда официант наконец-то приносит заказ, вы не спеша, со средней скоростью, принимаетесь за еду. Доев хот-дог, подзываете к себе официанта и заказываете гамбургер. Пока его готовят, вы снова ждете те же 60 секунд. Принесенный гамбургер съедается с той же скоростью. Подобрав последние крошки, снова зовете официанта и заказываете уже котлеты “по-киевски”. После 60-секундного ожидания принесенное блюдо съедается с аналогичной скоростью. Затем вы решаете заказать на десерт, скажем, яблочный пирог. Заказанный пирог вы получаете после ставшего привычным 60-секундного ожидания. Одним словом, обед состоит главным образом из длительных ожиданий, которые перемежаются энергичным поглощением заказываемых блюд.
После того как два дня подряд ровно в 18.00 вы приходите в ресторан и заказываете одни и те же блюда в одной и той же последовательности, у официанта появляется дельная мысль: “Сегодня в 18.00 снова появится этот странный посетитель и сделает свой обычный заказ: хот-дог, гамбургер, котлеты “по-киевски” и яблочный пирог на десерт. Почему бы не приготовить эти блюда заранее? Я думаю, он должным образом оценит мои старания”. Итак, вы приходите в ресторан, заказываете хот-дог и официант сразу же, без малейшей паузы, ставит перед вами заказанное блюдо. После того как вы разделались с хот-догом и собираетесь заказать очередное блюдо, на столе появляется тарелка с гамбургером. Оставшаяся часть обеда проходит примерно так же. Вы стремительно, со скоростью один бит в четыре секунды, поглощаете пищу, не ожидая, пока заказанное блюдо будет приготовлено на кухне. На сей раз время обеда заполнено исключительно тщательным пережевыванием пищи, и все благодаря смекалке и практичному подходу официанта.
Приведенный пример достаточно точно описывает работу кэш-памяти первого уровня в процессоре. Роль кэш-памяти первого уровня в данном случае выполняет поднос, на котором может находиться одно или несколько блюд. При отсутствии официанта пространство подноса представляет собой некий резервный запас (т.е. буфер) продуктов питания. Если буфер заполнен, значит, можно есть до тех пор, пока поднос не опустеет. Обдуманно пополнить его содержимое, к сожалению, некому. Официант представляет собой кэш-контроллер, предпринимающий определенные меры и пытающийся решить, какие же блюда следует заранее поставить на стол в соответствии с вашими возможными пожеланиями. Подобно настоящему кэш-контроллеру, официант воспользуется своим опытом для того, чтобы определить, какое блюдо будет заказано следующим. Если он определит правильно, значит, не придется долго ждать.
Настал день четвертый. Вы появляетесь в ресторане, как обычно, ровно в 18.00 и начинаете с привычного хот-дога. Официант, изучивший к тому времени ваши вкусы, уже приготовил хот-дог, и вы сразу же, не ожидая, приступаете к трапезе.
После хот-дога официант приносит вам гамбургер и вместо слов благодарности слышит: “Вообще-то я гамбургер не заказывал. Принесите мне, пожалуйста, отбивную”. Официант ошибся в своих предположениях, и вам снова придется ждать целых 60 секунд, пока на кухне не приготовят заказанное блюдо. Подобное событие, т.е. попытка доступа к той части кэши-рованного файла, которая отсутствует в кэш-памяти, называется промахом кэша (cache miss). Как следствие, возникает пауза, или, если говорить о системе Pentium 233 МГц, при каждом промахе кэша быстродействие системы снижается до 16 МГц (т.е. до скорости оперативной памяти). Кэш-память первого уровня большей части процессоров Intel имеет коэффициент совпадения, равный примерно 90%.
Это означает, что кэш-память содержит корректные данные 90% времени, а следовательно, процессор работает на полной скорости (в данном случае с частотой 233 МГц) примерно 90% всего времени. Оставшиеся 10% времени кэш-контроллер обращается к более медленной основной памяти, во время чего процессор находится в состоянии ожидания. Фактически происходит снижение быстродействия системы до уровня оперативной памяти, скорость которой равна 60 нс, или 16 МГц.
В нашем примере быстродействие процессора примерно в 14 раз выше скорости оперативной памяти. В современных системах скорость памяти увеличилась с 16 МГц (60 нс) до 333 МГц (3,0 нс), в то время как тактовая частота процессоров выросла до 3 ГГц и более, т.е. память все еще в 7,5 раза (или более) медленнее процессора. Кэш-память позволяет компенсировать эту разность.
Основная особенность кэш-памяти первого уровня состоит в том, что она всегда интегрирована с ядром процессора и работает на той же частоте. Это свойство в сочетании с коэффициентом совпадений, равным 90%, делает кэш-память важной составляющей эффективности системы.
Кэш-память второго уровня
Для того чтобы уменьшить ощутимое замедление системы, возникающее при каждом промахе кэша, следует обратиться к кэш-памяти второго уровня.
Развивая аналогию с рестораном, которая использовалась для объяснения работы кэшпамяти первого уровня, можно обозначить кэш-память L2 как сервировочный столик с “дежурными” блюдами, расположение которого позволяет официанту принести любое из имеющихся блюд через 15 секунд. В системе класса Pentium (Socket 7) кэш-память второго уровня установлена на системной плате, т.е. работает на тактовой частоте системной платы (66 МГц, или 15 нс). Рассмотрим ситуацию, когда вы заказываете блюдо, которого нет в числе ранее принесенных. В этом случае, вместо того чтобы отправиться на кухню и через 60 секунд принести приготовленное блюдо, официант в первую очередь проверяет столик с дежурными блюдами. При наличии там заказанного блюда он возвращается уже через 15 секунд. Результат в реальной системе выражается в следующем: вместо снижения быстродействия системы с 233 до 16 МГц и соответственно скорости основной памяти до 60 нс происходит извлечение необходимых данных из кэш-памяти второго уровня, скорость которой равна 15 нс (66 МГц). Таким образом, быстродействие системы изменяется с 233 до 66 МГц.
Более современные процессоры содержат встроенную кэш-память второго уровня, которая работает на той же скорости, что и ядро процессора, причем скорости кэш-памяти первого и второго уровней одинаковы. Если описывать новые микросхемы с помощью аналогий, то в этом случае официант размещает столик с дежурными блюдами рядом с тем столиком, за которым вы сидите. При этом, если заказанного блюда на вашем столе нет (промах кэш-памяти первого уровня), официанту всего лишь необходимо дотянуться к находящемуся рядом столику с дежурными блюдами (кэш-память второго уровня), что потребует гораздо меньше времени, чем 15-секундная прогулка на кухню, как это было в более ранних конструкциях.
Кэш-память третьего уровня
Некоторые процессоры, преимущественно те, которые предназначены для высокопроизводительных игровых или серверных систем, содержат кэш-память третьего уровня L3. При этом кэш-память L3 работает с такой же частотой, как L1 и L2.Все еще развивая аналогию с рестораном, которая использовалась для объяснения работы кэш-памяти первого и второго уровней, можно обозначить кэш-память L3 как столик с дополнительными блюдами. Если нужного блюда нет на первых двух столах, вероятно, его можно будет найти на третьем столе.
Хотя компания Intel оснастила кэш-памятью L3 первую версию процессора Pentium 4 Extreme Edition, а также серверные процессоры Itanium 2 и Xeon MP, более современные настольные процессоры, в том числе и двухъядерные Pentium D и Pentium Extreme Edition, используют кэш-память L2 увеличенного объема вместо кэш-памяти L3.
Конструкция и эффективность кэш-памяти
Коэффициент совпадения кэш-памяти как первого, так и второго уровней составляет 90%. Таким образом, рассматривая систему в целом, можно сказать, что 90% времени она работает с полной тактовой частотой (в нашем примере 233 МГц), получая данные из кэш-памяти первого уровня; 10% времени данные извлекаются из кэш-памяти второго уровня. Процессор работает с кэш-памятью второго уровня только 90% этого времени, а оставшиеся 10% вследствие промахов кэша - с более медленной основной памятью. Таким образом, объединяя кэшпамять первого и второго уровней, получаем, что обычная система работает с частотой процессора 90% времени (в нашем случае 233 МГц), с частотой системной платы - 9% времени (т.е. 90% от 10% при частоте 66 МГц), а с тактовой частотой основной памяти - примерно 1% времени (10% от 10% при частоте 16 МГц). Это хорошо демонстрирует важность кэш-памяти первого и второго уровней; при отсутствии кэш-памяти система часто обращается к ОЗУ, скорость которого значительно ниже скорости процессора.Это наводит на интересные мысли. Представьте, что вы собираетесь повысить эффективность оперативной памяти или кэш-памяти второго уровня вдвое. На что же именно потратить деньги? Поскольку оперативная память непосредственно используется примерно 1% времени, двойное увеличение ее производительности приведет к повышению быстродействия системы только в 1% времени! Нельзя сказать, что это звучит убедительно. С другой стороны, если вдвое повысить эффективность кэш-памяти второго уровня, это повлечет за собой двойное увеличение эффективности системы в 9% времени; безусловно, подобное улучшение окажется более весомым.
Системотехники и специалисты по разработке процессоров компаний Intel и AMD зря времени не теряли и разработали методы повышения эффективности кэш-памяти второго уровня. В системах класса Pentium (P5) кэш-память второго уровня обычно устанавливается на системной плате и работает соответственно с ее тактовой частотой. Intel значительно повысила производительность процессоров, переместив кэш-память с системной платы непосредственно в процессор, что повлекло за собой увеличение ее рабочей частоты до частоты процессора. Сначала микросхемы кэша устанавливались в одном корпусе вместе с основным процессором. Но такая конструкция оказалась слишком дорогой, поэтому, начиная с процессоров семейства Pentium II, компания Intel стала приобретать микросхемы кэш-памяти у сторонних производителей (Sony, Toshiba, NEC, Samsung и т.д.). Микросхемы поставлялись уже в готовом виде, в корпусном исполнении, поэтому Intel начала их устанавливать на монтажной плате рядом с процессором. Именно поэтому процессор Pentium II был изначально разработан в виде картриджа.
Одна из существенных проблем заключалась в быстродействии микросхем кэш-памяти сторонних производителей. Скорость наиболее быстрых микросхем достигала 3 нс и выше, что было эквивалентно тактовой частоте 333 МГц. Но процессоры уже работали на более высоких скоростях, поэтому в Pentium II и первых моделях Pentium III кэш-память второго уровня работает на половинной частоте процессора. В некоторых моделях процессора Athlon скорость кэшпамяти второго уровня уменьшена до двух пятых или даже одной трети тактовой частоты ядра.
Качественный скачок в технологии произошел с появлением процессоров Celeron 300A и выше. В этих процессорах внешние микросхемы кэш-памяти второго уровня не используются. Вместо этого кэш-память как первого, так и второго уровней была интегрирована непосредственно в ядро процессора. Таким образом, кэш-память обоих уровней работает с полной тактовой частотой процессора, что позволяет повышать ее быстродействие при возможном увеличении скорости процессора. В последних моделях Pentium III, а также во всех процессорах Xeon и Celeron кэш-память второго уровня по-прежнему работает с тактовой частотой ядра процессора, а значит, при неудачном обращении в кэш-память первого уровня ожидания или замедления операций не происходит. В современных моделях процессоров Athlon и Duron также используется встроенная кэш-память, работающая с частотой ядра. Как вы знаете, при неудачном обращении к внешней кэш-памяти происходит снижение скорости кэша до половинной частоты ядра или, что еще хуже, до частоты более медленной системной платы. Использование встроенного кэша позволяет значительно повысить эффективность процессора, так как 9% времени в системе будет использоваться кэш-память второго уровня, работающая с полной частотой ядра. К числу преимуществ встроенной кэш-памяти относится также снижение ее стоимости, так как она содержит меньше компонентов.
Вернемся к рассмотренной ранее аналогии, используя в качестве примера современный процессор Pentium 4 с тактовой частотой 2 ГГц. Теперь скорость поглощения вами пищи равна одному байту в секунду (тактовой частоте 2 ГГц соответствует длительность цикла 0,5 нс). Кэш-память первого уровня работает на этой же частоте, т.е. скорость поглощения блюд, находящихся на вашем столе, равна скорости процессора (а столик соответствует кэш-памяти первого уровня). Ощутимое повышение быстродействия происходит в том случае, когда вы заказываете блюдо, которого нет на столе (промах кэша первого уровня), и официанту приходится обращаться к столику с дежурными блюдами. В девяти случаях из десяти он находит там нужное блюдо, которое приносит через полсекунды (частота кэш-памяти второго уровня равна 2 ГГц, что соответствует скорости 0,5 нс). Итак, современные системы работают 99% времени (суммарный коэффициент совпадения кэш-памяти первого и второго уровней) с частотой 2 ГГц и, как и прежде, в одном случае из ста понижают скорость до частоты оперативной памяти (приготовление блюда на кухне). При увеличении скорости памяти до 400 МГц (2,5 нс) время ожидания заказанного блюда из кухни достигнет 2,5 с. Эх, если бы скорость обслуживания в ресторане повышалась бы так же, как быстродействие процессора!
Организация работы кэш-памяти
Как известно, кэш хранит копии данных из различных адресных областей основной памяти. Поскольку в кэше невозможно одновременно хранить копии данных из всех адресных областей, необходим такой метод определения адресов, данные которых скопированы в кэш, чтобы необходимые данные считывались непосредственно из кэша, а не из основной оперативной памяти. Для этого применяется ОЗУ тегов - дополнительная область памяти кэша, в которой содержится индекс адресов, скопированных в кэш. Каждая строка памяти кэша имеет соответствующий адресный тег, который хранит адрес данных основной памяти, скопированных в текущий момент времени в отдельную строку кэша. Для получения данных с конкретного адреса основной памяти кэш-контроллер просматривает содержимое ОЗУ тегов, чтобы определить наличие адреса, содержащегося в кэше (совпадение), или его отсутствие (промах). Обнаруженные данные могут быть эффективно считаны из кэша; в противном случае процессор считывает данные из гораздо более медленной оперативной памяти.
Работа кэша зависит от методов упорядочения или отображения тегов. К таковым относятся методы полностью ассоциативного, прямого и множественно-ассоциативного отображения.
Метод полностью ассоциативного отображения заключается в следующем: когда запрашиваются данные с определенного адреса основной памяти, этот адрес сравнивается со всеми записями адресных тегов в кэше ОЗУ тегов. Если запрашиваемый адрес найден в теге (совпадение), возвращается соответствующий адрес данных в кэше. В том случае, когда адрес не обнаружен, констатируется промах, указывающий на то, что данные должны быть получены с адреса основной памяти вместо кэша.
При прямом отображении конкретные адреса основной памяти назначаются определенным адресам строк в кэше, где будут храниться в дальнейшем данные из основной памяти. Таким образом, для работы ОЗУ тегов понадобится меньшее число бит, так как, когда известен адрес основной памяти, необходимо проверить только один адресный тег. Каждый тег будет содержать только возможный адрес, хранимый в избранной строке ОЗУ тегов. Данный метод также отличается высокой эффективностью, поскольку для получения адреса основной памяти необходимо проверить лишь один адресный тег.
Метод множественно-ассоциативного отображения основан на методе прямого отображения, описанном ранее. Кэш прямого отображения имеет единственный ассоциативный набор адресов, т.е. один адрес основной памяти может быть ассоциирован (или отображен) только
с определенным адресом строки кэша. Двухстраничный множественно-ассоциативный кэш содержит два набора, поэтому адрес памяти может содержаться в одной из двух строк кэша. В свою очередь, четырехстраничный множественно-ассоциативный кэш хранит адрес памяти в одной из четырех различных строк кэша (наборов). Увеличение ассоциативных наборов повышает шанс обнаружить необходимое значение; тем не менее это занимает несколько больше времени, так как, чтобы найти определенное местоположение в кэше, понадобится просмотреть больше адресных тегов. В сущности, каждый набор в n-страничном множественно-ассоциативном кэше является субкэшем, ассоциированным с определенным адресом основной памяти. По мере увеличения субкэшей или наборов кэш становится полностью ассоциативным, т.е. каждый адрес памяти может храниться в любой строке кэша. В подобном случае n-страничный ассоциативный кэш будет представлять собой разумный компромисс между полностью ассоциативным кэшем и кэшем прямого отображения.
В целом кэш прямого отображения отличается наибольшей эффективностью размещения данных в кэш и считывания данных из кэша, поскольку для определенного адреса основной памяти необходимо просмотреть только один адресный тег. Тем не менее данный метод отличается повышенным количеством промахов по сравнению с другими методами. Полностью ассоциативный кэш характеризуется наилучшим уровнем совпадений, а также наименьшим быстродействием при обнаружении и получении данных, так как требуется просмотреть намного больше адресных тегов. В то же время n-страничный ассоциативный кэш предлагает компромиссный вариант между оптимизацией быстродействия кэша и процентом совпадений. Для обеспечения работы этого кэша требуется больше двоичных тег-разрядов, схем сравнений (компараторов) и т.д., поэтому реализация кэша является более дорогостоящей. Безусловно, выбор схемы кэширования состоит в поиске выгодной альтернативы, а выбранный метод в одном системном окружении может оказаться непригодным в другом. Многозадачная вычислительная среда, в частности операционная система Windows, представляет собой пример системного окружения, в котором процессор одновременно обрабатывает несколько областей памяти, поэтому использование n-страничного ассоциативного кэша помогает повысить производительность системы.
Организация кэш-памяти в процессорах 486 и семействе Pentium называется четырех-страничным набором ассоциативного кэша (four-way set associative cache), что подразумевает разделение кэш-памяти на четыре блока. Каждый блок, в свою очередь, организуется в виде 128 или 256 строк по 16 байт в каждой. Ниже приведены характеристики кэш-памяти первого и второго уровней.
Восьмистраничный (встроенный в ядро)
Содержимое кэша всегда должно соответствовать содержимому основной памяти, чтобы процессор работал с самыми свежими данными. Поэтому в семействе процессоров 486 используется кэш со сквозной записью (write-through), при которой данные, записанные в кэш, автоматически записываются и в основную память.В процессорах Pentium используется двунаправленный кэш (write-back), который работает при выполнении как операций считывания, так и операций записи. Это позволяет еще больше повысить производительность процессора. Хотя встроенный кэш в процессоре 486 используется только при чтении, внешний кэш в системе может быть двунаправленным. Кроме того, в процессорах 486 предусмотрен дополнительный 4-байтовый буфер, в котором можно хранить данные вплоть до передачи в память. Это необходимо в том случае, если шина памяти занята.
Еще одна особенность улучшенной архитектуры кэша состоит в том, что кэш-память является неблокируемой. Это свойство позволяет уменьшать или скрывать задержки памяти,
используя перекрытие операций процессора с выборкой данных. Неблокируемая кэш-память дает возможность продолжать выполнение программы одновременно с неудачными обращениями в кэш при наличии некоторых ограничений. Другими словами, кэш-память улучшает обработку промаха кэша и позволяет процессору продолжать выполнение операций, не связанных с отсутствующими данными.
Кэш-контроллер, встроенный в процессор, также используется для наблюдения за состоянием системной шины при передаче управления шиной альтернативным процессорам, которые называются хозяевами шины (bus masters). Процесс наблюдения, в свою очередь, называется отслеживанием шины (bus snooping). Если устройство, управляющее передачей данных по шине (т.е. хозяин шины), записывает какие-либо данные в область памяти, копия которой хранится в кэше процессора, то содержимое кэша перестает соответствовать содержимому основной памяти. В этом случае кэш-контроллер отмечает эти данные как ошибочные и при следующем обращении к памяти обновляет содержимое кэша, поддерживая тем самым целостность всей системы.
Все процессоры, поддерживающие использование кэш-памяти, включают в себя буфер быстрого преобразования (Translation Lookaside Buffer - TLB), необходимый для обработки неудачных попыток преобразования адресов кэш-памяти. Буфер представляет собой процессорную таблицу, в которой хранятся данные о местоположении недавно вызывавшихся адресов физической памяти. Он ускоряет преобразование виртуальных адресов в адреса физической памяти. Для дальнейшего повышения быстродействия в новых процессорах (например, Athlon с ядром Palomino) увеличено количество строк таблицы TLB. В процессорах Pentium 4 с технологией Hyper-Threading для каждого виртуального потока процессора выделена отдельная инструкция TLB (iTLB).
При увеличении тактовой частоты время цикла уменьшается. В новых системах не используется кэш на системной плате, поскольку быстрые модули DDR-SDRAM или RDRAM, применяемые в современных системах Pentium 4/Celeron или Athlon XP, могут работать на тактовой частоте системной платы. В современных процессорах кэш-память как первого, так и второго уровней встроена непосредственно в ядро, благодаря чему кэш-память второго уровня работает на полной частоте процессора. Быстродействие кэш-памяти - более важный параметр, чем ее объем. Правило гласит, что меньший, но более быстрый кэш всегда предпочтительнее медленного кэша большого объема. В табл. 3.16 приведены необходимый объем кэша и функции, выполняемые встроенным (первого уровня) и внешним (второго уровня) кэшем в современных системах.
1 Кэш-память второго уровня находится на системной плате, и ее объем зависит от выбранной платы и количества установленных модулей.
2 Процессор Pentium Pro выпускался также с кэш-памятью объемом 1024 и 512 Кбайт.
3 Двухканальная память использует два банка одновременно, что в два раза увеличивает пропускную способность.
Как видите, кэш-память двух уровней обеспечивает взаимодействие между быстрым центральным процессором и более медленной оперативной памятью, а также позволяет минимизировать периоды ожидания, возникающие при обработке данных. Решающую роль в этом играет кэш-память второго уровня, расположенная на кристалле процессора. Это позволяет процессору работать с тактовой частотой, наиболее близкой к его максимальной частоте.