33.3. ACPI

ACPI (advanced configuration and power interface) è stato progettato per abilitare il sistema operativo per la configurazione e il controllo dei singoli componenti hardware. ACPI sostituisce sia PnP che APM. Fornisce informazioni sulla batteria, l'adattatore CA, la temperatura, la ventola e gli eventi del sistema, ad esempio "chiusura schermo" o "batteria scarica."

Il BIOS fornisce tabelle contenenti informazioni sui metodi di accesso dei singoli componenti e dell'hardware. Il sistema operativo utilizza queste informazioni per compiti quali l'assegnazione di interruzioni o l'attivazione e la disattivazione dei componenti. Poiché il sistema operativo esegue comandi memorizzati nel BIOS, la funzionalità dipende dall'implementazione del BIOS. Le tabelle che ACPI è in grado di rilevare e caricare sono riportate in /var/log/boot.msg. Per ulteriori informazioni sulla risoluzione dei problemi relativi a ACPI, vedere la Sezione 33.3.4, "Risoluzione dei problemi".

33.3.1. ACPI in azione

Se il kernel rileva un ACPI BIOS all'avvio del sistema, ACPI viene attivato automaticamente e viene disattivato APM. Per alcuni computer meno recenti potrebbe essere necessario il parametro di avvio acpi=force. Il computer deve supportare ACPI 2.0 o versioni successive. Verificare i messaggi di avvio del kernel in /var/log/boot.msg per controllare che ACPI sia stato attivato.

È necessario poi caricare diversi moduli con lo script di avvio di acpid. Se uno di questi moduli crea problemi, è possibile escluderlo dal caricamento o dallo scaricamento in /etc/sysconfig/powersave/common. Il log di sistema (/var/log/messages) contiene i messaggi dei moduli che consentono di controllare quali componenti sono stati rilevati.

/proc/acpi ora contiene diversi file che forniscono informazioni sullo stato del sistema o che possono essere utilizzate per modificare qualcuno di questi stati. Alcune funzionalità non sono ancora attive poiché sono ancora in fase di sviluppo e il supporto di alcune funzioni dipende essenzialmente dall'implementazione del produttore.

È possibile leggere tutti i file (eccetto dsdt e fadt) con il commando cat. Alcuni file supportano la modifica delle impostazioni con echo, ad esempio echo X > file, per specificare i valori appropriati per X. Per accedere facilmente a questi valori, è ad esempio possibile utilizzare il comando powersave che funge da front-end per il daemon Powersave. Di seguito vengono descritti i file più importanti:

/proc/acpi/info

Informazioni generali su ACPI.

/proc/acpi/alarm

Specificare quando il sistema deve riattivarsi dopo lo stato sleep. Questa funzionalità non è al momento completamente supportata.

/proc/acpi/sleep

Fornisce informazioni sui possibili stati sleep.

/proc/acpi/event

Tutti gli eventi sono riportati in questo file e vengono elaborati dal daemon Powersave (powersaved). Se nessun daemon è in grado di accedere a questo file, gli eventi, quali ad esempio un breve clic sul pulsante Power o la chiusura dello schermo, possono essere letti con il comando cat /proc/acpi/event (terminare con Ctrl-C).

/proc/acpi/dsdt e /proc/acpi/fadt

Questi file contengono le tabelle ACPI: DSDT (differentiated system description table) e FADT (fixed ACPI description table) che si possono leggere con i comandi acpidmp, acpidisasm e dmdecode. Questi programmi e la relativa documentazione si trovano nel pacchetto pmtools. Ad esempio, acpidmp DSDT | acpidisasm.

/proc/acpi/ac_adapter/AC/state

Indica se l'adattatore CA è connesso.

/proc/acpi/battery/BAT*/{alarm,info,state}

