Beschränken der CPU-Auslastung der Google Compute Engine auf 100%

969
user3335011

Ich führe Batch-Jobs auf n1-highcpu-32Ubuntu 14.04-Instanzen aus, die über 16 physische (32 virtualisierte) Kerne verfügen. Dies sollte ein trivialer Fall sein (im Vergleich zu MPI), aber die CPU-Auslastung ist, wie von berichtet, überall top.

Einige Jobs werden mit 300% + CPU-Auslastung ausgeführt, während andere nur mit 10% arbeiten. Daher ist die Zeit zum Abschließen des gesamten Stapels 10x länger als es sein sollte. Für jeden Job wird genau derselbe Code ausgeführt, der kein Multithreading ist.

Gibt es eine Möglichkeit, dieses Verhalten zu verhindern? Beschränken Sie die CPU-Auslastung möglicherweise auf 100% oder etwas?

0

1 Antwort auf die Frage

0
Misha Brukman

Sie können jeden Prozess in einem separaten Docker-Container ausführen. Standardmäßig --cpu-quotaist der Wert auf 0 gesetzt, wodurch 100% einer einzelnen CPU bereitgestellt werden. Sie sollten also alle Einstellungen vornehmen. Wenn Sie den Wert manuell auswählen möchten, verwenden Sie:

docker run -it --cpu-quota="..." [container] [command] [args] 

Alternativ können Sie einem Docker-Prozess bestimmte CPUs über --cpu-setcpusFlag zuweisen, z.

docker run -it --cpuset-cpus="1,3" [container] [command] [args] 

Einzelheiten finden Sie in den docker runDokumenten :

CPU-Kontingentbeschränkung

Das --cpu-quotaFlag begrenzt die CPU-Auslastung des Containers. Der Standardwert 0 ermöglicht es dem Container, 100% einer CPU-Ressource (1 CPU) zu beanspruchen. Der CFS (Completely Fair Scheduler) übernimmt die Ressourcenzuteilung für die Ausführung von Prozessen und ist der vom Kernel verwendete Standard-Linux-Scheduler. Setzen Sie diesen Wert auf 50000, um den Container auf 50% einer CPU-Ressource zu begrenzen. Passen Sie die Einstellung für mehrere CPUs --cpu-quotanach Bedarf an. Weitere Informationen finden Sie in der CFS-Dokumentation zur Bandbreitenbegrenzung.