Бенчмарки в виртуальной реальности

24 Ноя 2014

Бенчмарки в виртуальной реальности

Теоретически, производительность памяти оценить довольно просто. Достаточно знать частоту, которой тактируется DIMM-модуль, и разрядность его шины данных. При оценке пропускной способности модуля ОЗУ в ноутбуке ASUS N750JK, мы получаем предельное значение в 12.8 Гб/сек. Этот произведение частоты в 1600 МГц и разрядности 8 байт (напоминаем, ширина шины данных для модулей DIMM составляет 64 бита; линии ECC не учитываются). Впрочем, это всего лишь верхний предел, да к тому же – одного из двух каналов памяти ноутбука, которому уготована участь стать тестовой платформой для наших экспериментов.

Суть памяти

В чем исследовательский интерес на хорошо изученной и достаточно известной платформе ASUS N750JK? Сегодня мы попытаемся прояснить для себя следующий вопрос: будет ли доступ к памяти в среде виртуальной машины тождественным по производительности к аналогичным характеристикам аппаратной платформы?

Условия эксперимента

Итак, аппаратная платформа – ноутбук ASUS N750JK с процессором Haswell i7-4700HQ 2400MHz (4 ядра, 8 потоков). Установлено 16 гигабайт оперативной памяти DDR3-1600, работающей в двухканальном режиме с симметричным заполнением каналов. Используется 64-битная операционная система Windows 8.1.

Виртуальная машина реализована средствами программного обеспечения Oracle VirtualBox 4.3.16. Так как объем статьи ограничен, мы приводим результаты только для варианта с установкой опций программы Oracle VirtualBox по умолчанию. Гостевая операционная система – 64-битная Windows 7. Конфигурация виртуальной платформы заслуживает особого комментария: виртуализация сделала невозможное возможным: новейший процессор Core i7-4700HQ мирно уживается с набором системной логики Intel 440FX, выпущенным в середине девяностых годов прошлого века для обслуживания процессора Intel Pentium Pro. Обращаем внимание и на то, что из восьми логических процессоров аппаратной платформы, виртуальной машине доступен только один.

Конфигурация виртуальной платформы
Рис 1. Конфигурация виртуальной платформы

Методы измерения

Для проведения исследований был разработан набор утилит измерения производительности операций чтения и записи блоков памяти. В сегодняшнем опыте мы задействуем 8 программных потоков, исходя из количества логических процессоров на аппаратной платформе. Размер блока, разделяемый между восемью потоками – 1 мегабайт. Операция чтения или записи блока повторяется 1000000 раз. В исследуемой платформе, такая операция интенсивно задействует кэш-память второго и третьего уровней (соответственно 256 килобайт на ядро и 6 мегабайт на процессор). Таким образом, оценивается производительность не оперативной памяти, а кэш-памяти, за исключением режима non-temporal, запрещающего кэширование.

Поскольку исследуемая виртуальная машина не поддерживает 256-битную технологию AVX, будем использовать 128-битную технологию SSE.

  1. Для чтения применяется 128-битная форма SSE-инструкции MOVAPD. Источник – операнд в памяти, получатель – XMM-регистр.
  2. Для записи применяется 128-битная форма SSE-инструкции MOVAPD. Источник – XMM-регистр, получатель – операнд в памяти. При этом, по умолчанию работает технология Write Allocation, а именно кэширование записываемых данных и данных, находящихся в их 64-байтной окрестности.
  3. Для записи в режиме non-temporal (без кэширования записываемых данных) применяется 128-битная форма SSE-инструкции MOVNTPD, источник – XMM-регистр, получатель – операнд в памяти. При этом процессор просто записывает данные в память без кэширования.

В режиме по умолчанию, в частности при выполнении инструкции MOVAPD, процессор сначала заполняет строку кэш-памяти (64 байта), читая данные из 64-байтного блока, к которому относится записываемая ячейка. Затем, сама запись выполняется внутри процессора в кэш-памяти. После этого, запись в оперативную память произойдет только при вытеснении строки из кэш-памяти.

В нашем случае, а именно при операциях с блоками, размер которых меньше размера кэш-памяти, технология Write Allocation дает прибавку производительности. Иначе, при операциях с большими блоками, предпочтительнее использовать запись без кэширования.

Описание выводимых параметров

dT(ms) – время выполнения теста в миллисекундах.

dTSC/Sec (MHz) – частота работы счетчика процессорных тактов TSC (Time Stamp Counter) в мегагерцах. Отметим, что процессоры, поддерживающие технологию Intel Turbo Boost, могут находиться в таких ACPI-состояниях, в которых частота TSC не равна тактовой частоте ядра процессора.

dTSC/Pass (Clks) – количество тактов TSC на одну итерацию. Для описываемых тестов, использующих 128-битную форму инструкции MOVAPD, за одну итерацию читается из памяти или пишется в память 256 байт (Шестнадцать 128-битных регистров XMM0-XMM15). При многопоточной реализации теста, данный параметр стал несколько виртуальным: например, если за 40 тактов 8 потоков выполнили одну итерацию, значение этого параметра будет 5 тактов.

Speed (MBPS) – скорость чтения или записи в мегабайтах в секунду; это суммарная скорость для всех потоков и основной результат бенчмарок.

RAX (debug) – отладочный код (содержимое 64-битного x86-регистра RAX); не информативен в данной ревизии программы.

Результаты измерений

  
Рис 2. Многократное кэшированное чтение блока, размером 1 мегабайт. Физическая платформа (левый скрин)  214916 мегабайт в секунду, виртуальная платформа (правый скрин)  51822 мегабайт в секунду. При кэшируемой операции и указанном размере блока измеряется производительность связки L2, L3 cache
 

  
Рис 3
. Многократная кэшированная запись блока, размером 1 мегабайт. Физическая платформа  121672 мегабайт в секунду, виртуальная платформа  29408 мегабайт в секунду. При кэшируемой операции и указанном размере блока измеряется производительность связки L2, L3 cache

  
Рис 4
. Многократная некэшированная запись блока, размером 1 мегабайт. Физическая платформа 22481 мегабайт в секунду, виртуальная платформа 18147 мегабайт в секунду. При некэшируемой операции измеряется производительность оперативной памяти. Результат физической платформы довольно близок к теоретическому пределу для DDR3-1600 в двухканальном режиме 25.6 гигабайт в секунду

Резюме

Цель представленного исследования — получить базовое представление о низкоуровневых характеристиках производительности виртуальной платформы. Мы стремились предложить тестирование, сохраняющее адекватность в условиях «виртуальной реальности», поэтому в нашем исследовании нет раздельного измерения пропускной способности для различных уровней кэш-памяти и оперативной памяти. Эксперимент не претендует на точное сравнение производительности виртуальной и физической платформ при прочих равных условиях. А можно ли говорить о прочих равных условиях при сравнении настолько разных объектов?