Home Wiki > Archive:S2ram
Sign up | Login

Archive:S2ram

tagline: De openSUSE

s2ram - Cómo hacer funcionar el modo S3 (suspender a RAM)


El objetivo del binario s2ram es echar a andar el modo de suspensión en RAM en tantas máquinas como sea posible.

Importante

El paquete se denomina suspend o uswsusp y viene instalado de forma habitual en la mayoría de las distribuciones.

Si tu versión de s2ram no cuenta con todas las opciones descritas en este documento, intenta obtener una versión más reciente, por ejemplo desde http://suspend.sf.net o aquí.

Las opciones -m y -v han sido añadidas recientemente.

¿Qué hay detrás?


Suspend to RAM funciona ya en muchos tipos de máquinas - lo que significa que la máquina despierta y reanuda las operaciones, el teclado funciona y el disco duro es accesible - pero para que funcionen el video y la iluminación retroactiva, necesitarás echar mano de algún que otro truco. Existen algunas soluciones alternativas para esto:

  • pasar acpi_sleep=s3_bios al kernel.
  • pasar acpi_sleep=s3_mode al kernel.
  • pasar ambos (acpi_sleep=s3_bios,s3_mode) al kernel.
  • despertar la tarjeta de video desde userspace después de la reanudación usando vbetool.
  • obtener el número de modo de video antes de la suspensión y configurar el mismo número después de la reanudación usando vbetool.
  • guardar el estado VBE antes de suspender y restaurarlo después de la reanudación usando vbetool.
  • guardar el estado de configuración PCI de la tarjeta VGA antes de suspender y restaurarlo después de la reanudación.

A partir del kernel 2.6.16, el parámetro acpi_sleep puede cambiarse en tiempo de ejecución (sin necesidad de reiniciar) en /proc/sys/kernel/acpi_video_flags, usando "1" para s3_bios, "2" para s3_mode y "3" para ambos. Puedes encontrar más información sobre estos hacks en el kernel-source (que se instala normalmente en /usr/src/linux) en el archivo Documentation/power/video.txt.

Hay máquinas que no despertarán cuando uses framebuffer. Por ejemplo, modelos recientes de Dell y HP entran a menudo en esta categoría.
Puedes deshabilitar el framebuffer en la configuración de tu cargador de arranque pasando al kernel el parámetro "vga=0". La configuración para grub puedes encontrarla habitualmente en /boot/grub/menu.lst. Si tu máquina sólo trabaja sin framebuffer, por favor háznoslo saber en tu informe.

Si ninguno de los métodos aquí descritos te funcionan, es importante comprobar si la máquina está completamente muerta durante la reanudación o se trata sólo del video, que no logra despertar de forma apropiada. Una forma rápida de comprobarlo es arrancar con un sistema mínimo (init=/bin/bash), ejecutar s2ram -f, y luego despertar el sistema, cuando el monitor esté aún apagado, comprobar si la tecla de bloqueo de mayúsculas funciona (habrá un LED en el teclado que lo indique). Si es así, entonces más bien se trata de un problema en la inicialización del video. Si no, entonces casi con toda propabilidad será un problema de la BIOS o un bug en el kernel de Linux.

¿Por qué s2ram?


  • El uso de vbetool para guardar el estado VBE no es simple: tienes que volcar el estado de la tarjeta a un archivo temporal, antes de suspender, y restaurarlo desde allí después de reanudar. Claro que puedes encapsular todo esto en un script, pero tenerlo en un binario es aún más simple.
  • Necesitas saber si tu máquina requiere de algún tipo de solución específica y de qué se trata. s2ram contiene una base de datos de las máquinas en las que funciona y las soluciones que estas máquinas necesitan, por lo que si tu máquina está soportada, la suspensión será tan sencilla como ejecutar "s2ram"

OK, ¡basta de charla!¡Empecemos!


¿Dónde conseguirlo?

s2ram forma parte del proyecto suspend Enlace en inglés albergado en sourceforge, y hay paquetes disponibles para varias distribuciones.

¿Cómo usarlo?

Instálalo, y simplemente ejecuta s2ram. Si tu máquina está en la lista, debería suspenderse en RAM. Aún así ten cuidado, algunos drivers no soportados necesitan ser descargados antes de la suspensión y recargados después de la reanudación. Si sólo quieres saber si tu máquina es conocida y que solución se le aplica (si los hay), entonces ejecuta s2ram -n.

S2ram también viene incluido en las últimas compilaciones de powersaved Enlace en inglés: si el paquete suspend está instalado, powersaved comprueba antes del arranque (usando s2ram -n) si la máquina es capaz de suspenderse en RAM y dependiendo del resultado habilita o deshabilita el botón de "Suspender".

