Ключевой особенностью серверных процессоров по-прежнему является наличие двух потоков на ядро

Для демонстрации мы будем использовать несколько платформ AMD EPYC 9005. Последствия выходят далеко за рамки систем, которые мы используем для тестирования.

Ключевой особенностью серверных процессоров по-прежнему является наличие двух потоков на ядро
Существует множество руководств, но идея SMT существует уже некоторое время. Для наших целей мы собираемся обсудить SMT в контексте наличия двух потоков на ядро, но у нас в лаборатории есть системы, такие как IBM Power9, в которых доступно значение SMT = 8, просто в качестве примера. Имея в рабочем состоянии два потока, обрабатываемых одним и тем же ядром, вычислительные ресурсы, которые в противном случае простаивали бы в ожидании извлечения данных через иерархию памяти, могут вместо этого переключаться между двумя потоками, чтобы поддерживать загрузку вычислительных ядер.
Вот несколько практических примеров. Ниже приведён вывод команды lscpu для AMD EPYC 9965, где вы можете увидеть надпись «Thread(s) per core: 2», указывающую на SMT=2 на этой платформе.

Для тех, кому нравятся изображения, то вот топология, на которой видно, что у ядра L#0 есть PU L#0 P#0 и PU L#1 P#384.

На изображении показаны два потока на одном физическом ядре.
Влияние на производительность SMT
Мы уже несколько раз показывали, что SMT в целом повышает производительность. Вот краткий обзор влияния SMT на многие рабочие нагрузки:
Для ясности: SMT помогает не во всех случаях. Для тех, кто работает с высокопроизводительными вычислениями, часто бывает важно отключить SMT, а также настроить количество узлов на сокет (NPS) в соответствии с физической компоновкой чипа. Однако в большинстве случаев включение SMT значительно помогает.

Сторонники отказа от SMT приводят два контраргумента. Во-первых, как правило, на одно физическое ядро приходится один клиент, поэтому оба потока должны использоваться одним клиентом. Обычно виртуальный ЦП в облаке представляет собой один поток. Таким образом, для AMD EPYC 9965 с 192 ядрами и 384 потоками максимальное количество виртуальных машин с двумя виртуальными ЦП, которые можно разместить для одного клиента в облаке, используя одно физическое ядро на виртуальную машину клиента, составляет 192. Можно платить за два виртуальных ЦП, но при этом иметь только 192 клиентские виртуальные машины с двумя виртуальными ЦП каждая. Если у вас есть только физические ядра без SMT, то количество ваших ядер/потоков равно количеству ваших виртуальных машин.

Во-вторых, без SMT можно отказаться от ряда транзисторов и допусков, предназначенных для функций SMT, и потенциально добавить больше ядер. В настоящее время самыми мощными серверными процессорами являются процессоры с SMT, но, справедливости ради, стоит отметить, что у Intel Xeon 6780E 144 ядра. Хотя 288-ядерный процессор Intel Xeon 6900E был снят с продажи, два 144-ядерных процессора Xeon 6780E почти не уступают 192-ядерному/384-поточному EPYC 9965. Единственное отличие заключается в том, что AMD убрала кэш и снизила максимальную тактовую частоту EPYC 9965, но при этом процессор использует тот же набор инструкций Zen 5, в то время как Intel убрала такие функции, как AVX-512.

Именно здесь дискуссия немного отклоняется от темы. Многие серверные процессоры Arm и Intel Sierra Forest ориентированы на целочисленную производительность и выполнение рабочих нагрузок с открытым исходным кодом, для которых не требуются мощные механизмы с плавающей запятой. Сокращение количества транзисторов для уменьшения размера ядра касается не только SMT, но и этих функций. Для ясности: существует множество веб-серверов, брандмауэров и других систем, которые могут использовать ядра такого типа.
Есть ещё один важный момент. Текущая версия NVIDIA Grace не поддерживает SMT. Этот процессор предназначен для взаимодействия между графическими процессорами компании. Компания также объявила, что в будущем на смену Grace придёт поколение Vera с поддержкой SMT. Если бы SMT негативно влияла на производительность, NVIDIA не перешла бы от отсутствия поддержки SMT к поддержке SMT с двумя потоками на ядро. Кроме того, когда Cavium, а затем и Marvell начали работать над производным от Broadcom Vulcan ThunderX3, это была конструкция SMT=4, которая обеспечивала гораздо более высокую производительность, чем конструкция ThunderX без SMT.
Тем не менее это подводит нас к вопросу о лицензировании, который мы рассматривали на этой неделе в STH и обсудим в следующий раз.
Влияние лицензирования SMT-виртуализации
Когда мы работали над материалом Лицензирование для виртуализации, кое-что привлекло наше внимание. В настоящее время SMT в виртуализации «бесплатен». Это основная причина, по которой многопоточность важна в сфере корпоративной виртуализации. Для наглядности:
- Компания VMware (ныне принадлежащая Broadcom) уже как минимум десять лет использует физические ядра, а не логические потоки.
- Microsoft Windows Server также использует физические ядра, а не логические потоки для лицензирования. Пожалуй, проще всего это увидеть в калькуляторе лицензий HPE для Microsoft Windows Server инструмент, в котором это прямо указано.
- Red Hat OpenShift использует физические ядра, а не потоки, что особенно важно в рамках IBM.
В этих трёх примерах, которые широко используются в сфере лицензирования серверов, цель состоит в том, чтобы получить максимальную производительность на ядро. В результате P-ядра с полной производительностью значительно предпочтительнее E-ядер меньшего размера с пониженной производительностью. Если технология SMT позволяет повысить производительность физического ядра, то это того стоит.

