Comment 97 for bug 508516

Revision history for this message
Seth Forshee (sforshee) wrote :

@jim_charlton:

The original bug report is referencing suspend-to-RAM (S3), not hibernate. Issues with hibernate need to be the topic of a separate bug report.

The hang during resume from S3 happen during a callback to the BIOS via SMI during execution of the ACPI _WAK control method. The SMI handler appears to be waiting for an interrupt from the HPET timer. When the kernel is in tickless mode or is using highres timers the HPET doesn't have an event pending when the _WAK method executes, and the SMI handler doesn't return control back to the kernel until the HPET counter wraps around back to the value previously programmed into the match register, which takes 5 minutes.

With nohz/highres disabled, the HPET is in periodic mode during resume from S3 and thus is generating interrupts on a periodic basis, which makes the delay in the SMI handler minimal. Another interesting data point is that if you boot with nohpet on the command line, the machine never finishes resume from S3.

This is pretty clearly an issue being caused by the BIOS since it's happening in an SMI handler. The nohz=off highres=off will increase power consumption to some degree by not letting the CPU idle as much and not allowing it to hit deeper C-states, but as David notes the effect isn't that significant and imho is better than the alternative. Coincidentally keeping the CPU out of deeper C-states fixes the performance problems on these machines, as these occur anytime the CPU is allowed to idle deeper than C1 (you can demonstrate this by passing intel_idle.max_cstate=1, but again this issue isn't really the topic of this bug).