Se possedete un laptop x86 relativamente recente, è probabile che supporti sia l'Advanced Power Management (APM) che l'Advanced Configuration and Power Interface (ACPI). ACPI è la più recente tra le due tecnologie e affida la gestione dell'energia al sistema operativo, permettendo una gestione più intelligente rispetto a APM, che è controllato dal BIOS, il che è molto utile per i laptop alimentati a batteria. Il controllo dell'energia della macchina può essere affidato a una sola interfaccia alla volta, per cui è importante stabilire quale metodo si adatta meglio alla singola situazione.
L'Advanced Power Management (APM) permette al BIOS del computer di controllare la gestione dell'energia del sistema, senza il coinvolgimento del sistema operativo. Sotto Linux, APM ha il vantaggio di essere stabile, ben supportato dai venditori Linux e di avere una solida storia alle spalle. Tuttavia, negli ultimi anni non gli è stato dedicato molto sviluppo.
Per usarlo, bisogna abilitare l'APM nel kernel:
[*] Power Management support <*> Advanced Power Management BIOS support [ ] Ignore USER SUSPEND (NEW) [ ] Enable PM at boot time (NEW) [ ] Make CPU Idle calls when idle (NEW) [ ] Enable console blanking using APM (NEW) [ ] RTC stores time in GMT (NEW) [ ] Allow interrupts during APM BIOS calls (NEW) [ ] Use real mode APM BIOS call to power off (NEW) |
La maggior parte delle opzioni per APM dovrebbero rimediare a problemi noti con dispositivi hardware specifici, per cui è probabile che si voglia abilitare solo la prima (CONFIG_APM).
Advanced Power Management BIOS support (CONFIG_APM): È necessario abilitarla se si vuole combinare qualcosa di utile con APM. Ai programmi in spazio utente saranno notificati gli eventi APM (per es., cambiamento dello stato della batteria) e un dispositivo /proc/apm informerà sullo stato della batteria.
Ignore USER SUSPEND (CONFIG_APM_IGNORE_USER_SUSPEND): Si tratta di un aggiustamento per i notebook NEC Versa M.
Enable PM at boot time (CONFIG_APM_DO_ENABLE): Per quanto suoni bene, la maggior parte delle macchine non hanno bisogno di questa caratteristica, che in effetti può bloccare alcuni sistemi in fase di avvio.
Make CPU Idle calls when idle (CONFIG_APM_CPU_IDLE): Su alcune macchine, questa opzione incrementa il risparmio di energia; mentre su altre, provocherà il blocco del sistema all'avvio. Da usare con cautela.
Enable console blanking using APM (CONFIG_APM_DISPLAY_BLANK): Anziché oscurare la console virtuale, in realtà spegne lo schermo. Non funziona con X-Windows e in effetti può causare più problemi di quanti non ne risolva.
RTC stores time in GMT (CONFIG_APM_RTC_IS_GMT): Se si vuole memorizzare il GMT (Greenwich Mean Time) nel proprio RTC (Real Time Clock), si scelga sì.
Allow interrupts during APM BIOS calls (CONFIG_APM_ALLOW_INTS): Si tratta di un aggiustamento per alcuni Thinkpad IBM che si bloccano anziché sospendere il sistema.
Use real mode APM BIOS call to power off (CONFIG_APM_REAL_MODE_POWER_OFF): È un aggiustamento per un certo numero di BIOS guaste. Se il vostro computer va in crash anziché spegnersi correttamente, abilitate questa funzione.
Per attivare APM in fase di avvio, lo si dovrà prelevare da http://www.worldvisions.ca/~apenwarr/apmd/ e configurare gli script di avvio del sistema:
# Avvia il demone APM se esiste e se APM è abilitato nel kernel if [ -x /usr/sbin/apmd -a -d /proc/apm ]; then if cat /proc/apm 1> /dev/null 2> /dev/null ; then echo "Starting APM daemon: /usr/sbin/apmd" /usr/sbin/apmd fi fi |
Il demone APM è composto in effetti di tre programmi:
apmd - si occupa dei compiti di gestione dell'energia
apm - uno strumento a linea di comando per verificare lo stato corrente della batteria o sospendere il computer
xapm - un semplice contatore della batteria per X
Se state cercando un approccio semplice, "chiavi in mano", per la gestione dell'energia del vostro Laptop, APM è indubbiamente quello che fà per voi.
Un semplice script che vi avverta dell'autonomia rimanente della batteria, può essere aggiunto al vostro file ~/.profile :
if [ -f /proc/apm ]; then DUMMY=`cat /proc/apm | cut -d" " -f 7` # Don't display when fully charged if [ "$DUMMY" != "99%" ]; then LEVEL=`cat /proc/apm | sed -e "s/^.*% //"` echo "Battery at $DUMMY ($LEVEL)" fi fi |
Advanced Configuration and Power Interface (ACPI) è il successore di APM; sottrae la responsabilità della gestione dell'energia al BIOS per affidarla al sistema operativo. L'ACPI di Linux è più recente dell'APM di Linux, nonché più flessibile nella reazione di fronte a eventi legati alla gestione dell'energia; ha visto un più intenso sviluppo ultimamente, e come conseguenza soggiace di tanto in tanto alla sua giusta porzione di bachi.
Se, in quanto sviluppatori, vivete sul filo del rasoio e non vi spaventa compilare il kernel e applicare patch al codice sorgente, ACPI merita la vostra considerazione.
Sotto Linux ACPI è composto di due parti: Il driver ACPI compilato nel kernel, e il demone ACPI (ACPID). Nella sua incarnazione corrente, ACPID è piuttosto semplice: controlla /proc/acpi/event e agisce di conseguenza. Anche se il demone non viene attivato, ci si può comunque giovare delle caratteristiche di ACPI incluse nel kernel, come il supporto termico del processore.
È possibile conoscere quale versione del driver ACPI sia in uso, insieme agli stati di sospensione supportati, lanciando:
bash $ cat /proc/acpi/info version: 20030619 states: S0 S1 S3 S4 S4 S5 |
Lo sviluppo di ACPI procede a ritmo costante, per cui si potrebbe prendere in considerazione l'applicazione di patch degli aggiornamenti più recenti del codice ACPI kernel-level al proprio kernel. Una volta scaricata la patch specifica per il proprio kernel, la si può applicare in questo modo:
bash$ gunzip acpi-[version-kernel].diff.gz bash# cd /usr/src/linux-[version] bash# patch -Np1 -i ../acpi-[version-kernel].diff |
Dopo di ciò, si dovrà ovviamente ricompilare il kernel:
[*] ACPI Support [ ] CPU Enumeration Only <*> AC Adapter <*> Battery <*> Button <*> Fan <*> Processor <*> Thermal Zone < > ASUS Laptop Extras < > Toshiba Laptop Extras [*] Debug Statements |
Si potrà anche installare il demone ACPID da http://sourceforge.net/project/showfiles.php?group_id=33140 e configurare gli script di avvio del sistema, per attivarlo all'avvio:
if [ -x /usr/sbin/acpid -a -d /proc/acpi ]; then echo "Starting ACPID Daemon: /usr/sbin/acpid" /usr/sbin/acpid fi |
Un po' di storia... Il primo venditore a implementare ACPI fu Micrososft, il che comporta aspetti posistivi e altri negativi. Positivi perché, quando si compra un sistema, ci si può avvalere della garanzia cha abbia passato i test Microsoft di compatibilità hardware, incluso il test della sua implementazione di ACPI. Tuttavia, tali test risultano inadeguati in quanto non indicano tanto aderenza alle specifiche ACPI, ma piuttosto alla particolare implementazione di ACPI di Microsoft. Quando questa stessa macchina è usata con Linux, possono saltare fuori alcune classi di errori, che non si manifestavano sotto Windows. Per proteggere da tali problemi, il driver ACPI di Linux conserva una lista nera di "BIOS guaste", cioè notoriamente non aderenti alle specifiche ACPI, e come conseguenza si rifiuterà di abilitare ACPI se il vostro sistema è compreso nella lista.
Molti costruttori certificano la compatibilità dei loro sistemi con Linux. Tuttavia, essi usano le distribuzioni Linux più importanti, con il loro kernel predefinito. Questo significa che è piuttosto difficile far sì che gli OEM garantiscano che i loro sistemi funzionino con Linux preparato per l'ACPI, finché le distribuzioni maggiori distribuiranno dei kernel già con ACPI. Questo costituisce un piccolo dilemma, in quanto le distribuzioni Linux vogliono distribuire kernel che funzionino su quanti più sistemi possibile. Ultimamente, si sono comunque visti cambiamenti positivi, in questo settore.
Per risparmiare energia mantenendosi comunque rapidamente utilizzabili, i PC compatibili con ACPI possono entrare in vari stati di riposo. Le specifiche ACPI definiscono cinque di tali stati, noti come stati "S". A differenza degli stati di riposo del processore, durante gli stati "S" il sistema non compie alcun lavoro. Ogni stato introduce un sempre maggiore risparmio di energia ma richiede proporzionalmente più tempo per riprendere l'attività. Essi si ispirano agli stati di sistema dello standard APM, predecessore di ACPI.
Dettagli completi sugli stati ACPI si trovano presso http://acpi.sourceforge.net/documentation/sleep.html. Gli stati del processore sono descritti su http://acpi.sourceforge.net/documentation/processor.html.
Per informazioni più specifiche sui retroscena dello stesso ACPI, si può visitare il sito web di ACPI a http://www.acpi.info
Correntemente, sono due gli standard che competono nella gestione dell'energia: APM e ACPI. Non si possono usare contemporaneamente; qual'è dunque il migliore per la propria situazione? Se avete un kernel relativamente recente (>2.4.20) e non vi spaventa doverlo ricompilare o applicare patch al codice sorgente, troverete molti vantaggi nella flessibilità di ACPI. Se volete semplicemente una gestione generica dell'energia, o state usando una macchina più vecchia, scegliete APM. Nessuno dei due metodi spegne i dischi rigidi inattivi; per questo scopo si usi invece hdparm. In ambo i casi, il BIOS del vostro sistema dovrà supportare correttamente lo schema di gestione dell'energia che vorrete usare; se il vostro sistema non supporta pienamente né l'uno né l'altro, alcune delle opzioni di gestione dell'energia potrebbero causare il crash del sistema e/o provocare perdite di dati. Siete stati avvertiti!
Anche se non abilitate la gestione dell'energia sul vostro laptop x86, Linux invierà comunque l'istruzione HLT al vostro processore ogni volta che non ci sarà niente da fare [1]. Svariati programmi Microsoft Windows per il raffreddamento della CPU usano questa tecnica. Questo porta a abbassare il consumo di energia della vostra CPU. Si noti che il sistema non si spegne quando riceve l'istruzione HLT: semplicemente smette di eseguire le istruzioni finché non si verifica un interrupt.
Non c'è generalmente alcun vantaggio nell'abilitare uno o l'altro tipo di gestione dell'energia su server o workstation che non ricadono dentro queste categorie.
Alcuni costruttori di sistemi SMP possono avere omesso le tavole pre-ACPI usate per le configurazioni SMP. In tal caso, ACPI è necessario.
Se avete un sistema più recente che supporti l' Hyper-Threading, dovrete abilitare ACPI (e, ovviamente, SMP). Senza di esso, il vostro sistema Linux potrebbe non essere in grado di individuare e inizializzare tutti i processori virtuali.
Anche le macchine IA64 richiedono ACPI. In aggiunta, i server NUMA cominciano a richiederlo per una corretta inizializzazione.
[1] | source/arch/i386/kernel/process.c |