Преимущества процессоров Xeon для рабочих станций и серверов. Использование Intel AVX2 для обработки векторов

Дата: 2014-08-13 22:26

В далёком 2007 году компания AMD выпустила новое поколение процессоров Phenom. Эти процессоры, как оказалось впоследствии, содержали ошибку в блоке TLB (translation look-aside buffer буфер быстрого преобразования виртуальных адресов в физические). Компании не оставалось ничего иного, как решить эту проблему посредством «заплатки» в виде патча BIOS, но это снижало производительность процессора примерно на 15%.

Что-то подобное случилось теперь и с Intel. В процессорах поколения Haswell компания реализовала поддержку инструкций TSX (Transactional Synchronization Extension). Они предназначены для ускорения многопоточных приложений и должны были использоваться в первую очередь в серверном сегменте. Несмотря на то, что CPU Haswell присутствуют на рынке уже достаточно давно, данный набор инструкций практически не использовался. Видимо, в ближайшее время и не будет.

Дело в том, что Intel допустила «опечатку», как это называет сама компания, в инструкциях TSX. Ошибку, к слову, обнаружили вовсе не специалисты процессорного гиганта. Она может привести к нестабильности системы. Решить данную проблему компания может только одним способом, обновлением для BIOS, которое отключает данный набор инструкций.

К слову, TSX реализованы не только в процессорах Haswell, но и в первых моделях CPU Broadwell, которые должны появиться под именем Core M. Представитель компании подтвердил, что Intel намерена в будущем реализовать «безошибочный» вариант инструкций TSX в следующих своих продуктах.

Теги: Комментировать

Предыдущие новости

2014-08-13 22:23
Sony Xperia Z2 «выжил» после шестинедельного пребывания на дне солёного водоёма

Смартфоны часто становятся героями невероятных рассказов, в которых они примеряют на себя роль карманного бронежилета, останавливающего пулю и спасающего

2014-08-13 21:46
IPhone 6 перешёл в финальную стадию тестирования

По последним данным информационного агентства Gforgames, iPhone 6 поступил в финальную стадию тестирования перед массовым запуском нового смартфона в производство. Напомним, что iPhone 6 будет собираться в Китае на заводах...

2014-08-12 16:38
Восьмиядерный планшет iRU M720G поддерживает две SIM-карты

Планшет имеет 2 ГБ оперативной и 16 ГБ встроенной флеш-памяти. На борту присутствую две камеры: основная 8-мегапиксельная и фронтальная на 2 Мп. iRU M720G оснащен модулями 3G, GPS, Wi-Fi, Bluetooth, FM-радио, а также слотом на две SIM-карты, что позволяет ему выполнять функции...

2014-08-10 18:57
LG выпустила недорогой смартфон L60 в России

Без особой помпы и фанфар компания LG Electronics представила в России новую модель серии L Series III - LG L60. Этот недорогой смартфон представлен в ценовом диапазоне от 4 до 5 тысяч рублей у крупнейших российских...

#Xeon

Довольно часто при выборе однопроцессорного сервера или рабочей станции возникает вопрос, какой процессор использовать – серверный Xeon или обычный Core ix. Учитывая то, что данные процессоры построены на базе тех же самых ядер, выбор довольно часто падает именно на настольные процессоры, которые обычно имеют меньшую стоимость при схожей производительности. Почему же тогда Intel выпускает процессоры Xeon E3? Давайте разберёмся.

Технические характеристики

Для начала возьмём младшую модель процессора Xeon из актуального на данный момент модельного ряда - Xeon E3-1220 V3. В качестве оппонента выступит процессор Core i5-4440. Оба процессора выполнены на ядре Haswell, имеют одинаковую базовую тактовую частоту и схожие цены. Отличия этих двух процессоров представлены в таблице:

Наличие встроенной графики . На первый взгляд, у Core i5 есть преимущество, однако все серверные материнские платы имеют встроенную видеокарту, которой не требуется графический чип в процессоре, а рабочие станции обычно не используют встроенной графики из-за ее относительно низкой производительности.

Поддержка ECC . Высокая скорость и большой объем оперативной памяти повышают вероятность возникновения программных ошибок. Обычно такие ошибки оказываются незаметными, но, несмотря на это, они могут привести к изменению данных или падению системы. Если для настольных компьютеров подобные ошибки не страшны из-за их редкого возникновения, то в серверах, работающих круглые сутки по несколько лет, они недопустимы. Для их исправления используется технология ECC (error-correcting code), эффективность которой составляет 99,988%.

Расчетная тепловая мощность (TDP) . По сути, энергопотребление процессора при максимальной нагрузке. Xeon’ы, как правило, имеют меньший тепловой пакет и более «умные» алгоритмы энергосбережения, что в итоге приводит к меньшим счетам за электричество и более эффективному охлаждению.

Кэш L3 . Кэш-память – своеобразная прослойка между процессором и оперативной памятью, обладающая очень высокой скоростью. Чем больше объем кэша, тем быстрее работает процессор, так как даже очень быстрая оперативная память работает значительно медленнее кэш-памяти. Обычно процессоры Xeon имеют больший объем кэша, поэтому они предпочтительнее для ресурсоемких приложений.

Частота / Частота в режиме TurboBoost . Тут все просто – чем выше частота, тем быстрее при прочих равных условиях работает процессор. Базовая частота, то есть частота, при которой работают процессоры при полной нагрузке, одинаковая, но вот в режиме Turbo Boost, то есть при работе с приложениями, не рассчитанными на многоядерные процессоры, Xeon быстрее.

Поддержка Intel TSX-NI . Intel Transactional Synchronization Extensions New Instructions (Intel TSX-NI) подразумевает под собой надстройку над системой работы с кэшем процессора, оптимизирующую среду исполнения многопоточных приложений, но, конечно, только в том случае, если эти приложения используют программные интерфейсы TSX-NI. Наборы инструкций TSX-NI позволяют более эффективно реализовать работу с Big Data и базами данных - в случаях, когда множество потоков обращаются к одним и тем же данным и возникают ситуации блокировки потоков. Спекулятивный доступ к данным, который реализован в TSX, позволяет эффективнее строить такие приложения и более динамично масштабировать производительность при увеличении числа параллельно исполняемых потоков за счет разрешения конфликтов при доступе к общим данным.


Поддержка Trusted Execution . Технология Intel Trusted Execution расширяет возможности безопасного исполнения команд посредством аппаратного расширения возможностей процессоров и наборов микросхем Intel. Эта технология обеспечивает для платформ цифрового офиса такие функции защиты, как измеряемый запуск приложений и защищенное выполнение команд. Это достигается за счет создания среды, где приложения выполняются изолированно от других приложений системы.

К преимуществам процессоров Xeon старших моделей можно добавить еще больший объем L3, до 45 МБ, большее количество ядер, до 18, и больший объем поддерживаемой оперативной памяти, до 768 ГБ на процессор. При этом потребление не превышает 160 Вт. На первый взгляд, это очень большое значение, однако, учитывая то, что производительность таких процессоров в несколько раз превышает быстродействие того же Xeon E3-1220 V3 с TDP 80 Вт, экономия становится очевидной. Также следует отметить, что ни один из процессоров семейства Core не поддерживает многопроцессорность, то есть возможна установка не более одного процессора в один компьютер. Большая часть приложений для серверов и рабочих станций прекрасно масштабируется по ядрам, потокам и физическим процессорам, поэтому установка двух процессоров даст практически двукратный прирост производительности.

С каждым новом поколением процессоры Intel вбирают в себя все больше технологий и функций. Некоторые из них у всех на слуху (кто, например, не знает про гипертрединг?), о существовании других большинство неспециалистов даже не догадываются. Откроем всем хорошо известную базу знаний по продуктам Intel Automated Relational Knowledge Base (ARK) и выберем там какой-нибудь процессор. Мы увидим здоровенный список функций и технологий - что скрывается за их таинственными маркетинговыми наименованиями? Предлагаем углубиться в вопрос, обращая особое внимание на мало известные технологии - наверняка, там найдется много интересного.

Intel Demand Based Switching

Совместно с Enhanced Intel SpeedStep Technology, технология Intel Demand Based Switching отвечает за то, чтобы в каждый момент времени при текущей загрузке процессор работал на оптимальной частоте и получал адекватное электрическое питание: не больше и не меньше, чем требуется. Таким образом уменьшается энергопотребление и тепловыделение, что актуально не только для портативных устройств, но и для серверов тоже – именно там Demand Based Switching и используется.

Intel Fast Memory Access