Informazioni dettagliate sullo stato della batteria. Il livello di carica viene letto mettendo a confronto l'ultima piena capacità indicata nelle informazioni con la capacità rimanente indicata nello stato. Per una più comoda consultazione, utilizzare uno dei programmi speciali introdotti nella Sezione 33.3.3, "Strumenti di ACPI". In alarm è possibile specificare il livello di carica, ad esempio avvertimento, bassa o critica, in cui viene attivato un evento della batteria.

/proc/acpi/button

Questa directory contiene le informazioni sui vari parametri, ad esempio i pulsanti e lo schermo del laptop.

/proc/acpi/fan/FAN/state

Indica se la ventola è correntemente attiva. Per attivare o disattivare la ventola manualmente, scrivere in questo file 0 (on) oppure 3 (off). Sia il codice ACPI nel kernel sia l'hardware (oppure il BIOS) sovrascrivono questo parametro quando il computer si surriscalda.

/proc/acpi/processor/*

Per ciascuna CPU esiste una subdirectory separata inclusa nel sistema.

/proc/acpi/processor/*/info

Informazioni sulle opzioni di risparmio energetico del processore.

/proc/acpi/processor/*/power

Informazioni sullo stato corrente del processore. L'asterisco accanto a C2 indica che il processore è inattivo. Questo è lo stato più frequente come si può rilevate dal valore utilizzo.

/proc/acpi/processor/*/throttling

Può essere utilizzato per impostare il throttling dell'orologio del processore. Di norma il throttling è possibile in otto livelli ed è indipendente dal controllo della frequenza della CPU.

/proc/acpi/processor/*/limit

Se la prestazione (non aggiornata) e il throttling vengono controllati automaticamente da un daemon, in questo file è possibile specificare il limite massimo. Alcuni di questi limiti vengono stabiliti dal sistema mentre altri possono essere regolati dall'utente.

/proc/acpi/thermal_zone/

Per ciascun zona termica esiste una subdirectory separata. La zona termica è un'area con proprietà termiche simili dotata di numero e nomi assegnati dal produttore hardware. Molte possibilità offerte da ACPI vengono tuttavia implementate raramente. Il controllo della temperatura, invece, viene gestito per convenzione dal BIOS. Il sistema operativo non ha grandi possibilità di intervenire poiché è in gioco la durata dell'hardware. Perciò alcuni file hanno solo valore teorico.

/proc/acpi/thermal_zone/*/temperature

Temperatura corrente della zona termica.

/proc/acpi/thermal_zone/*/state

Lo stato indica se tutto è ok oppure se ACPI applica il raffreddamento attivo o passivo. Se il controllo della ventola è indipendente da ACPI, questo stato indicherà sempre ok.

/proc/acpi/thermal_zone/*/cooling_mode

Consente di selezionare il metodo di raffreddamento controllato da ACPI e di scegliere la modalità di raffreddamento passivo (minore prestazione, economica) oppure attivo (piena prestazione, rumore della ventola).

/proc/acpi/thermal_zone/*/trip_points

Consente di stabilire i limiti della temperatura per l'avvio di azioni specifiche, come ad esempio il raffreddamento passivo o attivo, la sospensione (caldo) oppure lo shutdown (critico). Le azioni possibili sono definite nella DSDT (dipendente dal dispositivo). I trip point stabiliti nella specifica ACPI sono critico, caldo, passivo, attivo1 e attivo2. Anche se non sono stati implementati tutti, è necessario immetterli in questo file in questo ordine. Ad esempio, la voce echo 90:0:70:0:0 > trip_points imposta la temperatura per critico a 90 e la temperatura per passivo a 70 (tutte le temperature sono misurate in gradi centigradi).

/proc/acpi/thermal_zone/*/polling_frequency

