SDB:Sospensione su RAM

L'obiettivo dell'eseguibile s2ram (abbreviazione di suspend to ram) è di far sì che la sospensione su RAM del sistema funzioni, senza interventi esterni, sul maggior numero di macchine possibile.
Si fa notare che la whitelist di s2ram cui si fa riferimento nell'articolo è deprecata e non più mantenuta. Si prega di non inviare ulteriori dettagli sulle macchine ai maintainer dell'elenco. Utilizzare, invece, un kernel con driver KMS, con il quale la sospensione dovrebbe funzionare fin da subito. Qualora non dovesse essere così, segnalare un bug relativo al kernel Linux.


Provato su openSUSE Articoli consigliati Articoli correlati
Icon-checked.png

Icon-manual.png Icon-help.png
Se hai già scoperto quali sono le opzioni per il tuo computer, potresti voler andare direttamente alla pagina sulle Pm-utils.

Introduzione

Il programma s2ram è fornito dal pacchetto suspend

La sospensione su RAM è già funzionante su molte macchine - il che vuol dire che il computer si riprende dalla sospensione e torna ad essere operativo, la tastiera è funzionante e il disco rigido è di nuovo accessibile - ma per avere il video nuovamente funzionante, assieme alla retro-illuminazione di nuovo accesa, dovrai ricorrere all'uno o all'altro di questi "sporchi trucchi". Esistono diversi modi per aggirare il problema:

  • fornire il parametro acpi_sleep=s3_bios al kernel
  • fornire il parametro acpi_sleep=s3_mode al kernel
  • fornire entrambi i parametri suddetti (acpi_sleep=s3_bios,s3_mode) al kernel
  • fare il POST della scheda video dallo spazio utente, dopo l'uscita dalla sospensione, utilizzando vbetool
  • recuperare il codice numerico della modalità video prima della sospensione e impostare la stessa modalità video alla ripresa delle attività della macchina, utilizzando vbetool
  • salvare lo stato attuale delle estensioni VBE prima della sospensione per poi ripristinarlo alla ripresa delle attività della macchina, utilizzando vbetool
  • salvare lo spazio di configurazione PCI della scheda VGA prima della sospensione e ripristinarlo dopo il risveglio della macchina.

A partire dal kernel 2.6.16, è possibile impostare il parametro acpi_sleep mentre il sistema è in esecuzione (senza che sia necessario riavviare) in /proc/sys/kernel/acpi_video_flags, a "1" per s3_bios, "2" per s3_mode e "3" per entrambe le modalità. Ulteriori informazioni sugli hack descritti qui sopra sono disponibili nel pacchetto kernel-source (i sorgenti del kernel, di solito installati in /usr/src/linux), in particolare nel file Documentation/power/video.txt.

Esistono macchine che, quando si sta usando una console al framebuffer, non sono in grado di riprendersi dalla sospensione. Modelli recenti prodotti da Dell e HP, per esempio, ricadono spesso in questa categoria.
Il framebuffer può essere disabilitato nella configurazione del gestore di avvio (anche noto come bootloader), fornendo il parametro "vga=0" al kernel. La configurazione di grub è spesso salvata nel file /boot/grub/menu.lst.
Se il tuo computer funziona soltanto senza framebuffer, ti preghiamo di inviarci una segnalazione, dettagliata, del problema.

Nel caso in cui nessuno dei metodi descritti sopra pare che funzioni, è importante controllare se la macchina risulti completamente bloccata alla ripresa dalla sospensione, o se invece soltanto il comparto video non venga riattivato correttamente. Un buon metodo per eseguire questo controllo consiste nell'avviare con un sistema minimale (per mezzo di init=/bin/bash), eseguire s2ram -f e, dopo la ripresa della macchina dalla sospensione, mentre lo schermo è ancora spento, controllare se il tasto "Caps Lock" sia ancora funzionante (dovresti vedere una reazione da parte del LED associato al Caps Lock, sulla tastiera). Se è così, ovvero il tasto reagisce, molto probabilmente si tratta davvero di un problema di inizializzazione del comparto video. Se al contrario non reagisce, allora è assai probabilmente un problema legato al BIOS, oppure c'è un bug nel kernel Linux.


