Ich teste derzeit die Grenzen einer Serveranwendung auf einem System mit zwei 12-Core-Prozessoren, also 24 Kernen. (Hyper-Threading derzeit deaktiviert).
Ich führe 12 UDP-empfangsintensive Instanzen derselben App auf dieser Box aus, und laut Task-Manager sind alle 12 Kerne eines der beiden Sockel voll ausgelastet. Aber der andere Sockel ist im Leerlauf. Ich habe auch versucht, eine 13. Instanz dieser Anwendung zu starten, aber sie wird immer noch auf dem ersten, bereits ausgelasteten Sockel ausgeführt.
Warum? Nach welchen Regeln werden Threads in einem Mehrprozessorsystem den Kernen zugewiesen?
Einige Ideen:
- Könnte es mit RSS (Receive Side Scaling) zu tun haben, das aktiviert ist und zumindest für den Empfänger-Thread unserer App an der Auswahl der Kerne beteiligt wäre (die App hat aber auch andere arbeitsintensive Threads)?
- Ist RSS (oder MSI/MSI-X) auf einen Sockel beschränkt?
- Könnte/wird eine einzelne App-Instanz gleichzeitig auf mehreren Sockets ausgeführt werden?
Systemdetails:
- ProLiant BL460c Gen9
- Intel Xeon E5-2670 v3
- Windows 2012 R2
Antwort1
Einige Steckplätze/IO-Geräte kommunizieren direkt mit einem der Prozessoren (andere Steckplätze kommunizieren möglicherweise mit dem anderen). Es hat Vorteile, die von dieser Karte/diesem IO-Gerät generierte Arbeit auf diesem Prozessor auszuführen.
Zum BeispielDDIOfunktioniert am besten für den Prozessor, der an den/die PCI-Steckplatz(e)/das E/A-Gerät angeschlossen ist.