Ubuntu Server: Suspend/Hibernate/Resume Call for Testing!

February 26, 2009

Late last week, Mark announced the next Ubuntu release, Karmic Koala. Mark noted that:

the best way to conserve energy is to go to sleep,
and these days even servers can suspend and resume,
so imagine if we could make it possible to build
a cloud computing facility that drops its energy use
virtually to zero

In December of 2008, I asked what you thought about suspending and hibernating Ubuntu Servers. While the “poll” wasn’t unanimous, the overwhelming majority of you thought it might actually be useful in some situations.

It’s not too early to start looking at this feature for Karmic. So I spent some time last week testing this, and I must say that I’m impressed with the very preliminary results. I was able to install the Ubuntu Jaunty Server on my hardware, both suspend and hibernate the system from the command line, and then remotely resume the system using wake-on-lan.

Impressively, my test system’s power consumption is reduced by ~80% while in the suspended state, and can wake in ~5 seconds!

My test hardware is actually a desktop kit system (Asus P1-AH2, AMD x2 5800, 4GB, nVidia), running the Jaunty amd64 server.

At this point, I’m quite interested in gathering any feedback from the Ubuntu Server community on their experience suspending/hibernating/resuming the Jaunty Server on whatever hardware they might have. Here are some detailed instructions…

Server BIOS Setup

Check your BIOS for any relevant settings:

  • Make sure that wake-on-lan is enabled. This setting takes a variety of names in different BIOS implementations.
  • Make sure that low-power states are enabled (my bios had a setting for “S1 & S3” power states). Again, this may be labeled differently, but should be something along the lines of “Advanced Power Management”.

Server OS Setup

Install Ubuntu Jaunty Server (i386 or amd64).

Install pm-utils and ethtool, both of which are now on the Jaunty Server CD.

  • sudo apt-get install pm-utils ethtool

Configure your network interface to wake-on-lan.

  • sudo ethtool -s eth0 wol g

I want this setting persistent across reboots, so I put this in /etc/rc.local.

Obtain the MAC address of your server, such that you can send the wake-on-lan magic packet from another system.

  • ifconfig eth0 | head -n1 | sed ‘s/^.*HWaddr //’

First, let ensure that wake-on-lan is working. Power this system down.

  • sudo poweroff

From another system, install the wakeonlan package.

  • sudo apt-get install wakeonlan

And send the magic packet to the MAC address you obtained earlier.

  • wakeonlan 00:11:22:33:44:55

If your server powers itself on, congratulations, wake-on-lan is working. If not, you need to get this working before you proceed further.

Once the server is back up, test suspend. Launch a program to run in the background, to ensure that the resume restored this state. And then run the pm-suspend command

  • screen top
  • (new window in screen-profiles)
  • sudo pm-suspend

Make sure that the system enters a lower power state. On my machine, the hard drives stop spinning, as well as the cdrom drive, cpu fans, case fans, etc. I tested resume twice, once by hitting the power button, and once by sending the wakeonlan signal.

  • wakeonlan 00:11:22:33:44:55

Then, test hibernate in a similar manner.

  • pm-hibernate

And

  • wakeonlan 00:11:22:33:44:55

Make sure that your context was saved, and the system is still running ‘screen top‘ or whatever you chose to run.

Automated Testing

Next, I ran the automated test-suspend script developed by Andy Whitcroft on the Ubuntu Kernel team. I sent him a minor patch that tailored it a bit better for server testing. For details, see:
https://wiki.ubuntu.com/KernelTeam/SuspendResumeTesting

  • wget http://people.ubuntu.com/~apw/suspend-resume/test-suspend
  • sudo bash test-suspend --full --server

And I recorded my results at:
https://wiki.ubuntu.com/KernelTeam/SuspendResumeTesting/Feedback/Server
noting that this machine (Asus P1-AH2) was running the Ubuntu Server.

Do you have a server running Jaunty? Would you care to share your results?

:-Dustin

