
- •АнНоТация
- •Оглавление
- •Введение
- •Общие принципы микроархитектуры Nehalem
- •Усовершенствованное процессорное ядро
- •Tlb и кэш-память
- •Новые sse4.2 инструкции
- •Интегрированный контроллер памяти
- •Шина qpi
- •Управление питанием и Turbo-режим
- •Первые Nehalem – это Bloomfield
- •Заключение
- •Приложение. Оперативная памятьDdr 3 Изучаем новое поколение памяти ddr sdram, теоретически и практически
- •Ddr3: некоторые технические сведения
- •Литература
Tlb и кэш-память
В самом начале
статьи мы упомянули, что наибольшие
отличия процессоров поколения Nehalem от
предшественников следует искать не в
глубине его ядер, а в интерфейсах и общей
структуре. Изменения, произошедшие с
кэш-памятью и TLB, полностью это подтверждают.
Выглядят они куда более значительными,
чем мелкие модификации во внутренних
блоках процессорного ядра.
В первую
очередь, инженеры Intel существенно
увеличили размер TLB (Translation-Lookaside Buffer).
Напомним, TLB – это высокоскоростной
буфер, который используется для
установления соответствия между
виртуальными и физическими адресами
страниц. Увеличение размера TLB, таким
образом, позволяет повысить число
страниц памяти, которые могут быть
одновременно использованы без
дополнительных дорогостоящих
преобразований по таблицам трансляции
адресов, находящимся в обычной памяти.
Более того, TLB в процессорах Nehalem стал
двухуровневым. Фактически, к унаследованному
от процессоров Core 2 TLB Intel просто добавила
ещё один буфер второго уровня. При этом
новый L2 TLB может похвастать не только
высокой вместительностью, позволяющей
сохранять до 512 записей, но и сравнительно
низкой латентностью. Ещё одна особенность
L2 TLB заключается в том, что он унифицирован
и способен транслировать адреса страниц
любого размера.
Очевидно, что изменения
в системе TLB сделаны в первую очередь с
прицелом на серверные приложения,
активно оперирующие большими объёмами
памяти. Однако и в «настольных» задачах
увеличенное число вхождений TLB может
оказать положительное влияние на
быстродействие подсистемы памяти. Тем
более, что при активации технологии SMT
TLB обоих уровней динамически разделяется
между виртуальными ядрами, так что
возможность сохранять в этом буфере
дополнительные записи явно не будет
лишней.
Ещё одно нововведение, способное
поднять скорость работы с подсистемой
памяти в процессорах с микроархитектурой
Nehalem, заключается в значительном ускорении
работы инструкций, оперирующих
невыровненными по строкам кэш-памяти
данными. Первые робкие шаги в этом
направлении были сделаны ещё в ядрах
Penryn, но именно в Nehalem инженеры добились
превосходного результата. Теперь
SSE-инструкции, использующие в качество
операндов выровненные 16-байтовые
последовательности данных, работают с
одинаковой скоростью, вне зависимости
от того, какой вариант команды используется:
для выровненных или для невыровненных
данных. Поскольку большинство компиляторов
транслирует код с использованием
«невыровненных» версий инструкций,
описанное усовершенствование способно
положительно повлиять на скорость
работы многих приложений, оперирующих
медиа-контентом.
Однако ускорение
работы с невыровненными данными и
добавление TLB второго уровня – мелочи
по сравнению со сделанной в процессорах
Nehalem коренной переделкой системы
кэш-памяти. От старой двухуровневой
структуры кэш-памяти с общим на каждые
два ядра L2 кэшем в новых процессорах
остался только кэш первого уровня
суммарным объёмом 64 кбайта, который
делится на две равные части на области
для хранения инструкций и данных. При
этом, хотя строение L1 кэша в Nehalem и
осталась старым, его латентность по
сравнению с L1 кэшем Core 2 увеличилась на
1 такт. Произошло это в связи с внедрением
в новых процессорах более агрессивных
энергосберегающих режимов и, по мнению
Intel, незначительно сказывается на
итоговой производительности.
Использование
же разделяемого L2 кэша, который показал
себя очень эффективным решением в
двухъядерных процессорах с микроархитектурой
Core, оказалось весьма проблематичным
при увеличении количества ядер. Поэтому
в микроархитектуре Nehalem, предполагающей
наличие в процессоре до 8 ядер, кэш
второго уровня не является разделяемым.
Каждое из ядер получило свой собственный
L2 кэш со сравнительно небольшим объёмом
256 кбайт. Зато благодаря своей ограниченной
ёмкости, этот кэш может похвастать в
полтора раза более низкой латентностью,
чем L2 кэш процессоров Core 2. Это отчасти
компенсирует возросшую латентность L1
кэша в Nehalem.
К двум уровням кэша в
Nehalem добавился и L3 кэш, который объединяет
ядра между собой и является разделяемым.
В результате, L2 кэш выступает буфером
при обращениях процессорных ядер в
разделяемую кэш-память, имеющую достаточно
солидный объём. Так, например,
четырёхъядерные процессоры с новой
микроархитектурой, ориентированные на
настольные компьютеры, будут использовать
L3 кэш объёмом 8 Мбайт.
Рис. 10. Структура Кеш-памяти
Использование
трёхуровневой кэш-памяти невольно
вызывает ассоциации с процессорами AMD
с микроархитектурой K10, однако кэш-память
Nehalem устроена всё же совершенно по-другому.
Во-первых, L3 кэш в Nehalem работает на более
высокой частоте, которая для первых
представителей этого семейства будет
установлена равной 2,66 ГГц. Во-вторых,
Intel не стал отказываться от инклюзивности
кэш-памяти, то есть от дублирования
данных, хранящихся в кэшах первого и
второго уровней, в L3 кэше. И это имеет
вполне рациональное объяснение.
Инклюзивный разделяемый кэш способен
обеспечить в многоядерных процессорах
более высокую скорость работы подсистемы
памяти за счёт избыточного дублирования
содержимого L1 и L2 кэшей всех ядер. В
частности, при отсутствии в нём
запрашиваемых одним из ядер данных, нет
необходимости искать их в индивидуальных
кэшах других ядер. А благодаря тому, что
каждая строка L3 кэша снабжена
дополнительными флагами, указывающими
владельцев этих данных, не вызывает
затруднений и процедура обратного
изменения содержимого строки кэша. Так,
если какое-то ядро модифицирует данные
в L3 кэше, изначально принадлежащие
другому (или другим) ядрам, то в этом
случае обновляется содержимое L1 и L2
кэшей и этих ядер. Таким путём решается
и проблема с избыточным межъядерным
трафиком, направленным на поддержание
когерентности инклюзивной
кэш-памяти.
Измерения латентности
кэш-памяти процессора Nehalem позволяют
говорить о высокой эффективности
предложенной схемы.
Таблица 1. Тестирование
латентности кешей
L2 кэш процессора
Nehalem действительно обеспечивает крайне
невысокую латентность. Кэш третьего
уровня также способен показать очень
хорошее время доступа, несмотря на свой
относительно большой размер. К слову,
вчетверо меньший эксклюзивный кэш
третьего уровня процессоров AMD Phenom X4 по
данным той же тестовой утилиты Sandra 2009
показывает примерно такую же латентность
– 54 цикла. Однако ввиду более низких
тактовых частот процессоров AMD, время
доступа L3 кэша у процессоров Phenom
оказывается ощутимо больше, чем у
Nehalem.
Несмотря на кардинальный пересмотр
системы кэширования, инженеры Intel не
стали менять алгоритмы работы блоков
предварительной выборки, они в Nehalem
целиком позаимствованы из Core 2. Это
означает, что упреждающая выборка данных
и инструкций производится только в
кэш-память первого и второго уровня.
Тем не менее, даже при использовании
старых алгоритмов, результативность
работы блоков предварительной выборки
улучшилась. Объясняется это тем, что L2
кэш в Nehalem индивидуален для каждого
ядра, а при такой организации кэш-памяти
гораздо легче отслеживать шаблоны в
обращениях. Кроме того, благодаря
появлению L3 кэша работа блока
предварительной выборки не наносит
существенного ущерба пропускной
способности шины памяти. Именно поэтому
в серверных вариантах процессоров
Nehalem блоки предварительной выборки
больше не будут отключаться, как это
делалось в процессорах Xeon, основанных
на микроархитектуре Core.