Condivisione di cpu-share e cpuset-cpus in Docker

Vorrei eseguire due contenitori con la seguente allocazione delle risorse:

  • Contenitore "C1": riservato cpu1, condiviso cpu2 con 20 condivisioni di cpu
  • Contenitore "C2": riservato cpu3, ​​condiviso cpu2 con 80 condivisioni di cpu

Se faccio 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 ottenuto che C1 prende il 100% del cpu1 come previsto, ma il 50% del cpu2 (invece del 20%), C2 prende il 100% del cpu3 come previsto e il 50% del cpu2 (invece dell'80%).

Sembra che l'opzione -cpu-shares sia ignorata. C'è un modo per get il comportmento che cerco?

    il gestore docker menziona il parametro come:

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

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

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

    Quindi questi valori non sono basati su%.

    L'OP menziona --cpu-shares=20/80 funziona con i seguenti vincoli Cpuset :

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

    (quei valori sono validationti / controllati solo dal docker 1.9.1 con PR 16159 )

    Nota: c'è anche un vincolo di quota CPU :

    La bandiera --cpu-quota limita l'utilizzo della CPU del contenitore. Il valore predefinito 0 consente al contenitore di prendere il 100% di una risorsa CPU (1 CPU).