For instance, could I just use the
cutime
andcstime
values of the namespace's init process to get total CPU usage?
Isso incluirá apenas o tempo dos filhos e descendentes esperados para (e, portanto, terminados) (ou processos processados no caso de init
). Então você só terá tempo para os órfãos mortos.
Se você calcular a soma do cutime e cstime de todos os processos no namespace (cuidado com as condições de corrida), você deve obter o tempo acumulado de todos os processos atuais e passados nesse namespace, exceto aqueles que se juntaram ao namespace nsenter -p
) cujo tempo será contabilizado para seu pai no namespace original (eu acho que esses processos têm um PPID de 0 no namespace inserido).
Also, if I mount the namespace's
/proc
filesystem (rather than the root namespace's), will/proc/stat
only show CPU utilization of that particular namespace?
Isso é facilmente verificado:
$ grep cpu /proc/stat
cpu 69003764 88576 8499514 244070762 5120799 0 407453 0 0 0
cpu0 34269946 49008 4228860 122466614 2365498 0 55409 0 0 0
cpu1 34733818 39567 4270653 121604147 2755300 0 352044 0 0 0
$ sudo unshare --mount-proc -mpf grep cpu /proc/stat
cpu 69005266 88576 8499588 244072663 5120837 0 407462 0 0 0
cpu0 34270449 49008 4228896 122467803 2365522 0 55410 0 0 0
cpu1 34734816 39567 4270692 121604860 2755315 0 352051 0 0 0
Então, parece que não.
AFAICT, você deve ser capaz de calcular as estatísticas do namespace raiz.
Por exemplo, para o namespace de pid $pid
, com zsh
e perl
:
perl -l -0777 -ne '
if (/\(.*\)(?: .*?){12} (.*?) (.*?) (.*?) (.*?)/) {$s+=$1+$2+$3+$4}
END{print $s}' /proc/*/ns/pid(e:'[[ $REPLY -ef /proc/$pid/ns/pid ]]'::h:s/ns/stat)
Ou seja, some os campos 14 a 17 do / proc / pid / stat de todos os processos que tenham o mesmo namespace pid como $pid
.
Como dito acima, isso não inclui o tempo de processos que têmnsenter
ed o espaço do nome mais tarde e morreram (nem os filhos que eles esperaram (os outros parecem ser copiados pelo init do namespace) ).