Функция контроллера памяти для оптимизации работы с ОЗУ. Представляет собой комбинацию технологий, позволяющую благодаря углубленному анализу очереди команд выявить «совмещаемые» команды (например, чтение из одной и той же страницы памяти), а затем переупорядочить реальное выполнение таким образом, чтобы «совмещаемые» команды выполнялись друг за другом. Кроме того, менее приоритетные команды записи в память планируются на те моменты, когда прогнозируется опустошение очереди на чтение, и в результате процесс записи в память еще менее ограничивает скорость чтения.

Intel Flex Memory Access

Другая функция контроллера памяти, появившаяся еще во времена, когда он представлял собой отдельный чип, в далеком 2004 году. Обеспечивает возможность работы в синхронном режиме с двумя модулями памяти одновременно, причем в отличие от простого двухканального режима, который существовал и раньше, модули памяти могут быть разного размера. Таким образом достигалась гибкость в оснащении компьютера памятью, что и отражено в названии.

Intel Instruction Replay

Очень глубоко расположенная технология, появившаяся впервые в процессорах Intel Itanium. В процессе работы процессорных конвейеров может случиться такая ситуация, когда инструкции уже пришла очередь исполняться, а необходимые данные пока недоступны. Инструкцию тогда необходимо «переиграть»: снять с конвейера и запустить в его начале. Что, собственно, и происходит. Еще одна важная функция IRT – коррекция случайных ошибок на процессорных конвейерах. Подробнее об этой очень интересной функции читайте .

Intel My WiFi Technology

Технология виртуализации, позволяющая добавить виртуальный WiFi адаптер к существующему физическому; таким образом, ваш ультрабук или ноутбук может стать полноценной точкой доступа или повторителем. Программные компоненты My WiFi входят в состав драйвера Intel PROSet Wireless Software версии 13.2 и выше; надо иметь в виду, что с технологией совместимы лишь некоторые WiFi адаптеры. Инструкцию по установке, а также перечень программных и аппаратных совместимостей можно найти на сайте Intel .

Intel Smart Idle Technology

Еще одна технология энергосбережения. Позволяет отключать в данный момент не используемые блоки процессора или понижать их частоту. Незаменимая вещь для ЦПУ смартфона, как раз именно там и появившаяся – в процессорах Intel Atom.

Intel Stable Image Platform

Термин, относящийся скорее к бизнес-процессам, нежели к технологиям. Программа Intel SIPP обеспечивает стабильность программного обеспечения, гарантируя, что основные компоненты платформ и драйверы не будут изменяться в течение, как минимум, 15 месяцев. Таким образом, корпоративные клиенты имеют возможность пользоваться одними теми же развертываемыми образами систем в течение этого срока.

Intel QuickAssist

Набор аппаратно реализованных функций, требующих больших объемов вычислений, например, шифрование, компрессия, распознавание шаблонов. Смысл QuickAssist – упростить задачу разработчиков, предоставив им функциональные «кирпичики», а также ускорить их приложения. С другой стороны, технология позволяет поручить «тяжелые» задачи не самым мощным процессорам, что особенно ценится во встраиваемых системах, сильно ограниченных и по производительности, и по энергопотреблению.

Intel Quick Resume

Технология, разработанная для компьютеров на базе платформы Intel Viiv, позволявшая им включаться и выключаться практически мгновенно, как ТВ-приемники или DVD-плееры; при этом в «выключенном» состоянии компьютер мог продолжать выполнение некоторых задач, не требующих вмешательства пользователя. И хотя сама платформа плавно перешла в другие ипостаси вместе с сопутствовавшими ей наработками, в ARK строчка еще присутствует, ведь это было не так-то уж и давно.

Intel Secure Key

Обобщающее название для 32- и 64-битной инструкции RDRAND, использующей аппаратную реализацию генератора случайных чисел Digital Random Number Generator (DRNG). Инструкция используется в криптографических целях для генерации красивых и высококачественных случайных ключей.

Intel TSX-NI

Технология со сложным названием Intel Transactional Synchronization Extensions – New Instructions подразумевает под собой надстройку над системой работы с кэшем процессора, оптимизирующую среду исполнения многопоточных приложений, но, конечно, только в том случае, если эти приложения используют программные интерфейсы TSX-NI. Со стороны пользователя данная технология непосредственным образом не видна, но все желающие могут прочитать ее описание доступным языком в блоге Степана Кольцова .

В заключение еще раз хотим напомнить, что Intel ARK существует не только в виде сайта, но и как оффлайновое приложение для iOS и Android . Будьте в теме!

Достойна ли архитектура Haswell называться новой и переработанной?

Более пяти лет Intel придерживается стратегии «тик-так», чередуя перевод конкретной архитектуры на более тонкие технологические нормы с выпуском новой архитектуры.

В итоге каждый год мы получаем либо новую архитектуру, либо переход на новый техпроцесс. На 2013 год был запланирован «так», то есть выпуск новой архитектуры - Haswell. Процессоры с новой архитектурой выпускаются по тому же техпроцессу, что и предыдущее поколение Ivy Bridge : 22 нм, Tri-gate. Техпроцесс не поменялся, при этом количество транзисторов увеличилось, а значит, и конечная площадь кристалла нового процессора тоже увеличилась - а вслед за ней и энергопотребление.

Придерживаясь традиций, Intel в день анонса Haswell представила только производительные и дорогие процессоры линеек Core i5 и i7. Анонс двухъядерных процессоров младших линеек как всегда идет с задержкой. Стоит заметить, что цены на новые процессоры остались на том же уровне, что и у Ivy Bridge.

Сравним площади кристаллов разных поколений четырехъядерных процессоров:

Как видим, четырехъядерный Haswell имеет площадь всего 177 мм², при этом в него интегрирован северный мост, контроллер оперативной памяти и графическое ядро. Таким образом, количество транзисторов увеличилось на 200 миллионов, а площадь подросла на 17 мм². Если же сравнить Haswell с 32-нанометровыми Sandy Bridge, то количество транзисторов увеличилось на 440 миллионов (38%), а площадь за счет перехода на техпроцесс 22 нм сократилась на 39 мм² (18%). Тепловыделение все эти годы держалось практически на одном уровне (95 Вт у SB и 84 Вт у Haswell), а площадь уменьшалась.

Всё это привело к тому, что с каждого квадратного миллиметра кристалла приходится отводить больше тепла. Если раньше с 216 мм² надо было забирать 95 Вт, то есть 0,44 Вт/мм², то теперь с площади в 177 мм² надо забирать 84 Вт - 0,47 Вт/мм², что на 6,8% больше, чем раньше. Если эта тенденция сохранится, то скоро будет просто физически сложно отводить тепло с таких маленьких площадей.

Рассуждая чисто теоретически, можно предположить, что если в Broadwell, который будет производиться по техпроцессу 14 нм, количество транзисторов возрастет на 21%, как при переходе с 32 на 22 нм, а площадь при этом сократится на 26% (на ту же величину, что и при переходе с 32 на 22 нм), то мы получим 1.9 млрд. транзисторов на площади 131 мм². Если при этом тепловыделение также упадет на 19%, то у нас получится 68 Вт, или 0,52 Вт/мм².

Это теоретические расчеты, на практике будет иначе - переход техпроцесса с 32 на 22 нм также был ознаменован введением 3D-транзисторов, которые снизили токи утечки, а с ними и тепловыделение. Однако про переход с 22 нм на 14 нм пока ничего такого не слышно, так что на практике значения тепловыделения скорее всего будут еще хуже, и на 0,52 Вт/мм² надеяться не стоит. Тем не менее, даже если уровень тепловыделения будет 0,52 Вт/мм², проблема локального перегрева и сложность отвода тепла с маленького кристалла обострятся еще больше.

Кстати, именно сложности с отводом тепла при тепловыделении на уровне 0,52 Вт/мм² могут лежать в основе желания Intel перейти на BGA или попыток упразднить сокет. Если процессор будет распаян на материнской плате, то тепло будет непосредственно передаваться от кристалла к радиатору без промежуточной крышки. Это выглядит еще более актуальным в свете замены припоя на термопасту под крышками современных процессоров. Можно снова ожидать появления «голых» процессоров с открытыми кристаллами по примеру Athlon XP, т. е. без крышки как промежуточного звена в теполоотводе.

На видеокартах давно уже делается именно так, а опасность сколоть кристалл нивелируется железной рамкой вокруг него, поэтому у видеокарт нет таких «актуальных проблем», как термопаста под крышкой процессора. Тем не менее, разгон станет еще более сложным занятием, а правильное охлаждение «более тонких» процессоров - чуть ли не наукой. И всё это нас ожидает совсем скоро, если, конечно, не произойдет чудо…