Se il valore presente nel file temperature non viene aggiornato automaticamente quando la temperatura cambia, modificare la modalità polling in questo file. Il comando echo X > /proc/acpi/thermal_zone/*/polling_frequency consente di richiedere la temperatura ogni X secondi. Impostare X=0 per disabilitare il polling.

Non è necessario modificare manualmente nessuna di queste impostazioni, informazioni o eventi. È possibile eseguire tale modifica con il daemon Powersave (powersaved) e vari front end quali powersave, kpowersave e wmpowersave. Vedere la Sezione 33.3.3, "Strumenti di ACPI".

33.3.2. Controllo della prestazione della CPU

La CPU può risparmiare energia in tre modi. È possibile combinare questi tre metodi a seconda della modalità di funzionamento del computer. Risparmiare energia significa anche che il sistema si riscalda di meno e le ventole vengono attivate con minore frequenza.

Adattamento della frequenza e della tensione

PowerNow! e Speedstep sono utilizzati da AMD e Intel per questa tecnologia, che viene applicata anche nei processori di altri produttori. La frequenza dell'orologio della CPU e il relativo voltaggio principale vengono ridotti nello stesso momento, consentendo un risparmio maggiore dell'energia lineare. Ciò significa che quando la frequenza viene dimezzata (prestazione a metà), il consumo di energia è molto inferiore alla metà. Questa tecnologia è indipendente da APM o ACPI. Sono disponibili due metodi per l'esecuzione dell'adattamento alla frequenza della CPU: il kernel stesso o un'applicazione userspace. Pertanto, è possibile impostare diversi governor del kernel che è possibile impostare in /sys/devices/system/cpu/cpu*/cpufreq/.

userspace governor

Se si imposta il governor di userspace, il kernel fornisce il controllo dell'adattameto della frequenza della CPU in un'applicazione di userspace, generalmente un daemon. Nelle distribuzioni di SUSE questo daemon è incluso nel pacchetto powersaved. Quando si utilizza questa implementazione, la frequenza della CPU viene adattata in base al carico del sistema corrente. Per impostazione predefinita, veine utilizzata una delle implementazioni del kernel. Tuttavia, componenti hardware oppure driver o processori specifici supportano ancora solo l'implementazione userspace.

ondemand governor

Questa è l'implementazione kernel delle norme dinamiche della frequenza della CPU e funziona su quasi tutti i computer. Quando il carico del computer è elevato, la frequenza della CPU aumenta immediatamente e si abbassa quando il carico del computer diminuisce.

conservative governor

Il governor è simile all'implementazione ondemand, purché non vengano utilizzate norme più conservative. Il carico del computer deve rimanere alto per un periodo di tempo elevato prima che la frequenza della CPU aumenti.

powersave governor

La frequenza della cpu viene staticamente impostata sul valore più basso possibile.

performance governor

La frequenza della cpu viene staticamente impostata sul valore più alto possibile.

Throttling della frequenza dell'orologio

Questa tecnologia omette una determinata percentuale di impulsi del segnale orario per la CPU. Con un valore di 25% del throttling, viene omesso un impulso su quattro. Con un valore di 87,5%, solo un impulso su otto arriva al processore. I risparmi energetici sono tuttavia poco inferiori rispetto all'energia lineare. Il throttling viene utilizzato di norma soltanto se non è disponibile l'adattamento della frequenza oppure per ottimizzare i risparmi energetici. Anche questa tecnologia deve essere controllata con un processo speciale. L'interfaccia del sistema è /proc/acpi/processor/*/throttling.

Mettere il processore nello stato sleep

Il sistema operativo mette il processore nello stato sleep durante un periodo di inattività e invia alla CPU un comando halt. Gli stati sono tre: C1, C2 e C3. Nello stato più economico, C3, viene arrestata anche la sincronizzazione della cache del processore con la memoria principale. Questo stato può essere applicato, quindi, soltanto se nessun altro dispositivo modifica il contenuto della memoria principale tramite attività del bus master. Alcuni driver impediscono l'utilizzo dello stato C3. Lo stato corrente viene visualizzato in /proc/acpi/processor/*/power.

