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.