Perché s2ram?

  • operare con vbetool per salvare lo stato delle VBE non è facile: prima della sospensione, è necessario riversare lo stato della memoria della scheda in un file e poi ripristinarlo dallo stesso file dopo l'uscita della macchina dalla sospensione. Naturalmente tutto ciò può essere ottenuto con uno script che faccia da wrapper per vbetool, ma avere la funzionalità già implementata in un file binario eseguibile è ancora più semplice.
  • è necessario conoscere se la propria macchina ha bisogno di una soluzione di ripiego (o workaround) e di quale soluzione necessita. s2ram contiene un database di macchine per le quali è noto che la sospensione funziona, assieme ai workaround da mettere in pratica per le rispettive macchine. Perciò, se il proprio computer è supportato, per attivare la sospensione basta semplicemente invocare "s2ram".

Utilizzo di s2ram

Una volta installato, basta lanciare l'eseguibile

s2ram

Se la tua macchina è inclusa nella whitelist, dovrebbe direttamente effettuare la sospensione su RAM. Presta tuttavia attenzione che alcuni driver con problemi rimossi dalla memoria prima di avviare la sospensione, e ricaricati dopo l'uscita della macchina dalla sospensione stessa. Se desideri sapere se la tua macchina è fra quelle segnalate come funzionanti con la sospensione, è quali workaround (se necessario) verranno applicati, ti basta il comando

s2ram -n

S2ram è anche integrato nelle versioni più recenti di powersaved: se il pacchetto suspend è installato, powersaved controlla all'avvio (usando s2ram -n) se la macchina è in grado di sospendere su RAM e, a seconda del risultato, abilita o disabilita il "pulsante di sospensione".


Risoluzione dei problemi

Il mio computer non è in whitelist, cosa posso fare?

È sufficiente che determini quale soluzione di ripiego (o workaround) è necessaria per la tua macchina (qualora sia necessaria), e che ci rendi partecipi dell'informazione, assieme all'output del comando

s2ram -i

I workaround si possono attivare utilizzando s2ram dalla riga di comando:

marek@mantisha:~> /usr/sbin/s2ram -h
Usage: s2ram [options]
  -h, --help            this text.
  -V, --version                         version information
  -n, --test            test if the machine is in the database.
  -i, --identify        prints a string that identifies the machine.
  --nofbsuspend         do not suspend the framebuffer (debugging only!).
  --force               force suspending, even on unknown machines.

The following options are only available with --force:
  --vbe_save            save VBE state before suspending and restore after resume.
  --vbe_post            VBE POST the graphics card after resume.
  --vbe_mode            get VBE mode before suspend and set it after resume.
  --radeontool          turn off the backlight on radeons before suspending.
  --pci_save            save the PCI config space for the VGA card.
  --acpi_sleep <acpi_sleep>     set the acpi_sleep parameter before suspend
                        1=s3_bios, 2=s3_mode, 3=both

Le opzioni dovrebbe risultare sostanzialmente auto-esplicative. Nota che ti sarà necessario usare l'opzione -f in tutti i casi di modelli di computer sconosciuti, e aggiungere successivamente i workaround appropriati. L'opzione -a richiede un argomento numerico aggiuntivo, compreso tra 1 e 3, per specificare la modalità s3_bios, quella s3_mode, o entrambe.

Il modo migliore per iniziare ad indagare su una macchina non nota è, probabilmente, di avviare il sistema, con l'opzione di boot init=/bin/bash alla schermata di avvio, in un ambiente di base, e poi lanciare:

mount /proc
mount /sys
s2ram -f

se il primo tentativo va già a buon fine, è tutto a posto. Inviaci l'output di s2ram -i e non dimenticarti di riportare che il semplice s2ram -f è stato sufficiente anche dalla modalità testo (vedi #Come contattare gli autori di s2ram?). Se non funziona, prova le seguenti varianti:

  • s2ram -f -a 3
  • s2ram -f -a 2
  • s2ram -f -a 1
  • s2ram -f -p -m
  • s2ram -f -p -s
  • s2ram -f -m
  • s2ram -f -s
  • s2ram -f -p
  • s2ram -f -a 1 -m
  • s2ram -f -a 1 -s

