Linux cgroup을 사용하여 CPU 성능 균형 유지

Linux cgroup을 사용하여 CPU 성능 균형 유지

비교적 새로운 커널이 포함된 Linux cgroup을 사용하여 두 개의 듀얼 코어 Linux 시스템을 설치했습니다. 하나는 Debian Squeeze를 실행하고 다른 하나는 Ubuntu 11.04 Natty Narwhal을 실행했습니다. Debian 시스템에 오래된 커널이 있더라도 cgroup을 통해 CPU 로드 밸런싱을 구현했는데 Debian 시스템에서 더 잘 작동합니다. 그러나 모든 경우에 해당되는 것은 아니며 여기서 제가 묻는 특정 이상한 동작은 두 시스템에서 발생합니다.

당신이 읽었다면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

이것이 작동하는 이유를 설명하는 것은 이전 방법도 작동하지 않는 이유를 알아내는 데 도움이 되는 유용한 단계입니다.

답변1

이 예제에 대한 논문을 쓴 Stefan Seyfried로부터 이 테스트 케이스에 대한 초기 설명을 들었습니다. 여기서 문제는 cgroup의 CPU 스케줄러 부분이 항상 사용 가능한 CPU를 계속 사용하도록 설계되어 모든 것이 동시에 충족될 수 있는 경우 엄격한 제한을 적용하지 않는다는 것입니다.

2개 이상의 프로세스(여기서는 높음 및 낮음)가 2개 이상의 코어에서 실행되는 경우 한 코어에서는 높게 유지되고 다른 코어에서는 낮게 유지됩니다. 그러면 둘 다 항상 100%에 가까운 사용량으로 실행됩니다. 왜냐하면 스케줄러가 충분한 CPU 시간을 제공하지 않고도 그렇게 할 수 있기 때문입니다. cpu.share 스케줄링은 부족할 때만 발생합니다.

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

CPU 사용량에 대한 엄격한 제한은 다음 이후에만 발생합니다.CFS 대역폭 제어 패치때리다. 그 시점에서 나는 내가 바라던 것과 더 유사한 것을 얻을 수도 있습니다.

관련 정보