L'adattamento della frequenza e il throttling sono importanti solo se il processore è occupato poiché lo stato economico C viene applicato in ogni caso quando il processore è inattivo. Se la CPU è occupata, si consiglia di utilizzare l'adattamento della frequenza come metodo di risparmio energetico. Di solito il processore lavora soltanto con un carico parziale. In questo caso, è possibile utilizzarlo con una frequenza inferiore. In genere, l'adattamento della frequenza dinamico controllato dal governor ondemand del kernel o da un daemon, ad esempio powersaved, è l'approccio migliore. L'impostazione statica su una frequenza bassa è utile per il funzionamento a batteria oppure se il computer deve restare freddo oppure in modo silenzioso.

Utilizzare il throttling solo se indispensabile, ad esempio, per estendere il tempo di funzionamento a batteria nonostante un elevato carico del sistema. Alcuni sistemi tuttavia non funzionano correttamente se vengono sottoposti a throttling in modo eccessivo. Inoltre, il throttling della CPU non risulta utile se la CPU ha un'attività ridotta.

In SUSE Linux queste tecnologie vengono controllare dal daemon powersave. La configurazione è spiegata nella Sezione 33.5, "Il pacchetto powersave".

33.3.3. Strumenti di ACPI

La gamma di utilità più o meno complete di ACPI comprende strumenti che visualizzano semplicemente informazioni quali ad esempio il livello di carica e la temperatura della batteria (acpi, klaptopdaemon, wmacpimon, ecc.), strumenti che facilitano l'accesso alle strutture in /proc/acpi oppure offrono supporto per il monitoraggio delle modifiche (akpi, acpiw, gtkacpiw) e strumenti per la modifica delle tabelle di ACPI nel BIOS (pacchetto pmtools).

33.3.4. Risoluzione dei problemi

Esistono due diversi tipi di problemi. Il codice ACPI del kernel potrebbe contenere errori che non sono stati rilevati in tempo. In questo caso, verrà resa disponibile una soluzione da scaricare. Si verifica più spesso che i problemi siano causati dal BIOS. A volte, le deviazioni dalla specifica ACPI sono integrate appositamente nel BIOS per aggirare gli errori nell'implementazione di ACPI in altri sistemi operativi diffusi. I componenti hardware con gravi errori nell'implementazione di ACPI sono registrati in una lista nera che impedisce al kernel di Linux di utilizzare ACPI per questi componenti.

In caso di problemi si consiglia innanzitutto di aggiornare il BIOS. Se il computer non si avvia, si consiglia di utilizzare uno dei seguenti parametri di avvio:

pci=noacpi

Non utilizzare ACPI per la configurazione dei dispositivi PCI.

acpi=oldboot

Eseguire soltanto una semplice configurazione delle risorse. Non utilizzare ACPI per altri scopi.

acpi=off

Consente di disabilitare ACPI.

[Warning]Problemi di avvio senza ACPI

Alcuni computer recenti (in particolare i sistemi SMP e AMD64) richiedono ACPI per la configurazione corretta dell'hardware. Su altri computer, se ACPI viene disabilitato possono sorgere dei problemi.

Controllare i messaggi di avvio del sistema con il comando dmesg | grep -2i acpi (oppure tutti i messaggi poiché il problema potrebbe non essere causato da ACPI) dopo l'avvio. In caso di errore durante l'analisi di una tabella ACPI, è possibile sostituire la tabella principale – la DSDT – con una versione migliorata. In questo caso, la tabella difettosa del BIOS viene ignorata. La procedura è descritta nella Sezione 33.5.4, "Risoluzione dei problemi".

Nella configurazione del kernel, è presente un commando per attivare i messaggi di debug di ACPI. Se viene compilato e installato un kernel con la funzione di debug di ACPI, gli utenti esperti che cercano un errore trovano supporto con informazioni dettagliate.

In caso di problemi con il BIOS oppure con l'hardware, si consiglia di rivolgersi sempre ai produttori. Specialmente se non offrono sempre assistenza per Linux, dovrebbero affrontare questi problemi. I produttori prendono seriamente il problema solo se realizzano che un numero considerevole dei loro clienti utilizza Linux.

33.3.4.1. Ulteriori informazioni

Documentazione aggiuntiva e guida su ACPI: