1. Gestione dell'energia

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.

1.1. Advanced Power Management (APM)

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).

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:

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

1.2. Advanced Configuration and Power Interface (ACPI)

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

1.3. APM vs. ACPI: Quale tra i due?

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.

1.4. SMP, Hyper-Threading, IA64 & NUMA

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.

Note

[1]

source/arch/i386/kernel/process.c