Se non nessuna di queste combinazioni funziona, prova ancora aggiungendo però lo switch "-v".

Nota: mischiare le opzioni "-a" con quelle di vbetool ("-p", "-m", "-s") normalmente è soltanto una misura da adottare come ultima risorsa, e che di solito non ha molto senso. L'unica eccezione a questa regola sembra valere con i più nuovi ThinkPad a 64 bit, che spesso funzionano solo con "-a 1 -m", quando usato in modalità a 64 bit (kernel e sistema x86_64).

Una di quelle stringhe dovrebbe sperabilmente permettere al tuo computer di ritornare attivo dopo la sospensione (con la retro-illuminazione di nuovo attivata). Una volte che hai trovato una combinazione che funziona, inviaci quell'informazione assieme all'output di s2ram -i. Se trovassi più combinazioni che funzionano (p.es. "s2ram -f -a 3" e "s2ram -f -p -m", entrambi funzionanti sulla tua macchina), il metodo in spazio kernel (in-kernel, opzione "-a") sarebbe da preferire rispetto al metodo in spazio utente (userspace, opzione "-p", "-m" e "-s").

Qualora riuscissi a trovare una combinazione che funziona, verificare per favore che funzioni in entrambi i seguenti casi prima di inviare una notifica di successo agli sviluppatori di s2ram:

  • quando si lancia s2ram da console
  • quando si lancia s2ram dallo stesso X

È normale che il contenuto mostrato dalla console testuale vada perso dopo aver usato "-p" e "-m", nella console del framebuffer questo può essere facilmente risolto scambiando una volta le console in uso. Benché questo potrebbe comportarsi meglio con "-s", tuttavia l'opzione "-m", qualora funzioni, dovrebbe essere quella da preferirsi.

Nota: Dovresti davvero provare questo metodo da una console minimale in modalità testo. Ricevere l'informazione che il tutto funziona in quella modalità è, infatti, assai più utile di sapere che il tutto è andato a buon fine ma, provando solo nell'ambito di X. Inoltre non incorri così negli effetti collaterali negativi legati all'esecuzione dei demoni per la gestione energetica, come lo spegnimento della macchina subito dopo l'uscita dalla sospensione.

Se hai scoperto le opzioni più appropriate per il tuo computer e desideri usare s2ram fin da subito, leggi en:SDB:Pm-utils#Configuration.

Funziona tutto, ma la retro-illuminazione dello schermo resta accesa durante la sospensione

Se il tuo computer monta una scheda grafica Radeon e l'illuminazione dello schermo non viene spenta durante la sospensione, prova ad aggiungere lo switch "-r" alla tua combinazione di parametri per attivare le varie opzioni di sospensione. Questo metodo è noto per essere utile con la serie '30 dei ThinkPad (T30, X31, R32,... ). Se, invece, la tua macchina non ha un chip grafico Radeon, non ha senso usare questa opzione.

La mia macchina compare in whitelist ma non funziona, cosa posso fare?

Nella whitelist in alcune righe sono presenti alcuni caratteri jolly (o metacaratteri), ed è quindi possibile che corrispondano a computer di modello diverso da quelli che, in origine, era stato accertato che funzionavano, con i vati test elencati. La procedura da seguire è la stessa di quella descritta nel paragrafo "Il mio computer non è in whitelist": scopri di quali opzioni ha bisogno la tua specifica macchina e inviaci questa informazione assieme con l'output di s2ram -i, così da consentirci di aggiornare la whitelist di conseguenza.


Come contattare gli autori di s2ram?

In breve: non devi. Leggi per favore il riquadro in cima alla pagina: s2ram è deprecato e non verranno aggiunte nuove macchine alla whitelist. Usa piuttosto le whitelist di HAL / upower / pm-utils.


Eseguire le prove senza installare nulla

Su molte macchine è possibile eseguire le prove senza installare nulla, semplicemente usando i supporti live.


Suggerimenti utili

These are just the "Tips and Tricks" that i found out when trying to get machines to suspend to RAM. Use with caution ;-)

Chipset grafici Intel

Le macchine dotate di chipset grafici Intel spesso funzionano con "s2ram -f -a3", anche quando si sta usando il framebuffer vesafb. Se "s2ram -f -a3" non funziona (per esempio con computer di Dell), spesso "s2ram -f -p -m" funzionerà senza problemi.