Но опустимся на землю и вернемся к разговору о Haswell. Как мы знаем, Haswell получил ряд «улучшений/изменений» относительно Sandy Bridge (и, соответственно, Ivy Bridge, являвшегося, по большому счету, переводом SB на более тонкий техпроцесс):

  • встроенный регулятор напряжения;
  • новые энергосберегающие режимы;
  • увеличение объемов буферов и очередей;
  • увеличение пропускных способностей кэшей;
  • увеличение количества портов запуска;
  • добавление новых блоков, функций, API в интегрированном графическом ядре;
  • увеличение количества конвейеров в графическом ядре.

Таким образом, обзор новой платформы можно разделить на три части: процессор, встроенный графический ускоритель, чипсет.

Процессорная часть

Изменения в процессоре включают добавление новых инструкций и новых режимов энергосбережения, встраивание регулятора напряжения, а также изменения в самом процессорном ядре.

Наборы инструкций

В архитектуре Haswell появились новые наборы инструкций. Их можно условно разделить на две большие группы: направленные на увеличение векторной производительности и направленные на серверный сегмент. К первым относятся AVX и FMA3, ко вторым - виртуализация и транзакционная память.

Advanced Vector Extensions 2 (AVX2)

Набор AVX был расширен до версии AVX 2.0. Набор AVX2 предоставляет:

  • поддержку 256-битных целочисленных векторов (ранее была поддержка только 128-битных);
  • поддержку gather-инструкций, которые снимают требование непрерывного расположения данных в памяти; теперь данные «собираются» с разных адресов памяти - интересно будет посмотреть, как это повлияет на производительность;
  • добавление инструкций манипуляций/операций над битами.

В целом, новый набор больше ориентирован на целочисленную арифметику, и основной выигрыш от AVX 2.0 будет виден лишь в целочисленных операциях.

Fused Multiply-Add (FMA3)

FMA - это операции совмещенного умножения-сложения, при которых умножаются два числа и складываются с аккумулятором. Данный тип операций достаточно распространен и позволяет более эффективно реализовывать умножение векторов и матриц. Поддержка данного расширения должна значительно увеличить производительность векторных операций. FMA3 уже поддерживается в процессорах AMD с ядром Piledriver, а FMA4 - в Bulldozer.

FMA представляет собой комбинацию операции умножения и сложения: a=b×c+d.

Что касается FMA3, то это трехоперандные инструкции, то есть запись результата производится в один из трех участвующих в инструкции операндов. В итоге мы получаем операцию типа a=b×c+a, a=a×b+c, a=b×a+c.

FMA4 - это четырехоперандные инструкции с записью результата в четвертый операнд. Инструкция приобретает вид: a=b×c+d.

К слову об FMA3: данное нововведение позволит увеличить производительность более чем на 30% при условии адаптации кода под FMA3. Стоит заметить, что когда Haswell еще был далеко на горизонте, Intel планировала внедрять FMA4, а не FMA3, но впоследствии изменила решение в пользу FMA3. Скорее всего, именно из-за этого Bulldozer вышел с поддержкой FMA4: дескать, не успели переделать под Intel (а вот Piledriver вышел уже с FMA3). Причем изначально Bulldozer в 2007 году планировался именно с FMA3, но после обнародования планов Intel внедрить FMA4 в 2008 году AMD свое решение переиграла, выпустив Bulldozer с FMA4. А Intel затем сменила в планах FMA4 на FMA3, поскольку выигрыш от FMA4 по сравнению с FMA3 небольшой, а усложнение электрических логических схем - значительное, что также увеличивает транзисторный бюджет.

Выигрыш от AVX2 и FMA3 проявится после адаптации ПО под эти наборы инструкций, так что роста производительности «здесь и сейчас» ждать не стоит. А поскольку производители ПО достаточно инертны, то с «дополнительной» производительностью придется подождать.

Транзакционная память

Эволюция микропроцессоров привела к увеличению количества потоков - современный десктопный процессор имеет их восемь и более. Большое количество потоков создает все больше сложностей при реализации многопоточного доступа к памяти. Необходим контроль за актуальностью переменных в оперативной памяти: требуется вовремя блокировать данные для записи для одних потоков, разрешать чтение или изменение данных для других потоков. Это сложная задача, и для поддержки актуальности данных в многопоточных программах была разработана транзакционная память. Но до сегодняшнего дня она реализовывалась программно, что снижало производительность.

В Haswell появилось новое расширение Transactional Synchronization Extensions (TSX) - транзакционная память, которая предназначена для эффективной реализации многопоточных программ и повышения их надежности. Данное расширение позволяет реализовать «в железе» транзакционную память, тем самым повысив общую производительность.

Что такое транзакционная память? Это такая память, которая имеет внутри себя механизм управления параллельными процессами для обеспечения доступа к совместно используемым данным. Расширение TSX состоит из двух компонентов: Hardware Lock Elision (HLE) и Restricted Transaction Memory (RTM).

Компонент RTM представляет собой набор инструкций, с помощью которого программист может начать, закончить и прервать транзакцию. Компонент HLE вводит префиксы, которые игнорируются процессорами без поддержки TSX. Префиксы обеспечивают блокировку переменных, позволяя другим процессам использовать (считывать) заблокированные переменные и исполнять свой код до тех пор, пока не произойдет конфликт записи заблокированных данных.

На данный момент уже появились приложения с использованием данного расширения.

Виртуализация

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

  • улучшения, позволяющие сократить время перехода из гостевых систем в host-систему;
  • добавились биты доступа в Extended Page Table (EPT);
  • уменьшилось время доступа к TLB;
  • новые инструкции вызова гипервизора без выполнения команды vmexit;

В итоге время перехода между виртуализированными средами сократилось и составляет менее 500 тактов процессора. Это должно приводить к сокращению общих потерь производительности, связанных с виртуализацией. А новые Xeon E3-12xx-v3 предположительно будут быстрее в этом классе задач, чем Xeon E3-12xx-v2.

Встроенный регулятор напряжения

В Haswell регулятор напряжения переехал с материнской платы под крышку процессора. Ранее (Sandy Bridge) к процессору требовалось подводить различные напряжения для графического ядра, для системного агента, для процессорных ядер и др. Теперь к процессору через сокет подводится только одно напряжение Vccin 1,75 В, которое поступает на встроенный регулятор напряжения. Регулятор напряжения представляет собой 20 ячеек, каждая ячейка создает 16 фаз с общей силой тока в 25 А. В сумме мы получаем 320 фаз, что значительно больше, чем даже у самых навороченных материнских плат. Такой подход позволяет не только упростить разводку материнских плат (а значит, и снизить их стоимость), но и более точно регулировать напряжения внутри процессора, что, в свою очередь, ведет к большей экономии электроэнергии.

Это одна из основных причин, по которым Haswell физически не может быть совместимым со старым сокетом LGA1155. Да, можно говорить о желании Intel зарабатывать деньги, каждый год выпуская новую платформу (новый чипсет) и каждые два года - новый сокет, но в данном случае для смены сокета есть объективные причины: физическая/электрическая несовместимость.

Однако за все приходится платить. Регулятор напряжения - еще один заметный источник тепла в новом процессоре. А учитывая, что Haswell производится по нормам того же техпроцесса, что и его предшественник Ivy Bridge, стоит ожидать, что процессор будет горячее.

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

Новые энергосберегающие режимы

В Haswell появились новые состояния сна S0ix, которые похожи на состояния S3/S4, но только с гораздо меньшим временем перехода процессора в рабочее состояние. Также было добавлено новое состояние простоя С7.

Режим С7 сопровождается выключением основной части процессора, при этом изображение на экране остается активным.

Минимальная частота процессоров в простое составляет 800 МГц, это также должно снизить энергопотребление.

Архитектура процессора

Фронт-энд

Конвейер Haswell, как и в SB, имеет 14–19 стадий: 14 стадий при попадании в µop-кэш, 19 - при промахе. Объем µop-кэша не изменился по сравнению с SB - 1536 µop. Организация кэша мопов осталась такой же, как и в SB - 32 набора по восемь строк, в каждой из которых по шесть мопов. Хотя в связи с увеличением количества исполнительных устройств, а также последующих после кэша мопов буферов можно было бы ожидать увеличения кэша мопов - до 1776 мопов (почему именно такой объем - будет сказано ниже).

Декодер

