3. Metodi di gestione dell'energia

Lo scopo principale di ogni tecnica di gestione dell'energia è quello di limitare l'usura dell'oggetto. Nel caso della gestione dell'energia dei laptop, i nostri sforzi sono rivolti a ridurre lo sfruttamento della CPU e del disco rigido. Semplificando un po', tutto ciò viene suddiviso in tecniche ovvie, semi ovvie, e non ovvie, dando per scontato che le vostre previsioni di utilizzo possano essere differenti.

3.1. swsusp(8)

Suspend to Disk (S2D) rimane un compito elusivo, sotto Linux. Il progetto principale, al momento, è swsup, disponibile presso http://sourceforge.net/projects/swsusp. È ancora piuttosto recente e richiede che si intervenga sulla configurazione per abilitarlo.

3.2. hdparm(8)

hdparm è un'utilità della shell di Linux che può essere usata per "addormentare" e migliorare le prestazioni di vari dispositivi ATA/IDE. Se non è incluso nel vostro sistema, è possibile prelevare i sorgenti da http://freshmeat.net/redir/hdparm/4062/url_homepage/hardware. Per esempio, quanto segue fornisce supporto IO a 32 bit con sync (-c3), supporto DMA (-d1), Advanced Power Management (-B128), scrittura su cache (-W1), spegnimento del disco dopo cinque minuti (-S60). Mi permette fantastiche prestazioni con l'aggiunta del risparmio di energia. Tenete presente che le vostre esigenze di utilizzo potrebbero differire, quindi vorrete forse adattare tale configurazione al vostro specifico sistema per prevenire perdite di dati (specialmente le opzioni -B e -m!).

Nell'esempio che segue, lanciamo un'analisi delle prestazioni di lettura/scrittura del nostro disco rigido prima e dopo l'uso di hdparm. Si noti che, mentre le nostre scritture su cache rimangono più o meno le stesse, le nostre effettive letture fisiche dal disco ottengono un incredibile incremento! Se vi piace vivere sul filo del rasoio, potete destreggiarvi tra le opzioni -m, -c, -B, e -u con cautela (si veda la pagina man).

bash# hdparm -tT /dev/hda
Timing buffer-cache reads:   588 MB in  2.01 seconds = 292.15 MB/sec
Timing buffered disk reads:   14 MB in  3.46 seconds =   4.05 MB/sec

bash# hdparm -k1 -K1 -c3 -d1 -W1 /dev/hda
bash# hdparm -tT /dev/hda
Timing buffer-cache reads:   596 MB in  2.01 seconds = 297.01 MB/sec
Timing buffered disk reads:   72 MB in  3.05 seconds =  23.58 MB/sec

3.3. sysklogd(8)

