Parallelbetrieb mit nur begrenzten CPU-Kernen

Parallelbetrieb mit nur begrenzten CPU-Kernen

Ich habe einen Server mit 12 Kernen und möchte ein Skript ausführen, das eine Datei als Eingabeargument verwendet und diese verarbeitet. Ich möchte 8 Kerne und nicht mehr verwenden, um 8 Dateien gleichzeitig auf 8 Kernen parallel zu verarbeiten und dann zum nächsten zu springen, sobald die Verarbeitung für 1 abgeschlossen ist.

Ich habe es folgendermaßen versucht xargs:

ls /data/paths/ | grep new | xargs -i -P 8 -n 1 bash main.sh {}

Aber wenn ich den Kern sehe, ist die CPU-Auslastung im Snapshot angehängt.Bildbeschreibung hier eingeben

Ich habe es auch mit parallel wie folgt versucht:

ls /data/paths/ | grep new | parallel -j 8 --no-notice bash main.sh {}

Meine Bedingung ist, dass ich es auf 8 CPUs beschränken muss.

BEARBEITEN:

Beim Ausführen ps -ef | grep main.shwerden 11–12 Prozesse statt 8 angezeigt.

Antwort1

Sie könnentasksetum die CPU-Affinität eines Prozesses festzulegen. Folgendes stellt sicher, dass Ihr xargsBefehl nur die ersten 8 virtuellen CPU-Kerne verwendet:

ls /data/paths/ | grep new | taskset -c 0-7 xargs -i -P 8 -n 1 bash main.sh {}

Beachten Sie, dass vonMann-Taskset:

Ein Benutzer muss über CAP_SYS_NICE verfügen, um die CPU-Affinität eines Prozesses zu ändern.

verwandte Informationen