Декодер, можно сказать, не изменился - остался четырехпутным, как у SB. Он состоит из четырех параллельных каналов: одного сложного транслятора (complex decoder) и трех простых (simple decoder). Сложный транслятор может обрабатывать/декодировать сложные инструкции, порождающие более одного мопа. В трех остальных каналах декодируются простые инструкции. К слову, благодаря наличию слияния макроопераций, инструкции загрузки с исполнением и выгрузки порождают, например, один моп и могут быть декодированы в «простых» каналах декодера. Инструкции SSE тоже порождают один моп, поэтому могут быть декодированы в любом из трех простых каналов. Учитывая появление 256-битных AVX, FMA3, а также увеличенное количество портов запуска и функциональных устройств, такой скорости декодера может попросту не хватить - и он может стать узким местом. Частично данное узкое место «расшивает» кэш мопов L0m, но все равно, имея процессор с 8 портами запуска, Intel следует задуматься о расширении декодера - в частности, не помешало бы увеличить количество сложных каналов.

Планировщик, буфер переупорядочивания, исполнительные устройства

После декодера следует очередь декодированных инструкций, и вот тут мы видим первое изменение. В SB было две очереди по 28 записей - одна очередь на один виртуальный поток Hyper-Threading (НТ). В Haswell две очереди объединили в одну общую для двух потоков HT на 56 записей, то есть объем очереди не изменился, но изменилась концепция. Теперь весь объем в 56 записей доступен одному потоку при отсутствии второго - следовательно, можно ожидать прироста как в малопоточных приложениях, так и в многопоточных (это связано с тем, что единую очередь два потока могут использовать более эффективно).

Изменению подвергся также буфер переупорядочивания - он был увеличен со 168 до 192 записей. Это должно повысить эффективность HT за счет большей вероятности наличия «независимых» друг от друга мопов. Очередь декодированных микроопераций увеличена с 54 до 60. Физические регистровые файлы, которые появились в SB, также были увеличены - со 160 до 168 регистров для целочисленных операндов и со 144 до 168 для операндов с плавающей запятой, что должно положительно сказаться на производительности векторных вычислений.

Сведем все данные об изменениях в буферах и очередях в единую таблицу.

В принципе, изменения параметров в Haswell выглядят вполне ожидаемыми, учитывая общую логику развития процессорной архитектуры Intel. Исходя из этой же логики, можно предположить, что в следующем поколении Core размеры буферов и очередей увеличатся не более чем на 14%, то есть размер буфера переупорядочивания будет в районе 218. Но это уже чисто теоретические предположения.

Следом за очередью декодированных операций располагаются порты запуска и прикрепленные к ним функциональные устройства. На этом этапе остановимся более подробно.

Как мы знаем, у Sandy Bridge было шесть портов запуска, которые он унаследовал от Nehalem, а тот, в свою очередь, от Conroe. То есть с 2006 года, когда Intel добавила еще два порта к имевшимся в распоряжении Рentium 4 четырем, количество портов запуска не менялось - только добавлялись новые функциональные устройства. Правда, стоит оговориться, что P4 имел своеобразную самобытную архитектуру NetBurst, в которой два его порта могли выполнять по две операции за один такт (хотя и далеко не со всеми операциями). Но наиболее правильным будет проследить эволюцию количества портов запуска не на примере P4, а на примере PIII, так как P4 имеет и длинный конвейер, и порты запуска с «удвоенной» производительностью, и кэш трасс, да и вся его архитектура заметно отличается от общепринятной. А Pentium III очень близок по функциональной схеме портов запуска к Conroe, и также имеет короткий контейнер. Так что в общем и целом можно сказать, что Conroe является прямым наследником PIII. Исходя из этого можно заявить, что в 2006 году был добавлен лишь один порт запуска по сравнению с PIII, который имел пять портов запуска.

Таким образом, количество портов запуска растет достаточно медленно, а если уж добавляются новые, то по одному. В Haswell же добавили сразу два, суммарно получив целых восемь портов - еще чуть-чуть, и дойдем до Itanium. Соответственно, Haswell показывает теоретическую производительность на исполнительном тракте в 8 моп/такт, из которых 4 мопа расходуются на арифметические операции, а остальные 4 приходятся на операции с памятью. Напомним, что у Conroe/Nehalem/SB было 6 моп/такт: 3 мопа арифметических операций и 3 мопа операций с памятью. Данное улучшение должно поднять показатель IPC, и, таким образом, в архитектуре Haswell действительно присутствуют очень серьезные изменения, которые вполне оправдывают его место «так» в плане развития Intel.

Изменения ФУ в Haswell

Количество исполнительных устройств также было увеличено. Новый шестой (седьмой по счету) порт добавил два дополнительных исполнительных устройства - устройство целочисленной арифметики и сдвига и устройство предсказания переходов. Седьмой (восьмой) порт отвечает за выгрузку адреса.

Таким образом, мы получаем четыре исполнительных устройства целочисленной арифметики, тогда как Sandy Bridge нам предоставлял только три. Следовательно, можно ожидать увеличения скорости целочисленной арифметики. Кроме того, теоретически это должно нам позволить одновременно выполнять и расчеты с плавающей запятой, и целочисленные расчеты, что, в свою очередь, может увеличить эффективность НТ. В SB вычисления с плавающей запятой осуществлялись на тех же портах, где использовались целочисленные функциональные устройства, поэтому по большому счету происходила блокировка, т. е. нельзя было иметь «разнородную» нагрузку. Также следует отметить, что добавление дополнительного устройства перехода в Haswell позволит предсказывать переход без «блокировки» при арифметических вычислениях - ранее при целочисленных вычислениях единственный предсказатель перехода блокировался, т. е. была возможна работа либо арифметического исполнительного устройства, либо предсказателя. Порты 0 и 1 также претерпели изменения - в них появилась поддержка FMA3. Седьмой (восьмой) порт Intel ввела для увеличения эффективности и снятия «блокировки» - когда второй и третий порты работают на загрузку, седьмой (восьмой) порт может заниматься выгрузкой, что раньше было просто невозможно. Данное решение необходимо для обеспечения высокого темпа исполнения AVX/FMA3-кода.

Вообще, такой широкий исполнительный тракт вполне может привести к изменению HT - сделав ее четырехпоточной. В сопроцессорах Intel Xeon Phi с гораздо более узким исполнительным трактом HT является четырехпоточной, при этом, как показывают исследования и тесты, сопроцессор достаточно хорошо масштабируется. То есть даже более узкий исполнительный тракт в принципе позволяет эффективно работать с четырьмя потоками. А уж тракт с восемью портами запуска вполне эффективно может выполнять четыре потока, и более того, наличие четырех потоков сможет лучше загрузить восемь портов запуска. Правда, для большей эффективности необходимо будет увеличить буферы (в первую очередь - буфер переупорядочивания) для большей вероятности «независимых» данных.

Также в Haswell вдвое увеличили пропускную способность L1-L2, при этом остались прежние величины задержки. Такая мера была просто необходима, так как 32-байтной записи и 16-байтного чтения попросту не хватило бы при наличии восьми портов запуска, а также 256-битных AVX и FMA3.

Sandy Bridge Haswell
L1i 32k, 8-way 32k, 8-way
L1d 32k, 8-way 32k, 8-way
Латентность 4 такта 4 такта
Скорость загрузки 32 байта/такт 64 байта/такт
Скорость записи 16 байт/такт 32 байта/такт
L2 256k, 8-way 256k, 8-way
Латентность 11 тактов 11 тактов
Пропускная способность между L2 и L1 32 байта/такт 64 байта/такт
L1i TLB 4k: 128, 4-way
2M/4M: 8/thread
4k: 128, 4-way
2M/4M: 8/thread
L1d TLB 4k: 128, 4-way
2M/4M: 7/thread
1G: 4, 4-way
4k: 128, 4-way
2M/4M: 7/thread
1G: 4, 4-way
L2 TLB 4k: 512, 4-way 4k+2M shared: 1024, 8-way

TLB L2 был увеличен до 1024 записей, появилась поддержка двухмегабайтных страниц. Увеличение TLB L2 повлекло за собой и увеличение ассоциативности с четырех до восьми.

Что касается кэша третьего уровня, то с ним ситуация неоднозначная: в новом процессоре задержка доступа должна увеличиться из-за потерь при синхронизации, ведь теперь кэш L3 работает на собственной частоте, а не на частоте процессорных ядер, как было раньше. Хотя доступ по-прежнему осуществляется в 32 байта за такт. С другой стороны, Intel говорит об изменениях в System Agent и улучшениях блока Load Balancer, который может теперь обрабатывать параллельно несколько запросов к кэшу L3 и разделять их на запросы к данным и «не-данным». Это должно повысить пропускную способность кэша L3 (некоторые тесты подтверждают это, ПС кэша L3 оказывается чуть выше IB).

