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

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

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

Зачем? Каковы правила, по которым потоки распределяются по ядрам в многопроцессорной системе?

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

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

Детали системы:

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

1 ответ

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

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

Другие вопросы по тегам