Как потоки распределяются между ядрами в многопроцессорной системе?

Как потоки распределяются между ядрами в многопроцессорной системе?

В настоящее время я проверяю ограничения серверного приложения на системе с двумя 12-ядерными процессорами, т.е. 24 ядрами. (В настоящее время Hyper-Threading отключена).

Я запускаю 12 экземпляров UDP-приема того же приложения на этом ящике, и оно максимально использует все 12 ядер одного из 2 сокетов, согласно диспетчеру задач. Но другой сокет простаивает. Я также попытался запустить 13-й экземпляр этого приложения, но оно все равно запускается на первом, уже занятом сокете.

Почему? По каким правилам потоки распределяются по ядрам в многопроцессорной системе?

Некоторые идеи:

  • Может ли это быть связано с RSS (масштабированием на стороне приема), который включен и будет участвовать в выборе ядер, по крайней мере, для потока приемника нашего приложения (но в приложении есть и другие интенсивно работающие потоки)?
  • Ограничен ли RSS (или MSI/MSI-X) одним сокетом?
  • Может ли/будет ли один экземпляр приложения работать на нескольких сокетах одновременно?

Подробности системы:

  • ProLiant BL460c Gen9
  • Intel Xeon E5-2670 v3
  • Windows 2012 R2

решение1

Некоторые слоты / устройства ввода-вывода напрямую взаимодействуют с одним из процессоров (другие слоты могут взаимодействовать с другим). Есть преимущества в выполнении работы, сгенерированной этой картой / устройством ввода-вывода, на этом процессоре.

НапримерДДИОлучше всего подходит для процессора, подключенного к слоту(ам) PCI/устройству ввода-вывода.

Связанный контент