20.04.2020, 18:46
(Dieser Beitrag wurde zuletzt bearbeitet: 20.04.2020, 19:16 von Christoph Balhaus.)
Ich lehne mich jetzt mal ganz weit aus dem Fenster, vielleicht zu weit, weil ich mich mit dem Threadmodell von C# und den Threadpools wie Opensim sie verwendet nicht auskenne, aber ich würde in folgender Richtung suchen:
Opensim macht sehr ausgiebig Gebrauch von Threads und bezieht die aus Threadpools. Ich vermute sehr stark, dass es sich dabei aus Effizienzgründen um User Threads bzw. Light-Weight Threads handelt, also Threads die im Userspace verwaltet werden. Die wiederum basieren auf einer beschränkten Zahl von Kernel Threads, vielleicht auch nur einem, was zur Folge hätte, dass sie sich alle auf einem einzigen Kern drängen und es dort trotz der vielen Kerne zu Engpässen kommen kann. Deswegen versuche ich die Last immer möglichst gleichmässig auf mehrere Opensim Instanzen zu verteilen, was bei einer sehr grossen Region natürlich nicht geht.
Ich habe genau das auch häufiger als eine auf Beobachtungen basierende Empfehlung gehört, was die Vermutung stützen würde.
Aber wenn sich jemand an der Stelle des Codes besser auskennt, würde ich mich auch gerne belehren lassen :-)
/Chris
Edit: Hast du mal versucht die Größe des Threadpools zu vergrößern? Ich denke an "MaxPoolThreads" aus der OpenSim.ini. Das behebt zwar nicht den Engpass selber, aber verhindert, dass infolgedessen die verfügbaren Threads ausgehen.
Opensim macht sehr ausgiebig Gebrauch von Threads und bezieht die aus Threadpools. Ich vermute sehr stark, dass es sich dabei aus Effizienzgründen um User Threads bzw. Light-Weight Threads handelt, also Threads die im Userspace verwaltet werden. Die wiederum basieren auf einer beschränkten Zahl von Kernel Threads, vielleicht auch nur einem, was zur Folge hätte, dass sie sich alle auf einem einzigen Kern drängen und es dort trotz der vielen Kerne zu Engpässen kommen kann. Deswegen versuche ich die Last immer möglichst gleichmässig auf mehrere Opensim Instanzen zu verteilen, was bei einer sehr grossen Region natürlich nicht geht.
Ich habe genau das auch häufiger als eine auf Beobachtungen basierende Empfehlung gehört, was die Vermutung stützen würde.
Aber wenn sich jemand an der Stelle des Codes besser auskennt, würde ich mich auch gerne belehren lassen :-)
/Chris
Edit: Hast du mal versucht die Größe des Threadpools zu vergrößern? Ich denke an "MaxPoolThreads" aus der OpenSim.ini. Das behebt zwar nicht den Engpass selber, aber verhindert, dass infolgedessen die verfügbaren Threads ausgehen.