control groups 에서 가장 간단한 것이라 처음에 꺼내봅니다.


CPU Accounting Controller 는 cpu 의 자원을 task 별로 얼마나 사용하는지 모니터링 할수 있는 기능입니다.


cpu 의 자원을 할당하거나 하는 기능이 있는 것은 아니고 단지 모니터링만 합니다.


백문이 불여일견... 현재 제가 이 글을 편집하는 gedit 의 cpu 사용률을 그룹에 넣어 모니터링 해보도록 하겠습니다.


아래는 제 시스템의 cpuacct 정보입니다.

사용권한은 root 이어야 합니다.


root@boggle70-15ND530-PX7SK:/sys/fs/cgroup/cpuacct# pwd

/sys/fs/cgroup/cpuacct

root@boggle70-15ND530-PX7SK:/sys/fs/cgroup/cpuacct# ls -la

합계 0

drwxr-xr-x  3 root root   0  1월 19 01:58 .

drwxr-xr-x 12 root root 240  1월 19 01:32 ..

-rw-r--r--  1 root root   0  1월 17 15:47 cgroup.clone_children

--w--w--w-  1 root root   0  1월 17 15:47 cgroup.event_control

-rw-r--r--  1 root root   0  1월 17 15:47 cgroup.procs

-r--r--r--  1 root root   0  1월 17 15:47 cgroup.sane_behavior

-r--r--r--  1 root root   0  1월 17 15:47 cpuacct.stat

-rw-r--r--  1 root root   0  1월 17 15:47 cpuacct.usage

-r--r--r--  1 root root   0  1월 17 15:47 cpuacct.usage_percpu

-rw-r--r--  1 root root   0  1월 17 15:47 notify_on_release

-rw-r--r--  1 root root   0  1월 17 15:47 release_agent

-rw-r--r--  1 root root   0  1월 19 01:58 tasks

drwxr-xr-x  3 root root   0  1월 17 15:49 user


cgroup 은 매우 직관적인 인터페이스를 가지고 있습니다.

그냥 디렉토리를 하나 만들면 원하는 서브 그룹을 만들수 있습니다.

마치 디렉토리처럼요...

현재는 user 라는 그룹만 생성되었는데 사용은 안되고 잇군요

현재는 모든 프로세스가 최상위에 속해 있습니다.

제가 원하는걸 한번 만들어볼까요?


root@boggle70-15ND530-PX7SK:/sys/fs/cgroup/cpuacct# mkdir mygedit

root@boggle70-15ND530-PX7SK:/sys/fs/cgroup/cpuacct# cd mygedit/

root@boggle70-15ND530-PX7SK:/sys/fs/cgroup/cpuacct/mygedit# ls -la

합계 0

drwxr-xr-x 2 root root 0  1월 19 02:01 .

drwxr-xr-x 4 root root 0  1월 19 01:58 ..

-rw-r--r-- 1 root root 0  1월 19 02:01 cgroup.clone_children

--w--w--w- 1 root root 0  1월 19 02:01 cgroup.event_control

-rw-r--r-- 1 root root 0  1월 19 02:01 cgroup.procs

-r--r--r-- 1 root root 0  1월 19 02:01 cpuacct.stat

-rw-r--r-- 1 root root 0  1월 19 02:01 cpuacct.usage

-r--r--r-- 1 root root 0  1월 19 02:01 cpuacct.usage_percpu

-rw-r--r-- 1 root root 0  1월 19 02:01 notify_on_release

-rw-r--r-- 1 root root 0  1월 19 02:01 tasks


마지막에 보이는 tasks 라는 파일에 내가 모니터링 하길 원하는 프로세스의 PID를 넣으면 됩니다.

간단하죠?

tasks 라는 파일은 모든 서브그룹에 하나씩 생기게 되는데 최상위에 있는 tasks 에 있는

PID 를 이곳으로 옯기면 여기서 모니터링을 해줍니다.

PID 를 구해서 tasks 에 넣어 보겠습니다.


root@boggle70-15ND530-PX7SK:/sys/fs/cgroup/cpuacct/mygedit# ps -ax | grep gedit

root@boggle70-15ND530-PX7SK:/sys/fs/cgroup/cpuacct/mygedit# cat tasks 

root@boggle70-15ND530-PX7SK:/sys/fs/cgroup/cpuacct/mygedit# 

아무것도 없군요 이제 넣어 보겠습니다.

root@boggle70-15ND530-PX7SK:/sys/fs/cgroup/cpuacct/mygedit# echo 10292 > tasks 

root@boggle70-15ND530-PX7SK:/sys/fs/cgroup/cpuacct/mygedit# cat tasks 

10292


이제 할당한 cpu 가 생겼습니다.

이제 여기에서 값들을 좀 볼까요?


root@boggle70-15ND530-PX7SK:/sys/fs/cgroup/cpuacct/mygedit# cat cpuacct.stat 

user 94

system 6

root@boggle70-15ND530-PX7SK:/sys/fs/cgroup/cpuacct/mygedit# cat cpuacct.usage

1327029367

root@boggle70-15ND530-PX7SK:/sys/fs/cgroup/cpuacct/mygedit# cat cpuacct.usage_percpu 

67117244 124054319 359637696 135552419 313141476 50804456 230446821 46498792 

tasks 를 할당하기 전에는 여기에 아무런 값이 없었는데 이제 위와 같이 통계가 나옵니다.

자 그럼 이제 tasks 에서 gedit 10292 를 제거해 볼까요?


제거라는 것은 없습니다.

모니터링 하길 원하는 task 를 옮겨야 합니다.

즉 아까 모든 프로세서가 기본적으로 속해 있던 최상위에 옮겨 주어야 하는 것이죠.

root@boggle70-15ND530-PX7SK:/sys/fs/cgroup/cpuacct/mygedit# cd ..

root@boggle70-15ND530-PX7SK:/sys/fs/cgroup/cpuacct# echo 10292 > tasks


최상위로 가서 PID 를 넣어 주었습니다.

이제 다시 하위에 가서 보면...


root@boggle70-15ND530-PX7SK:/sys/fs/cgroup/cpuacct# cd mygedit/

root@boggle70-15ND530-PX7SK:/sys/fs/cgroup/cpuacct/mygedit# cat tasks 

root@boggle70-15ND530-PX7SK:/sys/fs/cgroup/cpuacct/mygedit# 

네 아무것도 없습니다.

또 한가지 이렇게 group 을 만들었는때 tasks 를 비우지 않으면 해당 그룹은 삭제할수가 없습니다.

root@boggle70-15ND530-PX7SK:/sys/fs/cgroup/cpuacct/mygedit# cd ..

root@boggle70-15ND530-PX7SK:/sys/fs/cgroup/cpuacct# rmdir mygedit/

root@boggle70-15ND530-PX7SK:/sys/fs/cgroup/cpuacct#