libx265 NUMA-Pool-Konfiguration irreführend

Ich habe folgendes Szenario: Mit libx265 und einem Dual-Socket-System (also 2 NUMA-Knoten) möchte ich Videos mit ffmpeg und libx265 codieren. libx265 kann so konfiguriert werden, dass es Thread-Pools verwendet, die auf einem NUMA-Knoten isoliert sind, indem der --pools-Parameter ( docs ) verwendet wird.

Es gibt ein paar Beispiele in den Dokumenten, die ich nicht vollständig verstehe. Die Beispiele dort sind für ein 4-Knoten-System. Zitat aus der Doku:

'+'ist ein spezieller Wert, der alle auf dem Knoten erkannten Kerne angibt

'*'ist ein spezieller Wert, der alle auf dem Knoten erkannten Kerne und alle verbleibenden Knoten angibt

'-'ist ein spezieller Wert, der angibt, dass keine Kerne auf dem Knoten vorhanden sind, wie „0“.

Ein Thread-Pool, der einem bestimmten NUMA-Knoten zugeordnet ist, wird nur aktiviert, wenn die Anzahl der Threads, die auf diesem NUMA-Knoten erstellt werden sollen, explizit an dieser entsprechenden Position mit der Option –pools erwähnt wird. Andernfalls werden alle Threads aus einem einzigen Pool erzeugt. Die Gesamtzahl der Threads wird durch die Anzahl der Threads bestimmt, die den aktivierten NUMA-Knoten für diesen Pool zugewiesen sind. Den Worker-Threads wird Affinität zu allen aktivierten NUMA-Knoten für diesen Pool gegeben, und sie können zwischen ihnen migrieren, sofern nicht ausdrücklich wie oben beschrieben angegeben.

Ich bin mir nicht sicher, wie die Thread-Anzahl und die Pool-Anzahl explizit angegeben werden können, und würde mich freuen, wenn jemand diese Beispiele aus den Dokumenten erklären könnte:

  • "+,-,+" - allocate one pool, using only cores on nodes 0 and 2
    • F : Warum werden den Knoten 0 und 2 keine 2 Pools zugewiesen?
  • "8,8,8,8" - allocate four pools with up to 8 threads in each pool
    • F : Warum werden jetzt 4 Pools zugewiesen, während das nächste Beispiel
  • "8,+,+,+" - allocate two pools, the first with 8 threads on node 0, and the second with all cores on node 1,2,3
    • Q : ... weist nur 2 Pools zu?

In meinem Fall habe ich Zugriff auf 2 Knoten x 12 "Kerne" und dachte an 1-3 ffmpeg-Codierungsprozesse pro Knoten (was Poolgrößen von 12, 6 oder 4 "Kernen" ergeben würde).

Antworten (1)

Wie der folgende Auszug sagt,

Ein Thread-Pool, der einem bestimmten NUMA-Knoten zugeordnet ist, wird nur aktiviert, wenn die Anzahl der Threads, die auf diesem NUMA-Knoten erstellt werden sollen, explizit an dieser entsprechenden Position erwähnt wird

"+,-,+"--> keine Zahlen angegeben, daher ein einzelner Pool.

"8,+,+,+"--> Zahl für Knoten 0, daher ist das ein Pool. Die anderen Knoten haben keine Ziffern, daher werden alle dort erzeugten Threads in einem konsolidierten (zweiten) Pool verwaltet.

Keine Erfahrung mit NUMA, nur das zitierte Dokument analysieren.