Dynamic Voltage and Frequency Scaling (DVFS) 에 관하여
이번 글은 Dynamic Voltage and Frequency Scaling (DVFS) 에 관하여 다룬다.
(본 글은 아래의 문서를 참고하였으며 틀린 부분이 있다면 댓글 부탁드립니다.)
참고한 문서
- https://en.wikipedia.org/wiki/Dynamic_voltage_scaling
- https://en.wikipedia.org/wiki/Dynamic_frequency_scaling
- http://processors.wiki.ti.com/index.php/DVFS_User_Guide
아래 내용은 여기의 내용을 대부분 그대로 가져왔다.
여기에 있는 글을 읽어보면 DVFS 에 대해서 다음과 같이 적혀 있다.
Dynamic Voltage and Frequency scaling is a framework to change the frequency and/or operating voltage of a processor(s) based on system performance requirements at the given point of time.
필요에 따라 코어의 전압과 주파수(클럭)을 조정하여 성능을 변화시킬 수 있는 방법인 듯 하다.
Frequency Scaling
주파수(아마도 CPU clock)를 조절하여 성능의 조절을 하는 방법이다.
이 방법은 CPUFreq 라는 Linux framework 를 이용한다. 이 framework 는 processor 의 성능 요구 상황을 모니터링하고 이에 따라 frequency 를 조절하게 된다.
CPUFreq 는 다음 2가지 요소로 구성되어 있다.
- Governor : 어떻게 조절할 지 결정(Decision)을 한다. System performance를 monitoring하면서 Frequency 조절이 필요할 경우 Policy를 통해 frequency limit 을 확인한 후 Driver 에 frequency 조절 요청을 하게 된다.
- Driver : Governor의 결정에 따라 실제로 frequency 의 조절을 한다. 요청된 frequency 값을 OOP List 에서 확인하여 변경 가능한 값일 경우 해당 값으로 frequency 변경을 하게 된다.
각각의 CPU 코어는 특정 Frequency 에서 요구되는 Voltage 가 있다. 이 정보들이 담긴 목록을 Operating performance Point(OPP) List 라고 한다.
각각의 CPU 코어마다 선택 가능한 Frequency 목록이 있는데 이를 Frequency Table 이라고 한다. 이는 OOP List 에 기반하여 생성된다.
각각의 CPU 코어는 최저/최대 Frequency, 그리고 이 사이에서 선택 가능한 Frequency 값들이 존재한다. 이런 선택 가능한 Rule 들을 Policy 라고 하며 이는 Frequency Table 에 기반하여 생성된다.
CPUFreq framework 에는 다음과 같은 Governor 가 존재한다.
- Performance
- Powersave
- Ondemand
- Userspace
- Conservative
Voltage Scaling
전압을 조절한다.
Frequency 가 변화할 경우 OOP List에 기반하여 변화한 값에 맞게 Voltage도 자동으로 조절하는 듯 하다.
Frequency 값을 직접 지정하기
각 CPU 코어마다 직접 지정이 가능한 듯 하다.
(확실하지는 않지만) Governor를 userspace로 지정하면 자신이 원하는 frequency 값을 고정할 수 있는 것 같다. (물론 가능한 frequency 값이어야 한다.)
1
2
[userspace governor 선택]
$ echo -n "userspace" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
1
2
[선택 가능한 frequency 확인]
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
1
2
[frequency 지정]
$ echo -n "<new_frequency> > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
NVIDIA Jetson TX2 에는 각 CPU 코어마다 frequency 미리 지정된 값으로 간편하게 바꿀 수 있도록 하는 명령어가 존재한다. 이는 다음 글에…