Como devo configurar a freqüência da cpu ao reiniciar a partir da suspensão do Ubuntu?

0

Problema:

No Ubuntu 16.04, executo meu shell script para reduzir a freqüência de cpu para 1600000, e seu governor para ser "userspace":

sudo /home/t/program_files/hardware/cpu/cpuFreq/changeCpuFreq.sh 1600000

que grava 1600000 e "userspace" para /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed e /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor , respectivamente.

No entanto, depois da suspensão e do meu Ubuntu, a frequência da cpu está de volta para 2667000, porque /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed é reescrito por algum programa desconhecido para 2667000. Eu gostaria que a frequência da cpu fosse mantida em 1600000 após a retomada suspensão.

Solução provisória:

Eu tentei uma solução do link (veja abaixo) e adicionei um arquivo /etc/pm/sleep.d/20_cpu_freq , cujo conteúdo é:

#!/bin/sh
# upon resume from suspension, scale down the cpu freq
case "$1" in
   thaw|resume)
     /home/t/program_files/hardware/cpu/cpuFreq/changeCpuFreq.sh 1600000
     ;;
esac

e torná-lo executável em chmod a+x * , para que sua permissão seja -rwxrwxr-x . Mas não diminui a frequência da cpu para 1600000 após a retomada da suspensão.

O /etc/pm/sleep.d/20_cpu_freq é realmente executado ao retomar a suspensão? Como posso verificar isso?

/etc/pm/sleep.d/20_cpu_freq é substituído por algum outro arquivo de configuração?

Não há outro script em /etc/pm/sleep.d/ que lide com a frequência da CPU.

Existe um script padrão do sistema /usr/lib/pm-utils/sleep.d/94cpufreq , que lida com a freqüência da CPU (veja abaixo seu conteúdo). Alguém sabe o que o roteiro faz? Substitui ou é substituído por /etc/pm/sleep.d/20_cpu_freq ? (Observe que, se eu renomear /etc/pm/sleep.d/20_cpu_freq para /etc/pm/sleep.d/95cpufreq ou /etc/pm/sleep.d/93cpufreq , para alterar a ordem entre ele e /usr/lib/pm-utils/sleep.d/94cpufreq , 'ambos ainda não reduzirão a frequência da cpu para 1600000 ao retomar da suspensão.)

Em /usr/lib/pm-utils/sleep.d/94cpufreq , também não funciona Se eu adicionar /home/t/program_files/hardware/cpu/cpuFreq/changeCpuFreq.sh 1600000 após thaw_cpufreq no caso resume|thaw) .

Onde devo correr /home/t/program_files/hardware/cpu/cpuFreq/changeCpuFreq.sh 1600000 , se não em /etc/pm/sleep.d/20_cpu_freq ?

Conteúdo de /usr/lib/pm-utils/sleep.d/94cpufreq

#!/bin/sh                                                                                                                                                                          
# Ensure cpu governor is set to something sane.                                                                                                                                    
# TODO: Which of the cpu governors is still insane?  File bugs against                                                                                                             
#       those that are.                                                                                                                                                            

. "${PM_FUNCTIONS}"

[ -d /sys/devices/system/cpu/ ] || exit $NA

hibernate_cpufreq()
{
  ( cd /sys/devices/system/cpu/
  for x in cpu[0-9]*; do
    # if cpufreq is a symlink, it is handled by another cpu. Skip.                                                                                                                 
    [ -L "$x/cpufreq" ] && continue
    gov="$x/cpufreq/scaling_governor"
    # if we do not have a scaling_governor file, skip.                                                                                                                             
    [ -f "$gov" ] || continue
    # if our temporary governor is not available, skip.                                                                                                                            
    grep -q "$TEMPORARY_CPUFREQ_GOVERNOR" \
            "$x/cpufreq/scaling_available_governors" || continue
    savestate "${x}_governor" < "$gov"
    echo "$TEMPORARY_CPUFREQ_GOVERNOR" > "$gov"
  done )
}

thaw_cpufreq()
{
  ( cd /sys/devices/system/cpu/
  for x in cpu[0-9]*/cpufreq/scaling_governor ; do
    [ -f "$x" ] || continue
    state_exists "${x%%/*}_governor" || continue
    restorestate "${x%%/*}_governor" > "$x"
  done )
}

case "$1" in
  suspend|hibernate)
    hibernate_cpufreq
    ;;
  resume|thaw)
    thaw_cpufreq
    ;;
  *) exit $NA
    ;;
esac

Copiado do link

From manpage pm-action(8):

/etc/pm/sleep.d, /usr/lib/pm-utils/sleep.d
     Programs in these directories (called hooks) are combined
     and executed in C sort order before suspend and hibernate
     with as argument ´suspend´ or ´hibernate´. Afterwards they
     are called in reverse order with argument ´resume´ and
     ´thaw´ respectively. **If both directories contain a similar
     named file, the one in /etc/pm/sleep.d will get preference.**
     It is possible to disable a hook in the distribution
     directory by putting a non-executable file in
     /etc/pm/sleep.d, or by adding it to the HOOK_BLACKLIST
     configuration variable.

Thus you could simply put a shell-script like this:

#!/bin/bash

case "$1" in
suspend|hibernate)
    actions to
    take
    on suspend
    or hibernate
    ;;
resume|thaw)
    other actions
    to trigger
    on resume
    ;;
esac

into e.g. 99-myhooks.sh and make it executable.

BTW, you can kill stale SSH-connections by entering Enter~.Enter in the SSH session.

    
por Tim 03.04.2018 / 00:21

1 resposta

0

Acabei de encontrar o motivo (consulte Por que existem essas diferenças entre suspensão pelos DEs e por pm-utils? | Unix & Linux Stack Exchange ), que também leva a algumas novas perguntas:

I found some differences between running pm-suspend and clicking "Suspend" menu item in LXDE on Ubuntu 16.04

  1. In both cases I can wake up Ubuntu by pushing the power button on my laptop, but in the way by "Suspend" menu item in LXDE, I have to provide my password to unlock the screen, while in the way by pm-suspend (and bypm-hibernate or pm-suspend-hybrid), I don't need to.

  2. According to this question: How do I run commands on suspend/return from suspend? | Super User, scripts under /usr/lib/pm-utils/sleep.d/ and /etc/pm/sleep.d/ are supposed to be executed upon suspension/hibernation and resuming/thawing. But it is true only when I run pm-suspend (orpm-hibernate or pm-suspend-hybrid), and false when I click "Suspend" menu item in LXDE.

I used to use Gnome, and I remember it was the same as in LXDE, except Gnome might have hibernate option besides suspend.

I wonder why there are the differences between suspension by the DEs and by pm-utils?

Can pm-suspend be used in a way so that resume requires password to unlock the screen?

Can "suspend" menu item in LXDE be used in a way so that the scripts in /usr/lib/pm-utils/sleep.d/ and /etc/pm/sleep.d/ are executed upon suspension/hibernation and resuming/thawing?

Thanks.

    
por Tim 03.04.2018 / 07:20