Hyper-threading и производительность памяти

Когда процессоры были одноядерными, формирование двух логических ядер на основе одного кристалла выглядело техническим прогрессом. И название ему дали подходящее – Hyper-threading. В то время как раз завершалась гонка гигагерцев и стало очевидно, что будущее за мультипроцессорными платформами.

Использование нескольких логических ядер дало определенный прирост производительности. Не двукратный, конечно, но вполне адекватный тем изменениям, которые стали стандартом де-факто на ближайшее десятилетие. За это время много чего изменилось в процессорной архитектуре: были периоды непонятной опалы Hyper-threading, было и возрождение.

Сегодня, с появлением процессора Intel Xeon E5-2670 v3 возник непраздный вопрос, насколько оправдано использование нескольких логических потоков на платформах, где в одном сокете гнездится уже дюжина аппаратных ядер, умелой рукой Intel интегрированная в кристалл? В качестве технологической платформы мы решили использовать инженерный релиз сервера Intel S2600WT.

Двухюнитовый сервер Intel S2600WT с процессорами Xeon E5-2670 v3
Рис 1. Платформа Intel S2600WT с двумя процессорами Xeon E5-2670 v3 и 64 ГБ оперативной памяти на борту

Тестирование будем выполнять собственными утилитами, хорошо зарекомендовавшими себя в процессе знакомства с платформой Tyan S7070 и оценки производительности ноутбука ASUS N750JK.

Программное обеспечение для оценки производительности памяти

Программное обеспечение для оценки производительности оперативной памяти рассчитано на работу в среде 64-х битных операционных систем семейства Microsoft Windows. В нашем случае – это Windows Server R12. Утилита поддерживает до 16 параллельных потоков чтения и записи. Тестировщик самостоятельно принимает решение, задействовать потоки в рамках одного ядра или распределить их по всем ядрам системы (напомним, что их на платформе S2600WT всего 24, по 12 на сокет). Распределенный режим тестирования называется Ditributed, на приведенных ниже графиках он сокращенно обозначен как Disty.

Тест памяти в режиме некэшированной записи с распределением потоков по процессорным ядрам
Рис 2Тест памяти в режиме некэшированной записи с распределением потоков по процессорным ядрам

Оценка погрешности показала, что при многократном тестировании расхождение не превышает 0,20%, что совсем неплохо, учитывая работу утилиты в кольце защиты Ring 3. Запуски тестов для сбора статистики осуществлялись после перезагрузки с предварительной оптимизацией реестра. Более точные значения производительности можно ожидать либо в привилегированном режиме работы процессора (Ring 0), либо выполняя тестирование до старта операционной системы в среде UEFI BIOS.

Оценку производительности мы выполняем в трех режимах: чтение, кэшированная запись и запись без использования кэширования данных (т.наз. non-temporal store).

Режим кэшированной записи данных

Для записи используется 256-битная форма инструкции VMOVAPD, при этом процессор сначала заполняет строку кэш-памяти (64 байта), читая данные из 64-байтного блока, к которому относится записываемая ячейка. Затем, сама запись выполняется внутри процессора в кэш-памяти. Запись в оперативную память произойдет только тогда, когда данная строка будет вытеснена из кэш-памяти, а именно в двух случаях:

  1. при вытеснении данной строки с целью кэширования новых данных;
  2. при обслуживании событий, требующих когерентности кэш-памяти (доступ к той же ячейке со стороны других процессоров или bus-master устройств).

Режим non-temporal

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

  • Во-первых, потому что дополнительные операции с памятью выполняются дольше.
  • Во-вторых, потому что из кэш-памяти вытесняются более востребованные данные. Эта проблема существует еще со времен появления SSE в процессорах Pentium III Katmai и Coppermine, а также технологии Write Allocation.

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

Результаты тестирования

Результаты тестирования производительности памяти на сервере Intel S2600WT
Рис 3. Сводные результаты тестирования

Резюме

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

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

 

Теги: 

Hyper-threading и производительность памяти