[![logo](https://www.hongsnet.net/images/logo.gif)](https://www.hongsnet.net)

# Overview

Intel CPU 기반의 전력관리 기술은 다음과 같이 두 가지가 존재 한다.

*  **C-State** (C1E, Idle Status)
*  **P-State** (SpeedStep, SpeedShift, Active Status)

## SpeedStep

CPU의 전력 소모에 따라 자동으로 Clock을 조절해주는 기술이며, **주요 통제권은 OS**가 가지고 있다.

## SpeedShift

Intel을 기준으로 `Skylake` 아키텍처 CPU 이후 부터 SpeedStep을 `Hareware 단에 적용한 기술` 이다. CPU Clock의 제어 속도가 SpeedStep 보다 최대 50% 이상의 빠른 변속을 보여주는 것으로 알려져 있다. [SpeedShift 성능 테스트 참고 URL](https://www.anandtech.com/show/9751/examining-intel-skylake-speed-shift-more-responsive-processors) 

다음과 같이 OS에서 활성화(`HWP enabled`)를 확인할 수 있다.

```bash
# dmesg |grep pstate
[    2.578708] intel_pstate: Intel P-state driver initializing
[    2.579763] intel_pstate: HWP enabled
```

# 참고: intel_pstate 모듈 비활성

CPU 전략관리 모듈을 비활성화 할 경우 성능에 어떤 영향이 발생되는지를 검증

>  결과적으로 CPU 성능이 저하되기 때문에 기본 설정(활성화)이 권장


* [ STEP 1 ] GRUB 부트로더에 intel_pstate 모듈의 비활성(`intel_pstate=disable`) 설정을 진행한다.

```bash
# cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=retpoline rhgb quiet intel_pstate=disable"
GRUB_DISABLE_RECOVERY="true"
```

* [ STEP 2 ] intel_pstate=disable 설정을 커널 이미지에 적용하고, 리부팅을 진행

```bash
# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-1160.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1160.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-bf7b5f2da6be4f7fb70b35e636a5ccf1
Found initrd image: /boot/initramfs-0-rescue-bf7b5f2da6be4f7fb70b35e636a5ccf1.img
done

# sync; sync; init 6
```

* [ STEP 3 ] CPU Clock의 상태를 확인한다.

```bash
# grep -E '^model name|^cpu MHz' /proc/cpuinfo
model name      : Intel(R) Xeon(R) Silver 4110 CPU @ 2.10GHz
cpu MHz         : 2100.000
model name      : Intel(R) Xeon(R) Silver 4110 CPU @ 2.10GHz
cpu MHz         : 2100.000
model name      : Intel(R) Xeon(R) Silver 4110 CPU @ 2.10GHz
cpu MHz         : 2100.000
model name      : Intel(R) Xeon(R) Silver 4110 CPU @ 2.10GHz
cpu MHz         : 2100.000
...중략
```

> 다음과 같이 Clock을 더 상승시킬 수 있는 상태(2.1 -> 2.4GHz)에서 CPU Clock이 고정되었기 때문에 성능이 저하된 것으로 판단 된다.

```bash
# cpupower frequency-info
analyzing CPU 0:
  driver: intel_pstate
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency:  Cannot determine or is not supported.
  hardware limits: 800 MHz - 3.00 GHz
  available cpufreq governors: performance powersave
  current policy: frequency should be within 800 MHz and 3.00 GHz.
                  The governor "performance" may decide which speed to use
                  within this range.
  current CPU frequency: 2.40 GHz (asserted by call to hardware)
  boost state support:
    Supported: yes
    Active: yes
```

또한 tuned 프로파일의 경우도 변동이 없는 것을 확인할 수 있다.

```bash
# tuned-adm active
Current active profile: throughput-performance
```

