04 DVFS

초강송·2026년 4월 10일

고급컴퓨터구조

목록 보기
3/11

04 DVFS

Power consumption of processor

  • V와 F를 잘 조절하면, performance는 조금만 희생하고, power efficiency를 크게 개선할 수 있음

DVFS (Dynamic voltage and frequency scaling)

  • CPU, GPU 같은 processor가 workload에 따라 voltage와 frequency를 조절하는 technique

DVFS governor

  • DVFS를 어떻게 수행할 건지 policy를 정하는 linux kernel subsystem
  • linux’s DVFS governor
    • performance - 항상 최대 clock freq으로 고정, 최고 성능 but 전력 소모 큼
    • powersave - 항상 최저 clock freq으로 고정, 낮은 성능, 전력 절약
    • ondemand - 주기적으로 cpu load를 샘플링하면서 load가 크면 freq 높임
    • conservative - ondemand랑 비슷하지만 clock을 점진적으로 천천히 올리고 내림
    • schedutil - CFS가 계산한 PELT를 이용해서 freq를 즉시 조절

CFS (Completely Fair Scheduler)

vruntime

  • 각 task는 vruntime(virtual runtime, weighted cpu time)을 갖는다.
  • 실행할 때마다 vruntime이 weight에 비례해 증가한다.
    • nice value가 크면 빠르게 증가, 작으면 느리게 증가
  • CFS는 항상 가장 작은 vruntime task를 rb tree에서 골라 실행한다.
  • 실행이 끝나면 vruntime 업데이트하고, red black tree에 넣는다.

PELT, Per-Entity Load Tracking

  • 스케줄러가 cpu의 현재 부하를 파악하기 위해, 각 task가 최근 일정 시간 동안 cpu를 얼마나 사용했는지 추적하는 메커니즘
  • task utilization을 계산할 땐 지수 가중 이동 평균(Exponential Weighted Moving Average)로 계산
    • 최근 부하일수록 더 큰 비중을 두고, 오래된 부하는 점점 잊어버리게끔
  • cpu 하나는 자신 위에 올라온 모든 task의 util_avg를 합산해서 cpu 전체 부하, 즉 util avg를 계산
  • PELT utilization (정규화 이전 값) ≠ utilization of /proc/stat or top
    • PELT는 단순 % 값이 아님
    • uclamp: PELT utilization의 min/max 범위 지정
  • 커널은 cpu마다 성능(cpu_capacity)가 다르다는 점을 반영하기 위해 Normalization 진행
    • 각 cpu의 util_avg를 그 cpu의 capacity로 나눠서 정규화
    • 이 cpu는 상대적으로 얼마나 바쁜가?
  • CFS는 이 PELT util을 사용하고, schedutil은 정규화된 util 사용

schedutil

  • Scheduler-driven governor
    • CFS 스케줄러가 계산한 utilization 결과에 즉시 반응해서, CPU frequency를 실시간으로 조절
    • reponsiveness 좋고, less over-boost & energy efficiency
    • 다음 freq은 max freq에서 normalized util만큼 사용하겠다

이 C도 고정은 아님

0개의 댓글