# 에너지 효율적 스케줄링

실시간 시스템에서 에너지 효율성을 극대화하는 것은 매우 중요한 과제이다. 특히, 배터리 수명이 중요한 임베디드 시스템에서는 더욱 그러한다. 이 장에서는 Preempt RT 커널에서 에너지 효율적 스케줄링 알고리즘을 사용하는 방법에 대해 다룬다.

#### 동적 전압 및 주파수 조정 (DVFS)

DVFS(Dynamic Voltage and Frequency Scaling)는 프로세서의 전력 소비를 줄이는 주요 기법 중 하나이다. DVFS는 시스템의 성능 요구에 따라 동적으로 전압과 주파수를 조정하여 에너지를 절약한다.

**DVFS의 기본 원리**

프로세서의 전력 소비 $P$는 주파수 $f$와 전압 $V$에 따라 다음과 같이 표현될 수 있다:

$$
P \propto V^2 \cdot f
$$

여기서, 전압 $V$와 주파수 $f$를 조정하면 전력 소비를 효과적으로 줄일 수 있다.

#### 에너지 효율적 스케줄링 알고리즘

에너지 효율적 스케줄링 알고리즘은 주어진 실시간 작업 세트에 대해 에너지를 최소화하면서도 타이밍 요구 사항을 충족시키기 위해 설계되었다.

**휴지 모드 활용**

시스템이 유휴 상태일 때 프로세서를 저전력 모드로 전환하여 에너지를 절약할 수 있다. 이를 위해 Preempt RT 커널은 다양한 C-상태(C-states)를 사용한다. C-상태는 프로세서가 유휴 상태일 때 전력 소비를 줄이기 위한 다양한 절전 모드를 나타낸다.

#### 에너지 효율적 스케줄링 알고리즘의 유형

**1. EDeg (Energy Deadline-based Scheduling)**

EDeg 알고리즘은 작업의 마감 시간과 에너지 소비를 동시에 고려하여 스케줄링 결정을 내린다. 이 알고리즘은 작업의 우선 순위를 에너지 효율성을 기준으로 정하며, 가능한 한 낮은 전압과 주파수에서 작업을 수행한다.

**2. DVS (Dynamic Voltage Scaling)**

DVS 알고리즘은 시스템의 성능 요구에 따라 동적으로 전압을 조정하여 에너지 효율성을 극대화한다. 이 알고리즘은 주파수를 고정된 값으로 유지하면서 전압을 조정한다.

**3. DPM (Dynamic Power Management)**

DPM은 시스템의 현재 상태에 따라 전력 소비를 조정하는 기법이다. DPM 알고리즘은 유휴 시간 동안 시스템을 저전력 모드로 전환하여 에너지를 절약한다.

#### 알고리즘의 구현

**DVFS 구현 예제**

DVFS를 사용하여 에너지 효율적 스케줄링을 구현하는 예제 코드는 다음과 같다:

```c
#include <linux/cpufreq.h>

// 작업의 주기와 마감 시간을 정의
#define PERIOD 1000000 // 1초
#define DEADLINE 500000 // 0.5초

void set_cpu_frequency(unsigned int cpu, unsigned int frequency) {
    struct cpufreq_policy *policy;
    policy = cpufreq_cpu_get(cpu);
    cpufreq_driver_target(policy, frequency, CPUFREQ_RELATION_H);
    cpufreq_cpu_put(policy);
}

void energy_efficient_task() {
    unsigned int cpu = smp_processor_id();
    unsigned int frequency = cpufreq_quick_get_max(cpu);
    
    // 작업 수행 전 주파수 조정
    set_cpu_frequency(cpu, frequency / 2);
    
    // 작업 수행 코드
    // ...
    
    // 작업 수행 후 주파수 원래대로 복원
    set_cpu_frequency(cpu, frequency);
}

```

이 코드는 작업이 실행될 때 프로세서 주파수를 낮추고, 작업이 완료된 후 주파수를 원래대로 복원하여 에너지를 절약한다.

#### 에너지 효율적 스케줄링의 고려 사항

에너지 효율적 스케줄링을 구현할 때 고려해야 할 중요한 사항은 다음과 같다:

**1. 작업의 특성**

작업의 주기성, 마감 시간, 실행 시간 등의 특성을 고려하여 적절한 스케줄링 알고리즘을 선택해야 한다.

**2. 시스템의 전력 모델**

시스템의 전력 소비 모델을 정확히 이해하고, 이를 기반으로 에너지 효율적 스케줄링을 설계해야 한다.

**3. 성능과 에너지의 균형**

성능 요구 사항과 에너지 절약의 균형을 맞추는 것이 중요하다. 에너지를 너무 많이 절약하려다 성능이 떨어질 수 있으며, 반대로 성능을 너무 강조하면 에너지 절약이 어려울 수 있다.

**4. 환경 조건**

온도, 전력 공급의 안정성 등 환경 조건도 고려해야 한다. 특히 임베디드 시스템에서는 이러한 외부 요인이 시스템의 에너지 효율성에 큰 영향을 미칠 수 있다.

#### 에너지 효율적 스케줄링의 평가

에너지 효율적 스케줄링 알고리즘의 성능을 평가하기 위해 다양한 메트릭을 사용할 수 있다. 그 중 가장 일반적인 것은 다음과 같다:

1. **에너지 소비량**: 전체 시스템의 전력 소비량을 측정하여 에너지 절약 효과를 평가한다.
2. **작업 완료 시간**: 작업이 기한 내에 완료되는지 확인하여 실시간 성능을 평가한다.
3. **시스템 성능**: 주파수 조정으로 인한 성능 저하를 평가한다.
4. **시스템 안정성**: 전압 및 주파수 조정이 시스템의 안정성에 미치는 영향을 평가한다.

***

에너지 효율적 스케줄링은 실시간 시스템에서 매우 중요한 과제이다. Preempt RT 커널을 사용하여 다양한 에너지 효율적 스케줄링 알고리즘을 구현할 수 있으며, 이를 통해 시스템의 전력 소비를 최소화할 수 있다. 에너지 효율성을 극대화하기 위해서는 작업의 특성, 시스템의 전력 모델, 성능 요구 사항 및 환경 조건 등을 종합적으로 고려해야 한다.

이 장에서는 에너지 효율적 스케줄링 알고리즘의 기본 개념과 구현 방법에 대해 설명하였다. 실시간 시스템에서 에너지 효율성을 극대화하기 위한 다양한 접근 방법을 이해하고 이를 실제 시스템에 적용하는 것은 매우 중요한 일이다.

#### 참고 문헌

1. "Dynamic Voltage and Frequency Scaling for Embedded Systems" - IEEE Transactions on Embedded Computing Systems
2. "Energy-efficient Scheduling for Real-time Systems" - ACM Transactions on Embedded Computing Systems

에너지 효율적 스케줄링은 계속 발전하는 분야로, 최신 연구 결과와 기술을 지속적으로 학습하고 적용하는 것이 중요하다.