Pare che più recenti driver di Xorg per Intel abbiano problemi con "-s" (VBE_SAVE), per cui si dovrebbe utilizzare "-m" (VBE_MODE), sempre che non sia del tutto impossibile con quei driver. Vedere https://bugzilla.novell.com/show_bug.cgi?id=229603 . Parlando in generale, VBE_MODE è da preferirsi a VBE_SAVE.

Chipset grafici ATI

Molte macchine dotate di chipset grafici ATI Radeon con cui ho ultimamente avuto a che fare non funzionano con nessun framebuffer (di solito si bloccano dopo il caricamento del BIOS, e, provando a risvegliare la macchina dalla sospensione, non funziona neppure il tasto "blocco maiuscole"). Sono spesso risultati funzionare con "vga=0" e "s2ram -f -p -m" or "s2ram -f -p -s".

L'IBM/Lenovo T60p (2613ETU) con FGLRX sembra in grado di sospendere/uscire dalla sospensione correttamente, mentre è in esecuzione X, con S2RAM_OPTS="-f -a 1 -s". Né le opzioni predefinite di s2ram, né di hal, funzionano a dovere.

Chipset grafici nVidia

Ritornare ad una sessione grafica con X, dopo aver sospeso su ram il computer, spesso non andrà a buon fine, quando si stanno usando i driver opensource nv, dato che non si conosce ancora il modo per reinizializzare le schede NVIDIA. Dopo alcuni passaggi ad hoc, una macchina con scheda video NVidia dovrebbe funzionare con "s2ram -f", quando si usano i driver proprietari (quelli disponibili solo in formato binario). Si vedano istruzioni dettagliate in questa pagina: en:SDB:NVidia Suspend HOWTO.

Problemi con APIC

È capitato ultimamente di imbattersi in numerosi computer in cui era necessario disabilitare l'APIC, alla riga di comando del kernel, all'avvio, con "noapic", in altro modo non erano in grado di risvegliarsi dalla sospensione, oppure dopo la ripresa dalla sospensione mostravano un comportamento anomalo (timer interrupt non più in esecuzione, ecc.), quindi di tratta di una soluzione che conviene provare. Non dovrebbe più essere necessaria con i kernel recenti, già con openSUSE 10.2 non dovrebbe più essere necessaria.

Problemi connessi ai driver di VirtualBox

La sospensione può bloccarsi se è caricato vboxdrv, per aggirare il problema tali driver devono essere fermati prima di avviare la sospensione (con rcvboxdrv stop). Per rendere l'operazione automatica si può creare uno script in /etc/pm/sleep.d/ come questo, per esempio.

Il computer si spegne subito dopo l'uscita dalla sospensione!

s2ram è principalmente una utilità di sistemo di "basso livello". Per usarlo effettivamente in ambienti "di produzione", dovresti integrarlo nella configurazione della gestione energetica approntata per la tua macchina, p.es. nei tuoi script per acpid (sono per esempio in grado di attivare la procedura di sospensione alla pressione dell'omonimo tasto di sleep sulla tastiera). Se stai usando una distribuzione che si serve di powersave, allora dovresti leggere la pagina: en:SDB:Powersave_s2ram.

Il problema dovrebbe essere corretto almeno dal kernel 2.6.20 in avanti, per cui non dovrebbero più servire soluzioni di ripiego (workaround).

Riavvio di schede PCI

Dopo la sospensione alcune periferiche (esempio: schede di rete wireless) potrebbero non essere riattivate correttamente.

Non arrenderti!

A volte, riuscire ad avere la sospensione su RAM funzionante non è così immediato come tutti vorremmo. Nel caso in cui tu volessi disporre di un esempio delle difficoltà che alcuni hanno dovuto affrontare, leggi la seguente segnalazione da Bugzilla. Inoltre è assai importante sapere se la macchina si riprende dallo stato di sospensione su RAM, ma lascia "soltanto" lo schermo spento, o se invece si blocca completamente. Vedi l'articolo sul debugging della sospensione con ACPI per avere istruzioni su come scoprirlo.


Vedere anche


Collegamenti esterni