Mi máquina no está en la lista, ¿qué hago?

Encuentra qué solución es necesaria para tu máquina (si es que la hay), y luego comunícanoslo, junto con la salida de s2ram -i.

Las posibles soluciones pueden ser pasadas como parámetros a s2ram:

seife@susi:~> s2ram -h
Usage: s2ram [-nhi] [-fspmrav]

Options:
    -h, --help:       this text.
    -n, --test:       test if the machine is in the database.
                      returns 0 if known and supported
    -i, --identify:   prints a string that identifies the machine.
    -f, --force:      force suspending, even on unknown machines.

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

Las opciones deberían ser lo suficiente autoexplicativas. Ten en cuenta que necesitas usar el parámetro -f en todas las máquinas definidas como desconocidas, y luego añadir las opciones adecuadas. La opción -a necesita un número como argumento adicional, de 1 a 3, para espacificar s3_bios, s3_mode o ambos.

La mejor forma de empezar a investigar en una máquina desconocida es sin duda arrancar con init=/bin/bash en el menú de arranque, y luego hacer:

# mount /proc
# mount /sys
# s2ram -f

Si el primer intento ya funciona, todo va bien. Envíanos la salida de s2ram -i (lee ¿Cómo contactar con los autores de s2ram?). Si no, intenta las siguientes variaciones:

  • s2ram -f -a 1
  • s2ram -f -a 2
  • s2ram -f -a 3
  • 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

Si ninguna de estas combinaciones te funcionan, empieza de nuevo pero añadiendo el parámetro "-v".

Nota: Normalmante es una medida de último recurso mezclar las opciones "-a" con las opciones vbetool ("-p", "-m", "-s"), ya que en condiciones normales carece de sentido. Una excepción a esta norma se da con los últimos ThinkPads de 64bit, a los que les suele funcionar "-a 1 -m" en modo 64bit (x86_64).

Una de estas combinaciones debería devolver tu máquina a la vida (y encender la retroiluminación).
Una vez encuentres una combinación que funcione, envíanosla junto con la salida de s2ram -i. Si encuentras varias combinaciones funcionales (por ej. "s2ram -f -a 3" y "s2ram -f -p -m" y ambas funcionan en tu máquina), el método in-kernel ("-a") sería preferible al método userspace ("-p", "-m" and "-s").

Si encuentras una combinación correcta, comprueba por favor que funciona en estos dos casos antes de enviarnos tu informe:

  • cuando lanzas s2ram desde la consola.
  • cuando lanzas s2ram desde una sesión X.

Es normal que se pierda el contenido de la consola después de usar "-p" y "-m", con framebuffer puedes resolver esto fácilmente, cambiando una vez de consola. Aunque para esto podría funcionar mejor la opción "-s", aún así sería preferible usar "-m" si es que funciona.

Ten en cuenta que realmente deberías intentar todo esto desde un modo de consola de texto mínimo. De funcionar así, un informe de este tipo resultaría más útil que cualquier otro probado sólo desde una sesión X. No te encontrarás con efectos adversos como apagados inmediatos después de la restauración provocados por demonios de administración de energía activados.

Todo funciona bien, pero la retroiluminación de mi máquina permanece encendida durante la suspensión

Si tu máquina tiene un chip gráfico Radeon y la iluminación no se apaga durante la suspensión, intenta añadir el parámetro "-r" a tu propia combinación. Se sabe que esto funciona con los ThinkPads de la serie '30 (T30, X31, R32,... ). Si no tiene un chip gráfico Radeon, esta opción no tiene sentido.

Mi máquina está en la lista pero no funciona, ¿qué puedo hacer?

Hay ciertas coincidencias en la lista de máquinas, y es posible que haya coincidencias entre máquinas que son diferentes a las testeadas originalmente. El procedimiento es el mismo que en "Mi máquina no está en la lista, ¿qué hago?": descubre qué opciones necesita tu máquina en particular y envíanos esta información junto con la salida de s2ram -i, así podremos actualizar la lista convenientemente.

¿Cómo contactar con los autores de s2ram?


Envía un correo a la lista de correo suspend-devel en suspend-devel@lists.sourceforge.net. Si por alguna razón no funciona, crea entonces un informe de errores en https://bugzilla.novell.com, incluso aunque no uses openSUSE (simplemente clasifica el bug con la versión más reciente de openSUSE, componente "Mobile Devices"). Si escribes directamente a mi correo, seife @ suse.de, tu correo podría perderse en mi desmesurada bandeja de entrada, aparte de que la lista de correo o el bugzilla proporciona habitualmente tiempos de respuesta más rápidos y de gente más enterada.

Pruébalo sin instalar nada