Принцип работы кэша L3 в Haswell чем-то схож с Nehalem. У Nehalem кэш L3 находился в Uncore и имел собственную фиксированную частоту, а в SB кэш L3 привязали к процессорным ядрам - его частота стала равна частоте процессорных ядер. Из-за этого возникали проблемы - например, когда процессорные ядра работали на сниженных частотах при отсутствии нагрузки (и LLC «засыпал»), а GPU была необходима высокая ПС LLC. То есть это решение ограничивало производительность GPU, и к тому же требовалось выводить процессорные ядра из состояния простоя лишь для того, чтобы разбудить LLC. В новом процессоре для улучшения ситуации с энергопотреблением и повышения эффективности работы GPU в вышеописанных ситуациях кэш L3 работает на собственной частоте. Наибольшую пользу из этого решения должны извлекать мобильные, а не настольные решения.

Стоит заметить, что объемы кэшей имеют определенную зависимость. Кэша третьего уровня приходится два мегабайта на ядро, кэша второго уровня - 256 КБ, что в восемь раз меньше объема L3 на ядро. Объем кэша первого уровня, в свою очерердь, в восемь раз меньше L2 и составляет 32 КБ. Кэш мопов прекрасно вписывается в эту зависимость: его объем в 1536 мопов в 7-9 раз меньше L1 (точно это определить невозможно, так как битовый объем мопа неизвестен, а Intel вряд ли будет распространяться на эту тему). В свою очередь, буфер переупорядочивания в 168 мопов ровно в восемь раз меньше кэша мопов в 1536 моп, хотя, исходя из повсеместного увеличения буферов и очередей, следовало ожидать увеличения кэша мопов на 14%, то есть до 1776. Таким образом, объемы буферов и кэшей имеют пропорциональные размеры. Это, наверное, еще одна причина, почему Intel не увеличивает кэши L1/L2, считая такие пропорции в объемах наиболее эффективными с точки зрения увеличения производительности на увеличение площади. Стоит заметить, что в процессорах со встроенным топовым графическим ядром присутствует промежуточная быстрая память с широкой шиной доступа, которая кэширует все запросы к оперативной памяти - как процессора, так и видеоускорителя. Объем этой памяти составляет 128 МБ. Для процессорных ядер, если расценивать эту память как кэш L4, объем должен был быть 64 мегабайта, а с добавлением еще и графического ядра использование 128 МБ выглядит вполне логичным.

Что касается контроллера памяти, то он не получил ни увеличения числа каналов, ни увеличения частоты работы с оперативной памятью, то есть это всё тот же контроллер памяти с двухканальным доступом на частоте 1600 МГц. Такое решение выглядит довольно странно, ведь переход с SB на IB увеличил частоту функционирования ИКП с 1333 МГц до 1600 МГц, хотя это был всего лишь переход архитектуры на новый техпроцесс. А сейчас мы имеем новую архитектуру, при этом частота функционирования памяти осталась на прежнем уровне.

Еще более странным это выглядит, если вспомнить об улучшениях в графическом ядре - ведь мы помним, что даже младшая видеокарта HD2500 в IB полностью утилизировала пропускную способность в 25 ГБ/с. Теперь же подросла и производительность ЦП, и производительность графики, а пропускная способность памяти осталась на прежнем уровне. Если взглянуть более широко, то конкурент постоянно увеличивает пропускную способность памяти в своих гибридных процессорах, и она выше, чем у Intel. Логично было ожидать в Haswell поддержку памяти с частотой 1866 МГц или 2133 МГц, что повысило бы пропускную способность до 30 и 34 ГБ/с соответственно.

Как итог, данное решение Intel не совсем понятно. Во-первых, конкурент ввел поддержку более быстрой памяти без особых проблем. Во-вторых, стоимость модулей памяти, функционирующих на частоте 1866 МГц, ненамного выше по сравнению с 1600-мегагерцовыми модулями, к тому же никто не обязывает покупать 1866-мегагерцовую память - выбор оставался бы за пользователем. В-третьих, никаких проблем с поддержкой не то что 1866 МГц, но и 2133 МГц быть не может: с самого анонса Haswell были поставлены мировые рекорды разгона оперативной памяти, то есть ИКП без проблем «потянул» бы более быструю память. В-четвертых, в серверной линейке Xeon E5-2500 V2 (Ivy Bridge-EP) заявлена поддержка 1866 МГц, а ведь Intel обычно внедряет поддержку более быстрых стандартов памяти на этом рынке много позже настольных решений.

В принципе, можно было бы предположить, что в отсутствие конкуренции Intel нет необходимости «просто так» наращивать мускулы и еще больше увеличивать превосходство, но данное предположение абсолютно некорректно, так как увеличение пропускной способности памяти, как правило, увеличивает производительность встроенного графического ядра и почти не увеличивает производительность процессора. При этом Intel пока отстает от AMD именно в производительности графики, и в последние годы сама же Intel всё больше и больше уделяет внимание именно графике, и темпы улучшений для нее гораздо выше, чем для процессорного ядра. Кроме того, если опираться на результаты тестирований встроенного графического ядра предыдущего поколения HD4000, которые показали, что увеличение ПСП приводит к увеличению производительности графики до 30%, а также учитывая, что новое графическое ядро HD4600 заметно быстрее, чем HD4000, то зависимость производительности графического ядра от ПСП становится еще более явной. Новое графическое ядро будет еще больше упираться в «узкую» пропускную способность памяти. Суммируя все факты, решение Intel совершенно непонятно: компания собственноручно «задушила» свою графику, а ведь увеличение ПСП могло бы подтянуть ее производительность.

Возвращаясь к архитектуре кэшей, выскажем просто мысль в пустоту: раз уж был добавлен промежуточный кэш (кэш мопов), то почему бы не добавить еще промежуточный кэш данных объемом порядка 4-8 КБ и с меньшей задержкой доступа между кэшем L1d и исполнительными устройствами, как у P4 (раз уж концепция кэша мопов была взята именно у Netburst)? Напомним, что в P4 этот промежуточный кэш данных имел время доступа в два такта, причем один такт Р4 был равен примерно 0,75 тактам обычного процессора, то есть время доступа было около полутора тактов. Впрочем, может быть, мы еще увидим что-то подобное - Intel любит вспоминать хорошо забытое старое.

Как можно было заметить, большинство архитектурных изменений Intel направила на увеличение производительности кода AVX/FMA3: это и увеличение пропускной способности кэшей, и увеличение количества портов, и увеличение темпа выгрузки/загрузки в исполнительном тракте. В итоге, основной выигрыш в производительности должен быть именно в ПО, написанном с использованием AVX/FMA3. В принципе, судя по результатам тестов, похоже, что так оно и есть. Сухая производительность на одинаковой частоте в «старых» приложениях получила прирост около 10% по сравнению с предыдущим ядром, а приложения, написанные с использованием новых наборов инструкций, показывают прирост более 30%. Так что преимущества архитектуры Haswell будут раскрываться по мере оптимизации приложений под новые наборы инструкций. Вот тогда превосходство Haswell над SB станет очевидным.

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

Заключение (процессорная часть)

Чего можно ожидать от Haswell?

В связи с увеличением количества портов запуска можно ожидать увеличения показателя IPC, поэтому небольшое преимущество у новой архитектуры Haswell над Sandy Bridge на одинаковой частоте будет уже сейчас, даже при неоптимизированном программном обеспечении. Инструкции AVX2/FMA3 - это задел на будущее, и это будущее зависит от разработчиков ПО: чем быстрее они адаптируют свои приложения, тем быстрее конечный пользователь получит прирост производительности. Однако не стоит рассчитывать на рост всего и везде: SIMD-инструкции в основном используются в работе с мультимедийными данными и в научных расчетах, так что роста производительности стоит ожидать именно в этих задачах. Основной выигрыш от увеличения энергоэффективности получат мобильные системы, где этот вопрос действительно важен. Таким образом, два основных направления, по которым новая архитектура Intel Haswell существенно выигрывает - это увеличение SIMD-производительности и увеличение энергоэффективности.

Что касается применимости новых процессоров Haswell, то стоит разобрать несколько разных вариантов их применения: в настольных компьютерах, в серверах, в мобильных решениях, для геймеров, для оверклокеров.

Десктоп

Энергопотребление не является ключевым аспектом для десктопного процессора, поэтому даже в Европе с ее дорогой электроэнергией вряд ли кто-то будет переходить на Haswell с предыдущих поколений только из-за этого. Тем более, что TDP у Haswell выше, чем у IB, так что экономия будет лишь в случае минимальных нагрузок. При такой постановке вопроса сомнений быть не может - оно того не стоит.

