> > > > Больше производительности: оптимизация NUMA для Ryzen Threadripper 2990WX и 2970WX с помощью Coreprio и NUMA Dissociater

Больше производительности: оптимизация NUMA для Ryzen Threadripper 2990WX и 2970WX с помощью Coreprio и NUMA Dissociater

Опубликовано:

threadripper teaserДва процессора Ryzen Threadripper 2990WX и Ryzen Threadripper 2970X предлагают приличное количество ядер для рабочих приложений. Однако не везде конфигурация с четырьмя кристаллами в одной упаковке показывает себя хорошо. Чтобы решить данную проблему, AMD разработала Dynamic Local Mode. Но данный режим не отличается хорошей гибкостью и сам может привести к проблемам. К счастью, здесь помогает утилита Coreprio.

Dynamic Local Mode - программное решение, которое автоматически привязывает требовательные приложения к ядрам CPU на кристаллах, которые напрямую подключены к оперативной памяти (два из четырех). Но данный режим работает только на процессорах Threadripper с четырьмя кристаллами в одной упаковке, а именно Ryzen Threadripper 2990WX (тест) и Ryzen Threadripper 2970WX (тест).

Здесь важно понимать разницу между режимами NUMA и UMA. Non-Uniform Memory Access (NUMA) описывает архитектуру памяти, в которой каждый процессор имеет собственную локальную память, но другие процессоры тоже имеют к ней доступ через общее адресное пространство. В случае Uniform Memory Access (UMA) обеспечивается равномерный доступ к массиву памяти всеми процессорами. В случае Ryzen Threadripper режим UMA позволяет кристаллам задействовать все каналы памяти, поэтому пропускная способность выше, но при этом сказываются задержки, которые могут быть заметно больше. В режиме NUME данные могут оставаться в памяти, которая подключена локально, через контроллер памяти кристалла. В результате задержки могут быть меньше, но пропускная способность уже не такая высокая.

В теории режим NUMA будет работать быстрее, если программы под него оптимизированы. Windows 10 распознает режим NUMA и отображает два кристалла раздельно, со своей подсистемой памяти. Однако разработчики не торопятся оптимизировать приложения под данный режим NUMA, поэтому UMA обычно работает быстрее.

Привязка выполняется через Windows Scheduler, однако он распознает два узла NUMA, а процессоры Ryzen Threadripper содержат четыре активных кристалла, то есть четыре узла NUMA, два с прямым подключением памяти и два без такового. Windows Scheduler их не распознает, что может привести к проблемам в некоторых приложениях.

Собственно, здесь на помощь приходит утилита Coreprio. Она работает как диспетчер NUMA, отслеживает активные потоки и, в случае процессоров Ryzen Threadripper, привязывает их к узлам NUMA с прямым подключением памяти.

В утилите Coreprio пользователь может включать/выключать сервис привязки NUMA Dissociater. Также можно выставлять интервал, через который будут проверяться потоки. Режим Dynamic Local Mode тоже можно стартовать напрямую в Coreprio. Но для работы NUMA Dissociater режим Dynamic Local Mode должен быть выключен. В зависимости от приложений, прирост производительности на системах Ryzen Threadripper 2990WX и Ryzen Threadripper 2970X может удвоиться. Однако в некоторых случаях ощутимого влияния нет.

Вполне возможно, что расширение NUMA Dissociator будет добавлено в режим Dynamic Local Mode или утилиту Ryzen Master.