В настоящее время я проверяю ограничения серверного приложения на системе с двумя 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/устройству ввода-вывода.