С точки зрения производительности переход тоже не выглядит таким уж выгодным делом: максимальный прирост скорости в процессорных задачах сейчас составит не более 10%. Переход на Haswell с Sandy Bridge или Ivy Bridge будет оправдан только в том случае, если вы планируете использовать приложения с грамотной поддержкой FMA3 и AVX2: поддержка FMA3 может дать прирост в некоторых приложениях от 30% до 70%. Улучшения, связанные с виртуализацией и внедрением транзакционной памяти, для десктопа малоинтересны и малополезны.

Серверы и рабочие станции

Учитывая, что серверы работают непрерывно все 24 часа в сутки и имеют достаточно высокую постоянную нагрузку на процессор, по чистому энергопотреблению Haswell вряд ли будет лучше IB, хотя по производительности на ватт и может дать некоторый выигрыш. Поддержка AVX2/FMA3 вряд ли пригодится в серверах, а вот в рабочих станциях, занимающихся научными расчетами, данная поддержка будет весьма и весьма полезна - но лишь при условии поддержки новых инструкций в применяемом ПО. Транзакционная память - вещь достаточно полезная, но тоже не всегда: она может дать прирост в многопоточных программах и в программах, работающих с базами данных, но для ее эффективного использования также необходима оптимизация ПО.

А вот все улучшения, связанные с виртуализацией, скорее всего дадут неплохой эффект, так как виртуальные среды сейчас используются очень активно, и на большинстве физических серверов работает по несколько виртуальных. Причем распространенность виртуализации объясняется не только заметным снижением издержек виртуальной среды в плане производительности, но и экономической эффективностью: содержать много виртуальных серверов на одном физическом и дешевле, и позволяет более эффективно использовать ресурсы, в том числе ресурсы процессора.

Так что на серверном рынке появление Haswell должны встретить положительно. После смены серверов на базе Xeon E3-1200v1 и Xeon E3-1200v2 на серверы с Xeon E3-1200v3 (Haswell) вы сразу получите прирост эффективности, а после оптимизации ПО под AVX2/FMA3 и транзакционную память производительность подрастет еще сильнее.

Мобильные решения

Основной выигрыш от внедрения Haswell в мобильном сегменте, конечно же, лежит в сфере улучшенного энергопотребления. Судя по презентациям Intel, а также результатам тестов, которые уже появляются в Сети, эффект действительно есть, и заметный.

Что касается чистой производительности, то переход с Ivy Bridge на Haswell не представляется таким уж обоснованным мероприятием: чистый прирост должен быть отностительно небольшим, а улучшения в отдельных компонентах (те же виртуализация или мультимедийные инструкции) вряд ли много дадут пользователю мобильной системы, так как на ноутбуках и планшетах редко занимаются созданием сред или сложными научными расчетами.

В общем и целом, с точки зрения процессорной производительности многого ждать не стоит, зато в мобильных системах наверняка будет востребован рост производительности графического ядра. Поэтому если вопросы энергопотребления для вас не критически важны, то серьезно рассматривать вопрос апгрейда с Sandy Bridge или Ivy Bridge не стоит - лучше продолжать эксплуатировать имеющиеся системы, пока они окончательно не устареют. Если же вы часто работаете от батарей, то Haswell способен обеспечить существенный прирост времени автономной работы.

Геймеры

Вопрос энергопотребления у геймеров в России, как правило, не стоит - да и с чего бы ему стоять, когда геймерские видеокарты потребляют по 200 и более ватт? Виртуализация и транзакционная память геймеру тоже не нужны. Не факт, что AVX2/FMA3 будут востребованы именно для игр, хотя они могут пригодиться в расчетах физики. Остается чистая производительность процессора, а тут разница с тем же Ivy Bridge невелика. Как итог, для этой категории пользователей прямой переход с SB или IB на Haswell также не выглядит актуальным. Зато разумно переходить на новые процесоры с Nehalem и Lynifield, и уж тем более Conroe.

Оверклокеры

Для оверклокеров новый процессор (но, конечно, лишь его «разблокированная» K-версия) может быть интересен, особенно если удастся его «скальпировать», то есть снять металлическую крышку и охлаждать кристалл напрямую. Если этого не сделать, то результаты по разгону выглядят еще более скромными, чем у Ivy Bridge. Плюс, сдерживающим фактором может стать интегрированный регулятор напряжения. Подробнее об этом читайте

Переводим... Перевести Китайский (упрощенное письмо) Китайский (традиционное письмо) Английский Французский Немецкий Итальянский Португальский Русский Испанский Турецкий

К сожалению, мы не можем перевести эту информацию прямо сейчас - пожалуйста, повторите попытку позже.

Введение

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

В этой статье я расскажу о трех возможностях процессоров Intel ® , полезных для оптимизации производительности приложений NFV: технологии выделения кэша (CAT), Intel® Advanced Vector Extensions 2 (Intel ® AVX2) для обработки векторных данных и Intel® Transactional Synchronization Extensions (Intel ® TSX).

Решение проблемы инверсии приоритета с помощью САТ

Когда низкоприоритетная функция крадет ресурсы у высокоприоритетной функции, мы называем это «инверсией приоритета».

Не все виртуальные функции одинаково важны. Например, для функции маршрутизации важно время обработки и производительность, тогда как для функции кодирования мультимедиа это не так важно. Этой функции вполне можно разрешить периодически терять пакеты без влияния на удобство пользователей, поскольку все равно никто не заметит снижения кадровой скорости видео с 20 до 19 кадров в секунду.

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

Разработчики часто исходят из того, что если они поместят одно высокоприоритетное приложение в определенное ядро, то там это приложение будет в безопасности, на него не смогут повлиять низкоприоритетные приложения. К сожалению, это не так. У каждого ядра есть собственный кэш первого уровня (L1, самый быстрый кэш, но самого маленького размера) и кэш второго уровня (L2, несколько больше по размеру, но медленнее). Существуют раздельные области кэша первого уровня для данных (L1D) и для кода программ (L1I, «I» означает «инструкции»). Кэш третьего уровня (самый медленный) является общим для всех ядер процессора. В архитектуре процессоров Intel ® до семейства Broadwell включительно кэш третьего уровня полностью включительный, т. е. он содержит все, что содержится в кэше первого и второго уровней. В силу особенностей работы включительного кэша, если что-то удалить из кэша третьего уровня, это также будет удалено из соответствующего кэша первого и второго уровней. Это приводит к тому, что низкоприоритетное приложение, которому нужно место в кэше третьего уровня, может вытеснить данные из кэша первого и второго уровней высокоприоритетного приложения, даже если оно работает на другом ядре.

В прошлом для обхода этой проблемы существовал подход, который получил название «прогрев». При конкуренции доступа к кэшу третьего уровня «победителем» является приложение, чаще всего обращающееся к памяти. В связи с этим решение состоит в том, чтобы высокоприоритетная функция постоянно обращалась к кэшу, даже при бездействии. Это не слишком изящное решение, но зачастую оно оказывалось вполне приемлемым, и до недавних пор у него не было альтернатив. Но теперь альтернатива есть: в семействе процессоров Intel ® Xeon ® E5 v3 появилась технология распределения кэша (CAT), дающая возможность выделять кэш в соответствии с приложениями и классами обслуживания.

Влияние инверсии приоритета

Для демонстрации влияния инверсии приоритета я написал простой микротест, который периодически запускает обход скомпонованного списка в высокоприоритетном потоке, притом что в низкоприоритетном потоке постоянно запущена функция копирования в памяти. Эти потоки закреплены за разными ядрами одного и того же процессора. При этом имитируется наихудший вариант состязания за доступ к ресурсам: операции копирования требуется много памяти, поэтому она с высокой вероятностью нарушает работу более важного потока доступа к списку.

Вот код на языке С.

// Build a linked list of size N with pseudo-random pattern void init_pool(list_item *head, int N, int A, int B) { int C = B; list_item *current = head; for (int i = 0; i < N - 1; i++) { current->tick = 0; C = (A*C + B) % N; current->next = (list_item*)&(head[C]); current = current->next; } } // Touch first N elements in a linked list void warmup_list(list_item* current, int N) { bool write = (N > POOL_SIZE_L2_LINES) ? true: false; for(int i = 0; i < N - 1; i++) { current = current->next; if (write) current->tick++; } } void measure(list_item* head, int N) { unsigned __long long i1, i2, avg = 0; for (int j = 0; j < 50; j++) { list_item* current = head; #if WARMUP_ON while(in_copy) warmup_list(head, N); #else while(in_copy) spin_sleep(1); #endif i1 = __rdtsc(); for(int i = 0; i < N; i++) { current->tick++; current = current->next; } i2 = __rdtsc(); avg += (i2-i1)/50; in_copy = true; } results=avg/N }

Он содержит три функции.

  • Функция init_pool() инициализирует скомпонованный список в большой распределенной свободной области памяти с помощью простого генератора псевдослучайных чисел. За счет этого элементы списка не находятся рядом друг с другом в памяти: в таком случае образовалась бы пространственная локальность, что повлияло бы на наши измерения, поскольку для некоторых элементов автоматически была бы задействована упреждающая выборка. Каждый элемент списка - ровно одна строка кэша.
  • Функция warmup() постоянно обходит скомпонованный список. Нужно обращаться к определенным данным, которые должны находиться в кэше, поэтому эта функция не позволяет другим потокам вытеснить скомпонованный список из кэша третьего уровня.
  • Функция measure() измеряет обход одного элемента списка, затем либо засыпает на 1 миллисекунду, либо вызывает функцию warmup() в зависимости от того, какой тест мы запускаем. Затем функция measure() усредняет результаты.

Результаты микротеста на процессоре Intel ® Core™ i7 5 -го поколения показаны на приведенном ниже графике, где по оси X откладывается общее количество строк кэша в скомпонованном списке, а по оси Y - среднее количество циклов ЦП на каждое обращение к скомпонованному списку. По мере увеличения размера скомпонованного списка он выходит за пределы кэша данных первого уровня в кэш второго, а затем и третьего уровня, а затем попадает в основную память.

Базовый показатель - красно-коричневая линия, она соответствует программе без потока копирования в памяти, то есть без конкуренции. Синяя линия показывает последствия инверсии приоритета: из-за функции копирования в памяти доступ к списку занимает значительно больше времени. Влияние особенно велико, если список умещается в высокоскоростной кэш первого уровня или в кэш второго уровня. Если же список настолько велик, что не умещается в кэш третьего уровня, влияние незначительно.

Зеленая линия показывает эффект прогрева при запущенной функции копирования в памяти: время доступа резко снижается и приближается к базовому значению.

Если включить CAT и выделить части кэша третьего уровня в монопольное использование каждым ядром, результаты будут очень близки к базовым (слишком близки для показа на схеме), а именно такова наша цель.

Включение CAT

Прежде всего, убедитесь в том, что платформа поддерживает CAT. Можно использовать инструкцию CPUID, проверяя адрес leaf 7, subleaf 0, добавленный для указания о доступности CAT.

Если технология CAT включена и поддерживается, существуют регистры MSR, которые можно запрограммировать для выделения разных частей кэша третьего уровня разным ядрам.

У каждого процессорного гнезда есть регистры MSR IA32_L3_MASKn (например, 0xc90, 0xc91, 0xc92, 0xc93). В этих регистрах хранится битовая маска, указывающая, сколько кэша третьего уровня следует выделять для каждого класса обслуживания (COS). В 0xc90 хранится выделение кэша для COS0, в 0xc91 - для COS1 и т. д.

Например, на этой диаграмме показаны некоторые возможные битовые маски для разных классов обслуживания, чтобы продемонстрировать, как можно устроить разделение кэша: COS0 получает половину, COS1 получает четверть, а COS2 и COS3 по одной восьмой части. Например, 0xc90 содержал бы 11110000, а 0xc93 - 00000001.

Алгоритм прямого ввода-вывода данных (DDIO) имеет собственную скрытую битовую маску, позволяющую передавать поток данных с высокоскоростных устройств PCIe, таких как сетевые адаптеры, в определенные области кэша третьего уровня. При этом есть вероятность возникновения конфликта с определяемыми классами обслуживания, поэтому нужно учитывать это при создании приложений NFV высокой пропускной способности. Для тестирования образования конфликтов используйте для выявления промахов мимо кэша. В некоторых BIOS есть настройка, позволяющая просматривать и изменять маску DDIO.

Каждое ядро имеет регистр MSR IA32_PQR_ASSOC (0xc8f), указывающий, какой класс обслуживания применяется к этому ядру. Класс обслуживания по умолчанию - 0, это означает, что используется битовая маска в MSR 0xc90. (По умолчанию битовая маска 0xc90 имеет значение 1, чтобы обеспечить наибольшую доступность кэша.)

Самая простая модель использования CAT в NFV - выделение фрагментов кэша третьего уровня различным ядрам с помощью изолированных битовых масок, а затем закрепление потоков или виртуальных машин за ядрами. Если виртуальным машинам требуется общий доступ к ядрам для выполнения, также можно сделать тривиальное исправление для планировщика ОС, добавить маску кэша в потоки, в которых работают виртуальные машины, и динамически включать ее в каждом событии расписания.

Существует еще один необычный способ использования CAT для блокирования данных в кэше. Сначала создайте активную маску кэша и обратитесь к данным в памяти, чтобы загрузить их в кэш третьего уровня. Затем отключите биты, представляющие эту часть кэша третьего уровня в любой битовой маске САТ, которая будет использована в будущем. Данные будут заблокированы в кэше третьего уровня, поскольку теперь их невозможно оттуда вытеснить (помимо DDIO). В приложении NFV этот механизм позволяет блокировать таблицы поиска среднего размера для маршрутизации и анализа пакетов в кэше третьего уровня для обеспечения постоянного доступа.

Использование Intel AVX2 для обработки векторов

Инструкции SIMD (одна инструкция - много данных) позволяют одновременно осуществлять одну и ту же операцию с разными фрагментами данных. Эти инструкции часто используются для ускорения вычислений с плавающей запятой, но также доступны и версии инструкций для работы с целыми числами, логическими значениями и данными.

В зависимости от используемого процессора вам будут доступны разные семейства инструкций SIMD. Будет различаться и размер вектора, обрабатываемого командами:

  • SSE поддерживает 128-разрядные векторы.
  • В Intel AVX2 поддерживаются целочисленные инструкции для 256-разрядных векторов и реализованы инструкции для операций сбора.
  • В расширениях AVX3 в перспективных архитектурах Intel ® будут поддерживаться 512-разрядные векторы.

Один 128-разрядный вектор можно использовать для двух 64-разрядных переменных, четырех 32-разрядных или восьми 16-разрядных переменных (в зависимости от используемых инструкций SIMD). В более крупные векторы поместится больше элементов данных. Учитывая потребность приложений NFV в высокой пропускной способности, следует всегда использовать наиболее мощные инструкции SIMD (и соответствующее оборудование), на сегодняшний день это Intel AVX2.

Инструкции SIMD чаще всего используются для выполнения одной и той же операции с вектором значений, как показано на рисунке. Здесь операция по созданию от X1opY1 до X4opY4 представляет собой одну инструкцию, одновременно обрабатывающую элементы данных с X1 по X4 и с Y1 по Y4. В этом примере ускорение будет четырехкратным по сравнению с обычным (скалярным) выполнением, поскольку одновременно обрабатываются четыре операции. Ускорение может быть настолько же большим, насколько велик вектор SIMD. В приложениях NFV часто происходит обработка нескольких потоков пакетов одинаковым способом, поэтому здесь инструкции SIMD позволяют естественным образом оптимизировать производительность.

Для простых циклов компилятор часто сам автоматически осуществляет векторизацию операций с помощью использования самых последних инструкций SIMD, доступных для данного ЦП (если использовать нужные флаги компилятора). Можно оптимизировать код для использования наиболее современного набора инструкций, поддерживаемых оборудованием, во время выполнения либо можно скомпилировать код для определенной целевой архитектуры.

Операции SIMD также поддерживают загрузку в память, копируя до 32 байт (256 бит) из памяти в регистр. Это позволяет передавать данные между памятью и регистрами, минуя кэш, и собирать данные из разных расположений в памяти. Также можно выполнять различные операции с векторами (изменение данных в пределах одного регистра) и сохранение векторов (запись до 32 байт из регистра в память).

Memcpy и memmov - широко известные примеры основных процедур, которые были с самого начала реализованы с помощью инструкций SIMD, поскольку инструкция REP MOV была слишком медленной. Код memcpy регулярно обновлялся в системных библиотеках, чтобы использовать самые последние инструкции SIMD. Для получения данных о том, какая из последних версий доступна для использования, использовалась таблица диспетчера CPUID. При этом реализация новых поколений инструкций SIMD в библиотеках обычно запаздывает.

Например, следующая процедура memcpy, использующая простой цикл, основана на встроенных функциях (вместо кода библиотеки), поэтому компилятор может оптимизировать ее для последней версии инструкций SIMD.

Mm256_store_si256((__m256i*) (dest++), (__m256i*) (src++))

Она компилируется в следующий ассемблерный код и обладает вдвое более высокой производительностью по сравнению с недавними библиотеками.

C5 fd 6f 04 04 vmovdqa (%rsp,%rax,1),%ymm0 c5 fd 7f 84 04 00 00 vmovdqa %ymm0,0x10000(%rsp,%rax,1)

Ассемблерный код из встроенной функции будет копировать 32 байта (256 бит) с помощью самых последних доступных инструкций SIMD, тогда как код библиотеки, использующий SSE, будет копировать только 16 байт (128 бит).

Приложениям NFV часто необходимо выполнять операцию сбора, загружая данные из нескольких расположений в разных местах памяти, находящихся не подряд. Например, сетевой адаптер может поместить входящие пакеты в кэш с помощью DDIO. Приложению NFV может требоваться доступ только к части сетевого заголовка с IP-адресом назначения. С помощью операции сбора приложение может одновременно собрать данные для 8 пакетов.

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

Int a; int b; for (i = 0; i < 1024; i++) a[i] = i; for (i = 0; i < 64; i++) b[i] = (i*1051) % 1024; for (i = 0; i < 64; i++) sum += a]; // This line is vectorized using gather.

Последняя строка компилируется в следующий ассемблерный код.

C5 fe 6f 40 80 vmovdqu -0x80(%rax),%ymm0 c5 ed fe f3 vpaddd %ymm3,%ymm2,%ymm6 c5 e5 ef db vpxor %ymm3,%ymm3,%ymm3 c5 d5 76 ed vpcmpeqd %ymm5,%ymm5,%ymm5 c4 e2 55 90 3c a0 vpgatherdd %ymm5,(%rax,%ymm4,4),%ymm7

Одна операция сбора значительно быстрее последовательности загрузок, но это имеет смысл только в случае, если данные уже находятся в кэше. В противном случае данные придется получать из памяти, а для этого нужны сотни или тысячи циклов ЦП. Если данные находятся в кэше, то возможно ускорение в 10 раз
(т. е. на 1000 %). Если же данных нет в кэше, ускорение составляет лишь 5 %.

При использовании подобных методик важно анализировать приложение, чтобы выявлять узкие места, а также понимать, тратит ли приложение слишком много времени на копирование или сбор данных. Для измерения производительности программ можно использовать .

Еще одна полезная для NFV функция в Intel AVX2 и других операциях SIMD - побитовые и логические операции. Они используются для ускорения нестандартного кода шифрования, а битовая проверка удобна для разработчиков ASN.1 и часто используется для данных в телекоммуникациях. Intel AVX2 можно использовать для ускоренного сравнения строк с помощью усовершенствованных алгоритмов, таких как MPSSEF.

Расширения Intel AVX2 хорошо работают на виртуальных машинах. Производительность не отличается, не возникает ошибочных выходов виртуальных машин.

Использование Intel TSX для более высокой масштабируемости

Одна из проблем параллельных программ заключается в том, чтобы избегать конфликтов данных, которые могут происходить, когда несколько потоков пытаются использовать один и тот же элемент данных и, по крайней мере, один поток при этом пытается изменить данные. Во избежание непредсказуемых результатов частот используется блокировка: первый поток, использующий элемент данных, блокирует его от других потоков вплоть до завершения своей работы. Но такой подход может быть неэффективным при наличии частых конкурирующих блокировок или если блокировки контролируют более крупную область памяти, чем это действительно необходимо.

Intel Transactional Synchronization Extensions (TSX) предоставляют процессорные инструкции для обхода блокировок при транзакциях в аппаратной памяти. Это помогает добиться более высокой масштабируемости. Работает это так: когда программа заходит в секцию, использующую Intel TSX для охраны расположений в памяти, записываются все попытки доступа к памяти, а в конце защищенного сеанса они либо автоматически фиксируются, либо автоматически откатываются. Откат выполняется в случае, если при выполнении из другого потока был конфликт доступа к памяти, из-за которого могло возникнуть условие конкуренции (например, запись в расположение, из которого читает данные другая транзакция). Откат также может произойти в случае, если запись доступа к памяти станет слишком большой для реализации Intel TSX, при наличии инструкции ввода-вывода или системного вызова, а также при возникновении исключений или завершении работы виртуальных машин. Откат вызовов ввода-вывода происходит, если невозможно его спекулятивное выполнение из-за помехи извне. Системный вызов - очень сложная операция, изменяющая кольца и дескрипторы памяти, ее очень трудно откатить.

Распространенным примером использования Intel TSX является управление доступом в таблице хэша. Обычно для гарантии доступа к таблице кэша применяется ее блокировка, но при этом возрастает время ожидания для потоков, конкурирующих за доступ. Блокировка зачастую является слишком грубой: блокируется целая таблица, хотя ситуация, когда потоки пытаются получить доступ к одним и тем же элементам, возникает крайне редко. При увеличении количества ядер (и потоков) грубая блокировка препятствует масштабируемости.

Как показано на схеме ниже, грубая блокировка может привести к тому, что один поток будет ждать высвобождения таблицы хэша другим потоком, хотя эти потоки используют разные элементы. Применение Intel TSX дает возможность работать обоим потокам, их результаты фиксируются после успешного достижения окончания транзакции. Оборудование обнаруживает конфликты на лету и отменяет транзакции, нарушающие правильность. При использовании Intel TSX поток 2 не должен ждать, оба потока выполняются намного раньше. Блокировка по таблицам хэша преобразуется в точно настраиваемую блокировку, что приводит к повышению производительности. В Intel TSX поддерживается точность отслеживания для конфликтов на уровне одной строки кэша (64 байта).

В Intel TSX используются два программных интерфейса, чтобы указывать секции кода для выполнения транзакций.

  • Обход аппаратных блокировок (HLE) обладает обратной совместимостью, его можно использовать без особого труда для повышения масштабируемости, не подвергая библиотеку блокировок серьезным изменениям. В HLE появились префиксы для заблокированных инструкций. Префикс инструкции HLE дает оборудованию сигнал на отслеживание состояния блокировки без ее получения. В приведенном выше примере выполнение описанных действий приведет к тому, что доступ к другим элементам таблицы хэша больше не будет приводить к блокировке, кроме случаев, когда осуществляется конфликтующий доступ на запись к значению, хранящемуся в таблице хэша. В результате доступ будет распараллелен, поэтому по всем четырем потокам будет повышена масштабируемость.
  • Интерфейс RTM включает явные инструкции начала (XBEGIN), фиксирования (XEND), отмены (XABORT) и тестирования состояния (XTEST) транзакций. Эти инструкции предоставляют библиотекам блокировки более гибкий выход реализации обхода блокировок. Интерфейс RTM позволяет библиотекам использовать гибкие алгоритмы отмены транзакций. Эту возможность можно использовать для повышения производительности Intel TSX с помощью оптимистичного перезапуска транзакций, возврата транзакций и других расширенных методик. С помощью инструкции CPUID библиотека может откатиться к более старой реализации блокировок без RTM, сохраняя обратную совместимость с кодом на уровне пользователя.
  • Для получения дополнительных сведений о HLE и RTM рекомендую ознакомиться со следующими статьями портала Intel Developer Zone.

Как и оптимизация примитивов синхронизации с помощью HLE или RTM, функции плана данных NFV могут получить преимущество за счет Intel TSX при использовании пакета Data Plane Development Kit (DPDK) .

При использовании Intel TSX основная трудность заключается не в реализации этих расширений, а в оценке и определении их производительности. Существуют счетчики производительности, которые могут использоваться в программах Linux* perf, и для оценки успешности выполнения Intel TSX (количество выполненных и количество отмененных циклов).

Intel TSX следует использовать в приложениях NFV с осторожностью и тщательно тестировать, поскольку операции ввода-вывода в области, защищенной Intel TSX, всегда включают откат, а многие функции NFV используют множество операций ввода-вывода. В приложениях NFV следует избегать конкурирующих блокировок. Если же блокировки необходимы, то алгоритмы обхода блокировок помогут повысить масштабируемость.

Об авторе

Александр Комаров работает инженером по разработке приложений в отделе Software and Services Group корпорации Intel. В течение последних 10 лет основная работа Александра заключалась в оптимизации кода для достижения наивысшей производительности на существующих и перспективных серверных платформах Intel. Такая работа включает использование средств Intel для разработки программного обеспечения: это профилировщики, компиляторы, библиотеки, последние наборы инструкций, наноархитектура и усовершенст­вования архитектуры самых современных процессоров архитектуры x86 и наборов микросхем.

Дополнительные сведения

Дополнительные сведения о NFV см. в следующих видеоматериалах.




Top