Технологии

Персональный компьютер: четыре пятилетки успеха

Технология Hyper-Threading была создана корпорацией Intel ( http://www.intel.com ) в целях повышения производительности и эффективности серверных систем. Она дополняет традиционную многопроцессорность, обеспечивая более высокий параллелизм и запас производительности для ПО с поддержкой потоков. Напомним, что под потоком (или тредом, thread) в данном случае понимают объект (таких объектов может быть несколько), создаваемый ОС внутри процесса и выполняющий инструкции программы. Вообще говоря, Hyper-Threading — это форма синхронной многопотоковой технологии SMT (Simultaneous Multi-Threading Technology), которая позволяет одновременно выполнять на одном процессоре множество потоков, создаваемых программными приложениями. Работа множества потоков достигается за счет дублирования архитектурных состояний (логических процессоров) при совместном использовании единого набора ресурсов процессора. По мере того как применение параллелизма в работе программ и процессоров получает все большее распространение, современные серверные платформы все чаще обращаются к использованию потоков для повышения общей производительности системы. Серверные приложения адаптируются — разделяются на несколько потоков инструкций — и в результате получают возможность более полно реализовать преимущества многопроцессорности. Потоки позволяют параллельно выполнять процессы и одновременно выполнять одним процессом различные части программы на различных процессорах. Ход выполнения потоков строго отслеживается логическим процессором, а ресурсы, необходимые для их выполнения, — это функциональные модули процессора, реализующие то или иное действие: сложение, перемножение, загрузку и т. п.

Для повышения производительности и пропускной способности современных приложений в семействе процессоров Intel Xeon технология Hyper-Threading используется совместно с микроархитектурой NetBurst. Появление Xeon изменило подход к разработке процессоров общего назначения, позволив исполнять несколько программных потоков на одном ядре процессора. Hyper-Threading предусматривает параллелизм на уровне потоков (Thread-Level-Parallelism, или TLP), что приводит к росту эффективности использования ресурсов. ОС, поддерживающие многопроцессорность, способны диспетчеризовать потоки для организации параллельной обработки на нескольких процессорах в пределах сервера. Серверные приложения могут без модификаций выполняться на серверных процессорах семейства Xeon и пользоваться преимуществами параллелизма уровня потоков на каждом процессоре системы.

Предполагается, что серверные приложения для многопроцессорных систем получают выигрыш от применения технологии Hyper-Threading в таких областях, как обслуживание Интернета, поисковые машины, базы данных подразделений или малых предприятий, а также почтовые серверы, файл-серверы и серверы печати. Их работа ускоряется благодаря тому, что технология Hyper-Threading сокращает время отклика и повышает производительность обработки транзакций. Разработчики полагают, что со временем все большее число программ будет оптимизироваться для использования процессорного параллелизма и, соответственно, будет расти эффективность технологии Hyper-Threading. Измерения, выполненные в Intel Microprocessor Software Labs, показали, что эта технология способна увеличить производительность для функций Microsoft Active Directory на 18%, для Microsoft SQL Server — на 22%, для Microsoft Exchange — на 23%, а для Microsoft IIS — на 30%.

Принцип действия

Для пояснения новой технологии удобно провести аналогию между работой процессора и промышленного предприятия. На традиционном заводе, как правило, имеется несколько линий сборки (в Hyper-Threading — ресурсы выполнения) и единый планировщик (архитектурное состояние), который следит за заказами (потоками) и организует продвижение их выполнения на всем протяжении технологической цепочки. Диспетчер может поддерживать параллельную работу линий сборки на всем заводе, но если он будет вынужден ждать какой-то части собираемого агрегата, то и линия сборки замедлит свою работу. Для процессора это означает, что функциональный блок может вынужденно простаивать в ожидании данных с диска.

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

На рис. 1 одна конфигурация представляет собой традиционную многопроцессорную систему с двумя физическими процессорами, каждый из которых имеет свой собственный набор ресурсов выполнения и собственное, единственное архитектурное состояние. Другая конфигурация — это система на основе процессоров семейства Intel Xeon, где каждый процессор использует технологию Hyper-Threading.

Рис. 1. Эволюция многопроцессорных систем.

Рис. 1. Эволюция многопроцессорных систем.

Как видно, архитектурное состояние каждого процессора дублировано, но каждый из них по-прежнему имеет один набор ресурсов исполнения. При диспетчеризации потоков ОС воспринимает два отдельных архитектурных состояния как два «логических» процессора.

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

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

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

Hyper-Threading привносит совсем немного новых схем — в основном это дублирование регистров и назначение ресурсов потокам. При этом дублируются как видимые, так и внутренние (физические) регистры. Начальные стадии конвейера не меняются, однако задействуются атрибуты (биты, указывающие на принадлежность к определенной нити). Исполнительное ядро со всеми входящими в него устройствами также не изменяется, но его ресурсы разделяются между двумя нитями. Блок процессора, отвечающий за восстановление архитектурного состояния на основании выполненных микроопераций, работает последовательно (по нитям). Среди добавленных в процессор компонентов стоит упомянуть средства APIC (Advanced Programmable Interrupt Controller), назначающие прерывания для обработки разными процессорами в мультипроцессорной системе. На рис. 2 показаны упрощенные схемы процессоров с механизмом Hyper-Threading и без него. Согласно имеющейся информации, включение возможностей новой технологии добавляет к площади кристалла менее 5%.

Рис. 2. Обычный процессор (а) и процессор с Hyper-Threading (б).

Рис. 2. Обычный процессор (а) и процессор с Hyper-Threading (б).

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

Использование ресурсов

Чтобы понять, как технология Hyper-Threading улучшает использование ресурсов, рассмотрим многопроцессорную систему, состоящую из двух обычных суперскалярных процессоров, каждый из которых может выполнять по три инструкции за один цикл и на которых запущено по два отдельных потока. На рис. 3а небольшими прямоугольниками показаны функциональные блоки. Каждый набор из трех горизонтальных соответствует трем модулям, задействованным в данном цикле работы процессора. Белый цвет прямоугольника указывает, что операционный модуль простаивает в данном цикле (например, если в течение одного такта в белый цвет окрашен лишь один прямоугольник, то простаивает 1/3 ресурсов, а 2/3 задействованы). Вертикальные наборы указывают на степень использования трех операционных модулей во времени (на протяжении нескольких тактов работы процессора). Чем больше белых прямоугольников, тем ниже эффективность использования ресурсов. Иногда задействованными оказываются все ресурсы выполнения, а иногда они простаивают, например из-за промахов в кэш-память, неверного предсказания ветвления или взаимозависимости инструкций для каждого потока. Один процессор выполняет обработку потока, представленного темно-синим цветом, а поток другого процессора показан светло-синим. В данном примере пиковая производительность составляет шесть инструкций на такт, по три инструкции на каждый процессор.

Рис. 3. Сравнение двухпроцессорных систем.

Рис. 3. Сравнение двухпроцессорных систем.

На рисунке 3б показан результат применения технологии Hyper-Threading на примере двух процессоров, одновременно выполняющих два отдельных потока на каждом из процессоров. Один из процессоров одновременно обрабатывает темно- и светло-синие потоки, а другой работает с еще двумя. Видно, что в этом случае модули исполнения задействуются более часто, что приводит к уменьшению времени простоя для каждого из процессоров. Эффективность использования ресурсов каждым процессором может значительно возрасти, но она зависит также от эффективности алгоритма использования потоков, заложенного в прикладную программу. Если приложение многопоточное и при этом различные потоки могут параллельно использовать различные ресурсы (такие, как планирование интенсивных целочисленных вычислений на одном логическом процессоре при выполнении вычислений с плавающей запятой на другом), то пропускная способность может значительно возрасти как для каждого из процессоров, так и для всей многопроцессорной системы.

Детали микроархитектуры

В рамках технологии Hyper-Threading ресурсы исполнения на процессорах Xeon совместно используются двумя архитектурными состояниями, или двумя логическими процессорами. Большинство ресурсов исполнения сосредоточено в блоке быстрого исполнения (Rapid Execution Engine) и встроенной кэш-памяти, которые одновременно обрабатывают инструкции от двух потоков. Механизм выборки и доставки (Fetch and Deliver engine) и блок переупорядочения и изъятия (Reorder and Retire) выделяют ресурсы, которые поочередно предоставляются в распоряжение обоих потоков.

Механизм выборки и доставки

Этот механизм организует поочередную выборку инструкций то из одного логического процессора, то из другого и пересылает эти инструкции в блок быстрого исполнения (Rapid Execution Engine) для обработки. На первом уровне кэш-памяти (Execution Trace Cache) поочередно делается выборка по одной строке на каждый логический процессор. Это происходит в том случае, если оба логических процессора нуждаются в этой кэш-памяти. Если один из логических процессоров не запрашивает использование кэш-памяти, то другой может воспользоваться полной полосой пропускания этого типа кэш-памяти.

Rapid Execution Engine

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

Ядру исполнения по большей части «очевидно», какие из инструкций какому логическому процессору принадлежат, а планировщики не различают инструкций от различных логических процессоров — они просто переназначают независимые очереди инструкций на доступные для выполнения ресурсы. Например, планировщик может за один цикл диспетчеризовать две инструкции из потока № 1 и одну инструкцию из потока № 2.

Встроенная кэш-память

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

Блок переупорядочения и изъятия

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

Системная шина

Высокоскоростная системная шина с тактовой частотой 400 МГц предназначена для увеличения пропускной способности многопроцессорных и многопотоковых серверных приложений. Она обеспечивает необходимую полосу пропускания для технологии Hyper-Threading при доступе к системной памяти. Эта шина использует схемы сигнализации и буферизации, обеспечивающие высокоскоростную передачу данных и позволяющие расширить полосу пропускания до 3,2 Гбайт/с. Когда один из логических процессоров не может найти требуемые данные во встроенной кэш-памяти, то эти данные должны быть переданы из памяти именно по системной шине.

Hyper-Threading и серверные платформы

В серверных платформах, рассчитанных на использование процессоров семейства Intel Xeon, BIOS позволяет ОС и прикладным программам распознавать логические процессоры и задействовать технологию Hyper-Threading.

Каждый физический процессор Xeon, присутствующий в системе, представляется для BIOS и ОС как два логических процессора, доступных для выполнения системных и прикладных программ. Во время инициализации многопроцессорной системы (системной загрузки) BIOS подсчитывает и регистрирует число логических процессоров в системе.

Для сохранения обратной совместимости со старыми операционными системами BIOS регистрирует в таблице MPS (Multi-processor Specification) только первый логический процессор каждого физического процессора. Эти старые ОС будут использовать только данные из таблицы MPS и не смогут распознать наличие второго логического процессора на каждом физическом процессоре. Они будут функционировать так же, как в отсутствие механизма Hyper-Threading.

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

Многие из выпущенных или готовящихся к выпуску новых ОС (например, Microsoft Windows .NET Server, некоторые варианты Linux и Novell NetWare) будут оптимизированы для технологии Hyper-Threading. Эти новые ОС позволяют полноценно различать физические и логические процессоры и благодаря этому усовершенствовать диспетчеризацию потоков, уменьшать число холостых циклов и оптимизировать загрузку ресурсов процессоров.

Hyper-Threading и приложения

Современное серверное ПО рассчитано на многопоточность и готово к использованию преимуществ технологии Hyper-Threading. Программы для диспетчеризации потоков в работе с несколькими логическими процессорами используют возможности ОС примерно так же, как и в традиционных мультипроцессорных системах.

Именно BIOS и ОС определяют, какие логические процессоры доступны для использования. В некоторых ситуациях схемы лицензирования ПО ограничивают разрешенное число процессоров. При работе с технологией Hyper-Threading, оперирующей логическими процессорами, схемы лицензирования должны учитывать лишь число физических процессоров.

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

На рис. 4 показан пример повышения быстродействия за счет использования технологии Hyper-Threading в многопроцессорной среде. Отсчет начинается с базовой производительности одного традиционного процессора в двухпроцессорной системе. При наличии механизма Hyper-Threading можно наблюдать рост производительности многопотоковых приложений для первого процессора. При добавлении второго физического процессора в традиционную двухпроцессорную конфигурацию производительность вырастет выше уровня, достигаемого в результате применения Hyper-Threading на первом процессоре. Выигрыш в производительности от применения второго физического процессора в общем случае выше, поскольку в этом случае в системе появляется больше выделенных ресурсов (в некоторых случаях этот выигрыш превышает 60%). Добавление второго физического процессора, использующего технологию Hyper-Threading, дает прирост производительности в сравнении с быстродействием традиционной двухпроцессорной системы. Как и при масштабировании традиционных двухпроцессорных систем, рост производительности в случае применения Hyper-Threading в значительной степени зависит от природы прикладной программы, используемой модели работы с потоками, а также от системных зависимостей.

Рис. 4. Выигрыш в производительности.

Рис. 4. Выигрыш в производительности.

Корпорация Intel тесно сотрудничает с разработчиками, стремясь, чтобы создаваемое ими ПО наиболее полно раскрывало все преимущества технологии Hyper-Threading. На Web-сайте Intel Developer Services любой разработчик может зарегистрироваться для участия в программе Early Access Program (EAP), ориентированной на новые процессоры семейства Intel Xeon. За ежегодную плату предоставляется специальный пакет, в состав которого входит удаленный доступ к системам на базе процессоров Intel Xeon, услуги интерактивной поддержки силами специалистов Intel и соответствующее обучение. Кроме того, для продвижения своих приложений на рынок разработчики смогут принять участие в ряде совместных с Intel маркетинговых и рекламных инициатив. Плата за участие в программе EAP может направляться на оплату аренды систем разработки или покупку программных средств разработки у Intel. Эти средства (в частности, бета-версии компиляторов Intel C/C++ и Fortran для Windows и Linux 6.0, Intel VTune Performance Analyzer 6.0, а также библиотеки Intel Integrated Performance Primitives Library и Intel Math Kernel Library) можно использовать для оптимизации и отладки приложений в соответствии с технологией Hyper-Threading и микроархитектурой NetBurst.

Преимущества

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

В заключение можно отметить, что Hyper-Threading — это новаторская технология, которую Intel смогла интегрировать в инфраструктуру стандартных серверных систем. Эта технология дополняет возможности современных многопроцессорных серверов, обеспечивая резерв роста на будущее и поддержку новых возможностей.

Статья опубликована в журнале BYTE № 6 (47), июнь 2002 г.
Перепечатывается с разрешения автора.
Статья помещена в музей 22.01.2009