Estou tentando "reservar" um núcleo em uma CPU para medição de desempenho. Eu montei um cgroups cgroups vfs. Eu criei dois subgrupos como este:
/cpuset.cpu_exclusive 1
/cpuset.cpus 0-3
/cpuset.mems 0
# Everything on the PC except what I want to measure
/All/cpuset.cpu_exclusive 1
/All/cpuset.cpus 1-3
/All/cpuset.mems 0
# The measurement processes only (i.e. the shell + a binary to test)
/Timing/cpuset.cpu_exclusive 1
/Timing/cpuset.cpus 0
/Timing/cpuset.mems 0
Eu posso mover muitos processos para o grupo "Todos", mas não consigo para alguns (aqueles que se parecem com processos do kernel). Por exemplo, o ksoftirqd tem um pid de 3:
[root@Io:/vfsroot]# echo 3 > All/tasks
echo: write error: invalid argument
Além disso, para alguns processos, eu posso vê-los em Todas / tarefas, mas eles ainda estarão rodando na cpu errada (aqui cpu # 0, com um shell).
[root@Io:/vfsroot]# echo 28362 > All/tasks
[root@Io:/vfsroot]# ps -eo pid,psr | grep "0$"
...
28362 0
Para aqueles que eu estou querendo saber se isso é porque eles não acordaram desde que eu mudei o seu cpuset e ps exibe o último cpu eles correram em ...
Eu posso mudar minha CPU atual com bastante eficiência. (Faça aparecer e desapareça de / Timing / tasks e veja se muda de CPU com ps)
Estou usando a versão mais recente do Ubuntu e instalei cgroups usando o apt-get, se isso for importante.