Tips en Trucs 2020

Intel Turbo Boost

Computers moeten tegenwoordig snel, zuinig en tegelijk stil zijn. Computersystemen waarbij de processor op volle snelheid werkt, verbruiken veel en produceren veel warmte. Deze warmte wordt door luidruchtige ventilators afgevoerd. Daarenboven zorgen hoge temperaturen voor een kortere levensduur van zowel de ventilators als de elektronica.

Recente computers bevatte processors met een Turbo Boost, waarbij de processor tot het uiterste wordt gedreven om een taak zo snel mogelijk af te handelen. Indien dit niet te lang duurt, loopt de temperatuur niet op. Maar na een tijdje loopt de temperatuur zo hoog op dat de computer een luidruchtige bak wordt. Bij elke generatie processors lijkt me dit erger en erger te worden en doet me denken aan de tijd toen we processors overklokten. Ook bij het overklokken liep de temperatuur hoog op, terwijl de snelheidswinst bijna niet merkbaar was.

Computers met Turbo Boost processors worden standaard geleverd met een ingeschakelde Turbo Boost. Wie geluk heeft kan Turbo Boost uit/inschakelen in de UEFI (BIOS), maar meestal is deze instelling niet aanwezig. Maar je kunt gelukkig wel Turbo Boost uitschakelen via het besturingssysteem.

Intel Turbo Boost onderzoeken

Turbo Boost maakt een CPU sneller door zijn kloksnelheid flink op te trekken. De volgende opdracht toont ons welke eigenschappen de processor gebruikt op gebied van energieverbruik en kloksnelheid:

dany@pindabackup:~> sudo cpupower frequency-info
[sudo] wachtwoord voor root: 
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 - 4.20 GHz
  available cpufreq governors: performance powersave
  current policy: frequency should be within 800 MHz and 4.20 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.
  current CPU frequency: Unable to call hardware
  current CPU frequency: 1.76 GHz (asserted by call to kernel)
  boost state support:
    Supported: yes
    Active: yes

Uit de informatie blijkt dat de processor twee modes kent, waarbij performance focust op snelheid en powersave op lager energieverbruik. In powersave mode mag de kloksnelheid variëren tussen 800 MHz (traag en zuinig) en 4200 Mhz (snel en kwistig met energie). Tijdens lichte opdrachten werkt de processor dan traag en zuinig, maar bij zware taken sneller, energiekwistig en wordt het systeem heet en luidruchtig. Op het einde staat dat de processor Turbo Boost ondersteunt en actief is.

Turbo Boost bij Intel processors is actief als de waarde van de instelling no_turbo 0 (false):

dany@pindabackup:~> cat /sys/devices/system/cpu/intel_pstate/no_turbo
0

Om de kloksnelheid van de verschillende processor-cores op te vragen, gebruik je de opdracht:

dany@pindabackup:~> grep "cpu MHz" /proc/cpuinfo
cpu MHz         : 4073.490
cpu MHz         : 4074.737
cpu MHz         : 4099.022
cpu MHz         : 4096.351
cpu MHz         : 4008.995
cpu MHz         : 4098.995
cpu MHz         : 4091.672
cpu MHz         : 4026.837

Aan de hoge kloksnelheden merk je dat deze processor flink bezig is en het niet lang zal duren voor de ventilators een hels lawaai zullen produceren in een poging de ontwikkelde warmte af te voeren. Een bekende meetmethode om de verwerkingssnelheid van een processor te testen is de in 7-Zip ingebouwde benchmark te gebruiken:

dany@pindabackup:~> 7zr b

7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=nl_NL.UTF-8,Utf16=on,HugeFiles=on,64 bits,8 CPUs Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz (906E9),ASM,AES-NI)

Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz (906E9)
CPU Freq:  4141  4173  4173  4188  4184  4184  4172  4185  4184

RAM size:   15904 MB,  # CPU hardware threads:   8
RAM usage:   1765 MB,  # Benchmark threads:      8

                       Compressing  |                  Decompressing
Dict     Speed Usage    R/U Rating  |      Speed Usage    R/U Rating
         KiB/s     %   MIPS   MIPS  |      KiB/s     %   MIPS   MIPS

22:      24982   624   3892  24303  |     267913   799   2859  22852
23:      27320   703   3962  27837  |     264653   799   2867  22902
24:      24153   625   4158  25970  |     261853   799   2876  22982
25:      25479   674   4318  29092  |     253088   778   2895  22524
----------------------------------  | ------------------------------
Avr:             656   4083  26800  |              794   2874  22815
Tot:             725   3478  24808

Uit deze gegevens blijkt de processor die normaal op 3600 MHz werkt op Turbo Boost overgeschakeld is (ca. 4100 MHz).

Zonder Turbo Boost

Turbo Boost kan je met de volgende opdracht uitschakelen:

dany@pindabackup:~> sudo x86_energy_perf_policy --turbo-enable 0
[sudo] wachtwoord voor root:

Hoewel geen nieuws, goed nieuws is, testen we dit met de volgende opdrachten:

dany@pindabackup:~> cat /sys/devices/system/cpu/intel_pstate/no_turbo
1
dany@pindabackup:~> sudo 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 - 4.20 GHz
  available cpufreq governors: performance powersave
  current policy: frequency should be within 800 MHz and 4.20 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.
  current CPU frequency: Unable to call hardware
  current CPU frequency: 2.77 GHz (asserted by call to kernel)
  boost state support:
    Supported: no
    Active: no

En de gevolgen op de 7-zip benchmark:

dany@pindabackup:~> 7zr b

7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=nl_NL.UTF-8,Utf16=on,HugeFiles=on,64 bits,8 CPUs Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz (906E9),ASM,AES-NI)

Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz (906E9)
CPU Freq:  3589  3589  3589  3589  3589  3589  3589  3589  3589

RAM size:   15904 MB,  # CPU hardware threads:   8
RAM usage:   1765 MB,  # Benchmark threads:      8

                       Compressing  |                  Decompressing
Dict     Speed Usage    R/U Rating  |      Speed Usage    R/U Rating
         KiB/s     %   MIPS   MIPS  |      KiB/s     %   MIPS   MIPS

22:      25076   673   3623  24394  |     241426   799   2578  20593
23:      22109   610   3691  22527  |     238952   799   2588  20678
24:      24685   693   3832  26542  |     236361   799   2596  20745
25:      24532   699   4010  28011  |     233899   799   2604  20816
----------------------------------  | ------------------------------
Avr:             669   3789  25369  |              799   2592  20708
Tot:             734   3190  23038

Merk op dat de kloksnelheid van alle cores onder de 3600 MHz blijft. Daarbij valt ook meteen op dat ondanks de 600 Mhz hogere kloksnelheid bij Turbo Boost de snelheidswinst verwaarloosbaar klein is. Ook als je dagelijks werkt met de computer merkt je niet dat de processor lagere kloksnelheden gebruikt, ook niet bij het gamen. De werksnelheid van een computersysteem hangt af van veel onderdelen en factoren. Eén vertragend onderdeel kan de ganse boel ophouden, maar ook één onderdeel versnellen maakt van een systeem geen snelheidsmonster.

Wel wordt onze processor nu niet meer extreem heet en verbruikt hij merkbaar minder, het systeem wordt zo minder luidruchtig en zuiniger.

Standaard zonder Turbo Boost werken

Bij elke systeemherstart wordt Turbo Boost terug actief. Dit kan je voorkomen door bij het starten van het systeem Turbo Boost via een systemd service uit te zetten. Maak daarvoor als systeembeheerder (root) met uw favoriete teksteditor de service aan:

dany@pindabackup:~> sudo nano /etc/systemd/system/no-turbo-boost.service
[sudo] wachtwoord voor root:

Met de volgende inhoud:

[Unit]
Description=Power Mode Settings
After=acpid.socket
After=syslog.service

[Service]
User=root
Type=simple
ExecStart=/usr/bin/x86_energy_perf_policy --turbo-enable 0
TimeoutSec=30
StartLimitInterval=350

[Install]
WantedBy=multi-user.target

De service sla je in nano op met Ctrl+s en sluit je af met Ctrl+x.

We testen de nieuwe service door eerst Turbo Boost terug in te schakelen:

dany@pindabackup:~> sudo x86_energy_perf_policy --turbo-enable 1
[sudo] wachtwoord voor root:
dany@pindabackup:~> sudo 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 - 4.20 GHz
  available cpufreq governors: performance powersave
  current policy: frequency should be within 800 MHz and 4.20 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.
  current CPU frequency: Unable to call hardware
  current CPU frequency: 3.66 GHz (asserted by call to kernel)
  boost state support:
    Supported: yes
    Active: yes

De Turbo Boost service te testen door deze manueel te starten:

dany@pindabackup:~> sudo systemctl start no-turbo-boost.service
dany@pindabackup:~> sudo 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 - 4.20 GHz
  available cpufreq governors: performance powersave
  current policy: frequency should be within 800 MHz and 4.20 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.
  current CPU frequency: Unable to call hardware
  current CPU frequency: 3.10 GHz (asserted by call to kernel)
  boost state support:
    Supported: no
    Active: no

Nu Turbo Boost met deze service kan uitgeschakeld worden kan je deze automatisch bij elke systeemstart laten uitvoeren, met de opdracht:

dany@pindabackup:~> sudo systemctl enable no-turbo-boost.service
Created symlink /etc/systemd/system/multi-user.target.wants/no-turbo-boost.service → /etc/systemd/system/no-turbo-boost.service.

Je kunt het automatisch starten van deze service terug uitschakelen, hoewel ik daar geen zinnige reden voor kan bedenken, met de opdracht:

dany@pindabackup:~> sudo systemctl disable no-turbo-boost.service
Removed /etc/systemd/system/multi-user.target.wants/no-turbo-boost.service.

Meer informatie

Meer informatie kan je onder andere vinden op de CPU frequency scaling webpagina van Arch Linux.

Arch Linux Turbo Boost