POWER · SIX SHORT SECTIONS · SYNTHETIC VALUES
Do the work.
Earn the idle.
Wake correctly.
Power management changes how a machine does work, waits, and wakes up. A CPU can be idle while a device stays busy. A successful request can arrive before the change it asked for. This guide follows those differences with small diagrams, Windows and Linux observations, and a step-by-step return from sleep to the desktop.
Synthetic teaching diagrams · No access to your hardware. A browser animation cannot detect your power state, graphics clock, firmware state or Wake-on-LAN capability. Controls edit a draft: press Apply and restart to run it, and the lesson figures then show that one run. Explore the PC and the mailbox lesson keep their own runs.
Every figure uses six words for evidence, in this order: supported (advertised or documented), requested (software asked), accepted (the interface answered; what that means is interface-specific), modeled applied (the teaching model reached a state), observed (a named source sampled it over a known interval) and conclusion (supported, contradicted or cannot be established). Missing, stale and unsupported values are never zero.
Explore the PC: change what it does, then ask it to rest
A shop at night: the till can be quiet while the delivery door is still busy. Below is one modeled desktop. Change PC activity and watch which parts stay busy. Then Request a power change and see it enter, or see the exact rule that says no. Selecting a part only shows it; buttons act. A display turned off is not sleep, a core that is idle does not make the package idle, and a link carrying traffic keeps the package awake in this declared model.
Synthetic example machine, not detected from yours. The older, longer lessons and labs are on the reference page. Controls need JavaScript; the diagram and state list below read without it.
X3 · ACPI desktop with s2idle and deep
- Description: ACPI
- Sleep: s2idle and deep; deep maps to S3 in this profile; s2idle does not prove S0i3
- Hibernate and full shutdown: configured
- Wake inputs: power button
- Residency source: none
Try an experiment
Pick one and read the question. The PC starts fresh and nothing runs yet. Choose a prediction if you like (or skip), press Run, then watch the events.
- Nothing is running
Processor and memory
Graphics
Network and storage
Selected: CPU package
Shared CPU/SoC domain. Now: active.
Requested: no · Eligible: yes · Entered: no · Observed: none (no hardware)
Requested, eligible and entered are separate. Residency is not measured: this model has no clock.
Why package deep idle may be blocked
- PASS No core has runnable work (cores idle)
- PASS The GPU pipeline is idle (idle)
- PASS The attached link may idle (L1 allowed)
What we can know
- GPU clock: not sampled yet
- Hardware residency: not applicable here
- Verification job: not run
- Idle desktop: S0 working, nothing running.
Event 0 of 0, X3, S0 working: Idle desktop: S0 working, nothing running.
Predict: start a download, then request package deep idle. What blocks it, and does turning the display off help?
The download keeps the NIC receiving, so the link stays in L0, and this profile's package guard needs an idle link. Turning the display off does not touch that dependency. Stop the download and the guards pass. Cores were idle all along.
The power states, and what this machine can do with each
| State | What it means | What is kept | In this machine |
|---|---|---|---|
| S0 working | The system runs. Cores idle and devices sleep on their own inside it. | everything | supported |
| S0 low-power idle | The OS quiesces and the platform idles in intervals (Windows Modern Standby, Linux s2idle). Only Modern Standby lets allowed background activity continue; s2idle freezes userspace. | session in RAM, OS quiesced between wakeups | supported |
| S0i3 / S0ix | A platform-specific hardware idle label inside S0. Not an ACPI state, not S3, and never a button: it is a residency observation. | platform-specific | reference-only |
| S1 / S2 | Legacy ACPI sleeping states; the context kept differs by platform. | platform-specific | reference-only |
| Suspend to RAM (S3, Linux deep, PSCI) | Work stops, RAM stays powered, a wake restores devices. On ACPI x86 this is S3; on Arm it is the platform's own suspend. | session in RAM | supported |
| S4 hibernation | The session image is written to storage; RAM power is not needed. | image on storage | supported |
| S5 / full shutdown | Soft off. The next use is a boot, not a continuation. | nothing of the session | supported |
| G3 mechanical off | Power removed at the machine; no software wake path. | nothing | reference-only |
| Linux s2idle | Freezes userspace and idles the platform, still running the OS; no platform suspend is needed. | session in RAM | supported |
| Linux deep (mem_sleep) | The suspend-to-RAM route, where the platform exposes it: S3 on ACPI x86, PSCI system suspend on Arm. | session in RAM | supported |
| Windows Modern Standby (PoFx, PEP) | Windows S0 low-power idle on a platform that declares it. | session in RAM | unavailable |
| Windows hybrid sleep | S3 plus a hibernation image, so a power loss during sleep is recoverable. No profile here declares it. | RAM and storage | unavailable |
| Windows Fast Startup | Looks like a shutdown to the user, but the kernel state is hibernated; the user session is not kept. | kernel image only | unavailable |
| CPU idle (C states, PSCI idle) | The modeled light and deep idle. x86 names (C1, C2, C3) and Arm platform idle names are not interchangeable. | varies | supported |
| Performance control (P states, CPPC, SCMI) | Active performance, a separate axis from idle. Not a deeper sleep and not a voltage command. | not applicable | reference-only |
Reference-only rows are explained, not simulated. S0i3 and S0ix are a platform's own hardware idle labels inside S0, never a synonym for S3. Sources: Microsoft system power states, Linux sleep states, ACPI 6.6. Hibernate here assumes the example machine has hibernation set up; a real one needs swap or a hibernation file. Arm64 profiles use their own vocabulary and never inherit x86 labels: Linux Device Tree and ACPI systems use PSCI for CPU idle and optional system suspend, and Windows on Arm uses Modern Standby with platform-defined idle names. Sources: Arm PSCI, Arm SCMI, Modern Standby, Intel S0ix terminology.
Compare: the same scenario on two machines, or your run against a baseline
Two machines can answer the same request differently, and the names they report differ too. Pick a scenario, two example machines and a boundary to line them up at. A column that cannot run the scenario says why instead of quietly doing something else.
| X1 · Traditional ACPI S3 desktop | X3 · ACPI desktop with s2idle and deep | Differs | |
|---|---|---|---|
| Architecture and OS | x86-64 · windows | x86-64 · linux | differs |
| Firmware description | ACPI | ACPI | same |
| System | S0 working | S0 working | same |
| CPU cores | executing a compile | executing a compile | same |
| Package | active | active | same |
| GPU | D0, engines idle | D0, engines idle | same |
| Display | on | on | same |
| NIC | D0, idle | D0, idle | same |
| PCIe link | L1 | L1 | same |
| RAM | powered, contents retained | powered, contents retained | same |
| Storage | idle | idle | same |
| Queued work | none | none | same |
| Hardware residency | not applicable here | not applicable here | same |
| GPU clock sample | not sampled yet | not sampled yet | same |
| Capability example | powercfg /a | /sys/power/state and /sys/power/mem_sleep | differs |
| Wake report example | powercfg /lastwake | power/wakeup_count of the device | differs |
16 rows shown; 3 differ. These are model runs, not measurements.
Capability and wake-report rows are examples of what each OS offers, from this model run. Nothing here measured your computer, and "same machine" is only claimed where the declared capabilities match.
1 Work, power, energy and time
Think of a car trip. A faster car arrives sooner, but may burn more fuel for the same trip. Voltage is the electrical potential difference that pushes charge; current is the charge flowing; power is the rate energy is used; energy is power accumulated over time; frequency is clock cycles per second. Clock gating stops selected switching, while power gating changes a domain's supply. Neither is the same as keeping its state, which is retention. Below, three fictional points each finish the same 100 units of correct work: speed is only worth something when the work is right.
Selected A. Predict: which finishes first, which uses less energy?
| A | B | C | |
|---|---|---|---|
| Frequency (normalized) | 0.5 | 0.75 | 1 |
| Voltage (normalized) | 0.6 | 0.7 | 0.8 |
| Time | 10 | 7 | 6 |
| Average power | 4 | 6 | 9 |
| Energy = power × time | … | … | … |
| Correct work | yes | yes | yes |
Predict: which point finishes first, and which uses the least energy?
C finishes first (6 units against 10 for A), and A uses the least energy (40 against 54). Lower watts alone cannot establish lower energy for a job of a different duration. Work rate is 100 divided by time, not the frequency on the axis.
Advanced: what a plot like this cannot say
- Dynamic switching power is often explained as proportional to activity × capacitance × voltage² × frequency. That is limited intuition for one kind of loss: not whole-system power, not a safe voltage, and not an AMD interface.
- Leakage, unmodeled domains and the workload itself change real results. Declare the measurement boundary before comparing energy.
- Points A, B and C and their times and powers are invented teaching values, not fitted to hardware. Real systems expose operating points (voltage and frequency pairs) through abstractions such as the Linux operating performance points (OPP) library; this plot is not one.
What this is based on: Linux OPP library, TI CMOS power note. Neither supplies the fixture numbers. Evidence type: teaching model.
2 Asking for a power change is not getting it
Order a pizza. The shop says "got it", then makes it, then it arrives. Each is a separate fact, and only the last one is on your table. Power management is the same: policy or client intent → supported driver or interface → firmware or controller → domain behavior → observation. That is an explanatory relationship, not a claim that every Windows or Linux operation uses one mailbox. RSMU is used here as Remote System Management Unit, an expansion supplied by this guide's author; no public source for a specific platform is cited, so treat it as unconfirmed.
- Policy or client intentYou place the order
what software asked for - Driver or interfaceThe shop says "got it"
the interface answered - Firmware or controllerThe kitchen makes it
may refuse or delay - Domain behaviorIt leaves the kitchen
the hardware changes state - ObservationIt reaches your table
a named counter or sample
| 1 Request | 2 Accepted | 3 Modeled effect | 4 Observation | |
|---|---|---|---|---|
| Intent | request B | |||
| Interface | accepted | |||
| Modeled effect | B applied | |||
| Observation | sample B [fresh] | |||
| Conclusion | inconclusive | inconclusive | inconclusive | supported |
Event 4 of 4, Observation: A sample is taken after the change, over a known interval. Conclusion: supported. A fresh sample shows B, as requested.
These events belong to the operating-point request phase before sleep; their sample is separate from the post-wake window.
Predict: when "accepted" appears, what can we conclude?
Only what this model's response contract says. A fresh observation has not arrived. In the timeout preset the request was already sent, so the effect is unknown, not "nothing happened": resending blindly could run it twice.
Advanced: serialization, timeouts and late replies
- Timing out before dispatch leaves the target untouched; timing out after dispatch does not. The older five-trace firmware lesson shows both, plus a late reply read as the wrong answer and an "ok" with no effect.
- Local run IDs in this page organize the display. They do not prove correlation in a protocol that carries no request ID. Callers must serialize requests that share one interface.
- Distinct public examples with different contracts: the community
ryzen_smuproject, Linux's AMD PMC driver,amd-pstate, the server-only HSMP interface and AMD-SMI. None is an official universal mailbox, and none proves how RSMU is laid out on a given Ryzen.
What this is based on: Linux AMD PMC driver, v6.12, Linux amd-pstate, Linux HSMP (server), AMD-SMI overview, Community ryzen_smu. Evidence type: teaching model, with scoped public implementations.
RSMU and the mailbox: how a request reaches firmware
A hotel front desk with a pigeonhole. You do not walk into the kitchen: you write your request on a slip, put it in the pigeonhole, ring the bell and wait for the answer slip. Firmware that manages power on a Ryzen chip is reached the same way, through a small mailbox of registers: a message register (the bell), an argument register and a response register. RSMU is used in this guide for Remote System Management Unit, a name the guide's author supplied and no cited source confirms. The pattern below is the public one; the numbers are invented.
Client (a driver)
▶ Client acts
Mailbox registers
- message (the doorbell)
- 0x00
- argument
- 0x00
- response
- 0x01
Firmware (management controller)
waiting
Client: Poll the response register until it is nonzero. Zero means firmware is still working on something.
- Client: Wait for the last command
- Client: Clear the response
- Client: Write the argument
- Client: Write the command ID
- Firmware: Reads the mailbox and acts
- Firmware: Writes the response
- Client: Read the result
Step 1 of 7. Client: Wait for the last command. Poll the response register until it is nonzero. Zero means firmware is still working on something.
Predict: the response says OK for a power-limit request. Was the limit changed?
The firmware took the command; that is all OK says. The effect is a separate fact that needs its own read, which is the request lesson in section 2, shown on a mailbox. Turn on "A second client, no lock" to see OK come back for a value you did not ask for.
Predict: no response ever arrives. Is it safe to send the command again?
No. The doorbell was already rung, so the command may have run. Sending it again could run it twice. Linux reports this as a timeout, not as "nothing happened".
The response codes
| Value | Meaning | Linux amd_pmc maps it to |
|---|---|---|
| 0x01 | OK | success |
| 0xFC | REJECTED, BUSY | EBUSY |
| 0xFD | REJECTED, PREREQUISITE UNMET | EIO |
| 0xFE | UNKNOWN COMMAND | EINVAL |
| 0xFF | FAILED | EIO |
| 0x00 | WAITING (no answer yet) | no mapping: the poll times out (ETIMEDOUT) |
Advanced: what is public, and what is not
- The steps follow the Linux
amd_pmcdriver'samd_pmc_send_cmd()(v6.12): lock, poll the response register until nonzero, write 0 to it, write the argument, write the message ID, poll the response again, then map the code (busy toEBUSY, unknown toEINVAL, prerequisite or failure toEIO) and read the argument register for returned data. That driver talks to the platform's PMFW mailbox, which is not necessarily the same mailbox as RSMU. - The result table is the community
ryzen_smuproject's. It also separates RSMU from MP1 mailboxes and exposesrsmu_cmd,smu_argsand an SMN read and write file. It is community work, not an AMD specification. - Not established here: any Ryzen's real register addresses, command IDs, argument layout or timing. Command IDs
0x02,0x14and0x7F, the 15000 and 25000 limits and the firmware version are invented for teaching. - The page never touches a mailbox. Writing unknown commands to real management firmware can hang or misconfigure a machine.
What this is based on: Linux AMD PMC driver, v6.12, Community ryzen_smu. Evidence type: public driver source and community documentation, with an invented teaching model.
3 Which part is asleep? Power states by layer
A house has a "away" mode, a light in each room and a pump in the basement. Saying "it is off" is meaningless until you say what. A computer is the same: S states describe the system, C states a processor idling, P states active performance (modern CPPC, Collaborative Processor Performance Control, uses an abstract scale instead), D states one device and L states a PCIe link. Residency is time actually spent in a state, from a named source. Z is vendor terminology. They are scopes, not rungs of one "deeper sleep" ladder, and they coexist: a running S0 system can have an idle CPU and an active NIC.
- SThe whole house
system: powercfg /a, /sys/power/mem_sleep - COne room's light
processor idle: cpuidle residency - PHow hard a worker works
active performance: cpufreq, CPPC - DOne appliance
a device: runtime_status - LThe pipe to it
a PCIe link: ASPM
System · ACPI S states
- Plain meaning
- S0 is the working state; a supported low-power idle system can spend time in very low-power conditions and still be in S0. S3 is a separate sleep path where the platform supports it.
- Example evidence
- Windows
powercfg /a; Linux/sys/power/mem_sleep. - Does not prove
- That any state was reached.
CPU activity · P states and CPPC
- Plain meaning
- Performance while the CPU is working. Modern CPPC interfaces use an abstract performance scale and may not expose a simple ladder of P states.
- Example evidence
- Linux cpufreq policy and scaling driver (for example
amd-pstate). - Does not prove
- A voltage, or an exact delivered frequency: a performance request is not a voltage command.
CPU idle · C states
- Plain meaning
- Processor idle states. Core and package observations are labeled separately.
- Example evidence
- Linux cpuidle counters;
turbostathardware columns. - Does not prove
- That an OS idle-state name is a directly measured hardware residency.
CPU package · residency
- Plain meaning
- How long the whole package spent in a package idle state: observed separately from any one core.
- Example evidence
- A named counter with its units and interval.
- Does not prove
- That the GPU, NIC or system were also idle.
GPU and NIC · device D states
- Plain meaning
- Each device has its own power state. D3hot (power kept) and D3cold (power removed) differ and matter only in advanced reading.
- Example evidence
- Linux
power/runtime_status(runtime PM status, not a direct reading of the hardware D state); Windows traces. - Does not prove
- The state of the whole system.
PCIe connection · link states
- Plain meaning
- The state of the link between two ends: a separate fact from either end.
- Example evidence
- Link power-state reports where exposed.
- Does not prove
- That the endpoint, package or system is asleep.
Vendor platform · Z terminology
- Plain meaning
- Platform-specific. The one sourced example is the Ryzen 7040 public Z8 overview: AMD's public presentation names Z8 a deep low-power state.
- Example evidence
- That presentation, page 15.
- Does not prove
- A universal Z0 to Zn ladder, a control interface, or equivalence with S0i3. Other families and numbers are unknown until sourced.
Predict: if one CPU enters idle, must the GPU, NIC and whole package follow?
No. Each scope has its own state; they share some dependencies (a package cannot idle while a core is busy) but there is no universal dependency graph. A chosen idle state is also not a measured residency.
State of what? Name the scope first; then ask what evidence belongs to it.
S0 low-power idle, zoomed in
Three names are often blurred. Windows S0 low-power idle (Modern Standby) and Linux suspend-to-idle (s2idle) are
operating-system paths. A platform hardware low-power state (sometimes called S0i3) is a hardware result in that platform's own terms. S0i3 is not an ACPI system state. Entering the OS path does not prove the hardware got there.
Windows route: Modern Standby / S0 low-power idle
Linux route: suspend-to-idle (s2idle)
Hardware result: measured residency, if exposed
Platform term: S0i3 or another scoped label
Separate alternative: S3, only on systems that support it. It is a sibling of S0 low-power idle, never the next stage.
Four evidence examples: capability, OS path and residency
| Example | Capability | OS path | Residency | What you may say |
|---|---|---|---|---|
| Capability only | supported | not shown | unavailable | The platform offers it. |
| OS transition recorded | supported | entered | unavailable | The OS took that path. The hardware result is unknown. |
| Valid residency delta | supported | entered | observed over a known interval | The hardware spent that time in low power, in that source's terms. |
| Nothing exposed | unknown | unknown | unavailable | Nothing yet. |
Predict: does seeing s2idle selected prove S0i3 was reached?
No. It identifies the OS mechanism; achieved platform residency needs its own evidence. On Windows, a capability listing does not show that a particular session spent time in deepest idle.
Advanced: naming and platform limits
- Screen off, CPU idle, system suspended and hardware reaching its target are four different claims.
- ACPI names system, processor and device states; vendor names such as Z or S0i3 map to them only per platform and source. This guide gives no universal translation table.
- OS version, firmware and platform change what is supported and reported; Windows and Linux lifecycles and reports are not interchangeable.
What this is based on: ACPI 6.6 concepts, Linux system sleep states, Linux CPUIdle, Linux CPU performance scaling, Microsoft Modern Standby, Modern Standby SleepStudy, AMD Ryzen 7040 Hot Chips 2023, page 15. Evidence type: public specification and documentation; the diagrams are teaching drawings.
4 Watching a workload: what the evidence can show
A doctor does not diagnose from one number. Pick the claim, then pick the measurement that can settle it, over the same time window for every lane. Idle may include short background wakeups. Video can keep a media engine busy while the 3D engine rests. Graphics work raises demand on its engines. Bursty work alternates activity and idle. These are possible patterns, not guaranteed transitions or fixed frequencies, and CPU use alone does not decide a P, C or Z state. A failed wake means no post-wake window. After a successful wake, this example's NIC guard can withhold the selected job's CPU and engine fixture while an independent clock sample remains; idle background activity is not a completed job.
| Evidence | What a real source would give | Status |
|---|---|---|
| CPU work | utilization over the window | valid |
| CPU idle | OS idle-state accounting delta (not hardware residency) | valid |
| GPU / media engine | media engine activity, provider-defined metric | valid |
| GPU clock | a reported value with its domain and sample age | valid |
| System / device idle | session report or runtime status; not derived from CPU use | supported |
| Result | work completed + elapsed time (+ energy only with a valid boundary) | supported |
A media engine can be busy while the CPU and 3D engine stay light.
Linux: /sys/power/mem_sleep, cpuidle counters, runtime_status, suspend_stats.
A read-only checklist (six steps)
- Name the workload and the observation interval.
- Check which sleep and device capabilities this machine exposes.
- Keep policy and selected OS paths apart from achieved residency.
- Compare activity and counter deltas over the same interval, with elapsed time.
- Check that work completed correctly after wake, and note which devices you actually tested.
- Write "unknown" instead of a plausible number.
Predict: which observation would settle each claim?
- "The package reached a low-power idle state."
- A residency delta from a named counter over the same interval. CPU use does not decide it.
- "The GPU ran at the requested clock."
- A fresh clock sample with its domain and sample age. A busy engine is not a frequency, and a clock drop without a named limiter does not prove thermal throttling.
- "The video played correctly."
- The work's completion result and elapsed time, not an idle counter.
Advanced: Windows, read-only
Record OS version, hardware scope, provider, time window and unavailable fields. Needing elevation or a missing interface is a normal outcome, not an error to hide.
powercfg /alists available sleep states and why others are unavailable. It does not show what a session reached.powercfg /requestsshows active power requests: clues about activity, not a full list of what blocks sleep.powercfg /lastwakeandpowercfg /devicequery wake_armedare different evidence: the reported last wake, and which devices are armed. Neither proves every Wake-on-LAN packet would wake the machine.- SleepStudy and the system sleep diagnostics write a local report on supported systems; they do not change the power plan. Keep each report's labels and intervals as they are, and check the elevation and platform notes in the current documentation.
- Task Manager's CPU, GPU and per-engine views are a starting point. Utilization, nominal speed or one clock sample is not residency, instantaneous frequency or voltage, and media, 3D and compute engines are different measures.
- For timelines, the optional WPR Power profile and WPA align CPU idle states, device D states and platform idle states. Collecting starts instrumentation, writes a trace, adds overhead and needs elevation. A short trace is not a battery-life claim.
- For an AMD graphics example, the ADLX interface offers
TimeStamp,GPUClockSpeedandGPUVRAMClockSpeed; checkIsSupportedGPUClockSpeedfirst. It is one vendor API, not a Windows built-in or a voltage readout.
Advanced: Linux, read-only
Nothing here suspends the machine or writes a control. Some reads need root; do not mount debugfs, install modules or change permissions to get them.
/sys/power/stateand/sys/power/mem_sleepshow exposed mechanisms and the selectedmemvariant. Brackets mark the selection, not residency.- cpuidle's per-CPU state names, usage and time are the driver's exported counters and OS accounting. Compare valid before and after deltas; they are not measured package residency.
- cpufreq policy names the scaling driver.
amd-pstateuses CPPC abstractions: there is no universal conversion from its performance values to a voltage or an exact delivered frequency. - A device's
power/runtime_status, where exposed, is runtime PM. Runtime suspend is not system suspend and does not show a physical rail state. - Kernel logs around a sleep show OS lifecycle events and some errors. A clean log does not show deepest residency or working devices.
- On supported systems
/sys/power/suspend_stats/last_hw_sleepreports achieved hardware sleep time for the last cycle; use that kernel's documented units. turbostat --listshows available columns. Its softwareC1%andC2%are not the hardwareCPU%c*andPkg%pc*counters, andBzy_MHzandAvg_MHzmean different things. Sampling adds overhead, so state it.- GPU metrics depend on provider and device. On supported AMDGPU devices find the right DRM device and hwmon node:
freq1_inputis graphics frequency in Hz andfreq2_inputmemory frequency in Hz, where exposed.gpu_metricsis a versioned binary snapshot that needs a matching decoder. Keep device, scope and sample age; do not borrow another vendor's fields. - User-space sampling can stop during suspend and heavy polling disturbs idle. Do not draw a "live" clock through sleep without a real source.
The page never runs a command, reads your devices or sends diagnostics. Creating a report or trace on your own machine is a different step from reading a value, and you decide whether to do it.
What this is based on: Powercfg reference, Modern Standby SleepStudy, WPA Modern Standby analysis, ADLX GPU metrics, Linux system sleep states, Linux CPUIdle, Linux AMD debugging, turbostat v6.12 manual, AMDGPU monitoring. Evidence type: public documentation. The traces on this page are invented.
5 Waking from sleep to the desktop, step by step
Waking a hotel at dawn: the lobby lights come on, the kitchen starts, and the guests' doors unlock, but not all at once and not in a fixed order. Here the lanes are the system, the CPU, the GPU and display, the GPU's clock reading and the NIC. Pick an example and press Next step, reading across: each lane keeps its own known state. A visible desktop shows a working display path, not that every engine or every device is validated.
This example makes the NIC a prerequisite for the workload. Readiness allows submission; a checked result shows completion.
Linux · suspend-to-idle (s2idle) · woken by: local button press. Teaching order: lanes may overlap, and no timing between unrelated devices is implied.
| Lane | Prepare | Quiet | Wake event | Restore | Desktop (now) |
|---|---|---|---|---|---|
| System | Request sleep | Stays in S0, low-power idle | Local button press | Resuming | Interactive |
| CPU | Finish work | Idle | Runs wake and OS work | Resumes | Runs the workload |
| GPU / display | Pause activity | Retained or low power (varies) | Waits for the OS | Restore what this path lost; driver readies display | Presents the desktop |
| GPU clock | Last valid sample | No valid sample | No valid sample | New sample, if the source reports one | Fresh value when demand returns |
| NIC | No wake arming needed | Wake-capable state, if armed | Not the wake source | Restore device state | Ready for traffic |
| Work gate | Open | Closed | Closed | Closed until the readiness guard | Open |
| Evidence | Intent recorded | Residency observed? (own evidence) | Wake-source report, if any | Per-device readiness | Correct work, checked |
Linux names, scoped: the system-sleep device PM phases (suspend, resume) are a separate path from runtime PM (runtime_suspend, runtime_resume, power/runtime_status).
Step 5 of 5, Desktop. System: Interactive. NIC: Ready for traffic. Work gate: Open. Evidence: Correct work, checked.
Predict: the OS is awake. Can we reopen this device's work queue?
Not yet. Pick "Workload device not ready (NIC)": the work gate stays closed until the device's readiness guard is met. A missing observation never becomes a guess that lets work through.
Advanced: graphics, ordering and OS names
- The GPU may be quiescent, clock-gated, in a device low-power state or retained, depending on platform and path. Clocks during low power are often unavailable to an observer, so the lane says "unavailable", never 0 MHz. After resume the driver restores what that path lost, and demand-based clocks can change again as the desktop draws.
- This is a teaching partial order, not a cycle-accurate resume protocol. Steps can overlap, and a retained domain needs no restoration. No fixed order between unrelated devices is implied.
- Windows names, scoped: system and device power states, driver power management, and for KMDF/UMDF drivers EvtDeviceD0Exit and EvtDeviceD0Entry. Those two concern one device leaving or entering D0, not a universal GPU or system wake sequence.
- Linux names, scoped: the system-sleep device PM phases (suspend, resume) are a separate path from runtime PM (runtime_suspend, runtime_resume, power/runtime_status).
A small Wake-on-LAN branch
Eligibility is a chain of separate questions. The first one not answered "yes" stops what you can conclude. Nothing here sends a packet, enables Wake-on-LAN or touches a NIC.
- Did a packet reach the NIC? yes
- Is wake supported for this NIC, platform and sleep path? yes
- Is wake configured and armed, with the power it needs retained? yes
- Was a wake observed? yes
- Does the wake report name the source? yes
A wake was observed and the report names a match. The NIC still has to be ready before ordinary traffic.
Predict: does "wake armed" prove this packet woke the machine?
No. Arming is configuration evidence. The observed wake and its reported source are separate, and the system can wake before its NIC is ready for ordinary traffic. A Modern Standby background wake can leave the display off.
- Microsoft's Wake-on-LAN notes cover wake from S3 or hibernate, and say hybrid shutdown (fast startup) disarms the NIC. Whether wake works from low-power S0 depends on platform, OS and driver. None is promised, and this guide observes support; it does not configure it.
- Read-only on Linux:
ethtoolfollowed by the interface name shows supported and current wake settings. It does not show that a packet woke anything. Do not use its set options, and never publish a SecureOn password from its output.
What this is based on: Linux device power management, Linux runtime PM, Power management framework, Modern Standby versus S3, Windows Wake-on-LAN notes, Linux ethtool WoL interface. Evidence type: public documentation; this timeline is a teaching model.
6 What can we conclude from the evidence?
A courtroom does not convict on "he said he would". Here the claim is the target was achieved and useful work resumed. The run is the one you set in sections 2 to 5: its request, wake and readiness choices carry over, so a blocked wake can never read as resumed work. Predict, press Compare, and read the strongest statement the evidence allows. A contrary sample stays visible, a stale one stays inconclusive, and a check nobody ran stays unresolved.
Claim: The target was achieved, and useful work resumed
| Before | After | Conclusion |
|---|---|---|
| capability listed | response accepted | insufficient alone |
| request for B sent | modeled applied B | model-only statement |
| request-phase sample before sleep | fresh sample B | observation supports B |
| workload not run yet | 100 of 100 model units correct in 1000 ms | this work resumed |
| no network-card or DMA check | check unavailable | broader claim unresolved |
supported: B was observed and this work resumed. Nothing broader is established.
Predict: an OS wake, a visible desktop and a working device operation: same evidence?
No. Each answers a different question. The after-wake lesson shows why a repair acknowledgement and a real, valid operation differ.
Advanced: after the wake, and the source index
- The after-wake lesson keeps the Linux DMA and NIC positive-probe case: a control or translation acknowledgement and a valid post-wake operation answer different questions, and the denied request must still be denied. It is a browser fixture, not a Linux driver test. Background: PCIe DMA and the DMA journey.
- The evidence packet, idle policy comparison and counter exercise are optional detail on the reference page.
- Missing, stale and contradictory data are first-class results. A model pass is not hardware validation or standards compliance.
Evidence type: teaching model. The record you can download is synthetic, its events are model ticks and its run IDs are local.
Sources
Public sources establish concepts and behavior within their own scope. None supplies this page's invented values or shows the state of your hardware. A generic source cannot establish a particular Ryzen platform's RSMU layout, its complete Z mapping, achieved S0i3 residency, an exact GPU clock or Wake-on-LAN support.
- ACPI 6.6 concepts public specification
- Linux system sleep states public documentation
- Linux CPUIdle public documentation
- Linux CPU performance scaling public documentation
- Linux amd-pstate public documentation
- Linux device power management public documentation
- Linux runtime PM public documentation
- Linux powercap public documentation
- Linux OPP library public documentation
- Linux AMD PMC driver, v6.12 public implementation
- Linux HSMP (server) public documentation
- Linux AMD debugging public documentation
- turbostat v6.12 manual public documentation
- AMDGPU monitoring public documentation
- Linux ethtool WoL interface public documentation
- TI CMOS power note public documentation
- Microsoft Modern Standby public documentation
- Modern Standby versus S3 public documentation
- Powercfg reference public documentation
- Modern Standby SleepStudy public documentation
- WPA Modern Standby analysis public documentation
- Power management framework public documentation
- Microsoft system power states public documentation
- Windows Wake-on-LAN notes public documentation
- Arm PSCI specification public specification
- Arm SCMI specification public specification
- Intel S0ix states public documentation
- ADLX GPU metrics public documentation
- AMD Ryzen 7040 Hot Chips 2023, page 15 public presentation
- Community ryzen_smu community implementation
- AMD-SMI overview public documentation
Glossary
- Voltage
- Electrical potential difference.
- Current
- Charge flow.
- Power, energy
- Power is the rate of energy use; energy is power over time.
- Frequency
- Clock cycles per second.
- Clock gating, power gating, retention
- Stop selected switching; change a domain's supply; keep its state.
- RSMU
- Remote System Management Unit, as supplied for this guide; unconfirmed for any named platform.
- S, C, P, D states
- System, processor idle, performance and device states: different scopes.
- CPPC
- Collaborative Processor Performance Control: an abstract performance scale.
- Z state
- Vendor and platform terminology; only the Ryzen 7040 Z8 overview is sourced here.
- Modern Standby,
s2idle, S0i3 - Windows low-power idle in S0; Linux suspend-to-idle; a platform hardware low-power term.
- Residency
- Time actually spent in a state, from a named source over a known interval.
- Wake-on-LAN
- A NIC asking the system to wake on a matching packet, if supported and armed.
Power reference and original labs: the earlier, longer page (PM-01 to PM-07, the twelve-chapter article, evidence lessons, C++ lab). Optional depth; nothing above depends on it.