본문으로 건너뛰기

2.3 cgroup CPU 제한

Container에서 host CPU가 여유로워도 workload가 느릴 수 있습니다. cgroup v2의 cpu.max가 quota를 제한하면 사용 가능한 시간 안에서만 실행됩니다.

cat /sys/fs/cgroup/cpu.max
cat /sys/fs/cgroup/cpu.stat
cat /sys/fs/cgroup/cpu.pressure

cpu.max의 첫 값은 quota, 둘째 값은 period입니다. max 100000은 quota 제한이 없고, 200000 100000은 period당 CPU time 2개 분량을 허용합니다.

cpu.stat에서 확인할 값은 다음과 같습니다.

  • usage_usec: 사용한 CPU time
  • nr_periods: 집계된 period 수
  • nr_throttled: throttling이 발생한 period 수
  • throttled_usec: 제한으로 실행하지 못한 누적 시간

Kubernetes와 연결

CPU limit은 보통 CFS bandwidth 제한으로 이어집니다. 평균 CPU 사용량이 limit보다 낮아도 짧은 burst가 quota를 먼저 소진하면 tail latency가 증가할 수 있습니다. request는 scheduling 기준이고 limit은 실행 제한이므로 역할을 구분합니다.

진단할 때 host run queue, container CPU PSI, throttled time, application latency를 같은 시간축으로 놓습니다. Limit을 없애는 변경은 noisy neighbor 위험과 node capacity를 함께 검토한 뒤 실험합니다.

참고: Control Group v2 CPU controller