Процессоры и память: опыты с Willamette на платформе i850 Tehama

Когда уже продавать ничего не нуж­но и страс­ти улег­лись, мож­но спо­кой­но вер­нуть­ся к про­цес­со­рам и сис­тем­ной ло­ги­ке про­шлых лет с тем, что­бы ре­аль­но оце­нить их быст­ро­дей­ст­вие. Се­го­дня вы­бор плат­форм для это­го не­ве­лик: не все пла­ты под­дер­жи­ва­ют объ­ем па­мя­ти, до­ста­точ­ный для стар­та и ком­форт­ной ра­бо­ты од­ной из со­вре­мен­ных вер­сий Mic­ro­soft Win­dows. С точ­ки зре­ния софт­вер­но­го ги­ган­та, кри­ти­че­ским фак­то­ром яв­ля­ет­ся от­сут­ст­вие под­держ­ки тех­но­ло­гии NX (за­щи­та от вы­пол­не­ния дан­ных ) в ан­ти­квар­ных чи­пах клас­са Socket 478 и Socket 423. Где воз­мож­но, бу­дем ста­вить «де­сят­ку», ес­ли не по­лу­чит­ся — Win­dows 7. По воз­мож­но­с­ти — 64-бит­ную вер­сию, а нет, то и при­выч­ная 32-бит­ная сго­дит­ся.

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

Эксперимент №1.
Конфигурация стенда

Эксперименты решено было начинать на одной из самых реликтовых платформ с поддержкой CPU се­мей­с­т­ва Wil­la­met­te:

  • процессор Intel Pentium 4 CPU 1300MHz;
  • системная плата Intel Garibaldi D850GB;
  • оперативная память RDRAM объемом 1.5 GB в режиме Dual Channel PC800:
    • RIMM1: Samsung MR16R 082GBN1-CK8 256 MB PC800 RDRAM
    • RIMM2: Samsung MR16R 082GBN1-CK8 256 MB PC800 RDRAM
    • RIMM3: Samsung MR16R 162GEG0-CT9 512 MB PC1066 RDRAM
    • RIMM4: Samsung MR18R 162GEG0-CT9Q 512 MB PC1066 RDRAM

Сюрпризы TLB

Объем кэш-памяти L2 исследуемого процессора составляет 256 KB. В данном случае — это кэш последнего уров­ня (LLC). Бу­фер ас­со­ци­а­тив­ной тран­с­ля­ции (англ. Translation lookaside buf­fer, TLB) содержит 64 элемента, каж­дый из ко­то­рых в ре­жи­ме стандартных страниц описывает диапазон памяти, объемом 4 КБ, поэтому точка ис­чер­па­ния TLB дол­ж­на иметь место при 64 × 4 KB = 256 KB. В силу особенностей исследуемого процессора, име­ем част­ный слу­чай со­впа­де­ния точек исчерпания L2 и TLB, α = β = 256 KB.

Исследование латентности в окрестности точек исчерпания L2 (α=256KB) и TLB (β=256KB) в режиме Standard Pages — медианное значение латентности на исследованном интервале составляет 86.984 ns

Исследование латентности в окрестности точек исчерпания L2 (α=256KB) и TLB (β=256KB) в режиме Standard Pages — медианное значение латентности на исследованном интервале составляет 86.984 ns

Примечание. Графики отражают за­ви­си­мость ла­тент­но­с­ти памяти в на­но­се­кун­дах (ось Y) от объема об­ра­ба­ты­ва­е­мо­го бло­ка в килобайтах (ось X) в окрестности точек ис­чер­пания кэш-памяти и буфера ас­со­ци­а­тив­ной транс­ля­ции TLB — меньшие значения со­от­вет­ст­ву­ют боль­­шей про­из­во­ди­тель­но­с­ти.

Очевидно, в режиме Large Pages (больших страниц) точка исчерпания TLB будет находиться далеко за пре­де­ла­ми ис­сле­ду­е­мо­го ин­тер­ва­ла 64 × 4 MB = 256 MB.

Исследование латентности в окрестности точки исчерпания L2 (α=256KB ) в режиме Large Pages — медианное значение латентности на исследованном интервале составляет 48.079 ns

Исследование латентности в окрестности точки исчерпания L2 (α=256KB ) в режиме Large Pages — медианное значение латентности на исследованном интервале составляет 48.079 ns

Озадачивает преждевременный рост латентности, проявившийся на первом графике в точке x=192KB.

Гипотеза

Согласно документу Reverse Engineering Hardware Page Table Caches Using Side-Channel Attacks on the MMU (цитата) «…page table look­ups by the MMU are stored in the last level cache (LLC)…», а также согласно ин­фор­ма­ции, из­ло­жен­ной в гла­ве «2.2 Cach­ing MMU's Operations» LLC-кэш, т.е. кэш последнего уровня, ка­ко­вым для ис­сле­ду­е­мо­го про­цес­со­ра яв­ля­ет­ся L2, может использоваться для сохранения промежуточных ре­зуль­та­тов при обходе ие­рар­хи­че­ской сис­те­мы таб­лиц в процессе поиска дескриптора целевой страницы па­мя­ти.

За­бе­гая вперед заметим, что в более со­вре­мен­ных про­цес­сор­ных ар­хи­тек­ту­рах, рас­смот­рен­ный па­ра­докс, как пра­ви­ло, от­сут­ст­ву­ет или менее выражен и причин тому несколько:

  • статус LLC делегирован L3-кэш, объем которого составляет десятки мегабайт;
  • количество элементов в TLB-буфере кратно больше;
  • появились такие недокументированные компоненты, как Page Table Cache (Page Walk Cache).

Вместе с тем, в процессорах Intel Pentium II и Pentium III замеченная особенность также имеет место. Есть она и в про­цес­со­рах AMD, причем, зависимость проявления от поколения CPU достаточно сходная.

Резюме

Как известно, блок TLB хранит дескрипторы страниц (синоним PTE, Page Table Entry). Это конечный ре­зуль­тат по­ис­ка, вы­пол­ня­е­мо­го при трансляции виртуального адреса в физический. Вместе с тем, этого не­до­ста­точ­но — в ходе поиска процессор считывает и обрабатывает большее количество информации, в том чис­ле деск­рип­то­ры каталогов страниц (синоним PDE, Page Directory Entry).

Если не сохранять промежуточные результаты, а также смежные дескрипторы, то в случае TLB-промаха по­тре­бу­ет­ся пол­но­стью пов­то­рить обход иерархической цепочки трансляционных таблиц, что резко повышает стоимость TLB-про­ма­ха с точки зрения производительности. Предположительно, именно для кэширования таблиц стра­нич­ной транс­ля­ции в про­цес­со­рах Willamette резервируется около четверти объема кэш-памяти L2 (64KB).

Заметим, что сами таблицы, адресуемые системным регистром CR3 (Control Register 3), располагаются в не­тран­с­ли­ру­е­мой области памяти, в противном случае имела бы место ситуация, при которой для чтения таб­лиц тре­бу­ет­ся вы­пол­нить транс­ля­цию, а для выполнения трансляции требуется чтение таблиц.

Показательно, что в режиме Large Pages (второй график), где нагрузка на MMU и TLB существенно ниже, преж­де­вре­мен­ный рост ла­тент­но­с­ти отсутствует. Этот аргумент позволил нам поделиться данной гипотезой.

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