2015-04-16 31 views
15

Sto provando a mettere un limite rigido nell'utilizzo della CPU per un comando dd. Ho creato il seguente file unitàUtilizzo di CPUQuota in systemd

[Unit] 
Description=Virtual Distributed Ethernet 

[Service] 
ExecStart=/usr/bin/ddcommand 
CPUQuota=10% 

[Install] 
WantedBy=multi-user.target 

che chiamare il seguente script semplice

#!/bin/sh 
dd if=/dev/zero of=/dev/null bs=1024k 

Come ho visto in questa guida: http://www.freedesktop.org/software/systemd/man/systemd.resource-control.html L'utilizzo della CPU per il mio servizio dd non deve superare il 10 %. Ma quando eseguo il comando system-cgtop l'utilizzo è di circa il 70-75%.

Qualche idea di cosa sto sbagliando e come posso risolverlo?

P.S. Quando eseguo systemctl show dd Ottengo i seguenti risultati per quanto riguarda CPU

CPUShares=18446744073709551615 
StartupCPUShares=18446744073709551615 
CPUQuotaPerSecUSec=100ms 
LimitCPU=18446744073709551615 
+0

Non dire che questo è off-topic di per sé, ma si può avere migliore fortuna con questo sito sibling-focused sibling [ServerFault] (http://serverfault.com/). – mattdm

+0

Grazie ci proverò anche lì. – SteveGr2015

+0

Qualche fortuna con questo? – sydraz

risposta

-1

implica "CPUAccounting = true" Così dovrebbe essere

[Service] 
ExecStart=/usr/bin/ddcommand 
CPUAccounting=true 
CPUQuota=10% 
+5

* Implies * significa che 'CPUAccounting = true' è impostato in modo implicito e non è necessario impostarlo esplicitamente. – buschtoens

0

modi alternativi per limitare l'utilizzo della CPU: 1. Utilizzare il comando taskset. 2. Utilizzare i gruppi di controllo. 3. Utilizzare la finestra mobile e limitare l'utilizzo della cpu utilizzando cpuset. 4. Ridurre il numero di thread nell'applicazione. Alcuni calcoli sono richiesti con questo approccio.

1

Un'altra cosa che si potrebbe provare è eseguire cpulimit come demone. Non ho provato questo; è solo un'idea.

E 'nei repository di Ubuntu:

sudo apt install cpulimit 

Usa systemd, se volete. Questo dovrebbe limitare tutte le istanze di dd al 20% della CPU.

[Unit] 
Description=dd CPU Limiter 

[Service] 
ExecStart=/usr/bin/cpulimit -e dd -l 20 

[Install] 
WantedBy=multi-user.target 

source

-1

L'opzione "CPUQuota =" dipende dal numero di CPU del sistema, perché assicura che i processi eseguiti saranno mai più del tempo% CPU su ONE CPU; e penso che l'utilizzo della CPU% ottenuto con il sistema cmd d -cgtop sia su tutte le CPU del sistema.

0

mi sono imbattuto per caso in tutta un'altra risposta valida dato sulla https://unix.stackexchange.com/questions/213903/linux-cgroups-limit-cpu-usage-in-absolute-values-which-do-not-depend-on-cpu-spe

Se si desidera un limite rigido sulla larghezza di banda della CPU, è possibile utilizzare cpu.cfs_quota_us e cpu.cfs_period_us. Dai documenti CFS del kernel:

La larghezza di banda consentita per un gruppo viene specificata utilizzando una quota e un periodo. All'interno di ogni "periodo" dato (microsecondi), un gruppo può consumare solo fino a microsecondi "quota" di tempo CPU. Quando il consumo di larghezza di banda della CPU di un gruppo supera questo limite (per quel periodo), le attività appartenenti alla sua gerarchia verranno limitate e non potranno più essere eseguite fino al prossimo periodo.