Giesi35
Anmeldungsdatum: 30. Januar 2011
Beiträge: 164
|
Hallo liebe Gemeinde, ich habe ein kleines Energiespar-Skript geschrieben (für (Sub-)Notebooks, Netbooks) und würde gerne wissen, welche Komponente man noch hinzufügen könnte um vllt. noch ein paar Elektronen die Sekunde sparen zu können. Nach einigen Tests dieses Skripts kann man im Vergleich biszu 25% sparen. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 | # Energiesparscript
# Tipps nach http://www.lesswatts.org
#!/bin/bash
echo "Starte Energieoptimierung"
# Flushzeit erhöhen
echo 1500 | sudo tee /proc/sys/vm/dirty_writeback_centisecs
# Energiesparfunktion (WLAN)
echo min_power | sudo tee /sys/class/scsi_host/host0/link_power_management_policy
# Watchdog deaktivieren
echo 0 | sudo tee /proc/sys/kernel/nmi_watchdog
# Sound (High Definition Audio)
echo 10 | sudo tee /sys/module/snd_hda_intel/parameters/power_save
# Multicore-Stromsparen aktivieren
echo 1 | sudo tee /sys/devices/system/cpu/sched_mc_power_savings
# Dateisystem
sudo mount -o remount,nodiratime /
# CD/DVD-ROM Polling deaktivieren
# Ggf. Laufwerk ändern
# sudo hal-disable-polling --enable-polling --device /dev/sr0 (Zum Aktivieren)
sudo hal-disable-polling --device /dev/sr0
# USB-Autosuspend
for i in /sys/bus/usb/devices/*/power/autosuspend; do echo 1 | sudo tee $i; done
# Festplatte nach 2 Minuten in Energiesparmodus setzen
# Je kleiner -B desto aggresiver der Energiesparmodus
sudo hdparm -B 50 -S 24 /dev/sda
echo "Fertig"
exit 0
|
|
b.q.wemer
Anmeldungsdatum: 14. August 2007
Beiträge: 11
|
Hi, der offizielle Weg, diese Funktionen einzubauen, ist pm-utils. Jede Funktion kann mit sog. hooks gesteuert werden. Es gibt auch Projekte, die bereits sinnvolle "hooks" zusammengetragen haben. Siehe: http://www.devheads.net/linux/ubuntu/development/call-testing-pm-utils-powersave-policy.htm-0
https://launchpad.net/~chasedouglas/+archive/powersave Viele Grüße
|
Giesi35
(Themenstarter)
Anmeldungsdatum: 30. Januar 2011
Beiträge: 164
|
Ich habs mir gerade durchgelesen (Wiki + Link). Ich hatte nie geplant, dass irgendwo einzubauen. Den das Skript kann man einfach per Shell aufrufen und das wars. Man kann natürlich gerne herumexperimentieren und diese in seine pm-utils-Skripte eintragen. Hier war es nur geplant: Aufruf, fertig (Gut geeignet für die Energieverwaltung, wenn das Netzkabel getrennt ist.)
|
linrunner
Anmeldungsdatum: 7. August 2007
Beiträge: 3272
|
Hallo Giesi, hier meine Anmerkungen zu deinem Skript:
echo 1500 | sudo tee /proc/sys/vm/dirty_writeback_centisecs
Diese Funktion wird in einer Standardinstallation bereits vom Skript /usr/lib/pm-utils/power.d/laptop-mode (Paket pm-utils) abgedeckt.
# Energiesparfunktion (WLAN)
echo min_power | sudo tee /sys/class/scsi_host/host0/link_power_management_policy
Hier geht es nicht um WLAN, sondern um den SATA-Controller. Deine Implementierung ist nicht ganz vollständig, da ein Notebook meist mehrere SATA-Links hat (host0, host1, host2, ...). Zudem in der Standardinstallation bereits vom Skript /usr/lib/pm-utils/power.d/sata-alpm abgedeckt.
# Watchdog deaktivieren
echo 0 | sudo tee /proc/sys/kernel/nmi_watchdog
Interessant, das kannte ich noch nicht.
# Sound (High Definition Audio)
echo 10 | sudo tee /sys/module/snd_hda_intel/parameters/power_save
In der Standardinstallation bereits vom Skript /usr/lib/pm-utils/power.d/intel-audio-powersave abgedeckt.
# Multicore-Stromsparen aktivieren
echo 1 | sudo tee /sys/devices/system/cpu/sched_mc_power_savings
In der Standardinstallation bereits vom Skript /usr/lib/pm-utils/power.d/sched-powersave abgedeckt.
# Dateisystem
sudo mount -o remount,nodiratime /
Kann man so machen, besser aber als Mountoption noatime in /etc/fstab.
# CD/DVD-ROM Polling deaktivieren
# sudo hal-disable-polling --enable-polling --device /dev/sr0 (Zum Aktivieren)
sudo hal-disable-polling --device /dev/sr0
Wird seit Ubuntu 10.04 nicht mehr benötigt, da HAL entfallen ist.
# USB-Autosuspend
for i in /sys/bus/usb/devices/*/power/autosuspend; do echo 1 | sudo tee $i; done
Hier dürften deine 25% herkommen, denn die Standardinstallation hat hierfür kein Skript. Problematisch ist, daß deine Implementierung auch Eingabegeräte in den Autosuspend-Modus versetzt. Viele Mäuse z.B. schlafen damit ein und brauchen bei der nächsten Bewegung unangenehm lange (oder einen Klick) zum Aufwachen.
# Festplatte nach 2 Minuten in Energiesparmodus setzen
# Je kleiner -B desto aggresiver der Energiesparmodus
sudo hdparm -B 50 -S 24 /dev/sda
Deine Einstellung -B 50 wird beim ersten Wechsel der Stromquelle von /usr/lib/pm-utils/power.d/95hdparm-apm mit Ubuntu-Standardwerten (254 für AC, 128 für BAT) überschrieben. Außerdem ist 50 als Standard viel zu aggressiv → Notebook-Festplatten-Bug (dort ist auch beschrieben wie man seine Einstellungen permanent macht).
|
Giesi35
(Themenstarter)
Anmeldungsdatum: 30. Januar 2011
Beiträge: 164
|
linrunner schrieb: Hallo Giesi, hier meine Anmerkungen zu deinem Skript:
echo 1500 | sudo tee /proc/sys/vm/dirty_writeback_centisecs
Diese Funktion wird in einer Standardinstallation bereits vom Skript /usr/lib/pm-utils/power.d/laptop-mode (Paket pm-utils) abgedeckt.
# Energiesparfunktion (WLAN)
echo min_power | sudo tee /sys/class/scsi_host/host0/link_power_management_policy
Hier geht es nicht um WLAN, sondern um den SATA-Controller. Deine Implementierung ist nicht ganz vollständig, da ein Notebook meist mehrere SATA-Links hat (host0, host1, host2, ...). Zudem in der Standardinstallation bereits vom Skript /usr/lib/pm-utils/power.d/sata-alpm abgedeckt.
Okay, könnte man allerdings auch wieder mit einer for-schleife realisieren (wie USB-Autosuspend)
# Watchdog deaktivieren
echo 0 | sudo tee /proc/sys/kernel/nmi_watchdog
Interessant, das kannte ich noch nicht.
# Sound (High Definition Audio)
echo 10 | sudo tee /sys/module/snd_hda_intel/parameters/power_save
In der Standardinstallation bereits vom Skript /usr/lib/pm-utils/power.d/intel-audio-powersave abgedeckt.
Ggf. auch bei Intel-Audiogeräte? # Multicore-Stromsparen aktivieren
echo 1 | sudo tee /sys/devices/system/cpu/sched_mc_power_savings
In der Standardinstallation bereits vom Skript /usr/lib/pm-utils/power.d/sched-powersave abgedeckt.
# Dateisystem
sudo mount -o remount,nodiratime /
Kann man so machen, besser aber als Mountoption noatime in /etc/fstab.
# CD/DVD-ROM Polling deaktivieren
# sudo hal-disable-polling --enable-polling --device /dev/sr0 (Zum Aktivieren)
sudo hal-disable-polling --device /dev/sr0
Wird seit Ubuntu 10.04 nicht mehr benötigt, da HAL entfallen ist.
Andere Möglichkeit, dies zu realisieren oder ist dies jetzt Standard?
# USB-Autosuspend
for i in /sys/bus/usb/devices/*/power/autosuspend; do echo 1 | sudo tee $i; done
Hier dürften deine 25% herkommen, denn die Standardinstallation hat hierfür kein Skript. Problematisch ist, daß deine Implementierung auch Eingabegeräte in den Autosuspend-Modus versetzt. Viele Mäuse z.B. schlafen damit ein und brauchen bei der nächsten Bewegung unangenehm lange (oder einen Klick) zum Aufwachen.
Bisher noch nicht (subjektiv) wahrgenommen (bei angeschlossener Maus und externer Festplatte ).
# Festplatte nach 2 Minuten in Energiesparmodus setzen
# Je kleiner -B desto aggresiver der Energiesparmodus
sudo hdparm -B 50 -S 24 /dev/sda
Deine Einstellung -B 50 wird beim ersten Wechsel der Stromquelle von /usr/lib/pm-utils/power.d/95hdparm-apm mit Ubuntu-Standardwerten (254 für AC, 128 für BAT) überschrieben. Außerdem ist 50 als Standard viel zu aggressiv → Notebook-Festplatten-Bug (dort ist auch beschrieben wie man seine Einstellungen permanent macht).
Laut man hdparm führt -B 128 nie dazu, dass die Festplatte herunterfährt (spin-down). Dies ermöglicht zwar, dass man schneller arbeiten kann, allerdings kein so großen Energiespareffekt. Mein Gedankengang hinter dieser Option war folgender: Ich sitze häufig in der Uni und habe nur Skripts oder andere diverse pdf's offen, teilweise im Internet surfen. Da brauch ich meine Festplatte garnicht. Also kann sie in den suspend-Modus gehen. Desweiteren kommt es mir dabei auch nicht an ob ich 100ms warten muss bis diese wieder bereit ist, weil ich auf ihr zugreife. mfg Giesi Edit:
Ich hab mal nachgeschaut: Bei mir ist z.B. als Standard für die Flush-Zeit nur 500 angegeben. pm-utils ist installiert.
|
jug
Ehemalige
Anmeldungsdatum: 19. März 2007
Beiträge: 12335
Wohnort: Berlin
|
Wieso nimmst du nicht einfach die laptop-mode-tools? Zu einfach? ~jug
|
linrunner
Anmeldungsdatum: 7. August 2007
Beiträge: 3272
|
HAL: Ich habe dereinst unter 9.10, als HAL noch benutzt wurde, Vergleichsmessungen gemacht. Es war bei meinen Maschinen keine Einsparung feststellbar. Seit 10.04 pollt m.E. nichts mehr, daher braucht es keine Lösung
USB-Autosuspend: mir fällt eben auf, daß Du noch zusätzlich auto nach power/level schreiben mußt, sonst ist Autosuspend gar nicht aktiv. hdparm: Spindown realisierst Du besser über -S nicht über -B . Niedrige Werte bei -B führen wie erwähnt zu exzessivem Parken der Köpfe. Das eigentliche Problem sind aber die Anwendungen, die ständig die Platte wieder anwerfen → m.E. aussichtlose Sache.
|
Giesi35
(Themenstarter)
Anmeldungsdatum: 30. Januar 2011
Beiträge: 164
|
jug schrieb: Wieso nimmst du nicht einfach die laptop-mode-tools? Zu einfach? ~jug
Das hat mehrere Gründe:
laptop-mode-utils steht im Konflikt mit pm-utils (welches Standard ist) Ich wollte ein eigenes Skript schreiben (eig. für mich persönlich) Zudem weiß ich nicht ob laptop-mode-utils / pm-utils alle Bereiche abdeckt
|
linrunner
Anmeldungsdatum: 7. August 2007
Beiträge: 3272
|
Giesi35 schrieb: Ich hab mal nachgeschaut: Bei mir ist z.B. als Standard für die Flush-Zeit nur 500 angegeben. pm-utils ist installiert.
Schau mal im Akkubetrieb, dort setzt das pm-utils-Skript 60000.
|
glaskugel
Anmeldungsdatum: 8. Juli 2010
Beiträge: 3460
|
jug schrieb: Wieso nimmst du nicht einfach die laptop-mode-tools? Zu einfach? ~jug
Gibt es da irgendwelche Neuerungen zum Skript? Soll ich besser einen neuen Thread aufmachen? Ich bin da auf der Suche nach einem Skript für einen Homeserver, also kein Batteriebetrieb. Der Rechner soll runterfahren, wenn "wirklich" nichts los ist, dh bei einer ssh-Verbindung darf nicht runtergefahren werden, auch zB nicht, wenn ein updatedb läuft. In so einer Situation darf zB nicht runtergefahren werden. Da wird der Server verwendet. top - 22:12:49 up 1:22, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 91 total, 1 running, 90 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.8%sy, 0.0%ni, 99.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 4015068k total, 806604k used, 3208464k free, 185536k buffers
Swap: 4199420k total, 0k used, 4199420k free, 383324k cached Die Frage ist nun, wie definiere ich, dass der Server verwendet wird? Bleibt da nur ssh? Würde eine Analyse von "netstat -a |grep LISTEN" etwas bringen?
|
dirkolus
Anmeldungsdatum: 17. Mai 2011
Beiträge: 2086
Wohnort: dahoam
|
Hallo glaskugel, Für Deine Anwendung ist das Auto_OFF Script wohl passend für'n Anfang. Hier werden (per Konfigurationsfile) ein paar Prozesse, eingeloggte User, über Netzwerk erreichbare Maschinen eingetragen und das Script schaltet erst dann den Server aus, wenn keine dieser Bedingungen zutreffen. glaskugel schrieb: Die Frage ist nun, wie definiere ich, dass der Server verwendet wird? Bleibt da nur ssh?
Das o.g. Script ist die Software, die Server-Benutzungs-Definition muss Du schon selber für Dich machen. Aber mit dem Script kann man ja schon mal spielen.
Würde eine Analyse von "netstat -a |grep LISTEN" etwas bringen?
Du meinst wahrscheinlich eine Abfrage à la if [ `netstat -a | grep ESTABLISHED | wc -l` -le 0 ]; then shutdown; fi oder? Ich habe jedenfalls dieses Script (für mich massiv abgewandelt, incl. automatischen Eintrag, wann der Server wieder hochfahren soll) jetzt schon einige Zeit zuverlässig am Laufen. Dirk
|
glaskugel
Anmeldungsdatum: 8. Juli 2010
Beiträge: 3460
|
Ja, das Skript sieht interessant aus. Ich habe mir gerade überlegt, ein Kriterium könnte sein, dass in Zeit x eine bestimmte Datenmenge über eth0 laufen muss, wenn keine ssh-Verbindung besteht. Wie könnte man das umsetzen?
|
glaskugel
Anmeldungsdatum: 8. Juli 2010
Beiträge: 3460
|
dirkolus schrieb:
Du meinst wahrscheinlich eine Abfrage à la if [ `netstat -a | grep ESTABLISHED | wc -l` -le 0 ]; then shutdown; fi oder?
So ist 192.168.178.113 an
netstat -n -t | grep "192.168.178.113" | grep "VERBUNDEN"
tcp 0 75252 192.168.178.70:8200 192.168.178.113:37796 VERBUNDEN 192.168.178.113 wurde runtergefahren und es kommt noch immer:
netstat -n -t | grep "192.168.178.113" | grep "VERBUNDEN"
tcp 0 75252 192.168.178.70:8200 192.168.178.113:37796 VERBUNDEN ping 192.168.178.113
PING 192.168.178.113 (192.168.178.113) 56(84) bytes of data.
From 192.168.178.70 icmp_seq=1 Destination Host Unreachable
|
dirkolus
Anmeldungsdatum: 17. Mai 2011
Beiträge: 2086
Wohnort: dahoam
|
'VERBUNDEN' bleibt dann noch bis zu einem Timeout bestehen. Aber was wollen wir denn erreichen? Soll der Server runterfahren, trotz dem Verbindungen aktiv sind? Oder soll er runterfahren, wenn es keine aktiven Verbindungen mehr gibt? Im zweiten Fall muss also zuerst die Verbindung abgebaut werden ('VERBUNDEN' verschwindet) und dann erst fährt der Server runter. Dirk
|
glaskugel
Anmeldungsdatum: 8. Juli 2010
Beiträge: 3460
|
Ich verstehe noch nicht ganz, wie das mit dem Timeout abläuft bzw. warum. Wenn in meinem Beispiel 192.168.178.113 nicht mehr pingbar ist, warum kommt dann netstat zu einem anderen Ergebnis. Mein Problem ist, dass ich mit load nicht weiterkomme. Der 15 Minuten Durchschnitt liegt manchmal bei 0,02 wenn zB ein DLNA-Server auf 192.168.178.70 läuft und 192.168.178.113 Musik abspielt. Andererseits kann 192.168.178.113 down sein und auch sonst auf 192.168.178.70 nichts los sein und ich habe einen Load von 0,05 im 15min-Schnitt. Wenn ich ein Load von 0,01 im 15min-Schnitt als shutdown-Kriterium definiere, dann ist es nicht zu erwarten, dass der PC von selbst runterfährt. Kann ich den Timeout ignorieren? Eventuell überlege ich mir was mit ping statt mit netstat als Kriterium ob ein Client aktiv ist? Ich würde aber gerne eine aktive Verbindung als Kriterium wählen. Wenn 192.168.178.11 "up" ist, aber keine Verbindung zu 192.168.178.70 besteht, dann soll 192.168.178.70 runterfahren.
|