BOBO's Note

Linux에서의 전력 관리 본문

Embedded System

Linux에서의 전력 관리

bobo_hee 2020. 6. 17. 03:05

리눅스는 다양한 상황에서 전력을 관리한다. 예를 들어 프로세스를 잠시 멈추었다가 시작할 때, CPU가 idle하거나 부하가 작은 작업을 할 때 전력을 적게 소모하도록 관리하고 있다.

 

Background

Energy(에너지)와 Power(전력)은 다르다. 에너지는 전체 시간동안 소모된 총 전력량이다.

 


CPU의 전력 소모량은 크게 두 부분으로 나뉜다. CPU의 상태와 관계없이 항상 일정량 소모되는 과 CPU 상태에 따라 달라지는 

으로 구성된다. 이때, 은 capacitor, frequency, voltage에 의해 결정된다.

 

 

 

voltage가 일정하다고 가정할 때, frequency를 낮추면 가 줄어든다. 이로 인해 도 줄어들기 때문에 일을 처리하기 위한 시간이 오래 걸린다. 반대로 frequency를 높이면 시간이 줄어든다.

frequency와 time의 관계

"Race to idle"

최대한 빨리 끝내고 idle한 상태를 유지하는 것을 선호하는 방식이다. 이에 따라 태스크가 들어오면 최대의 frequency로 최대한 빨리 끝내는 게 전력량을 줄일 수 있어서 좋다.


한편, 실제로는 frequency를 변경하기 위해서는 voltage도 함께 변경되어야 한다. 그리고 태스크가 주어지는 패턴을 예측할 수 없기 때문에 매번 태스크가 들어올 때마다 frequency를 최대로 높이는 것은 오히려 변경 오버헤드 및 전력 소모가 클 수 있다. 

 

Dynamic Voltage and Frequency Scaling (DVFS)

DVFS는 필요에 따라 voltage와 frequency를 변경하여 소비 전력을 조절하는 방법이다. CPU의 최적화된 voltage 및 frequency 수준을 미리 여러 개 정의해놓는데, 이러한 정해진 수준(지점)들을 Operating Performance Point, 줄여서 OPP라고 한다. Governor는 policy에 맞게 OPP를 선택한다.

 

Governor의 policy는 여러 종류가 있는데, 이 중에서 default policy는 powersave이다.

  • powersave: 항상 가장 낮은 frequency로 설정한다.
  • performance: 항상 가장 높은 frequency로 설정한다.
  • ondemand: CPU의 idle한 시간이 20%보다 적으면 최대 frequency, 30%보다 많으면 5%씩 감소한 OPP로 설정한다.
  • conservative: ondemand와 비슷한데, 5%씩 증가한 OPP로 설정한다.
  • userspace : user space의 프로그램에 의해 frequency를 설정한다.

다음과 같은 커맨드로 governor policy를 변경할 수 있다.

echo [policy_name] > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo [policy_name] > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor

echo "performance" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

 

Idle Loop

Idle loop는 시스템에서 더 이상 스케쥴링할 프로그램이 없을 때, 실행되는 반복문이다. CPU는 기본적으로 항상 명령어를 실행하게 되어있다. 아무 일도 안 하려면 무한 루프를 돌거나 NOP 명령어라도 실행해야 한다. 때문에 idle한 상태더라도 전력을 소모하게 되는데, 이 때의 전력 소모를 줄이기 위해서 idle loop라는 전력 관리 방법을 사용한다.

 

아키텍처마다 idle loop의 구체적인 구현은 다르다. 커널 소스의 arch/<arch>/kernel/process.c 에 구현되어 있다.

 

모던 CPU들은 다양한 CPUidle 수준을 제공한다. 전력 소모를 줄이는 sleep일수록 wake up, 즉 인터럽트에 반응하여 깨어나는 시간이 길다. 

 

Suspend-to-RAM

Suspend-to-RAM은 줄여서 STR이라고도 하며, 우리말로 하면 대기모드이다.

 

 

'Embedded System' 카테고리의 다른 글

Bare Metal  (0) 2020.06.16
GPIO  (0) 2020.06.04
Interrupt Handler  (0) 2020.06.03
Kernel Module과 Device Driver  (0) 2020.05.29
Android Boot Sequence  (0) 2020.05.26
Comments