Sitsofe Wheeler descubrió que muchas máquinas pueden comprobarse sin instalar nada, simplemente usando el DVD Live de openSUSE. Enlace en inglés

Paquetes actualizados para varias distribuciones


SUSE / openSUSE

Puedes encontrar paquetes actualizados en el Buildservice project de Stefan Seyfried's Enlace en inglés, en http://software.opensuse.org/download/home:/seife o directamente en openSUSE Factory. El paquete se denomina "suspend". Para las últimas versiones, podrías requerir el paquete libx86, que también está disponible ahí mismo.

Debian

Tim Dijkstra mantiene los paquetes debian (llamados uswsusp). Disponibles en http://packages.debian.org/unstable/admin/uswsusp

Otros

Si sabes de paquetes actualizados para otras distribuciones, ten la amabilidad de actualizar este artículo o notifícamelo en la lista de correo suspend-devel, para que yo pueda hacerlo.

Integración en otros proyectos (o "¿Cómo hacer funcionar los botones de la GUI?")


openSUSE 10.2+ / pm-utils

openSUSE 10.2 y posteriores, así como otras distribuciones recientes, usan las pm-utils Enlace en inglés como marco para la suspensión. Las variables ahí explicadas pueden ser usadas para configurar s2ram.

Powersave

s2ram está integrado en la última versión de powersaved Enlace en inglés, que tiene algunas variables de configuración que te permitirán seleccionar las opciones necesarias si tu máquina no está aún en la lista de máquinas soportadas. Están explicadas aquí Enlace en inglés.

SUSE 10.1

SUSE 10.1 usa powersaved Enlace en inglés, por lo que te servirán las variables de configuración explicadas aquí Enlace en inglés para encontrar una solución.

Consejos prácticos


Estos son algunos trucos y consejos que he descubierto cuando intentaba encontrar la manera de suspender en RAM ciertas máquinas. Úsalos con precaución ;-)

Chipsets gráficos Intel

Las máquinas que incorporan chipsets gráficos Intel suelen funcionar con "s2ram -f -a3", incluso cuando usan vesafb framebuffer. Si esto no te va (por ejemplo con máquinas Dell), también suele funcionar "s2ram -f -p -m".

Los drivers más nuevos de Intel Xorg parecen presentar problemas con la opción "-s" (VBE_SAVE), usa en su lugar "-m" (VBE_MODE) en estos casos. Echa un vistazo aquí https://bugzilla.novell.com/show_bug.cgi?id=229603 . En general VBE_MODE es preferible a VBE_SAVE.

Chipsets gráficos ATI

Últimamente muchas máquinas que he probado y que incorporaban un chipset gráfico ATI Radeon no funcionaron con framebuffer (a menudo se colgaban a nivel BIOS, y ni siquiera el Bloq de mayúsculas les funcionaba cuando tratabas de despertarlas). En estos casos solían funcionar bien con "vga=0" en el arranque y "s2ram -f -p -m" o "s2ram -f -p -s".

Chipsets gráficos NVidia

Después de unos pocos pasos en particular una máquina con tarjeta NVidia debería funcionar con "s2ram -f". Mira aquí las instrucciones detalladas: NVidia Suspend HOWTO. Enlace en inglés

Problemas APIC

He visto muchas máquinas últimamente para las que necesité desactivar APIC en la línea de comadnos del kernel con "noapic", de lo contrario no había forma de despertarlas luego o se comportaban de manera extraña al despertarse (interrupciones que no funcionaban, etc.), esto es algo que habría que investigar. Esto no debería ser necesario con kernels recientes, openSUSE 10.2 ya no debería necesitar esto.

¡La máquina se apaga inmediatamente después de reanudarse!

s2ram es principalmente una herramienta de sistema a "bajo nivel". Para usarlo en entornos reales de producción, deberías incorporarlo en tu configuración de administración de energía mediante, por ejemplo, su inclusión en tus scripts acpid (para poder lanzar la suspensión al pulsar el botón de sleep). Si estás usando alguna distribución que use powersave Enlace en inglés, lee por favor esta página. Enlace en inglés

Esto debería estar solucionado ya en kernels superiores a la versión 2.6.20, por lo que este tipo de soluciones no deberían ser necesarias.

¡No abandones!

A veces, echar a andar la suspensión en RAM no resulta tan sencillo como nos gustaría. Si te gustaría leer un ejemplo acerca de lo que la gente ha tenido que pasar, lee el siguiente informe en Bugzilla. Winfried es mi héroe :-) También resulta muy importante saber si la máquina se despierta de la suspensión en RAM dejando el display apagado o si está completamente colgada. Mírate el artículo ACPI_Suspend_debugging Enlace en inglés para encontrar instrucciones de cómo hacerlo.