2016-01-08 17 views
5

vorrei eseguire due contenitori con la seguente allocazione delle risorse:miscelazione cpu-azioni e cpuset-CPU in Docker

  • Container "C1": riservato CPU1, CPU2 condiviso con 20 CPU-azioni
  • container "C2": CPU3 riservato, CPU2 condiviso con 80 CPU-azioni

Se corro i due contenitori in questo modo:

docker run -d --name='C1' --cpu-shares=20 --cpuset-cpus="1,2" progrium/stress --cpu 2 

docker run -d --name='C2' --cpu-shares=80 --cpuset-cpus="2,3" progrium/stress --cpu 2 

Ho capito che C1 prende il 100% di cpu1 come previsto ma il 50% di cpu2 (invece del 20%), C2 prende il 100% di cpu3 come previsto e il 50% di cpu2 (invece dell'80%).

Sembra che l'opzione --cpu-shares sia ignorata. C'è un modo per ottenere il comportamento che sto cercando?

risposta

1

docker run menzioni che parametri come:

--cpu-shares=0    CPU shares (relative weight) 

E contrib/completion/zsh/_docker#L452 comprende:

"($help)--cpu-shares=[CPU shares (relative weight)]:CPU shares:(0 10 100 200 500 800 1000)" 

Quindi quei valori non sono% based.

Il PO menziona --cpu-shares=20/80 funziona con il seguente Cpuset constraints:

docker run -ti --cpuset-cpus="0,1" C1 # instead of 1,2 
docker run -ti --cpuset-cpus="3,4" C2 # instead of 2,3 

(tali valori sono validated/checked only since docker 1.9.1 with PR 16159)

Nota: Esiste anche CPU quota constraint:

Il flag --cpu-quota limita il contenitore del Uso della CPU. Il valore 0 predefinito consente al contenitore di prelevare il 100% di una risorsa CPU (1 CPU).

+0

Lo so, ho usato 20 e 80 per semplificare lo scenario. Poiché ho solo due contenitori che richiedono sia il 100% di cpu (stress) con le condivisioni impostate su 20 e 80, dovrebbero funzionare rispettivamente al 20% e all'80% della CPU condivisa (cpu2). Ovviamente avrei potuto usare qualcosa come 4 e 16 o 80 e 320. –

+0

No, voglio dire che quei valori potrebbero non essere riconosciuti. Prova 200 e 800 per vedere se funziona meglio. – VonC

+0

No, non funziona meglio, è lo stesso. –