본문 바로가기
리눅스

CPU 가버너 자동 변경

by 다움위키 2024. 8. 25.

원문 보기: https://dawoum.duckdns.org/wiki/Change_CPU_governor_automatically

 

X에서 Wayland로 옮기고 나서 많은 문제점들이 발생했지만 대체로 해결책이 있었고, 남은 것 중에서 가장 큰 문제는 bottles에서 설치한 와인 관련 게임에서 시스템을 사용할 수 없도록 하거나, Wayland에서 튕겨서 다시 로그인을 해야 하는 것입니다. 이 문제는 원인을 파악하기 쉽지 않아서 해결책을 찾기도 쉽지 않습니다.

이를 해결하기 위해, 와인을 개발자가 제공하는 최신 버전으로 바꾸었고, 증상이 조금 완화되는 것처럼 보였지만 여전히 문제는 해결되지 않았습니다.

다른 방향으로, 게임모드를 실행해서 시스템 자원을 조절해 보기로 했습니다.

여기서, cpu 가버너를 조절할 필요가 있는데, 게임모드 설정으로는 가버너가 자동으로 변경되지 않습니다. 따라서 시스템의 상황이나 요구에 따라 가버너를 자동으로 변경해 줄 도구가 필요합니다. 아래 설정에서 예제가 있습니다:

아래에 소개될 도구의 저자도 다른 이유지만 같은 목적으로 해당 도구를 만들었습니다:

  • reaching critical system hardware temperatures;
  • presence of user defined processes;
  • looking for cpu threshold in percentages.

Installation

대부분의 기본 설정에서 이 프로그램은 한 코어의 25% 내외를 사용하기 때문에, 대부분을 제외하고 bottles-cli와 sensors를 남기고 나머지를 지우니 1~3% 정도를 사용합니다.

데비안에서 패키지가 제공되지 않기 때문에, 직접 소스를 받아서 설치할 수 있습니다:

  • git clone https://github.com/amedeos/changegovernor
  • cd changegovernor
  • sudo cp changegovernor.py /usr/local/sbin/
  • sudo chmod +x /usr/local/sbin/changegovernor.py
  • sudo cp changegovernor.json /usr/local/etc/
  • sudo cp changegovernor.service /etc/systemd/system/
  • sudo nano /etc/systemd/system/changegovernor.service

제공하는 service 파일은 시스템 디렉토리에 설치하는 경우에 해당하므로, 설치 디렉토리를 변경할 경우에는 service 파일을 먼저 수정해야 합니다:

  • sudo systemctl daemon-reload
  • sudo systemctl enable changegovernor.service
  • sudo systemctl start changegovernor.service
  • sudo systemctl status changegovernor.service

오류가 있는지 확인하셔서 대처하시기 바랍니다.

Configure kernel (optional)

보통 배포판에서 제공하는 커널은 이 설정을 포함할 것으로 기대되고, 자신이 스스로 커널 컴파일을 하고 있다면, 다음 설정을 확인하십시오:

Power management and ACPI options --->
    CPU Frequency scaling --->
        -*- CPU Frequency scaling
        [*]   CPU frequency transition statistics
              Default CPUFreq governor (powersave)  --->
        <*>   'performance' governor
        -*-   'powersave' governor
        <*>   'userspace' governor for userspace frequency scaling
        <*>   'ondemand' cpufreq policy governor
        <*>   'conservative' cpufreq governor
        [*]   'schedutil' cpufreq policy governor

간혹은 Default CPUFreq governor가 menuconfig에서 변경되지 않지만, 커널 설정 .config 파일을 직접 수정할 수 있습니다.

Configurations

Process configurations

특정 프로세스 이름에 대해 performance 가버너로 전환하기를 원하면, changegnovernor.json 파일을 수정할 수 있습니다. 해당 파일에서 "process" 블럭 내에, 예를 들어 steam 프로세스가 있으면, performance 가버너로 전환합니다.

        {
            "name": "steam",
            "state": "present",
            "process_argument": "",
            "extra_commands": [],
            "governor": "performance",
            "energyPerformance": "performance"
        },

보통, bottles에서 설치한 게임은 bottles-cli에서 실행되므로, 이 문단을 복사해서 붙여넣고, steam->bottles-cli로 바꿈으로써 가버너를 번경할 수 있습니다.

Hardware Temperature configurations

특정 하드웨어, 예를 들어, cpu의 온도를 확인해서 치명적 온도가 되기 전에 가버너를 powersave로 바꿀 수 있습니다. 먼저, sensors를 실행해서 하드웨어 제조 업체에서 제공하는 정보를 확인합니다.

프로그램의 버전마다 제공하는 내용이 다르므로, 다른 프로그램, 예를 들어, GtkStressTesting 등을 사용해서 중복으로 확인할 수 있습니다. 그런-다음 k10temp-pci-00c3와 같은 것이 보이면, sensors 블럭 내에, 다음과 같이 설정을 추가할 수 있습니다:

        {
            "name": "k10temp",
            "state": "present",
            "label": "Tdie",
            "critical": "70.0",
            "percent_from_critical": "5.0",
            "extra_commands": [],
            "governor": "powersave",
            "energyPerformance": "power"
        },

위 예제는 임계 온도를 70도로 두고, 95%에 이르면 powersave 모드로 바꿉니다.

Cpu threshold configurations

이제, 시스템 부하에 따라, 가버너를 변경하는 설정을 추가할 수 있습니다. 다음은 시스템 로드가 70% 이상일 때 performance 가버너로 전환합니다:

        {
            "name": "seventy",
            "min": "70",
            "max": "100",
            "state": "present",
            "extra_commands": [],
            "governor": "performance",
            "energyPerformance": "performance"
        },

External Resource