P-State란
- P-State는 시스템이 동작하는 동안, CPU의 클럭 주파수를 조절하여 어느 정도의 Performance로 CPU를 작동시킬 것인지 결정
- Intel의 X86 프로세서에서 P-State 기능을 SpeedStep이라는 이름으로 사용
- 리눅스는 P-State 기능을 "/sys/devices/system/cpu/cpu#/cpufreq/" 에 존재하는 파일을 이용하여 조절
- P-State는 시스템의 클럭수를 조절하여 동적으로 전체 시스템의 전력 소모를 조절
- CPU P-State는 Performace 상태로 정의된 voltage-frequency 제어 상태를 나타냄
- voltage-frequency 제어에서 회로를 구동하는 전압(voltage)과 클록(clock)은 작업 부하에 따라 증가하거나 감소함
- 운영 체제는 현재 작업 부하(workload)를 기반으로 특정 P-State를 요청
- 프로세서는 요청을 수락하거나 거부하고, 자체 상태를 기반으로 P-State를 설정 가능
- P-State는 프로세서가 지원하는 frequency와 수집 기간 동안 각 frequency에서 소요된 시간을 나타냄
- P-State에서는 SpeedStep, Speed Shift가 CPU의 클럭을 관리
P-State 핵심
- P-State가 CPU frequency를 떨어뜨려서 전력 소모를 줄이는 방법
- CPU 사용량이 적을때 CPU 코어의frequency를 떨어뜨려서 적은 voltage으로 CPU를 동작할 수 있게 하기 위해 사용
- CPU 코어 frequency와 voltage를 미리 정의 → 요청사항이 많을 때는 최대 frequency로 설정, 요청사항이 적은 때는 낮은 frequency로 동작
- Intel 계열 CPU에서는 SpeedStep이라는 이름을 사용
- Linux 상에서 cpufreq라는 인터페이스를 통해서 SpeedStep 기능 제어 → CPU frequency governor는 cpufreq로 frequency 결정
- cpufreq_performance → 전력은 많이 소비하지만 항상 최대의 성능으로 동작
- cpufreq_powersave → 최대한 전력을 아끼는 방법으로 동작
- cpufreq_ondemand → 주파수의 범위를 정해주고 부하 상황에 맞게 가변적으로 동작
P-State(active) 상태의 전원 관리
1. 스피트스텝(SpeedStep)
- 스피드 스텝 기술은 P-State를 제어하는 기술
- 인텔에서 개발한 기술
- CPU에 걸린 부하에 따라서 자동으로 클럭을 조절해주는 기술
- 배터리 소모량을 유연하게 조절하여 사용시간을 늘려주는 장점이 있지만, 클럭 조정시에 일시적으로 버벅임이 발생 가능
- SpeedStep의 주요 통제권은 OS가 가지고 있음
- 스피트스텝(SpeedStep) 작동원리
- 오피스 소프트웨어 이용하여 문서작업 등 비교적 부하가 낮게 걸리는 작업에서 CPU의 속도를 고의로 낮추어 작동
- HD급 동영상 재생 등 부하가 심하게 걸리는 작업에서는 CPU의 속도를 낮추지않는 방식으로 작동
2. 스피드 쉬프트(Speed Shift)
- 스카이레이크 마이크로 아키텍쳐를 가진 CPU 이후부터는 스피드 스텝을 하드웨어 단에 적용한 스피드 시프트 기술이 적용
- 베이스 클럭에서부터 터보 부스트 영역까지 확장된 기술
- 마이크로프로세서 안의 PCU(Power Control Unit)이라는 하드웨어가 밀리초 단위로 정해진 알고리즘에 따라 계산하면서 최적의 CPU 클럭과 전압으로 관리
- 스피드 쉬프트 기술을 이용하려면 OS에서 지원을 해야 사용 가능
- 스피드 시프트를 지원하지 않는 OS에서는 스피드 스텝으로 작동
- Speed Shift는 Speedstep과 달리 OS가 CPU 제어권을 대부분 PCU1에 넘겨 CPU의 클럭을 유동적으로 조절
- Speedstep과 비교하여 하드웨어적인 방식을 사용하기 때문에, CPU 클럭 제어 속도가 빨라졌고, 더욱 정밀한 클럭 계산이 가능해져 더 적은 에너지를 사용
- Speedstep이 20~30ms에 걸쳐 최대 클럭을 올릴 때, SpeedShift는 5~7ms만에 최대 클럭까지 도달 → 최대 50% 더 빠른 변속을 보여줌
- Speedstep과 Speed Shift는 동시에 적용 X
CPU frequency governor 이란
- CPU는 여러 주파수에서 동작이 가능하도록 설계되어 있으나, 리눅스 커널 대부분의 cpufreq 드라이버들은 CPU를 하나의 주파수로 설정
- CPU의 사용량이 많지 않으면 저속으로 많아지면 고속으로 동작할 필요가 있음
- 동적 주파수 확장을 제공하기 위해서 타겟 주파수를 드라이버에 알려줄 것이 필요가 있음
- CPU frequency governor는 CPUfreq policy내에서 무슨 주파수를 사용할 것인지 결정
- CPUfreq policy는 주파수 제한과 사용될 governor로 구성
- DB 서버에 CPUfreq policy가 활성화되어 있다면 CPU 주파수가 떨어질 때 쿼리 응답 속도가 갑자기 늘어난다던가 하는 이슈가 발생 가능
1. governor 종류
- Performance→ CPU를 최고 주파수로 설정
- Powersave→ CPU를 최저 주파수로 설정
- OnDemand→ 현재 사용량에 따라 CPU frequnecy를 설정. CPU는 주파수를 빠르게 변경할 능력이 필요
2. 현재 설정된 governors 확인
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
powersave
3. 사용가능한 설정
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
performance powersave
4. governors 변경 → /sys/devices/system/cpu/ -> cpu[n] n 수만큼 다 변경해야함
# 먼저 CPU 개수 확인
$ cat /proc/cpuinfo | grep -i "^processor"
processor : 0
processor : 1
processor : 2
processor : 3
processor : 4
processor : 5
processor : 6
processor : 7
processor : 8
processor : 9
processor : 10
processor : 11
processor : 12
processor : 13
processor : 14
processor : 15
processor : 16
processor : 17
processor : 18
processor : 19
processor : 20
processor : 21
processor : 22
processor : 23
processor : 24
processor : 25
processor : 26
processor : 27
processor : 28
processor : 29
processor : 30
processor : 31
processor : 32
processor : 33
processor : 34
processor : 35
processor : 36
processor : 37
processor : 38
processor : 39
$ echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
$ echo performance > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
$ echo performance > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor
#.... 중략....
$ echo performance > /sys/devices/system/cpu/cpu39/cpufreq/scaling_governor
'OS(운영체제) > 리눅스(Linux)' 카테고리의 다른 글
SFTP (SSH 또는 Secure File Transfer Protocol) (0) | 2022.07.23 |
---|---|
RHEL7 - intel_idle과 C/G/S/P States (0) | 2022.07.21 |
C-State → CPU 사용량이 적은 idle 상태 (0) | 2022.07.21 |
Linux 접속 로그 → btmp, wtmp, utmp, lastlog (0) | 2022.07.18 |
[cache] Write Through와 Write Back 비교 (0) | 2022.07.18 |