비교적 최근 커널을 사용하는 Linux cgroup을 사용하여 2 개의 듀얼 코어 Linux 시스템을 설치했습니다. 하나는 데비안 스퀴즈, 다른 하나는 우분투 11.04 Natty Narwhal입니다. 이전 커널에도 불구하고 데비안 시스템에서 cgroup이 조금 더 잘 작동하도록 CPU 부하 분산을 얻었습니다. 그러나 모든 것에 옳은 것은 아니며, 여기에서 요구하는 특정 이상은 두 시스템에서 발생합니다.
제어 그룹 이 있는 Linux에서 자원 관리 를 읽으면 문제점을 재현하는 방법을 보여주는 예가 제공됩니다. Ubuntu 버전은 다음과 같습니다 (루트로 실행).
cd /sys/fs/cgroup/cpu
[On Debian Squeeze start at /mnt/cgroups/cpu instead]
mkdir low high
echo 512 > low/cpu.shares
echo 2048 > high/cpu.shares
yes low > /dev/null &
echo $! > low/tasks
yes high > /dev/null &
echo $! > high/tasks
ps -C yes -opid,%cpu,psr,args
[repeat that a few times]
killall -9 yes
"높은"프로세스가 "낮은"프로세스보다 더 많은 시간이 할당 될 것으로 예상했습니다. 이 테스트 사례에서 실제로 발생하는 일은 항상 다음과 같습니다.
root@black:/sys/fs/cgroup/cpu# ps -C yes -opid,%cpu,psr,args
PID %CPU PSR COMMAND
3105 88.3 1 yes low
3106 94.5 0 yes high
시간이 거의 같은 곳. 내 질문은 다음과 같습니다. 왜 그런 일이 발생합니까?
프레젠테이션에서이 문제는 각 프로세스를 동일한 CPU에 고정하여 사라지는 것으로 나타납니다. 이를 테스트하기위한 추가 라인 :
taskset -c 1 yes high > /dev/null &
echo $! > high/tasks
taskset -c 1 yes low > /dev/null &
echo $! > low/tasks
ps -C yes -opid,%cpu,psr,args
[later, rinse, repeat]
killall -9 yes
결과는 내가 항상 기대했던 것입니다. "높은"프로세스는 CPU의 훨씬 높은 비율을 얻습니다.
root@black:/sys/fs/cgroup/cpu# ps -C yes -opid,%cpu,psr,args
PID %CPU PSR COMMAND
3128 83.3 1 yes high
3129 20.7 1 yes low
왜 이것이 효과가 있는지 설명하는 것은 왜 초기가 아닌지 알아내는 데 유용한 단계가 될 것입니다.