Это может показаться незначительной деталью, но производительность на ядро в значительной степени не позволяла использовать процессоры Arm и серию Intel Xeon 6700E в корпоративных центрах обработки данных, а серия Xeon 6900E была недоступна для предприятий. Чтобы конкурировать, маломощные целочисленные ядра без SMT были нежизнеспособны. В 2018 году была анонсирована 64-битная поддержка Arm в VMware ESXi На дворе 2025 год, и хотя HPE ProLiant RL300 Gen11 пытался пробиться в традиционные корпоративные центры обработки данных, он продавался не очень хорошо, и такие компании, как Dell и Lenovo, отказались от аналогичных продуктов.
На некоторых рынках есть преимущества у ядер, не предназначенных для поверхностного монтажа, но корпоративные лицензии отдают предпочтение ядрам для поверхностного монтажа, и это оказывает большое влияние на отрасль.
Вы можете использовать SMT-процессор и отключить SMT
На этом этапе вы, возможно, задаётесь вопросом, что произойдёт, если у вас высокопроизводительный компьютер или другая рабочая нагрузка, для которой требуется отключить SMT. Придётся ли вам использовать процессор с SMT=2? Ответ: нет. Вы можете быстро это изменить.
Отключить SMT очень просто. Несколько месяцев назад мы опубликовали руководство по быстрому включению и отключению SMT и Hyper-Threading в Ubuntu и Debian. В Linux это можно сделать за несколько секунд, а в других ОС — в BIOS. Если вам интересно, в том же руководстве мы рассказываем, как включить SMT в Linux без перезагрузки.
Чтобы включить SMT, используйте:
echo on | sudo tee /sys/devices/system/cpu/smt/control
Чтобы отключить SMT, используйте:
echo off | sudo tee /sys/devices/system/cpu/smt/control
Возможно, у вас есть кластер, который будет выполнять функции высокопроизводительных вычислений, и тогда быстрая перезагрузка для изменения настроек SMT может повысить производительность. В BIOS вы также можете изменить настройки NPS в системе.
Заключительные слова
Сегодня процессоры без SMT не достигают такого количества потоков/виртуальных ЦП, как процессоры с SMT. Например, AmpereOne с 192 ядрами/192 потоками против AMD EPYC 9965 с 192 ядрами/384 потоками на сокет. Даже с учётом того, что ядра рассчитаны на большее, у EPYC 9965 выше плотность потоков на сокет. Если вам не нужен SMT, вы можете отключить его, и плотность ядер на сокет останется прежней — 192. Так что в лучшем случае SMT опережает конкурентов, а в худшем — не уступает.

По ощущениям, это немного похоже на критический момент в дебатах между SMT и не-SMT на рынке серверов. AMD полностью поддерживает SMT, учитывая обеспечиваемую производительность по сравнению с небольшими затратами на количество транзисторов и минимальным энергопотреблением. Intel в 2025 году также в основном будет использовать технологию SMT после того, как компания решила не выпускать серию Xeon 6900E без SMT из-за отсутствия спроса. Что касается Arm, то есть два жизнеспособных поставщика серверов на базе Arm общего назначения. Компания Ampere, которую выкупила купила Softbank после ограниченного внедрения в корпоративную среду, в настоящее время не поддерживает SMT. NVIDIA — другой поставщик серверов на базе Arm, но он ориентирован на высокопроизводительную часть рынка и только что объявил, что в следующем поколении будет использоваться SMT. Компания IBM всегда была ярым сторонником поверхностного монтажа. У облачных провайдеров, конечно, есть свои чипы, но на корпоративном рынке, похоже, после долгих лет споров пришли к выводу, что за исключением некоторых специфических приложений (например, сетевых устройств с низким энергопотреблением) P-ядро в сочетании с поверхностным монтажом остаётся оптимальным вариантом.
Возможно, более важным фактом является следующее: несмотря на то, что у нас есть доступ практически к любому типу технологий, мы по-прежнему используем P-ядра с SMT=2 и оставляем SMT включённым в наших производственных кластерах.