Esaminate il vostro file /etc/syslog.conf per individuare attività di log non necessarie e per ottimizzarne le prestazioni. Se non vi interessa effettuare il log delle attività di sistema, potreste decidere di disabilitare interamente syslogd e klogd o, per lo meno, minimizzare la quantità dei log eseguiti dal sistema. È anche possibile far precedere ogni voce dal segno meno (-) per evitare il syncing del file dopo ogni immissione di log [1]. Per esempio, quanto segue effettuerà il log di tutto ciò con priorità di info o più alta, ma inferiore a warning, su /var/log/messages o /var/log/mail senza la necessità del sync del disco dopo ogni scrittura. Dal momento che vogliamo conservare tutti i messaggi con priorità di warning, questi verranno registrati su un file differente senza disabilitare il sync del disco (per evitare perdite di dati nell'eventualità di un crash del sistema).

*.warning			/var/log/syslog
*.info;*.!warning;mail.none	-/var/log/messages
mail.info;mail.!warning		-/var/log/mail

Un altro punto da considerare sono i messaggi -- MARK -- che syslogd(8) scrive, il che avrà effetto sulle impostazioni di inattività del vostro disco rigido. Si possono disabilitare semplicemente lanciando syslogd(8) con:

if [ -x /usr/sbin/syslogd -a -x /usr/sbin/klogd ]; then
	# '-m 0' disabled 'MARK' messages
	/usr/sbin/syslogd -m 0
	sleep 1
	# '-c 3' displays errors on console
	# '-x' turns off broken EIP translation
	/usr/sbin/klogd -c 3 -x
fi

3.4. XFree86

Ci sono essenzialmente due tipi di oscuramento dello schermo, che possono essere eseguiti sotto XFree86: BlankTime e DPMS. Il primo è essenzialmente un debole effetto di "oscuramento" che in realtà non comporta alcun risparmio di energia. L'altro è riservato ai monitor aderenti allo standard DPMS, e deve essere specificamente abilitato per avere effetto. Si trova nel file XF86Config, normalmente collocato in /etc/X11/XF86Config.

Se possedete un monitor rispondente allo standard DPMS, potete provare a abilitarne il supporto sotto la sezione Monitor del vostro file XF86Config:

Section "Monitor"
	Option	"DPMS"
EndSection

Per manipolare le funzioni DPMS, potete creare o modificare le righe seguenti nella sezione ServerLayout.

Section "ServerLayout"
	Option "BlankTime"	"10"	# Oscura lo schermo dopo 10 minuti
	Option "StandbyTime" 	"20"	# Spegne lo schermo dopo 20 minuti 
	Option "SuspendTime"	"30"	# Completa ibernazione dopo 30 minuti 
	Option "OffTime"	"40"	# Spegne il monitor DPMS 
EndSection

Vale la pena di notare che BlankTime non costituisce affatto un livello di risparmio di energia. Allo schermo è indirizzato un "debole" effetto di oscuramento, il cui intervallo prestabilito di attivazione è di 10 minuti. In alternativa, può indicare l'intervallo in minuti prima dell'attivazione del salvaschermo. Non ha comunque niente a che vedere con DPMS.

Dopo aver attivato le proprie modifiche e aver riavviato X-Windows, può essere preferibile esaminare i propri file di log, per verificare se la propria scheda video abbia avuto qualche problema con i nuovi cambiamenti:

bash$ egrep "^\(WW|EE\)" /var/log/XFree86.0.log

È possibile che ci siano opzioni aggiuntive, che si potrebbe voler abilitare per lo specifico driver della propria scheda o chip video; si veda il sito Web della Documentazione di XFree86 per ulteriori precisazioni.

Certamente, tutto questo può essere attivato "al volo" usando xset(1). Se non avete accesso al vostro file di sistema XF86Config , un buon posto in cui inserire questi comandi potrebbe essere il vostro file ~/.Xsession oppure ~/.xinitrc.

bash$ xset -dpms			# Disabilita DPMS
bash$ xset +dpms			# Abilita DPMS
bash$ xset s off			# Disabilita l'oscuramento dello schermo
bash$ xset s 150			# Oscura lo schermo dopo 150 secondi
bash$ xset dpms 300 600 900		# Imposta i tempi di standby, suspend, e off (in secondi)
bash$ xset dpms force standby		# Introduce immediatamente il modo standby 
bash$ xset dpms force suspend		# Introduce immediatamente il modo suspend 
bash$ xset dpms force off		# Spegne immediatamente il monitor 
bash$ xset -q				# Interroga le impostazioni attuali

Se state invece usando la console di Linux (senza X-Windows), potreste usare setterm(1):

bash$ setterm -blank 10			# Oscura lo schermo dopo 10 minuti 
bash$ setterm -powersave on		# Mette il monitor nel modo VESA di risparmio di energia 
bash$ setterm -powerdown 20		# Imposta a 20 minuti lo spegnimento VESA

3.5. KDE 3.1

3.5.1. Display Power Control

Assumendo che abbiate configurato XFree86 per supportare DPMS, lanciate semplicemente kcontrol e scegliete Power Control/Display Power Control. Da qui, potete configurare le impostazioni di Standby, Suspend, e Power off per il vostro monitor.

3.5.2. Batteria del Laptop

Assumendo che abbiate configurato il vostro kernel per supportare APM o ACPI, lanciate semplicemente kcontrol e scegliete Power Control/Laptop Battery. Da qui, potete configurare le varie impostazioni per il vostro sistema basate sul livello di carica rimanente della batteria.

È degno di nota che alcuni utilizzatori di ACPI tendano a vedere questo messaggio:

Your computer seems to have a partial ACPI installation. ACPI was probably 
enabled, but some of the sub-options were not - you need to enable at least 
'AC Adaptor' and 'Control Method Battery' and then rebuild your kernel.

Ossia: 
Sembra che sul vostro computer ci sia una installazione parziale di ACPI. ACPI è stato 
probabilmente abilitato, tralasciando però di abilitare alcune sotto-opzioni - dovete per lo meno 
abilitare 'AC Adaptor' e 'Control Method Battery' e quindi ricompilare il kernel. 

Se vedete questo, significa che ACPI non è installato o, più probabilmente, KDE non riconosce il vostro particolare sottosistema ACPI Linux. Se l'applicazione di una patch aggiornata di ACPI al kernel non risolve il problema, sarà necessario o non usare questa funzione di KDE o, in alternativa, riconvertirsi all'APM.

3.6. Energy Star

Energy Star è un programma sostenuto dal governo degli Stati Uniti per promuovere standard energetici efficienti. Di interesse:

Tipicamente, Energy Star ottiene tali risparmi grazie a impostazioni esterne di gestione dell'energia e non costituisce, di per sé una tecnica di gestione dell'energia.

3.7. File di Swap

Prendete in considerazione l'opportunità di disabilitare il vostro file di swap in /etc/fstab per ridurre gli accessi al disco rigido. Se disponete di memoria in quantità, questo è certamente un metodo da seguire. Un modo per capire se avete bisogno del file di swap consiste nell'attivarlo, usare il vostro sistema per un periodo di tempo, e quindi esaminare /proc/meminfo e /proc/swaps per determinare di quanta memoria libera disponete mediamente, e se il vostro file di swap venga mai utilizzato.

Per esempio, oggi ho compilato svariati programmi intensivi e ho fatto funzionare il mio laptop per circa otto ore di fila. Un semplice esame del mio sistema rivela:

bash$ cat /proc/swaps
Filename                                Type            Size    Used    
Priority
/dev/hda3                                partition      136544  0       -1

bash$ cat /proc/meminfo
MemTotal:       513880 kB
MemFree:        254820 kB
Buffers:         42812 kB
Cached:         142880 kB
SwapCached:          0 kB
Active:         159644 kB
Inactive:        76888 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:       513880 kB
LowFree:        254820 kB
SwapTotal:      136544 kB
SwapFree:       136544 kB
Dirty:               0 kB
Writeback:           0 kB
Mapped:          86148 kB
Slab:            10748 kB
Committed_AS:   203944 kB
PageTables:       1140 kB
VmallocTotal:   516076 kB
VmallocUsed:      1468 kB
VmallocChunk:   514604 kB
HugePages_Total:     0
HugePages_Free:      0
Hugepagesize:     4096 kB

Al che, si potrebbe disabilitare il file di swap, se non c'è alcun indicatore di un probabile uso futuro.

3.8. tmpfs

Includendo nel kernel il supporto per il tmpfs (filesystem temporaneo) e usandolo per montarvi la directory /tmp, si ottiene che nulla verrà scritto sul disco rigido in corrispondenza di questo punto di mount, il quale agirà come un disco RAM (per contro nulla verrà salvato). Il vantaggio di tmpfs rispetto al più tradizionale ramfs è che il primo risiede nella cache interna del kernel e cresce o si riduce per adattarsi ai file che deve ospitare. Si veda il Documentation/filesystems/tmpfs.txt del proprio kernel per completa documentazione. Se non si specifica una dimensione massima, essa verrà automaticamente limitata a metà della memoria totale disponibile. Un file /etc/fstab di esempio, con un file ram temporaneo di 100MB montato sotto /tmp, apparirebbe così:

tmpfs	/tmp	tmpfs	size=100m,mode=1777	0 0

3.9. Affinamenti vari

La modifica di /proc/sys/vm/bdflush permette a un utente di precisare in quali circostanze i buffer "sporchi" debbano essere trasferiti su disco, quanti di tali buffer possano esistere, ecc. Per dettagli si veda nell'albero_dei_sorgenti_di_linux/Documentation/sysctl/vm.txt (grazie a Marc Liberatore per il riferimento).

Avviate il vostro sistema e elencate, con lsmod, i moduli correntemente caricati. Tutto ciò che compare nell'elenco molto probabilmente deve essere caricato regolarmente; compilandolo come parte del kernel piuttosto che come modulo può servire a ridurre il tempo necessario a caricarlo dal disco, e, in grado molto minore, riduce gli accessi al disco richiesti per l'avvio del sistema.

Esaminate la vostra configurazione di crontab per vedere se qualcosa venga avviato su base regolare. Commentate ogni voce non necessaria. Non dimenticate di esaminare il crontab di ogni singolo utente, incluso 'nobody'. Se non avete bisogno di registrare una qualsivoglia attività di background, valutate se disabilitare crontab del tutto. Lo stesso consiglio vale per atd.

Se avviate http per testare e/o sviluppare pagine web, provate a impostare i valori di MinSpareServers e StartServers a 1. Non definite alcun CustomLogging o almeno incrementate il valore di LogLevel a warn. Se vi sentite veramente sicuri di voi stessi, potete cambiare la direttiva ErrorLog perché punti a /dev/null.

Valutate se creare uno script di risparmio di energia che metta immediatamente il vostro laptop nel modo di bassa potenza:

#!/bin/sh
if [ -x /usr/sbin/hdparm ]; then
	hdparm -y /dev/hda
fi

if [ -x /usr/X11R6/bin/xset ]; then
	xset dpms force off
fi

In più, merita attenzione quanto rientra nelle aree seguenti:

3.10. Miti del risparmio di energia

Abitualmente risultava vantaggioso ricompilare i driver PCMCIA di Linux per permettere agli slot di godere del supporto APM per l'energia. Tuttavia, la maggior parte delle funzionalità di tali driver sono ora incluse nel kernel stesso. Se vi interessano le specifiche, la pagina del progetto PCMCIA è disponibile presso http://sourceforge.net/projects/pcmcia-cs/.

Alcune persone credono che APM offra un migliore risparmio di energia rispetto a ACPI, e viceversa. Per quanto differiscano in termini di tecniche di gestione dell'energia, nei test reali di utilizzo delle batterie, entrambi a quanto si dice garantiscono prestazioni all'incirca equivalenti.

Contrariamente alla credenza popolare, le batterie a Ioni di Litio (si veda sotto) soffrono di effetto memoria. Fortunatamente, l'effetto non è pesante rispetto al periodo di vita di una batteria tipica (3-4 anni). Chiunque affermi il contrario sta cercando di vendervi qualcosa.

Note

[1]

syslogd.c