Administrare server open source

Platforma de hosting cu software liber, gratuit, open source.

Kernelul Linux, prin CPUfreq, ne permite sa modificam frecventa de lucru a procesorului in timp real, fara sa fie nevoie un restart. De ce am face asta? Principalul motiv este consumul de curent. In functie de modul in care folosim un sistem si de perioada de lucru putem scadea consumul de curent ca sa corespunda intereselor.

Sa luam ca situatie doua cazuri care sunt, oarecum, in extreme. Daca detinem un laptop iar laptopul ruleaza de obicei pe acumulator ar fi de preferat ca procesorul sa consume cat mai putin curent pentru a creste autonomia. In acelasi timp putem lua in calcul un server al carui procesor trebuie sa ruleze la frecventa maxima in timpul orelor de varf – desi noaptea, cand incarcarea serverului scade, ar fi de preferat ca serverul sa treaca pe o frecventa mai joasa pentru ca un consum mai mic cu 20kW/h se simte in bugetul datacenterului cand e vorba de zeci sau sute de servere.

Pentru a optimiza consumul de curent, kernelul foloseste cinci „guvernatoare” (CPUfreq governors): performance, powersave, userspace, ondemand si conservative. Fiecare guvernator este specific unei categorii largi de utilizare dar exista avantajul ca putem schimba guvernatorul cu comenzi simple, fara sa restartam sistemul. Inainte sa vedem cum le folosim, sa vedem la ce sunt bune.

  1. performance – frecventa procesorului este fixa si are valoarea maxima acceptata de procesor. Este varianta recomandata pentru serverele solicitate, unde latenta trebuie sa fie minima.
  2. powersave – frecventa procesorului este fixa si are valoarea minima acceptata de procesor. Este varianta recomandata pe servere foarte slab solicitate, cu timpi de asteptare (idle) mari sau pentru servere care sunt folosite intens doar in anumite perioade ale zilei, cand se poate utiliza guvernatorul performance, iar in timpul noptii solicitarea este minima.
  3. userspace – frecventa procesorului este variabila si ofera flexibilitate. Este varianta preferata pentru control manual sau cu ajutorul unui daemon.
  4. ondemand – frecventa procesorului este variabila si creste sau scade in functie de incarcarea sistemului. Este o varianta adaptativa, nu consuma mai mult curent decat e necesar, dar are ca dezavantaj latenta care apare la schimbarea frecventei. Este potrivita pentru servere care nu sunt foarte solicitate.
  5. conservative – frecventa procesorului este variabila, la fel ca in cazul guvernatorului ondemand, cu diferenta ca trecerea de la o frecventa la alta se face treptat. Consumul de curent este mai bine optimizat, dar si latenta e mai mare motiv pentru care este varianta potrivita pentru statii de lucru sau laptopuri care sunt conectate la reteaua de curent, dar nu si pentru servere.

Fiecare distributie are propria metoda de a utiliza CPUfreq. In RedHat/CentOS putem folosi comanda cpupower. Ca sa vedem setarile actuale o folosim cu parametrul frequency-info:

[email protected] [~]# cpupower frequency-info
analyzing CPU 0:
  driver: acpi-cpufreq
  CPUs which run at the same hardware frequency: 0 1 2 3 4 5 6 7
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 10.0 us.
  hardware limits: 1.60 GHz - 3.30 GHz
  available frequency steps: 3.30 GHz, 3.30 GHz, 3.10 GHz, 2.90 GHz, 2.70 GHz, 2.50 GHz, 2.30 GHz, 2.10 GHz, 1.90 GHz, 1.70 GHz, 1.60 GHz
  available cpufreq governors: powersave, ondemand, userspace, performance
  current policy: frequency should be within 1.60 GHz and 3.30 GHz.
                  The governor "performance" may decide which speed to use
                  within this range.
  current CPU frequency is 3.30 GHz (asserted by call to hardware).
  boost state support:
    Supported: yes
    Active: yes
    3400 MHz max turbo 4 active cores
    3500 MHz max turbo 3 active cores
    3600 MHz max turbo 2 active cores
    3700 MHz max turbo 1 active cores
[email protected] [~]#

Pe linia current policy putem vedea ca guvernatorul actual este performance. De asemenea putem vedea pe linia available cpufreq governors ca variantele suportate sunt powersave, ondemand, userspace si performance. Ca sa il schimbam, putem folosi urmatoarea comanda:

[email protected] [~]#  cpupower frequency-set --governor ondemand
Setting cpu: 0
Setting cpu: 1
Setting cpu: 2
Setting cpu: 3
Setting cpu: 4
Setting cpu: 5
Setting cpu: 6
Setting cpu: 7
[email protected] [~]# cpupower frequency-info | grep -A2 policy
  current policy: frequency should be within 1.60 GHz and 3.30 GHz.
                  The governor "ondemand" may decide which speed to use
                  within this range.
[email protected] [~]#

Ca sa nu folosim utilitarul cpupower putem citi sau modifica setarile in folderul „/sys/devices/system/cpu/cpu0/cpufreq„, cu mentiunea ca in cazul modificarilor trebuie sa rulam comanda pentru fiecare core, inlocuind cpu0 cu cpu1, cpu2 etc.

In folderul /sys/devices/system/cpu/cpu0/cpufreq avem mai multe fisiere, mai utile fiind urmatoarele:

  • cpuinfo_cur_freq – contine frecventa actuala a procesorului.
  • cpuinfo_max_freq – contine frecventa maxima care poate fi setata.
  • cpuinfo_min_freq – contine frecventa minima care poate fi setata.
  • scaling_available_governors – lista guvernatoarelor disponibile.
  • scaling_setspeed – contine frecventa actuala, si permite modificarea frecventei actuale redirectand outputul comenzii echo.

Pornind de la cele cinci variante, ne putem optimiza consumul de curent in functie de necesitati. Trebuie avut grija sa nu scadem inutil frecventa procesorului pe servere pentru ca poate creste incarcarea, si sa nu crestem prea mult frecventa pe statii de lucru si laptopuri pentru ca se consuma inutil energia. Pentru servere o situatie optima ar fi utilizarea guvernatoarelor performance si powersave, activate la ore fixe in functie de intervalul orar in care sunt mai folosite.

Linux

2 Responses so far.

  1. donic says:

    Am mai gasit pe un tutorial si $ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies ca sa vezi ce frecvente iti suporta procesorul. Apoi iti setezi tu manual limitele

  2. sex shop says:

    m-am chinuit vreo 2 ore sa fac treaba asta:)