Red Hat의 cgroup에 대한 안내서가 도움이 될 것입니다 (그러나이 질문에 대답하지는 않습니다).
프로세스를 시작하는 명령 중에 특정 프로세스를 특정 CPU로 제한하는 방법을 알고 있습니다.
먼저 다음을 *에 넣습니다 /etc/cgconfig.conf
.
mount {
cpuset = /cgroup/cpuset;
cpu = /cgroup/cpu;
cpuacct = /cgroup/cpuacct;
memory = /cgroup/memory;
devices = /cgroup/devices;
freezer = /cgroup/freezer;
net_cls = /cgroup/net_cls;
blkio = /cgroup/blkio;
}
group cpu0only {
cpuset {
cpuset.cpus = 0;
cpuset.mems = 0;
}
}
그런 다음 프로세스를 시작하고 다음을 사용하여 해당 cgroup에 구체적으로 지정하십시오.
cgexec -g cpuset:cpu0only myprocessname
다음을 입력하여 특정 프로세스 이름의 모든 인스턴스를 자동으로 제한 할 수 있습니다 ( 정확 하다고 생각 합니다) /etc/cgrules.conf
.
# user:process controller destination
*:myprocessname cpuset cpu0only
내 질문은 : 어떻게 반대로 할 수 있습니까?
다시 말해, 특정 화이트리스트 프로세스 와 그 하위 를 제외한 모든 프로세스 를 제한된 cgroup에 어떻게 할당 할 수 있습니까?
내가 공부하지만, 테스트를하지 않은 것을 바탕으로, 나는 생각 • 그래도 부분적인 해결책이 될 것이다 :
"제한되지 않은"cgroup을 추가하십시오.
group anycpu {
cpuset {
cpuset.cpus = 0-31;
cpuset.mems = 0; # Not sure about this param but it seems to be required
}
}
프로세스를 무제한 그룹에 명시 적으로 지정하고 그 밖의 모든 것을 제한된 그룹에 지정하십시오.
# user:process controller destination
*:myprocessname cpuset anycpu
* cpuset cpu0only
그러나 이것에 대한주의는 (시험을하지 않고 문서를 읽거나 소금을 뿌린 것에서) 아이들 myprocessname
이 제한된 cpu0only
cgroup에 다시 할당되는 것 같습니다 .
가능한 대안은 사용자를 작성하여 실행 myprocessname
하고 해당 사용자의 모든 프로세스를 제한하지 않고 다른 모든 것을 제한하는 것입니다. 그러나 실제 사용 사례에서 프로세스는 루트로 실행해야하며 루트로 실행 해야하는 다른 프로세스 가 있으며 제한 해야 합니다.
cgroup으로 어떻게 이것을 할 수 있습니까?
cgroup에서 이것이 가능하지 않은 경우 (지금은 의심되는 경우) 부분 솔루션에 대한 아이디어가 정확하고 생각대로 작동합니까?
* 면책 조항 : 이것은 아마도 최소한의 코드 예제가 아닙니다. 모든 부분을 이해하지 못 하므로 필요하지 않은 부분을 모릅니다.