Сравнение эффекта больших страниц для процессоров Prescott, Northwood и Willamette

Это может выглядеть не­мно­го стран­ным, но мы все же решили в рамках не­боль­шо­го рет­ро-экс­пе­ри­мен­та раз­об­рать­ся в осо­бен­но­с­тях эво­лю­ции та­ких древ­них про­цес­со­ров, как Pen­ti­um 4. Мик­ро­ар­хи­тек­ту­ры трех ранних поколений этого CPU об­ла­да­ют од­ним свой­ст­вом, ко­то­рое мо­жет по­ка­зать­ся вто­ро­сте­пен­ным, но кар­ди­наль­но вли­я­ет на про­из­во­ди­тель­ность опе­ра­тив­ной па­мя­ти. Речь по­йдет о спо­соб­но­сти этих про­цес­со­ров Intel про­дол­жать опе­ре­жа­ю­щую вы­бор­ку дан­ных (дру­ги­ми сло­ва­ми — спе­ку­ля­тив­ную за­груз­ку) в за­ви­си­мо­с­ти от кон­тек­ста од­но­го из «та­ин­ст­вен­ных» ме­ха­низ­мов кэ­ши­ро­ва­ния.

Немного теории

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

Напомним: доступ к памяти может быть связан не только с чтением и записью операндов в соответствии с ло­ги­кой про­г­рам­мы. Спе­ку­ля­тив­ная опережающая загрузка или prefetch может и должна нивелировать ла­тент­ность путем за­бла­го­вре­мен­но­го чте­ния данных, доступ к которым не исключен в обозримом будущем.

Интрига, изучение которой «Компостер» начал больше года назад, состоит в реакции процессора на TLB-про­мах, про­и­зо­шед­ший в ходе спе­ку­ля­тив­ной загрузки. Именно здесь образовался простор для про­яв­ле­ния im­ple­men­ta­tion spe­ci­fic особенностей чипов различных моделей одного производителя. Давайте по­про­бу­ем под­твер­дить экс­пе­ри­мен­та­ми тезисы ранее опуб­ли­ко­ван­ной ста­тьи.

Официальная позиция Intel

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

Согласно документации Intel, процессоры Family 15=0Fh, model 0, 1, 2 игнорируют prefetch, если он приведет к TLB miss. Процессор Family 15=0Fh, model 3, обработает prefetch, даже если для этого придется загрузить новый элемент в TLB

Согласно документации Intel, процессоры Family 15=0Fh, model 0, 1, 2 игнорируют prefetch, если он приведет к TLB miss. Family 15=0Fh, model 3, обработает prefetch, даже если для этого придется загрузить новый элемент в TLB

Итак, у процессоров Prescott (это model=3), механизм опережающей загрузки продолжает работать, несмотря на TLB-промахи. Для Northwood и Willamette такие промахи останавливают спекулятивные операции. Про­цес­сор обновит TLB позднее, явно формируя обращение к операнду. При таком обращении по­лу­чить результат можно будет только че­рез некоторое количестве процессорных тактов — латентность опе­ра­тив­ной памяти не будет «спрятана» и про­я­вит­ся в полной мере.

Переходим к экспериментам

Large Pages и DRAM Read Bandwidth

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

  • P4 Prescott 2400 MHz = 133.3 x 18, L2=1MB
  • P4 Northwood 2400 MHz = 133.3 x 18, L2=512KB

Разрабатывая сценарий эксперимента вос­поль­зу­ем­ся тем, что применение больших страниц значительно умень­ша­ет ко­ли­че­ст­во TLB-промахов в пересчете на объем адресуемого диапазона, ибо увеличение размера стра­ни­цы от 4KB до 4MB (для 32-бит­ной плат­фор­мы) про­пор­ци­о­наль­но увеличивает объем памяти, свя­зан­ный с одним элементом в TLB-бу­фе­ре.

Для реализации опережающей загрузки тест использует специальные инструкции prefetch hints. Эксперимент по­став­лен на сис­тем­ной пла­те ASRock P4Dual-915GL. Информация о конфигурации тестовой платформы со­дер­жит­ся в скриншо­тах AIDA64. Гра­фи­ки производительности построены с помощью утилиты NCRB [1].

Оценка влияния опции Large Pages на пропускную способность при линейном чтении оперативной памяти для процессоров Prescott (верхняя пара графиков) и Northwood (нижняя пара графиков)

Оценка влияния опции Large Pages на пропускную способность при линейном чтении оперативной памяти для процессоров Prescott (верхняя пара графиков) и Northwood (нижняя пара графиков)

Как и ожидалось, в данном сценарии у Prescott большие страницы практически не влияют на пропускную спо­соб­ность при чте­нии опе­ра­тив­ной памяти, так как опережающая загрузка работает независимо от TLB-промахов — не­за­ви­си­мо от раз­ме­ра страниц выходим на производительность около 4.2 GBPS.

У Northwood влияние больших страниц ощутимо, поскольку каждый переход на следующую страницу может ока­зать­ся барь­е­ром для опе­ре­жа­ю­щего чтения, поэтому частота появления таких барьеров (через каждые 4KB или 4MB) имеет значение. В ре­жи­ме Large Pages ско­рость чтения возросла с 3.2 GBPS до 3.8 GBPS.