11 Responses to “Ubuntu Server: Suspend/Hibernate/Resume Call for Testing!”

  1. Jef Spaleta Says:

    I dare say the reason why your initial testing worked on that asus rig might be due in some part to the existing work being done as part of the distro-neutral upstream hal project at freedesktop.org. I’m pretty sure I’ve seen other Canonical employees participating in that distribution-neutral upstream effort in the past contributing quirk fixes.

    You might want to consider contributing your server oriented testing scripts back up to the existing upstream hal quirk effort if you haven’t already.
    http://people.freedesktop.org/~hughsient/quirk/index.html

    It would be a real shame if Canonical’s new focus on fixing the minority of hardware not already accounted for in the year+ of upstream hal-info work didn’t make it back upstream.

    -jef

  2. Dustin Kirkland Says:

    Jef-

    It works on my Asus P1-AH2 due to:
    * http://patchwork.kernel.org/patch/6704/
    by Andy Whitcroft (Canonical Kernel) and myself.

    Of course, this work has been pushed to the upstream kernel.

    The test script is also GPLv2:
    * http://people.ubuntu.com/~apw/suspend-resume/test-suspend

    It is being pushed into the checkbox project:
    * https://launchpad.net/checkbox
    * https://launchpad.net/ubuntu/+source/checkbox

    Cheers,
    :-Dustin

  3. Dustin Kirkland Says:

    That particular piece of hardware (Asus) required a kernel tweak for resume to totally work.

    I expect we’ll find plenty more hiccups as we test this more comprehensively.

    In each case, I totally expect that we’ll develop the patch against the Ubuntu kernel, and feed it upstream immediately upon verification.

    :-Dustin

  4. oei Says:

    Afraid I haven’t any test-hardware currently to help with this, but wanted to suggest that it could be nice to also test wake-on-RTC capabilities.

    Let’s say you want your server to be up only during office hours or perhaps rather only for nightly backups; having it wake-up without any prodding over the LAN would be convenient for that.

    My home box has an Intel mainboard that doesn’t even show this feature in the BIOS menu, but it works when set from within the OS! I actually learned about that on the Ubuntu wiki: https://help.ubuntu.com/community/MythTV/Install/WhatNext/ACPIWake

  5. Jef Spaleta Says:

    Cool a comprehensive testing effort.
    Launchpad is going to collect the test results?

    Do you have the interaction defined on how would an upstream project developer will be able to pull relevant checkbox results out of lp?

    -jef

  6. Panamint Joe Says:

    That’s interesting. I’ve been thinking about acquiring or building a low-power server solution for the home, something that idles at less than 15 watts, equivalent to two night-light bulbs. Do you have any numbers yet on power consumption in hibernate state vs. full operation for your setup?

  7. Schwuk Says:

    Jef,

    As well as producing a local report, Checkbox feeds its results into Launchpad, which processes, stores, and soon will display them.

    Right now the only way to extract the data from Launchpad is to use the API, and that is primarily focused around extracting hardware data although it will expand.

    There are some samples in development for using launchpadlib to access the information in Launchpad.

  8. Dustin Kirkland Says:

    Joe-

    I have a “Watts Up” watt-meter here that I’ve used for some testing. Note that I am also using cpu frequency scaling, which helps quite a bit, even on a running system. Here’s what I’m seeing (your mileage may vary):

    Running system (loaded): 85W
    Running system (idle): 55W
    Suspended system: 11W
    Hibernated system: 8W
    Powered off system: 8W

    :-Dustin

  9. Rob Frohne Says:

    Hi Dustin,

    I have been working on doing this for a lab full of headless servers (Dell GX270 boxes). I have been able to make them wakeup on unicast activity from suspend (it takes about 5 seconds) by echoing the correct interface name to /proc/acpi/wakeup and by using ethtool to set wol to ug. This is handier than havint to use a magic packet to wake on lan the computers. To the users it is transparent.

    I am now struggling with how to make them suspend on lack of unicast network activity or something else appropriate. I would be interested in any tips you or your readers have.

    I believe that making Ubuntu servers wake and sleep on lack of unicast network activity is well worth doing. I have a P4 at home that uses 220 watts (only the box) and only about 4 watts in suspend. At our electricity rates (7.8 cents/kwh) I could potentially save almost $150 a year in electricity. At the University where I work, we have nearly 1000 computers on campus, and folk tend to leave them running so they don’t have to wait for boot up and so they don’t have to set up their favorite applications again to where they left off the day before. So for our school alone, if we were able to make this work, it would be perhaps $100,000 a year, which is significant in terms of saving wasted energy as well.

    Wouldn’t it be great if Ubuntu was a leader in this area?

    Best Regards,

    Rob Frohne

  10. Antonio Says:

    Hi Dustin,

    I’m trying to get this working on my home server (not a clean Jaunty install, but an Intrepid install recently upgraded to Jaunty). When I execute pm-suspend I get absolutely nothing: no error message as well as no effect. My hardware is an old IBM board with i810 chipset and PIII 800MHz processor. Can you suggest how to start debugging?

    Thank you and regards.
    Antonio.

  11. Panamint Joe Says:

    Antonio, find out first if your motherboard has the Wake-on-LAN feature and, if so, whether /any/ operating system released at the time the hardware was produced was able to put the machine into sleep or hibernate mode. If the motherboard doesn't have a built-in Ethernet connector, chances are that it doesn't support Wake-on-LAN, either. It sounds like it comes from an era (mid- to late 1990s) when few hard drives supported spin-down and spin-up commands. Power management in large integrated circuits for desktop systems also didn't start becoming a burning issue (pardon the pun) until the Pentium IV appeared on the scene, or thereabouts.


Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: