Введение

Проприетарная реализация одновременной многопоточности от Intel. Проприетарная SMT-реализация Intel.

Гиперпотоковая технология (официально называемая Технологией Гиперпотоков или HT-технология и сокращаемая как HTT или HT) — это проприетарная реализация одновременной многопоточности (SMT) от Intel, используемая для повышения параллелизма вычислений (выполнения нескольких задач одновременно) на микропроцессорах x86. Она была представлена в серверных процессорах Xeon в феврале 2002 года и в настольных процессорах Pentium 4 в ноябре 2002 года. С тех пор Intel включила эту технологию в процессоры Itanium, Atom и Core i-серии, среди прочих. Для каждого физического процессорного ядра операционная система видит два виртуальных (логических) ядра и распределяет нагрузку между ними, когда это возможно. Основная функция гиперпотоковой технологии — увеличение количества независимых инструкций в конвейере; она использует преимущества суперскалярной архитектуры, в которой несколько инструкций параллельно обрабатывают отдельные данные. С HTT одно физическое ядро представляется операционной системе как два процессора, что позволяет одновременно планировать два процесса на одно ядро. Кроме того, два или более процесса могут совместно использовать одни и те же ресурсы: если ресурсы одного процесса недоступны, другой процесс может продолжить работу, если его ресурсы доступны. Помимо необходимости поддержки одновременной многопоточности в операционной системе, гиперпотоковая технология может быть эффективно использована только с операционной системой, специально оптимизированной для неё.

Обзор

Технология Hyper Threading – это форма технологии одновременной многопоточности, разработанная Intel, в то время как концепция, лежащая в основе этой технологии, была запатентована Sun Microsystems. С архитектурной точки зрения, процессор с технологией Hyper Threading содержит два логических процессора на каждое физическое ядро, каждый из которых имеет собственное архитектурное состояние. Каждый логический процессор может быть индивидуально остановлен, прерван или направлен на выполнение определенной нити, независимо от другого логического процессора, использующего то же физическое ядро. В отличие от традиционной конфигурации с двумя физическими процессорами, использующей два отдельных физических процессора, логические процессоры в гиперпоточном ядре совместно используют ресурсы выполнения. Эти ресурсы включают исполнительный блок, кэш-память и интерфейс системной шины; совместное использование ресурсов позволяет двум логическим процессорам более эффективно взаимодействовать друг с другом, а также позволяет логическому процессору заимствовать ресурсы у простаивающего логического ядра (при условии, что оба логических ядра связаны с одним и тем же физическим ядром). Процессор простаивает, когда он ожидает запрошенные данные для завершения обработки текущей нити. Эффективность использования гиперпоточного или многоядерного процессора зависит от потребностей программного обеспечения и от того, насколько хорошо оно и операционная система оптимизированы для эффективного управления процессором. Эта технология прозрачна для операционных систем и приложений. Минимальным требованием для использования преимуществ Hyper Threading является поддержка симметричной многопроцессорности (SMP) в операционной системе, поскольку логические процессоры воспринимаются операционной системой так же, как и физические процессоры. Возможно оптимизировать поведение операционной системы на многопроцессорных системах с поддержкой Hyper Threading. Например, рассмотрим систему SMP с двумя физическими процессорами, каждый из которых поддерживает Hyper Threading (в общей сложности четыре логических процессора). Если планировщик потоков операционной системы не учитывает Hyper Threading, он будет относиться ко всем четырем логическим процессорам одинаково. Если для выполнения доступны только две нити, он может запланировать их на двух логических процессорах, которые случайно принадлежат одному и тому же физическому процессору. Этот процессор будет сильно загружен и будет совместно использовать ресурсы выполнения, в то время как другой процессор останется неактивным, что приведет к снижению производительности по сравнению со случаем, когда нити были запланированы на разные физические процессоры. Эту проблему можно решить, улучшив планировщик, чтобы он рассматривал логические процессоры иначе, чем физические процессоры, что, в определенной степени, является упрощенной версией изменений планировщика, необходимых для систем NUMA.

История

Первая опубликованная статья, описывающая то, что сейчас известно как гиперпоточность в компьютере общего назначения, была написана Эдвардом С. Дэвидсоном и Леонардом Э. Шаром в 1973 году. Компания Denelcor, Inc. представила многопоточность с процессором с гетерогенными элементами (HEP) в 1982 году. Конвейер HEP не мог содержать несколько инструкций из одного процесса. Одновременно в конвейере могла находиться только одна инструкция от данного процесса. Если инструкция от данного процесса блокировала конвейер, инструкции от других процессов продолжали выполняться после его очистки. Патент США на технологию гиперпоточности был выдан Кеннету Окину из Sun Microsystems в ноябре 1994 года. В то время технология производства CMOS была недостаточно развита для экономически эффективной реализации. Intel реализовала гиперпоточность на процессоре архитектуры x86 в 2002 году с использованием Xeon на базе Foster MP. В том же году она была включена в Pentium 4 на базе Northwood с частотой 3,06 ГГц, а затем оставалась функцией всех процессоров Pentium 4 HT, Pentium 4 Extreme Edition и Pentium Extreme Edition. Линейки процессоров Intel Core и Core 2 (2006), пришедшие на смену линейке Pentium 4, не использовали гиперпоточность. Процессоры, основанные на микроархитектуре Core, не поддерживали гиперпоточность, поскольку микроархитектура Core являлась потомком более старой микроархитектуры P6. Микроархитектура P6 использовалась в более ранних версиях процессоров Pentium, а именно Pentium Pro, Pentium II и Pentium III (а также их производных Celeron и Xeon в то время). Windows 2000 SP3 и Windows XP SP1 добавили поддержку гиперпоточности. В ноябре 2008 года Intel выпустила микроархитектуру Nehalem (Core i7), в которой гиперпоточность была возвращена. Процессоры первого поколения Nehalem содержали четыре физических ядра и эффективно масштабировались до восьми потоков. С тех пор были выпущены модели с двумя и шестью ядрами, масштабируемые до четырех и двенадцати потоков соответственно. Ранее ядра Intel Atom были последовательными процессорами, иногда с поддержкой гиперпоточности, для маломощных мобильных ПК и недорогих настольных ПК. Itanium 9300 был представлен с восемью потоками на процессор (два потока на ядро) благодаря расширенной технологии гиперпоточности. Следующая модель, Itanium 9500 (Poulson), имеет 12-канальную архитектуру выдачи, с восемью ядрами процессора и поддержкой восьми дополнительных виртуальных ядер через гиперпоточность. Чипы Intel Xeon 5500 также используют двухпоточную гиперпоточность.

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

По данным Intel, первая реализация Hyper Threading использовала всего на 5% больше площади кристалла, чем сопоставимый процессор без Hyper Threading, но производительность при этом была на 15–30% выше. Intel заявляет об увеличении производительности до 30% по сравнению с идентичным Pentium 4 без одновременной многопоточности. Tom's Hardware отмечает: "В некоторых случаях P4 с частотой 3,0 ГГц с включенным HT может даже превзойти P4 с частотой 3,6 ГГц с выключенным HT". Intel также утверждает о значительном повышении производительности процессора Pentium 4 с включенным Hyper Threading в некоторых алгоритмах искусственного интеллекта. В целом, первоначальная история производительности Hyper Threading была неоднозначной. Как отмечается в одном комментарии по высокопроизводительным вычислениям от ноября 2002 года:
Hyper Threading может повысить производительность некоторых приложений MPI, но не всех. В зависимости от конфигурации кластера и, что наиболее важно, от характера выполняемого на кластере приложения, прирост производительности может варьироваться или даже быть отрицательным. Следующим шагом является использование инструментов анализа производительности для определения областей, способствующих увеличению производительности, и областей, приводящих к ее снижению. В результате, улучшения производительности сильно зависят от конкретного приложения; однако, при одновременном запуске двух программ, требующих полного внимания процессора, может показаться, что одна или обе программы немного замедляются при включенной технологии Hyper Threading. Это связано с тем, что система повторного выполнения инструкций в Pentium 4 занимает ценные ресурсы, выравнивая ресурсы процессора между двумя программами, что увеличивает время выполнения. Процессоры Pentium 4 "Prescott" и Xeon "Nocona" получили очередь повторного выполнения, которая сокращает время, необходимое для системы повторного выполнения, и полностью устраняет снижение производительности. Согласно анализу Intel от ноября 2009 года, влияние Hyper Threading на производительность приводит к увеличению общей задержки в случае, если выполнение потоков не обеспечивает существенного увеличения общей пропускной способности, которое может варьироваться. Аналогичный анализ производительности доступен для оценки влияния Hyper Threading при обработке задач, связанных с управлением сетевым трафиком, таких как обработка запросов на прерывания, генерируемых сетевыми контроллерами (NIC). В другой статье утверждается, что при использовании Hyper Threading для обработки прерываний улучшений производительности не наблюдается.

Недостатки

Когда были выпущены первые процессоры HT, многие операционные системы не были оптимизированы для технологии гиперпотоков (например, Windows 2000 и Linux версий старше 2.4). В 2006 году гиперпоточность подверглась критике за энергонеэффективность. Например, ARM (компания, специализирующаяся на разработке маломощных процессоров) заявила, что одновременная многопоточность может потреблять до 46% больше энергии, чем обычные двухъядерные решения. Кроме того, они утверждали, что SMT увеличивает конфликты в кэше на 42%, в то время как двухъядерные процессоры приводят к снижению конфликтов на 37%. В 2010 году ARM заявила о возможности включения одновременной многопоточности в свои будущие чипы, однако от этой идеи отказались в пользу 64-битной архитектуры 2012 года. ARM начала производить ядра SMT в 2018 году. В 2013 году Intel отказалась от SMT в пользу внеочередного выполнения для процессорных ядер Silvermont, поскольку обнаружила, что это обеспечивает лучшую производительность и энергоэффективность, чем меньшее количество ядер с SMT. В 2017 году стало известно, что процессоры Intel Skylake и Kaby Lake содержат ошибку в реализации гиперпотоков, которая могла приводить к потере данных. Позже были выпущены обновления микрокода для устранения этой проблемы. В 2019 году, с появлением Coffee Lake, Intel временно перестала включать гиперпоточность в основные настольные процессоры Core i7, за исключением топовых моделей Core i9 и процессоров Pentium Gold. Компания также начала рекомендовать отключать гиперпоточность, поскольку были выявлены новые уязвимости процессоров, которые можно было смягчить, отключив HT.

Безопасность

В мае 2005 года Колин Персиваль продемонстрировал, что вредоносный поток на процессоре Pentium 4 может использовать атаку по стороннему каналу, основанную на времени, для отслеживания шаблонов доступа к памяти другого потока, с которым он разделяет кэш, что позволяет похитить криптографическую информацию. Это, строго говоря, не является временной атакой, поскольку вредоносный поток измеряет время только собственного выполнения. Возможные решения включают изменение процессором политики вытеснения кэша или предотвращение операционной системой одновременного выполнения потоков с разными привилегиями на одном физическом ядре. В 2018 году операционная система OpenBSD отключила гиперпоточность, чтобы избежать потенциальной утечки данных из приложений в другое программное обеспечение, вызванной уязвимостями Foreshadow/L1TF. В 2019 году ряд уязвимостей привел к тому, что эксперты по безопасности рекомендовали отключить гиперпоточность на всех устройствах.