Large Pages и L2 Cache Latency

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

Оценка влияния опции Large Pages на латентность при псевдослучайном доступе к памяти для процессоров Prescott (верхняя пара графиков) и Northwood (нижняя пара графиков)

Оценка влияния опции Large Pages на латентность при псевдослучайном доступе к памяти для процессоров Prescott (верхняя пара графиков) и Northwood (нижняя пара графиков)

Оценка латентности выполнена в окрестности точек исчерпания L2 (1024KB для Prescott и 512KB для North­wood). Оба про­цес­со­ра располагают Data TLB объемом 64 элемента, каждый элемент TLB описывает од­ну стра­ни­цу. В ре­жи­ме стан­дарт­ных 4KB страниц исчерпание TLB произойдет при X = 64 * 4KB = 256 KB. В ре­жи­ме Large Pages ис­чер­па­ние в рас­смот­рен­ном из­ме­ри­тель­ном сценарии не происходит, поскольку 64 * 4 MB = 256 MB и на­хо­дит­ся за пре­де­ла­ми ис­сле­до­ван­но­го интервала.

NB: Тест латентности оперирует псевдослучайной последовательностью адресов. В качестве ад­ре­са для сле­ду­ю­ще­го об­ра­ще­ния к памяти используются данные, прочитанные в текущем обращении по прин­ци­пу свя­зан­но­го спис­ка (linked list). Таким образом, данный тест намеренно лишает CPU возможности спе­ку­ля­тив­но пред­ска­зать ад­рес сле­ду­ю­ще­го чте­ния памяти до завершения текущего и применить опе­ре­жа­ю­щую вы­бор­ку дан­ных.

Large Pages и Prefetch hints

Заметим, что при неоптимальной prefetch-дистанции, либо в режиме чтения без использования prefetch hints, вли­я­ние боль­ших стра­ниц, в том числе для процессоров Northwood/Willamette, может быть менее выражено. Это под­твер­ж­да­ет экс­пе­ри­мент, по­став­лен­ный на системной плате Intel D850 с RDRAM. Информация о кон­фи­гу­ра­ции тес­то­вой плат­фор­мы со­дер­жит­ся в скрин-шотах AIDA64.

Оценка влияния опции Large Pages на пропускную способность при линейном чтении оперативной памяти для процессоров Willamette с использованием prefetch (верхняя пара графиков) и на той же платформе, но без использования prefetch (нижняя пара графиков)

Оценка влияния опции Large Pages на пропускную способность при линейном чтении оперативной памяти для процессоров Willamette с использованием prefetch (верхняя пара графиков) и на той же платформе, но без использования prefetch (нижняя пара графиков)

Как видно из сравнения верхней и нижней пары графиков, влияние опции Large Pages на скорость чтения опе­ра­тив­ной па­мя­ти су­щест­вен­но зависит от наличия «намеков опережающей загрузки» или prefetch hints в из­ме­ри­тель­ном сце­на­рии.

Инструкции prefetch hints появились в составе функционального расширения SSE в процессоре Pentium III. Те­о­ре­ти­че­ски, их при­ме­не­ние также возможно в коде, где загрузка данных выполняется не SSE ин­ст­рук­ци­я­ми, по­сколь­ку pre­fetch hint и чтение из памяти — раздельные машинные команды.

На практике, измерительный сценарий, реализованный в NCRB, использует prefetch hints для SSE и AVX тес­тов, ес­ли це­ле­вым объектом является DRAM, а не кэш-память, и никогда не использует их в тестах, по­стро­ен­ных на клас­си­че­ских x86/x64 и MMX инструкциях. Для корректного моделирования работы Le­gacy кода подобные сочетания из­бе­га­ют­ся.

Выводы

Мы измерили влияние TLB-промахов на работу механизма опережающей загрузки в трех поколениях чипов Pen­ti­um 4. Кри­те­ри­ем эффективности стала скорость чтения оперативной памяти. При прочих равных ус­ло­ви­ях (так­то­вые час­то­ты яд­ра CPU, системной шины и DRAM соответственно равные 2.4 GHz, 133 MHz и 166 MHz) про­из­во­ди­тель­ность North­wood со­ста­ви­ла от 3.2 до 3.8 GBPS, в зависимости от размера страницы па­мя­ти. Prescott показал ус­той­чи­вый ре­зуль­тат око­ло 4.2 GBPS вне зависимости от размера страницы па­мя­ти.

Обратим внимание на одно из свойств Prescott — утилизацию пропускной способности системной шины, близ­кую к 100%. Ве­ли­чи­на 4.2 GBPS соответствует произведению эффективной частоты передачи ин­фор­ма­ции 533.3MHz и раз­ряд­но­с­ти ши­ны данных в байтах 64 бита = 8 байт (не путать с архитектурной раз­ряд­но­стью процессора). От­дель­ный плюс — со­хра­не­ние высокой про­из­во­ди­тель­но­сти доступа к опе­ра­тив­ной па­мя­ти в условиях переполнения TLB.

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

Ссылки

[1] NCRB — NUMA CPU and RAM Benchmark, v2.0