Linux cgroup을 사용하여 CPU 성능 균형 조정


13

비교적 최근 커널을 사용하는 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

왜 이것이 효과가 있는지 설명하는 것은 왜 초기가 아닌지 알아내는 데 유용한 단계가 될 것입니다.


답변:


10

이 예제에서 가져온 논문을 쓴 Stefan Seyfried의이 테스트 사례에 대한 초기 설명을 받았습니다. 여기서 문제는 cgroup의 CPU 스케줄러 부분이 항상 사용 가능한 CPU를 바쁘게 유지하는 것입니다. 모든 것이 한 번에 맞을 경우 하드 제한을 적용하지 않습니다.

2 개 이상의 프로세스 (여기에서 높고 낮음)가 2 개 이상의 코어에서 실행되는 경우 한 코어에서는 높고 다른 코어에서는 낮게 유지됩니다. 그런 다음 스케줄러가 CPU에 충분한 시간을 제공하지 않는 상황에 부딪히지 않고 100 % 사용률로 거의 항상 실행됩니다. cpu.share 예약은 부족한 경우에만 발생합니다.

두 번째 경우 두 프로세스 모두 동일한 CPU에 고정됩니다. 그런 다음 CPU 공유 논리는 상대 cpu.shares 숫자로 균형을 맞추기 위해 유용한 무언가를 수행해야하며 원하는대로 수행합니다.

CFS 대역폭 제어 패치 가 나올 때까지 CPU 사용에 대한 하드 한계가 나타나지 않을 것 입니다. 그 시점에서 내가 기대했던 것과 같은 것을 얻을 수 있습니다.


예상대로 작동하는 것 같습니다. 물론 이것은 몇 년 전에 게시되었으므로 최근 커널에서 개선 사항이 있습니까?
Ken Sharp
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.