Queria postar a resposta para essa pergunta caso alguém veja um resultado confuso semelhante. Parece que eu tive dois problemas:
-
É necessário usar # CPUs no host, não # CPUs disponíveis no cgroups cpuset para estimar a largura de banda da CPU:
(# of cpus on the host) * (cpu.cfs_period_us) * (.25) so 40 * 100000 * .25 = 1000000
-
Minha execução de stress-ng dentro do contêiner estava usando os controladores cpu e cpuset do / lxc / foo cgroup enquanto a execução de stress-ng fora do contêiner estava usando o /system/sshd.service cgroup
Para modelar melhor meu aplicativo do mundo real, eu deveria ter especificado quais controles usar usando cgexec :
$ cgexec -g cpuset:/lxc/foo -g cpu:/lxc/foo ./stress-ng --cpu-load 100 -c 48 --times --timeout 10s --metrics-brief
stress-ng: info: [6252] dispatching hogs: 48 cpu
stress-ng: info: [6252] successful run completed in 10.36s
stress-ng: info: [6252] stressor bogo ops real time usr time sys time bogo ops/s bogo ops/s
stress-ng: info: [6252] (secs) (secs) (secs) (real time) (usr+sys time)
stress-ng: info: [6252] cpu 11152 10.09 102.83 0.12 1105.60 108.32
stress-ng: info: [6252] for a 10.36s run time:
stress-ng: info: [6252] 414.46s available CPU time
stress-ng: info: [6252] 102.85s user time ( 24.82%)
stress-ng: info: [6252] 0.12s system time ( 0.03%)
stress-ng: info: [6252] 102.97s total time ( 24.84%)