Je l'ai écrit de manière a ce qu'il soit réutilisable par un maximum de monde, juste en éditant les quelques variables au début du script en fonction de votre machine.
Le script modifie aussi mon fichier trip_points histoire d'éviter un "critical CPU temperature reached" lorsque mon processeur est soumis a une forte activitée.
Vous pouvez retirer cette partie si vous n'en n'avez pas l'utilitée.
Je le poste en tant que journal, histoire de le conserver quelque part.
###############################################################################
# Copyright (C) 2005 Francois COJEAN
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
###############################################################################
# This script tests if a battery is plugged or not, set
# the cpufreq scaling_governor depending on the state of the battery, and
# the trip_points file to avoid the "critical temperature reached" error.
# Note : this script need to be run as root.
# Set up the different variables
# Edit all this variable to value which fit to your computer
BATTERY_NAME="BAT0"
BATTERY_ACPI_PATH="/proc/acpi/battery"
BATTERY_STATE_FILE="state"
POWERSAVE_SCALING_GOVERNOR="powersave"
CONSERVATIVE_SCALING_GOVERNOR="conservative"
CPU_FREQ_PATH="/sys/devices/system/cpu/cpu0/cpufreq"
SCALING_GOVERNOR_FILE="scaling_governor"
TEMPERATURE_ACPI_PATH="/proc/acpi/thermal_zone/THRS"
TEMPERATURE_TRIP_POINTS_FILE="trip_points"
# Becarefull, choose special values related to your processor.
# The value are organised like that :
# critical:hot:passive:active0:...:activeX
# where critical, hot, passive, active0..x is a value in Celsius for the
# corresponding trip point. x is between 0 and 9 and depends on your
# platform.
# See : http://acpi.sourceforge.net/documentation/thermal.html
TEMPERATURE_VALUE="95:0:75:0:0"
# Get the state of the battery
PRESENT="`cat $BATTERY_ACPI_PATH/$BATTERY_NAME/$BATTERY_STATE_FILE | grep present: | cut -f2 -d:`"
CHARGING_STATE="`cat $BATTERY_ACPI_PATH/$BATTERY_NAME/$BATTERY_STATE_FILE | grep "charging state:" | cut -f2 -d:`"
# Check the state of the battery
if [ $PRESENT = "yes" -a $CHARGING_STATE = "discharging" ]; then
# Set cpu_freq scaling_governor to powersave.
# This command need to be run as root.
echo "$POWERSAVE_SCALING_GOVERNOR" > $CPU_FREQ_PATH/$SCALING_GOVERNOR_FILE
echo "CPU_FREQ : $POWERSAVE_SCALING_GOVERNOR enable"
else
# Set cpu_freq scaling_governor to conservative.
# This command need to be run as root.
echo "$CONSERVATIVE_SCALING_GOVERNOR" > $CPU_FREQ_PATH/$SCALING_GOVERNOR_FILE
echo "CPU_FREQ : $CONSERVATIVE_SCALING_GOVERNOR enable"
fi
# Modification of the critical temperature value
# This command need to be run as root.
echo -n "$TEMPERATURE_VALUE" > $TEMPERATURE_ACPI_PATH/$TEMPERATURE_TRIP_POINTS_FILE
echo "ACPI : trip_points change to $TEMPERATURE_VALUE"
# upstream
Posté par BAud (site web personnel) . Évalué à 2.
tu auras peut-être la chance de pouvoir le conserver dans un cvs/svn en plus ;-) et d'en bénéficier de base lors d'une prochaine install...
[^] # Re: upstream
Posté par Francois COJEAN . Évalué à 3.
il y a des tests suplémentaires à faire avant,
genre tester si cpu_freq est en action , tester les scaling_governor disponibles etc...
Sinon, j'ai oublier d'écrire dans le journal, que vous pouvez par exemple éxécuter le script dans le fichier rc.local (ou equivalent) de votre distribution (comme ca vous avez les droits root).
Verifiez juste que votre fichier éxécutable, et accesible.
et rajoutez cette ligne dans votre rc.local :
sh /chemin_vers_le_script/nom_du_script
# pareil mais avec acpid et d'autres trucs
Posté par kolter (site web personnel, Mastodon) . Évalué à 3.
[^] # Re: pareil mais avec acpid et d'autres trucs
Posté par Francois COJEAN . Évalué à 2.
je vais y jeter un oeil :) merci .
Mais la, c'est leur d'aller en cours....:(
[^] # Re: pareil mais avec acpid et d'autres trucs
Posté par Francois COJEAN . Évalué à 1.
# ouaip...
Posté par djibb (site web personnel) . Évalué à 2.
cpufreq-set -g ondemand
ok, ca necessite d'installer cpufreq-set... mais c'est le seul qui me remt d'accrod avec mon portable (pas de bruit)
[^] # Re: ouaip...
Posté par Yaz . Évalué à 2.
echo -n "ondemand" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
[^] # Re: ouaip...
Posté par djibb (site web personnel) . Évalué à 2.
[^] # Re: ouaip...
Posté par Sylvain Sauvage . Évalué à 4.
devices/system/cpu/cpu0/cpufreq/scaling_governor = ondemand
dans /etc/sysfs.conf et ça fonctionne tout seul, dès le démarrage.
[^] # Re: ouaip...
Posté par Ludovic Gasc . Évalué à 1.
[^] # Re: ouaip...
Posté par beb . Évalué à 2.
# Une question
Posté par pwetoun . Évalué à 1.
Qu'apporte ton script à la solution d'ubuntu, que je trouve certes efficace mais j'ai 3/4 voir 1h en moins d'autonomie que sur windows sur 4H ?
J'ai peur de tester tes scripts ayant peur de casser la configuration d'ubuntu?
Merci de m'éclairer
Je sais il y'a des docs etc...Mais comme l'occasion se présente j'en profite.
[^] # Re: Une question
Posté par Francois COJEAN . Évalué à 2.
En gros, vu que ton governor est 'userspace', ca veut dire que tu ne l'a pas modifié. Il n'est modifié par aucun script du système non plus. Donc tu n'a aucune économie d'énergie, ton processeur tourne au maximum de sa capacité en permanence. (Ce qui correspond au scaling_governor "performance"). Cela explique que ta batterie se vide très vite.
Avant d'écrire ce script j'utilisait un simple :
echo "conservative" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
Comme mentionné dans des commentaires précédents.
Apres j'ai fait un constat, Lorsque je bosse sur mon laptop à la bibliotheque, j'oublie souvent dès le démarrage de mon laptop, de le passer sur le mode powersave, histoire d'avoir une autonomie maximum sur ma batterie. Du coup, le temps où j'oublie de changer le scaling_governor, bah je perds de l'autonomie inutilement. J'ai donc décider de regler mon scaling_governor, en fonction de ma batterie.
Si mon pc est sur la batterie (batterie présente) et que elle est en mode décharge, c'est à dire , que mon pc n'est pas branché au secteur, dans ce cas le script se charge de mettre dès le demarrage de mon pc en mode 'powersave'.
Sinon, il règle mon scaling_governor sur 'conservative'.
Les différents modes sont (suivant la version du noyau utilisé) :
performance : le processeur tourne à son maximum en permanence.
ondemand : La fréquence du processeur est adaptée en fonction de l'utilisation du processeur.
conservative : Même chose que 'ondemand' mais en version optimisée pour amd64. (Il me semble)
powersave : Le processeur tourne à sa fréquence minimal en permanence.
Pour plus de détails, je vous renvoie à la doc de cpu_freq.
[^] # Re: Une question
Posté par Francois COJEAN . Évalué à 2.
[^] # Re: Une question
Posté par Sylvain Sauvage . Évalué à 3.
Pour être précis : ondemand saute du min au max, conservative utilise plus les niveaux intermédiaires.
conservative est donc plus optimal pour les portables et les PDA (car plus économique pour la batterie) ou les amd64 (dont la latence du saut min<->max est plus importante : utiliser les fréq. intermédiaires serait donc moins pénalisant).
# petit fix
Posté par Francois COJEAN . Évalué à 1.
version corrigée :
#!/bin/sh
#
###############################################################################
# Copyright (C) 2005 Francois COJEAN
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
###############################################################################
# This script tests if a battery is plugged or not, set
# the cpufreq scaling_governor depending on the state of the battery, and
# the trip_points file to avoid the "critical temperature reached" error.
# Note : this script need to be run as root.
# Set up the different variables
# Edit all this variable to value which fit to your computer
BATTERY_NAME="BAT0"
BATTERY_ACPI_PATH="/proc/acpi/battery"
BATTERY_STATE_FILE="state"
POWERSAVE_SCALING_GOVERNOR="powersave"
CONSERVATIVE_SCALING_GOVERNOR="conservative"
CPU_FREQ_PATH="/sys/devices/system/cpu/cpu0/cpufreq"
SCALING_GOVERNOR_FILE="scaling_governor"
TEMPERATURE_ACPI_PATH="/proc/acpi/thermal_zone/THRS"
TEMPERATURE_TRIP_POINTS_FILE="trip_points"
# Becarefull, choose special values related to your processor.
# The value are organised like that :
# critical:hot:passive:active0:...:activeX
# where critical, hot, passive, active0..x is a value in Celsius for the
# corresponding trip point. x is between 0 and 9 and depends on your
# platform.
# See : http://acpi.sourceforge.net/documentation/thermal.html
TEMPERATURE_VALUE="95:0:75:0:0"
# Get the state of the battery
PRESENT="`cat $BATTERY_ACPI_PATH/$BATTERY_NAME/$BATTERY_STATE_FILE | grep present: | cut -f2 -d:`"
if [ $PRESENT = "yes" ]; then
CHARGING_STATE="`cat $BATTERY_ACPI_PATH/$BATTERY_NAME/$BATTERY_STATE_FILE | grep "charging state:" | cut -f2 -d:`"
else
CHARGING_STATE="empty"
fi
# Check the state of the battery
if [ $PRESENT = "yes" -a $CHARGING_STATE = "discharging" ]; then
# Set cpu_freq scaling_governor to powersave.
# This command need to be run as root.
echo "$POWERSAVE_SCALING_GOVERNOR" > $CPU_FREQ_PATH/$SCALING_GOVERNOR_FILE
echo "CPU_FREQ : $POWERSAVE_SCALING_GOVERNOR enable"
else
# Set cpu_freq scaling_governor to conservative.
# This command need to be run as root.
echo "$CONSERVATIVE_SCALING_GOVERNOR" > $CPU_FREQ_PATH/$SCALING_GOVERNOR_FILE
echo "CPU_FREQ : $CONSERVATIVE_SCALING_GOVERNOR enable"
fi
# Modification of the critical temperature value
# This command need to be run as root.
echo -n "$TEMPERATURE_VALUE" > $TEMPERATURE_ACPI_PATH/$TEMPERATURE_TRIP_POINTS_FILE
echo "ACPI : trip_points change to $TEMPERATURE_VALUE"
# cpufreqd ?
Posté par imalip . Évalué à 1.
http://cpufreqd.sourceforge.net
Un demon qui permet de definir des profils en fonction de la batterie, de l'alim, de la temperature, de la charge CPU, etc... pour choisir son governor, les frequences autorisees, etc...
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.