Hyper-Threading, или Серверные технологии ближайшего будущего

Сергей Пахомов

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

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

Другим подходом к увеличению производительности процессорной подсистемы, типичным для серверных решений, является использование многопроцессорных SMP-конфигураций. В этом случае достигается параллельное (Thread Level Parallelism, TLP), в какой-то мере независимое решение нескольких разных задач или нескольких потоков одной задачи на нескольких процессорах, что, естественно, сопровождается приростом общей производительности вычислительной подсистемы сервера. Впрочем, ожидать адекватного числу процессоров роста производительности и в данном случае не приходится. Многое зависит от типа решаемых задач, от того, как реализована в серверной операционной системе поддержка SMP. Всегда можно найти такое приложение, которое в двухпроцессорной конфигурации будет показывать результаты хуже, чем в однопроцессорной (то есть любой «талантливый» программист вполне сможет свести на нет все преимущества многопроцессорной архитектуры). Но самый главный «недостаток» многопроцессорных систем — это их стоимость.

Между тем помимо перечисленных способов увеличения общей производительности процессорной подсистемы существуют технологии, позволяющие реализовать параллельное выполнение нескольких задач на одном процессоре. Такая многозадачность реализована в том или ином виде во всех современных процессорах. Отход от последовательного исполнения команд, использование нескольких исполняющих блоков в одном процессоре позволяют одновременно обрабатывать несколько процессорных микрокоманд, то есть организовывать параллелизм на уровне инструкций (Instruction Level Parallelism, ILP), что, естественно, увеличивает общую производительность.

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

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

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

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

Ожидается, что технология Hyper-Threading будет впервые реализована в новых процессорах Intel Xeon для серверов в 2002 году.

Архитектура нового процессора (рис. 1) будет подобна архитектуре процессора Pentium 4, но с добавлением на кристалл кэша 3-го уровня и собственно новой технологии Hyper-Threading. При этом поверхность самого кристалла нового процессора увеличится всего на 5%.

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

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

Идея технологии Hyper-Threading тесно связана с микроархитектурой процессора Pentium 4 NetBurst, являясь в каком-то смысле ее логическим продолжением. Микроархитектура Intel NetBurst позволяет получить максимальный выигрыш в производительности при выполнении одиночного потока инструкций, то есть при выполнении одной задачи. Однако даже в случае специальной оптимизации программы не все исполнительные модули процессора оказываются задействованными на протяжении каждого тактового цикла. В среднем при выполнении кода, типичного для набора команд IA-32, реально используется только 35% исполнительных ресурсов процессора. Соответственно 65% исполнительных ресурсов процессора просто-напросто простаивают, то есть налицо неэффективное использование возможностей процессора. Было бы вполне логичном реализовать работу процессора таким образом, чтобы в каждом тактовом цикле максимально использовать его возможности. Именно эту идею и реализует новая технология Hyper-Threading, «подгружая» незадействованные ресурсы процессора на выполнение параллельной задачи.

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

Может показаться, что при использовании технологии Hyper-Threading слабым звеном является разделяемый между двумя логическими процессорами или между двумя потоками кэш первого, второго и третьего уровней. В какой-то мере это справедливо, так как влияние размера кэша на производительность бесспорно. И поскольку сам кэш данных становится разделяемым между двумя независимыми потоками, это равносильно уменьшению размера кэша для каждого из потоков. Однако стоит вспомнить, что размер кэша L2 в новом процессоре будет уже 512 Кбайт, то есть в два раза больше, чем в процессоре Pentium 4 Willamette. Кроме того, еще раз подчеркнем, что реализация технологии Hyper-Threading потребует всего-навсего 5-процентного увеличения размеров кристалла и, если при этом наблюдается выигрыш в производительности, такое решение безусловно заслуживает внимания.

Несмотря на всю очевидность преимущества новой технологии, говорить о двукратном росте производительности, разумеется, не приходится.

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

На диаграмме показан прирост производительности для различных неоптимизированных приложений при использовании процессора с поддержкой технологии Hyper-Threading в сравнении с процессором Intel Xeon MP. Видно, что даже в отсутствие специальной оптимизации приложений использование технологии Hyper-Threading позволяет получить выигрыш в производительности в среднем в 20-30%.

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

КомпьютерПресс 1'2002